chore: 🤖 add code format tool
This commit is contained in:
29
.eslintrc
Normal file
29
.eslintrc
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"root": true,
|
||||||
|
"env": {
|
||||||
|
"node": true
|
||||||
|
},
|
||||||
|
"extends": [
|
||||||
|
"plugin:vue/essential",
|
||||||
|
"plugin:prettier/recommended",
|
||||||
|
"eslint:recommended"
|
||||||
|
],
|
||||||
|
"rules": {
|
||||||
|
"prettier/prettier": "error",
|
||||||
|
"no-console": "warn"
|
||||||
|
},
|
||||||
|
"parserOptions": {
|
||||||
|
"parser": "babel-eslint"
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"files": [
|
||||||
|
"**/__tests__/*.{j,t}s?(x)",
|
||||||
|
"**/tests/unit/**/*.spec.{j,t}s?(x)"
|
||||||
|
],
|
||||||
|
"env": {
|
||||||
|
"jest": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@@ -1,4 +1,3 @@
|
|||||||
hooks:
|
hooks:
|
||||||
pre-commit:
|
pre-commit: npm run lint-staged
|
||||||
- npm run standard
|
|
||||||
commit-msg: commitlint -E HUSKY_GIT_PARAMS
|
commit-msg: commitlint -E HUSKY_GIT_PARAMS
|
@@ -1,5 +1,3 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
presets: [
|
presets: ['@vue/cli-plugin-babel/preset']
|
||||||
'@vue/cli-plugin-babel/preset'
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
1330
package-lock.json
generated
1330
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
35
package.json
35
package.json
@@ -9,6 +9,7 @@
|
|||||||
"test:unit": "vue-cli-service test:unit --watch",
|
"test:unit": "vue-cli-service test:unit --watch",
|
||||||
"test:coverage": "vue-cli-service test:unit --coverage",
|
"test:coverage": "vue-cli-service test:unit --coverage",
|
||||||
"lint": "vue-cli-service lint",
|
"lint": "vue-cli-service lint",
|
||||||
|
"lint-staged": "lint-staged",
|
||||||
"commit": "npx git-cz",
|
"commit": "npx git-cz",
|
||||||
"prepublish": "npm run build"
|
"prepublish": "npm run build"
|
||||||
},
|
},
|
||||||
@@ -23,38 +24,22 @@
|
|||||||
"babel-eslint": "^10.0.3",
|
"babel-eslint": "^10.0.3",
|
||||||
"core-js": "^3.4.3",
|
"core-js": "^3.4.3",
|
||||||
"eslint": "^5.16.0",
|
"eslint": "^5.16.0",
|
||||||
|
"eslint-config-prettier": "^6.10.0",
|
||||||
|
"eslint-plugin-prettier": "^3.1.2",
|
||||||
"eslint-plugin-vue": "^5.0.0",
|
"eslint-plugin-vue": "^5.0.0",
|
||||||
|
"husky": "^4.2.1",
|
||||||
"jest-serializer-vue": "^2.0.2",
|
"jest-serializer-vue": "^2.0.2",
|
||||||
"less": "^3.10.3",
|
"less": "^3.10.3",
|
||||||
"less-loader": "^5.0.0",
|
"less-loader": "^5.0.0",
|
||||||
|
"lint-staged": "^10.0.4",
|
||||||
|
"prettier": "^1.19.1",
|
||||||
|
"prettier-eslint-cli": "^5.0.0",
|
||||||
"vue": "^2.6.10",
|
"vue": "^2.6.10",
|
||||||
"vue-template-compiler": "^2.6.10"
|
"vue-template-compiler": "^2.6.10"
|
||||||
},
|
},
|
||||||
"eslintConfig": {
|
"lint-staged": {
|
||||||
"root": true,
|
"**/**.{js,json,pcss,md,vue}": [
|
||||||
"env": {
|
"prettier --write"
|
||||||
"node": true
|
|
||||||
},
|
|
||||||
"extends": [
|
|
||||||
"plugin:vue/essential",
|
|
||||||
"eslint:recommended"
|
|
||||||
],
|
|
||||||
"rules": {
|
|
||||||
"no-console": "warn"
|
|
||||||
},
|
|
||||||
"parserOptions": {
|
|
||||||
"parser": "babel-eslint"
|
|
||||||
},
|
|
||||||
"overrides": [
|
|
||||||
{
|
|
||||||
"files": [
|
|
||||||
"**/__tests__/*.{j,t}s?(x)",
|
|
||||||
"**/tests/unit/**/*.spec.{j,t}s?(x)"
|
|
||||||
],
|
|
||||||
"env": {
|
|
||||||
"jest": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"browserslist": [
|
"browserslist": [
|
||||||
|
15
prettier.config.js
Normal file
15
prettier.config.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
module.exports = {
|
||||||
|
printWidth: 100,
|
||||||
|
tabWidth: 2,
|
||||||
|
useTabs: false,
|
||||||
|
semi: false,
|
||||||
|
singleQuote: true,
|
||||||
|
jsxSingleQuote: true,
|
||||||
|
bracketSpacing: true,
|
||||||
|
jsxBracketSameLine: false,
|
||||||
|
rangeStart: 0,
|
||||||
|
rangeEnd: Infinity,
|
||||||
|
requirePragma: false,
|
||||||
|
insertPragma: false,
|
||||||
|
htmlWhitespaceSensitivity: 'css'
|
||||||
|
}
|
@@ -1,4 +1,4 @@
|
|||||||
import {traverseTree} from './tools'
|
import { traverseTree } from './tools'
|
||||||
/**
|
/**
|
||||||
* Tree data struct
|
* Tree data struct
|
||||||
* Created by ayou on 2017/7/20.
|
* Created by ayou on 2017/7/20.
|
||||||
@@ -11,7 +11,7 @@ import {traverseTree} from './tools'
|
|||||||
*/
|
*/
|
||||||
export class TreeNode {
|
export class TreeNode {
|
||||||
constructor(data) {
|
constructor(data) {
|
||||||
const {id, isLeaf} = data
|
const { id, isLeaf } = data
|
||||||
this.id = typeof id === 'undefined' ? new Date().valueOf() : id
|
this.id = typeof id === 'undefined' ? new Date().valueOf() : id
|
||||||
this.parent = null
|
this.parent = null
|
||||||
this.children = null
|
this.children = null
|
||||||
@@ -149,7 +149,7 @@ export class TreeNode {
|
|||||||
|
|
||||||
export class Tree {
|
export class Tree {
|
||||||
constructor(data) {
|
constructor(data) {
|
||||||
this.root = new TreeNode({name: 'root', isLeaf: false, id: 0})
|
this.root = new TreeNode({ name: 'root', isLeaf: false, id: 0 })
|
||||||
this.initNode(this.root, data)
|
this.initNode(this.root, data)
|
||||||
return this.root
|
return this.root
|
||||||
}
|
}
|
||||||
|
@@ -4,11 +4,11 @@
|
|||||||
v-if="model.name !== 'root'"
|
v-if="model.name !== 'root'"
|
||||||
:id="model.id"
|
:id="model.id"
|
||||||
class="vtl-node"
|
class="vtl-node"
|
||||||
:class="{'vtl-leaf-node': model.isLeaf, 'vtl-tree-node': !model.isLeaf}"
|
:class="{ 'vtl-leaf-node': model.isLeaf, 'vtl-tree-node': !model.isLeaf }"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="vtl-border vtl-up"
|
class="vtl-border vtl-up"
|
||||||
:class="{'vtl-active': isDragEnterUp}"
|
:class="{ 'vtl-active': isDragEnterUp }"
|
||||||
@drop="dropBefore"
|
@drop="dropBefore"
|
||||||
@dragenter="dragEnterUp"
|
@dragenter="dragEnterUp"
|
||||||
@dragover="dragOverUp"
|
@dragover="dragOverUp"
|
||||||
@@ -27,34 +27,17 @@
|
|||||||
@mouseout="mouseOut"
|
@mouseout="mouseOut"
|
||||||
@click.stop="click"
|
@click.stop="click"
|
||||||
>
|
>
|
||||||
<span
|
<span class="vtl-caret vtl-is-small" v-if="model.children && model.children.length > 0">
|
||||||
class="vtl-caret vtl-is-small"
|
<i class="vtl-icon" :class="caretClass" @click.prevent.stop="toggle"></i>
|
||||||
v-if="model.children && model.children.length > 0"
|
|
||||||
>
|
|
||||||
<i
|
|
||||||
class="vtl-icon"
|
|
||||||
:class="caretClass"
|
|
||||||
@click.prevent.stop="toggle"
|
|
||||||
></i>
|
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<span v-if="model.isLeaf">
|
<span v-if="model.isLeaf">
|
||||||
<slot
|
<slot name="leafNodeIcon" :expanded="expanded" :model="model" :root="rootNode">
|
||||||
name="leafNodeIcon"
|
|
||||||
:expanded="expanded"
|
|
||||||
:model="model"
|
|
||||||
:root="rootNode"
|
|
||||||
>
|
|
||||||
<i class="vtl-icon vtl-menu-icon vtl-icon-file"></i>
|
<i class="vtl-icon vtl-menu-icon vtl-icon-file"></i>
|
||||||
</slot>
|
</slot>
|
||||||
</span>
|
</span>
|
||||||
<span v-else>
|
<span v-else>
|
||||||
<slot
|
<slot name="treeNodeIcon" :expanded="expanded" :model="model" :root="rootNode">
|
||||||
name="treeNodeIcon"
|
|
||||||
:expanded="expanded"
|
|
||||||
:model="model"
|
|
||||||
:root="rootNode"
|
|
||||||
>
|
|
||||||
<i class="vtl-icon vtl-menu-icon vtl-icon-folder"></i>
|
<i class="vtl-icon vtl-menu-icon vtl-icon-folder"></i>
|
||||||
</slot>
|
</slot>
|
||||||
</span>
|
</span>
|
||||||
@@ -77,12 +60,7 @@
|
|||||||
@click.stop.prevent="addChild(false)"
|
@click.stop.prevent="addChild(false)"
|
||||||
v-if="!model.isLeaf && !model.addTreeNodeDisabled"
|
v-if="!model.isLeaf && !model.addTreeNodeDisabled"
|
||||||
>
|
>
|
||||||
<slot
|
<slot name="addTreeNodeIcon" :expanded="expanded" :model="model" :root="rootNode">
|
||||||
name="addTreeNodeIcon"
|
|
||||||
:expanded="expanded"
|
|
||||||
:model="model"
|
|
||||||
:root="rootNode"
|
|
||||||
>
|
|
||||||
<i class="vtl-icon vtl-icon-folder-plus-e"></i>
|
<i class="vtl-icon vtl-icon-folder-plus-e"></i>
|
||||||
</slot>
|
</slot>
|
||||||
</span>
|
</span>
|
||||||
@@ -91,40 +69,17 @@
|
|||||||
@click.stop.prevent="addChild(true)"
|
@click.stop.prevent="addChild(true)"
|
||||||
v-if="!model.isLeaf && !model.addLeafNodeDisabled"
|
v-if="!model.isLeaf && !model.addLeafNodeDisabled"
|
||||||
>
|
>
|
||||||
<slot
|
<slot name="addLeafNodeIcon" :expanded="expanded" :model="model" :root="rootNode">
|
||||||
name="addLeafNodeIcon"
|
|
||||||
:expanded="expanded"
|
|
||||||
:model="model"
|
|
||||||
:root="rootNode"
|
|
||||||
>
|
|
||||||
<i class="vtl-icon vtl-icon-plus"></i>
|
<i class="vtl-icon vtl-icon-plus"></i>
|
||||||
</slot>
|
</slot>
|
||||||
</span>
|
</span>
|
||||||
<span
|
<span title="edit" @click.stop.prevent="setEditable" v-if="!model.editNodeDisabled">
|
||||||
title="edit"
|
<slot name="editNodeIcon" :expanded="expanded" :model="model" :root="rootNode">
|
||||||
@click.stop.prevent="setEditable"
|
|
||||||
v-if="!model.editNodeDisabled"
|
|
||||||
>
|
|
||||||
<slot
|
|
||||||
name="editNodeIcon"
|
|
||||||
:expanded="expanded"
|
|
||||||
:model="model"
|
|
||||||
:root="rootNode"
|
|
||||||
>
|
|
||||||
<i class="vtl-icon vtl-icon-edit"></i>
|
<i class="vtl-icon vtl-icon-edit"></i>
|
||||||
</slot>
|
</slot>
|
||||||
</span>
|
</span>
|
||||||
<span
|
<span title="delete" @click.stop.prevent="delNode" v-if="!model.delNodeDisabled">
|
||||||
title="delete"
|
<slot name="delNodeIcon" :expanded="expanded" :model="model" :root="rootNode">
|
||||||
@click.stop.prevent="delNode"
|
|
||||||
v-if="!model.delNodeDisabled"
|
|
||||||
>
|
|
||||||
<slot
|
|
||||||
name="delNodeIcon"
|
|
||||||
:expanded="expanded"
|
|
||||||
:model="model"
|
|
||||||
:root="rootNode"
|
|
||||||
>
|
|
||||||
<i class="vtl-icon vtl-icon-trash"></i>
|
<i class="vtl-icon vtl-icon-trash"></i>
|
||||||
</slot>
|
</slot>
|
||||||
</span>
|
</span>
|
||||||
@@ -134,7 +89,7 @@
|
|||||||
<div
|
<div
|
||||||
v-if="model.children && model.children.length > 0 && expanded"
|
v-if="model.children && model.children.length > 0 && expanded"
|
||||||
class="vtl-border vtl-bottom"
|
class="vtl-border vtl-bottom"
|
||||||
:class="{'vtl-active': isDragEnterBottom}"
|
:class="{ 'vtl-active': isDragEnterBottom }"
|
||||||
@drop="dropAfter"
|
@drop="dropAfter"
|
||||||
@dragenter="dragEnterBottom"
|
@dragenter="dragEnterBottom"
|
||||||
@dragover="dragOverBottom"
|
@dragover="dragOverBottom"
|
||||||
@@ -143,7 +98,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
:class="{'vtl-tree-margin': model.name !== 'root'}"
|
:class="{ 'vtl-tree-margin': model.name !== 'root' }"
|
||||||
v-show="model.name === 'root' || expanded"
|
v-show="model.name === 'root' || expanded"
|
||||||
v-if="isFolder"
|
v-if="isFolder"
|
||||||
>
|
>
|
||||||
@@ -179,8 +134,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {TreeNode} from './Tree.js'
|
import { TreeNode } from './Tree.js'
|
||||||
import {addHandler, removeHandler} from './tools.js'
|
import { addHandler, removeHandler } from './tools.js'
|
||||||
|
|
||||||
let compInOperation = null
|
let compInOperation = null
|
||||||
|
|
||||||
@@ -232,7 +187,7 @@ export default {
|
|||||||
|
|
||||||
treeNodeClass() {
|
treeNodeClass() {
|
||||||
const {
|
const {
|
||||||
model: {dragDisabled, disabled},
|
model: { dragDisabled, disabled },
|
||||||
isDragEnterNode
|
isDragEnterNode
|
||||||
} = this
|
} = this
|
||||||
|
|
||||||
@@ -309,7 +264,7 @@ export default {
|
|||||||
addChild(isLeaf) {
|
addChild(isLeaf) {
|
||||||
const name = isLeaf ? this.defaultLeafNodeName : this.defaultTreeNodeName
|
const name = isLeaf ? this.defaultLeafNodeName : this.defaultTreeNodeName
|
||||||
this.expanded = true
|
this.expanded = true
|
||||||
var node = new TreeNode({name, isLeaf})
|
var node = new TreeNode({ name, isLeaf })
|
||||||
this.model.addChildren(node, true)
|
this.model.addChildren(node, true)
|
||||||
this.rootNode.$emit('add-node', node)
|
this.rootNode.$emit('add-node', node)
|
||||||
},
|
},
|
||||||
@@ -332,7 +287,8 @@ export default {
|
|||||||
return true
|
return true
|
||||||
},
|
},
|
||||||
dragEnter() {
|
dragEnter() {
|
||||||
if (compInOperation.model.id === this.model.id || !compInOperation || this.model.isLeaf) return
|
if (compInOperation.model.id === this.model.id || !compInOperation || this.model.isLeaf)
|
||||||
|
return
|
||||||
this.isDragEnterNode = true
|
this.isDragEnterNode = true
|
||||||
},
|
},
|
||||||
dragLeave() {
|
dragLeave() {
|
||||||
|
12
src/index.js
12
src/index.js
@@ -2,12 +2,12 @@
|
|||||||
* Created by ayou on 17/7/21.
|
* Created by ayou on 17/7/21.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import VueTreeList from "./VueTreeList";
|
import VueTreeList from './VueTreeList'
|
||||||
import { Tree, TreeNode } from "./Tree";
|
import { Tree, TreeNode } from './Tree'
|
||||||
|
|
||||||
VueTreeList.install = Vue => {
|
VueTreeList.install = Vue => {
|
||||||
Vue.component(VueTreeList.name, VueTreeList);
|
Vue.component(VueTreeList.name, VueTreeList)
|
||||||
};
|
}
|
||||||
|
|
||||||
export default VueTreeList;
|
export default VueTreeList
|
||||||
export { Tree, TreeNode, VueTreeList };
|
export { Tree, TreeNode, VueTreeList }
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
var handlerCache
|
var handlerCache
|
||||||
|
|
||||||
export const addHandler = function (element, type, handler) {
|
export const addHandler = function(element, type, handler) {
|
||||||
handlerCache = handler
|
handlerCache = handler
|
||||||
if (element.addEventListener) {
|
if (element.addEventListener) {
|
||||||
element.addEventListener(type, handler, false)
|
element.addEventListener(type, handler, false)
|
||||||
@@ -15,7 +15,7 @@ export const addHandler = function (element, type, handler) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const removeHandler = function (element, type) {
|
export const removeHandler = function(element, type) {
|
||||||
if (element.removeEventListener) {
|
if (element.removeEventListener) {
|
||||||
element.removeEventListener(type, handlerCache, false)
|
element.removeEventListener(type, handlerCache, false)
|
||||||
} else if (element.detachEvent) {
|
} else if (element.detachEvent) {
|
||||||
@@ -26,7 +26,7 @@ export const removeHandler = function (element, type) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// depth first search
|
// depth first search
|
||||||
export const traverseTree = (root) => {
|
export const traverseTree = root => {
|
||||||
var newRoot = {}
|
var newRoot = {}
|
||||||
|
|
||||||
for (var k in root) {
|
for (var k in root) {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
import Vue from 'vue'
|
import Vue from 'vue'
|
||||||
import {mount} from '@vue/test-utils'
|
import { mount } from '@vue/test-utils'
|
||||||
import {Tree, VueTreeList} from '@/index'
|
import { Tree, VueTreeList } from '@/index'
|
||||||
|
|
||||||
describe('Drag', () => {
|
describe('Drag', () => {
|
||||||
let wrapper
|
let wrapper
|
||||||
@@ -36,14 +36,14 @@ describe('Drag', () => {
|
|||||||
pid: 0
|
pid: 0
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
wrapper = mount(VueTreeList, {propsData: {model: new Tree([])}})
|
wrapper = mount(VueTreeList, { propsData: { model: new Tree([]) } })
|
||||||
wrapper.setProps({model: tree})
|
wrapper.setProps({ model: tree })
|
||||||
})
|
})
|
||||||
|
|
||||||
it('drag before', done => {
|
it('drag before', done => {
|
||||||
const $tree2 = wrapper.find('#t2 .vtl-node-main')
|
const $tree2 = wrapper.find('#t2 .vtl-node-main')
|
||||||
const $tree1Up = wrapper.find('#t1 .vtl-up')
|
const $tree1Up = wrapper.find('#t1 .vtl-up')
|
||||||
$tree2.trigger('dragstart', { dataTransfer: { setData: () => {} }})
|
$tree2.trigger('dragstart', { dataTransfer: { setData: () => {} } })
|
||||||
$tree1Up.trigger('drop')
|
$tree1Up.trigger('drop')
|
||||||
Vue.nextTick(() => {
|
Vue.nextTick(() => {
|
||||||
expect(wrapper.find('.vtl-node').attributes('id')).toBe('t2')
|
expect(wrapper.find('.vtl-node').attributes('id')).toBe('t2')
|
||||||
@@ -54,10 +54,15 @@ describe('Drag', () => {
|
|||||||
it('drag after', done => {
|
it('drag after', done => {
|
||||||
const $tree3 = wrapper.find('#t3 .vtl-node-main')
|
const $tree3 = wrapper.find('#t3 .vtl-node-main')
|
||||||
const $tree1Bottom = wrapper.find('#t1 .vtl-bottom')
|
const $tree1Bottom = wrapper.find('#t1 .vtl-bottom')
|
||||||
$tree3.trigger('dragstart', { dataTransfer: { setData: () => {} }})
|
$tree3.trigger('dragstart', { dataTransfer: { setData: () => {} } })
|
||||||
$tree1Bottom.trigger('drop')
|
$tree1Bottom.trigger('drop')
|
||||||
Vue.nextTick(() => {
|
Vue.nextTick(() => {
|
||||||
expect(wrapper.findAll('.vtl-tree-node').at(2).attributes('id')).toBe('t3')
|
expect(
|
||||||
|
wrapper
|
||||||
|
.findAll('.vtl-tree-node')
|
||||||
|
.at(2)
|
||||||
|
.attributes('id')
|
||||||
|
).toBe('t3')
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@@ -65,7 +70,7 @@ describe('Drag', () => {
|
|||||||
it('drag into', done => {
|
it('drag into', done => {
|
||||||
const $tree3 = wrapper.find('#t3 .vtl-node-main')
|
const $tree3 = wrapper.find('#t3 .vtl-node-main')
|
||||||
const $tree1 = wrapper.find('#t1 .vtl-node-main')
|
const $tree1 = wrapper.find('#t1 .vtl-node-main')
|
||||||
$tree3.trigger('dragstart', { dataTransfer: { setData: () => {} }})
|
$tree3.trigger('dragstart', { dataTransfer: { setData: () => {} } })
|
||||||
$tree1.trigger('drop')
|
$tree1.trigger('drop')
|
||||||
Vue.nextTick(() => {
|
Vue.nextTick(() => {
|
||||||
expect(wrapper.find('#t1 + .vtl-tree-margin .vtl-node').attributes('id')).toBe('t3')
|
expect(wrapper.find('#t1 + .vtl-tree-margin .vtl-node').attributes('id')).toBe('t3')
|
||||||
@@ -77,7 +82,7 @@ describe('Drag', () => {
|
|||||||
const snapshot = wrapper.html()
|
const snapshot = wrapper.html()
|
||||||
const $tree1 = wrapper.find('#t1 .vtl-node-main')
|
const $tree1 = wrapper.find('#t1 .vtl-node-main')
|
||||||
const $tree1Child = wrapper.find('#t12 .vtl-node-main')
|
const $tree1Child = wrapper.find('#t12 .vtl-node-main')
|
||||||
$tree1.trigger('dragstart', { dataTransfer: { setData: () => {} }})
|
$tree1.trigger('dragstart', { dataTransfer: { setData: () => {} } })
|
||||||
$tree1Child.trigger('drop')
|
$tree1Child.trigger('drop')
|
||||||
Vue.nextTick(() => {
|
Vue.nextTick(() => {
|
||||||
expect(wrapper.html()).toBe(snapshot)
|
expect(wrapper.html()).toBe(snapshot)
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
import Vue from 'vue'
|
import Vue from 'vue'
|
||||||
import {mount} from '@vue/test-utils'
|
import { mount } from '@vue/test-utils'
|
||||||
import {Tree, VueTreeList} from '@/index'
|
import { Tree, VueTreeList } from '@/index'
|
||||||
|
|
||||||
describe('Operation', () => {
|
describe('Operation', () => {
|
||||||
let wrapper
|
let wrapper
|
||||||
@@ -26,8 +26,8 @@ describe('Operation', () => {
|
|||||||
pid: 0
|
pid: 0
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
wrapper = mount(VueTreeList, {propsData: {model: new Tree([])}})
|
wrapper = mount(VueTreeList, { propsData: { model: new Tree([]) } })
|
||||||
wrapper.setProps({model: tree})
|
wrapper.setProps({ model: tree })
|
||||||
})
|
})
|
||||||
|
|
||||||
it('delete leaf node', done => {
|
it('delete leaf node', done => {
|
||||||
@@ -75,7 +75,7 @@ describe('Operation', () => {
|
|||||||
const $input = wrapper.find('#t1 .vtl-input')
|
const $input = wrapper.find('#t1 .vtl-input')
|
||||||
$input.element.value = 'New Node 1'
|
$input.element.value = 'New Node 1'
|
||||||
$input.trigger('input')
|
$input.trigger('input')
|
||||||
var event = new KeyboardEvent('keyup', {keyCode: 13})
|
var event = new KeyboardEvent('keyup', { keyCode: 13 })
|
||||||
window.dispatchEvent(event)
|
window.dispatchEvent(event)
|
||||||
Vue.nextTick(() => {
|
Vue.nextTick(() => {
|
||||||
expect(wrapper.find('#t1').text()).toBe('New Node 1')
|
expect(wrapper.find('#t1').text()).toBe('New Node 1')
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import {mount} from '@vue/test-utils'
|
import { mount } from '@vue/test-utils'
|
||||||
import {Tree, VueTreeList} from '@/index'
|
import { Tree, VueTreeList } from '@/index'
|
||||||
|
|
||||||
describe('Render', () => {
|
describe('Render', () => {
|
||||||
it('render correctly', () => {
|
it('render correctly', () => {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
import Vue from 'vue'
|
import Vue from 'vue'
|
||||||
import {mount} from '@vue/test-utils'
|
import { mount } from '@vue/test-utils'
|
||||||
import {Tree, VueTreeList} from '@/index'
|
import { Tree, VueTreeList } from '@/index'
|
||||||
|
|
||||||
describe('Slot', () => {
|
describe('Slot', () => {
|
||||||
let wrapper
|
let wrapper
|
||||||
@@ -27,29 +27,41 @@ describe('Slot', () => {
|
|||||||
}
|
}
|
||||||
])
|
])
|
||||||
wrapper = mount(VueTreeList, {
|
wrapper = mount(VueTreeList, {
|
||||||
propsData: {model: new Tree([])},
|
propsData: { model: new Tree([]) },
|
||||||
scopedSlots: {
|
scopedSlots: {
|
||||||
addTreeNodeIcon() {
|
addTreeNodeIcon() {
|
||||||
return <span class="add-tree-node-icon">📂</span>
|
return <span class='add-tree-node-icon'>📂</span>
|
||||||
},
|
},
|
||||||
addLeafNodeIcon() {
|
addLeafNodeIcon() {
|
||||||
return <span class="icon">+</span>
|
return <span class='icon'>+</span>
|
||||||
},
|
},
|
||||||
editNodeIcon() {
|
editNodeIcon() {
|
||||||
return <span class="icon">📃</span>
|
return <span class='icon'>📃</span>
|
||||||
},
|
},
|
||||||
delNodeIcon(slotProps) {
|
delNodeIcon(slotProps) {
|
||||||
return (slotProps.model.isLeaf || !slotProps.model.children) ? <span class="del-node-icon">✂️</span> : <span />
|
return slotProps.model.isLeaf || !slotProps.model.children ? (
|
||||||
|
<span class='del-node-icon'>✂️</span>
|
||||||
|
) : (
|
||||||
|
<span />
|
||||||
|
)
|
||||||
},
|
},
|
||||||
leafNodeIcon() {
|
leafNodeIcon() {
|
||||||
return <span class="icon">🍃</span>
|
return <span class='icon'>🍃</span>
|
||||||
},
|
},
|
||||||
treeNodeIcon(slotProps) {
|
treeNodeIcon(slotProps) {
|
||||||
return <span class="tree-node-icon icon">{ slotProps.model.children && slotProps.model.children.length > 0 && !slotProps.expanded ? '🌲' : '❀' }</span>
|
return (
|
||||||
|
<span class='tree-node-icon icon'>
|
||||||
|
{slotProps.model.children &&
|
||||||
|
slotProps.model.children.length > 0 &&
|
||||||
|
!slotProps.expanded
|
||||||
|
? '🌲'
|
||||||
|
: '❀'}
|
||||||
|
</span>
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
wrapper.setProps({model: tree})
|
wrapper.setProps({ model: tree })
|
||||||
})
|
})
|
||||||
|
|
||||||
it('render slot correctly', () => {
|
it('render slot correctly', () => {
|
||||||
|
@@ -2,4 +2,4 @@ module.exports = {
|
|||||||
css: {
|
css: {
|
||||||
extract: false
|
extract: false
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
Reference in New Issue
Block a user