@oat-sa/tao-core-ui 1.64.1 → 1.64.2
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/LICENSE +339 -339
- package/README.md +22 -22
- package/dist/actionbar.js +92 -92
- package/dist/adder.js +109 -109
- package/dist/animable/absorbable/absorbable.js +29 -29
- package/dist/animable/absorbable/css/absorb.css +7 -7
- package/dist/animable/absorbable/css/absorb.css.map +1 -1
- package/dist/animable/pulsable/css/pulse.css +7 -7
- package/dist/animable/pulsable/css/pulse.css.map +1 -1
- package/dist/animable/pulsable/pulsable.js +23 -23
- package/dist/areaBroker.js +51 -51
- package/dist/autocomplete/css/autocomplete.css +7 -7
- package/dist/autocomplete/css/autocomplete.css.map +1 -1
- package/dist/autocomplete.js +384 -384
- package/dist/autoscroll.js +22 -22
- package/dist/badge/badge.js +35 -35
- package/dist/badge/css/badge.css +7 -7
- package/dist/badge/css/badge.css.map +1 -1
- package/dist/breadcrumbs/css/breadcrumbs.css +7 -7
- package/dist/breadcrumbs/css/breadcrumbs.css.map +1 -1
- package/dist/breadcrumbs.js +57 -57
- package/dist/btngrouper.js +64 -64
- package/dist/bulkActionPopup/css/bulkActionPopup.css +7 -7
- package/dist/bulkActionPopup/css/bulkActionPopup.css.map +1 -1
- package/dist/bulkActionPopup.js +91 -91
- package/dist/button.js +89 -89
- package/dist/calculator/css/calculator.css +10 -10
- package/dist/calculator/css/calculator.css.map +1 -1
- package/dist/calculator.js +51 -51
- package/dist/cascadingComboBox.js +34 -34
- package/dist/ckeditor/ckConfigurator.js +49 -49
- package/dist/ckeditor/dtdHandler.js +110 -110
- package/dist/class/css/selector.css +7 -7
- package/dist/class/css/selector.css.map +1 -1
- package/dist/class/selector.js +98 -98
- package/dist/component/alignable.js +81 -81
- package/dist/component/containable.js +37 -37
- package/dist/component/css/components.css +7 -7
- package/dist/component/css/components.css.map +1 -1
- package/dist/component/css/windowComponent.css +7 -7
- package/dist/component/css/windowComponent.css.map +1 -1
- package/dist/component/draggable.js +25 -25
- package/dist/component/placeable.js +70 -70
- package/dist/component/resizable.js +61 -61
- package/dist/component/stackable.js +20 -20
- package/dist/component/windowed.js +46 -46
- package/dist/component.js +140 -140
- package/dist/container.js +76 -76
- package/dist/contextualPopup/css/contextualPopup.css +7 -7
- package/dist/contextualPopup/css/contextualPopup.css.map +1 -1
- package/dist/contextualPopup.js +100 -100
- package/dist/dashboard/css/dashboard.css +7 -7
- package/dist/dashboard/css/dashboard.css.map +1 -1
- package/dist/dashboard.js +62 -62
- package/dist/datalist/css/datalist.css +7 -7
- package/dist/datalist/css/datalist.css.map +1 -1
- package/dist/datalist.js +147 -147
- package/dist/datatable/css/datatable.css +7 -7
- package/dist/datatable/css/datatable.css.map +1 -1
- package/dist/datatable/filterStrategy/filterStrategy.js +27 -27
- package/dist/datatable/filterStrategy/multiple.js +25 -25
- package/dist/datatable/filterStrategy/single.js +25 -25
- package/dist/datatable.js +377 -377
- package/dist/dateRange/css/dateRange.css +7 -7
- package/dist/dateRange/css/dateRange.css.map +1 -1
- package/dist/dateRange/dateRange.js +97 -97
- package/dist/datetime/css/picker.css +7 -7
- package/dist/datetime/css/picker.css.map +1 -1
- package/dist/datetime/picker.js +161 -161
- package/dist/deleter.js +79 -79
- package/dist/destination/css/selector.css +7 -7
- package/dist/destination/css/selector.css.map +1 -1
- package/dist/destination/selector.js +52 -52
- package/dist/dialog/alert.js +26 -26
- package/dist/dialog/confirm.js +27 -27
- package/dist/dialog/confirmDelete.js +31 -31
- package/dist/dialog.js +141 -141
- package/dist/disabler.js +90 -90
- package/dist/documentViewer/css/documentViewer.css +7 -7
- package/dist/documentViewer/css/documentViewer.css.map +1 -1
- package/dist/documentViewer/providers/pdfViewer/fallback/viewer.js +30 -30
- package/dist/documentViewer/providers/pdfViewer/pdfjs/areaBroker.js +25 -25
- package/dist/documentViewer/providers/pdfViewer/pdfjs/findBar.js +120 -120
- package/dist/documentViewer/providers/pdfViewer/pdfjs/pageView.js +89 -89
- package/dist/documentViewer/providers/pdfViewer/pdfjs/pagesManager.js +52 -52
- package/dist/documentViewer/providers/pdfViewer/pdfjs/searchEngine.js +112 -112
- package/dist/documentViewer/providers/pdfViewer/pdfjs/textManager.js +67 -67
- package/dist/documentViewer/providers/pdfViewer/pdfjs/viewer.js +81 -81
- package/dist/documentViewer/providers/pdfViewer/pdfjs/wrapper.js +111 -111
- package/dist/documentViewer/providers/pdfViewer.js +29 -29
- package/dist/documentViewer/viewerFactory.js +71 -71
- package/dist/documentViewer.js +86 -86
- package/dist/dropdown/css/dropdown.css +7 -7
- package/dist/dropdown/css/dropdown.css.map +1 -1
- package/dist/dropdown.js +84 -84
- package/dist/durationer.js +58 -58
- package/dist/dynamicComponent/css/dynamicComponent.css +7 -7
- package/dist/dynamicComponent/css/dynamicComponent.css.map +1 -1
- package/dist/dynamicComponent.js +103 -103
- package/dist/feedback.js +84 -84
- package/dist/figure/FigureStateActive.js +111 -111
- package/dist/filesender.js +26 -26
- package/dist/filter.js +34 -34
- package/dist/form/css/dropdownForm.css +7 -7
- package/dist/form/css/dropdownForm.css.map +1 -1
- package/dist/form/css/form.css +7 -7
- package/dist/form/css/form.css.map +1 -1
- package/dist/form/dropdownForm.js +99 -99
- package/dist/form/form.js +248 -248
- package/dist/form/simpleForm.js +71 -71
- package/dist/form/validator/css/validator.css +7 -7
- package/dist/form/validator/css/validator.css.map +1 -1
- package/dist/form/validator/renderer.js +52 -52
- package/dist/form/validator/validator.js +103 -103
- package/dist/form/widget/css/widget.css +7 -7
- package/dist/form/widget/css/widget.css.map +1 -1
- package/dist/form/widget/definitions.js +24 -24
- package/dist/form/widget/loader.js +16 -16
- package/dist/form/widget/providers/checkBox.js +62 -62
- package/dist/form/widget/providers/comboBox.js +46 -46
- package/dist/form/widget/providers/default.js +35 -35
- package/dist/form/widget/providers/hidden.js +37 -37
- package/dist/form/widget/providers/hiddenBox.js +58 -58
- package/dist/form/widget/providers/radioBox.js +57 -57
- package/dist/form/widget/providers/textArea.js +35 -35
- package/dist/form/widget/providers/textBox.js +34 -34
- package/dist/form/widget/widget.js +141 -141
- package/dist/form.js +10 -10
- package/dist/formValidator/formValidator.js +61 -61
- package/dist/formValidator/highlighters/highlighter.js +41 -41
- package/dist/formValidator/highlighters/message.js +29 -29
- package/dist/formValidator/highlighters/tooltip.js +32 -32
- package/dist/generis/form/css/form.css +7 -7
- package/dist/generis/form/css/form.css.map +1 -1
- package/dist/generis/form/form.js +73 -73
- package/dist/generis/validator/css/validator.css +7 -7
- package/dist/generis/validator/css/validator.css.map +1 -1
- package/dist/generis/validator/validator.js +38 -38
- package/dist/generis/widget/checkBox/checkBox.js +39 -39
- package/dist/generis/widget/comboBox/comboBox.js +32 -32
- package/dist/generis/widget/css/widget.css +7 -7
- package/dist/generis/widget/css/widget.css.map +1 -1
- package/dist/generis/widget/hiddenBox/hiddenBox.js +40 -40
- package/dist/generis/widget/loader.js +20 -20
- package/dist/generis/widget/textBox/textBox.js +27 -27
- package/dist/generis/widget/widget.js +47 -47
- package/dist/groupedComboBox.js +36 -36
- package/dist/groupvalidator.js +19 -19
- package/dist/hider.js +41 -41
- package/dist/highlighter.js +278 -278
- package/dist/image/ImgStateActive/extractLabel.js +20 -20
- package/dist/image/ImgStateActive/helper.js +16 -16
- package/dist/image/ImgStateActive/initHelper.js +85 -85
- package/dist/image/ImgStateActive/initMediaEditor.js +48 -48
- package/dist/image/ImgStateActive/mediaSizer.js +32 -32
- package/dist/image/ImgStateActive.js +104 -104
- package/dist/incrementer.js +58 -58
- package/dist/inplacer.js +87 -87
- package/dist/interactUtils.js +42 -42
- package/dist/itemButtonList/css/item-button-list.css +23 -23
- package/dist/itemButtonList/css/item-button-list.css.map +1 -1
- package/dist/itemButtonList.js +102 -102
- package/dist/keyNavigation/navigableDomElement.js +76 -76
- package/dist/keyNavigation/navigator.js +158 -158
- package/dist/listbox/css/listbox.css +7 -7
- package/dist/listbox/css/listbox.css.map +1 -1
- package/dist/listbox.js +84 -84
- package/dist/liststyler.js +57 -57
- package/dist/loadingButton/css/button.css +7 -7
- package/dist/loadingButton/css/button.css.map +1 -1
- package/dist/loadingButton/loadingButton.js +35 -35
- package/dist/lock.js +112 -112
- package/dist/login/login.js +87 -87
- package/dist/maths/calculator/basicCalculator.js +50 -50
- package/dist/maths/calculator/calculatorComponent.js +29 -29
- package/dist/maths/calculator/core/areaBroker.js +25 -25
- package/dist/maths/calculator/core/board.js +300 -300
- package/dist/maths/calculator/core/expression.js +98 -98
- package/dist/maths/calculator/core/labels.js +16 -16
- package/dist/maths/calculator/core/plugin.js +19 -19
- package/dist/maths/calculator/core/terms.js +26 -26
- package/dist/maths/calculator/core/tokenizer.js +98 -98
- package/dist/maths/calculator/core/tokens.js +75 -75
- package/dist/maths/calculator/css/calculator.css +7 -7
- package/dist/maths/calculator/css/calculator.css.map +1 -1
- package/dist/maths/calculator/defaultCalculator.js +23 -23
- package/dist/maths/calculator/plugins/core/degrad.js +22 -22
- package/dist/maths/calculator/plugins/core/history.js +45 -45
- package/dist/maths/calculator/plugins/core/remind.js +22 -22
- package/dist/maths/calculator/plugins/core/stepNavigation.js +31 -31
- package/dist/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +48 -48
- package/dist/maths/calculator/plugins/modifiers/pow10.js +35 -35
- package/dist/maths/calculator/plugins/modifiers/sign.js +90 -90
- package/dist/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +47 -47
- package/dist/maths/calculator/pluginsLoader.js +21 -21
- package/dist/maths/calculator/scientificCalculator.js +78 -78
- package/dist/mediaEditor/mediaEditorComponent.js +51 -51
- package/dist/mediaEditor/plugins/mediaAlignment/helper.js +16 -16
- package/dist/mediaEditor/plugins/mediaAlignment/mediaAlignmentComponent.js +47 -47
- package/dist/mediaEditor/plugins/mediaAlignment/style.css +7 -7
- package/dist/mediaEditor/plugins/mediaDimension/helper.js +70 -70
- package/dist/mediaEditor/plugins/mediaDimension/mediaDimensionComponent.js +140 -140
- package/dist/mediaEditor/plugins/mediaDimension/style.css +141 -141
- package/dist/mediaplayer/css/player.css +7 -7
- package/dist/mediaplayer/css/player.css.map +1 -1
- package/dist/mediaplayer/players/html5.js +52 -52
- package/dist/mediaplayer/players/youtube.js +39 -39
- package/dist/mediaplayer/players.js +18 -18
- package/dist/mediaplayer/support.js +55 -55
- package/dist/mediaplayer/utils/reminder.js +100 -100
- package/dist/mediaplayer/utils/timeObserver.js +92 -92
- package/dist/mediaplayer/youtubeManager.js +51 -51
- package/dist/mediaplayer.js +447 -447
- package/dist/mediasizer.js +122 -122
- package/dist/modal.js +87 -87
- package/dist/movableComponent.js +35 -35
- package/dist/pageSizeSelector.js +31 -31
- package/dist/pageStatus.js +33 -33
- package/dist/pagination/css/pagination.css +7 -7
- package/dist/pagination/css/pagination.css.map +1 -1
- package/dist/pagination/paginationStrategy.js +23 -23
- package/dist/pagination/providers/pages.js +24 -24
- package/dist/pagination/providers/simple.js +22 -22
- package/dist/pagination.js +45 -45
- package/dist/previewer.js +67 -67
- package/dist/progressbar.js +58 -58
- package/dist/propertySelector/css/propertySelector.css +7 -7
- package/dist/propertySelector/css/propertySelector.css.map +1 -1
- package/dist/propertySelector/propertySelector.js +86 -86
- package/dist/report.js +73 -73
- package/dist/resource/css/selector.css +7 -7
- package/dist/resource/css/selector.css.map +1 -1
- package/dist/resource/filters.js +60 -60
- package/dist/resource/list.js +53 -53
- package/dist/resource/selectable.js +92 -92
- package/dist/resource/selector.js +182 -182
- package/dist/resource/tree.js +91 -91
- package/dist/resourcemgr/css/resourcemgr.css +7 -7
- package/dist/resourcemgr/css/resourcemgr.css.map +1 -1
- package/dist/resourcemgr/fileBrowser.js +75 -75
- package/dist/resourcemgr/fileSelector.js +45 -45
- package/dist/resourcemgr/util/updatePermissions.js +4 -4
- package/dist/resourcemgr.js +49 -49
- package/dist/scroller.js +26 -26
- package/dist/searchModal/advancedSearch.js +155 -155
- package/dist/searchModal/css/advancedSearch.css +7 -7
- package/dist/searchModal/css/advancedSearch.css.map +1 -1
- package/dist/searchModal/css/searchModal.css +7 -7
- package/dist/searchModal/css/searchModal.css.map +1 -1
- package/dist/searchModal.js +134 -134
- package/dist/selecter.js +6 -6
- package/dist/stacker.js +43 -43
- package/dist/switch/css/switch.css +7 -7
- package/dist/switch/css/switch.css.map +1 -1
- package/dist/switch/switch.js +62 -62
- package/dist/tableModel.js +33 -33
- package/dist/tabs/css/tabs.css +12 -12
- package/dist/tabs/css/tabs.css.map +1 -1
- package/dist/tabs.js +220 -220
- package/dist/taskQueue/css/taskQueue.css +7 -7
- package/dist/taskQueue/css/taskQueue.css.map +1 -1
- package/dist/taskQueue/status.js +59 -59
- package/dist/taskQueue/table.js +54 -54
- package/dist/taskQueue/taskQueue.js +18 -18
- package/dist/taskQueue/taskQueueModel.js +102 -102
- package/dist/taskQueue.js +47 -47
- package/dist/taskQueueButton/css/taskable.css +7 -7
- package/dist/taskQueueButton/css/taskable.css.map +1 -1
- package/dist/taskQueueButton/css/treeButton.css +7 -7
- package/dist/taskQueueButton/css/treeButton.css.map +1 -1
- package/dist/taskQueueButton/standardButton.js +39 -39
- package/dist/taskQueueButton/taskable.js +41 -41
- package/dist/taskQueueButton/treeButton.js +43 -43
- package/dist/themeLoader.js +75 -75
- package/dist/themes.js +84 -84
- package/dist/toggler.js +57 -57
- package/dist/tooltip.js +41 -41
- package/dist/tooltipster.js +17 -17
- package/dist/transformer.js +117 -117
- package/dist/tristateCheckboxGroup/css/tristateCheckboxGroup.css +7 -7
- package/dist/tristateCheckboxGroup/css/tristateCheckboxGroup.css.map +1 -1
- package/dist/tristateCheckboxGroup.js +62 -62
- package/dist/uploader.js +145 -145
- package/dist/validator/validators.js +48 -48
- package/dist/validator.js +23 -23
- package/dist/waitForMedia.js +33 -33
- package/dist/waitingDialog/css/waitingDialog.css +7 -7
- package/dist/waitingDialog/css/waitingDialog.css.map +1 -1
- package/dist/waitingDialog/waitingDialog.js +54 -54
- package/package.json +110 -110
- package/scss/basic.scss +16 -16
- package/scss/ckeditor/skins/tao/scss/inc/_ck-icons.scss +60 -60
- package/scss/ckeditor/skins/tao/scss/inc/_tao.scss +59 -59
- package/scss/font/tao/tao.svg +235 -235
- package/scss/inc/_base.scss +495 -495
- package/scss/inc/_bootstrap.scss +6 -6
- package/scss/inc/_buttons.scss +114 -114
- package/scss/inc/_colors.scss +93 -93
- package/scss/inc/_feedback.scss +154 -154
- package/scss/inc/_flex-grid.scss +15 -15
- package/scss/inc/_fonts.scss +4 -4
- package/scss/inc/_forms.scss +832 -832
- package/scss/inc/_functions.scss +283 -283
- package/scss/inc/_jquery.nouislider.scss +254 -254
- package/scss/inc/_normalize.scss +528 -528
- package/scss/inc/_report.scss +67 -67
- package/scss/inc/_secondary-properties.scss +89 -89
- package/scss/inc/_select2.scss +634 -634
- package/scss/inc/_toolbars.scss +155 -155
- package/scss/inc/_tooltip.scss +312 -312
- package/scss/inc/_variables.scss +21 -21
- package/scss/inc/base/_highlight.scss +5 -5
- package/scss/inc/base/_list-style.scss +58 -58
- package/scss/inc/base/_svg.scss +3 -3
- package/scss/inc/base/_table.scss +62 -62
- package/scss/inc/fonts/_source-sans-pro.scss +29 -29
- package/scss/inc/fonts/_tao-icon-classes.scss +227 -227
- package/scss/inc/fonts/_tao-icon-def.scss +12 -12
- package/scss/inc/fonts/_tao-icon-vars.scss +241 -241
- package/src/actionbar/tpl/main.tpl +8 -8
- package/src/actionbar.js +251 -251
- package/src/adder.js +250 -250
- package/src/animable/absorbable/absorbable.js +134 -134
- package/src/animable/absorbable/css/absorb.css +7 -7
- package/src/animable/absorbable/css/absorb.css.map +1 -1
- package/src/animable/absorbable/scss/absorb.scss +37 -37
- package/src/animable/pulsable/css/pulse.css +7 -7
- package/src/animable/pulsable/css/pulse.css.map +1 -1
- package/src/animable/pulsable/pulsable.js +90 -90
- package/src/animable/pulsable/scss/pulse.scss +22 -22
- package/src/areaBroker.js +160 -160
- package/src/autocomplete/css/autocomplete.css +7 -7
- package/src/autocomplete/css/autocomplete.css.map +1 -1
- package/src/autocomplete/scss/autocomplete.scss +37 -37
- package/src/autocomplete.js +1027 -1027
- package/src/autoscroll.js +57 -57
- package/src/badge/badge.js +119 -119
- package/src/badge/css/badge.css +7 -7
- package/src/badge/css/badge.css.map +1 -1
- package/src/badge/scss/badge.scss +92 -92
- package/src/badge/tpl/badge.tpl +4 -4
- package/src/breadcrumbs/css/breadcrumbs.css +7 -7
- package/src/breadcrumbs/css/breadcrumbs.css.map +1 -1
- package/src/breadcrumbs/scss/breadcrumbs.scss +52 -52
- package/src/breadcrumbs/tpl/breadcrumbs.tpl +20 -20
- package/src/breadcrumbs.js +99 -99
- package/src/btngrouper.js +213 -213
- package/src/bulkActionPopup/css/bulkActionPopup.css +7 -7
- package/src/bulkActionPopup/css/bulkActionPopup.css.map +1 -1
- package/src/bulkActionPopup/scss/bulkActionPopup.scss +63 -63
- package/src/bulkActionPopup/tpl/layout.tpl +76 -76
- package/src/bulkActionPopup/tpl/select.tpl +8 -8
- package/src/bulkActionPopup.js +274 -274
- package/src/button/tpl/button.tpl +4 -4
- package/src/button.js +135 -135
- package/src/calculator/css/calculator.css +10 -10
- package/src/calculator/css/calculator.css.map +1 -1
- package/src/calculator/scss/calculator.scss +139 -139
- package/src/calculator.js +188 -188
- package/src/cascadingComboBox.js +126 -126
- package/src/ckeditor/ckConfigurator.js +742 -742
- package/src/ckeditor/dtdHandler.js +1030 -1030
- package/src/class/css/selector.css +7 -7
- package/src/class/css/selector.css.map +1 -1
- package/src/class/scss/selector.scss +101 -101
- package/src/class/selector.js +329 -329
- package/src/class/tpl/listItem.tpl +9 -9
- package/src/class/tpl/selector.tpl +10 -10
- package/src/component/alignable.js +274 -274
- package/src/component/containable.js +122 -122
- package/src/component/css/components.css +7 -7
- package/src/component/css/components.css.map +1 -1
- package/src/component/css/windowComponent.css +7 -7
- package/src/component/css/windowComponent.css.map +1 -1
- package/src/component/draggable.js +104 -104
- package/src/component/placeable.js +233 -233
- package/src/component/resizable.js +195 -195
- package/src/component/scss/components.scss +507 -507
- package/src/component/scss/windowComponent.scss +62 -62
- package/src/component/stackable.js +67 -67
- package/src/component/tpl/window.tpl +7 -7
- package/src/component/windowed.js +206 -206
- package/src/component.js +401 -401
- package/src/container.js +200 -200
- package/src/contextualPopup/css/contextualPopup.css +7 -7
- package/src/contextualPopup/css/contextualPopup.css.map +1 -1
- package/src/contextualPopup/scss/contextualPopup.scss +78 -78
- package/src/contextualPopup/tpl/popup.tpl +10 -10
- package/src/contextualPopup.js +294 -294
- package/src/css/basic.css +104 -104
- package/src/css/basic.css.map +1 -1
- package/src/dashboard/css/dashboard.css +7 -7
- package/src/dashboard/css/dashboard.css.map +1 -1
- package/src/dashboard/scss/dashboard.scss +93 -93
- package/src/dashboard/tpl/dashboard.tpl +16 -16
- package/src/dashboard/tpl/dashboardMetricsList.tpl +15 -15
- package/src/dashboard.js +179 -179
- package/src/datalist/css/datalist.css +7 -7
- package/src/datalist/css/datalist.css.map +1 -1
- package/src/datalist/scss/datalist.scss +116 -116
- package/src/datalist/tpl/list.tpl +24 -24
- package/src/datalist/tpl/main.tpl +44 -44
- package/src/datalist.js +500 -500
- package/src/datatable/css/datatable.css +7 -7
- package/src/datatable/css/datatable.css.map +1 -1
- package/src/datatable/filterStrategy/filterStrategy.js +70 -70
- package/src/datatable/filterStrategy/multiple.js +126 -126
- package/src/datatable/filterStrategy/single.js +108 -108
- package/src/datatable/scss/datatable.scss +149 -149
- package/src/datatable/tpl/button.tpl +6 -6
- package/src/datatable/tpl/layout.tpl +158 -158
- package/src/datatable.js +1056 -1056
- package/src/dateRange/css/dateRange.css +7 -7
- package/src/dateRange/css/dateRange.css.map +1 -1
- package/src/dateRange/dateRange.js +341 -341
- package/src/dateRange/scss/dateRange.scss +7 -7
- package/src/dateRange/tpl/select.tpl +18 -18
- package/src/datetime/css/picker.css +7 -7
- package/src/datetime/css/picker.css.map +1 -1
- package/src/datetime/picker.js +576 -576
- package/src/datetime/scss/picker.scss +192 -192
- package/src/datetime/tpl/picker.tpl +18 -18
- package/src/deleter/undo.tpl +6 -6
- package/src/deleter.js +296 -296
- package/src/destination/css/selector.css +7 -7
- package/src/destination/css/selector.css.map +1 -1
- package/src/destination/scss/selector.scss +36 -36
- package/src/destination/selector.js +195 -195
- package/src/destination/tpl/selector.tpl +13 -13
- package/src/dialog/alert.js +70 -70
- package/src/dialog/confirm.js +85 -85
- package/src/dialog/confirmDelete.js +95 -95
- package/src/dialog/tpl/body.tpl +24 -24
- package/src/dialog/tpl/buttons.tpl +6 -6
- package/src/dialog/tpl/checkbox.tpl +5 -5
- package/src/dialog.js +517 -517
- package/src/disabler.js +230 -230
- package/src/documentViewer/css/documentViewer.css +7 -7
- package/src/documentViewer/css/documentViewer.css.map +1 -1
- package/src/documentViewer/providers/pdfViewer/fallback/viewer.js +69 -69
- package/src/documentViewer/providers/pdfViewer/pdfjs/areaBroker.js +41 -41
- package/src/documentViewer/providers/pdfViewer/pdfjs/findBar.js +475 -475
- package/src/documentViewer/providers/pdfViewer/pdfjs/findBar.tpl +20 -20
- package/src/documentViewer/providers/pdfViewer/pdfjs/match.tpl +1 -1
- package/src/documentViewer/providers/pdfViewer/pdfjs/page.tpl +4 -4
- package/src/documentViewer/providers/pdfViewer/pdfjs/pageView.js +318 -318
- package/src/documentViewer/providers/pdfViewer/pdfjs/pagesManager.js +167 -167
- package/src/documentViewer/providers/pdfViewer/pdfjs/searchEngine.js +451 -451
- package/src/documentViewer/providers/pdfViewer/pdfjs/textManager.js +252 -252
- package/src/documentViewer/providers/pdfViewer/pdfjs/viewer.js +299 -299
- package/src/documentViewer/providers/pdfViewer/pdfjs/viewer.tpl +16 -16
- package/src/documentViewer/providers/pdfViewer/pdfjs/wrapper.js +351 -351
- package/src/documentViewer/providers/pdfViewer.js +93 -93
- package/src/documentViewer/scss/documentViewer.scss +184 -184
- package/src/documentViewer/viewerFactory.js +191 -191
- package/src/documentViewer.js +238 -238
- package/src/dropdown/css/dropdown.css +7 -7
- package/src/dropdown/css/dropdown.css.map +1 -1
- package/src/dropdown/scss/dropdown.scss +99 -99
- package/src/dropdown/tpl/dropdown.tpl +8 -8
- package/src/dropdown/tpl/list-item.tpl +4 -4
- package/src/dropdown.js +255 -255
- package/src/durationer.js +220 -220
- package/src/dynamicComponent/css/dynamicComponent.css +7 -7
- package/src/dynamicComponent/css/dynamicComponent.css.map +1 -1
- package/src/dynamicComponent/scss/dynamicComponent.scss +98 -98
- package/src/dynamicComponent/tpl/layout.tpl +17 -17
- package/src/dynamicComponent.js +553 -553
- package/src/feedback/feedback.tpl +7 -7
- package/src/feedback.js +295 -295
- package/src/figure/FigureStateActive.js +184 -184
- package/src/filesender.js +112 -112
- package/src/filter/template.tpl +5 -5
- package/src/filter.js +129 -129
- package/src/form/css/dropdownForm.css +7 -7
- package/src/form/css/dropdownForm.css.map +1 -1
- package/src/form/css/form.css +7 -7
- package/src/form/css/form.css.map +1 -1
- package/src/form/dropdownForm.js +281 -281
- package/src/form/form.js +688 -688
- package/src/form/scss/dropdownForm.scss +60 -60
- package/src/form/scss/form.scss +25 -25
- package/src/form/simpleForm.js +125 -125
- package/src/form/tpl/dropdownForm.tpl +4 -4
- package/src/form/tpl/form.tpl +7 -7
- package/src/form/validator/css/validator.css +7 -7
- package/src/form/validator/css/validator.css.map +1 -1
- package/src/form/validator/renderer.js +118 -118
- package/src/form/validator/scss/validator.scss +14 -14
- package/src/form/validator/tpl/message.tpl +1 -1
- package/src/form/validator/tpl/validator.tpl +1 -1
- package/src/form/validator/validator.js +220 -220
- package/src/form/widget/css/widget.css +7 -7
- package/src/form/widget/css/widget.css.map +1 -1
- package/src/form/widget/definitions.js +51 -51
- package/src/form/widget/loader.js +40 -40
- package/src/form/widget/providers/checkBox.js +138 -138
- package/src/form/widget/providers/comboBox.js +63 -63
- package/src/form/widget/providers/default.js +90 -90
- package/src/form/widget/providers/hidden.js +62 -62
- package/src/form/widget/providers/hiddenBox.js +152 -152
- package/src/form/widget/providers/radioBox.js +99 -99
- package/src/form/widget/providers/textArea.js +52 -52
- package/src/form/widget/providers/textBox.js +48 -48
- package/src/form/widget/scss/widget.scss +55 -55
- package/src/form/widget/tpl/checkBox.tpl +25 -25
- package/src/form/widget/tpl/comboBox.tpl +13 -13
- package/src/form/widget/tpl/hidden.tpl +1 -1
- package/src/form/widget/tpl/hiddenBox.tpl +17 -17
- package/src/form/widget/tpl/label.tpl +6 -6
- package/src/form/widget/tpl/radioBox.tpl +25 -25
- package/src/form/widget/tpl/textArea.tpl +8 -8
- package/src/form/widget/tpl/widget.tpl +8 -8
- package/src/form/widget/widget.js +372 -372
- package/src/form.js +47 -47
- package/src/formValidator/formValidator.js +253 -253
- package/src/formValidator/highlighters/highlighter.js +103 -103
- package/src/formValidator/highlighters/message.js +68 -68
- package/src/formValidator/highlighters/tooltip.js +78 -78
- package/src/generis/form/css/form.css +7 -7
- package/src/generis/form/css/form.css.map +1 -1
- package/src/generis/form/form.js +239 -239
- package/src/generis/form/readme.md +70 -70
- package/src/generis/form/scss/form.scss +23 -23
- package/src/generis/form/tpl/form.tpl +16 -16
- package/src/generis/validator/css/validator.css +7 -7
- package/src/generis/validator/css/validator.css.map +1 -1
- package/src/generis/validator/readme.md +46 -46
- package/src/generis/validator/scss/validator.scss +13 -13
- package/src/generis/validator/validator.js +128 -128
- package/src/generis/widget/checkBox/checkBox.js +112 -112
- package/src/generis/widget/checkBox/checkBox.tpl +18 -18
- package/src/generis/widget/comboBox/comboBox.js +66 -66
- package/src/generis/widget/comboBox/comboBox.tpl +12 -12
- package/src/generis/widget/css/widget.css +7 -7
- package/src/generis/widget/css/widget.css.map +1 -1
- package/src/generis/widget/hiddenBox/hiddenBox.js +131 -131
- package/src/generis/widget/hiddenBox/hiddenBox.tpl +16 -16
- package/src/generis/widget/loader.js +49 -49
- package/src/generis/widget/readme.md +59 -59
- package/src/generis/widget/scss/widget.scss +61 -61
- package/src/generis/widget/textBox/textBox.js +64 -64
- package/src/generis/widget/textBox/textBox.tpl +7 -7
- package/src/generis/widget/widget.js +164 -164
- package/src/generis/widget/widget.tpl +5 -5
- package/src/groupedComboBox.js +99 -99
- package/src/groupvalidator.js +84 -84
- package/src/hider.js +88 -88
- package/src/highlighter.js +1192 -1192
- package/src/image/ImgStateActive/extractLabel.js +29 -29
- package/src/image/ImgStateActive/helper.js +36 -36
- package/src/image/ImgStateActive/initHelper.js +137 -137
- package/src/image/ImgStateActive/initMediaEditor.js +92 -92
- package/src/image/ImgStateActive/mediaSizer.js +63 -63
- package/src/image/ImgStateActive.js +115 -115
- package/src/incrementer.js +309 -309
- package/src/inplacer.js +315 -315
- package/src/interactUtils.js +140 -140
- package/src/itemButtonList/css/item-button-list.css +23 -23
- package/src/itemButtonList/css/item-button-list.css.map +1 -1
- package/src/itemButtonList/scss/item-button-list.scss +236 -236
- package/src/itemButtonList/tpl/itemButtonList.tpl +21 -21
- package/src/itemButtonList.js +274 -274
- package/src/keyNavigation/navigableDomElement.js +285 -285
- package/src/keyNavigation/navigator.js +535 -535
- package/src/listbox/css/listbox.css +7 -7
- package/src/listbox/css/listbox.css.map +1 -1
- package/src/listbox/scss/listbox.scss +116 -116
- package/src/listbox/tpl/list.tpl +14 -14
- package/src/listbox/tpl/main.tpl +9 -9
- package/src/listbox.js +252 -252
- package/src/liststyler.js +155 -155
- package/src/loadingButton/css/button.css +7 -7
- package/src/loadingButton/css/button.css.map +1 -1
- package/src/loadingButton/loadingButton.js +110 -110
- package/src/loadingButton/scss/button.scss +41 -41
- package/src/loadingButton/tpl/button.tpl +5 -5
- package/src/lock/lock.tpl +16 -16
- package/src/lock.js +393 -393
- package/src/login/login.js +317 -317
- package/src/login/tpl/login.tpl +29 -29
- package/src/login/tpl/passwordReveal.tpl +7 -7
- package/src/maths/calculator/basicCalculator.js +55 -55
- package/src/maths/calculator/calculatorComponent.js +128 -128
- package/src/maths/calculator/core/areaBroker.js +38 -38
- package/src/maths/calculator/core/board.js +841 -841
- package/src/maths/calculator/core/expression.js +430 -430
- package/src/maths/calculator/core/labels.js +116 -116
- package/src/maths/calculator/core/plugin.js +40 -40
- package/src/maths/calculator/core/terms.js +459 -459
- package/src/maths/calculator/core/tokenizer.js +245 -245
- package/src/maths/calculator/core/tokens.js +178 -178
- package/src/maths/calculator/core/tpl/board.tpl +4 -4
- package/src/maths/calculator/css/calculator.css +7 -7
- package/src/maths/calculator/css/calculator.css.map +1 -1
- package/src/maths/calculator/defaultCalculator.js +66 -66
- package/src/maths/calculator/plugins/core/degrad.js +90 -90
- package/src/maths/calculator/plugins/core/history.js +166 -166
- package/src/maths/calculator/plugins/core/remind.js +96 -96
- package/src/maths/calculator/plugins/core/stepNavigation.js +175 -175
- package/src/maths/calculator/plugins/keyboard/templateKeyboard/defaultTemplate.tpl +36 -36
- package/src/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +91 -91
- package/src/maths/calculator/plugins/modifiers/pow10.js +143 -143
- package/src/maths/calculator/plugins/modifiers/sign.js +339 -339
- package/src/maths/calculator/plugins/screen/simpleScreen/defaultTemplate.tpl +3 -3
- package/src/maths/calculator/plugins/screen/simpleScreen/history.tpl +3 -3
- package/src/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +190 -190
- package/src/maths/calculator/pluginsLoader.js +46 -46
- package/src/maths/calculator/scientificCalculator.js +74 -74
- package/src/maths/calculator/scss/calculator.scss +396 -396
- package/src/maths/calculator/tpl/basicKeyboard.tpl +37 -37
- package/src/maths/calculator/tpl/basicScreen.tpl +2 -2
- package/src/maths/calculator/tpl/scientificKeyboard.tpl +61 -61
- package/src/maths/calculator/tpl/scientificScreen.tpl +3 -3
- package/src/mediaEditor/mediaEditorComponent.js +141 -141
- package/src/mediaEditor/plugins/mediaAlignment/helper.js +110 -110
- package/src/mediaEditor/plugins/mediaAlignment/mediaAlignmentComponent.js +99 -99
- package/src/mediaEditor/plugins/mediaAlignment/style.css +7 -7
- package/src/mediaEditor/plugins/mediaAlignment/tpl/mediaAlignment.tpl +25 -25
- package/src/mediaEditor/plugins/mediaDimension/helper.js +190 -190
- package/src/mediaEditor/plugins/mediaDimension/mediaDimensionComponent.js +561 -561
- package/src/mediaEditor/plugins/mediaDimension/style.css +141 -141
- package/src/mediaEditor/plugins/mediaDimension/tpl/mediaDimension.tpl +55 -55
- package/src/mediaEditor/tpl/editor.tpl +4 -4
- package/src/mediaplayer/css/player.css +7 -7
- package/src/mediaplayer/css/player.css.map +1 -1
- package/src/mediaplayer/players/html5.js +564 -564
- package/src/mediaplayer/players/youtube.js +323 -323
- package/src/mediaplayer/players.js +29 -29
- package/src/mediaplayer/readme.md +305 -305
- package/src/mediaplayer/scss/player.scss +569 -569
- package/src/mediaplayer/support.js +126 -126
- package/src/mediaplayer/tpl/audio.tpl +6 -6
- package/src/mediaplayer/tpl/player.tpl +37 -37
- package/src/mediaplayer/tpl/source.tpl +1 -1
- package/src/mediaplayer/tpl/video.tpl +6 -6
- package/src/mediaplayer/tpl/youtube.tpl +1 -1
- package/src/mediaplayer/utils/reminder.js +184 -184
- package/src/mediaplayer/utils/timeObserver.js +143 -143
- package/src/mediaplayer/youtubeManager.js +161 -161
- package/src/mediaplayer.js +1606 -1606
- package/src/mediasizer/mediasizer.tpl +55 -55
- package/src/mediasizer.js +635 -635
- package/src/modal.js +365 -365
- package/src/movableComponent.js +78 -78
- package/src/pageSizeSelector/tpl/pageSizeSelector.tpl +9 -9
- package/src/pageSizeSelector.js +106 -106
- package/src/pageStatus.js +147 -147
- package/src/pagination/css/pagination.css +7 -7
- package/src/pagination/css/pagination.css.map +1 -1
- package/src/pagination/paginationStrategy.js +53 -53
- package/src/pagination/providers/pages.js +161 -161
- package/src/pagination/providers/simple.js +74 -74
- package/src/pagination/providers/tpl/pages/page.tpl +1 -1
- package/src/pagination/providers/tpl/pages.tpl +8 -8
- package/src/pagination/providers/tpl/simple.tpl +7 -7
- package/src/pagination/scss/pagination.scss +111 -111
- package/src/pagination.js +237 -237
- package/src/previewer.js +300 -300
- package/src/progressbar.js +165 -165
- package/src/propertySelector/css/propertySelector.css +7 -7
- package/src/propertySelector/css/propertySelector.css.map +1 -1
- package/src/propertySelector/propertySelector.js +286 -286
- package/src/propertySelector/scss/propertySelector.scss +66 -66
- package/src/propertySelector/tpl/property-description.tpl +12 -12
- package/src/propertySelector/tpl/property-selector.tpl +6 -6
- package/src/report/feedback.tpl +11 -11
- package/src/report/layout.tpl +10 -10
- package/src/report.js +184 -184
- package/src/resource/css/selector.css +7 -7
- package/src/resource/css/selector.css.map +1 -1
- package/src/resource/filters.js +208 -208
- package/src/resource/list.js +200 -200
- package/src/resource/scss/_filters.scss +26 -26
- package/src/resource/scss/_resource-list.scss +107 -107
- package/src/resource/scss/_resource-tree.scss +205 -205
- package/src/resource/scss/selector.scss +187 -187
- package/src/resource/selectable.js +322 -322
- package/src/resource/selector.js +871 -871
- package/src/resource/tpl/filters.tpl +2 -2
- package/src/resource/tpl/list.tpl +7 -7
- package/src/resource/tpl/listNode.tpl +4 -4
- package/src/resource/tpl/selector.tpl +46 -46
- package/src/resource/tpl/tree.tpl +4 -4
- package/src/resource/tpl/treeNode.tpl +30 -30
- package/src/resource/tree.js +398 -398
- package/src/resourcemgr/css/resourcemgr.css +7 -7
- package/src/resourcemgr/css/resourcemgr.css.map +1 -1
- package/src/resourcemgr/fileBrowser.js +381 -381
- package/src/resourcemgr/filePreview.js +73 -73
- package/src/resourcemgr/fileSelector.js +322 -322
- package/src/resourcemgr/scss/resourcemgr.scss +254 -254
- package/src/resourcemgr/tpl/fileSelect.tpl +39 -39
- package/src/resourcemgr/tpl/folder.tpl +11 -11
- package/src/resourcemgr/tpl/layout.tpl +84 -84
- package/src/resourcemgr/tpl/rootFolder.tpl +13 -13
- package/src/resourcemgr/util/updatePermissions.js +53 -53
- package/src/resourcemgr.js +216 -216
- package/src/scroller.js +94 -94
- package/src/scss/basic.scss +16 -16
- package/src/searchModal/advancedSearch.js +638 -638
- package/src/searchModal/css/advancedSearch.css +7 -7
- package/src/searchModal/css/advancedSearch.css.map +1 -1
- package/src/searchModal/css/searchModal.css +7 -7
- package/src/searchModal/css/searchModal.css.map +1 -1
- package/src/searchModal/scss/advancedSearch.scss +171 -171
- package/src/searchModal/scss/searchModal.scss +393 -393
- package/src/searchModal/tpl/advanced-search.tpl +9 -9
- package/src/searchModal/tpl/info-message.tpl +3 -3
- package/src/searchModal/tpl/invalid-criteria-warning.tpl +10 -10
- package/src/searchModal/tpl/layout.tpl +27 -27
- package/src/searchModal/tpl/list-checkbox-criterion.tpl +17 -17
- package/src/searchModal/tpl/list-select-criterion.tpl +12 -12
- package/src/searchModal/tpl/text-criterion.tpl +11 -11
- package/src/searchModal.js +760 -760
- package/src/selecter.js +43 -43
- package/src/stacker.js +133 -133
- package/src/switch/css/switch.css +7 -7
- package/src/switch/css/switch.css.map +1 -1
- package/src/switch/scss/switch.scss +83 -83
- package/src/switch/switch.js +195 -195
- package/src/switch/tpl/switch.tpl +7 -7
- package/src/tableModel.js +112 -112
- package/src/tabs/css/tabs.css +12 -12
- package/src/tabs/css/tabs.css.map +1 -1
- package/src/tabs/scss/tabs.scss +50 -50
- package/src/tabs/tpl/panel.tpl +3 -3
- package/src/tabs/tpl/tabs.tpl +10 -10
- package/src/tabs.js +528 -528
- package/src/taskQueue/css/taskQueue.css +7 -7
- package/src/taskQueue/css/taskQueue.css.map +1 -1
- package/src/taskQueue/scss/taskQueue.scss +47 -47
- package/src/taskQueue/status.js +228 -228
- package/src/taskQueue/table.js +350 -350
- package/src/taskQueue/taskQueue.js +33 -33
- package/src/taskQueue/taskQueueModel.js +548 -548
- package/src/taskQueue/tpl/statusMessage.tpl +7 -7
- package/src/taskQueue.js +216 -216
- package/src/taskQueueButton/css/taskable.css +7 -7
- package/src/taskQueueButton/css/taskable.css.map +1 -1
- package/src/taskQueueButton/css/treeButton.css +7 -7
- package/src/taskQueueButton/css/treeButton.css.map +1 -1
- package/src/taskQueueButton/scss/taskable.scss +4 -4
- package/src/taskQueueButton/scss/treeButton.scss +34 -34
- package/src/taskQueueButton/standardButton.js +108 -108
- package/src/taskQueueButton/taskable.js +202 -202
- package/src/taskQueueButton/tpl/report.tpl +5 -5
- package/src/taskQueueButton/tpl/treeButton.tpl +6 -6
- package/src/taskQueueButton/treeButton.js +108 -108
- package/src/themeLoader.js +252 -252
- package/src/themes.js +162 -162
- package/src/toggler.js +200 -200
- package/src/tooltip/default.tpl +3 -3
- package/src/tooltip.js +160 -160
- package/src/tooltipster.js +25 -25
- package/src/transformer.js +327 -327
- package/src/tristateCheckboxGroup/css/tristateCheckboxGroup.css +7 -7
- package/src/tristateCheckboxGroup/css/tristateCheckboxGroup.css.map +1 -1
- package/src/tristateCheckboxGroup/scss/tristateCheckboxGroup.scss +15 -15
- package/src/tristateCheckboxGroup/tpl/li.tpl +6 -6
- package/src/tristateCheckboxGroup.js +207 -207
- package/src/uploader/fileEntry.tpl +6 -6
- package/src/uploader/uploader.tpl +32 -32
- package/src/uploader.js +594 -594
- package/src/validator/Report.js +10 -10
- package/src/validator/Validator.js +108 -108
- package/src/validator/validators.js +217 -217
- package/src/validator.js +262 -262
- package/src/waitForMedia.js +82 -82
- package/src/waitingDialog/css/waitingDialog.css +7 -7
- package/src/waitingDialog/css/waitingDialog.css.map +1 -1
- package/src/waitingDialog/scss/waitingDialog.scss +34 -34
- package/src/waitingDialog/waitingDialog.js +240 -240
package/src/dialog.js
CHANGED
|
@@ -1,517 +1,517 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This program is free software; you can redistribute it and/or
|
|
3
|
-
* modify it under the terms of the GNU General Public License
|
|
4
|
-
* as published by the Free Software Foundation; under version 2
|
|
5
|
-
* of the License (non-upgradable).
|
|
6
|
-
*
|
|
7
|
-
* This program is distributed in the hope that it will be useful,
|
|
8
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
9
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
10
|
-
* GNU General Public License for more details.
|
|
11
|
-
*
|
|
12
|
-
* You should have received a copy of the GNU General Public License
|
|
13
|
-
* along with this program; if not, write to the Free Software
|
|
14
|
-
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
15
|
-
*
|
|
16
|
-
* Copyright (c) 2015-2019 (original work) Open Assessment Technologies SA ;
|
|
17
|
-
*/
|
|
18
|
-
/**
|
|
19
|
-
* Create a modal dialog component
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* TODO move to ui/component
|
|
23
|
-
* TODO use core/eventifier
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* @author Jean-Sébastien Conan <jean-sebastien.conan@vesperiagroup.com>
|
|
27
|
-
*/
|
|
28
|
-
import $ from 'jquery';
|
|
29
|
-
import _ from 'lodash';
|
|
30
|
-
import __ from 'i18n';
|
|
31
|
-
import bodyTpl from 'ui/dialog/tpl/body';
|
|
32
|
-
import buttonsTpl from 'ui/dialog/tpl/buttons';
|
|
33
|
-
import keyNavigator from 'ui/keyNavigation/navigator';
|
|
34
|
-
import navigableDomElement from 'ui/keyNavigation/navigableDomElement';
|
|
35
|
-
import shortcutRegistry from 'util/shortcut/registry';
|
|
36
|
-
import 'ui/modal';
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* The scope of events names
|
|
40
|
-
* @type {string}
|
|
41
|
-
*/
|
|
42
|
-
const _scope = '.modal';
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* A list of predefined buttons
|
|
46
|
-
* @type {Object}
|
|
47
|
-
*/
|
|
48
|
-
const _definedButtons = {
|
|
49
|
-
ok: {
|
|
50
|
-
id: 'ok',
|
|
51
|
-
type: 'info',
|
|
52
|
-
label: __('Ok'),
|
|
53
|
-
close: true
|
|
54
|
-
},
|
|
55
|
-
|
|
56
|
-
cancel: {
|
|
57
|
-
id: 'cancel',
|
|
58
|
-
type: 'regular',
|
|
59
|
-
label: __('Cancel'),
|
|
60
|
-
close: true
|
|
61
|
-
},
|
|
62
|
-
|
|
63
|
-
yes: {
|
|
64
|
-
id: 'yes',
|
|
65
|
-
type: 'info',
|
|
66
|
-
label: __('Yes'),
|
|
67
|
-
close: true
|
|
68
|
-
},
|
|
69
|
-
|
|
70
|
-
no: {
|
|
71
|
-
id: 'no',
|
|
72
|
-
type: 'regular',
|
|
73
|
-
label: __('No'),
|
|
74
|
-
close: true
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* The defaults fields values
|
|
80
|
-
* @type {Object}
|
|
81
|
-
*/
|
|
82
|
-
const _defaults = {
|
|
83
|
-
message: '',
|
|
84
|
-
content: '',
|
|
85
|
-
width: 500,
|
|
86
|
-
animate: false,
|
|
87
|
-
autoRender: false,
|
|
88
|
-
autoDestroy: false,
|
|
89
|
-
renderTo: 'body',
|
|
90
|
-
buttons: 'cancel,ok'
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Define a dialog box
|
|
95
|
-
* @type {Object}
|
|
96
|
-
*/
|
|
97
|
-
const dialog = {
|
|
98
|
-
/**
|
|
99
|
-
* Initialise the dialog box.
|
|
100
|
-
* @param {Object} options - A list of options.
|
|
101
|
-
* @param {String} options.heading - An optional heading to display.
|
|
102
|
-
* @param {String} options.message - The message to display.
|
|
103
|
-
* @param {String} options.content - An optional content to display under the displayed message.
|
|
104
|
-
* @param {String} options.class - Space-separated string of classes to add to the root HTML element
|
|
105
|
-
* @param {Array|Object|String} options.buttons - A list of buttons to display (default: 'cancel,ok'). Can be:
|
|
106
|
-
* - a string: the button names separated by commas
|
|
107
|
-
* - an array: an array of button names or an array of button definitions
|
|
108
|
-
* - an object: a unique button definition, containing:
|
|
109
|
-
* - id: The button's id
|
|
110
|
-
* - type: A display type (regular, info, warning, error)
|
|
111
|
-
* - label: The button's caption
|
|
112
|
-
* - icon: An optional icon
|
|
113
|
-
* - close: A boolean value telling if the dialog must be closed after the button has been activated
|
|
114
|
-
* @param {String|jQuery|HTMLElement} options.renderTo - A container in which renders the dialog (default: 'body').
|
|
115
|
-
* @param {Boolean} options.autoRender - Allow the dialog to be immediately rendered after initialise.
|
|
116
|
-
* @param {Boolean} options.autoDestroy - Allow the dialog to be immediately destroyed when closing.
|
|
117
|
-
* @param {Boolean} [options.disableClosing = false] - to disable the default closers
|
|
118
|
-
* @param {Boolean} [options.disableEscape = false] - to disable the ability to escape close the dialog
|
|
119
|
-
* @param {Number} options.width - The dialog box width in pixels (default: 500).
|
|
120
|
-
* @param {Number|Boolean} options.animate - The dialog box animate duration (default: false).
|
|
121
|
-
* @param {Function} options.onXYZbtn - An event handler assigned to a particular button (XYZ).
|
|
122
|
-
* @returns {dialog}
|
|
123
|
-
*/
|
|
124
|
-
init(options) {
|
|
125
|
-
// split options to events
|
|
126
|
-
const events = {};
|
|
127
|
-
const initOptions = _.omit(options || {}, (value, key) => {
|
|
128
|
-
if (key.length > 2 && 'on' === key.substr(0, 2)) {
|
|
129
|
-
events[key.substr(2)] = value;
|
|
130
|
-
return true;
|
|
131
|
-
}
|
|
132
|
-
return false;
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
// assign default values and options
|
|
136
|
-
_.defaults(this, initOptions, _defaults);
|
|
137
|
-
|
|
138
|
-
// pre-render the dialog box
|
|
139
|
-
this.dialogId = _.uniqueId('dlg-');
|
|
140
|
-
this.$html = $(bodyTpl(this));
|
|
141
|
-
this.$buttons = this.$html.find('.buttons');
|
|
142
|
-
this.rendered = false;
|
|
143
|
-
this.destroyed = false;
|
|
144
|
-
|
|
145
|
-
// install the buttons and bind the actions
|
|
146
|
-
this.$buttons.on('click' + _scope, 'button', this._onButtonClick.bind(this));
|
|
147
|
-
this.setButtons(this.buttons);
|
|
148
|
-
|
|
149
|
-
// install the events extracted from the options
|
|
150
|
-
_.forEach(events, (callback, eventName) => {
|
|
151
|
-
if (eventName.indexOf('.') < 0) {
|
|
152
|
-
eventName += _scope;
|
|
153
|
-
}
|
|
154
|
-
this.on(eventName.toLowerCase(), callback);
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
if (this.autoRender) {
|
|
158
|
-
this.render();
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
return this;
|
|
162
|
-
},
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Destroys the dialog box
|
|
166
|
-
* @returns {dialog}
|
|
167
|
-
* @fires dialog#destroy.modal
|
|
168
|
-
*/
|
|
169
|
-
destroy() {
|
|
170
|
-
if (!this.destroyed) {
|
|
171
|
-
this._destroy();
|
|
172
|
-
|
|
173
|
-
// reset the context
|
|
174
|
-
this.rendered = false;
|
|
175
|
-
this.destroyed = true;
|
|
176
|
-
|
|
177
|
-
this.trigger('destroy' + _scope);
|
|
178
|
-
|
|
179
|
-
// disable events and remove DOM
|
|
180
|
-
this.$buttons.off(_scope);
|
|
181
|
-
this.$html.off(_scope).remove();
|
|
182
|
-
this.$html = null;
|
|
183
|
-
this.$buttons = null;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
return this;
|
|
187
|
-
},
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* Set the action buttons
|
|
191
|
-
* @param {Object|Array|String} buttons
|
|
192
|
-
* @returns {dialog}
|
|
193
|
-
*/
|
|
194
|
-
setButtons(buttons) {
|
|
195
|
-
if (!this.destroyed) {
|
|
196
|
-
if (!buttons) {
|
|
197
|
-
buttons = _defaults.buttons;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
if (!_.isArray(buttons)) {
|
|
201
|
-
// buttons can be set as a list of names
|
|
202
|
-
if (_.isString(buttons)) {
|
|
203
|
-
buttons = buttons.split(',');
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// bind the buttons with
|
|
208
|
-
this.buttons = {};
|
|
209
|
-
_.forEach(buttons, btn => {
|
|
210
|
-
if (_.isString(btn)) {
|
|
211
|
-
btn = btn.trim();
|
|
212
|
-
btn = _definedButtons[btn] || {
|
|
213
|
-
id: btn,
|
|
214
|
-
type: 'info',
|
|
215
|
-
label: btn
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
if (!btn.type) {
|
|
219
|
-
btn.type = 'regular';
|
|
220
|
-
}
|
|
221
|
-
this.buttons[btn.id] = btn;
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
this.$buttons.html(buttonsTpl(this));
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
return this;
|
|
228
|
-
},
|
|
229
|
-
|
|
230
|
-
/**
|
|
231
|
-
* Renders and shows the dialog box
|
|
232
|
-
* @param {String|HTMLElement|jQuery} [to]
|
|
233
|
-
* @returns {dialog}
|
|
234
|
-
* @fires modal#create.modal
|
|
235
|
-
*/
|
|
236
|
-
render(to) {
|
|
237
|
-
if (!this.destroyed) {
|
|
238
|
-
$(to || this.renderTo).append(this.$html);
|
|
239
|
-
this._install();
|
|
240
|
-
this.rendered = true;
|
|
241
|
-
}
|
|
242
|
-
return this;
|
|
243
|
-
},
|
|
244
|
-
|
|
245
|
-
/**
|
|
246
|
-
* Shows the dialog box. Also renders if needed.
|
|
247
|
-
* @returns {dialog}
|
|
248
|
-
* @fires modal#opened.modal
|
|
249
|
-
*/
|
|
250
|
-
show() {
|
|
251
|
-
if (!this.destroyed) {
|
|
252
|
-
if (!this.rendered) {
|
|
253
|
-
this.render();
|
|
254
|
-
} else {
|
|
255
|
-
this._open();
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
return this;
|
|
259
|
-
},
|
|
260
|
-
|
|
261
|
-
/**
|
|
262
|
-
* Hides the dialog box. Does nothing if the dialog box has not been rendered.
|
|
263
|
-
* @returns {dialog}
|
|
264
|
-
* @fires modal#closed.modal
|
|
265
|
-
*/
|
|
266
|
-
hide() {
|
|
267
|
-
if (!this.destroyed && this.rendered) {
|
|
268
|
-
this._close();
|
|
269
|
-
|
|
270
|
-
if (this.autoDestroy) {
|
|
271
|
-
this.destroy();
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
return this;
|
|
275
|
-
},
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* Install an event handler on the underlying DOM element
|
|
279
|
-
* @returns {dialog}
|
|
280
|
-
*/
|
|
281
|
-
on() {
|
|
282
|
-
if (this.$html) {
|
|
283
|
-
this.$html.on.apply(this.$html, arguments);
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
return this;
|
|
287
|
-
},
|
|
288
|
-
|
|
289
|
-
/**
|
|
290
|
-
* Uninstall an event handler from the underlying DOM element
|
|
291
|
-
* @returns {dialog}
|
|
292
|
-
*/
|
|
293
|
-
off() {
|
|
294
|
-
if (this.$html) {
|
|
295
|
-
this.$html.off.apply(this.$html, arguments);
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
return this;
|
|
299
|
-
},
|
|
300
|
-
|
|
301
|
-
/**
|
|
302
|
-
* Triggers an event on the underlying DOM element
|
|
303
|
-
* @param {String} eventName
|
|
304
|
-
* @param {Array|Object} extraParameters
|
|
305
|
-
* @returns {dialog}
|
|
306
|
-
*/
|
|
307
|
-
trigger(eventName, extraParameters) {
|
|
308
|
-
if (this.$html) {
|
|
309
|
-
if (typeof extraParameters === 'undefined') {
|
|
310
|
-
extraParameters = [];
|
|
311
|
-
}
|
|
312
|
-
if (!_.isArray(extraParameters)) {
|
|
313
|
-
extraParameters = [extraParameters];
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
extraParameters = Array.prototype.slice.call(extraParameters);
|
|
317
|
-
extraParameters.push(this);
|
|
318
|
-
|
|
319
|
-
this.$html.trigger(eventName, extraParameters);
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
return this;
|
|
323
|
-
},
|
|
324
|
-
|
|
325
|
-
/**
|
|
326
|
-
* Gets the underlying DOM element
|
|
327
|
-
* @returns {jQuery}
|
|
328
|
-
*/
|
|
329
|
-
getDom() {
|
|
330
|
-
return this.$html;
|
|
331
|
-
},
|
|
332
|
-
|
|
333
|
-
/**
|
|
334
|
-
* Called when button is clicked.
|
|
335
|
-
* Executes a button related action
|
|
336
|
-
* @param {Event} event
|
|
337
|
-
* @private
|
|
338
|
-
*/
|
|
339
|
-
_onButtonClick(event) {
|
|
340
|
-
const $btn = $(event.target).closest('button');
|
|
341
|
-
const id = $btn.data('control');
|
|
342
|
-
const btn = this.buttons[id];
|
|
343
|
-
|
|
344
|
-
if (btn) {
|
|
345
|
-
this._execute(btn);
|
|
346
|
-
}
|
|
347
|
-
},
|
|
348
|
-
|
|
349
|
-
/**
|
|
350
|
-
* Execute a button related action
|
|
351
|
-
* @param {Object} btn
|
|
352
|
-
* @private
|
|
353
|
-
* @fires dialog#[button.id]btn.modal
|
|
354
|
-
*/
|
|
355
|
-
_execute(btn) {
|
|
356
|
-
// call the optional callback
|
|
357
|
-
if (btn.action) {
|
|
358
|
-
btn.action.apply(this, [btn, this]);
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
/**
|
|
362
|
-
* Fires the event based on the button name
|
|
363
|
-
* @event dialog#[button.id]btn.modal
|
|
364
|
-
* @param {Object} btn - The related button
|
|
365
|
-
*/
|
|
366
|
-
this.trigger(btn.id + 'btn' + _scope, [btn]);
|
|
367
|
-
|
|
368
|
-
// auto close the dialog box if the button allows it
|
|
369
|
-
if (btn.close) {
|
|
370
|
-
this.hide();
|
|
371
|
-
}
|
|
372
|
-
},
|
|
373
|
-
|
|
374
|
-
/**
|
|
375
|
-
* Set focus on the dialog
|
|
376
|
-
* @param {String} [button] - The identifier of the button to focus. If none is provided, the focus will be put
|
|
377
|
-
* on the first navigable element.
|
|
378
|
-
*/
|
|
379
|
-
focus(button) {
|
|
380
|
-
let position = -1;
|
|
381
|
-
if (button) {
|
|
382
|
-
position = _.findIndex(this.navigator.getNavigableElements(), navigable => {
|
|
383
|
-
return navigable.getElement().is('[data-control="' + button + '"]');
|
|
384
|
-
});
|
|
385
|
-
}
|
|
386
|
-
if (position >= 0) {
|
|
387
|
-
this.navigator.setCursorAt(position);
|
|
388
|
-
} else {
|
|
389
|
-
this.navigator.focus();
|
|
390
|
-
}
|
|
391
|
-
},
|
|
392
|
-
|
|
393
|
-
/**
|
|
394
|
-
* Installs the dialog box
|
|
395
|
-
* @private
|
|
396
|
-
* #fires dialog#create.dialog
|
|
397
|
-
*/
|
|
398
|
-
_install() {
|
|
399
|
-
if (!this.destroyed) {
|
|
400
|
-
this.$html
|
|
401
|
-
.modal({
|
|
402
|
-
width: this.width,
|
|
403
|
-
animate: this.animate,
|
|
404
|
-
disableClosing: this.disableClosing,
|
|
405
|
-
disableEscape: this.disableEscape
|
|
406
|
-
})
|
|
407
|
-
.on('closed' + _scope, () => {
|
|
408
|
-
if (this.autoDestroy) {
|
|
409
|
-
this.destroy();
|
|
410
|
-
}
|
|
411
|
-
});
|
|
412
|
-
const $items = this.getDom().add($(_scope).find('input')).add(this.$buttons.find('button'));
|
|
413
|
-
const closeButton = $(_scope).find('#modal-close-btn')[0];
|
|
414
|
-
|
|
415
|
-
if (closeButton) {
|
|
416
|
-
$items.push(closeButton);
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
//creates the navigator to manage the key navigation
|
|
420
|
-
this.navigator = keyNavigator({
|
|
421
|
-
elements: navigableDomElement.createFromDoms($items),
|
|
422
|
-
propagateTab: false
|
|
423
|
-
})
|
|
424
|
-
.on('right down', function () {
|
|
425
|
-
if (this.getCursor().position === $items.length - 1) {
|
|
426
|
-
this.setCursorAt(1); // Skip container.
|
|
427
|
-
} else {
|
|
428
|
-
this.next();
|
|
429
|
-
}
|
|
430
|
-
})
|
|
431
|
-
.on('left up', function () {
|
|
432
|
-
if (this.getCursor().position === 1) {
|
|
433
|
-
// Skip container.
|
|
434
|
-
this.last();
|
|
435
|
-
} else {
|
|
436
|
-
this.previous();
|
|
437
|
-
}
|
|
438
|
-
})
|
|
439
|
-
.on('tab', function () {
|
|
440
|
-
if (this.getCursor().position === $items.length - 1) {
|
|
441
|
-
this.setCursorAt(1); // Skip container.
|
|
442
|
-
} else {
|
|
443
|
-
this.next();
|
|
444
|
-
}
|
|
445
|
-
})
|
|
446
|
-
.on('shift+tab', function () {
|
|
447
|
-
if (this.getCursor().position === 1) {
|
|
448
|
-
// Skip container.
|
|
449
|
-
this.last();
|
|
450
|
-
} else {
|
|
451
|
-
this.previous();
|
|
452
|
-
}
|
|
453
|
-
})
|
|
454
|
-
.on(
|
|
455
|
-
'activate',
|
|
456
|
-
_.debounce(function (cursor) {
|
|
457
|
-
const $elt = cursor.navigable.getElement();
|
|
458
|
-
if (!$elt.is(':radio,:checkbox')) {
|
|
459
|
-
$elt.click();
|
|
460
|
-
} else {
|
|
461
|
-
$elt.prop('checked', !$elt.prop('checked')).change();
|
|
462
|
-
}
|
|
463
|
-
}, 10)
|
|
464
|
-
);
|
|
465
|
-
this.navigator.first();
|
|
466
|
-
//added a global shortcut to enable setting focus on tab
|
|
467
|
-
this.globalShortcut = shortcutRegistry($('body')).add('tab shift+tab', () => {
|
|
468
|
-
if (!this.navigator.isFocused()) {
|
|
469
|
-
this.navigator.focus();
|
|
470
|
-
}
|
|
471
|
-
});
|
|
472
|
-
|
|
473
|
-
this.trigger('create.dialog');
|
|
474
|
-
}
|
|
475
|
-
},
|
|
476
|
-
|
|
477
|
-
/**
|
|
478
|
-
* Opens the dialog box
|
|
479
|
-
* @private
|
|
480
|
-
*/
|
|
481
|
-
_open() {
|
|
482
|
-
this.$html.modal('open');
|
|
483
|
-
},
|
|
484
|
-
|
|
485
|
-
/**
|
|
486
|
-
* Closes the dialog box
|
|
487
|
-
* @private
|
|
488
|
-
*/
|
|
489
|
-
_close() {
|
|
490
|
-
this.$html.modal('close');
|
|
491
|
-
},
|
|
492
|
-
|
|
493
|
-
/**
|
|
494
|
-
* Destroys the dialog box
|
|
495
|
-
* @private
|
|
496
|
-
*/
|
|
497
|
-
_destroy() {
|
|
498
|
-
this.$html.modal('destroy');
|
|
499
|
-
if (this.navigator) {
|
|
500
|
-
this.navigator.destroy();
|
|
501
|
-
}
|
|
502
|
-
if (this.globalShortcut) {
|
|
503
|
-
this.globalShortcut.clear();
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
};
|
|
507
|
-
|
|
508
|
-
/**
|
|
509
|
-
* Builds a dialog box instance
|
|
510
|
-
* @param {Object} options
|
|
511
|
-
* @returns {dialog}
|
|
512
|
-
*/
|
|
513
|
-
export default function dialogFactory(options) {
|
|
514
|
-
const instance = Object.assign({}, dialog);
|
|
515
|
-
instance.init(options);
|
|
516
|
-
return instance;
|
|
517
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* This program is free software; you can redistribute it and/or
|
|
3
|
+
* modify it under the terms of the GNU General Public License
|
|
4
|
+
* as published by the Free Software Foundation; under version 2
|
|
5
|
+
* of the License (non-upgradable).
|
|
6
|
+
*
|
|
7
|
+
* This program is distributed in the hope that it will be useful,
|
|
8
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
9
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
10
|
+
* GNU General Public License for more details.
|
|
11
|
+
*
|
|
12
|
+
* You should have received a copy of the GNU General Public License
|
|
13
|
+
* along with this program; if not, write to the Free Software
|
|
14
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
15
|
+
*
|
|
16
|
+
* Copyright (c) 2015-2019 (original work) Open Assessment Technologies SA ;
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Create a modal dialog component
|
|
20
|
+
*
|
|
21
|
+
*
|
|
22
|
+
* TODO move to ui/component
|
|
23
|
+
* TODO use core/eventifier
|
|
24
|
+
*
|
|
25
|
+
*
|
|
26
|
+
* @author Jean-Sébastien Conan <jean-sebastien.conan@vesperiagroup.com>
|
|
27
|
+
*/
|
|
28
|
+
import $ from 'jquery';
|
|
29
|
+
import _ from 'lodash';
|
|
30
|
+
import __ from 'i18n';
|
|
31
|
+
import bodyTpl from 'ui/dialog/tpl/body';
|
|
32
|
+
import buttonsTpl from 'ui/dialog/tpl/buttons';
|
|
33
|
+
import keyNavigator from 'ui/keyNavigation/navigator';
|
|
34
|
+
import navigableDomElement from 'ui/keyNavigation/navigableDomElement';
|
|
35
|
+
import shortcutRegistry from 'util/shortcut/registry';
|
|
36
|
+
import 'ui/modal';
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* The scope of events names
|
|
40
|
+
* @type {string}
|
|
41
|
+
*/
|
|
42
|
+
const _scope = '.modal';
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* A list of predefined buttons
|
|
46
|
+
* @type {Object}
|
|
47
|
+
*/
|
|
48
|
+
const _definedButtons = {
|
|
49
|
+
ok: {
|
|
50
|
+
id: 'ok',
|
|
51
|
+
type: 'info',
|
|
52
|
+
label: __('Ok'),
|
|
53
|
+
close: true
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
cancel: {
|
|
57
|
+
id: 'cancel',
|
|
58
|
+
type: 'regular',
|
|
59
|
+
label: __('Cancel'),
|
|
60
|
+
close: true
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
yes: {
|
|
64
|
+
id: 'yes',
|
|
65
|
+
type: 'info',
|
|
66
|
+
label: __('Yes'),
|
|
67
|
+
close: true
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
no: {
|
|
71
|
+
id: 'no',
|
|
72
|
+
type: 'regular',
|
|
73
|
+
label: __('No'),
|
|
74
|
+
close: true
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* The defaults fields values
|
|
80
|
+
* @type {Object}
|
|
81
|
+
*/
|
|
82
|
+
const _defaults = {
|
|
83
|
+
message: '',
|
|
84
|
+
content: '',
|
|
85
|
+
width: 500,
|
|
86
|
+
animate: false,
|
|
87
|
+
autoRender: false,
|
|
88
|
+
autoDestroy: false,
|
|
89
|
+
renderTo: 'body',
|
|
90
|
+
buttons: 'cancel,ok'
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Define a dialog box
|
|
95
|
+
* @type {Object}
|
|
96
|
+
*/
|
|
97
|
+
const dialog = {
|
|
98
|
+
/**
|
|
99
|
+
* Initialise the dialog box.
|
|
100
|
+
* @param {Object} options - A list of options.
|
|
101
|
+
* @param {String} options.heading - An optional heading to display.
|
|
102
|
+
* @param {String} options.message - The message to display.
|
|
103
|
+
* @param {String} options.content - An optional content to display under the displayed message.
|
|
104
|
+
* @param {String} options.class - Space-separated string of classes to add to the root HTML element
|
|
105
|
+
* @param {Array|Object|String} options.buttons - A list of buttons to display (default: 'cancel,ok'). Can be:
|
|
106
|
+
* - a string: the button names separated by commas
|
|
107
|
+
* - an array: an array of button names or an array of button definitions
|
|
108
|
+
* - an object: a unique button definition, containing:
|
|
109
|
+
* - id: The button's id
|
|
110
|
+
* - type: A display type (regular, info, warning, error)
|
|
111
|
+
* - label: The button's caption
|
|
112
|
+
* - icon: An optional icon
|
|
113
|
+
* - close: A boolean value telling if the dialog must be closed after the button has been activated
|
|
114
|
+
* @param {String|jQuery|HTMLElement} options.renderTo - A container in which renders the dialog (default: 'body').
|
|
115
|
+
* @param {Boolean} options.autoRender - Allow the dialog to be immediately rendered after initialise.
|
|
116
|
+
* @param {Boolean} options.autoDestroy - Allow the dialog to be immediately destroyed when closing.
|
|
117
|
+
* @param {Boolean} [options.disableClosing = false] - to disable the default closers
|
|
118
|
+
* @param {Boolean} [options.disableEscape = false] - to disable the ability to escape close the dialog
|
|
119
|
+
* @param {Number} options.width - The dialog box width in pixels (default: 500).
|
|
120
|
+
* @param {Number|Boolean} options.animate - The dialog box animate duration (default: false).
|
|
121
|
+
* @param {Function} options.onXYZbtn - An event handler assigned to a particular button (XYZ).
|
|
122
|
+
* @returns {dialog}
|
|
123
|
+
*/
|
|
124
|
+
init(options) {
|
|
125
|
+
// split options to events
|
|
126
|
+
const events = {};
|
|
127
|
+
const initOptions = _.omit(options || {}, (value, key) => {
|
|
128
|
+
if (key.length > 2 && 'on' === key.substr(0, 2)) {
|
|
129
|
+
events[key.substr(2)] = value;
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
return false;
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
// assign default values and options
|
|
136
|
+
_.defaults(this, initOptions, _defaults);
|
|
137
|
+
|
|
138
|
+
// pre-render the dialog box
|
|
139
|
+
this.dialogId = _.uniqueId('dlg-');
|
|
140
|
+
this.$html = $(bodyTpl(this));
|
|
141
|
+
this.$buttons = this.$html.find('.buttons');
|
|
142
|
+
this.rendered = false;
|
|
143
|
+
this.destroyed = false;
|
|
144
|
+
|
|
145
|
+
// install the buttons and bind the actions
|
|
146
|
+
this.$buttons.on('click' + _scope, 'button', this._onButtonClick.bind(this));
|
|
147
|
+
this.setButtons(this.buttons);
|
|
148
|
+
|
|
149
|
+
// install the events extracted from the options
|
|
150
|
+
_.forEach(events, (callback, eventName) => {
|
|
151
|
+
if (eventName.indexOf('.') < 0) {
|
|
152
|
+
eventName += _scope;
|
|
153
|
+
}
|
|
154
|
+
this.on(eventName.toLowerCase(), callback);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
if (this.autoRender) {
|
|
158
|
+
this.render();
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
return this;
|
|
162
|
+
},
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Destroys the dialog box
|
|
166
|
+
* @returns {dialog}
|
|
167
|
+
* @fires dialog#destroy.modal
|
|
168
|
+
*/
|
|
169
|
+
destroy() {
|
|
170
|
+
if (!this.destroyed) {
|
|
171
|
+
this._destroy();
|
|
172
|
+
|
|
173
|
+
// reset the context
|
|
174
|
+
this.rendered = false;
|
|
175
|
+
this.destroyed = true;
|
|
176
|
+
|
|
177
|
+
this.trigger('destroy' + _scope);
|
|
178
|
+
|
|
179
|
+
// disable events and remove DOM
|
|
180
|
+
this.$buttons.off(_scope);
|
|
181
|
+
this.$html.off(_scope).remove();
|
|
182
|
+
this.$html = null;
|
|
183
|
+
this.$buttons = null;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return this;
|
|
187
|
+
},
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Set the action buttons
|
|
191
|
+
* @param {Object|Array|String} buttons
|
|
192
|
+
* @returns {dialog}
|
|
193
|
+
*/
|
|
194
|
+
setButtons(buttons) {
|
|
195
|
+
if (!this.destroyed) {
|
|
196
|
+
if (!buttons) {
|
|
197
|
+
buttons = _defaults.buttons;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
if (!_.isArray(buttons)) {
|
|
201
|
+
// buttons can be set as a list of names
|
|
202
|
+
if (_.isString(buttons)) {
|
|
203
|
+
buttons = buttons.split(',');
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// bind the buttons with
|
|
208
|
+
this.buttons = {};
|
|
209
|
+
_.forEach(buttons, btn => {
|
|
210
|
+
if (_.isString(btn)) {
|
|
211
|
+
btn = btn.trim();
|
|
212
|
+
btn = _definedButtons[btn] || {
|
|
213
|
+
id: btn,
|
|
214
|
+
type: 'info',
|
|
215
|
+
label: btn
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
if (!btn.type) {
|
|
219
|
+
btn.type = 'regular';
|
|
220
|
+
}
|
|
221
|
+
this.buttons[btn.id] = btn;
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
this.$buttons.html(buttonsTpl(this));
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return this;
|
|
228
|
+
},
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Renders and shows the dialog box
|
|
232
|
+
* @param {String|HTMLElement|jQuery} [to]
|
|
233
|
+
* @returns {dialog}
|
|
234
|
+
* @fires modal#create.modal
|
|
235
|
+
*/
|
|
236
|
+
render(to) {
|
|
237
|
+
if (!this.destroyed) {
|
|
238
|
+
$(to || this.renderTo).append(this.$html);
|
|
239
|
+
this._install();
|
|
240
|
+
this.rendered = true;
|
|
241
|
+
}
|
|
242
|
+
return this;
|
|
243
|
+
},
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Shows the dialog box. Also renders if needed.
|
|
247
|
+
* @returns {dialog}
|
|
248
|
+
* @fires modal#opened.modal
|
|
249
|
+
*/
|
|
250
|
+
show() {
|
|
251
|
+
if (!this.destroyed) {
|
|
252
|
+
if (!this.rendered) {
|
|
253
|
+
this.render();
|
|
254
|
+
} else {
|
|
255
|
+
this._open();
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return this;
|
|
259
|
+
},
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Hides the dialog box. Does nothing if the dialog box has not been rendered.
|
|
263
|
+
* @returns {dialog}
|
|
264
|
+
* @fires modal#closed.modal
|
|
265
|
+
*/
|
|
266
|
+
hide() {
|
|
267
|
+
if (!this.destroyed && this.rendered) {
|
|
268
|
+
this._close();
|
|
269
|
+
|
|
270
|
+
if (this.autoDestroy) {
|
|
271
|
+
this.destroy();
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return this;
|
|
275
|
+
},
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Install an event handler on the underlying DOM element
|
|
279
|
+
* @returns {dialog}
|
|
280
|
+
*/
|
|
281
|
+
on() {
|
|
282
|
+
if (this.$html) {
|
|
283
|
+
this.$html.on.apply(this.$html, arguments);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
return this;
|
|
287
|
+
},
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* Uninstall an event handler from the underlying DOM element
|
|
291
|
+
* @returns {dialog}
|
|
292
|
+
*/
|
|
293
|
+
off() {
|
|
294
|
+
if (this.$html) {
|
|
295
|
+
this.$html.off.apply(this.$html, arguments);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
return this;
|
|
299
|
+
},
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Triggers an event on the underlying DOM element
|
|
303
|
+
* @param {String} eventName
|
|
304
|
+
* @param {Array|Object} extraParameters
|
|
305
|
+
* @returns {dialog}
|
|
306
|
+
*/
|
|
307
|
+
trigger(eventName, extraParameters) {
|
|
308
|
+
if (this.$html) {
|
|
309
|
+
if (typeof extraParameters === 'undefined') {
|
|
310
|
+
extraParameters = [];
|
|
311
|
+
}
|
|
312
|
+
if (!_.isArray(extraParameters)) {
|
|
313
|
+
extraParameters = [extraParameters];
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
extraParameters = Array.prototype.slice.call(extraParameters);
|
|
317
|
+
extraParameters.push(this);
|
|
318
|
+
|
|
319
|
+
this.$html.trigger(eventName, extraParameters);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
return this;
|
|
323
|
+
},
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Gets the underlying DOM element
|
|
327
|
+
* @returns {jQuery}
|
|
328
|
+
*/
|
|
329
|
+
getDom() {
|
|
330
|
+
return this.$html;
|
|
331
|
+
},
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Called when button is clicked.
|
|
335
|
+
* Executes a button related action
|
|
336
|
+
* @param {Event} event
|
|
337
|
+
* @private
|
|
338
|
+
*/
|
|
339
|
+
_onButtonClick(event) {
|
|
340
|
+
const $btn = $(event.target).closest('button');
|
|
341
|
+
const id = $btn.data('control');
|
|
342
|
+
const btn = this.buttons[id];
|
|
343
|
+
|
|
344
|
+
if (btn) {
|
|
345
|
+
this._execute(btn);
|
|
346
|
+
}
|
|
347
|
+
},
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* Execute a button related action
|
|
351
|
+
* @param {Object} btn
|
|
352
|
+
* @private
|
|
353
|
+
* @fires dialog#[button.id]btn.modal
|
|
354
|
+
*/
|
|
355
|
+
_execute(btn) {
|
|
356
|
+
// call the optional callback
|
|
357
|
+
if (btn.action) {
|
|
358
|
+
btn.action.apply(this, [btn, this]);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Fires the event based on the button name
|
|
363
|
+
* @event dialog#[button.id]btn.modal
|
|
364
|
+
* @param {Object} btn - The related button
|
|
365
|
+
*/
|
|
366
|
+
this.trigger(btn.id + 'btn' + _scope, [btn]);
|
|
367
|
+
|
|
368
|
+
// auto close the dialog box if the button allows it
|
|
369
|
+
if (btn.close) {
|
|
370
|
+
this.hide();
|
|
371
|
+
}
|
|
372
|
+
},
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* Set focus on the dialog
|
|
376
|
+
* @param {String} [button] - The identifier of the button to focus. If none is provided, the focus will be put
|
|
377
|
+
* on the first navigable element.
|
|
378
|
+
*/
|
|
379
|
+
focus(button) {
|
|
380
|
+
let position = -1;
|
|
381
|
+
if (button) {
|
|
382
|
+
position = _.findIndex(this.navigator.getNavigableElements(), navigable => {
|
|
383
|
+
return navigable.getElement().is('[data-control="' + button + '"]');
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
if (position >= 0) {
|
|
387
|
+
this.navigator.setCursorAt(position);
|
|
388
|
+
} else {
|
|
389
|
+
this.navigator.focus();
|
|
390
|
+
}
|
|
391
|
+
},
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* Installs the dialog box
|
|
395
|
+
* @private
|
|
396
|
+
* #fires dialog#create.dialog
|
|
397
|
+
*/
|
|
398
|
+
_install() {
|
|
399
|
+
if (!this.destroyed) {
|
|
400
|
+
this.$html
|
|
401
|
+
.modal({
|
|
402
|
+
width: this.width,
|
|
403
|
+
animate: this.animate,
|
|
404
|
+
disableClosing: this.disableClosing,
|
|
405
|
+
disableEscape: this.disableEscape
|
|
406
|
+
})
|
|
407
|
+
.on('closed' + _scope, () => {
|
|
408
|
+
if (this.autoDestroy) {
|
|
409
|
+
this.destroy();
|
|
410
|
+
}
|
|
411
|
+
});
|
|
412
|
+
const $items = this.getDom().add($(_scope).find('input')).add(this.$buttons.find('button'));
|
|
413
|
+
const closeButton = $(_scope).find('#modal-close-btn')[0];
|
|
414
|
+
|
|
415
|
+
if (closeButton) {
|
|
416
|
+
$items.push(closeButton);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
//creates the navigator to manage the key navigation
|
|
420
|
+
this.navigator = keyNavigator({
|
|
421
|
+
elements: navigableDomElement.createFromDoms($items),
|
|
422
|
+
propagateTab: false
|
|
423
|
+
})
|
|
424
|
+
.on('right down', function () {
|
|
425
|
+
if (this.getCursor().position === $items.length - 1) {
|
|
426
|
+
this.setCursorAt(1); // Skip container.
|
|
427
|
+
} else {
|
|
428
|
+
this.next();
|
|
429
|
+
}
|
|
430
|
+
})
|
|
431
|
+
.on('left up', function () {
|
|
432
|
+
if (this.getCursor().position === 1) {
|
|
433
|
+
// Skip container.
|
|
434
|
+
this.last();
|
|
435
|
+
} else {
|
|
436
|
+
this.previous();
|
|
437
|
+
}
|
|
438
|
+
})
|
|
439
|
+
.on('tab', function () {
|
|
440
|
+
if (this.getCursor().position === $items.length - 1) {
|
|
441
|
+
this.setCursorAt(1); // Skip container.
|
|
442
|
+
} else {
|
|
443
|
+
this.next();
|
|
444
|
+
}
|
|
445
|
+
})
|
|
446
|
+
.on('shift+tab', function () {
|
|
447
|
+
if (this.getCursor().position === 1) {
|
|
448
|
+
// Skip container.
|
|
449
|
+
this.last();
|
|
450
|
+
} else {
|
|
451
|
+
this.previous();
|
|
452
|
+
}
|
|
453
|
+
})
|
|
454
|
+
.on(
|
|
455
|
+
'activate',
|
|
456
|
+
_.debounce(function (cursor) {
|
|
457
|
+
const $elt = cursor.navigable.getElement();
|
|
458
|
+
if (!$elt.is(':radio,:checkbox')) {
|
|
459
|
+
$elt.click();
|
|
460
|
+
} else {
|
|
461
|
+
$elt.prop('checked', !$elt.prop('checked')).change();
|
|
462
|
+
}
|
|
463
|
+
}, 10)
|
|
464
|
+
);
|
|
465
|
+
this.navigator.first();
|
|
466
|
+
//added a global shortcut to enable setting focus on tab
|
|
467
|
+
this.globalShortcut = shortcutRegistry($('body')).add('tab shift+tab', () => {
|
|
468
|
+
if (!this.navigator.isFocused()) {
|
|
469
|
+
this.navigator.focus();
|
|
470
|
+
}
|
|
471
|
+
});
|
|
472
|
+
|
|
473
|
+
this.trigger('create.dialog');
|
|
474
|
+
}
|
|
475
|
+
},
|
|
476
|
+
|
|
477
|
+
/**
|
|
478
|
+
* Opens the dialog box
|
|
479
|
+
* @private
|
|
480
|
+
*/
|
|
481
|
+
_open() {
|
|
482
|
+
this.$html.modal('open');
|
|
483
|
+
},
|
|
484
|
+
|
|
485
|
+
/**
|
|
486
|
+
* Closes the dialog box
|
|
487
|
+
* @private
|
|
488
|
+
*/
|
|
489
|
+
_close() {
|
|
490
|
+
this.$html.modal('close');
|
|
491
|
+
},
|
|
492
|
+
|
|
493
|
+
/**
|
|
494
|
+
* Destroys the dialog box
|
|
495
|
+
* @private
|
|
496
|
+
*/
|
|
497
|
+
_destroy() {
|
|
498
|
+
this.$html.modal('destroy');
|
|
499
|
+
if (this.navigator) {
|
|
500
|
+
this.navigator.destroy();
|
|
501
|
+
}
|
|
502
|
+
if (this.globalShortcut) {
|
|
503
|
+
this.globalShortcut.clear();
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
};
|
|
507
|
+
|
|
508
|
+
/**
|
|
509
|
+
* Builds a dialog box instance
|
|
510
|
+
* @param {Object} options
|
|
511
|
+
* @returns {dialog}
|
|
512
|
+
*/
|
|
513
|
+
export default function dialogFactory(options) {
|
|
514
|
+
const instance = Object.assign({}, dialog);
|
|
515
|
+
instance.init(options);
|
|
516
|
+
return instance;
|
|
517
|
+
}
|