@oat-sa/tao-core-ui 1.60.2 → 1.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +339 -339
- package/README.md +23 -18
- package/dist/actionbar.js +393 -410
- package/dist/adder.js +143 -156
- package/dist/animable/absorbable/absorbable.js +208 -211
- package/dist/animable/absorbable/css/absorb.css +7 -8
- 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 +174 -174
- package/dist/areaBroker.js +59 -72
- package/dist/autocomplete/css/autocomplete.css +7 -8
- package/dist/autocomplete/css/autocomplete.css.map +1 -1
- package/dist/autocomplete.js +494 -604
- package/dist/autoscroll.js +23 -25
- package/dist/badge/badge.js +201 -199
- package/dist/badge/css/badge.css +7 -8
- 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 +286 -285
- package/dist/btngrouper.js +83 -95
- package/dist/bulkActionPopup/css/bulkActionPopup.css +7 -7
- package/dist/bulkActionPopup/css/bulkActionPopup.css.map +1 -1
- package/dist/bulkActionPopup.js +503 -503
- package/dist/button.js +300 -293
- package/dist/calculator/css/calculator.css +10 -10
- package/dist/calculator/css/calculator.css.map +1 -1
- package/dist/calculator.js +59 -72
- package/dist/cascadingComboBox.js +257 -256
- package/dist/ckeditor/ckConfigurator.js +130 -154
- package/dist/ckeditor/dtdHandler.js +305 -345
- package/dist/class/css/selector.css +7 -7
- package/dist/class/css/selector.css.map +1 -1
- package/dist/class/selector.js +437 -470
- package/dist/component/alignable.js +97 -121
- package/dist/component/containable.js +53 -58
- 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 +34 -36
- package/dist/component/placeable.js +84 -102
- package/dist/component/resizable.js +79 -89
- package/dist/component/stackable.js +21 -27
- package/dist/component/windowed.js +284 -297
- package/dist/component.js +439 -467
- package/dist/container.js +79 -98
- package/dist/contextualPopup/css/contextualPopup.css +7 -7
- package/dist/contextualPopup/css/contextualPopup.css.map +1 -1
- package/dist/contextualPopup.js +417 -436
- package/dist/dashboard/css/dashboard.css +7 -7
- package/dist/dashboard/css/dashboard.css.map +1 -1
- package/dist/dashboard.js +302 -305
- package/dist/datalist/css/datalist.css +7 -7
- package/dist/datalist/css/datalist.css.map +1 -1
- package/dist/datalist.js +783 -791
- package/dist/datatable/css/datatable.css +11 -7
- package/dist/datatable/css/datatable.css.map +1 -1
- package/dist/datatable/filterStrategy/filterStrategy.js +28 -30
- package/dist/datatable/filterStrategy/multiple.js +26 -45
- package/dist/datatable/filterStrategy/single.js +28 -40
- package/dist/datatable.js +1591 -1616
- package/dist/dateRange/css/dateRange.css +7 -7
- package/dist/dateRange/css/dateRange.css.map +1 -1
- package/dist/dateRange/dateRange.js +398 -412
- package/dist/datetime/css/picker.css +7 -7
- package/dist/datetime/css/picker.css.map +1 -1
- package/dist/datetime/picker.js +670 -703
- package/dist/deleter.js +383 -398
- package/dist/destination/css/selector.css +7 -7
- package/dist/destination/css/selector.css.map +1 -1
- package/dist/destination/selector.js +295 -293
- package/dist/dialog/alert.js +30 -32
- package/dist/dialog/confirm.js +29 -32
- package/dist/dialog/confirmDelete.js +223 -221
- package/dist/dialog.js +651 -695
- package/dist/disabler.js +108 -119
- 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 +172 -169
- package/dist/documentViewer/providers/pdfViewer/pdfjs/areaBroker.js +32 -29
- package/dist/documentViewer/providers/pdfViewer/pdfjs/findBar.js +523 -564
- package/dist/documentViewer/providers/pdfViewer/pdfjs/pageView.js +376 -393
- package/dist/documentViewer/providers/pdfViewer/pdfjs/pagesManager.js +53 -68
- package/dist/documentViewer/providers/pdfViewer/pdfjs/searchEngine.js +517 -567
- package/dist/documentViewer/providers/pdfViewer/pdfjs/textManager.js +73 -96
- package/dist/documentViewer/providers/pdfViewer/pdfjs/viewer.js +381 -392
- package/dist/documentViewer/providers/pdfViewer/pdfjs/wrapper.js +125 -152
- package/dist/documentViewer/providers/pdfViewer.js +189 -191
- package/dist/documentViewer/viewerFactory.js +76 -81
- package/dist/documentViewer.js +303 -311
- package/dist/dropdown/css/dropdown.css +7 -7
- package/dist/dropdown/css/dropdown.css.map +1 -1
- package/dist/dropdown.js +392 -412
- package/dist/durationer.js +77 -85
- package/dist/dynamicComponent/css/dynamicComponent.css +7 -7
- package/dist/dynamicComponent/css/dynamicComponent.css.map +1 -1
- package/dist/dynamicComponent.js +595 -630
- package/dist/feedback.js +365 -375
- package/dist/figure/FigureStateActive.js +246 -296
- package/dist/filesender.js +44 -54
- package/dist/filter.js +244 -240
- 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 +357 -362
- package/dist/form/form.js +703 -984
- package/dist/form/simpleForm.js +74 -77
- 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 +235 -241
- package/dist/form/validator/validator.js +181 -267
- 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 +27 -28
- package/dist/form/widget/loader.js +16 -16
- package/dist/form/widget/providers/checkBox.js +257 -264
- package/dist/form/widget/providers/comboBox.js +194 -193
- package/dist/form/widget/providers/default.js +44 -50
- package/dist/form/widget/providers/hidden.js +179 -176
- package/dist/form/widget/providers/hiddenBox.js +262 -272
- package/dist/form/widget/providers/radioBox.js +222 -223
- package/dist/form/widget/providers/textArea.js +197 -193
- package/dist/form/widget/providers/textBox.js +36 -37
- package/dist/form/widget/widget.js +480 -508
- package/dist/form.js +12 -17
- package/dist/formValidator/formValidator.js +74 -91
- package/dist/formValidator/highlighters/highlighter.js +43 -51
- package/dist/formValidator/highlighters/message.js +31 -32
- package/dist/formValidator/highlighters/tooltip.js +33 -35
- 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 +323 -331
- 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 +215 -216
- package/dist/generis/widget/checkBox/checkBox.js +227 -225
- package/dist/generis/widget/comboBox/comboBox.js +189 -183
- 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 +231 -232
- package/dist/generis/widget/loader.js +21 -23
- package/dist/generis/widget/textBox/textBox.js +178 -172
- package/dist/generis/widget/widget.js +255 -266
- package/dist/groupedComboBox.js +231 -226
- package/dist/groupvalidator.js +30 -34
- package/dist/hider.js +43 -50
- package/dist/highlighter.js +946 -1057
- package/dist/image/ImgStateActive/extractLabel.js +20 -21
- package/dist/image/ImgStateActive/helper.js +21 -25
- package/dist/image/ImgStateActive/initHelper.js +133 -162
- package/dist/image/ImgStateActive/initMediaEditor.js +72 -92
- package/dist/image/ImgStateActive/mediaSizer.js +48 -58
- package/dist/image/ImgStateActive.js +185 -215
- package/dist/incrementer.js +91 -110
- package/dist/inplacer.js +108 -132
- package/dist/interactUtils.js +56 -67
- package/dist/itemButtonList/css/item-button-list.css +23 -24
- package/dist/itemButtonList/css/item-button-list.css.map +1 -1
- package/dist/itemButtonList.js +444 -469
- package/dist/keyNavigation/navigableDomElement.js +124 -158
- package/dist/keyNavigation/navigator.js +235 -312
- package/dist/listbox/css/listbox.css +7 -7
- package/dist/listbox/css/listbox.css.map +1 -1
- package/dist/listbox.js +463 -476
- package/dist/liststyler.js +75 -76
- package/dist/loadingButton/css/button.css +7 -7
- package/dist/loadingButton/css/button.css.map +1 -1
- package/dist/loadingButton/loadingButton.js +219 -218
- package/dist/lock.js +484 -509
- package/dist/login/login.js +471 -486
- package/dist/maths/calculator/basicCalculator.js +247 -242
- package/dist/maths/calculator/calculatorComponent.js +34 -36
- package/dist/maths/calculator/core/areaBroker.js +30 -28
- package/dist/maths/calculator/core/board.js +805 -872
- package/dist/maths/calculator/core/expression.js +500 -518
- package/dist/maths/calculator/core/labels.js +240 -235
- package/dist/maths/calculator/core/plugin.js +20 -20
- package/dist/maths/calculator/core/terms.js +27 -27
- package/dist/maths/calculator/core/tokenizer.js +119 -132
- package/dist/maths/calculator/core/tokens.js +157 -168
- 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 +24 -27
- package/dist/maths/calculator/plugins/core/degrad.js +22 -30
- package/dist/maths/calculator/plugins/core/history.js +55 -67
- package/dist/maths/calculator/plugins/core/remind.js +22 -25
- package/dist/maths/calculator/plugins/core/stepNavigation.js +33 -49
- package/dist/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +255 -258
- package/dist/maths/calculator/plugins/modifiers/pow10.js +47 -52
- package/dist/maths/calculator/plugins/modifiers/sign.js +103 -130
- package/dist/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +288 -293
- package/dist/maths/calculator/pluginsLoader.js +22 -22
- package/dist/maths/calculator/scientificCalculator.js +339 -334
- package/dist/mediaEditor/mediaEditorComponent.js +244 -249
- package/dist/mediaEditor/plugins/mediaAlignment/helper.js +28 -33
- package/dist/mediaEditor/plugins/mediaAlignment/mediaAlignmentComponent.js +228 -236
- package/dist/mediaEditor/plugins/mediaAlignment/style.css +7 -7
- package/dist/mediaEditor/plugins/mediaDimension/helper.js +81 -106
- package/dist/mediaEditor/plugins/mediaDimension/mediaDimensionComponent.js +597 -635
- 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 +646 -706
- package/dist/mediaplayer/players/youtube.js +393 -438
- package/dist/mediaplayer/players.js +19 -19
- package/dist/mediaplayer/support.js +66 -79
- package/dist/mediaplayer/utils/reminder.js +117 -128
- package/dist/mediaplayer/utils/timeObserver.js +106 -109
- package/dist/mediaplayer/youtubeManager.js +142 -170
- package/dist/mediaplayer.js +1484 -1774
- package/dist/mediasizer.js +633 -676
- package/dist/modal.js +137 -153
- package/dist/movableComponent.js +37 -37
- package/dist/pageSizeSelector.js +231 -224
- package/dist/pageStatus.js +43 -46
- package/dist/pagination/css/pagination.css +7 -7
- package/dist/pagination/css/pagination.css.map +1 -1
- package/dist/pagination/paginationStrategy.js +24 -25
- package/dist/pagination/providers/pages.js +281 -291
- package/dist/pagination/providers/simple.js +202 -196
- package/dist/pagination.js +49 -72
- package/dist/previewer.js +113 -138
- package/dist/progressbar.js +70 -80
- package/dist/propertySelector/css/propertySelector.css +74 -0
- package/dist/propertySelector/css/propertySelector.css.map +1 -0
- package/dist/propertySelector/propertySelector.js +489 -0
- package/dist/report.js +356 -359
- package/dist/resource/css/selector.css +7 -7
- package/dist/resource/css/selector.css.map +1 -1
- package/dist/resource/filters.js +275 -289
- package/dist/resource/list.js +1589 -1371
- package/dist/resource/selectable.js +101 -136
- package/dist/resource/selector.js +855 -914
- package/dist/resource/tree.js +1796 -1612
- package/dist/resourcemgr/css/resourcemgr.css +7 -7
- package/dist/resourcemgr/css/resourcemgr.css.map +1 -1
- package/dist/resourcemgr/fileBrowser.js +540 -587
- package/dist/resourcemgr/filePreview.js +16 -25
- package/dist/resourcemgr/fileSelector.js +520 -547
- package/dist/resourcemgr/util/updatePermissions.js +10 -18
- package/dist/resourcemgr.js +325 -332
- package/dist/scroller.js +29 -33
- package/dist/searchModal/advancedSearch.js +949 -833
- package/dist/searchModal/css/advancedSearch.css +7 -14
- package/dist/searchModal/css/advancedSearch.css.map +1 -1
- package/dist/searchModal/css/searchModal.css +28 -8
- package/dist/searchModal/css/searchModal.css.map +1 -1
- package/dist/searchModal.js +616 -335
- package/dist/selecter.js +21 -28
- package/dist/stacker.js +52 -60
- package/dist/switch/css/switch.css +7 -7
- package/dist/switch/css/switch.css.map +1 -1
- package/dist/switch/switch.js +305 -311
- package/dist/tableModel.js +39 -49
- package/dist/tabs/css/tabs.css +12 -12
- package/dist/tabs/css/tabs.css.map +1 -1
- package/dist/tabs.js +588 -639
- package/dist/taskQueue/css/taskQueue.css +7 -7
- package/dist/taskQueue/css/taskQueue.css.map +1 -1
- package/dist/taskQueue/status.js +317 -322
- package/dist/taskQueue/table.js +383 -394
- package/dist/taskQueue/taskQueue.js +19 -19
- package/dist/taskQueue/taskQueueModel.js +459 -538
- package/dist/taskQueue.js +49 -67
- 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 +45 -43
- package/dist/taskQueueButton/taskable.js +267 -272
- package/dist/taskQueueButton/treeButton.js +200 -198
- package/dist/themeLoader.js +109 -129
- package/dist/themes.js +86 -100
- package/dist/toggler.js +76 -88
- package/dist/tooltip.js +296 -311
- package/dist/tooltipster.js +17 -17
- package/dist/transformer.js +140 -169
- package/dist/tristateCheckboxGroup/css/tristateCheckboxGroup.css +7 -7
- package/dist/tristateCheckboxGroup/css/tristateCheckboxGroup.css.map +1 -1
- package/dist/tristateCheckboxGroup.js +319 -325
- package/dist/uploader.js +691 -724
- package/dist/validator/Report.js +1 -2
- package/dist/validator/Validator.js +6 -25
- package/dist/validator/validators.js +66 -80
- package/dist/validator.js +218 -254
- package/dist/waitForMedia.js +45 -51
- package/dist/waitingDialog/css/waitingDialog.css +7 -7
- package/dist/waitingDialog/css/waitingDialog.css.map +1 -1
- package/dist/waitingDialog/waitingDialog.js +59 -77
- package/package.json +109 -107
- package/scss/basic.scss +16 -16
- package/scss/ckeditor/skins/tao/scss/inc/_ck-icons.scss +59 -59
- package/scss/ckeditor/skins/tao/scss/inc/_tao.scss +59 -59
- package/scss/font/tao/tao.svg +234 -234
- 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 -88
- package/scss/inc/_feedback.scss +150 -150
- 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 +226 -226
- package/scss/inc/fonts/_tao-icon-def.scss +12 -12
- package/scss/inc/fonts/_tao-icon-vars.scss +240 -240
- 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 -8
- 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 -8
- package/src/autocomplete/css/autocomplete.css.map +1 -1
- package/src/autocomplete/scss/autocomplete.scss +37 -37
- package/src/autocomplete.js +1029 -1029
- package/src/autoscroll.js +57 -57
- package/src/badge/badge.js +119 -119
- package/src/badge/css/badge.css +7 -8
- 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 +736 -736
- 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 +297 -297
- package/src/css/basic.css +103 -106
- 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 +184 -184
- 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 +11 -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 -146
- 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 +222 -222
- 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 +554 -554
- package/src/feedback/feedback.tpl +7 -7
- package/src/feedback.js +295 -295
- package/src/figure/FigureStateActive.js +174 -174
- package/src/filesender.js +114 -114
- package/src/filter/template.tpl +5 -5
- package/src/filter.js +135 -135
- 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 +53 -53
- package/src/formValidator/formValidator.js +253 -253
- package/src/formValidator/highlighters/highlighter.js +102 -102
- package/src/formValidator/highlighters/message.js +70 -70
- 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 +67 -67
- 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 +132 -132
- 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 +65 -65
- 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 +1166 -1166
- 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 +319 -319
- package/src/inplacer.js +316 -316
- package/src/interactUtils.js +140 -140
- package/src/itemButtonList/css/item-button-list.css +23 -24
- 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 +282 -282
- package/src/keyNavigation/navigator.js +543 -543
- 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 +251 -251
- 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 +395 -395
- package/src/login/login.js +322 -322
- 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 +191 -191
- 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 +62 -62
- 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 +189 -189
- 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 +107 -107
- 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 +74 -0
- package/src/propertySelector/css/propertySelector.css.map +1 -0
- package/src/propertySelector/propertySelector.js +286 -0
- package/src/propertySelector/scss/propertySelector.scss +66 -0
- package/src/propertySelector/tpl/highlighted-text.tpl +1 -0
- package/src/propertySelector/tpl/property-description.tpl +13 -0
- package/src/propertySelector/tpl/property-selector.tpl +7 -0
- 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 +400 -400
- 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 +348 -348
- 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 -601
- package/src/searchModal/css/advancedSearch.css +7 -14
- package/src/searchModal/css/advancedSearch.css.map +1 -1
- package/src/searchModal/css/searchModal.css +28 -8
- package/src/searchModal/css/searchModal.css.map +1 -1
- package/src/searchModal/scss/advancedSearch.scss +171 -177
- package/src/searchModal/scss/searchModal.scss +393 -375
- package/src/searchModal/tpl/advanced-search.tpl +9 -9
- package/src/searchModal/tpl/criteria-alias.tpl +1 -0
- package/src/searchModal/tpl/criteria-class-label.tpl +1 -0
- package/src/searchModal/tpl/criteria-label.tpl +1 -0
- package/src/searchModal/tpl/highlighted-text.tpl +1 -0
- 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 -25
- package/src/searchModal/tpl/list-checkbox-criterion.tpl +17 -12
- package/src/searchModal/tpl/list-select-criterion.tpl +12 -6
- package/src/searchModal/tpl/property-select-button.tpl +1 -0
- package/src/searchModal/tpl/results-container.tpl +1 -0
- package/src/searchModal/tpl/text-criterion.tpl +11 -6
- package/src/searchModal.js +761 -496
- 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 +218 -218
- 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 +109 -109
- 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 +220 -220
- package/src/validator.js +264 -264
- 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/dist/searchModal.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
define(['jquery', 'lodash', 'i18n', 'context', 'handlebars', 'lib/dompurify/purify', 'css!ui/searchModal/css/searchModal.css', 'ui/component', 'ui/modal', 'ui/datatable', 'core/store', 'ui/resource/selector', 'ui/searchModal/advancedSearch', 'core/dataProvider/request', 'util/url', 'select2', 'util/shortcut/registry'], function ($$1, _, __, context, Handlebars, DOMPurify, searchModal_css, component, modal, datatable, store, resourceSelectorFactory, advancedSearchFactory, request, urlUtil, select2, shortcutRegistry) { 'use strict';
|
|
1
|
+
define(['jquery', 'lodash', 'i18n', 'context', 'handlebars', 'lib/dompurify/purify', 'css!ui/searchModal/css/searchModal.css', 'ui/component', 'ui/modal', 'ui/datatable', 'core/store', 'ui/resource/selector', 'ui/propertySelector/propertySelector', 'ui/searchModal/advancedSearch', 'core/dataProvider/request', 'util/url', 'select2', 'util/shortcut/registry'], function ($$1, _, __, context, Handlebars, DOMPurify, searchModal_css, component, modal, datatable, store, resourceSelectorFactory, propertySelectorFactory, advancedSearchFactory, request, urlUtil, select2, shortcutRegistry) { 'use strict';
|
|
2
2
|
|
|
3
3
|
$$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;
|
|
4
4
|
_ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;
|
|
@@ -9,6 +9,7 @@ define(['jquery', 'lodash', 'i18n', 'context', 'handlebars', 'lib/dompurify/puri
|
|
|
9
9
|
component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;
|
|
10
10
|
store = store && Object.prototype.hasOwnProperty.call(store, 'default') ? store['default'] : store;
|
|
11
11
|
resourceSelectorFactory = resourceSelectorFactory && Object.prototype.hasOwnProperty.call(resourceSelectorFactory, 'default') ? resourceSelectorFactory['default'] : resourceSelectorFactory;
|
|
12
|
+
propertySelectorFactory = propertySelectorFactory && Object.prototype.hasOwnProperty.call(propertySelectorFactory, 'default') ? propertySelectorFactory['default'] : propertySelectorFactory;
|
|
12
13
|
advancedSearchFactory = advancedSearchFactory && Object.prototype.hasOwnProperty.call(advancedSearchFactory, 'default') ? advancedSearchFactory['default'] : advancedSearchFactory;
|
|
13
14
|
request = request && Object.prototype.hasOwnProperty.call(request, 'default') ? request['default'] : request;
|
|
14
15
|
urlUtil = urlUtil && Object.prototype.hasOwnProperty.call(urlUtil, 'default') ? urlUtil['default'] : urlUtil;
|
|
@@ -16,17 +17,14 @@ define(['jquery', 'lodash', 'i18n', 'context', 'handlebars', 'lib/dompurify/puri
|
|
|
16
17
|
|
|
17
18
|
function ownKeys(object, enumerableOnly) {
|
|
18
19
|
var keys = Object.keys(object);
|
|
19
|
-
|
|
20
20
|
if (Object.getOwnPropertySymbols) {
|
|
21
21
|
var symbols = Object.getOwnPropertySymbols(object);
|
|
22
22
|
enumerableOnly && (symbols = symbols.filter(function (sym) {
|
|
23
23
|
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
24
24
|
})), keys.push.apply(keys, symbols);
|
|
25
25
|
}
|
|
26
|
-
|
|
27
26
|
return keys;
|
|
28
27
|
}
|
|
29
|
-
|
|
30
28
|
function _objectSpread2(target) {
|
|
31
29
|
for (var i = 1; i < arguments.length; i++) {
|
|
32
30
|
var source = null != arguments[i] ? arguments[i] : {};
|
|
@@ -36,20 +34,8 @@ define(['jquery', 'lodash', 'i18n', 'context', 'handlebars', 'lib/dompurify/puri
|
|
|
36
34
|
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
37
35
|
});
|
|
38
36
|
}
|
|
39
|
-
|
|
40
37
|
return target;
|
|
41
38
|
}
|
|
42
|
-
|
|
43
|
-
function _typeof(obj) {
|
|
44
|
-
"@babel/helpers - typeof";
|
|
45
|
-
|
|
46
|
-
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
|
|
47
|
-
return typeof obj;
|
|
48
|
-
} : function (obj) {
|
|
49
|
-
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
50
|
-
}, _typeof(obj);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
39
|
function _defineProperty(obj, key, value) {
|
|
54
40
|
if (key in obj) {
|
|
55
41
|
Object.defineProperty(obj, key, {
|
|
@@ -61,78 +47,90 @@ define(['jquery', 'lodash', 'i18n', 'context', 'handlebars', 'lib/dompurify/puri
|
|
|
61
47
|
} else {
|
|
62
48
|
obj[key] = value;
|
|
63
49
|
}
|
|
64
|
-
|
|
65
50
|
return obj;
|
|
66
51
|
}
|
|
67
52
|
|
|
53
|
+
/**
|
|
54
|
+
* This program is free software; you can redistribute it and/or
|
|
55
|
+
* modify it under the terms of the GNU General Public License
|
|
56
|
+
* as published by the Free Software Foundation; under version 2
|
|
57
|
+
* of the License (non-upgradable).
|
|
58
|
+
*
|
|
59
|
+
* This program is distributed in the hope that it will be useful,
|
|
60
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
61
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
62
|
+
* GNU General Public License for more details.
|
|
63
|
+
*
|
|
64
|
+
* You should have received a copy of the GNU General Public License
|
|
65
|
+
* along with this program; if not, write to the Free Software
|
|
66
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
67
|
+
*
|
|
68
|
+
* Copyright (c) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
|
|
69
|
+
*
|
|
70
|
+
*
|
|
71
|
+
*/
|
|
68
72
|
function Helpers0 (hb) {
|
|
69
73
|
//register a i18n helper
|
|
70
74
|
hb.registerHelper('__', function (key) {
|
|
71
75
|
return __(key);
|
|
72
76
|
});
|
|
73
|
-
/**
|
|
74
|
-
* Register dompurify helper
|
|
75
|
-
*
|
|
76
|
-
* https://github.com/cure53/DOMPurify
|
|
77
|
-
* with config SAFE_FOR_TEMPLATES: true
|
|
78
|
-
* to make output safe for template systems
|
|
79
|
-
*/
|
|
80
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Register dompurify helper
|
|
80
|
+
*
|
|
81
|
+
* https://github.com/cure53/DOMPurify
|
|
82
|
+
* with config SAFE_FOR_TEMPLATES: true
|
|
83
|
+
* to make output safe for template systems
|
|
84
|
+
*/
|
|
81
85
|
hb.registerHelper('dompurify', function (context) {
|
|
82
86
|
return DOMPurify.sanitize(context);
|
|
83
87
|
});
|
|
84
|
-
/**
|
|
85
|
-
* Register join helper
|
|
86
|
-
*
|
|
87
|
-
* Example :
|
|
88
|
-
* var values = {a:v1, b:v2, c:v3};
|
|
89
|
-
* Using {{{join attributes '=' ' ' '"'}}} will return : a="v1" b="v2" c="v3"
|
|
90
|
-
* Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*
|
|
91
|
-
*/
|
|
92
88
|
|
|
89
|
+
/**
|
|
90
|
+
* Register join helper
|
|
91
|
+
*
|
|
92
|
+
* Example :
|
|
93
|
+
* var values = {a:v1, b:v2, c:v3};
|
|
94
|
+
* Using {{{join attributes '=' ' ' '"'}}} will return : a="v1" b="v2" c="v3"
|
|
95
|
+
* Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*
|
|
96
|
+
*/
|
|
93
97
|
hb.registerHelper('join', function (arr, keyValueGlue, fragmentGlue, wrapper) {
|
|
94
98
|
var fragments = [];
|
|
95
99
|
keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;
|
|
96
100
|
fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';
|
|
97
101
|
wrapper = typeof wrapper === 'string' ? wrapper : '"';
|
|
98
|
-
|
|
99
102
|
_.forIn(arr, function (value, key) {
|
|
100
103
|
var fragment = '';
|
|
101
|
-
|
|
102
104
|
if (value !== null || value !== undefined) {
|
|
103
105
|
if (typeof value === 'boolean') {
|
|
104
106
|
value = value ? 'true' : 'false';
|
|
105
|
-
} else if (
|
|
107
|
+
} else if (typeof value === 'object') {
|
|
106
108
|
value = _.values(value).join(' ');
|
|
107
109
|
}
|
|
108
110
|
} else {
|
|
109
111
|
value = '';
|
|
110
112
|
}
|
|
111
|
-
|
|
112
113
|
if (keyValueGlue !== undefined) {
|
|
113
114
|
fragment += key + keyValueGlue;
|
|
114
115
|
}
|
|
115
|
-
|
|
116
116
|
fragment += wrapper + value + wrapper;
|
|
117
117
|
fragments.push(fragment);
|
|
118
118
|
});
|
|
119
|
-
|
|
120
119
|
return fragments.join(fragmentGlue);
|
|
121
|
-
});
|
|
122
|
-
//it also adds a local variable "i" as the index in each iteration loop
|
|
120
|
+
});
|
|
123
121
|
|
|
122
|
+
//register a classic "for loop" helper
|
|
123
|
+
//it also adds a local variable "i" as the index in each iteration loop
|
|
124
124
|
hb.registerHelper('for', function (startIndex, stopIndex, increment, options) {
|
|
125
125
|
var ret = '';
|
|
126
126
|
startIndex = parseInt(startIndex);
|
|
127
127
|
stopIndex = parseInt(stopIndex);
|
|
128
128
|
increment = parseInt(increment);
|
|
129
|
-
|
|
130
129
|
for (var i = startIndex; i < stopIndex; i += increment) {
|
|
131
130
|
ret += options.fn(_.extend({}, this, {
|
|
132
131
|
i: i
|
|
133
132
|
}));
|
|
134
133
|
}
|
|
135
|
-
|
|
136
134
|
return ret;
|
|
137
135
|
});
|
|
138
136
|
hb.registerHelper('equal', function (var1, var2, options) {
|
|
@@ -141,14 +139,16 @@ define(['jquery', 'lodash', 'i18n', 'context', 'handlebars', 'lib/dompurify/puri
|
|
|
141
139
|
} else {
|
|
142
140
|
return options.inverse(this);
|
|
143
141
|
}
|
|
144
|
-
});
|
|
145
|
-
// it gets the named property from the provided context
|
|
142
|
+
});
|
|
146
143
|
|
|
144
|
+
// register a "get property" helper
|
|
145
|
+
// it gets the named property from the provided context
|
|
147
146
|
hb.registerHelper('property', function (name, context) {
|
|
148
147
|
return context[name] || '';
|
|
149
|
-
});
|
|
150
|
-
// it checks if value is in array
|
|
148
|
+
});
|
|
151
149
|
|
|
150
|
+
// register an 'includes' helper
|
|
151
|
+
// it checks if value is in array
|
|
152
152
|
hb.registerHelper('includes', function (haystack, needle, options) {
|
|
153
153
|
if (_.contains(haystack, needle)) {
|
|
154
154
|
return options.fn(this);
|
|
@@ -166,15 +166,15 @@ define(['jquery', 'lodash', 'i18n', 'context', 'handlebars', 'lib/dompurify/puri
|
|
|
166
166
|
var buffer = "", stack1, helper, options, functionType="function", escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;
|
|
167
167
|
|
|
168
168
|
|
|
169
|
-
buffer += "<div class=\"search-modal section-container\">\
|
|
169
|
+
buffer += "<div class=\"search-modal section-container\">\n <div class=\"clear content-wrapper content-panel\">\n <div class=\"ui-container\">\n <div class=\"filters-container\">\n <div class=\"basic-search-container\">\n <div class=\"filter-container\">\n <span class=\"icon-find\"></span>\n <input class=\"generic-search-input\" type=\"text\" placeholder=\"";
|
|
170
170
|
if (helper = helpers.placeholder) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
171
171
|
else { helper = (depth0 && depth0.placeholder); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
172
172
|
buffer += escapeExpression(stack1)
|
|
173
|
-
+ "\">\
|
|
173
|
+
+ "\">\n </div>\n <div class=\"filter-container class-filter-container\">\n <span class=\"icon-folder\"></span>\n <span class=\"icon-down\"></span>\n <textarea class=\"class-filter\" cols=\"40\" rows=\"1\" readonly></textarea>\n <div class=\"class-tree\"></div>\n </div>\n </div>\n </div>\n <div class=\"buttons-container\">\n <button class=\"btn-clear btn-transparent small\">"
|
|
174
174
|
+ escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, "Clear", options) : helperMissing.call(depth0, "__", "Clear", options)))
|
|
175
|
-
+ "</button>\
|
|
175
|
+
+ "</button>\n <button class=\"btn-search btn-info small\">"
|
|
176
176
|
+ escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, "Search", options) : helperMissing.call(depth0, "__", "Search", options)))
|
|
177
|
-
+ "</button>\
|
|
177
|
+
+ "</button>\n </div>\n </div>\n <div class=\"content-container\">\n <div class=\"content-toolbar\"></div>\n <div class=\"content-area\"></div>\n </div>\n </div>\n</div>";
|
|
178
178
|
return buffer;
|
|
179
179
|
});
|
|
180
180
|
function layoutTpl(data, options, asString) {
|
|
@@ -188,205 +188,248 @@ define(['jquery', 'lodash', 'i18n', 'context', 'handlebars', 'lib/dompurify/puri
|
|
|
188
188
|
}
|
|
189
189
|
var Template$1 = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
190
190
|
this.compilerInfo = [4,'>= 1.0.0'];
|
|
191
|
+
helpers = this.merge(helpers, Handlebars.helpers);
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
return "<div class=\"results-container flex-container-full\"></div>";
|
|
195
|
+
});
|
|
196
|
+
function resultsContainerTpl(data, options, asString) {
|
|
197
|
+
var html = Template$1(data, options);
|
|
198
|
+
return (asString || true) ? html : $(html);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
if (!Helpers0.__initialized) {
|
|
202
|
+
Helpers0(Handlebars);
|
|
203
|
+
Helpers0.__initialized = true;
|
|
204
|
+
}
|
|
205
|
+
var Template$2 = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
206
|
+
this.compilerInfo = [4,'>= 1.0.0'];
|
|
191
207
|
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
|
|
192
208
|
var buffer = "", stack1, helper, functionType="function", escapeExpression=this.escapeExpression;
|
|
193
209
|
|
|
194
210
|
|
|
195
|
-
buffer += "<div class='no-datatable-container'>\
|
|
211
|
+
buffer += "<div class='no-datatable-container'>\n <span class=\"no-datatable-icon ";
|
|
196
212
|
if (helper = helpers.icon) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
197
213
|
else { helper = (depth0 && depth0.icon); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
198
214
|
buffer += escapeExpression(stack1)
|
|
199
|
-
+ "\"></span>\
|
|
215
|
+
+ "\"></span>\n <p class=\"no-datatable-message\">";
|
|
200
216
|
if (helper = helpers.message) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
201
217
|
else { helper = (depth0 && depth0.message); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
202
218
|
buffer += escapeExpression(stack1)
|
|
203
|
-
+ "</p>\
|
|
219
|
+
+ "</p>\n</div>";
|
|
204
220
|
return buffer;
|
|
205
221
|
});
|
|
206
222
|
function infoMessageTpl(data, options, asString) {
|
|
207
|
-
var html = Template$
|
|
223
|
+
var html = Template$2(data, options);
|
|
208
224
|
return (asString || true) ? html : $(html);
|
|
209
225
|
}
|
|
210
226
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
227
|
+
if (!Helpers0.__initialized) {
|
|
228
|
+
Helpers0(Handlebars);
|
|
229
|
+
Helpers0.__initialized = true;
|
|
230
|
+
}
|
|
231
|
+
var Template$3 = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
232
|
+
this.compilerInfo = [4,'>= 1.0.0'];
|
|
233
|
+
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
|
|
234
|
+
var buffer = "", helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
buffer += "<a class=\"toggle-modal-button\"><span class=\"icon-add\"></span>"
|
|
238
|
+
+ escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, "manage columns", options) : helperMissing.call(depth0, "__", "manage columns", options)))
|
|
239
|
+
+ "</a>";
|
|
240
|
+
return buffer;
|
|
241
|
+
});
|
|
242
|
+
function propertySelectButtonTpl(data, options, asString) {
|
|
243
|
+
var html = Template$3(data, options);
|
|
244
|
+
return (asString || true) ? html : $(html);
|
|
245
|
+
}
|
|
224
246
|
|
|
247
|
+
/**
|
|
248
|
+
* Creates a searchModal instance
|
|
249
|
+
*
|
|
250
|
+
* @param {object} config
|
|
251
|
+
* @param {object} config.renderTo - DOM element where component will be rendered to
|
|
252
|
+
* @param {string} config.criterias - Search criteria to be set on component creation
|
|
253
|
+
* @param {boolean} config.searchOnInit - if init search must be triggered or not (stored results are used instead)
|
|
254
|
+
* @param {string} config.url - search endpoint to be set on datatable
|
|
255
|
+
* @param {string} config.rootClassUri - Uri for the root class of current context, required to init the class filter
|
|
256
|
+
* @param {bool} config.hideResourceSelector - if resourceSelector must be hidden
|
|
257
|
+
* @param {bool} config.hideCriteria - if the criteria must be hidden
|
|
258
|
+
* @param {string} config.placeholder - placeholder for input in template
|
|
259
|
+
* @param {string} config.classesUrl - the URL to the classes API (usually '/tao/RestResource/getAll')
|
|
260
|
+
* @param {string} config.classMappingUrl - the URL to the class mapping API (usually '/tao/ClassMetadata/getWithMapping')
|
|
261
|
+
* @param {string} config.statusUrl - the URL to the status API (usually '/tao/AdvancedSearch/status')
|
|
262
|
+
* @param {string} config.sortby - the default sorted column (usually 'label')
|
|
263
|
+
* @param {string} config.sortorder - the default sort order (usually 'asc')
|
|
264
|
+
* @returns {searchModal}
|
|
265
|
+
*/
|
|
225
266
|
function searchModalFactory(config) {
|
|
226
|
-
|
|
267
|
+
// @TODO: The consumer must be responsible for supplying the routes. The component must not hardcode endpoints.
|
|
268
|
+
const defaults = {
|
|
269
|
+
classesUrl: urlUtil.route('getAll', 'RestResource', 'tao'),
|
|
270
|
+
classMappingUrl: urlUtil.route('getWithMapping', 'ClassMetadata', 'tao'),
|
|
271
|
+
statusUrl: urlUtil.route('status', 'AdvancedSearch', 'tao'),
|
|
227
272
|
renderTo: 'body',
|
|
228
273
|
criterias: {},
|
|
229
274
|
searchOnInit: true,
|
|
230
|
-
maxListSize: 5
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
275
|
+
maxListSize: 5,
|
|
276
|
+
sortby: 'label',
|
|
277
|
+
sortorder: 'asc'
|
|
278
|
+
};
|
|
279
|
+
// Private properties to be easily accessible by instance methods
|
|
280
|
+
let $container = null;
|
|
281
|
+
let controls = {};
|
|
282
|
+
let running = false;
|
|
283
|
+
let searchStore = null;
|
|
284
|
+
let selectedColumnsStore = null;
|
|
285
|
+
let resourceSelector = null;
|
|
286
|
+
let advancedSearch = null;
|
|
287
|
+
let propertySelectorInstance;
|
|
288
|
+
let availableColumns = [];
|
|
289
|
+
let availableIdentifiers = {};
|
|
290
|
+
let selectedColumns = [];
|
|
291
|
+
let dataCache;
|
|
292
|
+
|
|
293
|
+
// resorce selector
|
|
294
|
+
const isResourceSelector = !config.hideResourceSelector;
|
|
295
|
+
const rootClassUri = config.rootClassUri;
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Creates search modal, inits template selectors, inits search store, and once is created triggers initial search
|
|
299
|
+
* rootClassUri is sent to advancedSearch factory for disabling in whitelisted sections
|
|
250
300
|
*/
|
|
251
|
-
|
|
252
301
|
function renderModal() {
|
|
253
|
-
|
|
302
|
+
const promises = [];
|
|
254
303
|
initModal();
|
|
255
304
|
initUiSelectors();
|
|
256
305
|
advancedSearch = advancedSearchFactory({
|
|
257
|
-
renderTo:
|
|
306
|
+
renderTo: controls.$filtersContainer,
|
|
258
307
|
advancedCriteria: instance.config.criterias.advancedCriteria,
|
|
308
|
+
hideCriteria: instance.config.hideCriteria,
|
|
309
|
+
statusUrl: instance.config.statusUrl,
|
|
259
310
|
rootClassUri: rootClassUri
|
|
260
311
|
});
|
|
261
312
|
promises.push(initClassFilter());
|
|
262
|
-
promises.push(
|
|
263
|
-
Promise.all(promises).then(
|
|
313
|
+
promises.push(initStores());
|
|
314
|
+
Promise.all(promises).then(() => {
|
|
264
315
|
instance.trigger('ready');
|
|
265
|
-
|
|
266
|
-
}).catch(
|
|
267
|
-
return instance.trigger('error', e);
|
|
268
|
-
});
|
|
316
|
+
controls.$searchButton.trigger('click');
|
|
317
|
+
}).catch(e => instance.trigger('error', e));
|
|
269
318
|
}
|
|
270
|
-
/**
|
|
271
|
-
* Removes search modal
|
|
272
|
-
*/
|
|
273
|
-
|
|
274
319
|
|
|
320
|
+
/**
|
|
321
|
+
* Removes search modal
|
|
322
|
+
*/
|
|
275
323
|
function destroyModal() {
|
|
276
324
|
$container.removeClass('modal').modal('destroy');
|
|
325
|
+
if (propertySelectorInstance) {
|
|
326
|
+
propertySelectorInstance.destroy();
|
|
327
|
+
}
|
|
277
328
|
$$1('.modal-bg').remove();
|
|
278
|
-
|
|
329
|
+
controls = {};
|
|
330
|
+
}
|
|
279
331
|
|
|
332
|
+
// Creates new component
|
|
333
|
+
const instance = component({
|
|
334
|
+
/**
|
|
335
|
+
* Tells if the advanced search is enabled.
|
|
336
|
+
* @returns {boolean}
|
|
337
|
+
*/
|
|
338
|
+
isAdvancedSearchEnabled() {
|
|
339
|
+
return advancedSearch && advancedSearch.isEnabled();
|
|
340
|
+
}
|
|
341
|
+
}, defaults).setTemplate(layoutTpl).on('selected-store-updated', recreateDatatable).on('render', renderModal).on('destroy', destroyModal);
|
|
280
342
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
* Creates search modal
|
|
343
|
+
/**
|
|
344
|
+
* Creates search modal
|
|
284
345
|
*/
|
|
285
|
-
|
|
286
346
|
function initModal() {
|
|
287
347
|
$container = instance.getElement();
|
|
288
|
-
$container.addClass('modal').on('closed.modal',
|
|
289
|
-
return instance.destroy();
|
|
290
|
-
}).modal({
|
|
348
|
+
$container.addClass('modal').on('closed.modal', () => instance.destroy()).modal({
|
|
291
349
|
disableEscape: false,
|
|
292
350
|
width: $$1(window).width(),
|
|
293
351
|
modalCloseClass: 'modal-close-left'
|
|
294
352
|
}).focus();
|
|
295
353
|
}
|
|
296
|
-
/**
|
|
297
|
-
* Inits class filter selector
|
|
298
|
-
*/
|
|
299
|
-
|
|
300
354
|
|
|
355
|
+
/**
|
|
356
|
+
* Inits class filter selector
|
|
357
|
+
*/
|
|
301
358
|
function initClassFilter() {
|
|
302
|
-
return new Promise(
|
|
359
|
+
return new Promise(resolve => {
|
|
303
360
|
if (!isResourceSelector) {
|
|
304
|
-
|
|
361
|
+
controls.$classFilterContainer.hide();
|
|
305
362
|
return resolve();
|
|
306
363
|
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
resourceSelector = resourceSelectorFactory($$1('.class-tree', $container), {
|
|
364
|
+
const initialClassUri = instance.config.criterias && instance.config.criterias.class ? instance.config.criterias.class : rootClassUri;
|
|
365
|
+
resourceSelector = resourceSelectorFactory(controls.$classTreeContainer, {
|
|
310
366
|
//set up the inner resource selector
|
|
311
367
|
selectionMode: 'single',
|
|
312
368
|
selectClass: true,
|
|
313
369
|
classUri: rootClassUri,
|
|
314
370
|
showContext: false,
|
|
315
371
|
showSelection: false
|
|
316
|
-
});
|
|
372
|
+
});
|
|
317
373
|
|
|
318
|
-
|
|
319
|
-
|
|
374
|
+
// when a class query is triggered, update selector options with received resources
|
|
375
|
+
resourceSelector.on('query', params => {
|
|
376
|
+
const classOnlyParams = _objectSpread2(_objectSpread2({}, params), {}, {
|
|
320
377
|
classOnly: true
|
|
321
378
|
});
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
request(route, classOnlyParams).then(function (response) {
|
|
379
|
+
const route = instance.config.classesUrl;
|
|
380
|
+
request(route, classOnlyParams).then(response => {
|
|
325
381
|
if (response.permissions && response.permissions.data && response.permissions.supportedRights && response.permissions.supportedRights.length > 0) {
|
|
326
382
|
manageClassTreePermissions(response);
|
|
327
383
|
}
|
|
328
|
-
|
|
329
384
|
resourceSelector.update(response.resources, classOnlyParams);
|
|
330
|
-
}).catch(
|
|
331
|
-
return instance.trigger('error', e);
|
|
332
|
-
});
|
|
385
|
+
}).catch(e => instance.trigger('error', e));
|
|
333
386
|
});
|
|
334
|
-
/*
|
|
335
|
-
* the first time selector opions are updated the root class is selected. Promise is
|
|
336
|
-
* resolved so init process continues only when class input value has been set
|
|
337
|
-
*/
|
|
338
387
|
|
|
339
|
-
|
|
388
|
+
/*
|
|
389
|
+
* the first time selector opions are updated the root class is selected. Promise is
|
|
390
|
+
* resolved so init process continues only when class input value has been set
|
|
391
|
+
*/
|
|
392
|
+
resourceSelector.on('update', () => {
|
|
340
393
|
resourceSelector.off('update');
|
|
341
394
|
resourceSelector.select(initialClassUri);
|
|
342
395
|
resolve();
|
|
343
|
-
});
|
|
396
|
+
});
|
|
344
397
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
*
|
|
349
|
-
*
|
|
398
|
+
// then new class is selected, set its label into class filter input and hide filter container, then request class properties
|
|
399
|
+
resourceSelector.on('change', selectedValue => {
|
|
400
|
+
/*
|
|
401
|
+
* on searchModal init we set manually the selector to the provided config.rootClassUri. When a selector
|
|
402
|
+
* is set manually Selector component execs @clearSelection which triggers a change event
|
|
403
|
+
* with an empty object as param. We catch this undesired behaviour here
|
|
350
404
|
*/
|
|
351
405
|
if (_.isEmpty(selectedValue)) {
|
|
352
406
|
return;
|
|
353
407
|
}
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
var uri = _.map(selectedValue, 'uri')[0];
|
|
360
|
-
|
|
361
|
-
var route = urlUtil.route('getWithMapping', 'ClassMetadata', 'tao', {
|
|
362
|
-
classUri: classUri,
|
|
408
|
+
const classUri = _.map(selectedValue, 'classUri')[0];
|
|
409
|
+
const label = _.map(selectedValue, 'label')[0];
|
|
410
|
+
const uri = _.map(selectedValue, 'uri')[0];
|
|
411
|
+
const route = urlUtil.build(instance.config.classMappingUrl, {
|
|
412
|
+
classUri,
|
|
363
413
|
maxListSize: instance.config.maxListSize
|
|
364
414
|
});
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
advancedSearch.updateCriteria(route).then(
|
|
369
|
-
return instance.trigger('criteriaListUpdated');
|
|
370
|
-
}).catch(function (e) {
|
|
371
|
-
return instance.trigger('error', e);
|
|
372
|
-
});
|
|
415
|
+
controls.$classFilterInput.html(label);
|
|
416
|
+
controls.$classFilterInput.data('uri', uri);
|
|
417
|
+
controls.$classTreeContainer.hide();
|
|
418
|
+
advancedSearch.updateCriteria(route).then(() => instance.trigger('criteriaListUpdated')).catch(e => instance.trigger('error', e));
|
|
373
419
|
});
|
|
374
420
|
setResourceSelectorUIBehaviour();
|
|
375
421
|
});
|
|
376
422
|
}
|
|
377
|
-
/**
|
|
378
|
-
* Loops through each class in received class tree and sets access mode to 'denied' on private classes
|
|
379
|
-
* so are disabled on class tree
|
|
380
|
-
* @param {object} classTree - class tree received by server, containing resources (classes) and permissions
|
|
381
|
-
*/
|
|
382
|
-
|
|
383
423
|
|
|
424
|
+
/**
|
|
425
|
+
* Loops through each class in received class tree and sets access mode to 'denied' on private classes
|
|
426
|
+
* so are disabled on class tree
|
|
427
|
+
* @param {object} classTree - class tree received by server, containing resources (classes) and permissions
|
|
428
|
+
*/
|
|
384
429
|
function manageClassTreePermissions(classTree) {
|
|
385
|
-
|
|
386
|
-
_.forEach(resources,
|
|
387
|
-
if (classTree.permissions.data[resource.uri] && classTree.permissions.data[resource.uri].find(
|
|
388
|
-
return permission === 'READ';
|
|
389
|
-
})) {
|
|
430
|
+
const disableBlockedClasses = function (resources) {
|
|
431
|
+
_.forEach(resources, (resource, index, array) => {
|
|
432
|
+
if (classTree.permissions.data[resource.uri] && classTree.permissions.data[resource.uri].find(permission => permission === 'READ')) {
|
|
390
433
|
if (resource.children) {
|
|
391
434
|
disableBlockedClasses(resource.children);
|
|
392
435
|
}
|
|
@@ -395,178 +438,321 @@ define(['jquery', 'lodash', 'i18n', 'context', 'handlebars', 'lib/dompurify/puri
|
|
|
395
438
|
}
|
|
396
439
|
});
|
|
397
440
|
};
|
|
398
|
-
|
|
399
441
|
disableBlockedClasses(classTree.resources);
|
|
400
442
|
}
|
|
401
|
-
/**
|
|
402
|
-
* Inits template selectors, buttons behaviour, scroll animation,
|
|
403
|
-
* and sets initial search query on search input
|
|
404
|
-
*/
|
|
405
|
-
|
|
406
443
|
|
|
444
|
+
/**
|
|
445
|
+
* Inits template selectors, buttons behaviour, scroll animation,
|
|
446
|
+
* and sets initial search query on search input
|
|
447
|
+
*/
|
|
407
448
|
function initUiSelectors() {
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
449
|
+
controls = {
|
|
450
|
+
$searchButton: $$1('.btn-search', $container),
|
|
451
|
+
$clearButton: $$1('.btn-clear', $container),
|
|
452
|
+
$searchInput: $$1('.generic-search-input', $container),
|
|
453
|
+
$classFilterInput: $$1('.class-filter', $container),
|
|
454
|
+
$classTreeContainer: $$1('.class-tree', $container),
|
|
455
|
+
$classFilterContainer: $$1('.class-filter-container', $container),
|
|
456
|
+
$filtersContainer: $$1('.filters-container', $container),
|
|
457
|
+
$contentArea: $$1('.content-area', $container),
|
|
458
|
+
$contentToolbar: $$1('.content-toolbar', $container)
|
|
459
|
+
};
|
|
460
|
+
controls.$searchButton.on('click', search);
|
|
461
|
+
controls.$clearButton.on('click', clear);
|
|
462
|
+
const shortcuts = shortcutRegistry(controls.$searchInput);
|
|
417
463
|
shortcuts.clear().add('enter', search);
|
|
418
|
-
|
|
464
|
+
controls.$searchInput.val(instance.config.criterias && instance.config.criterias.search ? instance.config.criterias.search : '');
|
|
419
465
|
}
|
|
420
|
-
/**
|
|
421
|
-
* Sets required listeners to properly manage resourceSelector visualization
|
|
422
|
-
*/
|
|
423
|
-
|
|
424
466
|
|
|
467
|
+
/**
|
|
468
|
+
* Sets required listeners to properly manage resourceSelector visualization
|
|
469
|
+
*/
|
|
425
470
|
function setResourceSelectorUIBehaviour() {
|
|
426
|
-
$container.on('mousedown',
|
|
427
|
-
|
|
471
|
+
$container.on('mousedown', () => {
|
|
472
|
+
controls.$classTreeContainer.hide();
|
|
428
473
|
});
|
|
429
|
-
/**
|
|
430
|
-
* Pressing space, enter, esc, backspace
|
|
431
|
-
* on class filter input will toggle resource selector
|
|
432
|
-
*/
|
|
433
474
|
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
shortcuts
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
shortcuts.add('backspace',
|
|
442
|
-
|
|
443
|
-
});
|
|
444
|
-
shortcuts.add('escape', function () {
|
|
445
|
-
return $classTreeContainer.hide();
|
|
446
|
-
}, {
|
|
475
|
+
/**
|
|
476
|
+
* Pressing space, enter, esc, backspace
|
|
477
|
+
* on class filter input will toggle resource selector
|
|
478
|
+
*/
|
|
479
|
+
const shortcuts = shortcutRegistry(controls.$classFilterInput);
|
|
480
|
+
shortcuts.add('enter', () => controls.$classTreeContainer.show());
|
|
481
|
+
shortcuts.add('space', () => controls.$classTreeContainer.show());
|
|
482
|
+
shortcuts.add('backspace', () => controls.$classTreeContainer.hide());
|
|
483
|
+
shortcuts.add('escape', () => controls.$classTreeContainer.hide(), {
|
|
447
484
|
propagate: false
|
|
448
485
|
});
|
|
449
|
-
/**
|
|
450
|
-
* clicking on class filter container will toggle resource selector
|
|
451
|
-
*/
|
|
452
486
|
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
});
|
|
456
|
-
/**
|
|
457
|
-
* clicking on class filter container will
|
|
458
|
-
* stopPropagation to prevent be closed
|
|
459
|
-
* by searchModal.mouseDown listener
|
|
487
|
+
/**
|
|
488
|
+
* clicking on class filter container will toggle resource selector
|
|
460
489
|
*/
|
|
490
|
+
controls.$classFilterContainer.on('click', e => {
|
|
491
|
+
controls.$classTreeContainer.toggle();
|
|
492
|
+
});
|
|
461
493
|
|
|
462
|
-
|
|
494
|
+
/**
|
|
495
|
+
* clicking on class filter container will
|
|
496
|
+
* stopPropagation to prevent be closed
|
|
497
|
+
* by searchModal.mouseDown listener
|
|
498
|
+
*/
|
|
499
|
+
controls.$classFilterContainer.on('mousedown', e => {
|
|
463
500
|
e.stopPropagation();
|
|
464
|
-
});
|
|
501
|
+
});
|
|
465
502
|
|
|
466
|
-
|
|
503
|
+
// clicking on resource selector will stopPropagation to prevent be closed by searchModal.mouseDown listener
|
|
504
|
+
controls.$classTreeContainer.on('mousedown', e => {
|
|
467
505
|
e.stopPropagation();
|
|
468
506
|
});
|
|
469
507
|
}
|
|
470
|
-
/**
|
|
471
|
-
* Loads search store so it is accessible in the component
|
|
472
|
-
* @returns {Promise}
|
|
473
|
-
*/
|
|
474
|
-
|
|
475
508
|
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
509
|
+
/**
|
|
510
|
+
* Loads search store so it is accessible in the component
|
|
511
|
+
* @returns {Promise}
|
|
512
|
+
*/
|
|
513
|
+
function initStores() {
|
|
514
|
+
return Promise.all([store('search').then(store => searchStore = store), store('selectedColumns').then(store => selectedColumnsStore = store)]).catch(e => instance.trigger('error', e));
|
|
482
515
|
}
|
|
483
|
-
|
|
484
|
-
|
|
516
|
+
|
|
517
|
+
/**
|
|
518
|
+
* Performs a search query
|
|
519
|
+
* @param query - The searched terms
|
|
520
|
+
* @param classFilterUri - The URI of the node class
|
|
521
|
+
* @param [params] - Additional parameters
|
|
522
|
+
* @returns {Promise}
|
|
485
523
|
*/
|
|
524
|
+
const searchQuery = function (query, classFilterUri) {
|
|
525
|
+
let params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
526
|
+
return new Promise((resolve, reject) => {
|
|
527
|
+
$$1.ajax({
|
|
528
|
+
url: instance.config.url,
|
|
529
|
+
type: 'POST',
|
|
530
|
+
data: _objectSpread2(_objectSpread2({}, params), {}, {
|
|
531
|
+
query: query,
|
|
532
|
+
parentNode: classFilterUri,
|
|
533
|
+
structure: context.shownStructure
|
|
534
|
+
}),
|
|
535
|
+
dataType: 'json'
|
|
536
|
+
}).done(resolve).fail(reject);
|
|
537
|
+
});
|
|
538
|
+
};
|
|
486
539
|
|
|
540
|
+
/**
|
|
541
|
+
* Performs the search query, preventing to send too many requests
|
|
542
|
+
* @param query - The searched terms
|
|
543
|
+
* @param classFilterUri - The URI of the node class
|
|
544
|
+
* @param [params] - Additional parameters
|
|
545
|
+
*/
|
|
546
|
+
const searchHandler = function (query, classFilterUri) {
|
|
547
|
+
let params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
548
|
+
if (running === false) {
|
|
549
|
+
running = true;
|
|
550
|
+
searchQuery(query, classFilterUri, params).then(data => data.data).then(buildDataModel).then(filterSelectedColumns).then(appendDefaultDatasetToDatatable).then(buildSearchResultsDatatable).catch(e => instance.trigger('error', e)).then(() => running = false);
|
|
551
|
+
}
|
|
552
|
+
};
|
|
487
553
|
|
|
554
|
+
/**
|
|
555
|
+
* Request search results and manages its results
|
|
556
|
+
*/
|
|
488
557
|
function search() {
|
|
489
|
-
|
|
490
|
-
var classFilterUri = isResourceSelector ? $classFilterInput.data('uri').trim() : rootClassUri; //throttle and control to prevent sending too many requests
|
|
491
|
-
|
|
492
|
-
var searchHandler = _.throttle(function (query) {
|
|
493
|
-
if (running === false) {
|
|
494
|
-
running = true;
|
|
495
|
-
$$1.ajax({
|
|
496
|
-
url: instance.config.url,
|
|
497
|
-
type: 'POST',
|
|
498
|
-
data: {
|
|
499
|
-
query: query,
|
|
500
|
-
parentNode: classFilterUri,
|
|
501
|
-
structure: context.shownStructure
|
|
502
|
-
},
|
|
503
|
-
dataType: 'json'
|
|
504
|
-
}).done(function (data) {
|
|
505
|
-
appendDefaultDatasetToDatatable(data.data).then(function () {
|
|
506
|
-
return buildSearchResultsDatatable(data.data);
|
|
507
|
-
}).catch(function (e) {
|
|
508
|
-
return instance.trigger('error', e);
|
|
509
|
-
});
|
|
510
|
-
}).always(function () {
|
|
511
|
-
return running = false;
|
|
512
|
-
});
|
|
513
|
-
}
|
|
514
|
-
}, 100);
|
|
515
|
-
|
|
516
|
-
searchHandler(query);
|
|
558
|
+
searchHandler(buildComplexQuery(), getClassFilterUri());
|
|
517
559
|
}
|
|
518
|
-
/**
|
|
519
|
-
* build final complex query appending every filter
|
|
520
|
-
*/
|
|
521
560
|
|
|
561
|
+
/**
|
|
562
|
+
* Returns selected class filter of rootClassUri
|
|
563
|
+
*/
|
|
564
|
+
function getClassFilterUri() {
|
|
565
|
+
return isResourceSelector ? controls.$classFilterInput.data('uri').trim() : rootClassUri;
|
|
566
|
+
}
|
|
522
567
|
|
|
568
|
+
/**
|
|
569
|
+
* build final complex query appending every filter
|
|
570
|
+
*/
|
|
523
571
|
function buildComplexQuery() {
|
|
524
|
-
|
|
525
|
-
var query = $searchInputValue;
|
|
572
|
+
let query = controls.$searchInput.val().trim();
|
|
526
573
|
query += advancedSearch.getAdvancedCriteriaQuery(query !== '');
|
|
527
574
|
return query;
|
|
528
575
|
}
|
|
529
|
-
/*
|
|
530
|
-
* If search on init is not required, extends data with stored dataset
|
|
531
|
-
* @param {object} data - search configuration including model and endpoint for datatable
|
|
532
|
-
* @returns {Promise}
|
|
533
|
-
*/
|
|
534
|
-
|
|
535
576
|
|
|
577
|
+
/*
|
|
578
|
+
* If search on init is not required, extends data with stored dataset
|
|
579
|
+
* @param {object} data - search configuration including model and endpoint for datatable
|
|
580
|
+
* @returns {Promise}
|
|
581
|
+
*/
|
|
536
582
|
function appendDefaultDatasetToDatatable(data) {
|
|
537
583
|
return new Promise(function (resolve, reject) {
|
|
538
584
|
// If no search on init, get dataset from searchStore
|
|
539
585
|
if (instance.config.searchOnInit === false) {
|
|
540
|
-
searchStore.getItem('results').then(
|
|
586
|
+
Promise.all([searchStore.getItem('results'), searchStore.getItem('options')]).then(fromStore => {
|
|
541
587
|
instance.config.searchOnInit = true;
|
|
542
|
-
data.storedSearchResults =
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
reject(new Error('Error appending default dataset from searchStore to datatable'
|
|
588
|
+
data.storedSearchResults = fromStore[0];
|
|
589
|
+
data.storedSearchOptions = fromStore[1];
|
|
590
|
+
resolve(data);
|
|
591
|
+
}).catch(e => {
|
|
592
|
+
reject(new Error('Error appending default dataset from searchStore to datatable', {
|
|
593
|
+
cause: e
|
|
594
|
+
}));
|
|
547
595
|
});
|
|
548
596
|
} else {
|
|
549
|
-
resolve();
|
|
597
|
+
resolve(data);
|
|
550
598
|
}
|
|
551
599
|
});
|
|
552
600
|
}
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
*
|
|
601
|
+
|
|
602
|
+
/**
|
|
603
|
+
* Replaces empty value by a placeholder.
|
|
604
|
+
* @param value
|
|
605
|
+
* @returns {string|*}
|
|
556
606
|
*/
|
|
607
|
+
const emptyValueTransform = value => {
|
|
608
|
+
let testedValue = value;
|
|
609
|
+
if (Array.isArray(testedValue)) {
|
|
610
|
+
testedValue = testedValue[0];
|
|
611
|
+
}
|
|
612
|
+
if ('string' === typeof testedValue) {
|
|
613
|
+
testedValue = testedValue.trim();
|
|
614
|
+
}
|
|
615
|
+
return testedValue === '' || testedValue === null || typeof testedValue === 'undefined' ? '-' : value;
|
|
616
|
+
};
|
|
557
617
|
|
|
618
|
+
/**
|
|
619
|
+
* Refines the columns to be compatible with the datatable model
|
|
620
|
+
* @param {object[]} columns
|
|
621
|
+
* @returns {object[]}
|
|
622
|
+
*/
|
|
623
|
+
function columnsToModel(columns) {
|
|
624
|
+
if (!Array.isArray(columns)) {
|
|
625
|
+
return [];
|
|
626
|
+
}
|
|
627
|
+
return columns.map(column => {
|
|
628
|
+
const {
|
|
629
|
+
id,
|
|
630
|
+
sortId,
|
|
631
|
+
label,
|
|
632
|
+
sortable,
|
|
633
|
+
isDuplicated
|
|
634
|
+
} = column;
|
|
635
|
+
let alias, comment, classLabel;
|
|
636
|
+
if (isDuplicated) {
|
|
637
|
+
alias = column.alias;
|
|
638
|
+
classLabel = column.classLabel; // needed by the property selector
|
|
639
|
+
comment = column.classLabel; // needed by the datatable
|
|
640
|
+
}
|
|
558
641
|
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
642
|
+
return {
|
|
643
|
+
id,
|
|
644
|
+
sortId,
|
|
645
|
+
label,
|
|
646
|
+
alias,
|
|
647
|
+
classLabel,
|
|
648
|
+
comment,
|
|
649
|
+
sortable,
|
|
650
|
+
transform: emptyValueTransform
|
|
651
|
+
};
|
|
652
|
+
});
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
/**
|
|
656
|
+
* Refines the data model for the datatable
|
|
657
|
+
* @param {object} data - search configuration including model and endpoint for datatable
|
|
658
|
+
* @returns {object} The data configuration refined with the data model for the datatrable
|
|
659
|
+
*/
|
|
660
|
+
function buildDataModel(data) {
|
|
661
|
+
//save availableColumns to memory
|
|
662
|
+
availableIdentifiers = {};
|
|
663
|
+
availableColumns = data.settings.availableColumns;
|
|
664
|
+
|
|
665
|
+
// The support for the old data.model coming from the server has been removed from the commit
|
|
666
|
+
// https://github.com/oat-sa/tao-core-ui-fe/commit/ae6c16a9199f9fc808bc8a37d2ddfce437a62e9c
|
|
667
|
+
// The data model is now coming from the settings carried on by the searchParams request.
|
|
668
|
+
data.model = columnsToModel(availableColumns);
|
|
669
|
+
data.model.forEach(column => availableIdentifiers[column.id] = true);
|
|
670
|
+
|
|
671
|
+
// adjust the default sorting and pagination
|
|
672
|
+
let {
|
|
673
|
+
sortby,
|
|
674
|
+
sortorder,
|
|
675
|
+
page
|
|
676
|
+
} = instance.config;
|
|
677
|
+
if (!sortorder || !['asc', 'desc'].includes(sortorder)) {
|
|
678
|
+
sortorder = 'asc';
|
|
679
|
+
}
|
|
680
|
+
const sortIdentifiers = [];
|
|
681
|
+
data.model.forEach(column => {
|
|
682
|
+
sortIdentifiers.push(column.sortId || column.id);
|
|
683
|
+
if (column.sortId && column.id === sortby) {
|
|
684
|
+
sortby = column.sortId;
|
|
685
|
+
}
|
|
686
|
+
});
|
|
687
|
+
if (!sortIdentifiers.includes(sortby)) {
|
|
688
|
+
// unknown sort identifier is rejected for safety
|
|
689
|
+
sortby = void 0;
|
|
690
|
+
sortorder = void 0;
|
|
691
|
+
}
|
|
692
|
+
data.pageConfig = {
|
|
693
|
+
sortby,
|
|
694
|
+
sortorder,
|
|
695
|
+
page
|
|
696
|
+
};
|
|
697
|
+
dataCache = _.cloneDeep(data);
|
|
698
|
+
return data;
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
/**
|
|
702
|
+
* Filters datatble model based on stored selected columns
|
|
703
|
+
* @param {Object} data data containing available columns and model for datatable
|
|
704
|
+
* @returns {Promise} promise which resolves with filtered data.model
|
|
705
|
+
*/
|
|
706
|
+
function filterSelectedColumns(data) {
|
|
707
|
+
return selectedColumnsStore.getItem(rootClassUri).then(storedSelectedColumnIds => {
|
|
708
|
+
selectedColumns = [];
|
|
709
|
+
if (storedSelectedColumnIds && storedSelectedColumnIds.length) {
|
|
710
|
+
storedSelectedColumnIds.forEach(id => {
|
|
711
|
+
if (availableIdentifiers[id]) {
|
|
712
|
+
selectedColumns.push(id);
|
|
713
|
+
}
|
|
714
|
+
});
|
|
715
|
+
}
|
|
716
|
+
if (!selectedColumns.length) {
|
|
717
|
+
selectedColumns = data.settings.availableColumns.reduce((acc, column) => {
|
|
718
|
+
if (column.default) {
|
|
719
|
+
acc.push(column.id);
|
|
720
|
+
}
|
|
721
|
+
return acc;
|
|
722
|
+
}, []);
|
|
723
|
+
}
|
|
724
|
+
data.model = data.model.filter(column => selectedColumns.includes(column.id));
|
|
725
|
+
return data;
|
|
726
|
+
}).catch(e => {
|
|
727
|
+
instance.trigger('error', e);
|
|
728
|
+
});
|
|
729
|
+
}
|
|
566
730
|
|
|
731
|
+
/**
|
|
732
|
+
* Creates a datatable with search results
|
|
733
|
+
* @param {object} data - search configuration including model and endpoint for datatable
|
|
734
|
+
*/
|
|
735
|
+
function buildSearchResultsDatatable(data) {
|
|
736
|
+
// Note: the table container needs to be recreated because datatable is storing data in it.
|
|
737
|
+
// Keeping the table container introduces a DOM pollution.
|
|
738
|
+
// It is faster and cleaner to recreate the container than cleaning it explicitly.
|
|
739
|
+
const $tableContainer = $$1(resultsContainerTpl());
|
|
740
|
+
const $contentContainer = controls.$contentArea.empty();
|
|
741
|
+
$contentContainer.append($tableContainer);
|
|
742
|
+
$tableContainer.on('load.datatable', searchResultsLoaded);
|
|
743
|
+
const {
|
|
744
|
+
sortby,
|
|
745
|
+
sortorder,
|
|
746
|
+
page
|
|
747
|
+
} = data.storedSearchOptions || data.pageConfig;
|
|
748
|
+
|
|
749
|
+
//create datatable
|
|
567
750
|
$tableContainer.datatable({
|
|
568
751
|
url: data.url,
|
|
569
|
-
model:
|
|
752
|
+
model: data.model,
|
|
753
|
+
sortby,
|
|
754
|
+
sortorder,
|
|
755
|
+
page,
|
|
570
756
|
labels: {
|
|
571
757
|
actions: ''
|
|
572
758
|
},
|
|
@@ -585,64 +771,163 @@ define(['jquery', 'lodash', 'i18n', 'context', 'handlebars', 'lib/dompurify/puri
|
|
|
585
771
|
}
|
|
586
772
|
}, data.storedSearchResults);
|
|
587
773
|
}
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
*/
|
|
774
|
+
function getTableOptions() {
|
|
775
|
+
const $tableContainer = $$1('.results-container', $container);
|
|
776
|
+
return _.cloneDeep($tableContainer.data('ui.datatable') || {});
|
|
777
|
+
}
|
|
593
778
|
|
|
779
|
+
/**
|
|
780
|
+
* Filters data from cache by selected and recreates datatable
|
|
781
|
+
* @params {object} options - Additional options to be given to the datatable
|
|
782
|
+
*/
|
|
783
|
+
function recreateDatatable() {
|
|
784
|
+
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
785
|
+
const data = Object.assign(_.cloneDeep(dataCache), options);
|
|
786
|
+
filterSelectedColumns(data).then(buildSearchResultsDatatable);
|
|
787
|
+
}
|
|
594
788
|
|
|
789
|
+
/**
|
|
790
|
+
* Triggered on load.datatable event, it updates searchStore and manages possible exceptions
|
|
791
|
+
* @param {object} e - load.datatable event
|
|
792
|
+
* @param {object} dataset - datatable dataset
|
|
793
|
+
*/
|
|
595
794
|
function searchResultsLoaded(e, dataset) {
|
|
795
|
+
const $contentToolbar = controls.$contentToolbar.empty();
|
|
796
|
+
if (instance.isAdvancedSearchEnabled()) {
|
|
797
|
+
const $manageColumnsBtn = $$1(propertySelectButtonTpl());
|
|
798
|
+
$contentToolbar.append($manageColumnsBtn);
|
|
799
|
+
$manageColumnsBtn.on('click', handleManageColumnsBtnClick);
|
|
800
|
+
}
|
|
801
|
+
const {
|
|
802
|
+
sortby,
|
|
803
|
+
sortorder
|
|
804
|
+
} = getTableOptions();
|
|
596
805
|
if (dataset.records === 0) {
|
|
597
806
|
replaceSearchResultsDatatableWithMessage('no-matches');
|
|
598
807
|
}
|
|
599
|
-
|
|
600
|
-
instance.trigger("datatable-loaded");
|
|
808
|
+
instance.trigger('datatable-loaded');
|
|
601
809
|
updateSearchStore({
|
|
602
810
|
action: 'update',
|
|
603
|
-
dataset
|
|
811
|
+
dataset,
|
|
812
|
+
options: {
|
|
813
|
+
sortby,
|
|
814
|
+
sortorder
|
|
815
|
+
},
|
|
604
816
|
context: context.shownStructure,
|
|
605
817
|
criterias: {
|
|
606
|
-
search:
|
|
818
|
+
search: controls.$searchInput && controls.$searchInput.val(),
|
|
607
819
|
class: isResourceSelector ? _.map(resourceSelector.getSelection(), 'uri')[0] : rootClassUri,
|
|
608
820
|
advancedCriteria: advancedSearch.getState()
|
|
609
821
|
}
|
|
610
822
|
});
|
|
611
823
|
}
|
|
612
|
-
/**
|
|
613
|
-
* Updates searchStore. If action is 'clear', searchStore is claread. If not, received
|
|
614
|
-
* data is assigned to searchStore. Once all actions have been done,
|
|
615
|
-
* store-updated event is triggered
|
|
616
|
-
* @param {object} data - data to store
|
|
617
|
-
*/
|
|
618
824
|
|
|
825
|
+
/**
|
|
826
|
+
* Handler for manage columns button click
|
|
827
|
+
* @param {Event} e
|
|
828
|
+
*/
|
|
829
|
+
function handleManageColumnsBtnClick(e) {
|
|
830
|
+
const selected = selectedColumns;
|
|
831
|
+
const available = columnsToModel(availableColumns);
|
|
832
|
+
if (!propertySelectorInstance) {
|
|
833
|
+
const {
|
|
834
|
+
bottom: btnBottom,
|
|
835
|
+
right: btnRight
|
|
836
|
+
} = this.getBoundingClientRect();
|
|
837
|
+
const {
|
|
838
|
+
top: containerTop,
|
|
839
|
+
right: containerRight
|
|
840
|
+
} = $container.get(0).getBoundingClientRect();
|
|
841
|
+
const position = {
|
|
842
|
+
top: btnBottom - containerTop,
|
|
843
|
+
right: containerRight - btnRight
|
|
844
|
+
};
|
|
845
|
+
propertySelectorInstance = propertySelectorFactory({
|
|
846
|
+
renderTo: $container,
|
|
847
|
+
data: {
|
|
848
|
+
position,
|
|
849
|
+
available,
|
|
850
|
+
selected
|
|
851
|
+
}
|
|
852
|
+
});
|
|
853
|
+
propertySelectorInstance.on('select', selection => {
|
|
854
|
+
if (selection.length !== selectedColumns.length || selection.some(columnId => !selectedColumns.includes(columnId))) {
|
|
855
|
+
//update table
|
|
856
|
+
selectedColumns = selection;
|
|
857
|
+
const {
|
|
858
|
+
sortby,
|
|
859
|
+
sortorder,
|
|
860
|
+
page
|
|
861
|
+
} = getTableOptions();
|
|
862
|
+
updateSelectedStore({
|
|
863
|
+
selection,
|
|
864
|
+
sortby,
|
|
865
|
+
sortorder,
|
|
866
|
+
page
|
|
867
|
+
});
|
|
868
|
+
}
|
|
869
|
+
});
|
|
870
|
+
} else {
|
|
871
|
+
propertySelectorInstance.setData({
|
|
872
|
+
available,
|
|
873
|
+
selected
|
|
874
|
+
});
|
|
875
|
+
propertySelectorInstance.toggle();
|
|
876
|
+
}
|
|
877
|
+
}
|
|
619
878
|
|
|
879
|
+
/**
|
|
880
|
+
* Updates searchStore. If action is 'clear', searchStore is claread. If not, received
|
|
881
|
+
* data is assigned to searchStore. Once all actions have been done,
|
|
882
|
+
* store-updated event is triggered
|
|
883
|
+
* @param {object} data - data to store
|
|
884
|
+
*/
|
|
620
885
|
function updateSearchStore(data) {
|
|
621
|
-
|
|
622
|
-
|
|
886
|
+
const promises = [];
|
|
623
887
|
if (data.action === 'clear') {
|
|
624
888
|
promises.push(searchStore.clear());
|
|
625
889
|
} else if (data.action === 'update') {
|
|
626
890
|
promises.push(searchStore.setItem('criterias', data.criterias));
|
|
627
891
|
promises.push(searchStore.setItem('context', data.context));
|
|
892
|
+
promises.push(searchStore.setItem('options', data.options));
|
|
628
893
|
promises.push(data.dataset.records === 0 ? searchStore.removeItem('results') : searchStore.setItem('results', data.dataset));
|
|
629
894
|
}
|
|
630
|
-
|
|
631
|
-
Promise.all(promises).then(function () {
|
|
632
|
-
return instance.trigger("store-updated");
|
|
633
|
-
}).catch(function (e) {
|
|
634
|
-
return instance.trigger('error', e);
|
|
635
|
-
});
|
|
895
|
+
Promise.all(promises).then(() => instance.trigger('store-updated')).catch(e => instance.trigger('error', e));
|
|
636
896
|
}
|
|
637
|
-
/**
|
|
638
|
-
* Clear search input, criteria and results from both, view and store.
|
|
639
|
-
* Also sets every criterion on criteriaState to unredered and
|
|
640
|
-
* undefined value
|
|
641
|
-
*/
|
|
642
897
|
|
|
898
|
+
/**
|
|
899
|
+
*
|
|
900
|
+
* @param {object} update - The changed configuration
|
|
901
|
+
* @param {Array<string>} update.selection - array of column ids to display
|
|
902
|
+
* @param {string} update.sortby - The sorted column
|
|
903
|
+
* @param {string} update.sortorder - The sort order
|
|
904
|
+
* @param {number} update.page - The current page
|
|
905
|
+
* @returns
|
|
906
|
+
*/
|
|
907
|
+
function updateSelectedStore() {
|
|
908
|
+
let {
|
|
909
|
+
selection = [],
|
|
910
|
+
sortby = 'id',
|
|
911
|
+
sortorder = 'asc',
|
|
912
|
+
page = 1
|
|
913
|
+
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
914
|
+
const storedSearchOptions = {
|
|
915
|
+
sortby,
|
|
916
|
+
sortorder,
|
|
917
|
+
page
|
|
918
|
+
};
|
|
919
|
+
return selectedColumnsStore.setItem(rootClassUri, selection).then(() => instance.trigger('selected-store-updated', {
|
|
920
|
+
storedSearchOptions
|
|
921
|
+
})).catch(e => instance.trigger('error', e));
|
|
922
|
+
}
|
|
643
923
|
|
|
924
|
+
/**
|
|
925
|
+
* Clear search input, criteria and results from both, view and store.
|
|
926
|
+
* Also sets every criterion on criteriaState to unredered and
|
|
927
|
+
* undefined value
|
|
928
|
+
*/
|
|
644
929
|
function clear() {
|
|
645
|
-
|
|
930
|
+
controls.$searchInput.val('');
|
|
646
931
|
advancedSearch.clear();
|
|
647
932
|
isResourceSelector && resourceSelector.select(rootClassUri);
|
|
648
933
|
replaceSearchResultsDatatableWithMessage('no-query');
|
|
@@ -650,18 +935,14 @@ define(['jquery', 'lodash', 'i18n', 'context', 'handlebars', 'lib/dompurify/puri
|
|
|
650
935
|
action: 'clear'
|
|
651
936
|
});
|
|
652
937
|
}
|
|
653
|
-
/**
|
|
654
|
-
* Removes datatable container and displays a message instead
|
|
655
|
-
* @param {string} reason - reason why datatable is not rendered, to display appropiate message
|
|
656
|
-
*/
|
|
657
|
-
|
|
658
938
|
|
|
939
|
+
/**
|
|
940
|
+
* Removes datatable container and displays a message instead
|
|
941
|
+
* @param {string} reason - reason why datatable is not rendered, to display appropiate message
|
|
942
|
+
*/
|
|
659
943
|
function replaceSearchResultsDatatableWithMessage(reason) {
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
var message = '';
|
|
663
|
-
var icon = '';
|
|
664
|
-
|
|
944
|
+
let message = '';
|
|
945
|
+
let icon = '';
|
|
665
946
|
if (reason === 'no-query') {
|
|
666
947
|
message = __('Please define your search in the search panel.');
|
|
667
948
|
icon = 'icon-find';
|
|
@@ -669,15 +950,15 @@ define(['jquery', 'lodash', 'i18n', 'context', 'handlebars', 'lib/dompurify/puri
|
|
|
669
950
|
message = __('No item found. Please try other search criteria.');
|
|
670
951
|
icon = 'icon-info';
|
|
671
952
|
}
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
icon: icon
|
|
953
|
+
const infoMessage = infoMessageTpl({
|
|
954
|
+
message,
|
|
955
|
+
icon
|
|
676
956
|
});
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
957
|
+
controls.$contentToolbar.empty();
|
|
958
|
+
controls.$contentArea.empty().append(infoMessage);
|
|
959
|
+
}
|
|
680
960
|
|
|
961
|
+
// return initialized instance of searchModal
|
|
681
962
|
return instance.init(config);
|
|
682
963
|
}
|
|
683
964
|
|