|
5 | 5 | --> |
6 | 6 | <li :id="nodeId" class="tree-view-node"> |
7 | 7 | <div class="tree-view-node-self" |
8 | | - @click="onClick" |
9 | | - @dblclick="onDblclick"> |
| 8 | + @click="$_treeViewNode_onClick" |
| 9 | + @dblclick="$_treeViewNode_onDblclick"> |
10 | 10 |
|
11 | 11 | <!-- Expander --> |
12 | | - <button type="button" |
| 12 | + <button :id="expanderId" |
| 13 | + type="button" |
13 | 14 | v-if="model.children.length > 0 && model.expandable" |
14 | 15 | class="tree-view-node-self-expander" |
15 | 16 | :class="{ 'tree-view-node-self-expanded': model.state.expanded }" |
16 | | - @click="onExpandedChange"> |
| 17 | + @click="$_treeViewNode_onExpandedChange"> |
17 | 18 | <i class="tree-view-node-self-expanded-indicator"></i></button> |
18 | 19 | <span v-else class="tree-view-node-self-spacer"></span> |
19 | 20 |
|
|
25 | 26 | class="tree-view-node-self-checkbox" |
26 | 27 | type="checkbox" |
27 | 28 | v-model="model.state.checked" |
28 | | - @change="onCheckedChange" /> |
| 29 | + @change="$_treeViewNode_onCheckedChange" /> |
29 | 30 | {{ model.label }} |
30 | 31 | </label> |
31 | 32 |
|
|
34 | 35 | </div> |
35 | 36 |
|
36 | 37 | <!-- Children --> |
37 | | - <ul v-show="model.state.expanded" |
38 | | - v-if="model.children.length > 0 && model.expandable" |
| 38 | + <ul v-show="model.state.expanded" |
| 39 | + v-if="model.children.length > 0 && model.expandable" |
39 | 40 | class="tree-view-node-children"> |
40 | 41 | <TreeViewNode v-for="nodeModel in model.children" |
41 | 42 | :key="nodeModel.id" |
|
63 | 64 | if (typeof value.id !== 'number' && typeof value.id !== 'string') { |
64 | 65 | console.error("model.id is required and must be a number or string."); |
65 | 66 | return false; |
66 | | - } |
| 67 | + } |
67 | 68 | else if(typeof value.label !== 'string') { |
68 | 69 | console.error("model.label is required and must be a string."); |
69 | 70 | return false; |
|
93 | 94 | }, |
94 | 95 | checkboxId() { |
95 | 96 | return this.nodeId ? `${this.nodeId}-cbx` : null; |
| 97 | + }, |
| 98 | + expanderId() { |
| 99 | + return this.nodeId ? `${this.nodeId}-exp` : null; |
96 | 100 | } |
97 | 101 | }, |
98 | 102 | methods: { |
|
105 | 109 | if (!Array.isArray(this.model.children)) { |
106 | 110 | this.model.children = []; |
107 | 111 | } |
108 | | - if (typeof this.model.expandable !== 'boolean') { |
109 | | - this.model.expandable = true; |
110 | | - } |
111 | 112 | if (typeof this.model.checkable !== 'boolean') { |
112 | 113 | this.model.checkable = false; |
113 | 114 | } |
| 115 | + if (typeof this.model.expandable !== 'boolean') { |
| 116 | + this.model.expandable = true; |
| 117 | + } |
114 | 118 | if (typeof this.model.selectable !== 'boolean') { |
115 | 119 | this.model.selectable = false; |
116 | 120 | } |
117 | 121 | if (this.model.state === null || typeof this.model.state !== 'object') { |
118 | 122 | this.model.state = {}; |
119 | 123 | } |
120 | | - if (typeof this.model.state.expanded !== 'boolean') { |
121 | | - this.model.state.expanded = false; |
122 | | - } |
123 | 124 | if (typeof this.model.state.checked !== 'boolean') { |
124 | 125 | this.model.state.checked = false; |
125 | 126 | } |
| 127 | + if (typeof this.model.state.expanded !== 'boolean') { |
| 128 | + this.model.state.expanded = false; |
| 129 | + } |
126 | 130 | if (typeof this.model.state.selected !== 'boolean') { |
127 | 131 | this.model.state.selected = false; |
128 | 132 | } |
129 | 133 | }, |
130 | | - onExpandedChange(event) { |
131 | | - if (this.model.children.length > 0) { |
132 | | - this.model.state.expanded = !this.model.state.expanded; |
133 | | - this.$emit('treeViewNodeExpandedChange', this.model, event); |
134 | | - } |
| 134 | + $_treeViewNode_onCheckedChange(event) { |
| 135 | + this.$emit('treeViewNodeCheckedChange', this.model, event); |
| 136 | + }, |
| 137 | + $_treeViewNode_onExpandedChange(event) { |
| 138 | + this.model.state.expanded = !this.model.state.expanded; |
| 139 | + this.$emit('treeViewNodeExpandedChange', this.model, event); |
135 | 140 | }, |
136 | | - onClick(event) { |
| 141 | + $_treeViewNode_onClick(event) { |
137 | 142 | // Don't fire this if the target is the checkbox or expander, which have their own events |
138 | 143 | if (!event.target.matches(".tree-view-node-self-checkbox, .tree-view-node-self-expander")) { |
139 | 144 | this.$emit('treeViewNodeClick', this.model, event); |
140 | 145 | } |
141 | 146 | }, |
142 | | - onDblclick(event) { |
| 147 | + $_treeViewNode_onDblclick(event) { |
143 | 148 | // Don't fire this if the target is the checkbox or expander, which have their own events |
144 | 149 | if (!event.target.matches(".tree-view-node-self-checkbox, .tree-view-node-self-expander")) { |
145 | 150 | this.$emit('treeViewNodeDblclick', this.model, event); |
146 | 151 | } |
147 | | - }, |
148 | | - onCheckedChange(event) { |
149 | | - this.$emit('treeViewNodeCheckedChange', this.model, event); |
150 | 152 | } |
151 | 153 | }, |
152 | 154 | }; |
|
174 | 176 |
|
175 | 177 | i.tree-view-node-self-expanded-indicator { |
176 | 178 | font-style: normal; |
177 | | - |
| 179 | +
|
178 | 180 | &::before { |
179 | 181 | content: '+'; |
180 | 182 | } |
|
0 commit comments