@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
|
@@ -1,372 +1,372 @@
|
|
|
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) 2019 Open Assessment Technologies SA ;
|
|
17
|
-
*/
|
|
18
|
-
/**
|
|
19
|
-
* @author Jean-Sébastien Conan <jean-sebastien@taotesting.com>
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
import _ from 'lodash';
|
|
23
|
-
import __ from 'i18n';
|
|
24
|
-
import Handlebars from 'handlebars';
|
|
25
|
-
import providerRegistry from 'core/providerRegistry';
|
|
26
|
-
import componentFactory from 'ui/component';
|
|
27
|
-
import validatorFactory from 'ui/form/validator/validator';
|
|
28
|
-
import validatorRendererFactory from 'ui/form/validator/renderer';
|
|
29
|
-
import defaultProvider from 'ui/form/widget/providers/default';
|
|
30
|
-
import widgetTpl from 'ui/form/widget/tpl/widget';
|
|
31
|
-
import labelTpl from 'ui/form/widget/tpl/label';
|
|
32
|
-
import 'ui/form/widget/css/widget.css';
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* @typedef {Object} widgetConfig Defines the config entries available to setup a form widget
|
|
36
|
-
* @property {String} widget - The type of widget.
|
|
37
|
-
* It will be used by the main factory to retrieve
|
|
38
|
-
* the implementation from the internal registry.
|
|
39
|
-
* @property {String} widgetType - The internal type of widget
|
|
40
|
-
* @property {String} uri - The identifier of the widget
|
|
41
|
-
* @property {String} [label] - The label of the widget
|
|
42
|
-
* @property {String|String[]} [value] - The value of the widget. Depending on the widget's type,
|
|
43
|
-
* it can be a single or a multiple value
|
|
44
|
-
* @property {widgetRangeValue[]} [range] - Array of values used in multi-elements widgets (like combo or checkbox)
|
|
45
|
-
* @property {Boolean} [required] - Tells if the value is required
|
|
46
|
-
* @property {validationRule|validationRule[]|validator} [validation] - Optional validators to add
|
|
47
|
-
*/
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* @typedef {Object} widgetRangeValue Defines a value to use in a widget range
|
|
51
|
-
* @property {String} uri - The identifier of the value
|
|
52
|
-
* @property {String} label - The label for the value
|
|
53
|
-
*/
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Some default config
|
|
57
|
-
* @type {widgetConfig}
|
|
58
|
-
*/
|
|
59
|
-
const defaults = {
|
|
60
|
-
widgetType: 'input-box',
|
|
61
|
-
required: false,
|
|
62
|
-
label: __('Label'),
|
|
63
|
-
value: '',
|
|
64
|
-
range: []
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Gets the provider with respect to the provided config
|
|
69
|
-
* @param {widgetConfig} config
|
|
70
|
-
* @returns {Object}
|
|
71
|
-
* @throws {TypeError} if the config is not valid or if the provider does not exist
|
|
72
|
-
*/
|
|
73
|
-
function getWidgetProvider(config) {
|
|
74
|
-
if (!_.isPlainObject(config)) {
|
|
75
|
-
throw new TypeError('The config must be an object');
|
|
76
|
-
}
|
|
77
|
-
if (!_.isString(config.uri) || !config.uri) {
|
|
78
|
-
throw new TypeError('The config must contain an uri');
|
|
79
|
-
}
|
|
80
|
-
if (!_.isString(config.widget) || !config.widget) {
|
|
81
|
-
throw new TypeError('The config must declare a type of widget');
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
return widgetFactory.getProvider(config.widget);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Makes sure a value is an array
|
|
89
|
-
* @param {*} value
|
|
90
|
-
* @returns {Array}
|
|
91
|
-
*/
|
|
92
|
-
function forceArray(value) {
|
|
93
|
-
if (value && !_.isArray(value)) {
|
|
94
|
-
value = [value];
|
|
95
|
-
} else {
|
|
96
|
-
value = value || [];
|
|
97
|
-
}
|
|
98
|
-
return value;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Factory that builds a form element based on its config.
|
|
103
|
-
*
|
|
104
|
-
* * @example
|
|
105
|
-
* const container = $('.my-container', $container);
|
|
106
|
-
*
|
|
107
|
-
* widgetFactory.registerProvider('textinput', widgetTextInputProvider);
|
|
108
|
-
*
|
|
109
|
-
* const config = {
|
|
110
|
-
* widget: 'textinput'
|
|
111
|
-
* uri: 'text',
|
|
112
|
-
* label: 'Text',
|
|
113
|
-
* required: true
|
|
114
|
-
* };
|
|
115
|
-
*
|
|
116
|
-
* const widget = widgetFactory(container, config)
|
|
117
|
-
* .on('change', function(value) {
|
|
118
|
-
* // ...
|
|
119
|
-
* });
|
|
120
|
-
*
|
|
121
|
-
* @param {HTMLElement|String} container
|
|
122
|
-
* @param {widgetConfig} config
|
|
123
|
-
* @param {String} config.widget - The type of widget.
|
|
124
|
-
* It will be used by the main factory to retrieve
|
|
125
|
-
* the implementation from the internal registry.
|
|
126
|
-
* @param {String} config.uri - The identifier of the widget
|
|
127
|
-
* @param {String} [config.label] - The label of the widget
|
|
128
|
-
* @param {String|String[]} [config.value] - The value of the widget. Depending on the widget's type,
|
|
129
|
-
* it can be a single or a multiple value
|
|
130
|
-
* @param {widgetRangeValue[]} [config.range] - Array of values used in multi-elements widgets (like combo or checkbox)
|
|
131
|
-
* @param {Boolean} [config.required] - Tells if the value is required
|
|
132
|
-
* @param {validationRule|validationRule[]|validator} [config.validation] - Optional validators to add
|
|
133
|
-
* @returns {widgetForm}
|
|
134
|
-
* @fires ready - When the component is ready to work
|
|
135
|
-
*/
|
|
136
|
-
function widgetFactory(container, config) {
|
|
137
|
-
let widget;
|
|
138
|
-
let validator;
|
|
139
|
-
let validatorRenderer;
|
|
140
|
-
const provider = getWidgetProvider(config);
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Reflects the invalid state to the component
|
|
144
|
-
* @param {Boolean} invalid
|
|
145
|
-
* @param {String[]} [messages]
|
|
146
|
-
*/
|
|
147
|
-
const setInvalidState = (invalid, messages) => {
|
|
148
|
-
widget.setState('invalid', invalid);
|
|
149
|
-
if (validatorRenderer) {
|
|
150
|
-
if (invalid) {
|
|
151
|
-
validatorRenderer.display(messages);
|
|
152
|
-
} else {
|
|
153
|
-
validatorRenderer.clear();
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
};
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Delegate a call to the provider, or fallback to the default implementation
|
|
160
|
-
* @param {String} method - The name of the method to call.
|
|
161
|
-
* @param {...} args - Extra parameters
|
|
162
|
-
* @returns {*}
|
|
163
|
-
*/
|
|
164
|
-
const delegate = (method, ...args) => {
|
|
165
|
-
if (_.isFunction(provider[method])) {
|
|
166
|
-
return provider[method].apply(widget, args);
|
|
167
|
-
}
|
|
168
|
-
return defaultProvider[method].apply(widget, args);
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Triggers the change event
|
|
173
|
-
* @returns {widgetForm}
|
|
174
|
-
* @fires change
|
|
175
|
-
*/
|
|
176
|
-
const notifyChange = () => {
|
|
177
|
-
/**
|
|
178
|
-
* @event change
|
|
179
|
-
* @param {String|String[]} value
|
|
180
|
-
* @param {String} uri
|
|
181
|
-
*/
|
|
182
|
-
widget.trigger('change', widget.getValue(), widget.getUri());
|
|
183
|
-
};
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* @typedef {component} widgetForm
|
|
187
|
-
*/
|
|
188
|
-
const widgetApi = {
|
|
189
|
-
/**
|
|
190
|
-
* Gets the widget's URI
|
|
191
|
-
* @returns {String}
|
|
192
|
-
*/
|
|
193
|
-
getUri() {
|
|
194
|
-
return this.getConfig().uri;
|
|
195
|
-
},
|
|
196
|
-
|
|
197
|
-
/**
|
|
198
|
-
* Gets the value of the widget
|
|
199
|
-
* @returns {String|String[]}
|
|
200
|
-
*/
|
|
201
|
-
getValue() {
|
|
202
|
-
return delegate('getValue');
|
|
203
|
-
},
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* Gets the raw value of the widget
|
|
207
|
-
* @returns {*}
|
|
208
|
-
*/
|
|
209
|
-
getRawValue() {
|
|
210
|
-
return delegate('getRawValue');
|
|
211
|
-
},
|
|
212
|
-
|
|
213
|
-
/**
|
|
214
|
-
* Sets the value of the widget
|
|
215
|
-
* @param {String|String[]} value
|
|
216
|
-
* @returns {widgetForm}
|
|
217
|
-
* @fires change after the value has been changed
|
|
218
|
-
*/
|
|
219
|
-
setValue(value) {
|
|
220
|
-
this.getConfig().value = value;
|
|
221
|
-
delegate('setValue', value);
|
|
222
|
-
notifyChange();
|
|
223
|
-
|
|
224
|
-
return this;
|
|
225
|
-
},
|
|
226
|
-
|
|
227
|
-
/**
|
|
228
|
-
* Gets access to the validation engine
|
|
229
|
-
* @returns {validator}
|
|
230
|
-
*/
|
|
231
|
-
getValidator() {
|
|
232
|
-
return validator;
|
|
233
|
-
},
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* Sets the validation engine
|
|
237
|
-
* @param {validationRule|validationRule[]|validator} validation
|
|
238
|
-
* @returns {widgetForm}
|
|
239
|
-
*/
|
|
240
|
-
setValidator(validation) {
|
|
241
|
-
if (validation && _.isFunction(validation.validate)) {
|
|
242
|
-
validator = validation;
|
|
243
|
-
} else {
|
|
244
|
-
if (validation && !validation.validations) {
|
|
245
|
-
if (!_.isArray(validation)) {
|
|
246
|
-
validation = [validation];
|
|
247
|
-
}
|
|
248
|
-
validation = {
|
|
249
|
-
validations: validation
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
validator = validatorFactory(validation);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
return this;
|
|
257
|
-
},
|
|
258
|
-
|
|
259
|
-
/**
|
|
260
|
-
* Resets the widget to the default validators
|
|
261
|
-
* @returns {widgetForm}
|
|
262
|
-
*/
|
|
263
|
-
setDefaultValidators() {
|
|
264
|
-
// restore factory default validators
|
|
265
|
-
this.setValidator(this.getConfig().validator);
|
|
266
|
-
|
|
267
|
-
// then apply provider default validators
|
|
268
|
-
delegate('setDefaultValidators');
|
|
269
|
-
|
|
270
|
-
return this;
|
|
271
|
-
},
|
|
272
|
-
|
|
273
|
-
/**
|
|
274
|
-
* Resets the widget to its default value
|
|
275
|
-
* @returns {widgetForm}
|
|
276
|
-
*/
|
|
277
|
-
reset() {
|
|
278
|
-
delegate('reset');
|
|
279
|
-
setInvalidState(false);
|
|
280
|
-
return this;
|
|
281
|
-
},
|
|
282
|
-
|
|
283
|
-
/**
|
|
284
|
-
* Validates the widget
|
|
285
|
-
* @returns {Promise}
|
|
286
|
-
*/
|
|
287
|
-
validate() {
|
|
288
|
-
return this.getValidator()
|
|
289
|
-
.validate(this.getRawValue())
|
|
290
|
-
.then(res => {
|
|
291
|
-
setInvalidState(false);
|
|
292
|
-
return res;
|
|
293
|
-
})
|
|
294
|
-
.catch(err => {
|
|
295
|
-
setInvalidState(true, err);
|
|
296
|
-
return Promise.reject(err);
|
|
297
|
-
});
|
|
298
|
-
},
|
|
299
|
-
|
|
300
|
-
/**
|
|
301
|
-
* Gets access to the actual form element
|
|
302
|
-
* @returns {jQuery|null}
|
|
303
|
-
*/
|
|
304
|
-
getWidgetElement() {
|
|
305
|
-
if (this.is('rendered')) {
|
|
306
|
-
return delegate('getWidgetElement');
|
|
307
|
-
}
|
|
308
|
-
return null;
|
|
309
|
-
}
|
|
310
|
-
};
|
|
311
|
-
|
|
312
|
-
widget = componentFactory(widgetApi, defaults)
|
|
313
|
-
.setTemplate(provider.template || widgetTpl)
|
|
314
|
-
.on('init', function onWidgetInit() {
|
|
315
|
-
this.setDefaultValidators();
|
|
316
|
-
|
|
317
|
-
// auto render on init (defer the call to give a chance to the init event to be completed before)
|
|
318
|
-
_.defer(() => this.render(container));
|
|
319
|
-
})
|
|
320
|
-
.on('render', function onWidgetRender() {
|
|
321
|
-
// reflect the type of widget
|
|
322
|
-
this.setState(this.getConfig().widgetType, true);
|
|
323
|
-
|
|
324
|
-
// react to data change
|
|
325
|
-
this.getWidgetElement().on('change blur', () => {
|
|
326
|
-
const value = this.getValue();
|
|
327
|
-
if (value !== this.getConfig().value) {
|
|
328
|
-
this.getConfig().value = value;
|
|
329
|
-
notifyChange();
|
|
330
|
-
}
|
|
331
|
-
});
|
|
332
|
-
|
|
333
|
-
/**
|
|
334
|
-
* @event ready
|
|
335
|
-
*/
|
|
336
|
-
validatorRenderer = validatorRendererFactory(this.getElement())
|
|
337
|
-
.spread(this, 'error ready');
|
|
338
|
-
})
|
|
339
|
-
.on('disable', function onWidgetDisable() {
|
|
340
|
-
if (this.is('rendered')) {
|
|
341
|
-
this.getWidgetElement().prop('disabled', true);
|
|
342
|
-
}
|
|
343
|
-
})
|
|
344
|
-
.on('enable', function onWidgetEnable() {
|
|
345
|
-
if (this.is('rendered')) {
|
|
346
|
-
this.getWidgetElement().prop('disabled', false);
|
|
347
|
-
}
|
|
348
|
-
})
|
|
349
|
-
.on('destroy', function onWidgetDestroy() {
|
|
350
|
-
if (validatorRenderer) {
|
|
351
|
-
validatorRenderer.destroy();
|
|
352
|
-
validatorRenderer = null;
|
|
353
|
-
}
|
|
354
|
-
});
|
|
355
|
-
|
|
356
|
-
if (config) {
|
|
357
|
-
// the range must be an array
|
|
358
|
-
config.range = forceArray(config.range);
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
_.defer(() => widget.init(provider.init.call(widget, config || {}) || config));
|
|
362
|
-
|
|
363
|
-
return widget;
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
// expose a partial that can be used by every form widget to inject the label markup
|
|
367
|
-
Handlebars.registerPartial('ui-form-widget-label', labelTpl);
|
|
368
|
-
|
|
369
|
-
// the widgetFactory is also a providers registry
|
|
370
|
-
providerRegistry(widgetFactory);
|
|
371
|
-
|
|
372
|
-
export default widgetFactory;
|
|
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) 2019 Open Assessment Technologies SA ;
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* @author Jean-Sébastien Conan <jean-sebastien@taotesting.com>
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import _ from 'lodash';
|
|
23
|
+
import __ from 'i18n';
|
|
24
|
+
import Handlebars from 'handlebars';
|
|
25
|
+
import providerRegistry from 'core/providerRegistry';
|
|
26
|
+
import componentFactory from 'ui/component';
|
|
27
|
+
import validatorFactory from 'ui/form/validator/validator';
|
|
28
|
+
import validatorRendererFactory from 'ui/form/validator/renderer';
|
|
29
|
+
import defaultProvider from 'ui/form/widget/providers/default';
|
|
30
|
+
import widgetTpl from 'ui/form/widget/tpl/widget';
|
|
31
|
+
import labelTpl from 'ui/form/widget/tpl/label';
|
|
32
|
+
import 'ui/form/widget/css/widget.css';
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @typedef {Object} widgetConfig Defines the config entries available to setup a form widget
|
|
36
|
+
* @property {String} widget - The type of widget.
|
|
37
|
+
* It will be used by the main factory to retrieve
|
|
38
|
+
* the implementation from the internal registry.
|
|
39
|
+
* @property {String} widgetType - The internal type of widget
|
|
40
|
+
* @property {String} uri - The identifier of the widget
|
|
41
|
+
* @property {String} [label] - The label of the widget
|
|
42
|
+
* @property {String|String[]} [value] - The value of the widget. Depending on the widget's type,
|
|
43
|
+
* it can be a single or a multiple value
|
|
44
|
+
* @property {widgetRangeValue[]} [range] - Array of values used in multi-elements widgets (like combo or checkbox)
|
|
45
|
+
* @property {Boolean} [required] - Tells if the value is required
|
|
46
|
+
* @property {validationRule|validationRule[]|validator} [validation] - Optional validators to add
|
|
47
|
+
*/
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @typedef {Object} widgetRangeValue Defines a value to use in a widget range
|
|
51
|
+
* @property {String} uri - The identifier of the value
|
|
52
|
+
* @property {String} label - The label for the value
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Some default config
|
|
57
|
+
* @type {widgetConfig}
|
|
58
|
+
*/
|
|
59
|
+
const defaults = {
|
|
60
|
+
widgetType: 'input-box',
|
|
61
|
+
required: false,
|
|
62
|
+
label: __('Label'),
|
|
63
|
+
value: '',
|
|
64
|
+
range: []
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Gets the provider with respect to the provided config
|
|
69
|
+
* @param {widgetConfig} config
|
|
70
|
+
* @returns {Object}
|
|
71
|
+
* @throws {TypeError} if the config is not valid or if the provider does not exist
|
|
72
|
+
*/
|
|
73
|
+
function getWidgetProvider(config) {
|
|
74
|
+
if (!_.isPlainObject(config)) {
|
|
75
|
+
throw new TypeError('The config must be an object');
|
|
76
|
+
}
|
|
77
|
+
if (!_.isString(config.uri) || !config.uri) {
|
|
78
|
+
throw new TypeError('The config must contain an uri');
|
|
79
|
+
}
|
|
80
|
+
if (!_.isString(config.widget) || !config.widget) {
|
|
81
|
+
throw new TypeError('The config must declare a type of widget');
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return widgetFactory.getProvider(config.widget);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Makes sure a value is an array
|
|
89
|
+
* @param {*} value
|
|
90
|
+
* @returns {Array}
|
|
91
|
+
*/
|
|
92
|
+
function forceArray(value) {
|
|
93
|
+
if (value && !_.isArray(value)) {
|
|
94
|
+
value = [value];
|
|
95
|
+
} else {
|
|
96
|
+
value = value || [];
|
|
97
|
+
}
|
|
98
|
+
return value;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Factory that builds a form element based on its config.
|
|
103
|
+
*
|
|
104
|
+
* * @example
|
|
105
|
+
* const container = $('.my-container', $container);
|
|
106
|
+
*
|
|
107
|
+
* widgetFactory.registerProvider('textinput', widgetTextInputProvider);
|
|
108
|
+
*
|
|
109
|
+
* const config = {
|
|
110
|
+
* widget: 'textinput'
|
|
111
|
+
* uri: 'text',
|
|
112
|
+
* label: 'Text',
|
|
113
|
+
* required: true
|
|
114
|
+
* };
|
|
115
|
+
*
|
|
116
|
+
* const widget = widgetFactory(container, config)
|
|
117
|
+
* .on('change', function(value) {
|
|
118
|
+
* // ...
|
|
119
|
+
* });
|
|
120
|
+
*
|
|
121
|
+
* @param {HTMLElement|String} container
|
|
122
|
+
* @param {widgetConfig} config
|
|
123
|
+
* @param {String} config.widget - The type of widget.
|
|
124
|
+
* It will be used by the main factory to retrieve
|
|
125
|
+
* the implementation from the internal registry.
|
|
126
|
+
* @param {String} config.uri - The identifier of the widget
|
|
127
|
+
* @param {String} [config.label] - The label of the widget
|
|
128
|
+
* @param {String|String[]} [config.value] - The value of the widget. Depending on the widget's type,
|
|
129
|
+
* it can be a single or a multiple value
|
|
130
|
+
* @param {widgetRangeValue[]} [config.range] - Array of values used in multi-elements widgets (like combo or checkbox)
|
|
131
|
+
* @param {Boolean} [config.required] - Tells if the value is required
|
|
132
|
+
* @param {validationRule|validationRule[]|validator} [config.validation] - Optional validators to add
|
|
133
|
+
* @returns {widgetForm}
|
|
134
|
+
* @fires ready - When the component is ready to work
|
|
135
|
+
*/
|
|
136
|
+
function widgetFactory(container, config) {
|
|
137
|
+
let widget;
|
|
138
|
+
let validator;
|
|
139
|
+
let validatorRenderer;
|
|
140
|
+
const provider = getWidgetProvider(config);
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Reflects the invalid state to the component
|
|
144
|
+
* @param {Boolean} invalid
|
|
145
|
+
* @param {String[]} [messages]
|
|
146
|
+
*/
|
|
147
|
+
const setInvalidState = (invalid, messages) => {
|
|
148
|
+
widget.setState('invalid', invalid);
|
|
149
|
+
if (validatorRenderer) {
|
|
150
|
+
if (invalid) {
|
|
151
|
+
validatorRenderer.display(messages);
|
|
152
|
+
} else {
|
|
153
|
+
validatorRenderer.clear();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Delegate a call to the provider, or fallback to the default implementation
|
|
160
|
+
* @param {String} method - The name of the method to call.
|
|
161
|
+
* @param {...} args - Extra parameters
|
|
162
|
+
* @returns {*}
|
|
163
|
+
*/
|
|
164
|
+
const delegate = (method, ...args) => {
|
|
165
|
+
if (_.isFunction(provider[method])) {
|
|
166
|
+
return provider[method].apply(widget, args);
|
|
167
|
+
}
|
|
168
|
+
return defaultProvider[method].apply(widget, args);
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Triggers the change event
|
|
173
|
+
* @returns {widgetForm}
|
|
174
|
+
* @fires change
|
|
175
|
+
*/
|
|
176
|
+
const notifyChange = () => {
|
|
177
|
+
/**
|
|
178
|
+
* @event change
|
|
179
|
+
* @param {String|String[]} value
|
|
180
|
+
* @param {String} uri
|
|
181
|
+
*/
|
|
182
|
+
widget.trigger('change', widget.getValue(), widget.getUri());
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* @typedef {component} widgetForm
|
|
187
|
+
*/
|
|
188
|
+
const widgetApi = {
|
|
189
|
+
/**
|
|
190
|
+
* Gets the widget's URI
|
|
191
|
+
* @returns {String}
|
|
192
|
+
*/
|
|
193
|
+
getUri() {
|
|
194
|
+
return this.getConfig().uri;
|
|
195
|
+
},
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Gets the value of the widget
|
|
199
|
+
* @returns {String|String[]}
|
|
200
|
+
*/
|
|
201
|
+
getValue() {
|
|
202
|
+
return delegate('getValue');
|
|
203
|
+
},
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Gets the raw value of the widget
|
|
207
|
+
* @returns {*}
|
|
208
|
+
*/
|
|
209
|
+
getRawValue() {
|
|
210
|
+
return delegate('getRawValue');
|
|
211
|
+
},
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Sets the value of the widget
|
|
215
|
+
* @param {String|String[]} value
|
|
216
|
+
* @returns {widgetForm}
|
|
217
|
+
* @fires change after the value has been changed
|
|
218
|
+
*/
|
|
219
|
+
setValue(value) {
|
|
220
|
+
this.getConfig().value = value;
|
|
221
|
+
delegate('setValue', value);
|
|
222
|
+
notifyChange();
|
|
223
|
+
|
|
224
|
+
return this;
|
|
225
|
+
},
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Gets access to the validation engine
|
|
229
|
+
* @returns {validator}
|
|
230
|
+
*/
|
|
231
|
+
getValidator() {
|
|
232
|
+
return validator;
|
|
233
|
+
},
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Sets the validation engine
|
|
237
|
+
* @param {validationRule|validationRule[]|validator} validation
|
|
238
|
+
* @returns {widgetForm}
|
|
239
|
+
*/
|
|
240
|
+
setValidator(validation) {
|
|
241
|
+
if (validation && _.isFunction(validation.validate)) {
|
|
242
|
+
validator = validation;
|
|
243
|
+
} else {
|
|
244
|
+
if (validation && !validation.validations) {
|
|
245
|
+
if (!_.isArray(validation)) {
|
|
246
|
+
validation = [validation];
|
|
247
|
+
}
|
|
248
|
+
validation = {
|
|
249
|
+
validations: validation
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
validator = validatorFactory(validation);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
return this;
|
|
257
|
+
},
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Resets the widget to the default validators
|
|
261
|
+
* @returns {widgetForm}
|
|
262
|
+
*/
|
|
263
|
+
setDefaultValidators() {
|
|
264
|
+
// restore factory default validators
|
|
265
|
+
this.setValidator(this.getConfig().validator);
|
|
266
|
+
|
|
267
|
+
// then apply provider default validators
|
|
268
|
+
delegate('setDefaultValidators');
|
|
269
|
+
|
|
270
|
+
return this;
|
|
271
|
+
},
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Resets the widget to its default value
|
|
275
|
+
* @returns {widgetForm}
|
|
276
|
+
*/
|
|
277
|
+
reset() {
|
|
278
|
+
delegate('reset');
|
|
279
|
+
setInvalidState(false);
|
|
280
|
+
return this;
|
|
281
|
+
},
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Validates the widget
|
|
285
|
+
* @returns {Promise}
|
|
286
|
+
*/
|
|
287
|
+
validate() {
|
|
288
|
+
return this.getValidator()
|
|
289
|
+
.validate(this.getRawValue())
|
|
290
|
+
.then(res => {
|
|
291
|
+
setInvalidState(false);
|
|
292
|
+
return res;
|
|
293
|
+
})
|
|
294
|
+
.catch(err => {
|
|
295
|
+
setInvalidState(true, err);
|
|
296
|
+
return Promise.reject(err);
|
|
297
|
+
});
|
|
298
|
+
},
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Gets access to the actual form element
|
|
302
|
+
* @returns {jQuery|null}
|
|
303
|
+
*/
|
|
304
|
+
getWidgetElement() {
|
|
305
|
+
if (this.is('rendered')) {
|
|
306
|
+
return delegate('getWidgetElement');
|
|
307
|
+
}
|
|
308
|
+
return null;
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
widget = componentFactory(widgetApi, defaults)
|
|
313
|
+
.setTemplate(provider.template || widgetTpl)
|
|
314
|
+
.on('init', function onWidgetInit() {
|
|
315
|
+
this.setDefaultValidators();
|
|
316
|
+
|
|
317
|
+
// auto render on init (defer the call to give a chance to the init event to be completed before)
|
|
318
|
+
_.defer(() => this.render(container));
|
|
319
|
+
})
|
|
320
|
+
.on('render', function onWidgetRender() {
|
|
321
|
+
// reflect the type of widget
|
|
322
|
+
this.setState(this.getConfig().widgetType, true);
|
|
323
|
+
|
|
324
|
+
// react to data change
|
|
325
|
+
this.getWidgetElement().on('change blur', () => {
|
|
326
|
+
const value = this.getValue();
|
|
327
|
+
if (value !== this.getConfig().value) {
|
|
328
|
+
this.getConfig().value = value;
|
|
329
|
+
notifyChange();
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* @event ready
|
|
335
|
+
*/
|
|
336
|
+
validatorRenderer = validatorRendererFactory(this.getElement())
|
|
337
|
+
.spread(this, 'error ready');
|
|
338
|
+
})
|
|
339
|
+
.on('disable', function onWidgetDisable() {
|
|
340
|
+
if (this.is('rendered')) {
|
|
341
|
+
this.getWidgetElement().prop('disabled', true);
|
|
342
|
+
}
|
|
343
|
+
})
|
|
344
|
+
.on('enable', function onWidgetEnable() {
|
|
345
|
+
if (this.is('rendered')) {
|
|
346
|
+
this.getWidgetElement().prop('disabled', false);
|
|
347
|
+
}
|
|
348
|
+
})
|
|
349
|
+
.on('destroy', function onWidgetDestroy() {
|
|
350
|
+
if (validatorRenderer) {
|
|
351
|
+
validatorRenderer.destroy();
|
|
352
|
+
validatorRenderer = null;
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
if (config) {
|
|
357
|
+
// the range must be an array
|
|
358
|
+
config.range = forceArray(config.range);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
_.defer(() => widget.init(provider.init.call(widget, config || {}) || config));
|
|
362
|
+
|
|
363
|
+
return widget;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// expose a partial that can be used by every form widget to inject the label markup
|
|
367
|
+
Handlebars.registerPartial('ui-form-widget-label', labelTpl);
|
|
368
|
+
|
|
369
|
+
// the widgetFactory is also a providers registry
|
|
370
|
+
providerRegistry(widgetFactory);
|
|
371
|
+
|
|
372
|
+
export default widgetFactory;
|