@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/datalist.js
CHANGED
|
@@ -1,500 +1,500 @@
|
|
|
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 (original work) Open Assessment Technologies SA ;
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* @author Jean-Sébastien Conan <jean-sebastien.conan@vesperiagroup.com>
|
|
21
|
-
*/
|
|
22
|
-
import $ from 'jquery';
|
|
23
|
-
import _ from 'lodash';
|
|
24
|
-
import __ from 'i18n';
|
|
25
|
-
import component from 'ui/component';
|
|
26
|
-
import mainTpl from 'ui/datalist/tpl/main';
|
|
27
|
-
import listTpl from 'ui/datalist/tpl/list';
|
|
28
|
-
import 'ui/datalist/css/datalist.css';
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Some default values
|
|
32
|
-
* @type {Object}
|
|
33
|
-
* @private
|
|
34
|
-
*/
|
|
35
|
-
var _defaults = {
|
|
36
|
-
keyName: 'id',
|
|
37
|
-
labelName: 'label',
|
|
38
|
-
labelText: __('Label'),
|
|
39
|
-
title: false,
|
|
40
|
-
textNumber: __('Available'),
|
|
41
|
-
textEmpty: __('There is nothing to list!'),
|
|
42
|
-
textLoading: __('Loading'),
|
|
43
|
-
selectable: false
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Defines a data list
|
|
48
|
-
* @type {Object}
|
|
49
|
-
*/
|
|
50
|
-
var datalist = {
|
|
51
|
-
/**
|
|
52
|
-
* Updates the list
|
|
53
|
-
* @param {Array} data
|
|
54
|
-
* @returns {listBox}
|
|
55
|
-
* @fires datalist#update
|
|
56
|
-
*/
|
|
57
|
-
update: function update(data) {
|
|
58
|
-
var self = this;
|
|
59
|
-
var controls = this.controls || {};
|
|
60
|
-
var config = this.config || {};
|
|
61
|
-
var $list = controls.$list;
|
|
62
|
-
var $numberValue = controls.$numberValue;
|
|
63
|
-
var renderData = {
|
|
64
|
-
selectable: config.selectable,
|
|
65
|
-
actions: config.actions,
|
|
66
|
-
list: []
|
|
67
|
-
};
|
|
68
|
-
var list = renderData.list;
|
|
69
|
-
var count;
|
|
70
|
-
|
|
71
|
-
// disable the list while updating it
|
|
72
|
-
this.setLoading(true);
|
|
73
|
-
|
|
74
|
-
// if the update method is called before rendering, or on a destroyed component, there is no placeholder to fill...
|
|
75
|
-
if ($list) {
|
|
76
|
-
// be sure to remove previous list before render the new data
|
|
77
|
-
$list.empty();
|
|
78
|
-
|
|
79
|
-
if (data && data.length) {
|
|
80
|
-
// format the data to render
|
|
81
|
-
_.forEach(data, function(line) {
|
|
82
|
-
// extract the identifier and the label according to the config
|
|
83
|
-
var id = line[config.keyName];
|
|
84
|
-
var label = line[config.labelName];
|
|
85
|
-
|
|
86
|
-
// optional custom renderer for the label
|
|
87
|
-
if (_.isFunction(config.labelTransform)) {
|
|
88
|
-
label = config.labelTransform.call(self, label, line);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// the data to render only refer to id and identifier
|
|
92
|
-
list.push({
|
|
93
|
-
id: id,
|
|
94
|
-
label: label,
|
|
95
|
-
line: line // provide the original data for dynamic behavior like hidden actions
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
// render the data at the right placeholder
|
|
100
|
-
$list.append(listTpl(renderData));
|
|
101
|
-
|
|
102
|
-
// update the displayed counter
|
|
103
|
-
if ($numberValue) {
|
|
104
|
-
count = data.length;
|
|
105
|
-
|
|
106
|
-
// optional custom renderer for the counter
|
|
107
|
-
if (_.isFunction(config.countRenderer)) {
|
|
108
|
-
count = config.countRenderer.call(self, count);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
$numberValue.text(count);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// update the display status
|
|
115
|
-
this.setState('empty', false);
|
|
116
|
-
this.setState('loaded', true);
|
|
117
|
-
} else {
|
|
118
|
-
// nothing to display
|
|
119
|
-
this.setState('empty', true);
|
|
120
|
-
this.setState('loaded', false);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// update the selection of existing checkboxes
|
|
124
|
-
controls.$checkboxes = this.controls.$list.find('td.checkboxes input');
|
|
125
|
-
controls.$massAction.toggleClass('hidden', true);
|
|
126
|
-
if (this.pendingSelection) {
|
|
127
|
-
this.setSelection(this.pendingSelection);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* @event datalist#update
|
|
133
|
-
* @param {Array} data
|
|
134
|
-
*/
|
|
135
|
-
self.trigger('update', data);
|
|
136
|
-
|
|
137
|
-
// ok, the list is now ready, enable it
|
|
138
|
-
this.setLoading(false);
|
|
139
|
-
|
|
140
|
-
return this;
|
|
141
|
-
},
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Gets the current selection
|
|
145
|
-
* @returns {Array}
|
|
146
|
-
*/
|
|
147
|
-
getSelection: function getSelection() {
|
|
148
|
-
var $checkboxes = this.controls && this.controls.$checkboxes;
|
|
149
|
-
var selection = [];
|
|
150
|
-
|
|
151
|
-
if ($checkboxes) {
|
|
152
|
-
// extract the selection from the selected checkboxes
|
|
153
|
-
$checkboxes.filter(':checked').each(function() {
|
|
154
|
-
var id = $(this)
|
|
155
|
-
.closest('tr')
|
|
156
|
-
.data('id');
|
|
157
|
-
if (id) {
|
|
158
|
-
selection.push(id);
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
} else {
|
|
162
|
-
// the list may not already be rendered, but a selection may exist in pending state
|
|
163
|
-
if (this.pendingSelection) {
|
|
164
|
-
selection = this.pendingSelection;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
return selection;
|
|
168
|
-
},
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Sets the current selection
|
|
172
|
-
* @param {Array} selection
|
|
173
|
-
* @returns {datalist}
|
|
174
|
-
* @fires datalist#select
|
|
175
|
-
*/
|
|
176
|
-
setSelection: function setSelection(selection) {
|
|
177
|
-
var controls = this.controls || {};
|
|
178
|
-
var $list = controls.$list;
|
|
179
|
-
|
|
180
|
-
if ($list) {
|
|
181
|
-
// be sure to discard existing selection
|
|
182
|
-
controls.$checkboxes.prop('checked', false);
|
|
183
|
-
|
|
184
|
-
if (selection) {
|
|
185
|
-
// find each line and check it according to the provided selection
|
|
186
|
-
_.forEach(selection, function(id) {
|
|
187
|
-
$list.find('[data-id="' + id + '"] input[type="checkbox"]').prop('checked', true);
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// takes care of the new selection
|
|
192
|
-
this._onSelection();
|
|
193
|
-
|
|
194
|
-
// remove pending selection to avoid overwrite on next update
|
|
195
|
-
this.pendingSelection = null;
|
|
196
|
-
} else {
|
|
197
|
-
// keep selection ready for the next update
|
|
198
|
-
this.pendingSelection = selection;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
return this;
|
|
202
|
-
},
|
|
203
|
-
|
|
204
|
-
/**
|
|
205
|
-
* Called when a selection has been made
|
|
206
|
-
* @fires datalist#select
|
|
207
|
-
* @private
|
|
208
|
-
*/
|
|
209
|
-
_onSelection: function _onSelection() {
|
|
210
|
-
var controls = this.controls || {};
|
|
211
|
-
var $checkboxes = controls.$checkboxes;
|
|
212
|
-
var $checkAll = controls.$checkAll;
|
|
213
|
-
var $checked = $checkboxes.filter(':checked');
|
|
214
|
-
|
|
215
|
-
// update the checkAll button
|
|
216
|
-
if ($checked.length === $checkboxes.length) {
|
|
217
|
-
$checkAll.prop('checked', true);
|
|
218
|
-
} else {
|
|
219
|
-
$checkAll.prop('checked', false);
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// show/hide the mass actions tools
|
|
223
|
-
controls.$massAction.toggleClass('hidden', !$checked.length);
|
|
224
|
-
|
|
225
|
-
/**
|
|
226
|
-
* @event datalist#select
|
|
227
|
-
* @param {Array} selection
|
|
228
|
-
*/
|
|
229
|
-
this.trigger('select', this.getSelection());
|
|
230
|
-
},
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
* Sets the loading state
|
|
234
|
-
* @param {Boolean} flag
|
|
235
|
-
* @returns {listBox}
|
|
236
|
-
*/
|
|
237
|
-
setLoading: function setLoading(flag) {
|
|
238
|
-
if (flag) {
|
|
239
|
-
this.setState('loaded', false);
|
|
240
|
-
}
|
|
241
|
-
return this.setState('loading', flag);
|
|
242
|
-
},
|
|
243
|
-
|
|
244
|
-
/**
|
|
245
|
-
* Sets the title of the list.
|
|
246
|
-
* @param {String|Boolean} title - The text to set. If the value is false no title is displayed
|
|
247
|
-
* @returns {listBox}
|
|
248
|
-
*/
|
|
249
|
-
setTitle: function setTitle(title) {
|
|
250
|
-
var $title = this.controls && this.controls.$title;
|
|
251
|
-
this.config.title = title;
|
|
252
|
-
if ($title) {
|
|
253
|
-
if (false === title) {
|
|
254
|
-
$title.addClass('hidden');
|
|
255
|
-
} else {
|
|
256
|
-
$title.html(title).removeClass('hidden');
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
return this;
|
|
261
|
-
},
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* Sets the label of the number of lines.
|
|
265
|
-
* @param {String|Boolean} text - The text to set. If the value is false no label is displayed
|
|
266
|
-
* @returns {listBox}
|
|
267
|
-
*/
|
|
268
|
-
setTextNumber: function setTextNumber(text) {
|
|
269
|
-
var $numberLabel = this.controls && this.controls.$numberLabel;
|
|
270
|
-
var $textAvailable = this.controls && this.controls.$textAvailable;
|
|
271
|
-
this.config.textNumber = text;
|
|
272
|
-
if ($numberLabel) {
|
|
273
|
-
if (text !== false) {
|
|
274
|
-
$numberLabel.html(text).removeClass('hidden');
|
|
275
|
-
} else if ($textAvailable) {
|
|
276
|
-
$textAvailable.addClass('hidden');
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
return this;
|
|
281
|
-
},
|
|
282
|
-
|
|
283
|
-
/**
|
|
284
|
-
* Sets the label displayed when there no data available.
|
|
285
|
-
* @param {String|Boolean} text - The text to set. If the value is false no label is displayed
|
|
286
|
-
* @returns {listBox}
|
|
287
|
-
*/
|
|
288
|
-
setTextEmpty: function setTextEmpty(text) {
|
|
289
|
-
var $textEmpty = this.controls && this.controls.$textEmpty;
|
|
290
|
-
this.config.textEmpty = text;
|
|
291
|
-
if ($textEmpty) {
|
|
292
|
-
if (false === text) {
|
|
293
|
-
$textEmpty.addClass('hidden');
|
|
294
|
-
} else {
|
|
295
|
-
$textEmpty.html(text).removeClass('hidden');
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
return this;
|
|
300
|
-
},
|
|
301
|
-
|
|
302
|
-
/**
|
|
303
|
-
* Sets the label displayed when the list is loading.
|
|
304
|
-
* @param {String|Boolean} text - The text to set. If the value is false no label is displayed
|
|
305
|
-
* @returns {listBox}
|
|
306
|
-
*/
|
|
307
|
-
setTextLoading: function setTextLoading(text) {
|
|
308
|
-
var $textLoading = this.controls && this.controls.$textLoading;
|
|
309
|
-
this.config.textLoading = text;
|
|
310
|
-
if ($textLoading) {
|
|
311
|
-
if (false === text) {
|
|
312
|
-
$textLoading.addClass('hidden');
|
|
313
|
-
} else {
|
|
314
|
-
$textLoading.html(text).removeClass('hidden');
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
return this;
|
|
319
|
-
}
|
|
320
|
-
};
|
|
321
|
-
|
|
322
|
-
/**
|
|
323
|
-
* Builds an instance of the datalist component
|
|
324
|
-
* @param {Object} config
|
|
325
|
-
* @param {String} [config.keyName] - Sets the name of the attribute containing the identifier for each data line (default: 'id')
|
|
326
|
-
* @param {String} [config.labelName] - Sets the name of the attribute containing the label for each data line (default: 'label')
|
|
327
|
-
* @param {String|Boolean} [config.labelText] - Sets the displayed title for the column containing the labels. If the value is false no title is displayed (default: 'Label')
|
|
328
|
-
* @param {String|Boolean} [config.title] - Sets the title of the list. If the value is false no title is displayed (default: false)
|
|
329
|
-
* @param {String|Boolean} [config.textNumber] - Sets the label of the number of data lines. If the value is false no label is displayed (default: 'Available')
|
|
330
|
-
* @param {String|Boolean} [config.textEmpty] - Sets the label displayed when there no data available. If the value is false no label is displayed (default: 'There is nothing to list!')
|
|
331
|
-
* @param {String|Boolean} [config.textLoading] - Sets the label displayed when the list is loading. If the value is false no label is displayed (default: 'Loading')
|
|
332
|
-
* @param {jQuery|HTMLElement|String} [config.renderTo] - An optional container in which renders the component
|
|
333
|
-
* @param {Boolean} [config.selectable] - Append a checkbox on each displayed line to allow selection (default: false)
|
|
334
|
-
* @param {Boolean} [config.replace] - When the component is appended to its container, clears the place before
|
|
335
|
-
* @param {Function} [config.labelTransform] - Optional renderer applied on each displayed label.
|
|
336
|
-
* @param {Function} [config.countRenderer] - An optional callback applied on the list count before display
|
|
337
|
-
* @param {Array} [config.tools] - An optional list of buttons to add on top of the list. Each buttons provides a mass action on the selected lines. If selectable is not enabled, all lines are selected.
|
|
338
|
-
* @param {Array} [config.actions] - An optional list of buttons to add on each line.
|
|
339
|
-
* @param {Array} [data] - The data to display
|
|
340
|
-
* @returns {datalist}
|
|
341
|
-
*
|
|
342
|
-
* @event init - Emitted when the component is initialized
|
|
343
|
-
* @event destroy - Emitted when the component is destroying
|
|
344
|
-
* @event render - Emitted when the component is rendered
|
|
345
|
-
* @event update - Emitted when the component is updated
|
|
346
|
-
* @event tool - Emitted when a tool button is clicked
|
|
347
|
-
* @event action - Emitted when an action button is clicked
|
|
348
|
-
* @event select - Emitted when a selection is made
|
|
349
|
-
* @event show - Emitted when the component is shown
|
|
350
|
-
* @event hide - Emitted when the component is hidden
|
|
351
|
-
* @event enable - Emitted when the component is enabled
|
|
352
|
-
* @event disable - Emitted when the component is disabled
|
|
353
|
-
* @event template - Emitted when the template is changed
|
|
354
|
-
*/
|
|
355
|
-
function datalistFactory(config, data) {
|
|
356
|
-
var initConfig = config || {};
|
|
357
|
-
var actions = {};
|
|
358
|
-
var tools = {};
|
|
359
|
-
|
|
360
|
-
// build a map of the tools if any
|
|
361
|
-
if (initConfig.tools) {
|
|
362
|
-
_.forEach(initConfig.tools, function(tool) {
|
|
363
|
-
tools[tool.id] = tool;
|
|
364
|
-
});
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
// build a map of the lines actions if any
|
|
368
|
-
if (initConfig.actions) {
|
|
369
|
-
_.forEach(initConfig.actions, function(action) {
|
|
370
|
-
actions[action.id] = action;
|
|
371
|
-
});
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
return (
|
|
375
|
-
component(datalist, _defaults)
|
|
376
|
-
.setTemplate(mainTpl)
|
|
377
|
-
|
|
378
|
-
// uninstalls the component
|
|
379
|
-
.on('destroy', function() {
|
|
380
|
-
this.controls = null;
|
|
381
|
-
this.pendingSelection = null;
|
|
382
|
-
})
|
|
383
|
-
|
|
384
|
-
// renders the component
|
|
385
|
-
.on('render', function() {
|
|
386
|
-
var self = this;
|
|
387
|
-
|
|
388
|
-
// get access to all needed placeholders
|
|
389
|
-
this.controls = {
|
|
390
|
-
$title: this.$component.find('h1'),
|
|
391
|
-
$textEmpty: this.$component.find('.empty-list'),
|
|
392
|
-
$textAvailable: this.$component.find('.available-list'),
|
|
393
|
-
$textLoading: this.$component.find('.loading span'),
|
|
394
|
-
$numberLabel: this.$component.find('.available-list .label'),
|
|
395
|
-
$numberValue: this.$component.find('.available-list .count'),
|
|
396
|
-
$actionBar: this.$component.find('.list .action-bar'),
|
|
397
|
-
$massAction: this.$component.find('.list .mass-action'),
|
|
398
|
-
$checkAll: this.$component.find('.list th.checkboxes input'),
|
|
399
|
-
$checkboxes: this.$component.find('.list td.checkboxes input'),
|
|
400
|
-
$list: this.$component.find('.list tbody')
|
|
401
|
-
};
|
|
402
|
-
|
|
403
|
-
// take care of tools buttons
|
|
404
|
-
this.controls.$actionBar.on('click', 'button', function(e) {
|
|
405
|
-
var $this = $(this);
|
|
406
|
-
var buttonId = $this.closest('button').data('control');
|
|
407
|
-
var button = tools[buttonId];
|
|
408
|
-
var selection = self.getSelection();
|
|
409
|
-
|
|
410
|
-
e.preventDefault();
|
|
411
|
-
|
|
412
|
-
if (button && button.action) {
|
|
413
|
-
button.action.call(self, selection, buttonId);
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
/**
|
|
417
|
-
* @event datalist#tool
|
|
418
|
-
* @param {Array} selection
|
|
419
|
-
* @param {String} buttonId
|
|
420
|
-
*/
|
|
421
|
-
self.trigger('tool', selection, buttonId);
|
|
422
|
-
});
|
|
423
|
-
|
|
424
|
-
// take care of actions buttons
|
|
425
|
-
this.controls.$list.on('click', 'button', function(e) {
|
|
426
|
-
var $this = $(this);
|
|
427
|
-
var lineId = $this.closest('tr').data('id');
|
|
428
|
-
var buttonId = $this.closest('button').data('control');
|
|
429
|
-
var button = actions[buttonId];
|
|
430
|
-
|
|
431
|
-
e.preventDefault();
|
|
432
|
-
|
|
433
|
-
if (button && button.action) {
|
|
434
|
-
button.action.call(self, lineId, buttonId);
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
/**
|
|
438
|
-
* @event datalist#action
|
|
439
|
-
* @param {String} lineId
|
|
440
|
-
* @param {String} buttonId
|
|
441
|
-
*/
|
|
442
|
-
self.trigger('action', lineId, buttonId);
|
|
443
|
-
});
|
|
444
|
-
|
|
445
|
-
// take care of clicks on labels
|
|
446
|
-
this.setState('selectable', this.config.selectable);
|
|
447
|
-
this.controls.$list.on('click', 'td.label', function() {
|
|
448
|
-
var $checkbox;
|
|
449
|
-
|
|
450
|
-
if (self.config.selectable) {
|
|
451
|
-
$checkbox = $(this)
|
|
452
|
-
.closest('tr')
|
|
453
|
-
.find('input[type="checkbox"]');
|
|
454
|
-
|
|
455
|
-
// toggle the line selection
|
|
456
|
-
if ($checkbox.prop('checked')) {
|
|
457
|
-
$checkbox.prop('checked', false);
|
|
458
|
-
} else {
|
|
459
|
-
$checkbox.prop('checked', true);
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
// takes care of the new selection
|
|
463
|
-
self._onSelection();
|
|
464
|
-
}
|
|
465
|
-
});
|
|
466
|
-
|
|
467
|
-
// take care of clicks on checkboxes
|
|
468
|
-
this.controls.$list.on('click', 'input[type="checkbox"]', function() {
|
|
469
|
-
// just takes care of the new selection
|
|
470
|
-
self._onSelection();
|
|
471
|
-
});
|
|
472
|
-
|
|
473
|
-
// check/uncheck all checkboxes
|
|
474
|
-
this.controls.$checkAll.on('click', function() {
|
|
475
|
-
var $checkboxes = self.controls.$checkboxes;
|
|
476
|
-
|
|
477
|
-
// select/unselect all lines
|
|
478
|
-
if (this.checked) {
|
|
479
|
-
$checkboxes.prop('checked', true);
|
|
480
|
-
} else {
|
|
481
|
-
$checkboxes.prop('checked', false);
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
// takes care of the new selection
|
|
485
|
-
self._onSelection();
|
|
486
|
-
});
|
|
487
|
-
|
|
488
|
-
// data already available ?
|
|
489
|
-
if (data) {
|
|
490
|
-
this.update(data);
|
|
491
|
-
} else {
|
|
492
|
-
this.setState('empty', true);
|
|
493
|
-
this.setState('loaded', false);
|
|
494
|
-
}
|
|
495
|
-
})
|
|
496
|
-
.init(initConfig)
|
|
497
|
-
);
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
export default datalistFactory;
|
|
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 (original work) Open Assessment Technologies SA ;
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @author Jean-Sébastien Conan <jean-sebastien.conan@vesperiagroup.com>
|
|
21
|
+
*/
|
|
22
|
+
import $ from 'jquery';
|
|
23
|
+
import _ from 'lodash';
|
|
24
|
+
import __ from 'i18n';
|
|
25
|
+
import component from 'ui/component';
|
|
26
|
+
import mainTpl from 'ui/datalist/tpl/main';
|
|
27
|
+
import listTpl from 'ui/datalist/tpl/list';
|
|
28
|
+
import 'ui/datalist/css/datalist.css';
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Some default values
|
|
32
|
+
* @type {Object}
|
|
33
|
+
* @private
|
|
34
|
+
*/
|
|
35
|
+
var _defaults = {
|
|
36
|
+
keyName: 'id',
|
|
37
|
+
labelName: 'label',
|
|
38
|
+
labelText: __('Label'),
|
|
39
|
+
title: false,
|
|
40
|
+
textNumber: __('Available'),
|
|
41
|
+
textEmpty: __('There is nothing to list!'),
|
|
42
|
+
textLoading: __('Loading'),
|
|
43
|
+
selectable: false
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Defines a data list
|
|
48
|
+
* @type {Object}
|
|
49
|
+
*/
|
|
50
|
+
var datalist = {
|
|
51
|
+
/**
|
|
52
|
+
* Updates the list
|
|
53
|
+
* @param {Array} data
|
|
54
|
+
* @returns {listBox}
|
|
55
|
+
* @fires datalist#update
|
|
56
|
+
*/
|
|
57
|
+
update: function update(data) {
|
|
58
|
+
var self = this;
|
|
59
|
+
var controls = this.controls || {};
|
|
60
|
+
var config = this.config || {};
|
|
61
|
+
var $list = controls.$list;
|
|
62
|
+
var $numberValue = controls.$numberValue;
|
|
63
|
+
var renderData = {
|
|
64
|
+
selectable: config.selectable,
|
|
65
|
+
actions: config.actions,
|
|
66
|
+
list: []
|
|
67
|
+
};
|
|
68
|
+
var list = renderData.list;
|
|
69
|
+
var count;
|
|
70
|
+
|
|
71
|
+
// disable the list while updating it
|
|
72
|
+
this.setLoading(true);
|
|
73
|
+
|
|
74
|
+
// if the update method is called before rendering, or on a destroyed component, there is no placeholder to fill...
|
|
75
|
+
if ($list) {
|
|
76
|
+
// be sure to remove previous list before render the new data
|
|
77
|
+
$list.empty();
|
|
78
|
+
|
|
79
|
+
if (data && data.length) {
|
|
80
|
+
// format the data to render
|
|
81
|
+
_.forEach(data, function(line) {
|
|
82
|
+
// extract the identifier and the label according to the config
|
|
83
|
+
var id = line[config.keyName];
|
|
84
|
+
var label = line[config.labelName];
|
|
85
|
+
|
|
86
|
+
// optional custom renderer for the label
|
|
87
|
+
if (_.isFunction(config.labelTransform)) {
|
|
88
|
+
label = config.labelTransform.call(self, label, line);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// the data to render only refer to id and identifier
|
|
92
|
+
list.push({
|
|
93
|
+
id: id,
|
|
94
|
+
label: label,
|
|
95
|
+
line: line // provide the original data for dynamic behavior like hidden actions
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
// render the data at the right placeholder
|
|
100
|
+
$list.append(listTpl(renderData));
|
|
101
|
+
|
|
102
|
+
// update the displayed counter
|
|
103
|
+
if ($numberValue) {
|
|
104
|
+
count = data.length;
|
|
105
|
+
|
|
106
|
+
// optional custom renderer for the counter
|
|
107
|
+
if (_.isFunction(config.countRenderer)) {
|
|
108
|
+
count = config.countRenderer.call(self, count);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
$numberValue.text(count);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// update the display status
|
|
115
|
+
this.setState('empty', false);
|
|
116
|
+
this.setState('loaded', true);
|
|
117
|
+
} else {
|
|
118
|
+
// nothing to display
|
|
119
|
+
this.setState('empty', true);
|
|
120
|
+
this.setState('loaded', false);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// update the selection of existing checkboxes
|
|
124
|
+
controls.$checkboxes = this.controls.$list.find('td.checkboxes input');
|
|
125
|
+
controls.$massAction.toggleClass('hidden', true);
|
|
126
|
+
if (this.pendingSelection) {
|
|
127
|
+
this.setSelection(this.pendingSelection);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* @event datalist#update
|
|
133
|
+
* @param {Array} data
|
|
134
|
+
*/
|
|
135
|
+
self.trigger('update', data);
|
|
136
|
+
|
|
137
|
+
// ok, the list is now ready, enable it
|
|
138
|
+
this.setLoading(false);
|
|
139
|
+
|
|
140
|
+
return this;
|
|
141
|
+
},
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Gets the current selection
|
|
145
|
+
* @returns {Array}
|
|
146
|
+
*/
|
|
147
|
+
getSelection: function getSelection() {
|
|
148
|
+
var $checkboxes = this.controls && this.controls.$checkboxes;
|
|
149
|
+
var selection = [];
|
|
150
|
+
|
|
151
|
+
if ($checkboxes) {
|
|
152
|
+
// extract the selection from the selected checkboxes
|
|
153
|
+
$checkboxes.filter(':checked').each(function() {
|
|
154
|
+
var id = $(this)
|
|
155
|
+
.closest('tr')
|
|
156
|
+
.data('id');
|
|
157
|
+
if (id) {
|
|
158
|
+
selection.push(id);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
} else {
|
|
162
|
+
// the list may not already be rendered, but a selection may exist in pending state
|
|
163
|
+
if (this.pendingSelection) {
|
|
164
|
+
selection = this.pendingSelection;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return selection;
|
|
168
|
+
},
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Sets the current selection
|
|
172
|
+
* @param {Array} selection
|
|
173
|
+
* @returns {datalist}
|
|
174
|
+
* @fires datalist#select
|
|
175
|
+
*/
|
|
176
|
+
setSelection: function setSelection(selection) {
|
|
177
|
+
var controls = this.controls || {};
|
|
178
|
+
var $list = controls.$list;
|
|
179
|
+
|
|
180
|
+
if ($list) {
|
|
181
|
+
// be sure to discard existing selection
|
|
182
|
+
controls.$checkboxes.prop('checked', false);
|
|
183
|
+
|
|
184
|
+
if (selection) {
|
|
185
|
+
// find each line and check it according to the provided selection
|
|
186
|
+
_.forEach(selection, function(id) {
|
|
187
|
+
$list.find('[data-id="' + id + '"] input[type="checkbox"]').prop('checked', true);
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// takes care of the new selection
|
|
192
|
+
this._onSelection();
|
|
193
|
+
|
|
194
|
+
// remove pending selection to avoid overwrite on next update
|
|
195
|
+
this.pendingSelection = null;
|
|
196
|
+
} else {
|
|
197
|
+
// keep selection ready for the next update
|
|
198
|
+
this.pendingSelection = selection;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return this;
|
|
202
|
+
},
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Called when a selection has been made
|
|
206
|
+
* @fires datalist#select
|
|
207
|
+
* @private
|
|
208
|
+
*/
|
|
209
|
+
_onSelection: function _onSelection() {
|
|
210
|
+
var controls = this.controls || {};
|
|
211
|
+
var $checkboxes = controls.$checkboxes;
|
|
212
|
+
var $checkAll = controls.$checkAll;
|
|
213
|
+
var $checked = $checkboxes.filter(':checked');
|
|
214
|
+
|
|
215
|
+
// update the checkAll button
|
|
216
|
+
if ($checked.length === $checkboxes.length) {
|
|
217
|
+
$checkAll.prop('checked', true);
|
|
218
|
+
} else {
|
|
219
|
+
$checkAll.prop('checked', false);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// show/hide the mass actions tools
|
|
223
|
+
controls.$massAction.toggleClass('hidden', !$checked.length);
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* @event datalist#select
|
|
227
|
+
* @param {Array} selection
|
|
228
|
+
*/
|
|
229
|
+
this.trigger('select', this.getSelection());
|
|
230
|
+
},
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Sets the loading state
|
|
234
|
+
* @param {Boolean} flag
|
|
235
|
+
* @returns {listBox}
|
|
236
|
+
*/
|
|
237
|
+
setLoading: function setLoading(flag) {
|
|
238
|
+
if (flag) {
|
|
239
|
+
this.setState('loaded', false);
|
|
240
|
+
}
|
|
241
|
+
return this.setState('loading', flag);
|
|
242
|
+
},
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Sets the title of the list.
|
|
246
|
+
* @param {String|Boolean} title - The text to set. If the value is false no title is displayed
|
|
247
|
+
* @returns {listBox}
|
|
248
|
+
*/
|
|
249
|
+
setTitle: function setTitle(title) {
|
|
250
|
+
var $title = this.controls && this.controls.$title;
|
|
251
|
+
this.config.title = title;
|
|
252
|
+
if ($title) {
|
|
253
|
+
if (false === title) {
|
|
254
|
+
$title.addClass('hidden');
|
|
255
|
+
} else {
|
|
256
|
+
$title.html(title).removeClass('hidden');
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
return this;
|
|
261
|
+
},
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Sets the label of the number of lines.
|
|
265
|
+
* @param {String|Boolean} text - The text to set. If the value is false no label is displayed
|
|
266
|
+
* @returns {listBox}
|
|
267
|
+
*/
|
|
268
|
+
setTextNumber: function setTextNumber(text) {
|
|
269
|
+
var $numberLabel = this.controls && this.controls.$numberLabel;
|
|
270
|
+
var $textAvailable = this.controls && this.controls.$textAvailable;
|
|
271
|
+
this.config.textNumber = text;
|
|
272
|
+
if ($numberLabel) {
|
|
273
|
+
if (text !== false) {
|
|
274
|
+
$numberLabel.html(text).removeClass('hidden');
|
|
275
|
+
} else if ($textAvailable) {
|
|
276
|
+
$textAvailable.addClass('hidden');
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
return this;
|
|
281
|
+
},
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Sets the label displayed when there no data available.
|
|
285
|
+
* @param {String|Boolean} text - The text to set. If the value is false no label is displayed
|
|
286
|
+
* @returns {listBox}
|
|
287
|
+
*/
|
|
288
|
+
setTextEmpty: function setTextEmpty(text) {
|
|
289
|
+
var $textEmpty = this.controls && this.controls.$textEmpty;
|
|
290
|
+
this.config.textEmpty = text;
|
|
291
|
+
if ($textEmpty) {
|
|
292
|
+
if (false === text) {
|
|
293
|
+
$textEmpty.addClass('hidden');
|
|
294
|
+
} else {
|
|
295
|
+
$textEmpty.html(text).removeClass('hidden');
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
return this;
|
|
300
|
+
},
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Sets the label displayed when the list is loading.
|
|
304
|
+
* @param {String|Boolean} text - The text to set. If the value is false no label is displayed
|
|
305
|
+
* @returns {listBox}
|
|
306
|
+
*/
|
|
307
|
+
setTextLoading: function setTextLoading(text) {
|
|
308
|
+
var $textLoading = this.controls && this.controls.$textLoading;
|
|
309
|
+
this.config.textLoading = text;
|
|
310
|
+
if ($textLoading) {
|
|
311
|
+
if (false === text) {
|
|
312
|
+
$textLoading.addClass('hidden');
|
|
313
|
+
} else {
|
|
314
|
+
$textLoading.html(text).removeClass('hidden');
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
return this;
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Builds an instance of the datalist component
|
|
324
|
+
* @param {Object} config
|
|
325
|
+
* @param {String} [config.keyName] - Sets the name of the attribute containing the identifier for each data line (default: 'id')
|
|
326
|
+
* @param {String} [config.labelName] - Sets the name of the attribute containing the label for each data line (default: 'label')
|
|
327
|
+
* @param {String|Boolean} [config.labelText] - Sets the displayed title for the column containing the labels. If the value is false no title is displayed (default: 'Label')
|
|
328
|
+
* @param {String|Boolean} [config.title] - Sets the title of the list. If the value is false no title is displayed (default: false)
|
|
329
|
+
* @param {String|Boolean} [config.textNumber] - Sets the label of the number of data lines. If the value is false no label is displayed (default: 'Available')
|
|
330
|
+
* @param {String|Boolean} [config.textEmpty] - Sets the label displayed when there no data available. If the value is false no label is displayed (default: 'There is nothing to list!')
|
|
331
|
+
* @param {String|Boolean} [config.textLoading] - Sets the label displayed when the list is loading. If the value is false no label is displayed (default: 'Loading')
|
|
332
|
+
* @param {jQuery|HTMLElement|String} [config.renderTo] - An optional container in which renders the component
|
|
333
|
+
* @param {Boolean} [config.selectable] - Append a checkbox on each displayed line to allow selection (default: false)
|
|
334
|
+
* @param {Boolean} [config.replace] - When the component is appended to its container, clears the place before
|
|
335
|
+
* @param {Function} [config.labelTransform] - Optional renderer applied on each displayed label.
|
|
336
|
+
* @param {Function} [config.countRenderer] - An optional callback applied on the list count before display
|
|
337
|
+
* @param {Array} [config.tools] - An optional list of buttons to add on top of the list. Each buttons provides a mass action on the selected lines. If selectable is not enabled, all lines are selected.
|
|
338
|
+
* @param {Array} [config.actions] - An optional list of buttons to add on each line.
|
|
339
|
+
* @param {Array} [data] - The data to display
|
|
340
|
+
* @returns {datalist}
|
|
341
|
+
*
|
|
342
|
+
* @event init - Emitted when the component is initialized
|
|
343
|
+
* @event destroy - Emitted when the component is destroying
|
|
344
|
+
* @event render - Emitted when the component is rendered
|
|
345
|
+
* @event update - Emitted when the component is updated
|
|
346
|
+
* @event tool - Emitted when a tool button is clicked
|
|
347
|
+
* @event action - Emitted when an action button is clicked
|
|
348
|
+
* @event select - Emitted when a selection is made
|
|
349
|
+
* @event show - Emitted when the component is shown
|
|
350
|
+
* @event hide - Emitted when the component is hidden
|
|
351
|
+
* @event enable - Emitted when the component is enabled
|
|
352
|
+
* @event disable - Emitted when the component is disabled
|
|
353
|
+
* @event template - Emitted when the template is changed
|
|
354
|
+
*/
|
|
355
|
+
function datalistFactory(config, data) {
|
|
356
|
+
var initConfig = config || {};
|
|
357
|
+
var actions = {};
|
|
358
|
+
var tools = {};
|
|
359
|
+
|
|
360
|
+
// build a map of the tools if any
|
|
361
|
+
if (initConfig.tools) {
|
|
362
|
+
_.forEach(initConfig.tools, function(tool) {
|
|
363
|
+
tools[tool.id] = tool;
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
// build a map of the lines actions if any
|
|
368
|
+
if (initConfig.actions) {
|
|
369
|
+
_.forEach(initConfig.actions, function(action) {
|
|
370
|
+
actions[action.id] = action;
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
return (
|
|
375
|
+
component(datalist, _defaults)
|
|
376
|
+
.setTemplate(mainTpl)
|
|
377
|
+
|
|
378
|
+
// uninstalls the component
|
|
379
|
+
.on('destroy', function() {
|
|
380
|
+
this.controls = null;
|
|
381
|
+
this.pendingSelection = null;
|
|
382
|
+
})
|
|
383
|
+
|
|
384
|
+
// renders the component
|
|
385
|
+
.on('render', function() {
|
|
386
|
+
var self = this;
|
|
387
|
+
|
|
388
|
+
// get access to all needed placeholders
|
|
389
|
+
this.controls = {
|
|
390
|
+
$title: this.$component.find('h1'),
|
|
391
|
+
$textEmpty: this.$component.find('.empty-list'),
|
|
392
|
+
$textAvailable: this.$component.find('.available-list'),
|
|
393
|
+
$textLoading: this.$component.find('.loading span'),
|
|
394
|
+
$numberLabel: this.$component.find('.available-list .label'),
|
|
395
|
+
$numberValue: this.$component.find('.available-list .count'),
|
|
396
|
+
$actionBar: this.$component.find('.list .action-bar'),
|
|
397
|
+
$massAction: this.$component.find('.list .mass-action'),
|
|
398
|
+
$checkAll: this.$component.find('.list th.checkboxes input'),
|
|
399
|
+
$checkboxes: this.$component.find('.list td.checkboxes input'),
|
|
400
|
+
$list: this.$component.find('.list tbody')
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
// take care of tools buttons
|
|
404
|
+
this.controls.$actionBar.on('click', 'button', function(e) {
|
|
405
|
+
var $this = $(this);
|
|
406
|
+
var buttonId = $this.closest('button').data('control');
|
|
407
|
+
var button = tools[buttonId];
|
|
408
|
+
var selection = self.getSelection();
|
|
409
|
+
|
|
410
|
+
e.preventDefault();
|
|
411
|
+
|
|
412
|
+
if (button && button.action) {
|
|
413
|
+
button.action.call(self, selection, buttonId);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* @event datalist#tool
|
|
418
|
+
* @param {Array} selection
|
|
419
|
+
* @param {String} buttonId
|
|
420
|
+
*/
|
|
421
|
+
self.trigger('tool', selection, buttonId);
|
|
422
|
+
});
|
|
423
|
+
|
|
424
|
+
// take care of actions buttons
|
|
425
|
+
this.controls.$list.on('click', 'button', function(e) {
|
|
426
|
+
var $this = $(this);
|
|
427
|
+
var lineId = $this.closest('tr').data('id');
|
|
428
|
+
var buttonId = $this.closest('button').data('control');
|
|
429
|
+
var button = actions[buttonId];
|
|
430
|
+
|
|
431
|
+
e.preventDefault();
|
|
432
|
+
|
|
433
|
+
if (button && button.action) {
|
|
434
|
+
button.action.call(self, lineId, buttonId);
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/**
|
|
438
|
+
* @event datalist#action
|
|
439
|
+
* @param {String} lineId
|
|
440
|
+
* @param {String} buttonId
|
|
441
|
+
*/
|
|
442
|
+
self.trigger('action', lineId, buttonId);
|
|
443
|
+
});
|
|
444
|
+
|
|
445
|
+
// take care of clicks on labels
|
|
446
|
+
this.setState('selectable', this.config.selectable);
|
|
447
|
+
this.controls.$list.on('click', 'td.label', function() {
|
|
448
|
+
var $checkbox;
|
|
449
|
+
|
|
450
|
+
if (self.config.selectable) {
|
|
451
|
+
$checkbox = $(this)
|
|
452
|
+
.closest('tr')
|
|
453
|
+
.find('input[type="checkbox"]');
|
|
454
|
+
|
|
455
|
+
// toggle the line selection
|
|
456
|
+
if ($checkbox.prop('checked')) {
|
|
457
|
+
$checkbox.prop('checked', false);
|
|
458
|
+
} else {
|
|
459
|
+
$checkbox.prop('checked', true);
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
// takes care of the new selection
|
|
463
|
+
self._onSelection();
|
|
464
|
+
}
|
|
465
|
+
});
|
|
466
|
+
|
|
467
|
+
// take care of clicks on checkboxes
|
|
468
|
+
this.controls.$list.on('click', 'input[type="checkbox"]', function() {
|
|
469
|
+
// just takes care of the new selection
|
|
470
|
+
self._onSelection();
|
|
471
|
+
});
|
|
472
|
+
|
|
473
|
+
// check/uncheck all checkboxes
|
|
474
|
+
this.controls.$checkAll.on('click', function() {
|
|
475
|
+
var $checkboxes = self.controls.$checkboxes;
|
|
476
|
+
|
|
477
|
+
// select/unselect all lines
|
|
478
|
+
if (this.checked) {
|
|
479
|
+
$checkboxes.prop('checked', true);
|
|
480
|
+
} else {
|
|
481
|
+
$checkboxes.prop('checked', false);
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// takes care of the new selection
|
|
485
|
+
self._onSelection();
|
|
486
|
+
});
|
|
487
|
+
|
|
488
|
+
// data already available ?
|
|
489
|
+
if (data) {
|
|
490
|
+
this.update(data);
|
|
491
|
+
} else {
|
|
492
|
+
this.setState('empty', true);
|
|
493
|
+
this.setState('loaded', false);
|
|
494
|
+
}
|
|
495
|
+
})
|
|
496
|
+
.init(initConfig)
|
|
497
|
+
);
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
export default datalistFactory;
|