@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" ref="directoryInput" :disabled="disabled" />
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" ref="directoryInput" :disabled="disabled" />
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) {
@@ -138,8 +138,17 @@ ConcreteTree.prototype = {
138
138
  },
139
139
  select: function (select, data) {
140
140
  if (options.chooseNodeInForm) {
141
- const keys = my.getSelectedNodeKeys(data.tree.getRootNode(), ajaxData.treeNodeSelectedIDs)
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
- data.node.children.forEach(function(nodeChild) {
230
- if (options.ajaxData.selected.includes(parseInt(nodeChild.key)) && !nodeChild.isSelected()) {
231
- options.ajaxData.selected.splice(options.ajaxData.selected.indexOf(nodeChild.key), 1)
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@concretecms/bedrock",
3
- "version": "1.5.5",
3
+ "version": "1.5.7",
4
4
  "description": "The asset framework and dependencies for Concrete CMS.",
5
5
  "scripts": {
6
6
  "lint": "standardx \"**/*.{js,vue}\" && stylelint assets/**/*.{scss,vue}",