@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
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
menuLauncherHoverParentClass: 'ccm-parent-menu-item-hover',
|
|
20
20
|
enabled: true,
|
|
21
21
|
enableClickProxy: true,
|
|
22
|
+
onShow: false,
|
|
22
23
|
onHide: false
|
|
23
24
|
}, options)
|
|
24
25
|
|
|
@@ -280,6 +281,10 @@
|
|
|
280
281
|
ConcreteMenuManager.activeMenu = my
|
|
281
282
|
|
|
282
283
|
ConcreteEvent.publish('ConcreteMenuShow', { menu: my, menuElement: $menu })
|
|
284
|
+
|
|
285
|
+
if (my.options.onShow) {
|
|
286
|
+
my.options.onShow(my)
|
|
287
|
+
}
|
|
283
288
|
},
|
|
284
289
|
|
|
285
290
|
hide: function (e) {
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* I know this is an insane library name. This is a simple plugin meant to bring our vue contexts to different
|
|
2
|
+
/* places */
|
|
3
|
+
/* eslint-disable no-new, no-unused-vars, camelcase, eqeqeq */
|
|
4
|
+
/* global _, ccmi18n, ccmi18n_filemanager, ConcreteProgressiveOperation, ConcreteAlert, ConcreteAssetLoader, ConcreteEvent, ConcreteMenu */
|
|
5
|
+
;(function(global, $) {
|
|
6
|
+
'use strict'
|
|
7
|
+
// jQuery Plugin
|
|
8
|
+
$.fn.concreteVue = function(options) {
|
|
9
|
+
this.each(function () {
|
|
10
|
+
var $element = $(this)
|
|
11
|
+
if (!$element.data('jquery-vue-attached')) {
|
|
12
|
+
Concrete.Vue.activateContext(options.context, function (Vue, config) {
|
|
13
|
+
new Vue({
|
|
14
|
+
el: $element.get(0),
|
|
15
|
+
components: config.components
|
|
16
|
+
})
|
|
17
|
+
})
|
|
18
|
+
$element.data('jquery-vue-attached', true)
|
|
19
|
+
}
|
|
20
|
+
})
|
|
21
|
+
}
|
|
22
|
+
})(global, jQuery)
|
|
@@ -302,82 +302,91 @@
|
|
|
302
302
|
}
|
|
303
303
|
|
|
304
304
|
$.fn.dialog.activateDialogContents = function($dialog) {
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
$dialog.find('button[data-dialog-action=submit]').on('click', function() {
|
|
320
|
-
$dialog.find('[data-dialog-form]').submit()
|
|
321
|
-
})
|
|
322
|
-
|
|
323
|
-
fixDialogButtons($dialog)
|
|
305
|
+
setTimeout(function () {
|
|
306
|
+
// handle buttons
|
|
307
|
+
$dialog.find('button[data-dialog-action=cancel]').on('click', function () {
|
|
308
|
+
$.fn.dialog.closeTop()
|
|
309
|
+
})
|
|
310
|
+
$dialog.find('[data-dialog-form]').each(function () {
|
|
311
|
+
var $form = $(this)
|
|
312
|
+
var options = {}
|
|
313
|
+
if ($form.attr('data-dialog-form-processing') == 'progressive') {
|
|
314
|
+
options.progressiveOperation = true
|
|
315
|
+
options.progressiveOperationElement = 'div[data-dialog-form-element=progress-bar]'
|
|
316
|
+
}
|
|
317
|
+
$form.concreteAjaxForm(options)
|
|
318
|
+
})
|
|
324
319
|
|
|
325
|
-
|
|
326
|
-
|
|
320
|
+
$dialog.find('button[data-dialog-action=submit]').on('click', function () {
|
|
321
|
+
$dialog.find('[data-dialog-form]').submit()
|
|
322
|
+
})
|
|
327
323
|
|
|
328
|
-
|
|
329
|
-
$dialog.find('.ccm-dialog-close').on('click', function() {
|
|
330
|
-
$dialog.dialog('close')
|
|
331
|
-
})
|
|
324
|
+
fixDialogButtons($dialog)
|
|
332
325
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
return new bootstrap.Tooltip(tooltipTriggerEl, { container: '#ccm-tooltip-holder' })
|
|
336
|
-
})
|
|
326
|
+
// make dialogs
|
|
327
|
+
$dialog.find('.dialog-launch').dialog()
|
|
337
328
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
var helpText
|
|
343
|
-
if (ccmi18n.helpPopup) {
|
|
344
|
-
helpText = ccmi18n.helpPopup
|
|
345
|
-
} else {
|
|
346
|
-
helpText = 'Help'
|
|
347
|
-
}
|
|
348
|
-
var button = $('<button class="btn-help"><svg><use xlink:href="#icon-dialog-help" /></svg></button>')
|
|
349
|
-
var container = $('#ccm-tooltip-holder')
|
|
350
|
-
button.insertBefore($dialog.parent().find('.ui-dialog-titlebar-close'))
|
|
329
|
+
// Handle vue components within
|
|
330
|
+
$dialog.find('[data-vue]').each(function() {
|
|
331
|
+
$(this).concreteVue({ context: $(this).attr('data-vue') })
|
|
332
|
+
})
|
|
351
333
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
},
|
|
356
|
-
placement: 'bottom',
|
|
357
|
-
html: true,
|
|
358
|
-
container: container,
|
|
359
|
-
trigger: 'click'
|
|
334
|
+
// automated close handling
|
|
335
|
+
$dialog.find('.ccm-dialog-close').on('click', function () {
|
|
336
|
+
$dialog.dialog('close')
|
|
360
337
|
})
|
|
361
|
-
button.on('shown.bs.popover', function() {
|
|
362
|
-
var binding = function() {
|
|
363
|
-
button.popover('hide', button)
|
|
364
|
-
binding = $.noop
|
|
365
|
-
}
|
|
366
338
|
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
339
|
+
const tooltipTriggerList = [].slice.call($dialog.find('.launch-tooltip'))
|
|
340
|
+
tooltipTriggerList.map(function (tooltipTriggerEl) {
|
|
341
|
+
return new bootstrap.Tooltip(tooltipTriggerEl, {
|
|
342
|
+
container: '#ccm-tooltip-holder'
|
|
370
343
|
})
|
|
344
|
+
})
|
|
371
345
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
346
|
+
// help handling
|
|
347
|
+
if ($dialog.find('.dialog-help').length > 0) {
|
|
348
|
+
$dialog.find('.dialog-help').hide()
|
|
349
|
+
var helpContent = $dialog.find('.dialog-help').html()
|
|
350
|
+
var helpText
|
|
351
|
+
if (ccmi18n.helpPopup) {
|
|
352
|
+
helpText = ccmi18n.helpPopup
|
|
353
|
+
} else {
|
|
354
|
+
helpText = 'Help'
|
|
355
|
+
}
|
|
356
|
+
var button = $('<button class="btn-help"><svg><use xlink:href="#icon-dialog-help" /></svg></button>')
|
|
357
|
+
var container = $('#ccm-tooltip-holder')
|
|
358
|
+
button.insertBefore($dialog.parent().find('.ui-dialog-titlebar-close'))
|
|
359
|
+
|
|
360
|
+
button.popover({
|
|
361
|
+
content: function () {
|
|
362
|
+
return helpContent
|
|
363
|
+
},
|
|
364
|
+
placement: 'bottom',
|
|
365
|
+
html: true,
|
|
366
|
+
container: container,
|
|
367
|
+
trigger: 'click'
|
|
368
|
+
})
|
|
369
|
+
button.on('shown.bs.popover', function () {
|
|
370
|
+
var binding = function () {
|
|
371
|
+
button.popover('hide', button)
|
|
372
|
+
binding = $.noop
|
|
375
373
|
}
|
|
376
|
-
|
|
377
|
-
|
|
374
|
+
|
|
375
|
+
button.on('hide.bs.popover', function (event) {
|
|
376
|
+
button.unbind(event)
|
|
377
|
+
binding = $.noop
|
|
378
|
+
})
|
|
379
|
+
|
|
380
|
+
$('body').mousedown(function (e) {
|
|
381
|
+
if ($(e.target).closest(container).length || $(e.target).closest(button).length) {
|
|
382
|
+
return
|
|
383
|
+
}
|
|
384
|
+
$(this).unbind(e)
|
|
385
|
+
binding()
|
|
386
|
+
})
|
|
378
387
|
})
|
|
379
|
-
}
|
|
380
|
-
}
|
|
388
|
+
}
|
|
389
|
+
}, 10)
|
|
381
390
|
}
|
|
382
391
|
|
|
383
392
|
$.fn.dialog.getTop = function() {
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/* eslint-disable no-new, no-unused-vars, camelcase, eqeqeq */
|
|
2
|
+
/* global bootstrap */
|
|
3
|
+
// This is a bridge between our various old custom code and Bootstrap Modals. The ultimate goal is to first
|
|
4
|
+
// Remove jQuery UI, on the way to removing jQuery (if the latter is ever an option.) So the first thing we need to
|
|
5
|
+
// do is remove all instances of dialog-launch legacy jQuery UI dialogs in favor of a single modal BS modal approach.
|
|
6
|
+
|
|
7
|
+
import bootbox from 'bootbox'
|
|
8
|
+
|
|
9
|
+
class ConcreteModal {
|
|
10
|
+
openExternal(url, title, options) {
|
|
11
|
+
var my = this
|
|
12
|
+
new ConcreteAjaxRequest({
|
|
13
|
+
url: url,
|
|
14
|
+
dataType: 'html',
|
|
15
|
+
success: function (r) {
|
|
16
|
+
options.message = r
|
|
17
|
+
options.title = title
|
|
18
|
+
my.show(options)
|
|
19
|
+
}
|
|
20
|
+
})
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
show(options) {
|
|
24
|
+
options = $.extend(options, {
|
|
25
|
+
className: 'ccm-ui',
|
|
26
|
+
centerVertical: true,
|
|
27
|
+
show: false,
|
|
28
|
+
backdrop: 'static',
|
|
29
|
+
container: '#ccm-tooltip-holder' // This was we get the .ccm-ui namespace for things like transition, etc..
|
|
30
|
+
})
|
|
31
|
+
const $_dialog = bootbox.dialog(options)
|
|
32
|
+
const element = $_dialog.get(0)
|
|
33
|
+
|
|
34
|
+
// Turn the _dialog jQuery object into the new Bs5 modal
|
|
35
|
+
const dialog = new bootstrap.Modal(element)
|
|
36
|
+
|
|
37
|
+
// Handle buttons in the response
|
|
38
|
+
const responseButtons = $_dialog.find('.dialog-buttons')
|
|
39
|
+
if (responseButtons.length) {
|
|
40
|
+
// move it out to the root.
|
|
41
|
+
responseButtons.attr('class', 'modal-footer').insertAfter($_dialog.find('.modal-body'))
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Handle the legacy dialog buttons
|
|
45
|
+
$_dialog.find('[data-dialog-form]').concreteAjaxForm()
|
|
46
|
+
$_dialog.find('button[data-dialog-action=cancel]').on('click', function() {
|
|
47
|
+
dialog.hide()
|
|
48
|
+
})
|
|
49
|
+
$_dialog.find('button[data-dialog-action=submit]').on('click', function() {
|
|
50
|
+
$_dialog.find('[data-dialog-form]').submit()
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
// Change the Close button to be white.
|
|
54
|
+
$_dialog.find('.btn-close').addClass('btn-close-white')
|
|
55
|
+
|
|
56
|
+
// Show the dialog
|
|
57
|
+
// dialog._config.backdrop = 'static'
|
|
58
|
+
dialog.show()
|
|
59
|
+
|
|
60
|
+
if (options.backdrop === 'static') {
|
|
61
|
+
dialog._config.backdrop = 'static'
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
element.addEventListener('hide.bs.modal', function() {
|
|
65
|
+
ConcreteModal.totalOpen--
|
|
66
|
+
})
|
|
67
|
+
ConcreteModal.totalOpen++
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
ConcreteModal.totalOpen = 0
|
|
72
|
+
|
|
73
|
+
global.ConcreteModal = ConcreteModal
|
package/assets/cms/js/panels.js
CHANGED
|
@@ -337,6 +337,10 @@ function ConcretePanel(options) {
|
|
|
337
337
|
$('[data-panel-detail-form]').submit()
|
|
338
338
|
})
|
|
339
339
|
|
|
340
|
+
$content.find('[data-vue]').each(function() {
|
|
341
|
+
$(this).concreteVue({ context: $(this).attr('data-vue') })
|
|
342
|
+
})
|
|
343
|
+
|
|
340
344
|
ConcreteEvent.subscribe('AjaxFormSubmitSuccess', function (e, data) {
|
|
341
345
|
if ($('[data-panel-detail-form="' + data.form + '"]').data('action-after-save') == 'reload') {
|
|
342
346
|
window.location.reload()
|
|
@@ -413,6 +417,10 @@ function ConcretePanel(options) {
|
|
|
413
417
|
})
|
|
414
418
|
|
|
415
419
|
$panel.find('.dialog-launch').dialog()
|
|
420
|
+
$panel.find('[data-vue]').each(function() {
|
|
421
|
+
$(this).concreteVue({ context: $(this).attr('data-vue') })
|
|
422
|
+
})
|
|
423
|
+
|
|
416
424
|
$panel.find('[data-launch-panel-detail]').unbind('.detail').on('click.detail', function () {
|
|
417
425
|
$.fn.dialog.showLoader()
|
|
418
426
|
$('.ccm-panel-menu-item-active').removeClass('ccm-panel-menu-item-active')
|
|
@@ -54,7 +54,6 @@
|
|
|
54
54
|
this.setupCheckboxes()
|
|
55
55
|
this.setupSort()
|
|
56
56
|
this.setupPagination()
|
|
57
|
-
this.setupSelectize()
|
|
58
57
|
this.setupAdvancedSearch()
|
|
59
58
|
this.setupCustomizeColumns()
|
|
60
59
|
this.updateResults(options.result)
|
|
@@ -120,23 +119,6 @@
|
|
|
120
119
|
return data
|
|
121
120
|
}
|
|
122
121
|
|
|
123
|
-
ConcreteAjaxSearch.prototype.setupSelectize = function() {
|
|
124
|
-
var selects = this.$element.find('.ccm-enhanced-select')
|
|
125
|
-
console.log('base')
|
|
126
|
-
if (selects.length) {
|
|
127
|
-
selects.selectpicker({
|
|
128
|
-
liveSearch: true,
|
|
129
|
-
width: '100%'
|
|
130
|
-
})
|
|
131
|
-
}
|
|
132
|
-
// var selects = this.$element.find('.selectize-select')
|
|
133
|
-
// if (selects.length) {
|
|
134
|
-
// selects.selectize({
|
|
135
|
-
// plugins: ['remove_button']
|
|
136
|
-
// })
|
|
137
|
-
// }
|
|
138
|
-
}
|
|
139
|
-
|
|
140
122
|
/**
|
|
141
123
|
* The legacy create menu function for simple list items without multiple selection
|
|
142
124
|
* @param $selector
|
|
@@ -36,13 +36,9 @@
|
|
|
36
36
|
var $content = $container.append(
|
|
37
37
|
renderFieldRowTemplate({ field: r })
|
|
38
38
|
)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
liveSearch: true,
|
|
43
|
-
width: '100%'
|
|
44
|
-
})
|
|
45
|
-
}
|
|
39
|
+
$content.find('[data-vue]').each(function() {
|
|
40
|
+
$(this).concreteVue({ context: $(this).attr('data-vue') })
|
|
41
|
+
})
|
|
46
42
|
}
|
|
47
43
|
})
|
|
48
44
|
}
|
|
@@ -73,13 +69,9 @@
|
|
|
73
69
|
})
|
|
74
70
|
}
|
|
75
71
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
liveSearch: true,
|
|
80
|
-
width: '100%'
|
|
81
|
-
})
|
|
82
|
-
}
|
|
72
|
+
$container.find('[data-vue]').each(function() {
|
|
73
|
+
$(this).concreteVue({ context: $(this).attr('data-vue') })
|
|
74
|
+
})
|
|
83
75
|
}
|
|
84
76
|
|
|
85
77
|
// jQuery Plugin
|
|
@@ -35,13 +35,13 @@
|
|
|
35
35
|
if (options.selected) {
|
|
36
36
|
if (options.mode == 'multiple') {
|
|
37
37
|
$.each(options.selected, function(i, cID) {
|
|
38
|
-
var node = my.$element.find('.ccm-sitemap-tree')
|
|
38
|
+
var node = $.ui.fancytree.getTree(my.$element.find('.ccm-sitemap-tree')).getNodeByKey(String(cID))
|
|
39
39
|
if (node) {
|
|
40
40
|
node.setSelected(true)
|
|
41
41
|
}
|
|
42
42
|
})
|
|
43
43
|
} else {
|
|
44
|
-
var tree = my.$element.find('.ccm-sitemap-tree')
|
|
44
|
+
var tree = $.ui.fancytree.getTree(my.$element.find('.ccm-sitemap-tree'))
|
|
45
45
|
var node = tree.getNodeByKey(String(options.selected))
|
|
46
46
|
if (node) {
|
|
47
47
|
node.setSelected(true)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable no-new, no-unused-vars, camelcase, eqeqeq */
|
|
2
|
-
/* global _, ccmi18n_sitemap, CCM_DISPATCHER_FILENAME, CCM_SECURITY_TOKEN, CCM_REL, Concrete, ConcreteAlert, ConcretePageMenu, ccm_parseJSON, ConcreteProgressiveOperation, ConcreteEvent */
|
|
2
|
+
/* global TomSelect, _, ccmi18n_sitemap, CCM_DISPATCHER_FILENAME, CCM_SECURITY_TOKEN, CCM_REL, Concrete, ConcreteAlert, ConcretePageMenu, ccm_parseJSON, ConcreteProgressiveOperation, ConcreteEvent */
|
|
3
3
|
|
|
4
4
|
/* Base search class for AJAX forms in the UI */
|
|
5
5
|
;(function(global, $) {
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
|
|
48
48
|
getTree: function() {
|
|
49
49
|
var my = this
|
|
50
|
-
return my.$sitemap
|
|
50
|
+
return $.ui.fancytree.getTree(my.$sitemap)
|
|
51
51
|
},
|
|
52
52
|
|
|
53
53
|
setupSiteTreeSelector: function(tree) {
|
|
@@ -60,13 +60,14 @@
|
|
|
60
60
|
my.$element.find('div.ccm-sitemap-tree-selector-wrapper').append($(my.localesWrapperTemplate))
|
|
61
61
|
var $menu = my.$element.find('div.ccm-sitemap-tree-selector-wrapper select')
|
|
62
62
|
|
|
63
|
+
// @todo - refactor TomSelect to bring back nice styling of flags, etc...
|
|
63
64
|
if (tree.entryGroups && tree.entryGroups.length) {
|
|
64
65
|
$.each(tree.entryGroups, function (gi, group) {
|
|
65
66
|
var $optgroup = $('<optgroup label="' + group.label + '">')
|
|
66
67
|
|
|
67
68
|
$.each(tree.entries, function (ti, entry) {
|
|
68
69
|
if (entry.class == group.value) {
|
|
69
|
-
var $option = '<option value="' + entry.siteTreeID + '"
|
|
70
|
+
var $option = '<option value="' + entry.siteTreeID + '"'
|
|
70
71
|
|
|
71
72
|
if (entry.isSelected) {
|
|
72
73
|
$option += ' selected'
|
|
@@ -81,7 +82,7 @@
|
|
|
81
82
|
})
|
|
82
83
|
} else {
|
|
83
84
|
$.each(tree.entries, function (ti, entry) {
|
|
84
|
-
var $option = '<option value="' + entry.siteTreeID + '"
|
|
85
|
+
var $option = '<option value="' + entry.siteTreeID + '"'
|
|
85
86
|
|
|
86
87
|
if (entry.isSelected) {
|
|
87
88
|
$option += ' selected'
|
|
@@ -92,19 +93,13 @@
|
|
|
92
93
|
})
|
|
93
94
|
}
|
|
94
95
|
|
|
95
|
-
$menu.
|
|
96
|
-
liveSearch: true,
|
|
97
|
-
maxOptions: 1
|
|
98
|
-
})
|
|
96
|
+
var menuSelect = new TomSelect($menu.get(0))
|
|
99
97
|
|
|
100
|
-
|
|
101
|
-
var
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
source.data.siteTreeID = treeID
|
|
106
|
-
my.getTree().reload(source)
|
|
107
|
-
}
|
|
98
|
+
menuSelect.on('change', function (treeID) {
|
|
99
|
+
var source = my.getTree().options.source
|
|
100
|
+
my.options.siteTreeID = treeID
|
|
101
|
+
source.data.siteTreeID = treeID
|
|
102
|
+
my.getTree().reload(source)
|
|
108
103
|
})
|
|
109
104
|
}
|
|
110
105
|
}
|
|
@@ -340,10 +335,10 @@
|
|
|
340
335
|
}
|
|
341
336
|
ConcreteEvent.unsubscribe('SitemapDeleteRequestComplete.sitemap')
|
|
342
337
|
ConcreteEvent.subscribe('SitemapDeleteRequestComplete.sitemap', function(e) {
|
|
343
|
-
var node = my.$sitemap.
|
|
338
|
+
var node = $.ui.fancytree.getTree($(my.$sitemap)).getActiveNode()
|
|
344
339
|
var parent = node.parent
|
|
345
340
|
my.reloadNode(parent)
|
|
346
|
-
$(my.$sitemap)
|
|
341
|
+
$.ui.fancytree.getTree($(my.$sitemap)).visit(function(node) {
|
|
347
342
|
// update the trash node when a page is deleted
|
|
348
343
|
if (node.data.isTrash) {
|
|
349
344
|
var isTrashNodeExpanded = node.expanded
|
|
@@ -456,7 +451,7 @@
|
|
|
456
451
|
if (pg.length) {
|
|
457
452
|
pg.find('a:not([disabled])').unbind('click').on('click', function() {
|
|
458
453
|
var href = $(this).attr('href')
|
|
459
|
-
var root = my.$sitemap.
|
|
454
|
+
var root = $.ui.fancytree.getTree(my.$sitemap).getRootNode()
|
|
460
455
|
jQuery.fn.dialog.showLoader()
|
|
461
456
|
$.ajax({
|
|
462
457
|
dataType: 'json',
|
|
@@ -482,7 +477,7 @@
|
|
|
482
477
|
|
|
483
478
|
(my.options.onDisplaySingleLevel || $.noop).call(this, node)
|
|
484
479
|
|
|
485
|
-
var root = my.$sitemap.
|
|
480
|
+
var root = $.ui.fancytree.getTree(my.$sitemap).getRootNode()
|
|
486
481
|
// my.$sitemap.fancytree('option', 'minExpandLevel', minExpandLevel);
|
|
487
482
|
var ajaxData = $.extend({
|
|
488
483
|
dataType: 'json',
|
package/assets/cms/js/toolbar.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable no-new, no-unused-vars, camelcase, eqeqeq */
|
|
2
|
-
/* global CCM_DISPATCHER_FILENAME, ConcreteEvent, ConcreteHelpGuideManager, ConcretePanelManager, bootstrap */
|
|
2
|
+
/* global CCM_DISPATCHER_FILENAME, ConcreteModal, ConcreteEvent, ConcreteHelpGuideManager, ConcretePanelManager, bootstrap */
|
|
3
3
|
|
|
4
4
|
/* Basic toolbar class */
|
|
5
5
|
;(function(global, $) {
|
|
@@ -14,6 +14,28 @@
|
|
|
14
14
|
$searchResults.css('right', $(window).width() - $searchInput.offset().left - $searchResults.width() - 1)
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
function setupAnnouncementAndHelp() {
|
|
18
|
+
if (document.querySelectorAll('div[data-wrapper=concrete-announcement-broadcast]').length) {
|
|
19
|
+
Concrete.Vue.activateContext('cms', function (Vue, config) {
|
|
20
|
+
new Vue({
|
|
21
|
+
el: 'div[data-wrapper=concrete-announcement-broadcast]',
|
|
22
|
+
components: config.components
|
|
23
|
+
})
|
|
24
|
+
})
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
$(document.body).on('click', 'a[data-launch=help-modal]', function (e) {
|
|
28
|
+
e.stopPropagation()
|
|
29
|
+
e.preventDefault()
|
|
30
|
+
|
|
31
|
+
const modal = new ConcreteModal()
|
|
32
|
+
const url = new URL($(this).attr('href'))
|
|
33
|
+
modal.openExternal(url, ccmi18n.helpPopup, {
|
|
34
|
+
size: 'lg'
|
|
35
|
+
})
|
|
36
|
+
})
|
|
37
|
+
}
|
|
38
|
+
|
|
17
39
|
function setupHelpNotifications() {
|
|
18
40
|
var manager = ConcreteHelpGuideManager.get()
|
|
19
41
|
if (manager.getGuideToLaunchOnRefresh()) {
|
|
@@ -62,7 +84,7 @@
|
|
|
62
84
|
|
|
63
85
|
const tooltipTriggerList = [].slice.call(document.querySelectorAll('.launch-tooltip'))
|
|
64
86
|
tooltipTriggerList.map(function (tooltipTriggerEl) {
|
|
65
|
-
return new bootstrap.Tooltip(tooltipTriggerEl, {
|
|
87
|
+
return bootstrap.Tooltip.getInstance(tooltipTriggerEl) || new bootstrap.Tooltip(tooltipTriggerEl, {
|
|
66
88
|
container: '#ccm-tooltip-holder',
|
|
67
89
|
delay: {
|
|
68
90
|
show: 500,
|
|
@@ -324,6 +346,7 @@
|
|
|
324
346
|
setupTooltips()
|
|
325
347
|
setupPageAlerts()
|
|
326
348
|
setupHelpNotifications()
|
|
349
|
+
setupAnnouncementAndHelp()
|
|
327
350
|
setupMobileNav()
|
|
328
351
|
}
|
|
329
352
|
},
|
package/assets/cms/js/tree.js
CHANGED
|
@@ -155,7 +155,7 @@ ConcreteTree.prototype = {
|
|
|
155
155
|
if (options.removeNodesByKey.length) {
|
|
156
156
|
for (var i = 0; i < options.removeNodesByKey.length; i++) {
|
|
157
157
|
var nodeID = options.removeNodesByKey[i]
|
|
158
|
-
var node =
|
|
158
|
+
var node = $.ui.fancytree.getTree($tree).getNodeByKey(String(nodeID))
|
|
159
159
|
if (node) {
|
|
160
160
|
node.remove()
|
|
161
161
|
}
|
|
@@ -168,7 +168,7 @@ ConcreteTree.prototype = {
|
|
|
168
168
|
|
|
169
169
|
var selectedNodes
|
|
170
170
|
if (options.chooseNodeInForm) {
|
|
171
|
-
selectedNodes =
|
|
171
|
+
selectedNodes = $.ui.fancytree.getTree($tree)
|
|
172
172
|
selectedNodes = selectedNodes.getSelectedNodes()
|
|
173
173
|
if (selectedNodes.length) {
|
|
174
174
|
var keys = $.map(selectedNodes, function (node) {
|
|
@@ -332,7 +332,7 @@ ConcreteTree.prototype = {
|
|
|
332
332
|
ConcreteAlert.dialog(ccmi18n.error, r.errors.join('<br>'))
|
|
333
333
|
} else {
|
|
334
334
|
jQuery.fn.dialog.closeTop()
|
|
335
|
-
var node =
|
|
335
|
+
var node = $.ui.fancytree.getTree($tree).getNodeByKey(String(r.treeNodeParentID))
|
|
336
336
|
jQuery.fn.dialog.showLoader()
|
|
337
337
|
my.reloadNode(node, function () {
|
|
338
338
|
jQuery.fn.dialog.hideLoader()
|
|
@@ -411,23 +411,23 @@ ConcreteTree.setupTreeEvents = function (my) {
|
|
|
411
411
|
var node
|
|
412
412
|
if (nodes.length) {
|
|
413
413
|
for (var i = 0; i < nodes.length; i++) {
|
|
414
|
-
node =
|
|
414
|
+
node = $.ui.fancytree.getTree($tree).getNodeByKey(String(nodes[i].treeNodeParentID))
|
|
415
415
|
node.addChildren(nodes)
|
|
416
416
|
}
|
|
417
417
|
} else {
|
|
418
|
-
node =
|
|
418
|
+
node = $.ui.fancytree.getTree($tree).getNodeByKey(String(nodes.treeNodeParentID))
|
|
419
419
|
node.addChildren(nodes)
|
|
420
420
|
}
|
|
421
421
|
})
|
|
422
422
|
ConcreteEvent.subscribe('ConcreteTreeUpdateTreeNode.concreteTree', function (e, r) {
|
|
423
423
|
var $tree = $('[data-tree=' + my.options.treeID + ']')
|
|
424
|
-
var node =
|
|
424
|
+
var node = $.ui.fancytree.getTree($tree).getNodeByKey(String(r.node.key))
|
|
425
425
|
node.fromDict(r.node)
|
|
426
426
|
node.render()
|
|
427
427
|
})
|
|
428
428
|
ConcreteEvent.subscribe('ConcreteTreeDeleteTreeNode.concreteTree', function (e, r) {
|
|
429
429
|
var $tree = $('[data-tree=' + my.options.treeID + ']')
|
|
430
|
-
var node =
|
|
430
|
+
var node = $.ui.fancytree.getTree($tree).getNodeByKey(String(r.node.treeNodeID))
|
|
431
431
|
node.remove()
|
|
432
432
|
})
|
|
433
433
|
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/* global ccmi18n, CCM_DISPATCHER_FILENAME, ConcreteAjaxRequest, ConcreteEvent */
|
|
2
|
+
class ConcreteUserGroupManager {
|
|
3
|
+
static launchDialog(callback, opts) {
|
|
4
|
+
const options = {
|
|
5
|
+
displayDialogButtons: true
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
$.extend(options, opts)
|
|
9
|
+
|
|
10
|
+
$.fn.dialog.open({
|
|
11
|
+
title: ccmi18n.chooseGroup,
|
|
12
|
+
href: `${CCM_DISPATCHER_FILENAME}/ccm/system/dialogs/groups/search`,
|
|
13
|
+
width: '740px',
|
|
14
|
+
modal: true,
|
|
15
|
+
height: '600px',
|
|
16
|
+
data: options,
|
|
17
|
+
onOpen: function() {
|
|
18
|
+
ConcreteEvent.unsubscribe('SelectGroup.core')
|
|
19
|
+
ConcreteEvent.subscribe('SelectGroup.core', function (e, response) {
|
|
20
|
+
$.fn.dialog.closeTop()
|
|
21
|
+
callback(response)
|
|
22
|
+
})
|
|
23
|
+
}
|
|
24
|
+
})
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static getGroupDetails(groupID, callbackSuccess, callbackFailure) {
|
|
28
|
+
const options = {
|
|
29
|
+
url: `${CCM_DISPATCHER_FILENAME}/ccm/system/group/get_json`,
|
|
30
|
+
data: { gID: groupID },
|
|
31
|
+
skipResponseValidation: true,
|
|
32
|
+
success(r) {
|
|
33
|
+
if (r.error) {
|
|
34
|
+
if (callbackFailure) {
|
|
35
|
+
callbackFailure(r)
|
|
36
|
+
} else {
|
|
37
|
+
ConcreteAjaxRequest.validateResponse(r)
|
|
38
|
+
}
|
|
39
|
+
} else if (callbackSuccess) {
|
|
40
|
+
callbackSuccess(r)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (callbackFailure) {
|
|
45
|
+
options.error = function(r) {
|
|
46
|
+
callbackFailure(r)
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/* eslint-disable no-new */
|
|
50
|
+
new ConcreteAjaxRequest(options)
|
|
51
|
+
/* eslint-enable no-new */
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
global.ConcreteUserGroupManager = ConcreteUserGroupManager
|
package/assets/cms/js/users.js
CHANGED