@concretecms/bedrock 1.3.7 → 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/FolderBookmark.vue +0 -1
- package/assets/cms/components/file-manager/Chooser.vue +1 -1
- 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 +24 -4
- 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 +30 -206
- 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
|
@@ -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 () {
|
|
@@ -1020,11 +880,9 @@
|
|
|
1020
880
|
},
|
|
1021
881
|
|
|
1022
882
|
sending: function (file, xhr, formData) {
|
|
1023
|
-
const $selectBox = $dialogEl.find('select.ccm-directory-selector')
|
|
1024
|
-
|
|
1025
883
|
formData.append('responseFormat', 'dropzone')
|
|
1026
884
|
formData.append('ccm_token', CCM_SECURITY_TOKEN)
|
|
1027
|
-
formData.append('currentFolder', $
|
|
885
|
+
formData.append('currentFolder', $('input[name=fileUploaderDirectoryId]').val())
|
|
1028
886
|
|
|
1029
887
|
if (typeof fileUploader.options.formData === 'object') {
|
|
1030
888
|
let key = ''
|
|
@@ -1047,9 +905,6 @@
|
|
|
1047
905
|
|
|
1048
906
|
fileUploader.dropzone.options.autoProcessQueue = false
|
|
1049
907
|
|
|
1050
|
-
$dialogEl.find('.ccm-directory-selector').removeAttr('disabled').selectpicker('refresh')
|
|
1051
|
-
$dialogEl.find('.ccm-file-uploader-create-new-directory-button').removeClass('disabled')
|
|
1052
|
-
|
|
1053
908
|
if (fileUploader.uploadedFiles.length !== 0) {
|
|
1054
909
|
if (typeof fileUploader.options.formData.fID === 'undefined') {
|
|
1055
910
|
ConcreteEvent.publish('FileManagerAddFilesComplete', {
|
|
@@ -1091,9 +946,6 @@
|
|
|
1091
946
|
|
|
1092
947
|
$fileElement.find('.ccm-file-upload-progress-text-value').html(parseInt(progress) + '%')
|
|
1093
948
|
$fileElement.addClass('in-progress')
|
|
1094
|
-
|
|
1095
|
-
$dialogEl.find('.ccm-directory-selector').attr('disabled', 'disabled').selectpicker('refresh')
|
|
1096
|
-
$dialogEl.find('.ccm-file-uploader-create-new-directory-button').addClass('disabled')
|
|
1097
949
|
}
|
|
1098
950
|
}
|
|
1099
951
|
if (this.options && this.options.dropzone) {
|
|
@@ -1177,7 +1029,6 @@
|
|
|
1177
1029
|
$dialogEl.dialog({
|
|
1178
1030
|
title: ccmi18n_fileuploader.dialogTitle,
|
|
1179
1031
|
width: '80%',
|
|
1180
|
-
height: '800',
|
|
1181
1032
|
modal: true,
|
|
1182
1033
|
autoOpen: false,
|
|
1183
1034
|
buttons: [{
|
|
@@ -1189,21 +1040,7 @@
|
|
|
1189
1040
|
text: ccmi18n_fileuploader.continueButton,
|
|
1190
1041
|
click: function (e) {
|
|
1191
1042
|
e.preventDefault()
|
|
1192
|
-
|
|
1193
|
-
if (!$dialogEl.find('.ccm-file-uploader-new-directory-name-container').hasClass('hidden-container')) {
|
|
1194
|
-
/*
|
|
1195
|
-
* Create the directory before uploading.
|
|
1196
|
-
*
|
|
1197
|
-
* In this case the upload will be started after the directory has been created.
|
|
1198
|
-
*/
|
|
1199
|
-
|
|
1200
|
-
fileUploader.createDirectory(
|
|
1201
|
-
$dialogEl.find('.ccm-file-uploader-new-directory-name').val()
|
|
1202
|
-
)
|
|
1203
|
-
} else {
|
|
1204
|
-
fileUploader.upload()
|
|
1205
|
-
}
|
|
1206
|
-
|
|
1043
|
+
fileUploader.upload()
|
|
1207
1044
|
return false
|
|
1208
1045
|
}
|
|
1209
1046
|
}],
|
|
@@ -1235,12 +1072,6 @@
|
|
|
1235
1072
|
|
|
1236
1073
|
fileUploader.forceClose = false
|
|
1237
1074
|
|
|
1238
|
-
// select the first value in directory input
|
|
1239
|
-
const $selectBox = $dialogEl.find('select.ccm-directory-selector')
|
|
1240
|
-
|
|
1241
|
-
$selectBox.val($selectBox.find('option:first').val())
|
|
1242
|
-
$selectBox.selectpicker('refresh')
|
|
1243
|
-
|
|
1244
1075
|
// reset everything
|
|
1245
1076
|
fileUploader.reset()
|
|
1246
1077
|
|
|
@@ -1249,12 +1080,6 @@
|
|
|
1249
1080
|
},
|
|
1250
1081
|
|
|
1251
1082
|
open: function () {
|
|
1252
|
-
if (fileUploader.isFunction(fileUploader.options.folderID)) {
|
|
1253
|
-
fileUploader.fetchDirectories(parseInt(fileUploader.options.folderID()))
|
|
1254
|
-
} else {
|
|
1255
|
-
fileUploader.fetchDirectories()
|
|
1256
|
-
}
|
|
1257
|
-
|
|
1258
1083
|
/*
|
|
1259
1084
|
* Ugly polyfill to re-initialize the bootstrap tab navigation
|
|
1260
1085
|
* because within a dynamic window the tab's wont work after
|
|
@@ -1317,7 +1142,6 @@
|
|
|
1317
1142
|
|
|
1318
1143
|
// init components
|
|
1319
1144
|
fileUploader.initTabNavigation()
|
|
1320
|
-
fileUploader.initDirectorySelector()
|
|
1321
1145
|
fileUploader.initCreateNewFolderFunctionality()
|
|
1322
1146
|
|
|
1323
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'
|
|
@@ -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')
|