@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.
- package/.eslintrc.yml +2 -0
- package/assets/account/js/frontend/components/AvatarCropper.vue +159 -0
- package/assets/account/js/frontend.js +1 -1
- package/assets/account/scss/frontend/_frontend.scss +2 -0
- package/assets/account/scss/frontend/avatar/_avatar-cropper.scss +82 -0
- package/assets/account/scss/frontend/avatar/_avatar.scss +6 -0
- package/assets/bedrock/scss/_frontend.scss +0 -1
- package/assets/calendar/js/backend/duration.js +13 -13
- package/assets/calendar/js/vendor/fullcalendar.js +1 -0
- package/assets/cms/components/Announcement/Action/ExternalLinkAction.vue +25 -0
- package/assets/cms/components/Announcement/Action/GuideAction.vue +36 -0
- package/assets/cms/components/Announcement/Action/VideoAction.vue +31 -0
- package/assets/cms/components/Announcement/Broadcast.vue +63 -0
- package/assets/cms/components/Announcement/Button/ExternalLinkButton.vue +26 -0
- package/assets/cms/components/Announcement/Header/Header.vue +33 -0
- package/assets/cms/components/Announcement/Item/Item.vue +50 -0
- package/assets/cms/components/Announcement/Modal/Modal.vue +77 -0
- package/assets/cms/components/Announcement/Slide/CollectSiteInformationSlide.vue +61 -0
- package/assets/cms/components/Announcement/Slide/FeatureSlide.vue +81 -0
- package/assets/cms/components/Announcement/Slide/WelcomeSlide.vue +87 -0
- package/assets/cms/components/Help/Modal.vue +48 -0
- package/assets/cms/components/Image/ThumbnailEditor.vue +117 -0
- package/assets/cms/components/RunningProcessList.vue +6 -1
- package/assets/cms/components/customizer/FontFamilyPageCustomizerWidget.vue +27 -7
- package/assets/cms/components/file-manager/Chooser/FileManager.vue +0 -1
- package/assets/cms/components/file-manager/Chooser/FileUpload.vue +5 -0
- package/assets/cms/components/file-manager/Chooser/FolderBookmark.vue +0 -1
- package/assets/cms/components/file-manager/Chooser.vue +6 -1
- package/assets/cms/components/file-manager/Uploader/UploadFromComputer.vue +49 -9
- package/assets/cms/components/file-manager/Uploader.vue +7 -0
- package/assets/cms/components/form/ConcreteAjaxSelect.vue +173 -0
- package/assets/cms/components/form/ConcreteExpressEntrySelect.vue +74 -0
- package/assets/cms/components/form/ConcreteFileDirectoryInput.vue +28 -26
- package/assets/cms/components/form/ConcreteFileInput.vue +17 -5
- package/assets/cms/components/form/ConcreteGroupInput.vue +134 -0
- package/assets/cms/components/form/ConcreteLocaleSelect.vue +58 -0
- package/assets/cms/components/form/ConcreteOptionSelect.vue +92 -0
- package/assets/cms/components/form/ConcretePageSelect.vue +67 -0
- package/assets/cms/components/form/ConcreteSelect.vue +75 -0
- package/assets/cms/components/form/ConcreteThemeColorInput.vue +19 -14
- package/assets/cms/components/form/ConcreteUserInput.vue +69 -29
- package/assets/cms/components/form/ConcreteUserSelect.vue +126 -0
- package/assets/cms/components/form/IconSelector.vue +14 -5
- package/assets/cms/components/form/PasswordInput.vue +141 -24
- package/assets/cms/components/groups/Chooser.vue +6 -5
- package/assets/cms/components/index.js +24 -0
- package/assets/cms/components/toolbar/ConcreteToolbarSiteList.vue +62 -0
- package/assets/cms/components/user/Chooser/Search.vue +5 -0
- package/assets/cms/components/user/Chooser/Users.vue +6 -2
- package/assets/cms/components/user/Chooser.vue +9 -3
- package/assets/cms/js/ajax-request/base.js +13 -4
- package/assets/cms/js/alert.js +2 -1
- package/assets/cms/js/base.js +3 -10
- package/assets/cms/js/edit-mode/area.js +0 -35
- package/assets/cms/js/edit-mode/block.js +27 -0
- package/assets/cms/js/edit-mode/containerblock.js +33 -3
- package/assets/cms/js/edit-mode/editmode.js +12 -0
- package/assets/cms/js/edit-mode/layout.js +56 -0
- package/assets/cms/js/edit-mode/style-customizer/style-customizer.js +0 -1
- package/assets/cms/js/file-manager/uploader.js +64 -209
- package/assets/cms/js/help/help.js +11 -8
- package/assets/cms/js/in-context-menu.js +5 -0
- package/assets/cms/js/jquery-vue.js +22 -0
- package/assets/cms/js/legacy-dialog.js +74 -65
- package/assets/cms/js/modal.js +73 -0
- package/assets/cms/js/panels.js +8 -0
- package/assets/cms/js/search/base.js +0 -18
- package/assets/cms/js/search/field-selector.js +6 -14
- package/assets/cms/js/select-combo-box.js +2 -0
- package/assets/cms/js/sitemap/sitemap-selector.js +2 -2
- package/assets/cms/js/sitemap/sitemap.js +15 -20
- package/assets/cms/js/toolbar.js +25 -2
- package/assets/cms/js/tree.js +7 -7
- package/assets/cms/js/users/group-manager.js +55 -0
- package/assets/cms/js/users/user-manager.js +2 -1
- package/assets/cms/js/users.js +1 -0
- package/assets/cms/js/vue/Manager.js +6 -3
- package/assets/cms/scss/_base.scss +2 -8
- package/assets/cms/scss/_cards.scss +7 -0
- package/assets/cms/scss/_file-manager.scss +1 -0
- package/assets/cms/scss/_file-uploader.scss +13 -3
- package/assets/cms/scss/_help.scss +11 -2
- package/assets/cms/scss/_item-selector.scss +10 -0
- package/assets/cms/scss/_layouts.scss +16 -0
- package/assets/cms/scss/_page-areas.scss +517 -245
- package/assets/cms/scss/_popover.scss +5 -0
- package/assets/cms/scss/_select-combo-box.scss +18 -0
- package/assets/cms/scss/_toolbar.scss +5 -14
- package/assets/cms/scss/_transitions.scss +13 -0
- package/assets/cms/scss/_variables.scss +18 -7
- package/assets/cms/scss/bootstrap/_reboot-tags.scss +17 -32
- package/assets/cms/scss/bootstrap/_reboot.scss +17 -7
- package/assets/cms/scss/bootstrap/_root-modified.scss +41 -20
- package/assets/cms/scss/file-manager/_thumbnail-image-editor.scss +45 -0
- package/assets/cms/scss/panels/_help.scss +0 -10
- package/assets/staging/scss/frontend/_frontend.scss +12 -0
- package/assets/staging/scss/frontend.scss +4 -0
- package/package.json +9 -9
- package/assets/account/js/frontend/components/Avatar/Avatar.js +0 -270
- package/assets/account/js/frontend/components/Avatar/Avatar.scss +0 -17
- package/assets/account/js/frontend/components/Avatar/Avatar.vue +0 -18
- package/assets/account/js/frontend/components/Avatar/Cropper.js +0 -202
- package/assets/account/js/frontend/components/Avatar/Cropper.scss +0 -136
- package/assets/account/js/frontend/components/Avatar/Cropper.vue +0 -40
- package/assets/bedrock/scss/_theme-grid.scss +0 -7
- package/assets/cms/js/edit-mode/style-customizer/inline-toolbar.js +0 -279
- package/assets/cms/js/modifiable-ajax-bootstrap-select.js +0 -78
- 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.
|
|
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.
|
|
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.
|
|
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,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
|
-
|
|
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
|
-
$
|
|
451
|
-
|
|
452
|
-
$
|
|
453
|
-
|
|
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: $
|
|
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: $
|
|
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', $
|
|
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'
|