@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.
Files changed (783) hide show
  1. package/LICENSE +339 -339
  2. package/README.md +23 -18
  3. package/dist/actionbar.js +393 -410
  4. package/dist/adder.js +143 -156
  5. package/dist/animable/absorbable/absorbable.js +208 -211
  6. package/dist/animable/absorbable/css/absorb.css +7 -8
  7. package/dist/animable/absorbable/css/absorb.css.map +1 -1
  8. package/dist/animable/pulsable/css/pulse.css +7 -7
  9. package/dist/animable/pulsable/css/pulse.css.map +1 -1
  10. package/dist/animable/pulsable/pulsable.js +174 -174
  11. package/dist/areaBroker.js +59 -72
  12. package/dist/autocomplete/css/autocomplete.css +7 -8
  13. package/dist/autocomplete/css/autocomplete.css.map +1 -1
  14. package/dist/autocomplete.js +494 -604
  15. package/dist/autoscroll.js +23 -25
  16. package/dist/badge/badge.js +201 -199
  17. package/dist/badge/css/badge.css +7 -8
  18. package/dist/badge/css/badge.css.map +1 -1
  19. package/dist/breadcrumbs/css/breadcrumbs.css +7 -7
  20. package/dist/breadcrumbs/css/breadcrumbs.css.map +1 -1
  21. package/dist/breadcrumbs.js +286 -285
  22. package/dist/btngrouper.js +83 -95
  23. package/dist/bulkActionPopup/css/bulkActionPopup.css +7 -7
  24. package/dist/bulkActionPopup/css/bulkActionPopup.css.map +1 -1
  25. package/dist/bulkActionPopup.js +503 -503
  26. package/dist/button.js +300 -293
  27. package/dist/calculator/css/calculator.css +10 -10
  28. package/dist/calculator/css/calculator.css.map +1 -1
  29. package/dist/calculator.js +59 -72
  30. package/dist/cascadingComboBox.js +257 -256
  31. package/dist/ckeditor/ckConfigurator.js +130 -154
  32. package/dist/ckeditor/dtdHandler.js +305 -345
  33. package/dist/class/css/selector.css +7 -7
  34. package/dist/class/css/selector.css.map +1 -1
  35. package/dist/class/selector.js +437 -470
  36. package/dist/component/alignable.js +97 -121
  37. package/dist/component/containable.js +53 -58
  38. package/dist/component/css/components.css +7 -7
  39. package/dist/component/css/components.css.map +1 -1
  40. package/dist/component/css/windowComponent.css +7 -7
  41. package/dist/component/css/windowComponent.css.map +1 -1
  42. package/dist/component/draggable.js +34 -36
  43. package/dist/component/placeable.js +84 -102
  44. package/dist/component/resizable.js +79 -89
  45. package/dist/component/stackable.js +21 -27
  46. package/dist/component/windowed.js +284 -297
  47. package/dist/component.js +439 -467
  48. package/dist/container.js +79 -98
  49. package/dist/contextualPopup/css/contextualPopup.css +7 -7
  50. package/dist/contextualPopup/css/contextualPopup.css.map +1 -1
  51. package/dist/contextualPopup.js +417 -436
  52. package/dist/dashboard/css/dashboard.css +7 -7
  53. package/dist/dashboard/css/dashboard.css.map +1 -1
  54. package/dist/dashboard.js +302 -305
  55. package/dist/datalist/css/datalist.css +7 -7
  56. package/dist/datalist/css/datalist.css.map +1 -1
  57. package/dist/datalist.js +783 -791
  58. package/dist/datatable/css/datatable.css +11 -7
  59. package/dist/datatable/css/datatable.css.map +1 -1
  60. package/dist/datatable/filterStrategy/filterStrategy.js +28 -30
  61. package/dist/datatable/filterStrategy/multiple.js +26 -45
  62. package/dist/datatable/filterStrategy/single.js +28 -40
  63. package/dist/datatable.js +1591 -1616
  64. package/dist/dateRange/css/dateRange.css +7 -7
  65. package/dist/dateRange/css/dateRange.css.map +1 -1
  66. package/dist/dateRange/dateRange.js +398 -412
  67. package/dist/datetime/css/picker.css +7 -7
  68. package/dist/datetime/css/picker.css.map +1 -1
  69. package/dist/datetime/picker.js +670 -703
  70. package/dist/deleter.js +383 -398
  71. package/dist/destination/css/selector.css +7 -7
  72. package/dist/destination/css/selector.css.map +1 -1
  73. package/dist/destination/selector.js +295 -293
  74. package/dist/dialog/alert.js +30 -32
  75. package/dist/dialog/confirm.js +29 -32
  76. package/dist/dialog/confirmDelete.js +223 -221
  77. package/dist/dialog.js +651 -695
  78. package/dist/disabler.js +108 -119
  79. package/dist/documentViewer/css/documentViewer.css +7 -7
  80. package/dist/documentViewer/css/documentViewer.css.map +1 -1
  81. package/dist/documentViewer/providers/pdfViewer/fallback/viewer.js +172 -169
  82. package/dist/documentViewer/providers/pdfViewer/pdfjs/areaBroker.js +32 -29
  83. package/dist/documentViewer/providers/pdfViewer/pdfjs/findBar.js +523 -564
  84. package/dist/documentViewer/providers/pdfViewer/pdfjs/pageView.js +376 -393
  85. package/dist/documentViewer/providers/pdfViewer/pdfjs/pagesManager.js +53 -68
  86. package/dist/documentViewer/providers/pdfViewer/pdfjs/searchEngine.js +517 -567
  87. package/dist/documentViewer/providers/pdfViewer/pdfjs/textManager.js +73 -96
  88. package/dist/documentViewer/providers/pdfViewer/pdfjs/viewer.js +381 -392
  89. package/dist/documentViewer/providers/pdfViewer/pdfjs/wrapper.js +125 -152
  90. package/dist/documentViewer/providers/pdfViewer.js +189 -191
  91. package/dist/documentViewer/viewerFactory.js +76 -81
  92. package/dist/documentViewer.js +303 -311
  93. package/dist/dropdown/css/dropdown.css +7 -7
  94. package/dist/dropdown/css/dropdown.css.map +1 -1
  95. package/dist/dropdown.js +392 -412
  96. package/dist/durationer.js +77 -85
  97. package/dist/dynamicComponent/css/dynamicComponent.css +7 -7
  98. package/dist/dynamicComponent/css/dynamicComponent.css.map +1 -1
  99. package/dist/dynamicComponent.js +595 -630
  100. package/dist/feedback.js +365 -375
  101. package/dist/figure/FigureStateActive.js +246 -296
  102. package/dist/filesender.js +44 -54
  103. package/dist/filter.js +244 -240
  104. package/dist/form/css/dropdownForm.css +7 -7
  105. package/dist/form/css/dropdownForm.css.map +1 -1
  106. package/dist/form/css/form.css +7 -7
  107. package/dist/form/css/form.css.map +1 -1
  108. package/dist/form/dropdownForm.js +357 -362
  109. package/dist/form/form.js +703 -984
  110. package/dist/form/simpleForm.js +74 -77
  111. package/dist/form/validator/css/validator.css +7 -7
  112. package/dist/form/validator/css/validator.css.map +1 -1
  113. package/dist/form/validator/renderer.js +235 -241
  114. package/dist/form/validator/validator.js +181 -267
  115. package/dist/form/widget/css/widget.css +7 -7
  116. package/dist/form/widget/css/widget.css.map +1 -1
  117. package/dist/form/widget/definitions.js +27 -28
  118. package/dist/form/widget/loader.js +16 -16
  119. package/dist/form/widget/providers/checkBox.js +257 -264
  120. package/dist/form/widget/providers/comboBox.js +194 -193
  121. package/dist/form/widget/providers/default.js +44 -50
  122. package/dist/form/widget/providers/hidden.js +179 -176
  123. package/dist/form/widget/providers/hiddenBox.js +262 -272
  124. package/dist/form/widget/providers/radioBox.js +222 -223
  125. package/dist/form/widget/providers/textArea.js +197 -193
  126. package/dist/form/widget/providers/textBox.js +36 -37
  127. package/dist/form/widget/widget.js +480 -508
  128. package/dist/form.js +12 -17
  129. package/dist/formValidator/formValidator.js +74 -91
  130. package/dist/formValidator/highlighters/highlighter.js +43 -51
  131. package/dist/formValidator/highlighters/message.js +31 -32
  132. package/dist/formValidator/highlighters/tooltip.js +33 -35
  133. package/dist/generis/form/css/form.css +7 -7
  134. package/dist/generis/form/css/form.css.map +1 -1
  135. package/dist/generis/form/form.js +323 -331
  136. package/dist/generis/validator/css/validator.css +7 -7
  137. package/dist/generis/validator/css/validator.css.map +1 -1
  138. package/dist/generis/validator/validator.js +215 -216
  139. package/dist/generis/widget/checkBox/checkBox.js +227 -225
  140. package/dist/generis/widget/comboBox/comboBox.js +189 -183
  141. package/dist/generis/widget/css/widget.css +7 -7
  142. package/dist/generis/widget/css/widget.css.map +1 -1
  143. package/dist/generis/widget/hiddenBox/hiddenBox.js +231 -232
  144. package/dist/generis/widget/loader.js +21 -23
  145. package/dist/generis/widget/textBox/textBox.js +178 -172
  146. package/dist/generis/widget/widget.js +255 -266
  147. package/dist/groupedComboBox.js +231 -226
  148. package/dist/groupvalidator.js +30 -34
  149. package/dist/hider.js +43 -50
  150. package/dist/highlighter.js +946 -1057
  151. package/dist/image/ImgStateActive/extractLabel.js +20 -21
  152. package/dist/image/ImgStateActive/helper.js +21 -25
  153. package/dist/image/ImgStateActive/initHelper.js +133 -162
  154. package/dist/image/ImgStateActive/initMediaEditor.js +72 -92
  155. package/dist/image/ImgStateActive/mediaSizer.js +48 -58
  156. package/dist/image/ImgStateActive.js +185 -215
  157. package/dist/incrementer.js +91 -110
  158. package/dist/inplacer.js +108 -132
  159. package/dist/interactUtils.js +56 -67
  160. package/dist/itemButtonList/css/item-button-list.css +23 -24
  161. package/dist/itemButtonList/css/item-button-list.css.map +1 -1
  162. package/dist/itemButtonList.js +444 -469
  163. package/dist/keyNavigation/navigableDomElement.js +124 -158
  164. package/dist/keyNavigation/navigator.js +235 -312
  165. package/dist/listbox/css/listbox.css +7 -7
  166. package/dist/listbox/css/listbox.css.map +1 -1
  167. package/dist/listbox.js +463 -476
  168. package/dist/liststyler.js +75 -76
  169. package/dist/loadingButton/css/button.css +7 -7
  170. package/dist/loadingButton/css/button.css.map +1 -1
  171. package/dist/loadingButton/loadingButton.js +219 -218
  172. package/dist/lock.js +484 -509
  173. package/dist/login/login.js +471 -486
  174. package/dist/maths/calculator/basicCalculator.js +247 -242
  175. package/dist/maths/calculator/calculatorComponent.js +34 -36
  176. package/dist/maths/calculator/core/areaBroker.js +30 -28
  177. package/dist/maths/calculator/core/board.js +805 -872
  178. package/dist/maths/calculator/core/expression.js +500 -518
  179. package/dist/maths/calculator/core/labels.js +240 -235
  180. package/dist/maths/calculator/core/plugin.js +20 -20
  181. package/dist/maths/calculator/core/terms.js +27 -27
  182. package/dist/maths/calculator/core/tokenizer.js +119 -132
  183. package/dist/maths/calculator/core/tokens.js +157 -168
  184. package/dist/maths/calculator/css/calculator.css +7 -7
  185. package/dist/maths/calculator/css/calculator.css.map +1 -1
  186. package/dist/maths/calculator/defaultCalculator.js +24 -27
  187. package/dist/maths/calculator/plugins/core/degrad.js +22 -30
  188. package/dist/maths/calculator/plugins/core/history.js +55 -67
  189. package/dist/maths/calculator/plugins/core/remind.js +22 -25
  190. package/dist/maths/calculator/plugins/core/stepNavigation.js +33 -49
  191. package/dist/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +255 -258
  192. package/dist/maths/calculator/plugins/modifiers/pow10.js +47 -52
  193. package/dist/maths/calculator/plugins/modifiers/sign.js +103 -130
  194. package/dist/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +288 -293
  195. package/dist/maths/calculator/pluginsLoader.js +22 -22
  196. package/dist/maths/calculator/scientificCalculator.js +339 -334
  197. package/dist/mediaEditor/mediaEditorComponent.js +244 -249
  198. package/dist/mediaEditor/plugins/mediaAlignment/helper.js +28 -33
  199. package/dist/mediaEditor/plugins/mediaAlignment/mediaAlignmentComponent.js +228 -236
  200. package/dist/mediaEditor/plugins/mediaAlignment/style.css +7 -7
  201. package/dist/mediaEditor/plugins/mediaDimension/helper.js +81 -106
  202. package/dist/mediaEditor/plugins/mediaDimension/mediaDimensionComponent.js +597 -635
  203. package/dist/mediaEditor/plugins/mediaDimension/style.css +141 -141
  204. package/dist/mediaplayer/css/player.css +7 -7
  205. package/dist/mediaplayer/css/player.css.map +1 -1
  206. package/dist/mediaplayer/players/html5.js +646 -706
  207. package/dist/mediaplayer/players/youtube.js +393 -438
  208. package/dist/mediaplayer/players.js +19 -19
  209. package/dist/mediaplayer/support.js +66 -79
  210. package/dist/mediaplayer/utils/reminder.js +117 -128
  211. package/dist/mediaplayer/utils/timeObserver.js +106 -109
  212. package/dist/mediaplayer/youtubeManager.js +142 -170
  213. package/dist/mediaplayer.js +1484 -1774
  214. package/dist/mediasizer.js +633 -676
  215. package/dist/modal.js +137 -153
  216. package/dist/movableComponent.js +37 -37
  217. package/dist/pageSizeSelector.js +231 -224
  218. package/dist/pageStatus.js +43 -46
  219. package/dist/pagination/css/pagination.css +7 -7
  220. package/dist/pagination/css/pagination.css.map +1 -1
  221. package/dist/pagination/paginationStrategy.js +24 -25
  222. package/dist/pagination/providers/pages.js +281 -291
  223. package/dist/pagination/providers/simple.js +202 -196
  224. package/dist/pagination.js +49 -72
  225. package/dist/previewer.js +113 -138
  226. package/dist/progressbar.js +70 -80
  227. package/dist/propertySelector/css/propertySelector.css +74 -0
  228. package/dist/propertySelector/css/propertySelector.css.map +1 -0
  229. package/dist/propertySelector/propertySelector.js +489 -0
  230. package/dist/report.js +356 -359
  231. package/dist/resource/css/selector.css +7 -7
  232. package/dist/resource/css/selector.css.map +1 -1
  233. package/dist/resource/filters.js +275 -289
  234. package/dist/resource/list.js +1589 -1371
  235. package/dist/resource/selectable.js +101 -136
  236. package/dist/resource/selector.js +855 -914
  237. package/dist/resource/tree.js +1796 -1612
  238. package/dist/resourcemgr/css/resourcemgr.css +7 -7
  239. package/dist/resourcemgr/css/resourcemgr.css.map +1 -1
  240. package/dist/resourcemgr/fileBrowser.js +540 -587
  241. package/dist/resourcemgr/filePreview.js +16 -25
  242. package/dist/resourcemgr/fileSelector.js +520 -547
  243. package/dist/resourcemgr/util/updatePermissions.js +10 -18
  244. package/dist/resourcemgr.js +325 -332
  245. package/dist/scroller.js +29 -33
  246. package/dist/searchModal/advancedSearch.js +949 -833
  247. package/dist/searchModal/css/advancedSearch.css +7 -14
  248. package/dist/searchModal/css/advancedSearch.css.map +1 -1
  249. package/dist/searchModal/css/searchModal.css +28 -8
  250. package/dist/searchModal/css/searchModal.css.map +1 -1
  251. package/dist/searchModal.js +616 -335
  252. package/dist/selecter.js +21 -28
  253. package/dist/stacker.js +52 -60
  254. package/dist/switch/css/switch.css +7 -7
  255. package/dist/switch/css/switch.css.map +1 -1
  256. package/dist/switch/switch.js +305 -311
  257. package/dist/tableModel.js +39 -49
  258. package/dist/tabs/css/tabs.css +12 -12
  259. package/dist/tabs/css/tabs.css.map +1 -1
  260. package/dist/tabs.js +588 -639
  261. package/dist/taskQueue/css/taskQueue.css +7 -7
  262. package/dist/taskQueue/css/taskQueue.css.map +1 -1
  263. package/dist/taskQueue/status.js +317 -322
  264. package/dist/taskQueue/table.js +383 -394
  265. package/dist/taskQueue/taskQueue.js +19 -19
  266. package/dist/taskQueue/taskQueueModel.js +459 -538
  267. package/dist/taskQueue.js +49 -67
  268. package/dist/taskQueueButton/css/taskable.css +7 -7
  269. package/dist/taskQueueButton/css/taskable.css.map +1 -1
  270. package/dist/taskQueueButton/css/treeButton.css +7 -7
  271. package/dist/taskQueueButton/css/treeButton.css.map +1 -1
  272. package/dist/taskQueueButton/standardButton.js +45 -43
  273. package/dist/taskQueueButton/taskable.js +267 -272
  274. package/dist/taskQueueButton/treeButton.js +200 -198
  275. package/dist/themeLoader.js +109 -129
  276. package/dist/themes.js +86 -100
  277. package/dist/toggler.js +76 -88
  278. package/dist/tooltip.js +296 -311
  279. package/dist/tooltipster.js +17 -17
  280. package/dist/transformer.js +140 -169
  281. package/dist/tristateCheckboxGroup/css/tristateCheckboxGroup.css +7 -7
  282. package/dist/tristateCheckboxGroup/css/tristateCheckboxGroup.css.map +1 -1
  283. package/dist/tristateCheckboxGroup.js +319 -325
  284. package/dist/uploader.js +691 -724
  285. package/dist/validator/Report.js +1 -2
  286. package/dist/validator/Validator.js +6 -25
  287. package/dist/validator/validators.js +66 -80
  288. package/dist/validator.js +218 -254
  289. package/dist/waitForMedia.js +45 -51
  290. package/dist/waitingDialog/css/waitingDialog.css +7 -7
  291. package/dist/waitingDialog/css/waitingDialog.css.map +1 -1
  292. package/dist/waitingDialog/waitingDialog.js +59 -77
  293. package/package.json +109 -107
  294. package/scss/basic.scss +16 -16
  295. package/scss/ckeditor/skins/tao/scss/inc/_ck-icons.scss +59 -59
  296. package/scss/ckeditor/skins/tao/scss/inc/_tao.scss +59 -59
  297. package/scss/font/tao/tao.svg +234 -234
  298. package/scss/inc/_base.scss +495 -495
  299. package/scss/inc/_bootstrap.scss +6 -6
  300. package/scss/inc/_buttons.scss +114 -114
  301. package/scss/inc/_colors.scss +93 -88
  302. package/scss/inc/_feedback.scss +150 -150
  303. package/scss/inc/_flex-grid.scss +15 -15
  304. package/scss/inc/_fonts.scss +4 -4
  305. package/scss/inc/_forms.scss +832 -832
  306. package/scss/inc/_functions.scss +283 -283
  307. package/scss/inc/_jquery.nouislider.scss +254 -254
  308. package/scss/inc/_normalize.scss +528 -528
  309. package/scss/inc/_report.scss +67 -67
  310. package/scss/inc/_secondary-properties.scss +89 -89
  311. package/scss/inc/_select2.scss +634 -634
  312. package/scss/inc/_toolbars.scss +155 -155
  313. package/scss/inc/_tooltip.scss +312 -312
  314. package/scss/inc/_variables.scss +21 -21
  315. package/scss/inc/base/_highlight.scss +5 -5
  316. package/scss/inc/base/_list-style.scss +58 -58
  317. package/scss/inc/base/_svg.scss +3 -3
  318. package/scss/inc/base/_table.scss +62 -62
  319. package/scss/inc/fonts/_source-sans-pro.scss +29 -29
  320. package/scss/inc/fonts/_tao-icon-classes.scss +226 -226
  321. package/scss/inc/fonts/_tao-icon-def.scss +12 -12
  322. package/scss/inc/fonts/_tao-icon-vars.scss +240 -240
  323. package/src/actionbar/tpl/main.tpl +8 -8
  324. package/src/actionbar.js +251 -251
  325. package/src/adder.js +250 -250
  326. package/src/animable/absorbable/absorbable.js +134 -134
  327. package/src/animable/absorbable/css/absorb.css +7 -8
  328. package/src/animable/absorbable/css/absorb.css.map +1 -1
  329. package/src/animable/absorbable/scss/absorb.scss +37 -37
  330. package/src/animable/pulsable/css/pulse.css +7 -7
  331. package/src/animable/pulsable/css/pulse.css.map +1 -1
  332. package/src/animable/pulsable/pulsable.js +90 -90
  333. package/src/animable/pulsable/scss/pulse.scss +22 -22
  334. package/src/areaBroker.js +160 -160
  335. package/src/autocomplete/css/autocomplete.css +7 -8
  336. package/src/autocomplete/css/autocomplete.css.map +1 -1
  337. package/src/autocomplete/scss/autocomplete.scss +37 -37
  338. package/src/autocomplete.js +1029 -1029
  339. package/src/autoscroll.js +57 -57
  340. package/src/badge/badge.js +119 -119
  341. package/src/badge/css/badge.css +7 -8
  342. package/src/badge/css/badge.css.map +1 -1
  343. package/src/badge/scss/badge.scss +92 -92
  344. package/src/badge/tpl/badge.tpl +4 -4
  345. package/src/breadcrumbs/css/breadcrumbs.css +7 -7
  346. package/src/breadcrumbs/css/breadcrumbs.css.map +1 -1
  347. package/src/breadcrumbs/scss/breadcrumbs.scss +52 -52
  348. package/src/breadcrumbs/tpl/breadcrumbs.tpl +20 -20
  349. package/src/breadcrumbs.js +99 -99
  350. package/src/btngrouper.js +213 -213
  351. package/src/bulkActionPopup/css/bulkActionPopup.css +7 -7
  352. package/src/bulkActionPopup/css/bulkActionPopup.css.map +1 -1
  353. package/src/bulkActionPopup/scss/bulkActionPopup.scss +63 -63
  354. package/src/bulkActionPopup/tpl/layout.tpl +76 -76
  355. package/src/bulkActionPopup/tpl/select.tpl +8 -8
  356. package/src/bulkActionPopup.js +274 -274
  357. package/src/button/tpl/button.tpl +4 -4
  358. package/src/button.js +135 -135
  359. package/src/calculator/css/calculator.css +10 -10
  360. package/src/calculator/css/calculator.css.map +1 -1
  361. package/src/calculator/scss/calculator.scss +139 -139
  362. package/src/calculator.js +188 -188
  363. package/src/cascadingComboBox.js +126 -126
  364. package/src/ckeditor/ckConfigurator.js +736 -736
  365. package/src/ckeditor/dtdHandler.js +1030 -1030
  366. package/src/class/css/selector.css +7 -7
  367. package/src/class/css/selector.css.map +1 -1
  368. package/src/class/scss/selector.scss +101 -101
  369. package/src/class/selector.js +329 -329
  370. package/src/class/tpl/listItem.tpl +9 -9
  371. package/src/class/tpl/selector.tpl +10 -10
  372. package/src/component/alignable.js +274 -274
  373. package/src/component/containable.js +122 -122
  374. package/src/component/css/components.css +7 -7
  375. package/src/component/css/components.css.map +1 -1
  376. package/src/component/css/windowComponent.css +7 -7
  377. package/src/component/css/windowComponent.css.map +1 -1
  378. package/src/component/draggable.js +104 -104
  379. package/src/component/placeable.js +233 -233
  380. package/src/component/resizable.js +195 -195
  381. package/src/component/scss/components.scss +507 -507
  382. package/src/component/scss/windowComponent.scss +62 -62
  383. package/src/component/stackable.js +67 -67
  384. package/src/component/tpl/window.tpl +7 -7
  385. package/src/component/windowed.js +206 -206
  386. package/src/component.js +401 -401
  387. package/src/container.js +200 -200
  388. package/src/contextualPopup/css/contextualPopup.css +7 -7
  389. package/src/contextualPopup/css/contextualPopup.css.map +1 -1
  390. package/src/contextualPopup/scss/contextualPopup.scss +78 -78
  391. package/src/contextualPopup/tpl/popup.tpl +10 -10
  392. package/src/contextualPopup.js +297 -297
  393. package/src/css/basic.css +103 -106
  394. package/src/css/basic.css.map +1 -1
  395. package/src/dashboard/css/dashboard.css +7 -7
  396. package/src/dashboard/css/dashboard.css.map +1 -1
  397. package/src/dashboard/scss/dashboard.scss +93 -93
  398. package/src/dashboard/tpl/dashboard.tpl +16 -16
  399. package/src/dashboard/tpl/dashboardMetricsList.tpl +15 -15
  400. package/src/dashboard.js +184 -184
  401. package/src/datalist/css/datalist.css +7 -7
  402. package/src/datalist/css/datalist.css.map +1 -1
  403. package/src/datalist/scss/datalist.scss +116 -116
  404. package/src/datalist/tpl/list.tpl +24 -24
  405. package/src/datalist/tpl/main.tpl +44 -44
  406. package/src/datalist.js +500 -500
  407. package/src/datatable/css/datatable.css +11 -7
  408. package/src/datatable/css/datatable.css.map +1 -1
  409. package/src/datatable/filterStrategy/filterStrategy.js +70 -70
  410. package/src/datatable/filterStrategy/multiple.js +126 -126
  411. package/src/datatable/filterStrategy/single.js +108 -108
  412. package/src/datatable/scss/datatable.scss +149 -146
  413. package/src/datatable/tpl/button.tpl +6 -6
  414. package/src/datatable/tpl/layout.tpl +158 -158
  415. package/src/datatable.js +1056 -1056
  416. package/src/dateRange/css/dateRange.css +7 -7
  417. package/src/dateRange/css/dateRange.css.map +1 -1
  418. package/src/dateRange/dateRange.js +341 -341
  419. package/src/dateRange/scss/dateRange.scss +7 -7
  420. package/src/dateRange/tpl/select.tpl +18 -18
  421. package/src/datetime/css/picker.css +7 -7
  422. package/src/datetime/css/picker.css.map +1 -1
  423. package/src/datetime/picker.js +576 -576
  424. package/src/datetime/scss/picker.scss +192 -192
  425. package/src/datetime/tpl/picker.tpl +18 -18
  426. package/src/deleter/undo.tpl +6 -6
  427. package/src/deleter.js +296 -296
  428. package/src/destination/css/selector.css +7 -7
  429. package/src/destination/css/selector.css.map +1 -1
  430. package/src/destination/scss/selector.scss +36 -36
  431. package/src/destination/selector.js +195 -195
  432. package/src/destination/tpl/selector.tpl +13 -13
  433. package/src/dialog/alert.js +70 -70
  434. package/src/dialog/confirm.js +85 -85
  435. package/src/dialog/confirmDelete.js +95 -95
  436. package/src/dialog/tpl/body.tpl +24 -24
  437. package/src/dialog/tpl/buttons.tpl +6 -6
  438. package/src/dialog/tpl/checkbox.tpl +5 -5
  439. package/src/dialog.js +517 -517
  440. package/src/disabler.js +230 -230
  441. package/src/documentViewer/css/documentViewer.css +7 -7
  442. package/src/documentViewer/css/documentViewer.css.map +1 -1
  443. package/src/documentViewer/providers/pdfViewer/fallback/viewer.js +69 -69
  444. package/src/documentViewer/providers/pdfViewer/pdfjs/areaBroker.js +41 -41
  445. package/src/documentViewer/providers/pdfViewer/pdfjs/findBar.js +475 -475
  446. package/src/documentViewer/providers/pdfViewer/pdfjs/findBar.tpl +20 -20
  447. package/src/documentViewer/providers/pdfViewer/pdfjs/match.tpl +1 -1
  448. package/src/documentViewer/providers/pdfViewer/pdfjs/page.tpl +4 -4
  449. package/src/documentViewer/providers/pdfViewer/pdfjs/pageView.js +318 -318
  450. package/src/documentViewer/providers/pdfViewer/pdfjs/pagesManager.js +167 -167
  451. package/src/documentViewer/providers/pdfViewer/pdfjs/searchEngine.js +451 -451
  452. package/src/documentViewer/providers/pdfViewer/pdfjs/textManager.js +252 -252
  453. package/src/documentViewer/providers/pdfViewer/pdfjs/viewer.js +299 -299
  454. package/src/documentViewer/providers/pdfViewer/pdfjs/viewer.tpl +16 -16
  455. package/src/documentViewer/providers/pdfViewer/pdfjs/wrapper.js +351 -351
  456. package/src/documentViewer/providers/pdfViewer.js +93 -93
  457. package/src/documentViewer/scss/documentViewer.scss +184 -184
  458. package/src/documentViewer/viewerFactory.js +191 -191
  459. package/src/documentViewer.js +238 -238
  460. package/src/dropdown/css/dropdown.css +7 -7
  461. package/src/dropdown/css/dropdown.css.map +1 -1
  462. package/src/dropdown/scss/dropdown.scss +99 -99
  463. package/src/dropdown/tpl/dropdown.tpl +8 -8
  464. package/src/dropdown/tpl/list-item.tpl +4 -4
  465. package/src/dropdown.js +255 -255
  466. package/src/durationer.js +222 -222
  467. package/src/dynamicComponent/css/dynamicComponent.css +7 -7
  468. package/src/dynamicComponent/css/dynamicComponent.css.map +1 -1
  469. package/src/dynamicComponent/scss/dynamicComponent.scss +98 -98
  470. package/src/dynamicComponent/tpl/layout.tpl +17 -17
  471. package/src/dynamicComponent.js +554 -554
  472. package/src/feedback/feedback.tpl +7 -7
  473. package/src/feedback.js +295 -295
  474. package/src/figure/FigureStateActive.js +174 -174
  475. package/src/filesender.js +114 -114
  476. package/src/filter/template.tpl +5 -5
  477. package/src/filter.js +135 -135
  478. package/src/form/css/dropdownForm.css +7 -7
  479. package/src/form/css/dropdownForm.css.map +1 -1
  480. package/src/form/css/form.css +7 -7
  481. package/src/form/css/form.css.map +1 -1
  482. package/src/form/dropdownForm.js +281 -281
  483. package/src/form/form.js +688 -688
  484. package/src/form/scss/dropdownForm.scss +60 -60
  485. package/src/form/scss/form.scss +25 -25
  486. package/src/form/simpleForm.js +125 -125
  487. package/src/form/tpl/dropdownForm.tpl +4 -4
  488. package/src/form/tpl/form.tpl +7 -7
  489. package/src/form/validator/css/validator.css +7 -7
  490. package/src/form/validator/css/validator.css.map +1 -1
  491. package/src/form/validator/renderer.js +118 -118
  492. package/src/form/validator/scss/validator.scss +14 -14
  493. package/src/form/validator/tpl/message.tpl +1 -1
  494. package/src/form/validator/tpl/validator.tpl +1 -1
  495. package/src/form/validator/validator.js +220 -220
  496. package/src/form/widget/css/widget.css +7 -7
  497. package/src/form/widget/css/widget.css.map +1 -1
  498. package/src/form/widget/definitions.js +51 -51
  499. package/src/form/widget/loader.js +40 -40
  500. package/src/form/widget/providers/checkBox.js +138 -138
  501. package/src/form/widget/providers/comboBox.js +63 -63
  502. package/src/form/widget/providers/default.js +90 -90
  503. package/src/form/widget/providers/hidden.js +62 -62
  504. package/src/form/widget/providers/hiddenBox.js +152 -152
  505. package/src/form/widget/providers/radioBox.js +99 -99
  506. package/src/form/widget/providers/textArea.js +52 -52
  507. package/src/form/widget/providers/textBox.js +48 -48
  508. package/src/form/widget/scss/widget.scss +55 -55
  509. package/src/form/widget/tpl/checkBox.tpl +25 -25
  510. package/src/form/widget/tpl/comboBox.tpl +13 -13
  511. package/src/form/widget/tpl/hidden.tpl +1 -1
  512. package/src/form/widget/tpl/hiddenBox.tpl +17 -17
  513. package/src/form/widget/tpl/label.tpl +6 -6
  514. package/src/form/widget/tpl/radioBox.tpl +25 -25
  515. package/src/form/widget/tpl/textArea.tpl +8 -8
  516. package/src/form/widget/tpl/widget.tpl +8 -8
  517. package/src/form/widget/widget.js +372 -372
  518. package/src/form.js +53 -53
  519. package/src/formValidator/formValidator.js +253 -253
  520. package/src/formValidator/highlighters/highlighter.js +102 -102
  521. package/src/formValidator/highlighters/message.js +70 -70
  522. package/src/formValidator/highlighters/tooltip.js +78 -78
  523. package/src/generis/form/css/form.css +7 -7
  524. package/src/generis/form/css/form.css.map +1 -1
  525. package/src/generis/form/form.js +239 -239
  526. package/src/generis/form/readme.md +70 -70
  527. package/src/generis/form/scss/form.scss +23 -23
  528. package/src/generis/form/tpl/form.tpl +16 -16
  529. package/src/generis/validator/css/validator.css +7 -7
  530. package/src/generis/validator/css/validator.css.map +1 -1
  531. package/src/generis/validator/readme.md +46 -46
  532. package/src/generis/validator/scss/validator.scss +13 -13
  533. package/src/generis/validator/validator.js +128 -128
  534. package/src/generis/widget/checkBox/checkBox.js +112 -112
  535. package/src/generis/widget/checkBox/checkBox.tpl +18 -18
  536. package/src/generis/widget/comboBox/comboBox.js +67 -67
  537. package/src/generis/widget/comboBox/comboBox.tpl +12 -12
  538. package/src/generis/widget/css/widget.css +7 -7
  539. package/src/generis/widget/css/widget.css.map +1 -1
  540. package/src/generis/widget/hiddenBox/hiddenBox.js +132 -132
  541. package/src/generis/widget/hiddenBox/hiddenBox.tpl +16 -16
  542. package/src/generis/widget/loader.js +49 -49
  543. package/src/generis/widget/readme.md +59 -59
  544. package/src/generis/widget/scss/widget.scss +61 -61
  545. package/src/generis/widget/textBox/textBox.js +65 -65
  546. package/src/generis/widget/textBox/textBox.tpl +7 -7
  547. package/src/generis/widget/widget.js +164 -164
  548. package/src/generis/widget/widget.tpl +5 -5
  549. package/src/groupedComboBox.js +99 -99
  550. package/src/groupvalidator.js +84 -84
  551. package/src/hider.js +88 -88
  552. package/src/highlighter.js +1166 -1166
  553. package/src/image/ImgStateActive/extractLabel.js +29 -29
  554. package/src/image/ImgStateActive/helper.js +36 -36
  555. package/src/image/ImgStateActive/initHelper.js +137 -137
  556. package/src/image/ImgStateActive/initMediaEditor.js +92 -92
  557. package/src/image/ImgStateActive/mediaSizer.js +63 -63
  558. package/src/image/ImgStateActive.js +115 -115
  559. package/src/incrementer.js +319 -319
  560. package/src/inplacer.js +316 -316
  561. package/src/interactUtils.js +140 -140
  562. package/src/itemButtonList/css/item-button-list.css +23 -24
  563. package/src/itemButtonList/css/item-button-list.css.map +1 -1
  564. package/src/itemButtonList/scss/item-button-list.scss +236 -236
  565. package/src/itemButtonList/tpl/itemButtonList.tpl +21 -21
  566. package/src/itemButtonList.js +274 -274
  567. package/src/keyNavigation/navigableDomElement.js +282 -282
  568. package/src/keyNavigation/navigator.js +543 -543
  569. package/src/listbox/css/listbox.css +7 -7
  570. package/src/listbox/css/listbox.css.map +1 -1
  571. package/src/listbox/scss/listbox.scss +116 -116
  572. package/src/listbox/tpl/list.tpl +14 -14
  573. package/src/listbox/tpl/main.tpl +9 -9
  574. package/src/listbox.js +251 -251
  575. package/src/liststyler.js +155 -155
  576. package/src/loadingButton/css/button.css +7 -7
  577. package/src/loadingButton/css/button.css.map +1 -1
  578. package/src/loadingButton/loadingButton.js +110 -110
  579. package/src/loadingButton/scss/button.scss +41 -41
  580. package/src/loadingButton/tpl/button.tpl +5 -5
  581. package/src/lock/lock.tpl +16 -16
  582. package/src/lock.js +395 -395
  583. package/src/login/login.js +322 -322
  584. package/src/login/tpl/login.tpl +29 -29
  585. package/src/login/tpl/passwordReveal.tpl +7 -7
  586. package/src/maths/calculator/basicCalculator.js +55 -55
  587. package/src/maths/calculator/calculatorComponent.js +128 -128
  588. package/src/maths/calculator/core/areaBroker.js +38 -38
  589. package/src/maths/calculator/core/board.js +841 -841
  590. package/src/maths/calculator/core/expression.js +430 -430
  591. package/src/maths/calculator/core/labels.js +116 -116
  592. package/src/maths/calculator/core/plugin.js +40 -40
  593. package/src/maths/calculator/core/terms.js +459 -459
  594. package/src/maths/calculator/core/tokenizer.js +245 -245
  595. package/src/maths/calculator/core/tokens.js +178 -178
  596. package/src/maths/calculator/core/tpl/board.tpl +4 -4
  597. package/src/maths/calculator/css/calculator.css +7 -7
  598. package/src/maths/calculator/css/calculator.css.map +1 -1
  599. package/src/maths/calculator/defaultCalculator.js +66 -66
  600. package/src/maths/calculator/plugins/core/degrad.js +90 -90
  601. package/src/maths/calculator/plugins/core/history.js +166 -166
  602. package/src/maths/calculator/plugins/core/remind.js +96 -96
  603. package/src/maths/calculator/plugins/core/stepNavigation.js +175 -175
  604. package/src/maths/calculator/plugins/keyboard/templateKeyboard/defaultTemplate.tpl +36 -36
  605. package/src/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +91 -91
  606. package/src/maths/calculator/plugins/modifiers/pow10.js +143 -143
  607. package/src/maths/calculator/plugins/modifiers/sign.js +339 -339
  608. package/src/maths/calculator/plugins/screen/simpleScreen/defaultTemplate.tpl +3 -3
  609. package/src/maths/calculator/plugins/screen/simpleScreen/history.tpl +3 -3
  610. package/src/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +191 -191
  611. package/src/maths/calculator/pluginsLoader.js +46 -46
  612. package/src/maths/calculator/scientificCalculator.js +74 -74
  613. package/src/maths/calculator/scss/calculator.scss +396 -396
  614. package/src/maths/calculator/tpl/basicKeyboard.tpl +37 -37
  615. package/src/maths/calculator/tpl/basicScreen.tpl +2 -2
  616. package/src/maths/calculator/tpl/scientificKeyboard.tpl +61 -61
  617. package/src/maths/calculator/tpl/scientificScreen.tpl +3 -3
  618. package/src/mediaEditor/mediaEditorComponent.js +141 -141
  619. package/src/mediaEditor/plugins/mediaAlignment/helper.js +62 -62
  620. package/src/mediaEditor/plugins/mediaAlignment/mediaAlignmentComponent.js +99 -99
  621. package/src/mediaEditor/plugins/mediaAlignment/style.css +7 -7
  622. package/src/mediaEditor/plugins/mediaAlignment/tpl/mediaAlignment.tpl +25 -25
  623. package/src/mediaEditor/plugins/mediaDimension/helper.js +189 -189
  624. package/src/mediaEditor/plugins/mediaDimension/mediaDimensionComponent.js +561 -561
  625. package/src/mediaEditor/plugins/mediaDimension/style.css +141 -141
  626. package/src/mediaEditor/plugins/mediaDimension/tpl/mediaDimension.tpl +55 -55
  627. package/src/mediaEditor/tpl/editor.tpl +4 -4
  628. package/src/mediaplayer/css/player.css +7 -7
  629. package/src/mediaplayer/css/player.css.map +1 -1
  630. package/src/mediaplayer/players/html5.js +564 -564
  631. package/src/mediaplayer/players/youtube.js +323 -323
  632. package/src/mediaplayer/players.js +29 -29
  633. package/src/mediaplayer/readme.md +305 -305
  634. package/src/mediaplayer/scss/player.scss +569 -569
  635. package/src/mediaplayer/support.js +126 -126
  636. package/src/mediaplayer/tpl/audio.tpl +6 -6
  637. package/src/mediaplayer/tpl/player.tpl +37 -37
  638. package/src/mediaplayer/tpl/source.tpl +1 -1
  639. package/src/mediaplayer/tpl/video.tpl +6 -6
  640. package/src/mediaplayer/tpl/youtube.tpl +1 -1
  641. package/src/mediaplayer/utils/reminder.js +184 -184
  642. package/src/mediaplayer/utils/timeObserver.js +143 -143
  643. package/src/mediaplayer/youtubeManager.js +161 -161
  644. package/src/mediaplayer.js +1606 -1606
  645. package/src/mediasizer/mediasizer.tpl +55 -55
  646. package/src/mediasizer.js +635 -635
  647. package/src/modal.js +365 -365
  648. package/src/movableComponent.js +78 -78
  649. package/src/pageSizeSelector/tpl/pageSizeSelector.tpl +9 -9
  650. package/src/pageSizeSelector.js +107 -107
  651. package/src/pageStatus.js +147 -147
  652. package/src/pagination/css/pagination.css +7 -7
  653. package/src/pagination/css/pagination.css.map +1 -1
  654. package/src/pagination/paginationStrategy.js +53 -53
  655. package/src/pagination/providers/pages.js +161 -161
  656. package/src/pagination/providers/simple.js +74 -74
  657. package/src/pagination/providers/tpl/pages/page.tpl +1 -1
  658. package/src/pagination/providers/tpl/pages.tpl +8 -8
  659. package/src/pagination/providers/tpl/simple.tpl +7 -7
  660. package/src/pagination/scss/pagination.scss +111 -111
  661. package/src/pagination.js +237 -237
  662. package/src/previewer.js +300 -300
  663. package/src/progressbar.js +165 -165
  664. package/src/propertySelector/css/propertySelector.css +74 -0
  665. package/src/propertySelector/css/propertySelector.css.map +1 -0
  666. package/src/propertySelector/propertySelector.js +286 -0
  667. package/src/propertySelector/scss/propertySelector.scss +66 -0
  668. package/src/propertySelector/tpl/highlighted-text.tpl +1 -0
  669. package/src/propertySelector/tpl/property-description.tpl +13 -0
  670. package/src/propertySelector/tpl/property-selector.tpl +7 -0
  671. package/src/report/feedback.tpl +11 -11
  672. package/src/report/layout.tpl +10 -10
  673. package/src/report.js +184 -184
  674. package/src/resource/css/selector.css +7 -7
  675. package/src/resource/css/selector.css.map +1 -1
  676. package/src/resource/filters.js +208 -208
  677. package/src/resource/list.js +200 -200
  678. package/src/resource/scss/_filters.scss +26 -26
  679. package/src/resource/scss/_resource-list.scss +107 -107
  680. package/src/resource/scss/_resource-tree.scss +205 -205
  681. package/src/resource/scss/selector.scss +187 -187
  682. package/src/resource/selectable.js +322 -322
  683. package/src/resource/selector.js +871 -871
  684. package/src/resource/tpl/filters.tpl +2 -2
  685. package/src/resource/tpl/list.tpl +7 -7
  686. package/src/resource/tpl/listNode.tpl +4 -4
  687. package/src/resource/tpl/selector.tpl +46 -46
  688. package/src/resource/tpl/tree.tpl +4 -4
  689. package/src/resource/tpl/treeNode.tpl +30 -30
  690. package/src/resource/tree.js +400 -400
  691. package/src/resourcemgr/css/resourcemgr.css +7 -7
  692. package/src/resourcemgr/css/resourcemgr.css.map +1 -1
  693. package/src/resourcemgr/fileBrowser.js +381 -381
  694. package/src/resourcemgr/filePreview.js +73 -73
  695. package/src/resourcemgr/fileSelector.js +348 -348
  696. package/src/resourcemgr/scss/resourcemgr.scss +254 -254
  697. package/src/resourcemgr/tpl/fileSelect.tpl +39 -39
  698. package/src/resourcemgr/tpl/folder.tpl +11 -11
  699. package/src/resourcemgr/tpl/layout.tpl +84 -84
  700. package/src/resourcemgr/tpl/rootFolder.tpl +13 -13
  701. package/src/resourcemgr/util/updatePermissions.js +53 -53
  702. package/src/resourcemgr.js +216 -216
  703. package/src/scroller.js +94 -94
  704. package/src/scss/basic.scss +16 -16
  705. package/src/searchModal/advancedSearch.js +638 -601
  706. package/src/searchModal/css/advancedSearch.css +7 -14
  707. package/src/searchModal/css/advancedSearch.css.map +1 -1
  708. package/src/searchModal/css/searchModal.css +28 -8
  709. package/src/searchModal/css/searchModal.css.map +1 -1
  710. package/src/searchModal/scss/advancedSearch.scss +171 -177
  711. package/src/searchModal/scss/searchModal.scss +393 -375
  712. package/src/searchModal/tpl/advanced-search.tpl +9 -9
  713. package/src/searchModal/tpl/criteria-alias.tpl +1 -0
  714. package/src/searchModal/tpl/criteria-class-label.tpl +1 -0
  715. package/src/searchModal/tpl/criteria-label.tpl +1 -0
  716. package/src/searchModal/tpl/highlighted-text.tpl +1 -0
  717. package/src/searchModal/tpl/info-message.tpl +3 -3
  718. package/src/searchModal/tpl/invalid-criteria-warning.tpl +10 -10
  719. package/src/searchModal/tpl/layout.tpl +27 -25
  720. package/src/searchModal/tpl/list-checkbox-criterion.tpl +17 -12
  721. package/src/searchModal/tpl/list-select-criterion.tpl +12 -6
  722. package/src/searchModal/tpl/property-select-button.tpl +1 -0
  723. package/src/searchModal/tpl/results-container.tpl +1 -0
  724. package/src/searchModal/tpl/text-criterion.tpl +11 -6
  725. package/src/searchModal.js +761 -496
  726. package/src/selecter.js +43 -43
  727. package/src/stacker.js +133 -133
  728. package/src/switch/css/switch.css +7 -7
  729. package/src/switch/css/switch.css.map +1 -1
  730. package/src/switch/scss/switch.scss +83 -83
  731. package/src/switch/switch.js +195 -195
  732. package/src/switch/tpl/switch.tpl +7 -7
  733. package/src/tableModel.js +112 -112
  734. package/src/tabs/css/tabs.css +12 -12
  735. package/src/tabs/css/tabs.css.map +1 -1
  736. package/src/tabs/scss/tabs.scss +50 -50
  737. package/src/tabs/tpl/panel.tpl +3 -3
  738. package/src/tabs/tpl/tabs.tpl +10 -10
  739. package/src/tabs.js +528 -528
  740. package/src/taskQueue/css/taskQueue.css +7 -7
  741. package/src/taskQueue/css/taskQueue.css.map +1 -1
  742. package/src/taskQueue/scss/taskQueue.scss +47 -47
  743. package/src/taskQueue/status.js +228 -228
  744. package/src/taskQueue/table.js +350 -350
  745. package/src/taskQueue/taskQueue.js +33 -33
  746. package/src/taskQueue/taskQueueModel.js +548 -548
  747. package/src/taskQueue/tpl/statusMessage.tpl +7 -7
  748. package/src/taskQueue.js +218 -218
  749. package/src/taskQueueButton/css/taskable.css +7 -7
  750. package/src/taskQueueButton/css/taskable.css.map +1 -1
  751. package/src/taskQueueButton/css/treeButton.css +7 -7
  752. package/src/taskQueueButton/css/treeButton.css.map +1 -1
  753. package/src/taskQueueButton/scss/taskable.scss +4 -4
  754. package/src/taskQueueButton/scss/treeButton.scss +34 -34
  755. package/src/taskQueueButton/standardButton.js +108 -108
  756. package/src/taskQueueButton/taskable.js +202 -202
  757. package/src/taskQueueButton/tpl/report.tpl +5 -5
  758. package/src/taskQueueButton/tpl/treeButton.tpl +6 -6
  759. package/src/taskQueueButton/treeButton.js +109 -109
  760. package/src/themeLoader.js +252 -252
  761. package/src/themes.js +162 -162
  762. package/src/toggler.js +200 -200
  763. package/src/tooltip/default.tpl +3 -3
  764. package/src/tooltip.js +160 -160
  765. package/src/tooltipster.js +25 -25
  766. package/src/transformer.js +327 -327
  767. package/src/tristateCheckboxGroup/css/tristateCheckboxGroup.css +7 -7
  768. package/src/tristateCheckboxGroup/css/tristateCheckboxGroup.css.map +1 -1
  769. package/src/tristateCheckboxGroup/scss/tristateCheckboxGroup.scss +15 -15
  770. package/src/tristateCheckboxGroup/tpl/li.tpl +6 -6
  771. package/src/tristateCheckboxGroup.js +207 -207
  772. package/src/uploader/fileEntry.tpl +6 -6
  773. package/src/uploader/uploader.tpl +32 -32
  774. package/src/uploader.js +594 -594
  775. package/src/validator/Report.js +10 -10
  776. package/src/validator/Validator.js +108 -108
  777. package/src/validator/validators.js +220 -220
  778. package/src/validator.js +264 -264
  779. package/src/waitForMedia.js +82 -82
  780. package/src/waitingDialog/css/waitingDialog.css +7 -7
  781. package/src/waitingDialog/css/waitingDialog.css.map +1 -1
  782. package/src/waitingDialog/scss/waitingDialog.scss +34 -34
  783. package/src/waitingDialog/waitingDialog.js +240 -240
@@ -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 (_typeof(value) === 'object') {
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
- }); //register a classic "for loop" helper
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
- }); // register a "get property" helper
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
- }); // register an 'includes' helper
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\">\r\n <div class=\"clear content-wrapper content-panel\">\r\n <div class=\"ui-container\">\r\n <div class=\"filters-container\">\r\n <div class=\"basic-search-container\">\r\n <div class=\"filter-container\">\r\n <span class=\"icon-find\"></span>\r\n <input class=\"generic-search-input\" type=\"text\" placeholder=\"";
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
- + "\">\r\n </div>\r\n <div class=\"filter-container class-filter-container\">\r\n <span class=\"icon-folder\"></span>\r\n <span class=\"icon-down\"></span>\r\n <textarea class=\"class-filter\" cols=\"40\" rows=\"1\" readonly></textarea>\r\n <div class=\"class-tree\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"buttons-container\">\r\n <button class=\"btn-clear btn-transparent small\">"
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>\r\n <button class=\"btn-search btn-info small\">"
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>\r\n </div>\r\n </div>\r\n <div class=\"content-container\" style=\"padding:40px 20px\">\r\n </div>\r\n </div>\r\n</div>";
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'>\r\n <span class=\"no-datatable-icon ";
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>\r\n <p class=\"no-datatable-message\">";
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>\r\n</div>";
219
+ + "</p>\n</div>";
204
220
  return buffer;
205
221
  });
206
222
  function infoMessageTpl(data, options, asString) {
207
- var html = Template$1(data, options);
223
+ var html = Template$2(data, options);
208
224
  return (asString || true) ? html : $(html);
209
225
  }
210
226
 
211
- /**
212
- * Creates a searchModal instance
213
- *
214
- * @param {object} config
215
- * @param {object} config.renderTo - DOM element where component will be rendered to
216
- * @param {string} config.criterias - Search criteria to be set on component creation
217
- * @param {boolean} config.searchOnInit - if init search must be triggered or not (stored results are used instead)
218
- * @param {string} config.url - search endpoint to be set on datatable
219
- * @param {string} config.rootClassUri - Uri for the root class of current context, required to init the class filter
220
- * @param {bool} config.hideResourceSelector - if resourceSelector must be hidden
221
- * @param {string} config.placeholder - placeholder for input in template
222
- * @returns {searchModal}
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
- var defaults = {
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
- }; // Private properties to be easily accessible by instance methods
232
-
233
- var $container = null;
234
- var $searchInput = null;
235
- var $searchButton = null;
236
- var $clearButton = null;
237
- var running = false;
238
- var searchStore = null;
239
- var resourceSelector = null;
240
- var $classFilterContainer = null;
241
- var $classFilterInput = null;
242
- var $classTreeContainer = null;
243
- var advancedSearch = null; // resorce selector
244
-
245
- var isResourceSelector = !config.hideResourceSelector;
246
- var rootClassUri = config.rootClassUri;
247
- /**
248
- * Creates search modal, inits template selectors, inits search store, and once is created triggers initial search
249
- * rootClassUri is sent to advancedSearch factory for disabling in whitelisted sections
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
- var promises = [];
302
+ const promises = [];
254
303
  initModal();
255
304
  initUiSelectors();
256
305
  advancedSearch = advancedSearchFactory({
257
- renderTo: $$1('.filters-container', $container),
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(initSearchStore());
263
- Promise.all(promises).then(function () {
313
+ promises.push(initStores());
314
+ Promise.all(promises).then(() => {
264
315
  instance.trigger('ready');
265
- $searchButton.trigger('click');
266
- }).catch(function (e) {
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
- } // Creates new component
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
- var instance = component({}, defaults).setTemplate(layoutTpl).on('render', renderModal).on('destroy', destroyModal);
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', function () {
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(function (resolve) {
359
+ return new Promise(resolve => {
303
360
  if (!isResourceSelector) {
304
- $classFilterContainer.hide();
361
+ controls.$classFilterContainer.hide();
305
362
  return resolve();
306
363
  }
307
-
308
- var initialClassUri = instance.config.criterias && instance.config.criterias.class ? instance.config.criterias.class : rootClassUri;
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
- }); // when a class query is triggered, update selector options with received resources
372
+ });
317
373
 
318
- resourceSelector.on('query', function (params) {
319
- var classOnlyParams = _objectSpread2(_objectSpread2({}, params), {}, {
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
- var route = urlUtil.route('getAll', 'RestResource', 'tao');
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(function (e) {
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
- resourceSelector.on('update', function () {
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
- }); // then new class is selected, set its label into class filter input and hide filter container, then request class properties
396
+ });
344
397
 
345
- resourceSelector.on('change', function (selectedValue) {
346
- /*
347
- * on searchModal init we set manually the selector to the provided config.rootClassUri. When a selector
348
- * is set manually Selector component execs @clearSelection which triggers a change event
349
- * with an empty object as param. We catch this undesired behaviour here
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
- var classUri = _.map(selectedValue, 'classUri')[0];
356
-
357
- var label = _.map(selectedValue, 'label')[0];
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
- $classFilterInput.html(label);
366
- $classFilterInput.data('uri', uri);
367
- $classTreeContainer.hide();
368
- advancedSearch.updateCriteria(route).then(function () {
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
- var disableBlockedClasses = function disableBlockedClasses(resources) {
386
- _.forEach(resources, function (resource, index, array) {
387
- if (classTree.permissions.data[resource.uri] && classTree.permissions.data[resource.uri].find(function (permission) {
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
- $searchButton = $$1('.btn-search', $container);
409
- $clearButton = $$1('.btn-clear', $container);
410
- $searchInput = $$1('.generic-search-input', $container);
411
- $classFilterInput = $$1('.class-filter', $container);
412
- $classTreeContainer = $$1('.class-tree', $container);
413
- $classFilterContainer = $$1('.class-filter-container', $container);
414
- $searchButton.on('click', search);
415
- $clearButton.on('click', clear);
416
- var shortcuts = shortcutRegistry($searchInput);
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
- $searchInput.val(instance.config.criterias && instance.config.criterias.search ? instance.config.criterias.search : '');
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', function () {
427
- $classTreeContainer.hide();
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
- var shortcuts = shortcutRegistry($classFilterInput);
435
- shortcuts.add('enter', function () {
436
- return $classTreeContainer.show();
437
- });
438
- shortcuts.add('space', function () {
439
- return $classTreeContainer.show();
440
- });
441
- shortcuts.add('backspace', function () {
442
- return $classTreeContainer.hide();
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
- $classFilterContainer.on('click', function (e) {
454
- $classTreeContainer.toggle();
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
- $classFilterContainer.on('mousedown', function (e) {
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
- }); // clicking on resource selector will stopPropagation to prevent be closed by searchModal.mouseDown listener
501
+ });
465
502
 
466
- $classTreeContainer.on('mousedown', function (e) {
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
- function initSearchStore() {
477
- return store('search').then(function (store) {
478
- searchStore = store;
479
- }).catch(function (e) {
480
- return instance.trigger('error', e);
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
- * Request search results and manages its results
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
- var query = buildComplexQuery();
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
- var $searchInputValue = $searchInput.val().trim();
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(function (storedSearchResults) {
586
+ Promise.all([searchStore.getItem('results'), searchStore.getItem('options')]).then(fromStore => {
541
587
  instance.config.searchOnInit = true;
542
- data.storedSearchResults = storedSearchResults;
543
- resolve();
544
- }).catch(function (e) {
545
- instance.trigger('error', e);
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
- * Creates a datatable with search results
555
- * @param {object} data - search configuration including model and endpoint for datatable
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
- function buildSearchResultsDatatable(data) {
560
- //update the section container
561
- var $tableContainer = $$1('<div class="flex-container-full"></div>');
562
- var section = $$1('.content-container', $container);
563
- section.empty();
564
- section.append($tableContainer);
565
- $tableContainer.on('load.datatable', searchResultsLoaded); //create datatable
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: _.values(data.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
- * Triggered on load.datatable event, it updates searchStore and manages possible exceptions
590
- * @param {object} e - load.datatable event
591
- * @param {object} dataset - datatable dataset
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: dataset,
811
+ dataset,
812
+ options: {
813
+ sortby,
814
+ sortorder
815
+ },
604
816
  context: context.shownStructure,
605
817
  criterias: {
606
- search: $searchInput.val(),
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
- var promises = [];
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
- $searchInput.val('');
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
- var section = $$1('.content-container', $container);
661
- section.empty();
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
- var infoMessage = infoMessageTpl({
674
- message: message,
675
- icon: icon
953
+ const infoMessage = infoMessageTpl({
954
+ message,
955
+ icon
676
956
  });
677
- section.append(infoMessage);
678
- } // return initialized instance of searchModal
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