From 34e34b9620d88b5d76b87a4bbcd473c2fc6002a9 Mon Sep 17 00:00:00 2001 From: Terry Truong Date: Mon, 28 Mar 2022 11:49:12 +1100 Subject: Rename Settings to SettingsPane, and ParentBar to AncestryBar --- src/App.vue | 97 ++++++++++++++++----------------- src/components/AncestryBar.vue | 74 +++++++++++++++++++++++++ src/components/ParentBar.vue | 74 ------------------------- src/components/Settings.vue | 117 ---------------------------------------- src/components/SettingsPane.vue | 117 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 240 insertions(+), 239 deletions(-) create mode 100644 src/components/AncestryBar.vue delete mode 100644 src/components/ParentBar.vue delete mode 100644 src/components/Settings.vue create mode 100644 src/components/SettingsPane.vue (limited to 'src') diff --git a/src/App.vue b/src/App.vue index 45f7a03..0eacbe4 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,13 +1,14 @@ @@ -499,21 +500,9 @@ export default defineComponent({ @leaf-clicked="onInnerLeafClicked" @header-clicked="onInnerHeaderClicked" @leaf-click-held="onInnerLeafClickHeld" @header-click-held="onInnerHeaderClickHeld" @info-icon-clicked="onInnerInfoIconClicked"/> - - - - - - - + @@ -539,10 +528,22 @@ export default defineComponent({ + + + + + +
- + +import {defineComponent, PropType} from 'vue'; +import {LayoutNode} from '../lib'; +import TileImg from './TileImg.vue' + +export default defineComponent({ + props: { + pos: {type: Array as unknown as PropType<[number,number]>, required: true}, + dims: {type: Array as unknown as PropType<[number,number]>, required: true}, + nodes: {type: Array as PropType, required: true}, + options: {type: Object, required: true}, + }, + data(){ + return { + tileMargin: 5, //px (gap between detached-ancestor tiles) + scrollBarOffset: 10, //px (gap for scrollbar, used to prevent overlap with tiles) + }; + }, + computed: { + wideArea(){ + return this.dims[0] >= this.dims[1]; + }, + tileSz(){ + return (this.wideArea ? this.dims[1] : this.dims[0]) - (this.tileMargin * 2) - this.scrollBarOffset; + }, + hasOverflow(){ + let len = this.tileMargin + (this.tileSz + this.tileMargin) * this.nodes.length; + return len > (this.wideArea ? this.dims[0] : this.dims[1]); + }, + styles(): Record { + return { + position: 'absolute', + left: this.pos[0] + 'px', + top: this.pos[1] + 'px', + width: (this.dims[0] + (this.wideArea || this.hasOverflow ? 0 : -this.scrollBarOffset)) + 'px', + height: (this.dims[1] + (!this.wideArea || this.hasOverflow ? 0 : -this.scrollBarOffset)) + 'px', + overflowX: this.wideArea ? 'auto' : 'hidden', + overflowY: this.wideArea ? 'hidden' : 'auto', + // Extra padding for scrollbar inclusion + paddingRight: (this.hasOverflow && !this.wideArea ? this.scrollBarOffset : 0) + 'px', + paddingBottom: (this.hasOverflow && this.wideArea ? this.scrollBarOffset : 0) + 'px', + // For child layout + display: 'flex', + flexDirection: this.wideArea ? 'row' : 'column', + gap: this.tileMargin + 'px', + padding: this.tileMargin + 'px', + // + backgroundColor: '#44403c', + boxShadow: this.options.shadowNormal, + }; + }, + }, + methods: { + onClick(node: LayoutNode){ + this.$emit('detached-ancestor-clicked', node); + }, + onInnerInfoIconClicked(data: LayoutNode){ + this.$emit('info-icon-clicked', data); + } + }, + components: { + TileImg, + }, + emits: ['detached-ancestor-clicked', 'info-icon-clicked'], +}); + + +
+ +
+ diff --git a/src/components/ParentBar.vue b/src/components/ParentBar.vue deleted file mode 100644 index 0f73008..0000000 --- a/src/components/ParentBar.vue +++ /dev/null @@ -1,74 +0,0 @@ - - - diff --git a/src/components/Settings.vue b/src/components/Settings.vue deleted file mode 100644 index 4fa3e03..0000000 --- a/src/components/Settings.vue +++ /dev/null @@ -1,117 +0,0 @@ - - - diff --git a/src/components/SettingsPane.vue b/src/components/SettingsPane.vue new file mode 100644 index 0000000..4fa3e03 --- /dev/null +++ b/src/components/SettingsPane.vue @@ -0,0 +1,117 @@ + + + -- cgit v1.2.3