@oat-sa/tao-core-ui 1.54.2 → 1.55.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 (822) hide show
  1. package/LICENSE +339 -339
  2. package/README.md +17 -17
  3. package/dist/actionbar.js +105 -105
  4. package/dist/adder.js +109 -109
  5. package/dist/animable/absorbable/absorbable.js +42 -42
  6. package/dist/animable/absorbable/css/absorb.css +7 -7
  7. package/dist/animable/pulsable/css/pulse.css +7 -7
  8. package/dist/animable/pulsable/pulsable.js +36 -36
  9. package/dist/areaBroker.js +51 -51
  10. package/dist/autocomplete/css/autocomplete.css +7 -7
  11. package/dist/autocomplete.js +400 -400
  12. package/dist/autoscroll.js +22 -22
  13. package/dist/badge/badge.js +48 -48
  14. package/dist/badge/css/badge.css +7 -7
  15. package/dist/breadcrumbs/css/breadcrumbs.css +7 -7
  16. package/dist/breadcrumbs.js +70 -70
  17. package/dist/btngrouper.js +64 -64
  18. package/dist/bulkActionPopup/css/bulkActionPopup.css +7 -7
  19. package/dist/bulkActionPopup.js +104 -104
  20. package/dist/button.js +102 -102
  21. package/dist/calculator/css/calculator.css +10 -10
  22. package/dist/calculator.js +51 -51
  23. package/dist/cascadingComboBox.js +47 -47
  24. package/dist/ckeditor/ckConfigurator.js +47 -47
  25. package/dist/ckeditor/dtdHandler.js +110 -110
  26. package/dist/class/css/selector.css +7 -7
  27. package/dist/class/selector.js +111 -111
  28. package/dist/component/alignable.js +81 -81
  29. package/dist/component/containable.js +37 -37
  30. package/dist/component/css/components.css +7 -7
  31. package/dist/component/css/windowComponent.css +7 -7
  32. package/dist/component/draggable.js +24 -24
  33. package/dist/component/placeable.js +70 -70
  34. package/dist/component/resizable.js +60 -60
  35. package/dist/component/stackable.js +20 -20
  36. package/dist/component/windowed.js +59 -59
  37. package/dist/component.js +153 -153
  38. package/dist/container.js +76 -76
  39. package/dist/contextualPopup/css/contextualPopup.css +7 -7
  40. package/dist/contextualPopup.js +113 -113
  41. package/dist/dashboard/css/dashboard.css +7 -7
  42. package/dist/dashboard.js +75 -75
  43. package/dist/datalist/css/datalist.css +7 -7
  44. package/dist/datalist.js +160 -160
  45. package/dist/datatable/css/datatable.css +7 -7
  46. package/dist/datatable/filterStrategy/filterStrategy.js +27 -27
  47. package/dist/datatable/filterStrategy/multiple.js +25 -25
  48. package/dist/datatable/filterStrategy/single.js +25 -25
  49. package/dist/datatable.js +374 -374
  50. package/dist/dateRange/css/dateRange.css +7 -7
  51. package/dist/dateRange/dateRange.js +110 -110
  52. package/dist/datetime/css/picker.css +7 -7
  53. package/dist/datetime/picker.js +174 -174
  54. package/dist/deleter.js +92 -92
  55. package/dist/destination/css/selector.css +7 -7
  56. package/dist/destination/selector.js +65 -65
  57. package/dist/dialog/alert.js +26 -26
  58. package/dist/dialog/confirm.js +27 -27
  59. package/dist/dialog/confirmDelete.js +44 -44
  60. package/dist/dialog.js +156 -156
  61. package/dist/disabler.js +90 -90
  62. package/dist/documentViewer/css/documentViewer.css +7 -7
  63. package/dist/documentViewer/providers/pdfViewer/fallback/viewer.js +43 -43
  64. package/dist/documentViewer/providers/pdfViewer/pdfjs/areaBroker.js +25 -25
  65. package/dist/documentViewer/providers/pdfViewer/pdfjs/findBar.js +133 -133
  66. package/dist/documentViewer/providers/pdfViewer/pdfjs/pageView.js +102 -102
  67. package/dist/documentViewer/providers/pdfViewer/pdfjs/pagesManager.js +52 -52
  68. package/dist/documentViewer/providers/pdfViewer/pdfjs/searchEngine.js +125 -125
  69. package/dist/documentViewer/providers/pdfViewer/pdfjs/textManager.js +67 -67
  70. package/dist/documentViewer/providers/pdfViewer/pdfjs/viewer.js +94 -94
  71. package/dist/documentViewer/providers/pdfViewer/pdfjs/wrapper.js +111 -111
  72. package/dist/documentViewer/providers/pdfViewer.js +42 -42
  73. package/dist/documentViewer/viewerFactory.js +71 -71
  74. package/dist/documentViewer.js +99 -99
  75. package/dist/dropdown/css/dropdown.css +7 -7
  76. package/dist/dropdown.js +97 -97
  77. package/dist/durationer.js +58 -58
  78. package/dist/dynamicComponent/css/dynamicComponent.css +7 -7
  79. package/dist/dynamicComponent.js +116 -116
  80. package/dist/feedback.js +97 -97
  81. package/dist/filesender.js +26 -26
  82. package/dist/filter.js +47 -47
  83. package/dist/form/css/dropdownForm.css +7 -7
  84. package/dist/form/css/form.css +7 -7
  85. package/dist/form/dropdownForm.js +112 -112
  86. package/dist/form/form.js +245 -245
  87. package/dist/form/simpleForm.js +71 -71
  88. package/dist/form/validator/css/validator.css +7 -7
  89. package/dist/form/validator/renderer.js +65 -65
  90. package/dist/form/validator/validator.js +87 -87
  91. package/dist/form/widget/css/widget.css +7 -7
  92. package/dist/form/widget/definitions.js +24 -24
  93. package/dist/form/widget/loader.js +16 -16
  94. package/dist/form/widget/providers/checkBox.js +75 -75
  95. package/dist/form/widget/providers/comboBox.js +59 -59
  96. package/dist/form/widget/providers/default.js +35 -35
  97. package/dist/form/widget/providers/hidden.js +50 -50
  98. package/dist/form/widget/providers/hiddenBox.js +71 -71
  99. package/dist/form/widget/providers/radioBox.js +70 -70
  100. package/dist/form/widget/providers/textArea.js +48 -48
  101. package/dist/form/widget/providers/textBox.js +34 -34
  102. package/dist/form/widget/widget.js +154 -154
  103. package/dist/form.js +10 -10
  104. package/dist/formValidator/formValidator.js +61 -61
  105. package/dist/formValidator/highlighters/highlighter.js +41 -41
  106. package/dist/formValidator/highlighters/message.js +29 -29
  107. package/dist/formValidator/highlighters/tooltip.js +32 -32
  108. package/dist/generis/form/css/form.css +7 -7
  109. package/dist/generis/form/form.js +86 -86
  110. package/dist/generis/validator/css/validator.css +7 -7
  111. package/dist/generis/validator/validator.js +51 -51
  112. package/dist/generis/widget/checkBox/checkBox.js +52 -52
  113. package/dist/generis/widget/comboBox/comboBox.js +45 -45
  114. package/dist/generis/widget/css/widget.css +7 -7
  115. package/dist/generis/widget/hiddenBox/hiddenBox.js +53 -53
  116. package/dist/generis/widget/loader.js +20 -20
  117. package/dist/generis/widget/textBox/textBox.js +40 -40
  118. package/dist/generis/widget/widget.js +60 -60
  119. package/dist/groupedComboBox.js +49 -49
  120. package/dist/groupvalidator.js +19 -19
  121. package/dist/hider.js +41 -41
  122. package/dist/highlighter.js +262 -262
  123. package/dist/image/ImgStateActive/extractLabel.js +20 -20
  124. package/dist/image/ImgStateActive/initHelper.js +69 -69
  125. package/dist/image/ImgStateActive/initMediaEditor.js +32 -32
  126. package/dist/image/ImgStateActive/mediaSizer.js +16 -16
  127. package/dist/image/ImgStateActive.js +88 -88
  128. package/dist/incrementer.js +58 -58
  129. package/dist/inplacer.js +87 -87
  130. package/dist/interactUtils.js +42 -42
  131. package/dist/itemButtonList/css/item-button-list.css +23 -23
  132. package/dist/itemButtonList.js +115 -115
  133. package/dist/keyNavigation/navigableDomElement.js +76 -76
  134. package/dist/keyNavigation/navigator.js +158 -158
  135. package/dist/listbox/css/listbox.css +7 -7
  136. package/dist/listbox.js +97 -97
  137. package/dist/liststyler.js +57 -57
  138. package/dist/loadingButton/css/button.css +7 -7
  139. package/dist/loadingButton/loadingButton.js +48 -48
  140. package/dist/lock.js +125 -125
  141. package/dist/login/login.js +100 -100
  142. package/dist/maths/calculator/basicCalculator.js +63 -63
  143. package/dist/maths/calculator/calculatorComponent.js +29 -29
  144. package/dist/maths/calculator/core/areaBroker.js +25 -25
  145. package/dist/maths/calculator/core/board.js +313 -313
  146. package/dist/maths/calculator/core/expression.js +111 -111
  147. package/dist/maths/calculator/core/labels.js +29 -29
  148. package/dist/maths/calculator/core/plugin.js +19 -19
  149. package/dist/maths/calculator/core/terms.js +26 -26
  150. package/dist/maths/calculator/core/tokenizer.js +98 -98
  151. package/dist/maths/calculator/core/tokens.js +59 -59
  152. package/dist/maths/calculator/css/calculator.css +7 -7
  153. package/dist/maths/calculator/defaultCalculator.js +23 -23
  154. package/dist/maths/calculator/plugins/core/degrad.js +22 -22
  155. package/dist/maths/calculator/plugins/core/history.js +45 -45
  156. package/dist/maths/calculator/plugins/core/remind.js +22 -22
  157. package/dist/maths/calculator/plugins/core/stepNavigation.js +31 -31
  158. package/dist/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +61 -61
  159. package/dist/maths/calculator/plugins/modifiers/pow10.js +35 -35
  160. package/dist/maths/calculator/plugins/modifiers/sign.js +90 -90
  161. package/dist/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +60 -60
  162. package/dist/maths/calculator/pluginsLoader.js +21 -21
  163. package/dist/maths/calculator/scientificCalculator.js +91 -91
  164. package/dist/mediaEditor/mediaEditorComponent.js +64 -64
  165. package/dist/mediaEditor/plugins/mediaAlignment/helper.js +16 -16
  166. package/dist/mediaEditor/plugins/mediaAlignment/mediaAlignmentComponent.js +60 -60
  167. package/dist/mediaEditor/plugins/mediaAlignment/style.css +7 -7
  168. package/dist/mediaEditor/plugins/mediaDimension/helper.js +70 -70
  169. package/dist/mediaEditor/plugins/mediaDimension/mediaDimensionComponent.js +153 -153
  170. package/dist/mediaEditor/plugins/mediaDimension/style.css +141 -141
  171. package/dist/mediaplayer/css/player.css +7 -7
  172. package/dist/mediaplayer/players/html5.js +65 -65
  173. package/dist/mediaplayer/players/youtube.js +52 -52
  174. package/dist/mediaplayer/players.js +18 -18
  175. package/dist/mediaplayer/support.js +55 -55
  176. package/dist/mediaplayer/utils/reminder.js +100 -100
  177. package/dist/mediaplayer/utils/timeObserver.js +92 -92
  178. package/dist/mediaplayer/youtubeManager.js +35 -35
  179. package/dist/mediaplayer.js +460 -460
  180. package/dist/mediasizer.js +135 -135
  181. package/dist/modal.js +87 -87
  182. package/dist/movableComponent.js +35 -35
  183. package/dist/pageSizeSelector.js +44 -44
  184. package/dist/pageStatus.js +33 -33
  185. package/dist/pagination/css/pagination.css +7 -7
  186. package/dist/pagination/paginationStrategy.js +23 -23
  187. package/dist/pagination/providers/pages.js +37 -37
  188. package/dist/pagination/providers/simple.js +35 -35
  189. package/dist/pagination.js +45 -45
  190. package/dist/previewer.js +67 -67
  191. package/dist/progressbar.js +58 -58
  192. package/dist/report.js +86 -86
  193. package/dist/resource/css/selector.css +7 -7
  194. package/dist/resource/filters.js +73 -73
  195. package/dist/resource/list.js +66 -66
  196. package/dist/resource/selectable.js +92 -92
  197. package/dist/resource/selector.js +195 -195
  198. package/dist/resource/tree.js +104 -104
  199. package/dist/resourcemgr/css/resourcemgr.css +7 -7
  200. package/dist/resourcemgr/fileBrowser.js +98 -95
  201. package/dist/resourcemgr/fileSelector.js +58 -58
  202. package/dist/resourcemgr/util/updatePermissions.js +4 -4
  203. package/dist/resourcemgr.js +62 -62
  204. package/dist/scroller.js +26 -26
  205. package/dist/searchModal/advancedSearch.js +130 -130
  206. package/dist/searchModal/css/advancedSearch.css +7 -7
  207. package/dist/searchModal/css/searchModal.css +7 -7
  208. package/dist/searchModal.js +96 -96
  209. package/dist/selecter.js +6 -6
  210. package/dist/stacker.js +43 -43
  211. package/dist/switch/css/switch.css +7 -7
  212. package/dist/switch/switch.js +75 -75
  213. package/dist/tableModel.js +33 -33
  214. package/dist/tabs/css/tabs.css +12 -12
  215. package/dist/tabs.js +219 -220
  216. package/dist/taskQueue/css/taskQueue.css +7 -7
  217. package/dist/taskQueue/status.js +72 -72
  218. package/dist/taskQueue/table.js +67 -67
  219. package/dist/taskQueue/taskQueue.js +18 -18
  220. package/dist/taskQueue/taskQueueModel.js +86 -86
  221. package/dist/taskQueue.js +47 -47
  222. package/dist/taskQueueButton/css/taskable.css +7 -7
  223. package/dist/taskQueueButton/css/treeButton.css +7 -7
  224. package/dist/taskQueueButton/standardButton.js +39 -39
  225. package/dist/taskQueueButton/taskable.js +54 -54
  226. package/dist/taskQueueButton/treeButton.js +56 -56
  227. package/dist/themeLoader.js +75 -75
  228. package/dist/themes.js +84 -84
  229. package/dist/toggler.js +57 -57
  230. package/dist/tooltip.js +54 -54
  231. package/dist/tooltipster.js +17 -17
  232. package/dist/transformer.js +117 -117
  233. package/dist/tristateCheckboxGroup/css/tristateCheckboxGroup.css +7 -7
  234. package/dist/tristateCheckboxGroup.js +75 -75
  235. package/dist/uploader.js +172 -175
  236. package/dist/validator/validators.js +48 -48
  237. package/dist/validator.js +24 -24
  238. package/dist/waitForMedia.js +33 -33
  239. package/dist/waitingDialog/css/waitingDialog.css +7 -7
  240. package/dist/waitingDialog/waitingDialog.js +54 -54
  241. package/package.json +107 -107
  242. package/scss/basic.scss +16 -16
  243. package/scss/ckeditor/skins/tao/scss/inc/_ck-icons.scss +59 -59
  244. package/scss/ckeditor/skins/tao/scss/inc/_tao.scss +59 -59
  245. package/scss/font/tao/tao.svg +234 -234
  246. package/scss/inc/_base.scss +495 -496
  247. package/scss/inc/_bootstrap.scss +6 -6
  248. package/scss/inc/_buttons.scss +114 -114
  249. package/scss/inc/_colors.scss +88 -88
  250. package/scss/inc/_feedback.scss +150 -150
  251. package/scss/inc/_flex-grid.scss +15 -15
  252. package/scss/inc/_fonts.scss +4 -4
  253. package/scss/inc/_forms.scss +832 -832
  254. package/scss/inc/_functions.scss +283 -283
  255. package/scss/inc/_jquery.nouislider.scss +254 -254
  256. package/scss/inc/_normalize.scss +528 -528
  257. package/scss/inc/_report.scss +67 -67
  258. package/scss/inc/_secondary-properties.scss +89 -89
  259. package/scss/inc/_select2.scss +634 -634
  260. package/scss/inc/_toolbars.scss +155 -155
  261. package/scss/inc/_tooltip.scss +312 -312
  262. package/scss/inc/_variables.scss +21 -21
  263. package/scss/inc/base/_highlight.scss +5 -5
  264. package/scss/inc/base/_list-style.scss +58 -58
  265. package/scss/inc/base/_svg.scss +3 -3
  266. package/scss/inc/base/_table.scss +62 -62
  267. package/scss/inc/fonts/_source-sans-pro.scss +29 -29
  268. package/scss/inc/fonts/_tao-icon-classes.scss +226 -226
  269. package/scss/inc/fonts/_tao-icon-def.scss +12 -12
  270. package/scss/inc/fonts/_tao-icon-vars.scss +240 -240
  271. package/src/.DS_Store +0 -0
  272. package/src/actionbar/tpl/main.tpl +8 -8
  273. package/src/actionbar.js +251 -251
  274. package/src/adder.js +250 -250
  275. package/src/animable/absorbable/absorbable.js +134 -134
  276. package/src/animable/absorbable/css/absorb.css +7 -7
  277. package/src/animable/absorbable/scss/absorb.scss +37 -37
  278. package/src/animable/pulsable/css/pulse.css +7 -7
  279. package/src/animable/pulsable/pulsable.js +90 -90
  280. package/src/animable/pulsable/scss/pulse.scss +22 -22
  281. package/src/areaBroker.js +160 -160
  282. package/src/autocomplete/css/autocomplete.css +7 -7
  283. package/src/autocomplete/scss/autocomplete.scss +37 -37
  284. package/src/autocomplete.js +1029 -1029
  285. package/src/autoscroll.js +57 -57
  286. package/src/badge/badge.js +119 -119
  287. package/src/badge/css/badge.css +7 -7
  288. package/src/badge/scss/badge.scss +92 -92
  289. package/src/badge/tpl/badge.tpl +4 -4
  290. package/src/breadcrumbs/css/breadcrumbs.css +7 -7
  291. package/src/breadcrumbs/scss/breadcrumbs.scss +52 -52
  292. package/src/breadcrumbs/tpl/breadcrumbs.tpl +20 -20
  293. package/src/breadcrumbs.js +99 -99
  294. package/src/btngrouper.js +213 -213
  295. package/src/bulkActionPopup/css/bulkActionPopup.css +7 -7
  296. package/src/bulkActionPopup/scss/bulkActionPopup.scss +63 -63
  297. package/src/bulkActionPopup/tpl/layout.tpl +76 -76
  298. package/src/bulkActionPopup/tpl/select.tpl +8 -8
  299. package/src/bulkActionPopup.js +274 -274
  300. package/src/button/tpl/button.tpl +4 -4
  301. package/src/button.js +135 -135
  302. package/src/calculator/css/calculator.css +10 -10
  303. package/src/calculator/scss/calculator.scss +139 -139
  304. package/src/calculator.js +188 -188
  305. package/src/cascadingComboBox.js +126 -126
  306. package/src/ckeditor/ckConfigurator.js +707 -707
  307. package/src/ckeditor/dtdHandler.js +1030 -1030
  308. package/src/class/css/selector.css +7 -7
  309. package/src/class/scss/selector.scss +101 -101
  310. package/src/class/selector.js +329 -329
  311. package/src/class/tpl/listItem.tpl +9 -9
  312. package/src/class/tpl/selector.tpl +10 -10
  313. package/src/component/alignable.js +274 -274
  314. package/src/component/containable.js +122 -122
  315. package/src/component/css/components.css +7 -7
  316. package/src/component/css/windowComponent.css +7 -7
  317. package/src/component/draggable.js +99 -99
  318. package/src/component/placeable.js +233 -233
  319. package/src/component/resizable.js +190 -190
  320. package/src/component/scss/components.scss +507 -507
  321. package/src/component/scss/windowComponent.scss +62 -62
  322. package/src/component/stackable.js +67 -67
  323. package/src/component/tpl/window.tpl +7 -7
  324. package/src/component/windowed.js +206 -206
  325. package/src/component.js +401 -401
  326. package/src/container.js +200 -200
  327. package/src/contextualPopup/css/contextualPopup.css +7 -7
  328. package/src/contextualPopup/scss/contextualPopup.scss +78 -78
  329. package/src/contextualPopup/tpl/popup.tpl +10 -10
  330. package/src/contextualPopup.js +297 -297
  331. package/src/css/basic.css +7764 -0
  332. package/src/css/ckeditor/skins/tao/css/dialog.css +950 -0
  333. package/src/css/ckeditor/skins/tao/css/editor.css +1850 -0
  334. package/src/dashboard/css/dashboard.css +7 -7
  335. package/src/dashboard/scss/dashboard.scss +93 -93
  336. package/src/dashboard/tpl/dashboard.tpl +16 -16
  337. package/src/dashboard/tpl/dashboardMetricsList.tpl +15 -15
  338. package/src/dashboard.js +184 -184
  339. package/src/datalist/css/datalist.css +7 -7
  340. package/src/datalist/scss/datalist.scss +116 -116
  341. package/src/datalist/tpl/list.tpl +24 -24
  342. package/src/datalist/tpl/main.tpl +44 -44
  343. package/src/datalist.js +500 -500
  344. package/src/datatable/css/datatable.css +7 -7
  345. package/src/datatable/filterStrategy/filterStrategy.js +70 -70
  346. package/src/datatable/filterStrategy/multiple.js +126 -126
  347. package/src/datatable/filterStrategy/single.js +108 -108
  348. package/src/datatable/scss/datatable.scss +146 -146
  349. package/src/datatable/tpl/button.tpl +6 -6
  350. package/src/datatable/tpl/layout.tpl +158 -158
  351. package/src/datatable.js +1056 -1056
  352. package/src/dateRange/css/dateRange.css +7 -7
  353. package/src/dateRange/dateRange.js +341 -341
  354. package/src/dateRange/scss/dateRange.scss +7 -7
  355. package/src/dateRange/tpl/select.tpl +18 -18
  356. package/src/datetime/css/picker.css +7 -7
  357. package/src/datetime/picker.js +576 -576
  358. package/src/datetime/scss/picker.scss +192 -192
  359. package/src/datetime/tpl/picker.tpl +18 -18
  360. package/src/deleter/undo.tpl +6 -6
  361. package/src/deleter.js +296 -296
  362. package/src/destination/css/selector.css +7 -7
  363. package/src/destination/scss/selector.scss +36 -36
  364. package/src/destination/selector.js +195 -195
  365. package/src/destination/tpl/selector.tpl +13 -13
  366. package/src/dialog/alert.js +70 -70
  367. package/src/dialog/confirm.js +85 -85
  368. package/src/dialog/confirmDelete.js +95 -95
  369. package/src/dialog/tpl/body.tpl +24 -24
  370. package/src/dialog/tpl/buttons.tpl +6 -6
  371. package/src/dialog/tpl/checkbox.tpl +5 -5
  372. package/src/dialog.js +517 -517
  373. package/src/disabler.js +230 -230
  374. package/src/documentViewer/css/documentViewer.css +7 -7
  375. package/src/documentViewer/providers/pdfViewer/fallback/viewer.js +69 -69
  376. package/src/documentViewer/providers/pdfViewer/pdfjs/areaBroker.js +41 -41
  377. package/src/documentViewer/providers/pdfViewer/pdfjs/findBar.js +475 -475
  378. package/src/documentViewer/providers/pdfViewer/pdfjs/findBar.tpl +20 -20
  379. package/src/documentViewer/providers/pdfViewer/pdfjs/match.tpl +1 -1
  380. package/src/documentViewer/providers/pdfViewer/pdfjs/page.tpl +4 -4
  381. package/src/documentViewer/providers/pdfViewer/pdfjs/pageView.js +318 -318
  382. package/src/documentViewer/providers/pdfViewer/pdfjs/pagesManager.js +167 -167
  383. package/src/documentViewer/providers/pdfViewer/pdfjs/searchEngine.js +451 -451
  384. package/src/documentViewer/providers/pdfViewer/pdfjs/textManager.js +252 -252
  385. package/src/documentViewer/providers/pdfViewer/pdfjs/viewer.js +299 -299
  386. package/src/documentViewer/providers/pdfViewer/pdfjs/viewer.tpl +16 -16
  387. package/src/documentViewer/providers/pdfViewer/pdfjs/wrapper.js +351 -351
  388. package/src/documentViewer/providers/pdfViewer.js +93 -93
  389. package/src/documentViewer/scss/documentViewer.scss +184 -184
  390. package/src/documentViewer/viewerFactory.js +191 -191
  391. package/src/documentViewer.js +238 -238
  392. package/src/dropdown/css/dropdown.css +7 -7
  393. package/src/dropdown/scss/dropdown.scss +99 -99
  394. package/src/dropdown/tpl/dropdown.tpl +8 -8
  395. package/src/dropdown/tpl/list-item.tpl +4 -4
  396. package/src/dropdown.js +255 -255
  397. package/src/durationer.js +222 -222
  398. package/src/dynamicComponent/css/dynamicComponent.css +7 -7
  399. package/src/dynamicComponent/scss/dynamicComponent.scss +98 -98
  400. package/src/dynamicComponent/tpl/layout.tpl +17 -17
  401. package/src/dynamicComponent.js +554 -554
  402. package/src/feedback/feedback.tpl +7 -7
  403. package/src/feedback.js +295 -295
  404. package/src/filesender.js +114 -114
  405. package/src/filter/template.tpl +5 -5
  406. package/src/filter.js +135 -135
  407. package/src/form/css/dropdownForm.css +7 -7
  408. package/src/form/css/form.css +7 -7
  409. package/src/form/dropdownForm.js +281 -281
  410. package/src/form/form.js +688 -688
  411. package/src/form/scss/dropdownForm.scss +60 -60
  412. package/src/form/scss/form.scss +25 -25
  413. package/src/form/simpleForm.js +125 -125
  414. package/src/form/tpl/dropdownForm.tpl +4 -4
  415. package/src/form/tpl/form.tpl +7 -7
  416. package/src/form/validator/css/validator.css +7 -7
  417. package/src/form/validator/renderer.js +118 -118
  418. package/src/form/validator/scss/validator.scss +14 -14
  419. package/src/form/validator/tpl/message.tpl +1 -1
  420. package/src/form/validator/tpl/validator.tpl +1 -1
  421. package/src/form/validator/validator.js +220 -220
  422. package/src/form/widget/css/widget.css +7 -7
  423. package/src/form/widget/definitions.js +51 -51
  424. package/src/form/widget/loader.js +40 -40
  425. package/src/form/widget/providers/checkBox.js +138 -138
  426. package/src/form/widget/providers/comboBox.js +63 -63
  427. package/src/form/widget/providers/default.js +90 -90
  428. package/src/form/widget/providers/hidden.js +62 -62
  429. package/src/form/widget/providers/hiddenBox.js +152 -152
  430. package/src/form/widget/providers/radioBox.js +99 -99
  431. package/src/form/widget/providers/textArea.js +52 -52
  432. package/src/form/widget/providers/textBox.js +48 -48
  433. package/src/form/widget/scss/widget.scss +55 -55
  434. package/src/form/widget/tpl/checkBox.tpl +25 -25
  435. package/src/form/widget/tpl/comboBox.tpl +13 -13
  436. package/src/form/widget/tpl/hidden.tpl +1 -1
  437. package/src/form/widget/tpl/hiddenBox.tpl +17 -17
  438. package/src/form/widget/tpl/label.tpl +6 -6
  439. package/src/form/widget/tpl/radioBox.tpl +25 -25
  440. package/src/form/widget/tpl/textArea.tpl +8 -8
  441. package/src/form/widget/tpl/widget.tpl +8 -8
  442. package/src/form/widget/widget.js +372 -372
  443. package/src/form.js +53 -53
  444. package/src/formValidator/formValidator.js +253 -253
  445. package/src/formValidator/highlighters/highlighter.js +102 -102
  446. package/src/formValidator/highlighters/message.js +70 -70
  447. package/src/formValidator/highlighters/tooltip.js +78 -78
  448. package/src/generis/form/css/form.css +7 -7
  449. package/src/generis/form/form.js +239 -239
  450. package/src/generis/form/readme.md +70 -70
  451. package/src/generis/form/scss/form.scss +23 -23
  452. package/src/generis/form/tpl/form.tpl +16 -16
  453. package/src/generis/validator/css/validator.css +7 -7
  454. package/src/generis/validator/readme.md +46 -46
  455. package/src/generis/validator/scss/validator.scss +13 -13
  456. package/src/generis/validator/validator.js +128 -128
  457. package/src/generis/widget/checkBox/checkBox.js +112 -112
  458. package/src/generis/widget/checkBox/checkBox.tpl +18 -18
  459. package/src/generis/widget/comboBox/comboBox.js +67 -67
  460. package/src/generis/widget/comboBox/comboBox.tpl +12 -12
  461. package/src/generis/widget/css/widget.css +7 -7
  462. package/src/generis/widget/hiddenBox/hiddenBox.js +132 -132
  463. package/src/generis/widget/hiddenBox/hiddenBox.tpl +16 -16
  464. package/src/generis/widget/loader.js +49 -49
  465. package/src/generis/widget/readme.md +59 -59
  466. package/src/generis/widget/scss/widget.scss +61 -61
  467. package/src/generis/widget/textBox/textBox.js +65 -65
  468. package/src/generis/widget/textBox/textBox.tpl +7 -7
  469. package/src/generis/widget/widget.js +164 -164
  470. package/src/generis/widget/widget.tpl +5 -5
  471. package/src/groupedComboBox.js +99 -99
  472. package/src/groupvalidator.js +84 -84
  473. package/src/hider.js +88 -88
  474. package/src/highlighter.js +1166 -1166
  475. package/src/image/ImgStateActive/extractLabel.js +29 -29
  476. package/src/image/ImgStateActive/initHelper.js +135 -135
  477. package/src/image/ImgStateActive/initMediaEditor.js +91 -91
  478. package/src/image/ImgStateActive/mediaSizer.js +53 -53
  479. package/src/image/ImgStateActive.js +115 -115
  480. package/src/incrementer.js +319 -319
  481. package/src/inplacer.js +316 -316
  482. package/src/interactUtils.js +140 -140
  483. package/src/itemButtonList/css/item-button-list.css +23 -23
  484. package/src/itemButtonList/scss/item-button-list.scss +236 -236
  485. package/src/itemButtonList/tpl/itemButtonList.tpl +21 -21
  486. package/src/itemButtonList.js +274 -274
  487. package/src/keyNavigation/navigableDomElement.js +282 -282
  488. package/src/keyNavigation/navigator.js +543 -543
  489. package/src/listbox/css/listbox.css +7 -7
  490. package/src/listbox/scss/listbox.scss +116 -116
  491. package/src/listbox/tpl/list.tpl +14 -14
  492. package/src/listbox/tpl/main.tpl +9 -9
  493. package/src/listbox.js +251 -251
  494. package/src/liststyler.js +155 -155
  495. package/src/loadingButton/css/button.css +7 -7
  496. package/src/loadingButton/loadingButton.js +110 -110
  497. package/src/loadingButton/scss/button.scss +41 -41
  498. package/src/loadingButton/tpl/button.tpl +5 -5
  499. package/src/lock/lock.tpl +16 -16
  500. package/src/lock.js +395 -395
  501. package/src/login/login.js +322 -322
  502. package/src/login/tpl/login.tpl +29 -29
  503. package/src/login/tpl/passwordReveal.tpl +7 -7
  504. package/src/maths/calculator/basicCalculator.js +55 -55
  505. package/src/maths/calculator/calculatorComponent.js +128 -128
  506. package/src/maths/calculator/core/areaBroker.js +38 -38
  507. package/src/maths/calculator/core/board.js +841 -841
  508. package/src/maths/calculator/core/expression.js +430 -430
  509. package/src/maths/calculator/core/labels.js +116 -116
  510. package/src/maths/calculator/core/plugin.js +40 -40
  511. package/src/maths/calculator/core/terms.js +459 -459
  512. package/src/maths/calculator/core/tokenizer.js +245 -245
  513. package/src/maths/calculator/core/tokens.js +178 -178
  514. package/src/maths/calculator/core/tpl/board.tpl +4 -4
  515. package/src/maths/calculator/css/calculator.css +7 -7
  516. package/src/maths/calculator/defaultCalculator.js +66 -66
  517. package/src/maths/calculator/plugins/core/degrad.js +90 -90
  518. package/src/maths/calculator/plugins/core/history.js +166 -166
  519. package/src/maths/calculator/plugins/core/remind.js +96 -96
  520. package/src/maths/calculator/plugins/core/stepNavigation.js +175 -175
  521. package/src/maths/calculator/plugins/keyboard/templateKeyboard/defaultTemplate.tpl +36 -36
  522. package/src/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +91 -91
  523. package/src/maths/calculator/plugins/modifiers/pow10.js +143 -143
  524. package/src/maths/calculator/plugins/modifiers/sign.js +339 -339
  525. package/src/maths/calculator/plugins/screen/simpleScreen/defaultTemplate.tpl +3 -3
  526. package/src/maths/calculator/plugins/screen/simpleScreen/history.tpl +3 -3
  527. package/src/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +191 -191
  528. package/src/maths/calculator/pluginsLoader.js +46 -46
  529. package/src/maths/calculator/scientificCalculator.js +74 -74
  530. package/src/maths/calculator/scss/calculator.scss +396 -396
  531. package/src/maths/calculator/tpl/basicKeyboard.tpl +37 -37
  532. package/src/maths/calculator/tpl/basicScreen.tpl +2 -2
  533. package/src/maths/calculator/tpl/scientificKeyboard.tpl +61 -61
  534. package/src/maths/calculator/tpl/scientificScreen.tpl +3 -3
  535. package/src/mediaEditor/mediaEditorComponent.js +141 -141
  536. package/src/mediaEditor/plugins/mediaAlignment/helper.js +58 -58
  537. package/src/mediaEditor/plugins/mediaAlignment/mediaAlignmentComponent.js +96 -96
  538. package/src/mediaEditor/plugins/mediaAlignment/style.css +7 -7
  539. package/src/mediaEditor/plugins/mediaAlignment/tpl/mediaAlignment.tpl +25 -25
  540. package/src/mediaEditor/plugins/mediaDimension/helper.js +189 -189
  541. package/src/mediaEditor/plugins/mediaDimension/mediaDimensionComponent.js +561 -561
  542. package/src/mediaEditor/plugins/mediaDimension/style.css +141 -141
  543. package/src/mediaEditor/plugins/mediaDimension/tpl/mediaDimension.tpl +55 -55
  544. package/src/mediaEditor/tpl/editor.tpl +4 -4
  545. package/src/mediaplayer/css/player.css +7 -7
  546. package/src/mediaplayer/players/html5.js +564 -564
  547. package/src/mediaplayer/players/youtube.js +323 -323
  548. package/src/mediaplayer/players.js +29 -29
  549. package/src/mediaplayer/readme.md +305 -305
  550. package/src/mediaplayer/scss/player.scss +530 -530
  551. package/src/mediaplayer/support.js +126 -126
  552. package/src/mediaplayer/tpl/audio.tpl +6 -6
  553. package/src/mediaplayer/tpl/player.tpl +37 -37
  554. package/src/mediaplayer/tpl/source.tpl +1 -1
  555. package/src/mediaplayer/tpl/video.tpl +6 -6
  556. package/src/mediaplayer/tpl/youtube.tpl +1 -1
  557. package/src/mediaplayer/utils/reminder.js +184 -184
  558. package/src/mediaplayer/utils/timeObserver.js +143 -143
  559. package/src/mediaplayer/youtubeManager.js +161 -161
  560. package/src/mediaplayer.js +1606 -1606
  561. package/src/mediasizer/mediasizer.tpl +55 -55
  562. package/src/mediasizer.js +635 -635
  563. package/src/modal.js +365 -365
  564. package/src/movableComponent.js +78 -78
  565. package/src/pageSizeSelector/tpl/pageSizeSelector.tpl +9 -9
  566. package/src/pageSizeSelector.js +107 -107
  567. package/src/pageStatus.js +147 -147
  568. package/src/pagination/css/pagination.css +7 -7
  569. package/src/pagination/paginationStrategy.js +53 -53
  570. package/src/pagination/providers/pages.js +161 -161
  571. package/src/pagination/providers/simple.js +74 -74
  572. package/src/pagination/providers/tpl/pages/page.tpl +1 -1
  573. package/src/pagination/providers/tpl/pages.tpl +8 -8
  574. package/src/pagination/providers/tpl/simple.tpl +7 -7
  575. package/src/pagination/scss/pagination.scss +111 -111
  576. package/src/pagination.js +237 -237
  577. package/src/previewer.js +300 -300
  578. package/src/progressbar.js +165 -165
  579. package/src/report/feedback.tpl +11 -11
  580. package/src/report/layout.tpl +10 -10
  581. package/src/report.js +184 -184
  582. package/src/resource/css/selector.css +7 -7
  583. package/src/resource/filters.js +208 -208
  584. package/src/resource/list.js +200 -200
  585. package/src/resource/scss/_filters.scss +26 -26
  586. package/src/resource/scss/_resource-list.scss +107 -107
  587. package/src/resource/scss/_resource-tree.scss +205 -205
  588. package/src/resource/scss/selector.scss +187 -187
  589. package/src/resource/selectable.js +322 -322
  590. package/src/resource/selector.js +871 -871
  591. package/src/resource/tpl/filters.tpl +2 -2
  592. package/src/resource/tpl/list.tpl +7 -7
  593. package/src/resource/tpl/listNode.tpl +4 -4
  594. package/src/resource/tpl/selector.tpl +46 -46
  595. package/src/resource/tpl/tree.tpl +4 -4
  596. package/src/resource/tpl/treeNode.tpl +30 -30
  597. package/src/resource/tree.js +400 -400
  598. package/src/resourcemgr/css/resourcemgr.css +7 -7
  599. package/src/resourcemgr/fileBrowser.js +381 -370
  600. package/src/resourcemgr/filePreview.js +73 -73
  601. package/src/resourcemgr/fileSelector.js +348 -348
  602. package/src/resourcemgr/scss/resourcemgr.scss +254 -254
  603. package/src/resourcemgr/tpl/fileSelect.tpl +39 -39
  604. package/src/resourcemgr/tpl/folder.tpl +11 -11
  605. package/src/resourcemgr/tpl/layout.tpl +84 -84
  606. package/src/resourcemgr/tpl/rootFolder.tpl +13 -13
  607. package/src/resourcemgr/util/updatePermissions.js +53 -53
  608. package/src/resourcemgr.js +214 -214
  609. package/src/scroller.js +94 -94
  610. package/src/scss/.DS_Store +0 -0
  611. package/src/scss/basic.scss +16 -0
  612. package/src/scss/ckeditor/skins/tao/scss/dialog.scss +763 -0
  613. package/src/scss/ckeditor/skins/tao/scss/editor.scss +111 -0
  614. package/src/scss/ckeditor/skins/tao/scss/inc/_ck-icons.scss +59 -0
  615. package/src/scss/ckeditor/skins/tao/scss/inc/_colorpanel.scss +118 -0
  616. package/src/scss/ckeditor/skins/tao/scss/inc/_elementspath.scss +69 -0
  617. package/src/scss/ckeditor/skins/tao/scss/inc/_mainui.scss +194 -0
  618. package/src/scss/ckeditor/skins/tao/scss/inc/_menu.scss +181 -0
  619. package/src/scss/ckeditor/skins/tao/scss/inc/_panel.scss +200 -0
  620. package/src/scss/ckeditor/skins/tao/scss/inc/_presets.scss +32 -0
  621. package/src/scss/ckeditor/skins/tao/scss/inc/_reset.scss +101 -0
  622. package/src/scss/ckeditor/skins/tao/scss/inc/_richcombo.scss +213 -0
  623. package/src/scss/ckeditor/skins/tao/scss/inc/_tao.scss +59 -0
  624. package/src/scss/ckeditor/skins/tao/scss/inc/_toolbar.scss +301 -0
  625. package/src/scss/font/source-sans-pro/source-sans-pro-italic.eot +0 -0
  626. package/src/scss/font/source-sans-pro/source-sans-pro-italic.eot.b64 +1 -0
  627. package/src/scss/font/source-sans-pro/source-sans-pro-italic.woff +0 -0
  628. package/src/scss/font/source-sans-pro/source-sans-pro-italic.woff.b64 +1 -0
  629. package/src/scss/font/source-sans-pro/source-sans-pro-regular.eot +0 -0
  630. package/src/scss/font/source-sans-pro/source-sans-pro-regular.eot.b64 +1 -0
  631. package/src/scss/font/source-sans-pro/source-sans-pro-regular.woff +0 -0
  632. package/src/scss/font/source-sans-pro/source-sans-pro-regular.woff.b64 +1 -0
  633. package/src/scss/font/source-sans-pro/source-sans-pro-semibold-italic.eot +0 -0
  634. package/src/scss/font/source-sans-pro/source-sans-pro-semibold-italic.eot.b64 +1 -0
  635. package/src/scss/font/source-sans-pro/source-sans-pro-semibold-italic.woff +0 -0
  636. package/src/scss/font/source-sans-pro/source-sans-pro-semibold-italic.woff.b64 +1 -0
  637. package/src/scss/font/source-sans-pro/source-sans-pro-semibold.eot +0 -0
  638. package/src/scss/font/source-sans-pro/source-sans-pro-semibold.eot.b64 +1 -0
  639. package/src/scss/font/source-sans-pro/source-sans-pro-semibold.woff +0 -0
  640. package/src/scss/font/source-sans-pro/source-sans-pro-semibold.woff.b64 +1 -0
  641. package/src/scss/font/tao/tao.eot +0 -0
  642. package/src/scss/font/tao/tao.svg +235 -0
  643. package/src/scss/font/tao/tao.ttf +0 -0
  644. package/src/scss/font/tao/tao.woff +0 -0
  645. package/src/scss/inc/_base.scss +496 -0
  646. package/src/scss/inc/_bootstrap.scss +6 -0
  647. package/src/scss/inc/_buttons.scss +114 -0
  648. package/src/scss/inc/_colors.scss +88 -0
  649. package/src/scss/inc/_feedback.scss +150 -0
  650. package/src/scss/inc/_flex-grid.scss +15 -0
  651. package/src/scss/inc/_fonts.scss +4 -0
  652. package/src/scss/inc/_forms.scss +827 -0
  653. package/src/scss/inc/_functions.scss +283 -0
  654. package/src/scss/inc/_grid.scss +66 -0
  655. package/src/scss/inc/_jquery.nouislider.scss +254 -0
  656. package/src/scss/inc/_normalize.scss +528 -0
  657. package/src/scss/inc/_report.scss +68 -0
  658. package/src/scss/inc/_secondary-properties.scss +89 -0
  659. package/src/scss/inc/_select2.scss +634 -0
  660. package/src/scss/inc/_toolbars.scss +155 -0
  661. package/src/scss/inc/_tooltip.scss +312 -0
  662. package/src/scss/inc/_variables.scss +21 -0
  663. package/src/scss/inc/base/_highlight.scss +5 -0
  664. package/src/scss/inc/base/_list-style.scss +59 -0
  665. package/src/scss/inc/base/_svg.scss +3 -0
  666. package/src/scss/inc/base/_table.scss +63 -0
  667. package/src/scss/inc/fonts/_source-sans-pro.scss +29 -0
  668. package/src/scss/inc/fonts/_tao-icon-classes.scss +226 -0
  669. package/src/scss/inc/fonts/_tao-icon-def.scss +12 -0
  670. package/src/scss/inc/fonts/_tao-icon-vars.scss +240 -0
  671. package/src/searchModal/advancedSearch.js +601 -601
  672. package/src/searchModal/css/advancedSearch.css +7 -7
  673. package/src/searchModal/css/searchModal.css +7 -7
  674. package/src/searchModal/scss/advancedSearch.scss +177 -177
  675. package/src/searchModal/scss/searchModal.scss +375 -375
  676. package/src/searchModal/tpl/advanced-search.tpl +9 -9
  677. package/src/searchModal/tpl/info-message.tpl +3 -3
  678. package/src/searchModal/tpl/invalid-criteria-warning.tpl +10 -10
  679. package/src/searchModal/tpl/layout.tpl +25 -25
  680. package/src/searchModal/tpl/list-checkbox-criterion.tpl +12 -12
  681. package/src/searchModal/tpl/list-select-criterion.tpl +6 -6
  682. package/src/searchModal/tpl/text-criterion.tpl +6 -6
  683. package/src/searchModal.js +496 -496
  684. package/src/selecter.js +43 -43
  685. package/src/stacker.js +133 -133
  686. package/src/switch/css/switch.css +7 -7
  687. package/src/switch/scss/switch.scss +83 -83
  688. package/src/switch/switch.js +195 -195
  689. package/src/switch/tpl/switch.tpl +7 -7
  690. package/src/tableModel.js +112 -112
  691. package/src/tabs/css/tabs.css +12 -12
  692. package/src/tabs/scss/tabs.scss +50 -50
  693. package/src/tabs/tpl/panel.tpl +3 -3
  694. package/src/tabs/tpl/tabs.tpl +10 -10
  695. package/src/tabs.js +528 -529
  696. package/src/taskQueue/css/taskQueue.css +7 -7
  697. package/src/taskQueue/scss/taskQueue.scss +47 -47
  698. package/src/taskQueue/status.js +228 -228
  699. package/src/taskQueue/table.js +350 -350
  700. package/src/taskQueue/taskQueue.js +33 -33
  701. package/src/taskQueue/taskQueueModel.js +548 -548
  702. package/src/taskQueue/tpl/statusMessage.tpl +7 -7
  703. package/src/taskQueue.js +218 -218
  704. package/src/taskQueueButton/css/taskable.css +7 -7
  705. package/src/taskQueueButton/css/treeButton.css +7 -7
  706. package/src/taskQueueButton/scss/taskable.scss +4 -4
  707. package/src/taskQueueButton/scss/treeButton.scss +34 -34
  708. package/src/taskQueueButton/standardButton.js +108 -108
  709. package/src/taskQueueButton/taskable.js +202 -202
  710. package/src/taskQueueButton/tpl/report.tpl +5 -5
  711. package/src/taskQueueButton/tpl/treeButton.tpl +6 -6
  712. package/src/taskQueueButton/treeButton.js +109 -109
  713. package/src/themeLoader.js +252 -252
  714. package/src/themes.js +162 -162
  715. package/src/toggler.js +200 -200
  716. package/src/tooltip/default.tpl +3 -3
  717. package/src/tooltip.js +160 -160
  718. package/src/tooltipster.js +25 -25
  719. package/src/transformer.js +327 -327
  720. package/src/tristateCheckboxGroup/css/tristateCheckboxGroup.css +7 -7
  721. package/src/tristateCheckboxGroup/scss/tristateCheckboxGroup.scss +15 -15
  722. package/src/tristateCheckboxGroup/tpl/li.tpl +6 -6
  723. package/src/tristateCheckboxGroup.js +207 -207
  724. package/src/uploader/fileEntry.tpl +6 -6
  725. package/src/uploader/uploader.tpl +32 -32
  726. package/src/uploader.js +594 -613
  727. package/src/validator/Report.js +10 -10
  728. package/src/validator/Validator.js +108 -108
  729. package/src/validator/validators.js +220 -220
  730. package/src/validator.js +264 -264
  731. package/src/waitForMedia.js +82 -82
  732. package/src/waitingDialog/css/waitingDialog.css +7 -7
  733. package/src/waitingDialog/scss/waitingDialog.scss +34 -34
  734. package/src/waitingDialog/waitingDialog.js +240 -240
  735. package/dist/animable/absorbable/css/absorb.css.map +0 -1
  736. package/dist/animable/pulsable/css/pulse.css.map +0 -1
  737. package/dist/autocomplete/css/autocomplete.css.map +0 -1
  738. package/dist/badge/css/badge.css.map +0 -1
  739. package/dist/breadcrumbs/css/breadcrumbs.css.map +0 -1
  740. package/dist/bulkActionPopup/css/bulkActionPopup.css.map +0 -1
  741. package/dist/calculator/css/calculator.css.map +0 -1
  742. package/dist/class/css/selector.css.map +0 -1
  743. package/dist/component/css/components.css.map +0 -1
  744. package/dist/component/css/windowComponent.css.map +0 -1
  745. package/dist/contextualPopup/css/contextualPopup.css.map +0 -1
  746. package/dist/dashboard/css/dashboard.css.map +0 -1
  747. package/dist/datalist/css/datalist.css.map +0 -1
  748. package/dist/datatable/css/datatable.css.map +0 -1
  749. package/dist/dateRange/css/dateRange.css.map +0 -1
  750. package/dist/datetime/css/picker.css.map +0 -1
  751. package/dist/destination/css/selector.css.map +0 -1
  752. package/dist/documentViewer/css/documentViewer.css.map +0 -1
  753. package/dist/dropdown/css/dropdown.css.map +0 -1
  754. package/dist/dynamicComponent/css/dynamicComponent.css.map +0 -1
  755. package/dist/form/css/dropdownForm.css.map +0 -1
  756. package/dist/form/css/form.css.map +0 -1
  757. package/dist/form/validator/css/validator.css.map +0 -1
  758. package/dist/form/widget/css/widget.css.map +0 -1
  759. package/dist/generis/form/css/form.css.map +0 -1
  760. package/dist/generis/validator/css/validator.css.map +0 -1
  761. package/dist/generis/widget/css/widget.css.map +0 -1
  762. package/dist/itemButtonList/css/item-button-list.css.map +0 -1
  763. package/dist/listbox/css/listbox.css.map +0 -1
  764. package/dist/loadingButton/css/button.css.map +0 -1
  765. package/dist/maths/calculator/css/calculator.css.map +0 -1
  766. package/dist/mediaplayer/css/player.css.map +0 -1
  767. package/dist/pagination/css/pagination.css.map +0 -1
  768. package/dist/resource/css/selector.css.map +0 -1
  769. package/dist/resourcemgr/css/resourcemgr.css.map +0 -1
  770. package/dist/searchModal/css/advancedSearch.css.map +0 -1
  771. package/dist/searchModal/css/searchModal.css.map +0 -1
  772. package/dist/switch/css/switch.css.map +0 -1
  773. package/dist/tabs/css/tabs.css.map +0 -1
  774. package/dist/taskQueue/css/taskQueue.css.map +0 -1
  775. package/dist/taskQueueButton/css/taskable.css.map +0 -1
  776. package/dist/taskQueueButton/css/treeButton.css.map +0 -1
  777. package/dist/tristateCheckboxGroup/css/tristateCheckboxGroup.css.map +0 -1
  778. package/dist/waitingDialog/css/waitingDialog.css.map +0 -1
  779. package/src/animable/absorbable/css/absorb.css.map +0 -1
  780. package/src/animable/pulsable/css/pulse.css.map +0 -1
  781. package/src/autocomplete/css/autocomplete.css.map +0 -1
  782. package/src/badge/css/badge.css.map +0 -1
  783. package/src/breadcrumbs/css/breadcrumbs.css.map +0 -1
  784. package/src/bulkActionPopup/css/bulkActionPopup.css.map +0 -1
  785. package/src/calculator/css/calculator.css.map +0 -1
  786. package/src/class/css/selector.css.map +0 -1
  787. package/src/component/css/components.css.map +0 -1
  788. package/src/component/css/windowComponent.css.map +0 -1
  789. package/src/contextualPopup/css/contextualPopup.css.map +0 -1
  790. package/src/dashboard/css/dashboard.css.map +0 -1
  791. package/src/datalist/css/datalist.css.map +0 -1
  792. package/src/datatable/css/datatable.css.map +0 -1
  793. package/src/dateRange/css/dateRange.css.map +0 -1
  794. package/src/datetime/css/picker.css.map +0 -1
  795. package/src/destination/css/selector.css.map +0 -1
  796. package/src/documentViewer/css/documentViewer.css.map +0 -1
  797. package/src/dropdown/css/dropdown.css.map +0 -1
  798. package/src/dynamicComponent/css/dynamicComponent.css.map +0 -1
  799. package/src/form/css/dropdownForm.css.map +0 -1
  800. package/src/form/css/form.css.map +0 -1
  801. package/src/form/validator/css/validator.css.map +0 -1
  802. package/src/form/widget/css/widget.css.map +0 -1
  803. package/src/generis/form/css/form.css.map +0 -1
  804. package/src/generis/validator/css/validator.css.map +0 -1
  805. package/src/generis/widget/css/widget.css.map +0 -1
  806. package/src/itemButtonList/css/item-button-list.css.map +0 -1
  807. package/src/listbox/css/listbox.css.map +0 -1
  808. package/src/loadingButton/css/button.css.map +0 -1
  809. package/src/maths/calculator/css/calculator.css.map +0 -1
  810. package/src/mediaplayer/css/player.css.map +0 -1
  811. package/src/pagination/css/pagination.css.map +0 -1
  812. package/src/resource/css/selector.css.map +0 -1
  813. package/src/resourcemgr/css/resourcemgr.css.map +0 -1
  814. package/src/searchModal/css/advancedSearch.css.map +0 -1
  815. package/src/searchModal/css/searchModal.css.map +0 -1
  816. package/src/switch/css/switch.css.map +0 -1
  817. package/src/tabs/css/tabs.css.map +0 -1
  818. package/src/taskQueue/css/taskQueue.css.map +0 -1
  819. package/src/taskQueueButton/css/taskable.css.map +0 -1
  820. package/src/taskQueueButton/css/treeButton.css.map +0 -1
  821. package/src/tristateCheckboxGroup/css/tristateCheckboxGroup.css.map +0 -1
  822. package/src/waitingDialog/css/waitingDialog.css.map +0 -1
package/src/tabs.js CHANGED
@@ -1,529 +1,528 @@
1
- /**
2
- * This program is free software; you can redistribute it and/or
3
- * modify it under the terms of the GNU General Public License
4
- * as published by the Free Software Foundation; under version 2
5
- * of the License (non-upgradable).
6
- *
7
- * This program is distributed in the hope that it will be useful,
8
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
9
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
- * GNU General Public License for more details.
11
- *
12
- * You should have received a copy of the GNU General Public License
13
- * along with this program; if not, write to the Free Software
14
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15
- *
16
- * Copyright (c) 2019 (original work) Open Assessment Technologies SA ;
17
- */
18
-
19
- /**
20
- * A simple Tabs component that:
21
- * - manage a list of tabs
22
- * - each tab is represented by an identifier and a label
23
- * - only one tab can be activated at a time
24
- * - when a tab is being activated, a `tabactivate` event is emitted, with the tab identifier as parameter
25
- * - when a tab has been activated, a `tabchange` event is emitted, with the tab identifier as parameter
26
- * - a panel can be linked to each tab, based a data attribute `data-tab-content` that should match the tab name
27
- * - a tab can be disabled
28
- *
29
- * @author Martin Nicholson <martin@taotesting.com>
30
- * @author Ricardo Proença, <ricardo@taotesting.com>
31
- */
32
- import $ from 'jquery';
33
- import _ from 'lodash';
34
- import hider from 'ui/hider';
35
- import componentFactory from 'ui/component';
36
- import tabsTpl from 'ui/tabs/tpl/tabs';
37
- import 'ui/tabs/css/tabs.css';
38
-
39
- /**
40
- * @typedef {Object} tabsBarConfig
41
- * @property {String} [activeTab] - The name of the active tab
42
- * @property {Integer} [activeTabIndex] - the index of the tab to start on
43
- * @property {tabConfig[]} [tabs] - The list of tabs
44
- * @property {Boolean} [hideLoneTab] - Prevent to show the tabs when only one is registered
45
- * @property {jQuery|HTMLElement|String|Boolean} [showHideTarget] - Defines the container where to wire up tabs to
46
- * content, the link will be automatic, based on the data attribute `data-tab-content` that should match the tab name.
47
- * If the value is `true` the component's container will be used to find the panels.
48
- */
49
-
50
- /**
51
- * @typedef {Object} tabConfig
52
- * @property {Boolean} disabled - The tab is disabled
53
- * @property {String} name - The tab identifier
54
- * @property {String} label - The tab label
55
- * @property {String} [icon] - An optional tab icon
56
- * @property {String} [cls] - An optional CSS class name
57
- */
58
-
59
- /**
60
- * CSS class for the active tab
61
- * @type {String}
62
- */
63
- const activeTabCls = 'active';
64
-
65
- /**
66
- * CSS selector for the tabs
67
- * @type {String}
68
- */
69
- const tabSelector = '.tab';
70
-
71
- /**
72
- * CSS selector for the tab actions
73
- * @type {String}
74
- */
75
- const actionSelector = '.action';
76
-
77
- /**
78
- * Name of the attribute that contain the tab identifier
79
- * @type {String}
80
- */
81
- const tabNameAttr = 'data-tab-name';
82
-
83
- /**
84
- * Name of the attribute that contain the panel identifier
85
- * @type {String}
86
- */
87
- const panelNameAttr = 'data-tab-content';
88
-
89
- /**
90
- * Builds an instance of the tabs component.
91
- *
92
- * @example
93
- * // activate by index
94
- * const instance = tabsFactory($container, {
95
- * tabs: [
96
- * { label: 'TAO Local', name: 'local-delivery' },
97
- * { label: 'TAO Remote', name: 'remote-delivery' },
98
- * { label: 'LTI-based', name: 'lti-delivery', disabled: true }
99
- * ],
100
- * activeTabIndex: 1
101
- * });
102
- *
103
- * // activate by name
104
- * const instance = tabsFactory($container, {
105
- * tabs: [
106
- * { label: 'TAO Local', name: 'local-delivery' },
107
- * { label: 'TAO Remote', name: 'remote-delivery' },
108
- * { label: 'LTI-based', name: 'lti-delivery', disabled: true }
109
- * ],
110
- * activeTab: 'remote-delivery'
111
- * });
112
- *
113
- * // link to panels
114
- * const instance = tabsFactory($container, {
115
- * showHideTarget: $panelContainer,
116
- * tabs: [
117
- * { label: 'TAO Local', name: 'local-delivery' },
118
- * { label: 'TAO Remote', name: 'remote-delivery' },
119
- * { label: 'LTI-based', name: 'lti-delivery', disabled: true }
120
- * ]
121
- * });
122
- *
123
- * instance
124
- * .on('ready', function onReady() {
125
- * // the component is ready
126
- * })
127
- * .before('tabactivate', function beforeTabChange(e, name) {
128
- * // a tab is being activated
129
- * // it is possible to prevent its activation by returning a rejected promise
130
- * if (name === 'lti-delivery') {
131
- * return Promise.reject();
132
- * }
133
- * })
134
- * .on('tabchange', function onTabChange(name) {
135
- * // a tab has been activated
136
- * });
137
- *
138
- * @param {HTMLElement|String} container
139
- * @param {tabsBarConfig} config
140
- * @param {String} [config.activeTab] - The name of the active tab
141
- * @param {Integer} [config.activeTabIndex] - the index of the tab to start on
142
- * @param {tabConfig[]} [config.tabs] - The list of tabs
143
- * @param {Boolean} [config.hideLoneTab] - Prevent to show the tabs when only one is registered
144
- * @param {jQuery|HTMLElement|String|Boolean} [config.showHideTarget] - Defines the container where to wire up tabs to
145
- * content, the link will be automatic, based on the data attribute `data-tab-content` that should match the tab name.
146
- * If the value is `true` the component's container will be used to find the panels.
147
- * @returns {tabsBarComponent}
148
- * @fires ready - When the component is ready to work
149
- * @fires error - When the component encounters issue
150
- * @fires tabactivate - Each time a tab must be activated
151
- * @fires tabchange - Each time a tab has been activated
152
- * @fires tabchange-${name} - Each time the named tab has been activated
153
- * @fires tabsupdate - Each time the tabs are updated
154
- */
155
- function tabsFactory(container, config) {
156
- // the list of displayed tabs
157
- let tabs = [];
158
-
159
- // the current active tab
160
- let activeTabName = null;
161
-
162
- // enable/disable elements
163
- const enableElement = $el => $el.prop('disabled', false);
164
- const disableElement = $el => $el.prop('disabled', true);
165
-
166
- /**
167
- * Gets a tab by its name
168
- * @param {String} name
169
- * @returns {tabConfig}
170
- */
171
- const findTabByName = name => tabs.find(tab => tab.name === name);
172
-
173
- /**
174
- * Gets a tab by its name, throw a TypeError if the tab does not exist
175
- * @param {String} name - human-readable identifier
176
- * @returns {tabConfig}
177
- * @throws {TypeError} on invalid name param
178
- */
179
- const findTabByNameOrThrow = name => {
180
- const tab = findTabByName(name);
181
- if (!tab) {
182
- throw new TypeError(`No tab exists with the name: ${name}`);
183
- }
184
- return tab;
185
- };
186
-
187
- /**
188
- * Initializes the tabs
189
- * @param {tabsBarComponent} component
190
- */
191
- const initTabs = component => {
192
- if (activeTabName) {
193
- const activeTab = activeTabName;
194
- activeTabName = null;
195
- component.setActiveTab(activeTab);
196
- }
197
-
198
- if (component.getConfig().hideLoneTab && tabs.length === 1) {
199
- hider.hide(component.getElement().find(tabSelector));
200
- }
201
- };
202
-
203
- /**
204
- * API of the tabs component
205
- * @exports ui/tabs
206
- */
207
- const tabsApi = {
208
- /**
209
- * Set new values for the tabs
210
- * @param {Array} newTabs
211
- * @returns {tabsBarComponent} instance
212
- * @throws {TypeError} on non-Array tabs
213
- * @fires tabsupdate once the tabs have been updated
214
- * @fires tabactivate once the active tab is updated
215
- */
216
- setTabs(newTabs) {
217
- if (!Array.isArray(newTabs)) {
218
- throw new TypeError('The provided tabs are not a valid array');
219
- }
220
-
221
- tabs = [...newTabs];
222
-
223
- // reset tab to default if needed
224
- if (!activeTabName || !findTabByName(activeTabName)) {
225
- activeTabName = this.getDefaultActiveTab();
226
- }
227
-
228
- // replace the displayed tabs if already rendered
229
- if (this.is('rendered')) {
230
- const template = this.getTemplate();
231
- this.getElement().html(
232
- $(template({tabs})).html()
233
- );
234
-
235
- // make sure the tab is selected and hide lone tab if needed
236
- initTabs(this);
237
- }
238
-
239
- /**
240
- * @event tabsupdate - Tabs have been updated
241
- * @param {Array} newTabs
242
- */
243
- this.trigger('tabsupdate', newTabs);
244
-
245
- return this;
246
- },
247
-
248
- /**
249
- * Retrieve internal tabs array
250
- * @returns {Array} tabs list
251
- */
252
- getTabs() {
253
- return [...tabs];
254
- },
255
-
256
- /**
257
- * Gets the name of the active tab (if any)
258
- * @returns {String}
259
- */
260
- getActiveTab() {
261
- return activeTabName;
262
- },
263
-
264
- /**
265
- * Gets the index of the current active tab (if any)
266
- * @returns {Number}
267
- */
268
- getActiveTabIndex() {
269
- return tabs.findIndex(tab => tab.name === activeTabName);
270
- },
271
-
272
- /**
273
- * Gets the name of the default active tab
274
- * @returns {String|null}
275
- */
276
- getDefaultActiveTab() {
277
- const {activeTab, activeTabIndex} = this.getConfig();
278
-
279
- if (activeTab && findTabByName(activeTab)) {
280
- return activeTab;
281
- }
282
-
283
- if (typeof activeTabIndex === 'number' && tabs[activeTabIndex]) {
284
- return tabs[activeTabIndex].name;
285
- }
286
-
287
- return tabs.length && tabs[0].name || null;
288
- },
289
-
290
- /**
291
- * Activates a single tab by its name (deactivating others)
292
- * @param {String} name - human-readable identifier
293
- * @returns {tabsBarComponent} instance
294
- * @throws {TypeError} on invalid name param
295
- * @fires tabactivate
296
- */
297
- setActiveTab(name) {
298
- const tab = findTabByNameOrThrow(name);
299
-
300
- if (!tab.disabled) {
301
- /**
302
- * @event tabactivate - A tab is being activated
303
- * @param {String} - name
304
- */
305
- this.trigger('tabactivate', tab.name);
306
- }
307
-
308
- return this;
309
- },
310
-
311
- /**
312
- * Activates a single tab by its index (deactivating others)
313
- * Triggers the automatic showing & hiding of target tab-contents
314
- * @param {Number} index - zero-based
315
- * @returns {tabsBarComponent} instance
316
- * @throws {TypeError} on invalid index param
317
- * @fires tabactivate
318
- */
319
- setActiveTabIndex(index) {
320
- if (typeof index !== 'number' || index < 0 || index >= tabs.length) {
321
- throw new TypeError(`No tab exists at index: ${index}`);
322
- }
323
- const tab = tabs[index];
324
- if (!tab.disabled) {
325
- /**
326
- * @event tabactivate - A tab is being activated
327
- * @param {String} - name
328
- */
329
- this.trigger('tabactivate', tab.name);
330
- }
331
-
332
- return this;
333
- },
334
-
335
- /**
336
- * Enables a single tab by its name
337
- * @param {String} name - human-readable identifier
338
- * @returns {tabsBarComponent} instance
339
- * @throws {TypeError} on invalid name param
340
- * @fires tabenable
341
- */
342
- enableTab(name) {
343
- const tab = findTabByNameOrThrow(name);
344
-
345
- tab.disabled = false;
346
-
347
- if (this.is('rendered')) {
348
- enableElement(this.getElement().find(`[${tabNameAttr}="${name}"] ${actionSelector}`));
349
- }
350
-
351
- /**
352
- * @event tabenable - A tab is enabled
353
- * @param {String} - name
354
- */
355
- this.trigger('tabenable', name);
356
-
357
- return this;
358
- },
359
-
360
- /**
361
- * Disables a single tab by its name
362
- * @param {String} name - human-readable identifier
363
- * @returns {tabsBarComponent} instance
364
- * @throws {TypeError} on invalid name param
365
- * @fires tabdisable
366
- */
367
- disableTab(name) {
368
- const tab = findTabByNameOrThrow(name);
369
-
370
- tab.disabled = true;
371
-
372
- if (this.is('rendered')) {
373
- disableElement(this.getElement().find(`[${tabNameAttr}="${name}"] ${actionSelector}`));
374
- }
375
-
376
- /**
377
- * @event tabdisable - A tab is disabled
378
- * @param {String} - name
379
- */
380
- this.trigger('tabdisable', name);
381
- },
382
-
383
- /**
384
- * Shows one tab content, hides the rest
385
- * The tab content elements are not tied to any template and can be located anywhere in the DOM
386
- * @param {String} name - human-readable identifier
387
- * @throws {TypeError} on invalid name param
388
- * @fires tabshowcontent
389
- */
390
- showTabContent(name) {
391
- findTabByNameOrThrow(name);
392
-
393
- const {showHideTarget} = this.getConfig();
394
- if (showHideTarget) {
395
- (showHideTarget === true ? this.getContainer() : $(showHideTarget))
396
- .find(`[${panelNameAttr}]`)
397
- .addClass('hidden')
398
- .filter(`[${panelNameAttr}="${name}"]`)
399
- .removeClass('hidden');
400
- }
401
-
402
- /**
403
- * @event tabshowcontent - A tab panel is displayed
404
- * @param {String} - name
405
- */
406
- this.trigger('tabshowcontent', name);
407
- }
408
- };
409
-
410
- /**
411
- * @typedef {component} tabsBarComponent
412
- */
413
- const tabsBarComponent = componentFactory(tabsApi)
414
- // set the component's layout
415
- .setTemplate(tabsTpl)
416
-
417
- // auto render on init
418
- .on('init', function onTabsBarInit() {
419
- try {
420
- // extract the tabs from the config
421
- if (this.config && this.config.tabs) {
422
- this.setTabs(this.config.tabs);
423
- }
424
-
425
- // auto render on init (defer the call to give a chance to the init event to be completed before)
426
- _.defer(() => this.render(container));
427
- } catch (err) {
428
- /**
429
- * @event error
430
- * @param {Error} err
431
- */
432
- this.trigger('error', err);
433
- }
434
- })
435
-
436
- // renders the component
437
- .on('render', function onTabsBarRender() {
438
- try {
439
- // make sure the tab is selected and hide lone tab if needed
440
- initTabs(this);
441
- } catch (err) {
442
- /**
443
- * @event error
444
- * @param {Error} err
445
- */
446
- this.trigger('error', err);
447
- }
448
-
449
- // delegate the click on tabs
450
- this.getElement().on('click', tabSelector, e => {
451
- try {
452
- this.setActiveTab(e.currentTarget.getAttribute(tabNameAttr));
453
- } catch (err) {
454
- /**
455
- * @event error
456
- * @param {Error} err
457
- */
458
- this.trigger('error', err);
459
- }
460
- });
461
-
462
- /**
463
- * @event ready - The component is ready to work
464
- */
465
- this.trigger('ready');
466
- })
467
-
468
- // take care of the disable state
469
- .on('disable', function onButtonDisable() {
470
- if (this.is('rendered')) {
471
- disableElement(this.getElement().find(`[${tabNameAttr}] ${actionSelector}`));
472
- }
473
- })
474
- .on('enable', function onButtonEnable() {
475
- if (this.is('rendered')) {
476
- this.getElement()
477
- .find(`[${tabNameAttr}] ${actionSelector}`)
478
- .each((index, el) => {
479
- const tab = findTabByName(el.parentNode.getAttribute(tabNameAttr));
480
- if (!tab || !tab.disabled) {
481
- el.disabled = false;
482
- }
483
- });
484
- }
485
- })
486
-
487
- // reacts to tab activate
488
- .on('tabactivate', function onTabActivate(name) {
489
- const tab = findTabByName(name);
490
- if (tab && !tab.disabled && name !== activeTabName) {
491
- activeTabName = name;
492
-
493
- if (this.is('rendered')) {
494
- this.getElement()
495
- .find(tabSelector)
496
- .removeClass(activeTabCls)
497
- .filter(`[${tabNameAttr}="${name}"]`)
498
- .addClass(activeTabCls);
499
- }
500
-
501
- /**
502
- * @event tabchange - A tab is activated
503
- * @param {String} - name
504
- */
505
- this.trigger('tabchange', name);
506
- }
507
- })
508
-
509
- // reacts to tab change
510
- .on('tabchange', function onTabChange(name) {
511
- // auto show the linked panel
512
- if (this.getConfig().showHideTarget) {
513
- this.showTabContent(name);
514
- }
515
-
516
- /**
517
- * @event tabchange-${name} - The tab is activated
518
- */
519
- this.trigger(`tabchange-${name}`);
520
- });
521
-
522
- // initialize the component with the provided config
523
- // defer the call to allow to listen to the init event
524
- _.defer(() => tabsBarComponent.init(config));
525
-
526
- return tabsBarComponent;
527
- }
528
-
529
- export default tabsFactory;
1
+ /**
2
+ * This program is free software; you can redistribute it and/or
3
+ * modify it under the terms of the GNU General Public License
4
+ * as published by the Free Software Foundation; under version 2
5
+ * of the License (non-upgradable).
6
+ *
7
+ * This program is distributed in the hope that it will be useful,
8
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
9
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
+ * GNU General Public License for more details.
11
+ *
12
+ * You should have received a copy of the GNU General Public License
13
+ * along with this program; if not, write to the Free Software
14
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15
+ *
16
+ * Copyright (c) 2019 (original work) Open Assessment Technologies SA ;
17
+ */
18
+
19
+ /**
20
+ * A simple Tabs component that:
21
+ * - manage a list of tabs
22
+ * - each tab is represented by an identifier and a label
23
+ * - only one tab can be activated at a time
24
+ * - when a tab is being activated, a `tabactivate` event is emitted, with the tab identifier as parameter
25
+ * - when a tab has been activated, a `tabchange` event is emitted, with the tab identifier as parameter
26
+ * - a panel can be linked to each tab, based a data attribute `data-tab-content` that should match the tab name
27
+ * - a tab can be disabled
28
+ *
29
+ * @author Martin Nicholson <martin@taotesting.com>
30
+ * @author Ricardo Proença, <ricardo@taotesting.com>
31
+ */
32
+ import $ from 'jquery';
33
+ import _ from 'lodash';
34
+ import componentFactory from 'ui/component';
35
+ import tabsTpl from 'ui/tabs/tpl/tabs';
36
+ import 'ui/tabs/css/tabs.css';
37
+
38
+ /**
39
+ * @typedef {Object} tabsBarConfig
40
+ * @property {String} [activeTab] - The name of the active tab
41
+ * @property {Integer} [activeTabIndex] - the index of the tab to start on
42
+ * @property {tabConfig[]} [tabs] - The list of tabs
43
+ * @property {Boolean} [hideLoneTab] - Prevent to show the tabs when only one is registered
44
+ * @property {jQuery|HTMLElement|String|Boolean} [showHideTarget] - Defines the container where to wire up tabs to
45
+ * content, the link will be automatic, based on the data attribute `data-tab-content` that should match the tab name.
46
+ * If the value is `true` the component's container will be used to find the panels.
47
+ */
48
+
49
+ /**
50
+ * @typedef {Object} tabConfig
51
+ * @property {Boolean} disabled - The tab is disabled
52
+ * @property {String} name - The tab identifier
53
+ * @property {String} label - The tab label
54
+ * @property {String} [icon] - An optional tab icon
55
+ * @property {String} [cls] - An optional CSS class name
56
+ */
57
+
58
+ /**
59
+ * CSS class for the active tab
60
+ * @type {String}
61
+ */
62
+ const activeTabCls = 'active';
63
+
64
+ /**
65
+ * CSS selector for the tabs
66
+ * @type {String}
67
+ */
68
+ const tabSelector = '.tab';
69
+
70
+ /**
71
+ * CSS selector for the tab actions
72
+ * @type {String}
73
+ */
74
+ const actionSelector = '.action';
75
+
76
+ /**
77
+ * Name of the attribute that contain the tab identifier
78
+ * @type {String}
79
+ */
80
+ const tabNameAttr = 'data-tab-name';
81
+
82
+ /**
83
+ * Name of the attribute that contain the panel identifier
84
+ * @type {String}
85
+ */
86
+ const panelNameAttr = 'data-tab-content';
87
+
88
+ /**
89
+ * Builds an instance of the tabs component.
90
+ *
91
+ * @example
92
+ * // activate by index
93
+ * const instance = tabsFactory($container, {
94
+ * tabs: [
95
+ * { label: 'TAO Local', name: 'local-delivery' },
96
+ * { label: 'TAO Remote', name: 'remote-delivery' },
97
+ * { label: 'LTI-based', name: 'lti-delivery', disabled: true }
98
+ * ],
99
+ * activeTabIndex: 1
100
+ * });
101
+ *
102
+ * // activate by name
103
+ * const instance = tabsFactory($container, {
104
+ * tabs: [
105
+ * { label: 'TAO Local', name: 'local-delivery' },
106
+ * { label: 'TAO Remote', name: 'remote-delivery' },
107
+ * { label: 'LTI-based', name: 'lti-delivery', disabled: true }
108
+ * ],
109
+ * activeTab: 'remote-delivery'
110
+ * });
111
+ *
112
+ * // link to panels
113
+ * const instance = tabsFactory($container, {
114
+ * showHideTarget: $panelContainer,
115
+ * tabs: [
116
+ * { label: 'TAO Local', name: 'local-delivery' },
117
+ * { label: 'TAO Remote', name: 'remote-delivery' },
118
+ * { label: 'LTI-based', name: 'lti-delivery', disabled: true }
119
+ * ]
120
+ * });
121
+ *
122
+ * instance
123
+ * .on('ready', function onReady() {
124
+ * // the component is ready
125
+ * })
126
+ * .before('tabactivate', function beforeTabChange(e, name) {
127
+ * // a tab is being activated
128
+ * // it is possible to prevent its activation by returning a rejected promise
129
+ * if (name === 'lti-delivery') {
130
+ * return Promise.reject();
131
+ * }
132
+ * })
133
+ * .on('tabchange', function onTabChange(name) {
134
+ * // a tab has been activated
135
+ * });
136
+ *
137
+ * @param {HTMLElement|String} container
138
+ * @param {tabsBarConfig} config
139
+ * @param {String} [config.activeTab] - The name of the active tab
140
+ * @param {Integer} [config.activeTabIndex] - the index of the tab to start on
141
+ * @param {tabConfig[]} [config.tabs] - The list of tabs
142
+ * @param {Boolean} [config.hideLoneTab] - Prevent to show the tabs when only one is registered
143
+ * @param {jQuery|HTMLElement|String|Boolean} [config.showHideTarget] - Defines the container where to wire up tabs to
144
+ * content, the link will be automatic, based on the data attribute `data-tab-content` that should match the tab name.
145
+ * If the value is `true` the component's container will be used to find the panels.
146
+ * @returns {tabsBarComponent}
147
+ * @fires ready - When the component is ready to work
148
+ * @fires error - When the component encounters issue
149
+ * @fires tabactivate - Each time a tab must be activated
150
+ * @fires tabchange - Each time a tab has been activated
151
+ * @fires tabchange-${name} - Each time the named tab has been activated
152
+ * @fires tabsupdate - Each time the tabs are updated
153
+ */
154
+ function tabsFactory(container, config) {
155
+ // the list of displayed tabs
156
+ let tabs = [];
157
+
158
+ // the current active tab
159
+ let activeTabName = null;
160
+
161
+ // enable/disable elements
162
+ const enableElement = $el => $el.prop('disabled', false);
163
+ const disableElement = $el => $el.prop('disabled', true);
164
+
165
+ /**
166
+ * Gets a tab by its name
167
+ * @param {String} name
168
+ * @returns {tabConfig}
169
+ */
170
+ const findTabByName = name => tabs.find(tab => tab.name === name);
171
+
172
+ /**
173
+ * Gets a tab by its name, throw a TypeError if the tab does not exist
174
+ * @param {String} name - human-readable identifier
175
+ * @returns {tabConfig}
176
+ * @throws {TypeError} on invalid name param
177
+ */
178
+ const findTabByNameOrThrow = name => {
179
+ const tab = findTabByName(name);
180
+ if (!tab) {
181
+ throw new TypeError(`No tab exists with the name: ${name}`);
182
+ }
183
+ return tab;
184
+ };
185
+
186
+ /**
187
+ * Initializes the tabs
188
+ * @param {tabsBarComponent} component
189
+ */
190
+ const initTabs = component => {
191
+ if (activeTabName) {
192
+ const activeTab = activeTabName;
193
+ activeTabName = null;
194
+ component.setActiveTab(activeTab);
195
+ }
196
+
197
+ if (component.getConfig().hideLoneTab && tabs.length === 1) {
198
+ component.hide();
199
+ }
200
+ };
201
+
202
+ /**
203
+ * API of the tabs component
204
+ * @exports ui/tabs
205
+ */
206
+ const tabsApi = {
207
+ /**
208
+ * Set new values for the tabs
209
+ * @param {Array} newTabs
210
+ * @returns {tabsBarComponent} instance
211
+ * @throws {TypeError} on non-Array tabs
212
+ * @fires tabsupdate once the tabs have been updated
213
+ * @fires tabactivate once the active tab is updated
214
+ */
215
+ setTabs(newTabs) {
216
+ if (!Array.isArray(newTabs)) {
217
+ throw new TypeError('The provided tabs are not a valid array');
218
+ }
219
+
220
+ tabs = [...newTabs];
221
+
222
+ // reset tab to default if needed
223
+ if (!activeTabName || !findTabByName(activeTabName)) {
224
+ activeTabName = this.getDefaultActiveTab();
225
+ }
226
+
227
+ // replace the displayed tabs if already rendered
228
+ if (this.is('rendered')) {
229
+ const template = this.getTemplate();
230
+ this.getElement().html(
231
+ $(template({tabs})).html()
232
+ );
233
+
234
+ // make sure the tab is selected and hide lone tab if needed
235
+ initTabs(this);
236
+ }
237
+
238
+ /**
239
+ * @event tabsupdate - Tabs have been updated
240
+ * @param {Array} newTabs
241
+ */
242
+ this.trigger('tabsupdate', newTabs);
243
+
244
+ return this;
245
+ },
246
+
247
+ /**
248
+ * Retrieve internal tabs array
249
+ * @returns {Array} tabs list
250
+ */
251
+ getTabs() {
252
+ return [...tabs];
253
+ },
254
+
255
+ /**
256
+ * Gets the name of the active tab (if any)
257
+ * @returns {String}
258
+ */
259
+ getActiveTab() {
260
+ return activeTabName;
261
+ },
262
+
263
+ /**
264
+ * Gets the index of the current active tab (if any)
265
+ * @returns {Number}
266
+ */
267
+ getActiveTabIndex() {
268
+ return tabs.findIndex(tab => tab.name === activeTabName);
269
+ },
270
+
271
+ /**
272
+ * Gets the name of the default active tab
273
+ * @returns {String|null}
274
+ */
275
+ getDefaultActiveTab() {
276
+ const {activeTab, activeTabIndex} = this.getConfig();
277
+
278
+ if (activeTab && findTabByName(activeTab)) {
279
+ return activeTab;
280
+ }
281
+
282
+ if (typeof activeTabIndex === 'number' && tabs[activeTabIndex]) {
283
+ return tabs[activeTabIndex].name;
284
+ }
285
+
286
+ return tabs.length && tabs[0].name || null;
287
+ },
288
+
289
+ /**
290
+ * Activates a single tab by its name (deactivating others)
291
+ * @param {String} name - human-readable identifier
292
+ * @returns {tabsBarComponent} instance
293
+ * @throws {TypeError} on invalid name param
294
+ * @fires tabactivate
295
+ */
296
+ setActiveTab(name) {
297
+ const tab = findTabByNameOrThrow(name);
298
+
299
+ if (!tab.disabled) {
300
+ /**
301
+ * @event tabactivate - A tab is being activated
302
+ * @param {String} - name
303
+ */
304
+ this.trigger('tabactivate', tab.name);
305
+ }
306
+
307
+ return this;
308
+ },
309
+
310
+ /**
311
+ * Activates a single tab by its index (deactivating others)
312
+ * Triggers the automatic showing & hiding of target tab-contents
313
+ * @param {Number} index - zero-based
314
+ * @returns {tabsBarComponent} instance
315
+ * @throws {TypeError} on invalid index param
316
+ * @fires tabactivate
317
+ */
318
+ setActiveTabIndex(index) {
319
+ if (typeof index !== 'number' || index < 0 || index >= tabs.length) {
320
+ throw new TypeError(`No tab exists at index: ${index}`);
321
+ }
322
+ const tab = tabs[index];
323
+ if (!tab.disabled) {
324
+ /**
325
+ * @event tabactivate - A tab is being activated
326
+ * @param {String} - name
327
+ */
328
+ this.trigger('tabactivate', tab.name);
329
+ }
330
+
331
+ return this;
332
+ },
333
+
334
+ /**
335
+ * Enables a single tab by its name
336
+ * @param {String} name - human-readable identifier
337
+ * @returns {tabsBarComponent} instance
338
+ * @throws {TypeError} on invalid name param
339
+ * @fires tabenable
340
+ */
341
+ enableTab(name) {
342
+ const tab = findTabByNameOrThrow(name);
343
+
344
+ tab.disabled = false;
345
+
346
+ if (this.is('rendered')) {
347
+ enableElement(this.getElement().find(`[${tabNameAttr}="${name}"] ${actionSelector}`));
348
+ }
349
+
350
+ /**
351
+ * @event tabenable - A tab is enabled
352
+ * @param {String} - name
353
+ */
354
+ this.trigger('tabenable', name);
355
+
356
+ return this;
357
+ },
358
+
359
+ /**
360
+ * Disables a single tab by its name
361
+ * @param {String} name - human-readable identifier
362
+ * @returns {tabsBarComponent} instance
363
+ * @throws {TypeError} on invalid name param
364
+ * @fires tabdisable
365
+ */
366
+ disableTab(name) {
367
+ const tab = findTabByNameOrThrow(name);
368
+
369
+ tab.disabled = true;
370
+
371
+ if (this.is('rendered')) {
372
+ disableElement(this.getElement().find(`[${tabNameAttr}="${name}"] ${actionSelector}`));
373
+ }
374
+
375
+ /**
376
+ * @event tabdisable - A tab is disabled
377
+ * @param {String} - name
378
+ */
379
+ this.trigger('tabdisable', name);
380
+ },
381
+
382
+ /**
383
+ * Shows one tab content, hides the rest
384
+ * The tab content elements are not tied to any template and can be located anywhere in the DOM
385
+ * @param {String} name - human-readable identifier
386
+ * @throws {TypeError} on invalid name param
387
+ * @fires tabshowcontent
388
+ */
389
+ showTabContent(name) {
390
+ findTabByNameOrThrow(name);
391
+
392
+ const {showHideTarget} = this.getConfig();
393
+ if (showHideTarget) {
394
+ (showHideTarget === true ? this.getContainer() : $(showHideTarget))
395
+ .find(`[${panelNameAttr}]`)
396
+ .addClass('hidden')
397
+ .filter(`[${panelNameAttr}="${name}"]`)
398
+ .removeClass('hidden');
399
+ }
400
+
401
+ /**
402
+ * @event tabshowcontent - A tab panel is displayed
403
+ * @param {String} - name
404
+ */
405
+ this.trigger('tabshowcontent', name);
406
+ }
407
+ };
408
+
409
+ /**
410
+ * @typedef {component} tabsBarComponent
411
+ */
412
+ const tabsBarComponent = componentFactory(tabsApi)
413
+ // set the component's layout
414
+ .setTemplate(tabsTpl)
415
+
416
+ // auto render on init
417
+ .on('init', function onTabsBarInit() {
418
+ try {
419
+ // extract the tabs from the config
420
+ if (this.config && this.config.tabs) {
421
+ this.setTabs(this.config.tabs);
422
+ }
423
+
424
+ // auto render on init (defer the call to give a chance to the init event to be completed before)
425
+ _.defer(() => this.render(container));
426
+ } catch (err) {
427
+ /**
428
+ * @event error
429
+ * @param {Error} err
430
+ */
431
+ this.trigger('error', err);
432
+ }
433
+ })
434
+
435
+ // renders the component
436
+ .on('render', function onTabsBarRender() {
437
+ try {
438
+ // make sure the tab is selected and hide lone tab if needed
439
+ initTabs(this);
440
+ } catch (err) {
441
+ /**
442
+ * @event error
443
+ * @param {Error} err
444
+ */
445
+ this.trigger('error', err);
446
+ }
447
+
448
+ // delegate the click on tabs
449
+ this.getElement().on('click', tabSelector, e => {
450
+ try {
451
+ this.setActiveTab(e.currentTarget.getAttribute(tabNameAttr));
452
+ } catch (err) {
453
+ /**
454
+ * @event error
455
+ * @param {Error} err
456
+ */
457
+ this.trigger('error', err);
458
+ }
459
+ });
460
+
461
+ /**
462
+ * @event ready - The component is ready to work
463
+ */
464
+ this.trigger('ready');
465
+ })
466
+
467
+ // take care of the disable state
468
+ .on('disable', function onButtonDisable() {
469
+ if (this.is('rendered')) {
470
+ disableElement(this.getElement().find(`[${tabNameAttr}] ${actionSelector}`));
471
+ }
472
+ })
473
+ .on('enable', function onButtonEnable() {
474
+ if (this.is('rendered')) {
475
+ this.getElement()
476
+ .find(`[${tabNameAttr}] ${actionSelector}`)
477
+ .each((index, el) => {
478
+ const tab = findTabByName(el.parentNode.getAttribute(tabNameAttr));
479
+ if (!tab || !tab.disabled) {
480
+ el.disabled = false;
481
+ }
482
+ });
483
+ }
484
+ })
485
+
486
+ // reacts to tab activate
487
+ .on('tabactivate', function onTabActivate(name) {
488
+ const tab = findTabByName(name);
489
+ if (tab && !tab.disabled && name !== activeTabName) {
490
+ activeTabName = name;
491
+
492
+ if (this.is('rendered')) {
493
+ this.getElement()
494
+ .find(tabSelector)
495
+ .removeClass(activeTabCls)
496
+ .filter(`[${tabNameAttr}="${name}"]`)
497
+ .addClass(activeTabCls);
498
+ }
499
+
500
+ /**
501
+ * @event tabchange - A tab is activated
502
+ * @param {String} - name
503
+ */
504
+ this.trigger('tabchange', name);
505
+ }
506
+ })
507
+
508
+ // reacts to tab change
509
+ .on('tabchange', function onTabChange(name) {
510
+ // auto show the linked panel
511
+ if (this.getConfig().showHideTarget) {
512
+ this.showTabContent(name);
513
+ }
514
+
515
+ /**
516
+ * @event tabchange-${name} - The tab is activated
517
+ */
518
+ this.trigger(`tabchange-${name}`);
519
+ });
520
+
521
+ // initialize the component with the provided config
522
+ // defer the call to allow to listen to the init event
523
+ _.defer(() => tabsBarComponent.init(config));
524
+
525
+ return tabsBarComponent;
526
+ }
527
+
528
+ export default tabsFactory;