From fd2e1acdf001f23a5e87528a13361eb7828fa62b Mon Sep 17 00:00:00 2001 From: phphe Date: Sun, 13 Dec 2020 15:53:48 +0800 Subject: [PATCH 01/23] feat(all): update for vue3 --- package.json | 16 +++++++--------- src/App.vue | 16 ++++++++++------ src/components/Tree.vue | 21 +++++++++++---------- src/examples/Base.vue | 6 +++--- src/examples/CustomTrigger.vue | 2 +- src/examples/DragTransition.vue | 2 +- src/examples/DraggablePro.vue | 8 ++++---- src/examples/InScrollBox.vue | 2 +- src/examples/NodeBack.vue | 2 +- src/examples/RTLTree.vue | 2 +- src/examples/ThirdCase.vue | 2 +- src/examples/direct.html | 2 +- src/main.js | 11 ++--------- src/plugins/check.js | 10 +++++----- src/plugins/draggable/Draggable.vue | 7 ++++--- src/plugins/fold.js | 12 ++++++------ 16 files changed, 59 insertions(+), 62 deletions(-) diff --git a/package.json b/package.json index 6553c09..59cab67 100644 --- a/package.json +++ b/package.json @@ -37,25 +37,23 @@ "vue-runtime-helpers": "^1.1.2" }, "devDependencies": { + "@vue/cli-plugin-babel": "~4.5.0", + "@vue/cli-service": "~4.5.0", + "@vue/compiler-sfc": "^3.0.0", + "pug": "^3.0.0", + "pug-plain-loader": "^1.0.0", "@vue/babel-preset-app": "^4.2.3", - "@vue/cli-plugin-babel": "^4.1.0", - "@vue/cli-service": "^4.1.0", "commitizen": "^4.1.2", "conventional-changelog-cli": "^2.0.34", "cz-conventional-changelog": "^3.2.0", - "pug": "^2.0.4", - "pug-plain-loader": "^1.0.0", "rogo": "^2.0.2", "rollup-plugin-postcss": "^2.4.1", "rollup-plugin-vue": "^5.1.1", - "sass": "^1.23.7", - "sass-loader": "^8.0.0", "standard-version": "^8.0.0", - "vue": "^2.6.10", - "vue-template-compiler": "^2.6.10" + "vue": "^3.0.0" }, "peerDependencies": { - "vue": "^2.6.10", + "vue": "^3.0.0", "vue-property-decorator": "^8.4.0" }, "license": "MIT", diff --git a/src/App.vue b/src/App.vue index 6d5b2e9..8ba098d 100644 --- a/src/App.vue +++ b/src/App.vue @@ -10,7 +10,7 @@ InScrollBox.mr CustomTrigger.mr RTLTree.mr - //- DraggableProTree.mr + DraggableProTree.mr diff --git a/src/components/Tree.vue b/src/components/Tree.vue index 8dd7732..b51ee71 100644 --- a/src/components/Tree.vue +++ b/src/components/Tree.vue @@ -14,10 +14,8 @@ const template = function (h) { const transitionComponent = this.foldingTransition || 'transition' const slotDefault = () => { const original = () => { - if (this.$scopedSlots.default) { - return this.$scopedSlots.default({node, index, path, tree: this}) - } else if (this.$slots.default) { - return this.$slots.default + if (this.$slots.default) { + return this.$slots.default({node, index, path, tree: this}) } else { return node.text } @@ -80,6 +78,10 @@ const Tree = { trees, treeClass: '', treeId: hp.randString(), + // hooks of render + blockHeader: null, + blockFooter: null, + overrideSlotDefault: null, } }, // computed: {}, @@ -132,19 +134,18 @@ const Tree = { }, created() { // - const updateRootNode = () => { this.$set(this.rootNode, 'children', this.treeData) } + const updateRootNode = () => { this.rootNode.children = this.treeData } this.$watch('rootNode', updateRootNode, {immediate: true}) this.$watch('treeData', updateRootNode, {immediate: true}) }, mounted() { // this.treeId = hp.randString() - this.$set(this.trees, this.treeId, this) - this.$once('hook:beforeDestroy', () => { - this.$delete(this.trees, this.treeId) - }) + this.trees[this.treeId] = this + }, + beforeUnmount() { + delete this.trees[this.treeId] }, - // beforeDestroy() {}, // mixPlugins(plugins) { diff --git a/src/examples/Base.vue b/src/examples/Base.vue index 406bf24..42f9ab9 100644 --- a/src/examples/Base.vue +++ b/src/examples/Base.vue @@ -4,9 +4,9 @@ div h2 Base .base-trees.flex Tree.base-tree(:value="treeData1" ref="tree1") - //- div(slot-scope="{node, index}") {{node}} + template(v-slot:default="{node, index}") {{node.text}} Tree.base-tree.ml(:value="treeData1" ref="tree2") - div(slot-scope="{node, index, path, tree}") + template(v-slot:default="{node, index, path, tree}") b(v-if="node.children && node.children.length > 0" @click="tree.toggleFold(node, path)") {{node.$folded ? '+' : '-'}}  input(type="checkbox" :checked="node.$checked" @change="tree.toggleCheck(node, path)") |   @@ -14,7 +14,7 @@ div .ml b Fola all after mounted: Tree.base-tree(:value="treeData2" ref="tree3" foldAllAfterMounted) - div(slot-scope="{node, index, path, tree}") + template(v-slot:default="{node, index, path, tree}") b(v-if="node.children && node.children.length > 0" @click="tree.toggleFold(node, path)") {{node.$folded ? '+' : '-'}}  input(type="checkbox" :checked="node.$checked" @change="tree.toggleCheck(node, path)") |   diff --git a/src/examples/CustomTrigger.vue b/src/examples/CustomTrigger.vue index 115beb0..79a0720 100644 --- a/src/examples/CustomTrigger.vue +++ b/src/examples/CustomTrigger.vue @@ -3,7 +3,7 @@ .CustomTrigger h2 Custom Trigger Tree(:value="treeData" ref="tree" triggerClass="trigger") - div(slot-scope="{node, index, path, tree}") + template(v-slot:default="{node, index, path, tree}") button.trigger drag div(style="width:.5em;height:1em;display:inline-block;") b(v-if="node.children && node.children.length > 0" @click="tree.toggleFold(node, path)") {{node.$folded ? '+' : '-'}}  diff --git a/src/examples/DragTransition.vue b/src/examples/DragTransition.vue index b6df328..bd49514 100644 --- a/src/examples/DragTransition.vue +++ b/src/examples/DragTransition.vue @@ -4,7 +4,7 @@ h2 del Drag Transition(Deprecated) Tree(:value="treeData" ref="tree") - div(slot-scope="{node, index, path, tree}") + template(v-slot:default="{node, index, path, tree}") b(v-if="node.children && node.children.length > 0" @click="tree.toggleFold(node, path)") {{node.$folded ? '+' : '-'}}  input(type="checkbox" :checked="node.$checked" @change="tree.toggleCheck(node, path)") |   diff --git a/src/examples/DraggablePro.vue b/src/examples/DraggablePro.vue index 3b4c623..210b9d5 100644 --- a/src/examples/DraggablePro.vue +++ b/src/examples/DraggablePro.vue @@ -4,7 +4,7 @@ h2 Draggable Pro (cross tree) .flex Tree.ml(:value="treeData" ref="tree" triggerClass="trigger" crossTree) - div(slot-scope="{node, index, path, tree}") + template(v-slot:default="{node, index, path, tree}") button.trigger drag div(style="width:.5em;height:1em;display:inline-block;") b(v-if="node.children && node.children.length > 0" @click="tree.toggleFold(node, path)") {{node.$folded ? '+' : '-'}}  @@ -16,7 +16,7 @@ Tree(:value="treeDataEmpty" ref="tree4" crossTree) hr Tree(:value="treeData2" ref="tree" triggerClass="trigger" crossTree) - div(slot-scope="{node, index, path, tree}") + template(v-slot:default="{node, index, path, tree}") button.trigger drag div(style="width:.5em;height:1em;display:inline-block;") b(v-if="node.children && node.children.length > 0" @click="tree.toggleFold(node, path)") {{node.$folded ? '+' : '-'}}  @@ -26,7 +26,7 @@ .ml h3 Clone when drag Tree(:value="treeData3" ref="tree" triggerClass="trigger" crossTree cloneWhenDrag) - div(slot-scope="{node, index, path, tree}") + template(v-slot:default="{node, index, path, tree}") button.trigger drag div(style="width:.5em;height:1em;display:inline-block;") b(v-if="node.children && node.children.length > 0" @click="tree.toggleFold(node, path)") {{node.$folded ? '+' : '-'}}  @@ -36,7 +36,7 @@ .ml h3 Max level (2) Tree(:value="treeData3" ref="tree" triggerClass="trigger" crossTree :maxLevel="2") - div(slot-scope="{node, index, path, tree}") + template(v-slot:default="{node, index, path, tree}") button.trigger drag div(style="width:.5em;height:1em;display:inline-block;") b(v-if="node.children && node.children.length > 0" @click="tree.toggleFold(node, path)") {{node.$folded ? '+' : '-'}}  diff --git a/src/examples/InScrollBox.vue b/src/examples/InScrollBox.vue index e824f73..bdaccaf 100644 --- a/src/examples/InScrollBox.vue +++ b/src/examples/InScrollBox.vue @@ -4,7 +4,7 @@ h2 In scroll box .scrollbox(ref="scrollbox") Tree(:value="treeData" ref="tree" edgeScroll @after-move="afterMove") - div(slot-scope="{node, index, path, tree}") + template(v-slot:default="{node, index, path, tree}") b(v-if="node.children && node.children.length > 0" @click="tree.toggleFold(node, path)") {{node.$folded ? '+' : '-'}}  input(type="checkbox" :checked="node.$checked" @change="tree.toggleCheck(node, path)") |   diff --git a/src/examples/NodeBack.vue b/src/examples/NodeBack.vue index 2e20fee..5458842 100644 --- a/src/examples/NodeBack.vue +++ b/src/examples/NodeBack.vue @@ -3,7 +3,7 @@ div h2 Node Back Tree.tree-with-nodeba-back(:value="treeData" ref="tree") - div(slot-scope="{node, index, path, tree}") + template(v-slot:default="{node, index, path, tree}") b(v-if="node.children && node.children.length > 0" @click="tree.toggleFold(node, path)") {{node.$folded ? '+' : '-'}}  input(type="checkbox" :checked="node.$checked" @change="tree.toggleCheck(node, path)") |   diff --git a/src/examples/RTLTree.vue b/src/examples/RTLTree.vue index ffbfc10..35a3bda 100644 --- a/src/examples/RTLTree.vue +++ b/src/examples/RTLTree.vue @@ -3,7 +3,7 @@ .CustomTrigger h2 RTL Tree(:value="treeData" ref="tree" triggerClass="trigger" rtl) - div(slot-scope="{node, index, path, tree}") + template(v-slot:default="{node, index, path, tree}") button.trigger drag div(style="width:.5em;height:1em;display:inline-block;") b(v-if="node.children && node.children.length > 0" @click="tree.toggleFold(node, path)") {{node.$folded ? '+' : '-'}}  diff --git a/src/examples/ThirdCase.vue b/src/examples/ThirdCase.vue index 1707981..88520a6 100644 --- a/src/examples/ThirdCase.vue +++ b/src/examples/ThirdCase.vue @@ -3,7 +3,7 @@ div h2 Third Case Tree(:value="treeData" ref="tree" :rootNode="{$droppable: false}") - div(slot-scope="{node, index, path, tree}") + template(v-slot:default="{node, index, path, tree}") b(v-if="node.children && node.children.length > 0" @click="tree.toggleFold(node, path)") {{node.$folded ? '+' : '-'}}  input(type="checkbox" :checked="node.$checked" @change="tree.toggleCheck(node, path)") |   diff --git a/src/examples/direct.html b/src/examples/direct.html index b2738d1..41b7df4 100644 --- a/src/examples/direct.html +++ b/src/examples/direct.html @@ -7,7 +7,7 @@
-
+
{{props.node.$folded ? '+' : '-'}}    {{props.node.text}} diff --git a/src/main.js b/src/main.js index 7d4fc2c..01433bc 100644 --- a/src/main.js +++ b/src/main.js @@ -1,11 +1,4 @@ -// The Vue build version to load with the `import` command -// (runtime-only or standalone) has been set in webpack.base.conf with an alias. -import Vue from 'vue' +import { createApp } from 'vue' import App from './App.vue' -Vue.config.productionTip = false - -/* eslint-disable no-new */ -new Vue({ - render: h => h(App), -}).$mount('#app') +createApp(App).mount('#app') diff --git a/src/plugins/check.js b/src/plugins/check.js index 5960e94..ad82cbf 100644 --- a/src/plugins/check.js +++ b/src/plugins/check.js @@ -9,25 +9,25 @@ export default { const reversedParents = nodes.slice(0, nodes.length - 1) reversedParents.reverse() for (const parent of reversedParents) { - this.$set(parent, '$checked', parent.children.every(child => child.$checked)) + parent['$checked'] = parent.children.every(child => child.$checked) } // update children if (node.children && node.children.length > 0) { ut.walkTreeData(node.children, (childNode) => { - this.$set(childNode, '$checked', node.$checked) + childNode['$checked'] = node.$checked }) } }, check(node, path) { - this.$set(node, '$checked', true) + node['$checked'] = true this.afterCheckChanged(node, path) }, uncheck(node, path) { - this.$set(node, '$checked', false) + node['$checked'] = false this.afterCheckChanged(node, path) }, toggleCheck(node, path) { - this.$set(node, '$checked', !node.$checked) + node['$checked'] = !node.$checked this.afterCheckChanged(node, path) }, }, diff --git a/src/plugins/draggable/Draggable.vue b/src/plugins/draggable/Draggable.vue index 6d26674..2ffcb86 100644 --- a/src/plugins/draggable/Draggable.vue +++ b/src/plugins/draggable/Draggable.vue @@ -26,6 +26,7 @@ export default { edgeScrollSpecifiedContainerY: {}, // HTMLElement || ((store) => HTMLElement) preventTextSelection: {type: Boolean, default: true}, }, + emits: ['afterPlaceholderCreated', 'after-placeholder-created', 'before-first-move', 'drag', 'he-tree-drag', 'after-move', 'he-tree-before-drop', 'input', 'change', 'drop', 'he-tree-drop'], // components: {}, data() { return { @@ -292,7 +293,7 @@ export default { targetSiblings = targetTree.treeData } else { if (!targetParent.children) { - this.$set(targetParent, 'children', []) + targetParent['children'] = [] } targetSiblings = targetParent.children } @@ -339,8 +340,8 @@ export default { +export default Tree \ No newline at end of file diff --git a/src/index.js b/src/index.js index 5972424..0cd216e 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,5 @@ -export {default as Tree} from './components/Tree.vue' +export {default as Tree} from './components/Tree.js' export {default as Fold, foldAll, unfoldAll} from './plugins/fold.js' export {default as Check} from './plugins/check.js' -export {default as Draggable} from './plugins/draggable/Draggable.vue' +export {default as Draggable} from './plugins/draggable/Draggable_vue.js' export {cloneTreeData, walkTreeData, getPureTreeData} from './utils.js' diff --git a/src/plugins/draggable/Draggable_vue.css b/src/plugins/draggable/Draggable_vue.css new file mode 100644 index 0000000..35c5f06 --- /dev/null +++ b/src/plugins/draggable/Draggable_vue.css @@ -0,0 +1,10 @@ +.he-tree .tree-placeholder{ +} +.he-tree .tree-placeholder-node{ + background: #ddf2f9; + border: 1px dashed #00d9ff; + height: 20px; +} +.he-tree .dragging .tree-node-back:hover{ + background-color: inherit; +} \ No newline at end of file diff --git a/src/plugins/draggable/Draggable.vue b/src/plugins/draggable/Draggable_vue.js similarity index 98% rename from src/plugins/draggable/Draggable.vue rename to src/plugins/draggable/Draggable_vue.js index 2ffcb86..e95dd52 100644 --- a/src/plugins/draggable/Draggable.vue +++ b/src/plugins/draggable/Draggable_vue.js @@ -1,7 +1,7 @@ - - - From 2920a3489fd22e1ba687f67fa0005bbc1539cd6d Mon Sep 17 00:00:00 2001 From: phphe Date: Sun, 13 Dec 2020 22:10:35 +0800 Subject: [PATCH 07/23] docs(example): fix import path in example --- src/examples/Base.vue | 4 ++-- src/examples/CustomTrigger.vue | 4 ++-- src/examples/DragTransition.vue | 4 ++-- src/examples/DraggablePro.vue | 4 ++-- src/examples/InScrollBox.vue | 4 ++-- src/examples/NodeBack.vue | 4 ++-- src/examples/RTLTree.vue | 4 ++-- src/examples/ThirdCase.vue | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/examples/Base.vue b/src/examples/Base.vue index 42f9ab9..5a66b76 100644 --- a/src/examples/Base.vue +++ b/src/examples/Base.vue @@ -23,10 +23,10 @@ div