|
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