@concretecms/bedrock 1.5.5 → 1.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
<div>
|
|
3
3
|
<div class="ccm-directory-selector-container">
|
|
4
4
|
<div class="form-group">
|
|
5
|
-
<label class="form-label" :for="directorySelectInputId" v-if="inputLabel">{{inputLabel}}</label>
|
|
5
|
+
<label class="form-label" :for="directorySelectInputId" v-if="inputLabel">{{ inputLabel }}</label>
|
|
6
6
|
<div v-if="showAddDirectoryButton" class="input-group">
|
|
7
|
-
<input :id="directorySelectInputId" :name="inputName" v-model="selectedDirectoryID"
|
|
7
|
+
<input :id="directorySelectInputId" :name="inputName" v-model="selectedDirectoryID"
|
|
8
|
+
ref="directoryInput" :disabled="disabled"/>
|
|
8
9
|
<button type="button"
|
|
9
10
|
:class="{'btn': true, 'btn-secondary': true, 'ccm-create-new-directory-button': true, 'disabled': disabled === true}"
|
|
10
11
|
@click="toggleDirectoryInput" :disabled="disabled">
|
|
11
12
|
{{ i18n.createNewFolder }}
|
|
12
13
|
</button>
|
|
13
14
|
</div>
|
|
14
|
-
<input v-else :id="directorySelectInputId" :name="inputName" v-model="selectedDirectoryID"
|
|
15
|
+
<input v-else :id="directorySelectInputId" :name="inputName" v-model="selectedDirectoryID"
|
|
16
|
+
ref="directoryInput" :disabled="disabled"/>
|
|
15
17
|
</div>
|
|
16
18
|
</div>
|
|
17
19
|
<div v-if="showAddDirectoryButton" v-show="showAddDirectoryInput" class="ccm-new-directory-name-container">
|
|
@@ -113,6 +115,7 @@ export default {
|
|
|
113
115
|
this.selectedDirectoryID = this.directoryId
|
|
114
116
|
}
|
|
115
117
|
|
|
118
|
+
var my = this
|
|
116
119
|
this.selectMenu = new TomSelect(this.$refs.directoryInput, {
|
|
117
120
|
maxOptions: 200,
|
|
118
121
|
maxItems: 1,
|
|
@@ -122,15 +125,20 @@ export default {
|
|
|
122
125
|
searchField: 'directoryName',
|
|
123
126
|
render: {
|
|
124
127
|
option: function (data, escape) {
|
|
125
|
-
return `<div class="level-${data.directoryLevel}"><i class="fa fa-folder"></i> ${data.directoryName}</div>`
|
|
128
|
+
return `<div class="level-${data.directoryLevel}"><i class="fa fa-folder"></i> ${my.sanitizeDirectoryName(data.directoryName)} </div>`
|
|
126
129
|
},
|
|
127
130
|
item: function (item, escape) {
|
|
128
|
-
return `<div class="level-${item.directoryLevel}"><i class="fa fa-folder"></i> ${item.directoryName}</div>`
|
|
131
|
+
return `<div class="level-${item.directoryLevel}"><i class="fa fa-folder"></i> ${my.sanitizeDirectoryName(item.directoryName)} </div>`
|
|
129
132
|
}
|
|
130
133
|
}
|
|
131
134
|
})
|
|
132
135
|
},
|
|
133
136
|
methods: {
|
|
137
|
+
sanitizeDirectoryName(directoryName) {
|
|
138
|
+
const div = document.createElement('div')
|
|
139
|
+
div.textContent = directoryName
|
|
140
|
+
return div.innerHTML
|
|
141
|
+
},
|
|
134
142
|
createDirectory() {
|
|
135
143
|
const me = this
|
|
136
144
|
if (!me.showAddDirectoryInput || me.disabled) {
|
package/assets/cms/js/tree.js
CHANGED
|
@@ -138,8 +138,17 @@ ConcreteTree.prototype = {
|
|
|
138
138
|
},
|
|
139
139
|
select: function (select, data) {
|
|
140
140
|
if (options.chooseNodeInForm) {
|
|
141
|
-
|
|
141
|
+
let keys = []
|
|
142
|
+
if (selectMode == 1) {
|
|
143
|
+
keys = [data.node.key]
|
|
144
|
+
my.deselectNodes(data.tree.getRootNode(), data.node)
|
|
145
|
+
} else {
|
|
146
|
+
keys = my.getSelectedNodeKeys(data.tree.getRootNode(), ajaxData.treeNodeSelectedIDs)
|
|
147
|
+
}
|
|
148
|
+
// Call onSelect callback
|
|
142
149
|
options.onSelect(keys)
|
|
150
|
+
// Update selected nodes for ajax request to avoid hidden nodes to be selected unexpectedly
|
|
151
|
+
ajaxData.treeNodeSelectedIDs = keys
|
|
143
152
|
}
|
|
144
153
|
},
|
|
145
154
|
|
|
@@ -226,11 +235,13 @@ ConcreteTree.prototype = {
|
|
|
226
235
|
},
|
|
227
236
|
collapse: function(event, data) {
|
|
228
237
|
// loop over child nodes and check if node is still selected. If not remove it from the 'options.ajaxData.selected' array.
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
238
|
+
if (options.ajaxData.selected) {
|
|
239
|
+
data.node.children.forEach(function(nodeChild) {
|
|
240
|
+
if (options.ajaxData.selected.includes(parseInt(nodeChild.key)) && !nodeChild.isSelected()) {
|
|
241
|
+
options.ajaxData.selected.splice(options.ajaxData.selected.indexOf(nodeChild.key), 1)
|
|
242
|
+
}
|
|
243
|
+
})
|
|
244
|
+
}
|
|
234
245
|
},
|
|
235
246
|
dnd: {
|
|
236
247
|
preventRecursiveMoves: true, // Prevent dropping nodes on own descendants,
|
|
@@ -338,6 +349,22 @@ ConcreteTree.prototype = {
|
|
|
338
349
|
return selected
|
|
339
350
|
},
|
|
340
351
|
|
|
352
|
+
deselectNodes: function (parentNode, selectedNode) {
|
|
353
|
+
var my = this
|
|
354
|
+
|
|
355
|
+
// Walk through all child nodes
|
|
356
|
+
if (parentNode.hasChildren()) {
|
|
357
|
+
parentNode.getChildren().forEach(function (child) {
|
|
358
|
+
// If the node is not the selected node, deselect it
|
|
359
|
+
if (parseInt(child.key) !== parseInt(selectedNode.key)) {
|
|
360
|
+
child.setSelected(false)
|
|
361
|
+
}
|
|
362
|
+
// call the function recursively
|
|
363
|
+
my.deselectNodes(child, selectedNode)
|
|
364
|
+
})
|
|
365
|
+
}
|
|
366
|
+
},
|
|
367
|
+
|
|
341
368
|
getLoadNodePromise: function (node) {
|
|
342
369
|
var my = this
|
|
343
370
|
var ajaxData = my.options.ajaxData != false ? my.options.ajaxData : {}
|
package/package.json
CHANGED