aboutsummaryrefslogtreecommitdiff
path: root/src/components/AncestryBar.vue
diff options
context:
space:
mode:
authorTerry Truong <terry06890@gmail.com>2022-05-27 19:37:25 +1000
committerTerry Truong <terry06890@gmail.com>2022-05-27 19:37:25 +1000
commit422e43532b36c8cca387e0a64a280138593bb22a (patch)
treef7a64ba465e4e2c1dd0092e8cbb636a8eec944ed /src/components/AncestryBar.vue
parent60f4e7b296d4b4dfafabcbabd670649277612170 (diff)
Use static-layout for ancestry-bar and tutorial-pane
Diffstat (limited to 'src/components/AncestryBar.vue')
-rw-r--r--src/components/AncestryBar.vue50
1 files changed, 11 insertions, 39 deletions
diff --git a/src/components/AncestryBar.vue b/src/components/AncestryBar.vue
index 66c1b13..8f31900 100644
--- a/src/components/AncestryBar.vue
+++ b/src/components/AncestryBar.vue
@@ -8,57 +8,29 @@ import type {TolMap} from '../tol';
// Displays a sequence of nodes, representing ancestors from a tree-of-life root to a currently-active root
export default defineComponent({
props: {
- // For absolute positioning
- pos: {type: Array as unknown as PropType<[number,number]>, required: true},
- dims: {type: Array as unknown as PropType<[number,number]>, required: true},
- // The ancestors to display
nodes: {type: Array as PropType<LayoutNode[]>, required: true},
+ vert: {type: Boolean, default: false},
// Other
tolMap: {type: Object as PropType<TolMap>, required: true},
lytOpts: {type: Object as PropType<LayoutOptions>, required: true},
uiOpts: {type: Object, required: true},
},
computed: {
- wideArea(){
- return this.dims[0] >= this.dims[1];
- },
- tileSz(){
- return (this.wideArea ? this.dims[1] : this.dims[0]) -
- (this.uiOpts.ancestryTileMargin * 2) - this.uiOpts.scrollGap;
- },
usedNodes(){ // Childless versions of 'nodes' used to parameterise <tile>
return this.nodes.map(n => {
let newNode = new LayoutNode(n.name, []);
- newNode.dims = [this.tileSz, this.tileSz];
+ newNode.dims = [this.uiOpts.ancestryBarImgSz, this.uiOpts.ancestryBarImgSz];
return newNode;
});
},
- overflowing(){
- let len = this.uiOpts.ancestryTileMargin +
- (this.tileSz + this.uiOpts.ancestryTileMargin) * this.nodes.length;
- return len > (this.wideArea ? this.dims[0] : this.dims[1]);
- },
- width(){
- return this.dims[0] + (this.wideArea || this.overflowing ? 0 : -this.uiOpts.scrollGap);
- },
- height(){
- return this.dims[1] + (!this.wideArea || this.overflowing ? 0 : -this.uiOpts.scrollGap);
- },
styles(): Record<string,string> {
return {
- position: 'absolute',
- left: this.pos[0] + 'px',
- top: this.pos[1] + 'px',
- width: this.width + 'px',
- height: this.height + 'px',
- overflowX: this.wideArea ? 'auto' : 'hidden',
- overflowY: this.wideArea ? 'hidden' : 'auto',
- // Extra padding for scrollbar inclusion
- paddingRight: (this.overflowing && !this.wideArea ? this.uiOpts.scrollGap : 0) + 'px',
- paddingBottom: (this.overflowing && this.wideArea ? this.uiOpts.scrollGap : 0) + 'px',
+ overflowX: this.vert ? 'hidden' : 'auto',
+ overflowY: this.vert ? 'auto' : 'hidden',
+ maxHeight: '100vh',
// For child layout
display: 'flex',
- flexDirection: this.wideArea ? 'row' : 'column',
+ flexDirection: this.vert ? 'column' : 'row',
gap: this.uiOpts.ancestryTileMargin + 'px',
padding: this.uiOpts.ancestryTileMargin + 'px',
// Other
@@ -71,7 +43,7 @@ export default defineComponent({
nodes(){
setTimeout(() => this.scrollToEnd(), 0); // Without timeout, seems to run before new tiles are added
},
- wideArea(){
+ vert(){
setTimeout(() => this.scrollToEnd(), 0);
},
},
@@ -84,15 +56,15 @@ export default defineComponent({
},
onWheelEvt(evt: WheelEvent){
// Possibly convert vertical scroll to horizontal
- if (this.wideArea && Math.abs(evt.deltaX) < Math.abs(evt.deltaY)){
+ if (!this.vert && Math.abs(evt.deltaX) < Math.abs(evt.deltaY)){
this.$el.scrollLeft -= (evt.deltaY > 0 ? 30 : -30);
}
},
scrollToEnd(){
- if (this.wideArea){
- this.$el.scrollLeft = this.$el.scrollWidth;
- } else {
+ if (this.vert){
this.$el.scrollTop = this.$el.scrollHeight;
+ } else {
+ this.$el.scrollLeft = this.$el.scrollWidth;
}
},
},