@concretecms/bedrock 1.3.6 → 1.4.0

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.
Files changed (108) hide show
  1. package/.eslintrc.yml +2 -0
  2. package/assets/account/js/frontend/components/AvatarCropper.vue +159 -0
  3. package/assets/account/js/frontend.js +1 -1
  4. package/assets/account/scss/frontend/_frontend.scss +2 -0
  5. package/assets/account/scss/frontend/avatar/_avatar-cropper.scss +82 -0
  6. package/assets/account/scss/frontend/avatar/_avatar.scss +6 -0
  7. package/assets/bedrock/scss/_frontend.scss +0 -1
  8. package/assets/calendar/js/backend/duration.js +13 -13
  9. package/assets/calendar/js/vendor/fullcalendar.js +1 -0
  10. package/assets/cms/components/Announcement/Action/ExternalLinkAction.vue +25 -0
  11. package/assets/cms/components/Announcement/Action/GuideAction.vue +36 -0
  12. package/assets/cms/components/Announcement/Action/VideoAction.vue +31 -0
  13. package/assets/cms/components/Announcement/Broadcast.vue +63 -0
  14. package/assets/cms/components/Announcement/Button/ExternalLinkButton.vue +26 -0
  15. package/assets/cms/components/Announcement/Header/Header.vue +33 -0
  16. package/assets/cms/components/Announcement/Item/Item.vue +50 -0
  17. package/assets/cms/components/Announcement/Modal/Modal.vue +77 -0
  18. package/assets/cms/components/Announcement/Slide/CollectSiteInformationSlide.vue +61 -0
  19. package/assets/cms/components/Announcement/Slide/FeatureSlide.vue +81 -0
  20. package/assets/cms/components/Announcement/Slide/WelcomeSlide.vue +87 -0
  21. package/assets/cms/components/Help/Modal.vue +48 -0
  22. package/assets/cms/components/Image/ThumbnailEditor.vue +117 -0
  23. package/assets/cms/components/RunningProcessList.vue +6 -1
  24. package/assets/cms/components/customizer/FontFamilyPageCustomizerWidget.vue +27 -7
  25. package/assets/cms/components/file-manager/Chooser/FileManager.vue +0 -1
  26. package/assets/cms/components/file-manager/Chooser/FileUpload.vue +5 -0
  27. package/assets/cms/components/file-manager/Chooser/FolderBookmark.vue +0 -1
  28. package/assets/cms/components/file-manager/Chooser.vue +6 -1
  29. package/assets/cms/components/file-manager/Uploader/UploadFromComputer.vue +49 -9
  30. package/assets/cms/components/file-manager/Uploader.vue +7 -0
  31. package/assets/cms/components/form/ConcreteAjaxSelect.vue +173 -0
  32. package/assets/cms/components/form/ConcreteExpressEntrySelect.vue +74 -0
  33. package/assets/cms/components/form/ConcreteFileDirectoryInput.vue +28 -26
  34. package/assets/cms/components/form/ConcreteFileInput.vue +17 -5
  35. package/assets/cms/components/form/ConcreteGroupInput.vue +134 -0
  36. package/assets/cms/components/form/ConcreteLocaleSelect.vue +58 -0
  37. package/assets/cms/components/form/ConcreteOptionSelect.vue +92 -0
  38. package/assets/cms/components/form/ConcretePageSelect.vue +67 -0
  39. package/assets/cms/components/form/ConcreteSelect.vue +75 -0
  40. package/assets/cms/components/form/ConcreteThemeColorInput.vue +19 -14
  41. package/assets/cms/components/form/ConcreteUserInput.vue +69 -29
  42. package/assets/cms/components/form/ConcreteUserSelect.vue +126 -0
  43. package/assets/cms/components/form/IconSelector.vue +14 -5
  44. package/assets/cms/components/form/PasswordInput.vue +141 -24
  45. package/assets/cms/components/groups/Chooser.vue +6 -5
  46. package/assets/cms/components/index.js +24 -0
  47. package/assets/cms/components/toolbar/ConcreteToolbarSiteList.vue +62 -0
  48. package/assets/cms/components/user/Chooser/Search.vue +5 -0
  49. package/assets/cms/components/user/Chooser/Users.vue +6 -2
  50. package/assets/cms/components/user/Chooser.vue +9 -3
  51. package/assets/cms/js/ajax-request/base.js +13 -4
  52. package/assets/cms/js/alert.js +2 -1
  53. package/assets/cms/js/base.js +3 -10
  54. package/assets/cms/js/edit-mode/area.js +0 -35
  55. package/assets/cms/js/edit-mode/block.js +27 -0
  56. package/assets/cms/js/edit-mode/containerblock.js +33 -3
  57. package/assets/cms/js/edit-mode/editmode.js +12 -0
  58. package/assets/cms/js/edit-mode/layout.js +56 -0
  59. package/assets/cms/js/edit-mode/style-customizer/style-customizer.js +0 -1
  60. package/assets/cms/js/file-manager/uploader.js +64 -209
  61. package/assets/cms/js/help/help.js +11 -8
  62. package/assets/cms/js/in-context-menu.js +5 -0
  63. package/assets/cms/js/jquery-vue.js +22 -0
  64. package/assets/cms/js/legacy-dialog.js +74 -65
  65. package/assets/cms/js/modal.js +73 -0
  66. package/assets/cms/js/panels.js +8 -0
  67. package/assets/cms/js/search/base.js +0 -18
  68. package/assets/cms/js/search/field-selector.js +6 -14
  69. package/assets/cms/js/select-combo-box.js +2 -0
  70. package/assets/cms/js/sitemap/sitemap-selector.js +2 -2
  71. package/assets/cms/js/sitemap/sitemap.js +15 -20
  72. package/assets/cms/js/toolbar.js +25 -2
  73. package/assets/cms/js/tree.js +7 -7
  74. package/assets/cms/js/users/group-manager.js +55 -0
  75. package/assets/cms/js/users/user-manager.js +2 -1
  76. package/assets/cms/js/users.js +1 -0
  77. package/assets/cms/js/vue/Manager.js +6 -3
  78. package/assets/cms/scss/_base.scss +2 -8
  79. package/assets/cms/scss/_cards.scss +7 -0
  80. package/assets/cms/scss/_file-manager.scss +1 -0
  81. package/assets/cms/scss/_file-uploader.scss +13 -3
  82. package/assets/cms/scss/_help.scss +11 -2
  83. package/assets/cms/scss/_item-selector.scss +10 -0
  84. package/assets/cms/scss/_layouts.scss +16 -0
  85. package/assets/cms/scss/_page-areas.scss +517 -245
  86. package/assets/cms/scss/_popover.scss +5 -0
  87. package/assets/cms/scss/_select-combo-box.scss +18 -0
  88. package/assets/cms/scss/_toolbar.scss +5 -14
  89. package/assets/cms/scss/_transitions.scss +13 -0
  90. package/assets/cms/scss/_variables.scss +18 -7
  91. package/assets/cms/scss/bootstrap/_reboot-tags.scss +17 -32
  92. package/assets/cms/scss/bootstrap/_reboot.scss +17 -7
  93. package/assets/cms/scss/bootstrap/_root-modified.scss +41 -20
  94. package/assets/cms/scss/file-manager/_thumbnail-image-editor.scss +45 -0
  95. package/assets/cms/scss/panels/_help.scss +0 -10
  96. package/assets/staging/scss/frontend/_frontend.scss +12 -0
  97. package/assets/staging/scss/frontend.scss +4 -0
  98. package/package.json +9 -9
  99. package/assets/account/js/frontend/components/Avatar/Avatar.js +0 -270
  100. package/assets/account/js/frontend/components/Avatar/Avatar.scss +0 -17
  101. package/assets/account/js/frontend/components/Avatar/Avatar.vue +0 -18
  102. package/assets/account/js/frontend/components/Avatar/Cropper.js +0 -202
  103. package/assets/account/js/frontend/components/Avatar/Cropper.scss +0 -136
  104. package/assets/account/js/frontend/components/Avatar/Cropper.vue +0 -40
  105. package/assets/bedrock/scss/_theme-grid.scss +0 -7
  106. package/assets/cms/js/edit-mode/style-customizer/inline-toolbar.js +0 -279
  107. package/assets/cms/js/modifiable-ajax-bootstrap-select.js +0 -78
  108. package/assets/cms/js/modifiable-bootstrap-select.js +0 -112
@@ -154,11 +154,6 @@
154
154
  menu: $('[data-area-menu=' + elem.attr('data-launch-area-menu') + ']')
155
155
  }
156
156
 
157
- if (my.getElem().hasClass('ccm-global-area')) {
158
- menu_config.menuActiveClass += ' ccm-global-area-highlight'
159
- menu_config.highlightClassName += ' ccm-global-area-highlight'
160
- }
161
-
162
157
  my.setAttr('menu', new ConcreteMenu(elem, menu_config))
163
158
 
164
159
  $menuElem.find('a[data-menu-action=add-inline]')
@@ -181,36 +176,6 @@
181
176
  return false
182
177
  })
183
178
 
184
- $menuElem.find('a[data-menu-action=edit-container-layout]')
185
- .off('click.edit-mode')
186
- .on('click.edit-mode', function (e) {
187
- // we are going to place this at the END of the list.
188
- var $link = $(this)
189
- var bID = parseInt($link.attr('data-container-layout-block-id'))
190
- var editor = Concrete.getEditMode()
191
- var block = _.findWhere(editor.getBlocks(), { id: bID })
192
- Concrete.event.fire('EditModeBlockEditInline', {
193
- block: block,
194
- arGridMaximumColumns: $link.attr('data-area-grid-maximum-columns'),
195
- event: e
196
- })
197
- return false
198
- })
199
-
200
- $menuElem.find('a[data-menu-action=edit-container-layout-style]')
201
- .off('click.edit-mode')
202
- .on('click.edit-mode', function (e) {
203
- e.preventDefault()
204
- // we are going to place this at the END of the list.
205
- var $link = $(this)
206
- var bID = parseInt($link.attr('data-container-layout-block-id'))
207
- var editor = Concrete.getEditMode()
208
- var block = _.findWhere(editor.getBlocks(), { id: bID })
209
- Concrete.event.fire('EditModeBlockEditInline', {
210
- block: block, event: e, action: CCM_DISPATCHER_FILENAME + '/ccm/system/dialogs/block/design'
211
- })
212
- })
213
-
214
179
  $menuElem.find('a[data-menu-action=area-add-block]')
215
180
  .off('click.edit-mode')
216
181
  .on('click.edit-mode', function(e) {
@@ -83,6 +83,14 @@
83
83
  e.stopPropagation()
84
84
  return false
85
85
  }).pep(my.getPepSettings())
86
+
87
+ my.getPeper().on('mouseover', function(e) {
88
+ my.getElem().addClass('ccm-block-move-hover')
89
+ })
90
+
91
+ my.getPeper().on('mouseout', function(e) {
92
+ my.getElem().removeClass('ccm-block-move-hover')
93
+ })
86
94
  },
87
95
 
88
96
  /**
@@ -583,6 +591,25 @@
583
591
  })
584
592
  },
585
593
 
594
+ /**
595
+ * Sets an area as accepting a block drag operation. By default all areas will be set up as possible
596
+ * in this block.js, but extending classes like layout.js and containerblock.js can restrict this
597
+ * to just their own areas.
598
+ *
599
+ * Note: This payload is JUST visual - other operations deeper within on dragstop actually handle rejecting
600
+ * this operation. This is only so that when we drag layouts and blocks around we don't see drop areas
601
+ * that _look_ like they will work, only to have the operation rejected when we attempt to drop.
602
+ *
603
+ * @param areas
604
+ */
605
+ setupAreaDragPayloads: function setupAreaDragPayloads(areas) {
606
+ _(areas).map((area) => {
607
+ if (area.acceptsBlockType(this.getHandle())) {
608
+ area.getElem().addClass('ccm-area-accepts-block-drag-payload')
609
+ }
610
+ })
611
+ },
612
+
586
613
  pepStop: function blockPepStop(context, event, pep) {
587
614
  var my = this; var drag_area
588
615
  my.getDragger().stop(1)
@@ -16,24 +16,54 @@ import _ from 'underscore'
16
16
  var my = this
17
17
  Concrete.Block.prototype.init.call(my, elem, edit_mode, $())
18
18
 
19
+ var notch = elem.siblings('.ccm-edit-mode-title-notch-wrapper').find('.ccm-edit-mode-title-notch')
20
+ my.setAttr('notch', notch)
21
+
19
22
  elem.children('.ccm-block-cover').remove()
20
23
  my.bindDrag()
21
24
  my.bindDelete()
22
25
  my.bindEditDesign()
26
+ my.bindNotchMenu()
27
+ },
28
+
29
+ getMenu: function() {
30
+ var my = this
31
+ return $('[data-container-menu=' + my.getId() + ']')
32
+ },
33
+
34
+ bindNotchMenu: function() {
35
+ var my = this
36
+ var menu_config = {
37
+ highlightClassName: 'ccm-edit-mode-title-notch-highlight',
38
+ menuActiveClass: 'ccm-edit-mode-title-notch-highlight',
39
+ menu: my.getMenu(),
40
+ onShow: function(menu) {
41
+ my.getElem().addClass('ccm-block-edit-container-highlight')
42
+ },
43
+ onHide: function(menu) {
44
+ my.getElem().removeClass('ccm-block-edit-container-highlight')
45
+ }
46
+ }
47
+ new ConcreteMenu(my.getNotch(), menu_config)
23
48
  },
24
49
 
25
50
  bindDelete: function ContainerBlockDelete() {
26
51
  var my = this
27
- var deleter = my.getElem().find('ul.ccm-edit-mode-inline-container a[data-inline-command=delete-block]')
52
+ var deleter = my.getMenu().find('a[data-inline-command=delete-block]')
28
53
  deleter.unbind('click.containerDelete').on('click.containerDelete', function(e) {
29
54
  e.preventDefault()
30
55
  my.delete()
31
56
  })
32
57
  },
33
58
 
59
+ setupAreaDragPayloads: function setupAreaDragPayloads(areas) {
60
+ var my = this
61
+ my.getArea().getElem().addClass('ccm-area-accepts-block-drag-payload')
62
+ },
63
+
34
64
  bindEditDesign: function ContainerBlockEditDesign() {
35
65
  var my = this
36
- var menuElem = my.getElem().find('ul.ccm-edit-mode-inline-container a[data-inline-command=edit-container-design]')
66
+ var menuElem = my.getMenu().find('a[data-inline-command=edit-container-design]')
37
67
  menuElem.off('click.edit-mode')
38
68
  .on('click.edit-mode', function (e) {
39
69
  e.preventDefault()
@@ -51,7 +81,7 @@ import _ from 'underscore'
51
81
 
52
82
  bindDrag: function ContainerBlockBindDrag() {
53
83
  var my = this
54
- var mover = my.getElem().find('ul.ccm-edit-mode-inline-container a[data-inline-command=move-block]').parent()
84
+ var mover = my.getNotch().find('a[data-inline-command=move-block]').parent()
55
85
 
56
86
  $.pep.unbind(mover)
57
87
  mover.pep(my.getPepSettings())
@@ -322,6 +322,12 @@
322
322
  }
323
323
  }
324
324
 
325
+ my.bindEvent('EditModeBlockDragInitialization', function(event, data) {
326
+ var block = data.block
327
+ var areas = my.getAreas()
328
+ block.setupAreaDragPayloads(areas)
329
+ })
330
+
325
331
  my.bindEvent('EditModeBlockDrag', _.throttle(function editModeEditModeBlockDragEventHandler(event, data) {
326
332
  if (!my.getDragging()) {
327
333
  return
@@ -374,6 +380,12 @@
374
380
  Concrete.event.fire('EditModeSelectableContender')
375
381
  html.removeClass('ccm-block-dragging')
376
382
 
383
+ _(my.getAreas()).map((area) => {
384
+ area.getElem().removeClass('ccm-area-accepts-block-drag-payload')
385
+ })
386
+
387
+ my.setDragging(false)
388
+
377
389
  if (data.block instanceof Concrete.BlockType) return
378
390
  my.scanBlocks()
379
391
  })
@@ -21,7 +21,57 @@ import _ from 'underscore'
21
21
  })
22
22
  Concrete.Block.prototype.init.call(my, elem, edit_mode, $())
23
23
 
24
+ my.setAttr('notch', elem.siblings('.ccm-edit-mode-title-notch-wrapper').find('.ccm-edit-mode-title-notch'))
25
+
24
26
  elem.children('.ccm-block-cover').remove()
27
+ my.bindNotchMenu()
28
+ },
29
+
30
+ bindNotchMenu: function() {
31
+ var my = this
32
+ var $menuElem = $('[data-layout-menu=' + my.getId() + ']')
33
+ var menu_config = {
34
+ highlightClassName: 'ccm-edit-mode-title-notch-highlight',
35
+ menuActiveClass: 'ccm-edit-mode-title-notch-highlight',
36
+ menu: $menuElem,
37
+ onShow: function(menu) {
38
+ my.getElem().addClass('ccm-block-edit-layout-highlight')
39
+ },
40
+ onHide: function(menu) {
41
+ my.getElem().removeClass('ccm-block-edit-layout-highlight')
42
+ }
43
+ }
44
+ new ConcreteMenu(my.getNotch(), menu_config)
45
+
46
+ $menuElem.find('a[data-menu-action=edit-container-layout]')
47
+ .off('click.edit-mode')
48
+ .on('click.edit-mode', function (e) {
49
+ // we are going to place this at the END of the list.
50
+ var $link = $(this)
51
+ var bID = parseInt($link.attr('data-container-layout-block-id'))
52
+ var editor = Concrete.getEditMode()
53
+ var block = _.findWhere(editor.getBlocks(), { id: bID })
54
+ Concrete.event.fire('EditModeBlockEditInline', {
55
+ block: block,
56
+ arGridMaximumColumns: $link.attr('data-area-grid-maximum-columns'),
57
+ event: e
58
+ })
59
+ return false
60
+ })
61
+
62
+ $menuElem.find('a[data-menu-action=edit-container-layout-style]')
63
+ .off('click.edit-mode')
64
+ .on('click.edit-mode', function (e) {
65
+ e.preventDefault()
66
+ // we are going to place this at the END of the list.
67
+ var $link = $(this)
68
+ var bID = parseInt($link.attr('data-container-layout-block-id'))
69
+ var editor = Concrete.getEditMode()
70
+ var block = _.findWhere(editor.getBlocks(), { id: bID })
71
+ Concrete.event.fire('EditModeBlockEditInline', {
72
+ block: block, event: e, action: CCM_DISPATCHER_FILENAME + '/ccm/system/dialogs/block/design'
73
+ })
74
+ })
25
75
  },
26
76
 
27
77
  bindDrag: function layoutBindDrag() {
@@ -31,6 +81,12 @@ import _ from 'underscore'
31
81
  peper.pep(my.getPepSettings())
32
82
  },
33
83
 
84
+ setupAreaDragPayloads: function setupAreaDragPayloads(areas) {
85
+ var my = this
86
+
87
+ my.getArea().getElem().addClass('ccm-area-accepts-block-drag-payload')
88
+ },
89
+
34
90
  addToDragArea: function layoutAddToDragArea() {
35
91
  Concrete.Block.prototype.addToDragArea.apply(this, _.toArray(arguments))
36
92
 
@@ -1,4 +1,3 @@
1
- // import './inline-toolbar'
2
1
  import './palette'
3
2
  import './color'
4
3
  import './image'
@@ -1,5 +1,6 @@
1
1
  /* global ccmi18n_fileuploader, CCM_SECURITY_TOKEN, NProgress, ConcreteEvent */
2
2
  /* eslint indent: [2, 4, {"SwitchCase": 1}] */
3
+ /* eslint-disable no-new */
3
4
 
4
5
  (function ($) {
5
6
  $.fn.concreteFileUploader = function (options) {
@@ -384,73 +385,32 @@
384
385
 
385
386
  $column.append($tabContent)
386
387
 
387
- /*
388
- * Add folder selector
389
- */
390
-
391
- const $selectDirectoryContainer = $('<div/>')
392
- .addClass('ccm-directory-selector-container')
393
-
394
- const $selectDirectoryFormGroup = $('<div/>')
395
- .addClass('form-group')
396
-
397
- const selectDirectoryId = 'input-' + fileUploader.getUniqueId()
398
-
399
- // noinspection JSUnresolvedVariable
400
- const $selectDirectoryLabel = $('<label/>')
401
- .addClass('form-label')
402
- .attr('for', selectDirectoryId)
403
- .html(ccmi18n_fileuploader.uploadFilesTo)
404
-
405
- const $selectDirectoryInputGroup = $('<div/>')
406
- .addClass('input-group')
407
-
408
- const $select = $('<select/>')
409
- .addClass('ccm-directory-selector')
410
- .attr('data-size', 5)
411
- .attr('data-live-search', 'true')
412
- .attr('id', selectDirectoryId)
413
-
414
- // noinspection JSUnresolvedVariable
415
- const $a = $('<a/>')
416
- .attr('href', 'javascript:void(0);')
417
- .addClass('btn btn-outline-secondary ccm-file-uploader-create-new-directory-button')
418
- .html(ccmi18n_fileuploader.createNewDirectoryButton)
419
-
420
- $selectDirectoryInputGroup.append($select)
421
- $selectDirectoryInputGroup.append($a)
422
- $selectDirectoryFormGroup.append($selectDirectoryLabel)
423
- $selectDirectoryFormGroup.append($selectDirectoryInputGroup)
424
-
425
- $selectDirectoryContainer.append($selectDirectoryFormGroup)
426
- $column.append($selectDirectoryContainer)
427
-
428
- const $div = $('<div/>')
429
- .addClass('ccm-file-uploader-new-directory-name-container')
430
- .addClass('hidden-container')
431
-
432
- const $formGroup = $('<div/>')
433
- .addClass('form-group')
434
-
435
- const inputId = 'input-' + fileUploader.getUniqueId()
436
-
437
- const $label = $('<label/>')
438
- .addClass('form-label')
439
- .attr('for', inputId)
440
- .html(ccmi18n_fileuploader.directoryName)
441
-
442
- // noinspection JSUnresolvedVariable
443
- const $input = $('<input/>')
444
- .attr('type', 'text')
445
- .attr('placeholder', ccmi18n_fileuploader.directoryPlaceholder)
446
- .attr('id', inputId)
447
- .addClass('ccm-file-uploader-new-directory-name')
448
- .addClass('form-control')
388
+ let directoryId = 0
389
+ if (fileUploader.isFunction(fileUploader.options.folderID)) {
390
+ directoryId = parseInt(fileUploader.options.folderID())
391
+ }
449
392
 
450
- $formGroup.append($label)
451
- $formGroup.append($input)
452
- $div.append($formGroup)
453
- $column.append($div)
393
+ const $directoryContainer = $('<div/>')
394
+ .attr('style', 'min-height: 200px')
395
+ $directoryContainer.html('<concrete-file-directory-input input-label="Upload files to" :directory-id="' + directoryId + '" input-name="uploadDirectoryId" :show-add-directory-button="true" @change="currentFolder = $event"></concrete-file-directory-input>')
396
+
397
+ $('<input />').attr('type', 'hidden').attr('name', 'fileUploaderDirectoryId').appendTo($directoryContainer)
398
+ $column.append($directoryContainer)
399
+
400
+ Concrete.Vue.activateContext('cms', function (Vue, config) {
401
+ new Vue({
402
+ el: $directoryContainer.get(0),
403
+ components: config.components,
404
+ data: {
405
+ currentFolder: 0
406
+ },
407
+ watch: {
408
+ currentFolder() {
409
+ $('input[name=fileUploaderDirectoryId]').val(this.currentFolder)
410
+ }
411
+ }
412
+ })
413
+ })
454
414
 
455
415
  $row.append($column)
456
416
 
@@ -588,9 +548,6 @@
588
548
 
589
549
  fileUploader.refresh()
590
550
 
591
- $dialogEl.find('.ccm-directory-selector').removeAttr('disabled').selectpicker('refresh')
592
- $dialogEl.find('.ccm-file-uploader-create-new-directory-button').removeClass('disabled')
593
-
594
551
  let error = ''
595
552
 
596
553
  for (error of errors) {
@@ -627,7 +584,7 @@
627
584
  ccm_token: CCM_SECURITY_TOKEN,
628
585
  send_file: fileIds,
629
586
  removeFilesAfterPost: removeFilesAfterPost,
630
- currentFolder: $dialogEl.find('select.ccm-directory-selector').find('option:selected').val()
587
+ currentFolder: $('input[name=fileUploaderDirectoryId]').val()
631
588
  }, fileUploader.options.formData),
632
589
  dataType: 'json',
633
590
  success: function (data) {
@@ -654,7 +611,7 @@
654
611
  data: $.extend({
655
612
  ccm_token: CCM_SECURITY_TOKEN,
656
613
  url_upload: $dialogEl.find('.ccm-remote-file-url:not(.d-none)').val(),
657
- currentFolder: $dialogEl.find('select.ccm-directory-selector').find('option:selected').val()
614
+ currentFolder: $('input[name=fileUploaderDirectoryId]').val()
658
615
  }, fileUploader.options.formData),
659
616
  dataType: 'json',
660
617
  success: function (data) {
@@ -715,98 +672,6 @@
715
672
  $dialogEl.append(fileUploader.templates.getDialog())
716
673
  },
717
674
 
718
- createDirectory: function (directoryName) {
719
- $.ajax({
720
- url: CCM_DISPATCHER_FILENAME + '/ccm/system/file/create_directory' + '?_=' + new Date().getTime(),
721
- method: 'POST',
722
- data: {
723
- ccm_token: CCM_SECURITY_TOKEN,
724
- directoryName: directoryName,
725
- currentFolder: $dialogEl.find('select.ccm-directory-selector').find('option:selected').val()
726
- },
727
- dataType: 'json',
728
- success: function (data) {
729
- if (!data.error) {
730
- // re-fetch the directories and select the new folder
731
- // noinspection JSUnresolvedVariable
732
- fileUploader.fetchDirectories(data.directoryId, function () {
733
- fileUploader.upload()
734
- })
735
- } else {
736
- fileUploader.raiseError(data.errors)
737
- }
738
- }
739
- })
740
- },
741
-
742
- fetchDirectories: function (selectedDirectoryId, clb) {
743
- $.ajax({
744
- url: CCM_DISPATCHER_FILENAME + '/ccm/system/file/fetch_directories' + '?_=' + new Date().getTime(),
745
- method: 'POST',
746
- data: {
747
- ccm_token: CCM_SECURITY_TOKEN
748
- },
749
- dataType: 'json',
750
- success: function (data) {
751
- if (!data.error) {
752
- const $selectBox = $dialogEl.find('select.ccm-directory-selector')
753
-
754
- if (typeof selectedDirectoryId === 'undefined' || selectedDirectoryId === null) {
755
- selectedDirectoryId = $selectBox.find('option:selected').val()
756
- }
757
-
758
- $selectBox.empty()
759
-
760
- let directory = ''
761
-
762
- for (directory of data.directories) {
763
- const $option = $('<option/>')
764
-
765
- // noinspection JSUnresolvedVariable
766
- $option
767
- .attr('data-icon', 'fas fa-folder')
768
- .addClass('level-' + directory.directoryLevel)
769
- .attr('value', directory.directoryId)
770
- .html(directory.directoryName)
771
-
772
- $selectBox.append($option)
773
- }
774
-
775
- // refresh options
776
- $selectBox.selectpicker('refresh')
777
-
778
- if ($selectBox.find('option[value=\'' + selectedDirectoryId + '\']').length) {
779
- // re-selected previous selected option
780
- $selectBox.selectpicker('val', '' + selectedDirectoryId)
781
- } else {
782
- // the option is not available, select first options instead
783
- const firstDirectoryId = $selectBox.find('option:first').val()
784
-
785
- $selectBox.selectpicker('val', '' + firstDirectoryId)
786
- }
787
-
788
- $dialogEl.find('.ccm-file-uploader-new-directory-name').val('')
789
-
790
- if (!$dialogEl.find('.ccm-file-uploader-new-directory-name-container').hasClass('hidden-container')) {
791
- $dialogEl.find('.ccm-file-uploader-create-new-directory-button').trigger('click')
792
- }
793
-
794
- if (typeof clb === 'function') {
795
- clb()
796
- }
797
- } else {
798
- fileUploader.raiseError(data.errors)
799
- }
800
- }
801
- })
802
- },
803
-
804
- initDirectorySelector: function () {
805
- $dialogEl.find('select.ccm-directory-selector')
806
- .selectpicker()
807
- .addClass('form-control')
808
- },
809
-
810
675
  fetchFilesFromIncomingDirectory: function () {
811
676
  $.ajax({
812
677
  url: CCM_DISPATCHER_FILENAME + '/ccm/system/file/fetch_incoming_files' + '?_=' + new Date().getTime(),
@@ -941,11 +806,6 @@
941
806
 
942
807
  break
943
808
  }
944
-
945
- if (!$dialogEl.find('.ccm-file-uploader-new-directory-name-container').hasClass('hidden-container') &&
946
- $dialogEl.find('.ccm-file-uploader-new-directory-name').val().length === 0) {
947
- $dialogEl.closest('.ui-dialog').find('.ccm-file-uploader-submit-button').attr('disabled', 'disabled')
948
- }
949
809
  },
950
810
 
951
811
  reset: function () {
@@ -974,8 +834,7 @@
974
834
 
975
835
  initYourComputerTab: function () {
976
836
  fileUploader.uploadedFiles = []
977
-
978
- $dialogEl.find('.ccm-file-upload-container').dropzone({
837
+ const dropzoneOptions = {
979
838
  url: CCM_DISPATCHER_FILENAME + '/ccm/system/file/upload',
980
839
  previewTemplate: fileUploader.templates.getPreviewItem().html(),
981
840
  autoProcessQueue: false,
@@ -1021,11 +880,9 @@
1021
880
  },
1022
881
 
1023
882
  sending: function (file, xhr, formData) {
1024
- const $selectBox = $dialogEl.find('select.ccm-directory-selector')
1025
-
1026
883
  formData.append('responseFormat', 'dropzone')
1027
884
  formData.append('ccm_token', CCM_SECURITY_TOKEN)
1028
- formData.append('currentFolder', $selectBox.find('option:selected').val())
885
+ formData.append('currentFolder', $('input[name=fileUploaderDirectoryId]').val())
1029
886
 
1030
887
  if (typeof fileUploader.options.formData === 'object') {
1031
888
  let key = ''
@@ -1048,9 +905,6 @@
1048
905
 
1049
906
  fileUploader.dropzone.options.autoProcessQueue = false
1050
907
 
1051
- $dialogEl.find('.ccm-directory-selector').removeAttr('disabled').selectpicker('refresh')
1052
- $dialogEl.find('.ccm-file-uploader-create-new-directory-button').removeClass('disabled')
1053
-
1054
908
  if (fileUploader.uploadedFiles.length !== 0) {
1055
909
  if (typeof fileUploader.options.formData.fID === 'undefined') {
1056
910
  ConcreteEvent.publish('FileManagerAddFilesComplete', {
@@ -1092,11 +946,40 @@
1092
946
 
1093
947
  $fileElement.find('.ccm-file-upload-progress-text-value').html(parseInt(progress) + '%')
1094
948
  $fileElement.addClass('in-progress')
1095
-
1096
- $dialogEl.find('.ccm-directory-selector').attr('disabled', 'disabled').selectpicker('refresh')
1097
- $dialogEl.find('.ccm-file-uploader-create-new-directory-button').addClass('disabled')
1098
949
  }
1099
- })
950
+ }
951
+ if (this.options && this.options.dropzone) {
952
+ for (const key in this.options.dropzone) {
953
+ let skipMimeTypes
954
+ switch (key) {
955
+ case '_dontResizeMimeTypes':
956
+ skipMimeTypes = this.options.dropzone._dontResizeMimeTypes
957
+ if (skipMimeTypes && skipMimeTypes.length) {
958
+ dropzoneOptions.transformFile = function(file, done) {
959
+ if (
960
+ (this.options.resizeWidth || this.options.resizeHeight) &&
961
+ file && file.type && file.type.match(/image.*/) &&
962
+ skipMimeTypes.indexOf(file.type) < 0
963
+ ) {
964
+ return this.resizeImage(
965
+ file,
966
+ this.options.resizeWidth,
967
+ this.options.resizeHeight,
968
+ this.options.resizeMethod,
969
+ done
970
+ )
971
+ }
972
+ return done(file)
973
+ }
974
+ }
975
+ break
976
+ default:
977
+ dropzoneOptions[key] = this.options.dropzone[key]
978
+ break
979
+ }
980
+ }
981
+ }
982
+ $dialogEl.find('.ccm-file-upload-container').dropzone(dropzoneOptions)
1100
983
  },
1101
984
 
1102
985
  uploadComplete: function () {
@@ -1146,7 +1029,6 @@
1146
1029
  $dialogEl.dialog({
1147
1030
  title: ccmi18n_fileuploader.dialogTitle,
1148
1031
  width: '80%',
1149
- height: '800',
1150
1032
  modal: true,
1151
1033
  autoOpen: false,
1152
1034
  buttons: [{
@@ -1158,21 +1040,7 @@
1158
1040
  text: ccmi18n_fileuploader.continueButton,
1159
1041
  click: function (e) {
1160
1042
  e.preventDefault()
1161
-
1162
- if (!$dialogEl.find('.ccm-file-uploader-new-directory-name-container').hasClass('hidden-container')) {
1163
- /*
1164
- * Create the directory before uploading.
1165
- *
1166
- * In this case the upload will be started after the directory has been created.
1167
- */
1168
-
1169
- fileUploader.createDirectory(
1170
- $dialogEl.find('.ccm-file-uploader-new-directory-name').val()
1171
- )
1172
- } else {
1173
- fileUploader.upload()
1174
- }
1175
-
1043
+ fileUploader.upload()
1176
1044
  return false
1177
1045
  }
1178
1046
  }],
@@ -1204,12 +1072,6 @@
1204
1072
 
1205
1073
  fileUploader.forceClose = false
1206
1074
 
1207
- // select the first value in directory input
1208
- const $selectBox = $dialogEl.find('select.ccm-directory-selector')
1209
-
1210
- $selectBox.val($selectBox.find('option:first').val())
1211
- $selectBox.selectpicker('refresh')
1212
-
1213
1075
  // reset everything
1214
1076
  fileUploader.reset()
1215
1077
 
@@ -1218,12 +1080,6 @@
1218
1080
  },
1219
1081
 
1220
1082
  open: function () {
1221
- if (fileUploader.isFunction(fileUploader.options.folderID)) {
1222
- fileUploader.fetchDirectories(parseInt(fileUploader.options.folderID()))
1223
- } else {
1224
- fileUploader.fetchDirectories()
1225
- }
1226
-
1227
1083
  /*
1228
1084
  * Ugly polyfill to re-initialize the bootstrap tab navigation
1229
1085
  * because within a dynamic window the tab's wont work after
@@ -1286,7 +1142,6 @@
1286
1142
 
1287
1143
  // init components
1288
1144
  fileUploader.initTabNavigation()
1289
- fileUploader.initDirectorySelector()
1290
1145
  fileUploader.initCreateNewFolderFunctionality()
1291
1146
 
1292
1147
  fileUploader.initYourComputerTab()
@@ -2,12 +2,15 @@ import 'bootstrap-tourist'
2
2
 
3
3
  import './guide-manager'
4
4
 
5
- import './guides/add-content'
6
- import './guides/add-content-edit-mode'
7
- import './guides/add-page'
8
- import './guides/change-content'
9
- import './guides/change-content-edit-mode'
10
- import './guides/dashboard'
11
- import './guides/location-panel'
12
- import './guides/personalize'
13
5
  import './guides/toolbar'
6
+
7
+ // These guides are no longer used but let's keep them in the source in case we need to repurpose them
8
+ // and/or bring them back.
9
+ // import './guides/add-content'
10
+ // import './guides/add-content-edit-mode'
11
+ // import './guides/add-page'
12
+ // import './guides/change-content'
13
+ // import './guides/change-content-edit-mode'
14
+ // import './guides/dashboard'
15
+ // import './guides/location-panel'
16
+ // import './guides/personalize'