@oat-sa/tao-core-ui 1.60.2 → 1.61.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 (780) hide show
  1. package/LICENSE +339 -339
  2. package/README.md +23 -18
  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/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 +36 -36
  11. package/dist/areaBroker.js +51 -51
  12. package/dist/autocomplete/css/autocomplete.css +7 -7
  13. package/dist/autocomplete/css/autocomplete.css.map +1 -1
  14. package/dist/autocomplete.js +400 -400
  15. package/dist/autoscroll.js +22 -22
  16. package/dist/badge/badge.js +48 -48
  17. package/dist/badge/css/badge.css +7 -7
  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 +70 -70
  22. package/dist/btngrouper.js +64 -64
  23. package/dist/bulkActionPopup/css/bulkActionPopup.css +7 -7
  24. package/dist/bulkActionPopup/css/bulkActionPopup.css.map +1 -1
  25. package/dist/bulkActionPopup.js +104 -104
  26. package/dist/button.js +102 -102
  27. package/dist/calculator/css/calculator.css +10 -10
  28. package/dist/calculator/css/calculator.css.map +1 -1
  29. package/dist/calculator.js +51 -51
  30. package/dist/cascadingComboBox.js +47 -47
  31. package/dist/ckeditor/ckConfigurator.js +48 -48
  32. package/dist/ckeditor/dtdHandler.js +110 -110
  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 +111 -111
  36. package/dist/component/alignable.js +81 -81
  37. package/dist/component/containable.js +37 -37
  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 +25 -25
  43. package/dist/component/placeable.js +70 -70
  44. package/dist/component/resizable.js +61 -61
  45. package/dist/component/stackable.js +20 -20
  46. package/dist/component/windowed.js +59 -59
  47. package/dist/component.js +153 -153
  48. package/dist/container.js +76 -76
  49. package/dist/contextualPopup/css/contextualPopup.css +7 -7
  50. package/dist/contextualPopup/css/contextualPopup.css.map +1 -1
  51. package/dist/contextualPopup.js +113 -113
  52. package/dist/dashboard/css/dashboard.css +7 -7
  53. package/dist/dashboard/css/dashboard.css.map +1 -1
  54. package/dist/dashboard.js +75 -75
  55. package/dist/datalist/css/datalist.css +7 -7
  56. package/dist/datalist/css/datalist.css.map +1 -1
  57. package/dist/datalist.js +160 -160
  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 +27 -27
  61. package/dist/datatable/filterStrategy/multiple.js +25 -25
  62. package/dist/datatable/filterStrategy/single.js +25 -25
  63. package/dist/datatable.js +464 -431
  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 +110 -110
  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 +174 -174
  70. package/dist/deleter.js +92 -92
  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 +65 -65
  74. package/dist/dialog/alert.js +26 -26
  75. package/dist/dialog/confirm.js +27 -27
  76. package/dist/dialog/confirmDelete.js +44 -44
  77. package/dist/dialog.js +156 -156
  78. package/dist/disabler.js +90 -90
  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 +43 -43
  82. package/dist/documentViewer/providers/pdfViewer/pdfjs/areaBroker.js +25 -25
  83. package/dist/documentViewer/providers/pdfViewer/pdfjs/findBar.js +133 -133
  84. package/dist/documentViewer/providers/pdfViewer/pdfjs/pageView.js +102 -102
  85. package/dist/documentViewer/providers/pdfViewer/pdfjs/pagesManager.js +52 -52
  86. package/dist/documentViewer/providers/pdfViewer/pdfjs/searchEngine.js +125 -125
  87. package/dist/documentViewer/providers/pdfViewer/pdfjs/textManager.js +67 -67
  88. package/dist/documentViewer/providers/pdfViewer/pdfjs/viewer.js +94 -94
  89. package/dist/documentViewer/providers/pdfViewer/pdfjs/wrapper.js +111 -111
  90. package/dist/documentViewer/providers/pdfViewer.js +42 -42
  91. package/dist/documentViewer/viewerFactory.js +71 -71
  92. package/dist/documentViewer.js +99 -99
  93. package/dist/dropdown/css/dropdown.css +7 -7
  94. package/dist/dropdown/css/dropdown.css.map +1 -1
  95. package/dist/dropdown.js +97 -97
  96. package/dist/durationer.js +58 -58
  97. package/dist/dynamicComponent/css/dynamicComponent.css +7 -7
  98. package/dist/dynamicComponent/css/dynamicComponent.css.map +1 -1
  99. package/dist/dynamicComponent.js +116 -116
  100. package/dist/feedback.js +97 -97
  101. package/dist/figure/FigureStateActive.js +117 -117
  102. package/dist/filesender.js +26 -26
  103. package/dist/filter.js +47 -47
  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 +112 -112
  109. package/dist/form/form.js +245 -245
  110. package/dist/form/simpleForm.js +71 -71
  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 +65 -65
  114. package/dist/form/validator/validator.js +87 -87
  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 +24 -24
  118. package/dist/form/widget/loader.js +16 -16
  119. package/dist/form/widget/providers/checkBox.js +75 -75
  120. package/dist/form/widget/providers/comboBox.js +59 -59
  121. package/dist/form/widget/providers/default.js +35 -35
  122. package/dist/form/widget/providers/hidden.js +50 -50
  123. package/dist/form/widget/providers/hiddenBox.js +71 -71
  124. package/dist/form/widget/providers/radioBox.js +70 -70
  125. package/dist/form/widget/providers/textArea.js +48 -48
  126. package/dist/form/widget/providers/textBox.js +34 -34
  127. package/dist/form/widget/widget.js +154 -154
  128. package/dist/form.js +10 -10
  129. package/dist/formValidator/formValidator.js +61 -61
  130. package/dist/formValidator/highlighters/highlighter.js +41 -41
  131. package/dist/formValidator/highlighters/message.js +29 -29
  132. package/dist/formValidator/highlighters/tooltip.js +32 -32
  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 +86 -86
  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 +51 -51
  139. package/dist/generis/widget/checkBox/checkBox.js +52 -52
  140. package/dist/generis/widget/comboBox/comboBox.js +45 -45
  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 +53 -53
  144. package/dist/generis/widget/loader.js +20 -20
  145. package/dist/generis/widget/textBox/textBox.js +40 -40
  146. package/dist/generis/widget/widget.js +60 -60
  147. package/dist/groupedComboBox.js +49 -49
  148. package/dist/groupvalidator.js +19 -19
  149. package/dist/hider.js +41 -41
  150. package/dist/highlighter.js +262 -262
  151. package/dist/image/ImgStateActive/extractLabel.js +20 -20
  152. package/dist/image/ImgStateActive/helper.js +16 -16
  153. package/dist/image/ImgStateActive/initHelper.js +85 -85
  154. package/dist/image/ImgStateActive/initMediaEditor.js +48 -48
  155. package/dist/image/ImgStateActive/mediaSizer.js +32 -32
  156. package/dist/image/ImgStateActive.js +104 -104
  157. package/dist/incrementer.js +58 -58
  158. package/dist/inplacer.js +87 -87
  159. package/dist/interactUtils.js +42 -42
  160. package/dist/itemButtonList/css/item-button-list.css +23 -23
  161. package/dist/itemButtonList/css/item-button-list.css.map +1 -1
  162. package/dist/itemButtonList.js +115 -115
  163. package/dist/keyNavigation/navigableDomElement.js +76 -76
  164. package/dist/keyNavigation/navigator.js +158 -158
  165. package/dist/listbox/css/listbox.css +7 -7
  166. package/dist/listbox/css/listbox.css.map +1 -1
  167. package/dist/listbox.js +97 -97
  168. package/dist/liststyler.js +57 -57
  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 +48 -48
  172. package/dist/lock.js +125 -125
  173. package/dist/login/login.js +100 -100
  174. package/dist/maths/calculator/basicCalculator.js +63 -63
  175. package/dist/maths/calculator/calculatorComponent.js +29 -29
  176. package/dist/maths/calculator/core/areaBroker.js +25 -25
  177. package/dist/maths/calculator/core/board.js +313 -313
  178. package/dist/maths/calculator/core/expression.js +111 -111
  179. package/dist/maths/calculator/core/labels.js +29 -29
  180. package/dist/maths/calculator/core/plugin.js +19 -19
  181. package/dist/maths/calculator/core/terms.js +26 -26
  182. package/dist/maths/calculator/core/tokenizer.js +98 -98
  183. package/dist/maths/calculator/core/tokens.js +59 -59
  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 +23 -23
  187. package/dist/maths/calculator/plugins/core/degrad.js +22 -22
  188. package/dist/maths/calculator/plugins/core/history.js +45 -45
  189. package/dist/maths/calculator/plugins/core/remind.js +22 -22
  190. package/dist/maths/calculator/plugins/core/stepNavigation.js +31 -31
  191. package/dist/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +61 -61
  192. package/dist/maths/calculator/plugins/modifiers/pow10.js +35 -35
  193. package/dist/maths/calculator/plugins/modifiers/sign.js +90 -90
  194. package/dist/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +60 -60
  195. package/dist/maths/calculator/pluginsLoader.js +21 -21
  196. package/dist/maths/calculator/scientificCalculator.js +91 -91
  197. package/dist/mediaEditor/mediaEditorComponent.js +64 -64
  198. package/dist/mediaEditor/plugins/mediaAlignment/helper.js +16 -16
  199. package/dist/mediaEditor/plugins/mediaAlignment/mediaAlignmentComponent.js +60 -60
  200. package/dist/mediaEditor/plugins/mediaAlignment/style.css +7 -7
  201. package/dist/mediaEditor/plugins/mediaDimension/helper.js +70 -70
  202. package/dist/mediaEditor/plugins/mediaDimension/mediaDimensionComponent.js +153 -153
  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 +65 -65
  207. package/dist/mediaplayer/players/youtube.js +52 -52
  208. package/dist/mediaplayer/players.js +18 -18
  209. package/dist/mediaplayer/support.js +55 -55
  210. package/dist/mediaplayer/utils/reminder.js +100 -100
  211. package/dist/mediaplayer/utils/timeObserver.js +92 -92
  212. package/dist/mediaplayer/youtubeManager.js +35 -35
  213. package/dist/mediaplayer.js +460 -460
  214. package/dist/mediasizer.js +135 -135
  215. package/dist/modal.js +87 -87
  216. package/dist/movableComponent.js +35 -35
  217. package/dist/pageSizeSelector.js +44 -44
  218. package/dist/pageStatus.js +33 -33
  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 +23 -23
  222. package/dist/pagination/providers/pages.js +37 -37
  223. package/dist/pagination/providers/simple.js +35 -35
  224. package/dist/pagination.js +45 -45
  225. package/dist/previewer.js +67 -67
  226. package/dist/progressbar.js +58 -58
  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 +533 -0
  230. package/dist/report.js +86 -86
  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 +73 -73
  234. package/dist/resource/list.js +66 -66
  235. package/dist/resource/selectable.js +92 -92
  236. package/dist/resource/selector.js +195 -195
  237. package/dist/resource/tree.js +104 -104
  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 +88 -88
  241. package/dist/resourcemgr/fileSelector.js +58 -58
  242. package/dist/resourcemgr/util/updatePermissions.js +4 -4
  243. package/dist/resourcemgr.js +62 -62
  244. package/dist/scroller.js +26 -26
  245. package/dist/searchModal/advancedSearch.js +355 -161
  246. package/dist/searchModal/css/advancedSearch.css +7 -14
  247. package/dist/searchModal/css/advancedSearch.css.map +1 -1
  248. package/dist/searchModal/css/searchModal.css +29 -8
  249. package/dist/searchModal/css/searchModal.css.map +1 -1
  250. package/dist/searchModal.js +574 -190
  251. package/dist/selecter.js +6 -6
  252. package/dist/stacker.js +43 -43
  253. package/dist/switch/css/switch.css +7 -7
  254. package/dist/switch/css/switch.css.map +1 -1
  255. package/dist/switch/switch.js +75 -75
  256. package/dist/tableModel.js +33 -33
  257. package/dist/tabs/css/tabs.css +12 -12
  258. package/dist/tabs/css/tabs.css.map +1 -1
  259. package/dist/tabs.js +217 -217
  260. package/dist/taskQueue/css/taskQueue.css +7 -7
  261. package/dist/taskQueue/css/taskQueue.css.map +1 -1
  262. package/dist/taskQueue/status.js +72 -72
  263. package/dist/taskQueue/table.js +67 -67
  264. package/dist/taskQueue/taskQueue.js +18 -18
  265. package/dist/taskQueue/taskQueueModel.js +86 -86
  266. package/dist/taskQueue.js +47 -47
  267. package/dist/taskQueueButton/css/taskable.css +7 -7
  268. package/dist/taskQueueButton/css/taskable.css.map +1 -1
  269. package/dist/taskQueueButton/css/treeButton.css +7 -7
  270. package/dist/taskQueueButton/css/treeButton.css.map +1 -1
  271. package/dist/taskQueueButton/standardButton.js +39 -39
  272. package/dist/taskQueueButton/taskable.js +54 -54
  273. package/dist/taskQueueButton/treeButton.js +56 -56
  274. package/dist/themeLoader.js +75 -75
  275. package/dist/themes.js +84 -84
  276. package/dist/toggler.js +57 -57
  277. package/dist/tooltip.js +54 -54
  278. package/dist/tooltipster.js +17 -17
  279. package/dist/transformer.js +117 -117
  280. package/dist/tristateCheckboxGroup/css/tristateCheckboxGroup.css +7 -7
  281. package/dist/tristateCheckboxGroup/css/tristateCheckboxGroup.css.map +1 -1
  282. package/dist/tristateCheckboxGroup.js +75 -75
  283. package/dist/uploader.js +158 -158
  284. package/dist/validator/validators.js +48 -48
  285. package/dist/validator.js +24 -24
  286. package/dist/waitForMedia.js +33 -33
  287. package/dist/waitingDialog/css/waitingDialog.css +7 -7
  288. package/dist/waitingDialog/css/waitingDialog.css.map +1 -1
  289. package/dist/waitingDialog/waitingDialog.js +54 -54
  290. package/package.json +108 -107
  291. package/scss/basic.scss +16 -16
  292. package/scss/ckeditor/skins/tao/scss/inc/_ck-icons.scss +59 -59
  293. package/scss/ckeditor/skins/tao/scss/inc/_tao.scss +59 -59
  294. package/scss/font/tao/tao.svg +234 -234
  295. package/scss/inc/_base.scss +495 -495
  296. package/scss/inc/_bootstrap.scss +6 -6
  297. package/scss/inc/_buttons.scss +114 -114
  298. package/scss/inc/_colors.scss +93 -88
  299. package/scss/inc/_feedback.scss +150 -150
  300. package/scss/inc/_flex-grid.scss +15 -15
  301. package/scss/inc/_fonts.scss +4 -4
  302. package/scss/inc/_forms.scss +832 -832
  303. package/scss/inc/_functions.scss +283 -283
  304. package/scss/inc/_jquery.nouislider.scss +254 -254
  305. package/scss/inc/_normalize.scss +528 -528
  306. package/scss/inc/_report.scss +67 -67
  307. package/scss/inc/_secondary-properties.scss +89 -89
  308. package/scss/inc/_select2.scss +634 -634
  309. package/scss/inc/_toolbars.scss +155 -155
  310. package/scss/inc/_tooltip.scss +312 -312
  311. package/scss/inc/_variables.scss +21 -21
  312. package/scss/inc/base/_highlight.scss +5 -5
  313. package/scss/inc/base/_list-style.scss +58 -58
  314. package/scss/inc/base/_svg.scss +3 -3
  315. package/scss/inc/base/_table.scss +62 -62
  316. package/scss/inc/fonts/_source-sans-pro.scss +29 -29
  317. package/scss/inc/fonts/_tao-icon-classes.scss +226 -226
  318. package/scss/inc/fonts/_tao-icon-def.scss +12 -12
  319. package/scss/inc/fonts/_tao-icon-vars.scss +240 -240
  320. package/src/actionbar/tpl/main.tpl +8 -8
  321. package/src/actionbar.js +251 -251
  322. package/src/adder.js +250 -250
  323. package/src/animable/absorbable/absorbable.js +134 -134
  324. package/src/animable/absorbable/css/absorb.css +7 -7
  325. package/src/animable/absorbable/css/absorb.css.map +1 -1
  326. package/src/animable/absorbable/scss/absorb.scss +37 -37
  327. package/src/animable/pulsable/css/pulse.css +7 -7
  328. package/src/animable/pulsable/css/pulse.css.map +1 -1
  329. package/src/animable/pulsable/pulsable.js +90 -90
  330. package/src/animable/pulsable/scss/pulse.scss +22 -22
  331. package/src/areaBroker.js +160 -160
  332. package/src/autocomplete/css/autocomplete.css +7 -7
  333. package/src/autocomplete/css/autocomplete.css.map +1 -1
  334. package/src/autocomplete/scss/autocomplete.scss +37 -37
  335. package/src/autocomplete.js +1029 -1029
  336. package/src/autoscroll.js +57 -57
  337. package/src/badge/badge.js +119 -119
  338. package/src/badge/css/badge.css +7 -7
  339. package/src/badge/css/badge.css.map +1 -1
  340. package/src/badge/scss/badge.scss +92 -92
  341. package/src/badge/tpl/badge.tpl +4 -4
  342. package/src/breadcrumbs/css/breadcrumbs.css +7 -7
  343. package/src/breadcrumbs/css/breadcrumbs.css.map +1 -1
  344. package/src/breadcrumbs/scss/breadcrumbs.scss +52 -52
  345. package/src/breadcrumbs/tpl/breadcrumbs.tpl +20 -20
  346. package/src/breadcrumbs.js +99 -99
  347. package/src/btngrouper.js +213 -213
  348. package/src/bulkActionPopup/css/bulkActionPopup.css +7 -7
  349. package/src/bulkActionPopup/css/bulkActionPopup.css.map +1 -1
  350. package/src/bulkActionPopup/scss/bulkActionPopup.scss +63 -63
  351. package/src/bulkActionPopup/tpl/layout.tpl +76 -76
  352. package/src/bulkActionPopup/tpl/select.tpl +8 -8
  353. package/src/bulkActionPopup.js +274 -274
  354. package/src/button/tpl/button.tpl +4 -4
  355. package/src/button.js +135 -135
  356. package/src/calculator/css/calculator.css +10 -10
  357. package/src/calculator/css/calculator.css.map +1 -1
  358. package/src/calculator/scss/calculator.scss +139 -139
  359. package/src/calculator.js +188 -188
  360. package/src/cascadingComboBox.js +126 -126
  361. package/src/ckeditor/ckConfigurator.js +736 -736
  362. package/src/ckeditor/dtdHandler.js +1030 -1030
  363. package/src/class/css/selector.css +7 -7
  364. package/src/class/css/selector.css.map +1 -1
  365. package/src/class/scss/selector.scss +101 -101
  366. package/src/class/selector.js +329 -329
  367. package/src/class/tpl/listItem.tpl +9 -9
  368. package/src/class/tpl/selector.tpl +10 -10
  369. package/src/component/alignable.js +274 -274
  370. package/src/component/containable.js +122 -122
  371. package/src/component/css/components.css +7 -7
  372. package/src/component/css/components.css.map +1 -1
  373. package/src/component/css/windowComponent.css +7 -7
  374. package/src/component/css/windowComponent.css.map +1 -1
  375. package/src/component/draggable.js +104 -104
  376. package/src/component/placeable.js +233 -233
  377. package/src/component/resizable.js +195 -195
  378. package/src/component/scss/components.scss +507 -507
  379. package/src/component/scss/windowComponent.scss +62 -62
  380. package/src/component/stackable.js +67 -67
  381. package/src/component/tpl/window.tpl +7 -7
  382. package/src/component/windowed.js +206 -206
  383. package/src/component.js +401 -401
  384. package/src/container.js +200 -200
  385. package/src/contextualPopup/css/contextualPopup.css +7 -7
  386. package/src/contextualPopup/css/contextualPopup.css.map +1 -1
  387. package/src/contextualPopup/scss/contextualPopup.scss +78 -78
  388. package/src/contextualPopup/tpl/popup.tpl +10 -10
  389. package/src/contextualPopup.js +297 -297
  390. package/src/css/basic.css +103 -103
  391. package/src/css/basic.css.map +1 -1
  392. package/src/dashboard/css/dashboard.css +7 -7
  393. package/src/dashboard/css/dashboard.css.map +1 -1
  394. package/src/dashboard/scss/dashboard.scss +93 -93
  395. package/src/dashboard/tpl/dashboard.tpl +16 -16
  396. package/src/dashboard/tpl/dashboardMetricsList.tpl +15 -15
  397. package/src/dashboard.js +184 -184
  398. package/src/datalist/css/datalist.css +7 -7
  399. package/src/datalist/css/datalist.css.map +1 -1
  400. package/src/datalist/scss/datalist.scss +116 -116
  401. package/src/datalist/tpl/list.tpl +24 -24
  402. package/src/datalist/tpl/main.tpl +44 -44
  403. package/src/datalist.js +500 -500
  404. package/src/datatable/css/datatable.css +11 -7
  405. package/src/datatable/css/datatable.css.map +1 -1
  406. package/src/datatable/filterStrategy/filterStrategy.js +70 -70
  407. package/src/datatable/filterStrategy/multiple.js +126 -126
  408. package/src/datatable/filterStrategy/single.js +108 -108
  409. package/src/datatable/scss/datatable.scss +149 -146
  410. package/src/datatable/tpl/button.tpl +6 -6
  411. package/src/datatable/tpl/layout.tpl +158 -158
  412. package/src/datatable.js +1056 -1056
  413. package/src/dateRange/css/dateRange.css +7 -7
  414. package/src/dateRange/css/dateRange.css.map +1 -1
  415. package/src/dateRange/dateRange.js +341 -341
  416. package/src/dateRange/scss/dateRange.scss +7 -7
  417. package/src/dateRange/tpl/select.tpl +18 -18
  418. package/src/datetime/css/picker.css +7 -7
  419. package/src/datetime/css/picker.css.map +1 -1
  420. package/src/datetime/picker.js +576 -576
  421. package/src/datetime/scss/picker.scss +192 -192
  422. package/src/datetime/tpl/picker.tpl +18 -18
  423. package/src/deleter/undo.tpl +6 -6
  424. package/src/deleter.js +296 -296
  425. package/src/destination/css/selector.css +7 -7
  426. package/src/destination/css/selector.css.map +1 -1
  427. package/src/destination/scss/selector.scss +36 -36
  428. package/src/destination/selector.js +195 -195
  429. package/src/destination/tpl/selector.tpl +13 -13
  430. package/src/dialog/alert.js +70 -70
  431. package/src/dialog/confirm.js +85 -85
  432. package/src/dialog/confirmDelete.js +95 -95
  433. package/src/dialog/tpl/body.tpl +24 -24
  434. package/src/dialog/tpl/buttons.tpl +6 -6
  435. package/src/dialog/tpl/checkbox.tpl +5 -5
  436. package/src/dialog.js +517 -517
  437. package/src/disabler.js +230 -230
  438. package/src/documentViewer/css/documentViewer.css +7 -7
  439. package/src/documentViewer/css/documentViewer.css.map +1 -1
  440. package/src/documentViewer/providers/pdfViewer/fallback/viewer.js +69 -69
  441. package/src/documentViewer/providers/pdfViewer/pdfjs/areaBroker.js +41 -41
  442. package/src/documentViewer/providers/pdfViewer/pdfjs/findBar.js +475 -475
  443. package/src/documentViewer/providers/pdfViewer/pdfjs/findBar.tpl +20 -20
  444. package/src/documentViewer/providers/pdfViewer/pdfjs/match.tpl +1 -1
  445. package/src/documentViewer/providers/pdfViewer/pdfjs/page.tpl +4 -4
  446. package/src/documentViewer/providers/pdfViewer/pdfjs/pageView.js +318 -318
  447. package/src/documentViewer/providers/pdfViewer/pdfjs/pagesManager.js +167 -167
  448. package/src/documentViewer/providers/pdfViewer/pdfjs/searchEngine.js +451 -451
  449. package/src/documentViewer/providers/pdfViewer/pdfjs/textManager.js +252 -252
  450. package/src/documentViewer/providers/pdfViewer/pdfjs/viewer.js +299 -299
  451. package/src/documentViewer/providers/pdfViewer/pdfjs/viewer.tpl +16 -16
  452. package/src/documentViewer/providers/pdfViewer/pdfjs/wrapper.js +351 -351
  453. package/src/documentViewer/providers/pdfViewer.js +93 -93
  454. package/src/documentViewer/scss/documentViewer.scss +184 -184
  455. package/src/documentViewer/viewerFactory.js +191 -191
  456. package/src/documentViewer.js +238 -238
  457. package/src/dropdown/css/dropdown.css +7 -7
  458. package/src/dropdown/css/dropdown.css.map +1 -1
  459. package/src/dropdown/scss/dropdown.scss +99 -99
  460. package/src/dropdown/tpl/dropdown.tpl +8 -8
  461. package/src/dropdown/tpl/list-item.tpl +4 -4
  462. package/src/dropdown.js +255 -255
  463. package/src/durationer.js +222 -222
  464. package/src/dynamicComponent/css/dynamicComponent.css +7 -7
  465. package/src/dynamicComponent/css/dynamicComponent.css.map +1 -1
  466. package/src/dynamicComponent/scss/dynamicComponent.scss +98 -98
  467. package/src/dynamicComponent/tpl/layout.tpl +17 -17
  468. package/src/dynamicComponent.js +554 -554
  469. package/src/feedback/feedback.tpl +7 -7
  470. package/src/feedback.js +295 -295
  471. package/src/figure/FigureStateActive.js +174 -174
  472. package/src/filesender.js +114 -114
  473. package/src/filter/template.tpl +5 -5
  474. package/src/filter.js +135 -135
  475. package/src/form/css/dropdownForm.css +7 -7
  476. package/src/form/css/dropdownForm.css.map +1 -1
  477. package/src/form/css/form.css +7 -7
  478. package/src/form/css/form.css.map +1 -1
  479. package/src/form/dropdownForm.js +281 -281
  480. package/src/form/form.js +688 -688
  481. package/src/form/scss/dropdownForm.scss +60 -60
  482. package/src/form/scss/form.scss +25 -25
  483. package/src/form/simpleForm.js +125 -125
  484. package/src/form/tpl/dropdownForm.tpl +4 -4
  485. package/src/form/tpl/form.tpl +7 -7
  486. package/src/form/validator/css/validator.css +7 -7
  487. package/src/form/validator/css/validator.css.map +1 -1
  488. package/src/form/validator/renderer.js +118 -118
  489. package/src/form/validator/scss/validator.scss +14 -14
  490. package/src/form/validator/tpl/message.tpl +1 -1
  491. package/src/form/validator/tpl/validator.tpl +1 -1
  492. package/src/form/validator/validator.js +220 -220
  493. package/src/form/widget/css/widget.css +7 -7
  494. package/src/form/widget/css/widget.css.map +1 -1
  495. package/src/form/widget/definitions.js +51 -51
  496. package/src/form/widget/loader.js +40 -40
  497. package/src/form/widget/providers/checkBox.js +138 -138
  498. package/src/form/widget/providers/comboBox.js +63 -63
  499. package/src/form/widget/providers/default.js +90 -90
  500. package/src/form/widget/providers/hidden.js +62 -62
  501. package/src/form/widget/providers/hiddenBox.js +152 -152
  502. package/src/form/widget/providers/radioBox.js +99 -99
  503. package/src/form/widget/providers/textArea.js +52 -52
  504. package/src/form/widget/providers/textBox.js +48 -48
  505. package/src/form/widget/scss/widget.scss +55 -55
  506. package/src/form/widget/tpl/checkBox.tpl +25 -25
  507. package/src/form/widget/tpl/comboBox.tpl +13 -13
  508. package/src/form/widget/tpl/hidden.tpl +1 -1
  509. package/src/form/widget/tpl/hiddenBox.tpl +17 -17
  510. package/src/form/widget/tpl/label.tpl +6 -6
  511. package/src/form/widget/tpl/radioBox.tpl +25 -25
  512. package/src/form/widget/tpl/textArea.tpl +8 -8
  513. package/src/form/widget/tpl/widget.tpl +8 -8
  514. package/src/form/widget/widget.js +372 -372
  515. package/src/form.js +53 -53
  516. package/src/formValidator/formValidator.js +253 -253
  517. package/src/formValidator/highlighters/highlighter.js +102 -102
  518. package/src/formValidator/highlighters/message.js +70 -70
  519. package/src/formValidator/highlighters/tooltip.js +78 -78
  520. package/src/generis/form/css/form.css +7 -7
  521. package/src/generis/form/css/form.css.map +1 -1
  522. package/src/generis/form/form.js +239 -239
  523. package/src/generis/form/readme.md +70 -70
  524. package/src/generis/form/scss/form.scss +23 -23
  525. package/src/generis/form/tpl/form.tpl +16 -16
  526. package/src/generis/validator/css/validator.css +7 -7
  527. package/src/generis/validator/css/validator.css.map +1 -1
  528. package/src/generis/validator/readme.md +46 -46
  529. package/src/generis/validator/scss/validator.scss +13 -13
  530. package/src/generis/validator/validator.js +128 -128
  531. package/src/generis/widget/checkBox/checkBox.js +112 -112
  532. package/src/generis/widget/checkBox/checkBox.tpl +18 -18
  533. package/src/generis/widget/comboBox/comboBox.js +67 -67
  534. package/src/generis/widget/comboBox/comboBox.tpl +12 -12
  535. package/src/generis/widget/css/widget.css +7 -7
  536. package/src/generis/widget/css/widget.css.map +1 -1
  537. package/src/generis/widget/hiddenBox/hiddenBox.js +132 -132
  538. package/src/generis/widget/hiddenBox/hiddenBox.tpl +16 -16
  539. package/src/generis/widget/loader.js +49 -49
  540. package/src/generis/widget/readme.md +59 -59
  541. package/src/generis/widget/scss/widget.scss +61 -61
  542. package/src/generis/widget/textBox/textBox.js +65 -65
  543. package/src/generis/widget/textBox/textBox.tpl +7 -7
  544. package/src/generis/widget/widget.js +164 -164
  545. package/src/generis/widget/widget.tpl +5 -5
  546. package/src/groupedComboBox.js +99 -99
  547. package/src/groupvalidator.js +84 -84
  548. package/src/hider.js +88 -88
  549. package/src/highlighter.js +1166 -1166
  550. package/src/image/ImgStateActive/extractLabel.js +29 -29
  551. package/src/image/ImgStateActive/helper.js +36 -36
  552. package/src/image/ImgStateActive/initHelper.js +137 -137
  553. package/src/image/ImgStateActive/initMediaEditor.js +92 -92
  554. package/src/image/ImgStateActive/mediaSizer.js +63 -63
  555. package/src/image/ImgStateActive.js +115 -115
  556. package/src/incrementer.js +319 -319
  557. package/src/inplacer.js +316 -316
  558. package/src/interactUtils.js +140 -140
  559. package/src/itemButtonList/css/item-button-list.css +23 -23
  560. package/src/itemButtonList/css/item-button-list.css.map +1 -1
  561. package/src/itemButtonList/scss/item-button-list.scss +236 -236
  562. package/src/itemButtonList/tpl/itemButtonList.tpl +21 -21
  563. package/src/itemButtonList.js +274 -274
  564. package/src/keyNavigation/navigableDomElement.js +282 -282
  565. package/src/keyNavigation/navigator.js +543 -543
  566. package/src/listbox/css/listbox.css +7 -7
  567. package/src/listbox/css/listbox.css.map +1 -1
  568. package/src/listbox/scss/listbox.scss +116 -116
  569. package/src/listbox/tpl/list.tpl +14 -14
  570. package/src/listbox/tpl/main.tpl +9 -9
  571. package/src/listbox.js +251 -251
  572. package/src/liststyler.js +155 -155
  573. package/src/loadingButton/css/button.css +7 -7
  574. package/src/loadingButton/css/button.css.map +1 -1
  575. package/src/loadingButton/loadingButton.js +110 -110
  576. package/src/loadingButton/scss/button.scss +41 -41
  577. package/src/loadingButton/tpl/button.tpl +5 -5
  578. package/src/lock/lock.tpl +16 -16
  579. package/src/lock.js +395 -395
  580. package/src/login/login.js +322 -322
  581. package/src/login/tpl/login.tpl +29 -29
  582. package/src/login/tpl/passwordReveal.tpl +7 -7
  583. package/src/maths/calculator/basicCalculator.js +55 -55
  584. package/src/maths/calculator/calculatorComponent.js +128 -128
  585. package/src/maths/calculator/core/areaBroker.js +38 -38
  586. package/src/maths/calculator/core/board.js +841 -841
  587. package/src/maths/calculator/core/expression.js +430 -430
  588. package/src/maths/calculator/core/labels.js +116 -116
  589. package/src/maths/calculator/core/plugin.js +40 -40
  590. package/src/maths/calculator/core/terms.js +459 -459
  591. package/src/maths/calculator/core/tokenizer.js +245 -245
  592. package/src/maths/calculator/core/tokens.js +178 -178
  593. package/src/maths/calculator/core/tpl/board.tpl +4 -4
  594. package/src/maths/calculator/css/calculator.css +7 -7
  595. package/src/maths/calculator/css/calculator.css.map +1 -1
  596. package/src/maths/calculator/defaultCalculator.js +66 -66
  597. package/src/maths/calculator/plugins/core/degrad.js +90 -90
  598. package/src/maths/calculator/plugins/core/history.js +166 -166
  599. package/src/maths/calculator/plugins/core/remind.js +96 -96
  600. package/src/maths/calculator/plugins/core/stepNavigation.js +175 -175
  601. package/src/maths/calculator/plugins/keyboard/templateKeyboard/defaultTemplate.tpl +36 -36
  602. package/src/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +91 -91
  603. package/src/maths/calculator/plugins/modifiers/pow10.js +143 -143
  604. package/src/maths/calculator/plugins/modifiers/sign.js +339 -339
  605. package/src/maths/calculator/plugins/screen/simpleScreen/defaultTemplate.tpl +3 -3
  606. package/src/maths/calculator/plugins/screen/simpleScreen/history.tpl +3 -3
  607. package/src/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +191 -191
  608. package/src/maths/calculator/pluginsLoader.js +46 -46
  609. package/src/maths/calculator/scientificCalculator.js +74 -74
  610. package/src/maths/calculator/scss/calculator.scss +396 -396
  611. package/src/maths/calculator/tpl/basicKeyboard.tpl +37 -37
  612. package/src/maths/calculator/tpl/basicScreen.tpl +2 -2
  613. package/src/maths/calculator/tpl/scientificKeyboard.tpl +61 -61
  614. package/src/maths/calculator/tpl/scientificScreen.tpl +3 -3
  615. package/src/mediaEditor/mediaEditorComponent.js +141 -141
  616. package/src/mediaEditor/plugins/mediaAlignment/helper.js +62 -62
  617. package/src/mediaEditor/plugins/mediaAlignment/mediaAlignmentComponent.js +99 -99
  618. package/src/mediaEditor/plugins/mediaAlignment/style.css +7 -7
  619. package/src/mediaEditor/plugins/mediaAlignment/tpl/mediaAlignment.tpl +25 -25
  620. package/src/mediaEditor/plugins/mediaDimension/helper.js +189 -189
  621. package/src/mediaEditor/plugins/mediaDimension/mediaDimensionComponent.js +561 -561
  622. package/src/mediaEditor/plugins/mediaDimension/style.css +141 -141
  623. package/src/mediaEditor/plugins/mediaDimension/tpl/mediaDimension.tpl +55 -55
  624. package/src/mediaEditor/tpl/editor.tpl +4 -4
  625. package/src/mediaplayer/css/player.css +7 -7
  626. package/src/mediaplayer/css/player.css.map +1 -1
  627. package/src/mediaplayer/players/html5.js +564 -564
  628. package/src/mediaplayer/players/youtube.js +323 -323
  629. package/src/mediaplayer/players.js +29 -29
  630. package/src/mediaplayer/readme.md +305 -305
  631. package/src/mediaplayer/scss/player.scss +569 -569
  632. package/src/mediaplayer/support.js +126 -126
  633. package/src/mediaplayer/tpl/audio.tpl +6 -6
  634. package/src/mediaplayer/tpl/player.tpl +37 -37
  635. package/src/mediaplayer/tpl/source.tpl +1 -1
  636. package/src/mediaplayer/tpl/video.tpl +6 -6
  637. package/src/mediaplayer/tpl/youtube.tpl +1 -1
  638. package/src/mediaplayer/utils/reminder.js +184 -184
  639. package/src/mediaplayer/utils/timeObserver.js +143 -143
  640. package/src/mediaplayer/youtubeManager.js +161 -161
  641. package/src/mediaplayer.js +1606 -1606
  642. package/src/mediasizer/mediasizer.tpl +55 -55
  643. package/src/mediasizer.js +635 -635
  644. package/src/modal.js +365 -365
  645. package/src/movableComponent.js +78 -78
  646. package/src/pageSizeSelector/tpl/pageSizeSelector.tpl +9 -9
  647. package/src/pageSizeSelector.js +107 -107
  648. package/src/pageStatus.js +147 -147
  649. package/src/pagination/css/pagination.css +7 -7
  650. package/src/pagination/css/pagination.css.map +1 -1
  651. package/src/pagination/paginationStrategy.js +53 -53
  652. package/src/pagination/providers/pages.js +161 -161
  653. package/src/pagination/providers/simple.js +74 -74
  654. package/src/pagination/providers/tpl/pages/page.tpl +1 -1
  655. package/src/pagination/providers/tpl/pages.tpl +8 -8
  656. package/src/pagination/providers/tpl/simple.tpl +7 -7
  657. package/src/pagination/scss/pagination.scss +111 -111
  658. package/src/pagination.js +237 -237
  659. package/src/previewer.js +300 -300
  660. package/src/progressbar.js +165 -165
  661. package/src/propertySelector/css/propertySelector.css +74 -0
  662. package/src/propertySelector/css/propertySelector.css.map +1 -0
  663. package/src/propertySelector/propertySelector.js +286 -0
  664. package/src/propertySelector/scss/propertySelector.scss +66 -0
  665. package/src/propertySelector/tpl/highlighted-text.tpl +1 -0
  666. package/src/propertySelector/tpl/property-description.tpl +13 -0
  667. package/src/propertySelector/tpl/property-selector.tpl +7 -0
  668. package/src/report/feedback.tpl +11 -11
  669. package/src/report/layout.tpl +10 -10
  670. package/src/report.js +184 -184
  671. package/src/resource/css/selector.css +7 -7
  672. package/src/resource/css/selector.css.map +1 -1
  673. package/src/resource/filters.js +208 -208
  674. package/src/resource/list.js +200 -200
  675. package/src/resource/scss/_filters.scss +26 -26
  676. package/src/resource/scss/_resource-list.scss +107 -107
  677. package/src/resource/scss/_resource-tree.scss +205 -205
  678. package/src/resource/scss/selector.scss +187 -187
  679. package/src/resource/selectable.js +322 -322
  680. package/src/resource/selector.js +871 -871
  681. package/src/resource/tpl/filters.tpl +2 -2
  682. package/src/resource/tpl/list.tpl +7 -7
  683. package/src/resource/tpl/listNode.tpl +4 -4
  684. package/src/resource/tpl/selector.tpl +46 -46
  685. package/src/resource/tpl/tree.tpl +4 -4
  686. package/src/resource/tpl/treeNode.tpl +30 -30
  687. package/src/resource/tree.js +400 -400
  688. package/src/resourcemgr/css/resourcemgr.css +7 -7
  689. package/src/resourcemgr/css/resourcemgr.css.map +1 -1
  690. package/src/resourcemgr/fileBrowser.js +381 -381
  691. package/src/resourcemgr/filePreview.js +73 -73
  692. package/src/resourcemgr/fileSelector.js +348 -348
  693. package/src/resourcemgr/scss/resourcemgr.scss +254 -254
  694. package/src/resourcemgr/tpl/fileSelect.tpl +39 -39
  695. package/src/resourcemgr/tpl/folder.tpl +11 -11
  696. package/src/resourcemgr/tpl/layout.tpl +84 -84
  697. package/src/resourcemgr/tpl/rootFolder.tpl +13 -13
  698. package/src/resourcemgr/util/updatePermissions.js +53 -53
  699. package/src/resourcemgr.js +216 -216
  700. package/src/scroller.js +94 -94
  701. package/src/scss/basic.scss +16 -16
  702. package/src/searchModal/advancedSearch.js +638 -601
  703. package/src/searchModal/css/advancedSearch.css +7 -14
  704. package/src/searchModal/css/advancedSearch.css.map +1 -1
  705. package/src/searchModal/css/searchModal.css +29 -8
  706. package/src/searchModal/css/searchModal.css.map +1 -1
  707. package/src/searchModal/scss/advancedSearch.scss +171 -177
  708. package/src/searchModal/scss/searchModal.scss +393 -375
  709. package/src/searchModal/tpl/advanced-search.tpl +9 -9
  710. package/src/searchModal/tpl/criteria-alias.tpl +1 -0
  711. package/src/searchModal/tpl/criteria-class-label.tpl +1 -0
  712. package/src/searchModal/tpl/criteria-label.tpl +1 -0
  713. package/src/searchModal/tpl/highlighted-text.tpl +1 -0
  714. package/src/searchModal/tpl/info-message.tpl +3 -3
  715. package/src/searchModal/tpl/invalid-criteria-warning.tpl +10 -10
  716. package/src/searchModal/tpl/layout.tpl +27 -25
  717. package/src/searchModal/tpl/list-checkbox-criterion.tpl +17 -12
  718. package/src/searchModal/tpl/list-select-criterion.tpl +12 -6
  719. package/src/searchModal/tpl/property-select-button.tpl +1 -0
  720. package/src/searchModal/tpl/results-container.tpl +1 -0
  721. package/src/searchModal/tpl/text-criterion.tpl +11 -6
  722. package/src/searchModal.js +761 -496
  723. package/src/selecter.js +43 -43
  724. package/src/stacker.js +133 -133
  725. package/src/switch/css/switch.css +7 -7
  726. package/src/switch/css/switch.css.map +1 -1
  727. package/src/switch/scss/switch.scss +83 -83
  728. package/src/switch/switch.js +195 -195
  729. package/src/switch/tpl/switch.tpl +7 -7
  730. package/src/tableModel.js +112 -112
  731. package/src/tabs/css/tabs.css +12 -12
  732. package/src/tabs/css/tabs.css.map +1 -1
  733. package/src/tabs/scss/tabs.scss +50 -50
  734. package/src/tabs/tpl/panel.tpl +3 -3
  735. package/src/tabs/tpl/tabs.tpl +10 -10
  736. package/src/tabs.js +528 -528
  737. package/src/taskQueue/css/taskQueue.css +7 -7
  738. package/src/taskQueue/css/taskQueue.css.map +1 -1
  739. package/src/taskQueue/scss/taskQueue.scss +47 -47
  740. package/src/taskQueue/status.js +228 -228
  741. package/src/taskQueue/table.js +350 -350
  742. package/src/taskQueue/taskQueue.js +33 -33
  743. package/src/taskQueue/taskQueueModel.js +548 -548
  744. package/src/taskQueue/tpl/statusMessage.tpl +7 -7
  745. package/src/taskQueue.js +218 -218
  746. package/src/taskQueueButton/css/taskable.css +7 -7
  747. package/src/taskQueueButton/css/taskable.css.map +1 -1
  748. package/src/taskQueueButton/css/treeButton.css +7 -7
  749. package/src/taskQueueButton/css/treeButton.css.map +1 -1
  750. package/src/taskQueueButton/scss/taskable.scss +4 -4
  751. package/src/taskQueueButton/scss/treeButton.scss +34 -34
  752. package/src/taskQueueButton/standardButton.js +108 -108
  753. package/src/taskQueueButton/taskable.js +202 -202
  754. package/src/taskQueueButton/tpl/report.tpl +5 -5
  755. package/src/taskQueueButton/tpl/treeButton.tpl +6 -6
  756. package/src/taskQueueButton/treeButton.js +109 -109
  757. package/src/themeLoader.js +252 -252
  758. package/src/themes.js +162 -162
  759. package/src/toggler.js +200 -200
  760. package/src/tooltip/default.tpl +3 -3
  761. package/src/tooltip.js +160 -160
  762. package/src/tooltipster.js +25 -25
  763. package/src/transformer.js +327 -327
  764. package/src/tristateCheckboxGroup/css/tristateCheckboxGroup.css +7 -7
  765. package/src/tristateCheckboxGroup/css/tristateCheckboxGroup.css.map +1 -1
  766. package/src/tristateCheckboxGroup/scss/tristateCheckboxGroup.scss +15 -15
  767. package/src/tristateCheckboxGroup/tpl/li.tpl +6 -6
  768. package/src/tristateCheckboxGroup.js +207 -207
  769. package/src/uploader/fileEntry.tpl +6 -6
  770. package/src/uploader/uploader.tpl +32 -32
  771. package/src/uploader.js +594 -594
  772. package/src/validator/Report.js +10 -10
  773. package/src/validator/Validator.js +108 -108
  774. package/src/validator/validators.js +220 -220
  775. package/src/validator.js +264 -264
  776. package/src/waitForMedia.js +82 -82
  777. package/src/waitingDialog/css/waitingDialog.css +7 -7
  778. package/src/waitingDialog/css/waitingDialog.css.map +1 -1
  779. package/src/waitingDialog/scss/waitingDialog.scss +34 -34
  780. package/src/waitingDialog/waitingDialog.js +240 -240
package/src/uploader.js CHANGED
@@ -1,594 +1,594 @@
1
- /**
2
- * @author Bertrand Chevrier <bertrand@taotesting.com>
3
- */
4
- import $ from 'jquery';
5
- import _ from 'lodash';
6
- import __ from 'i18n';
7
- import async from 'async';
8
- import Pluginifier from 'core/pluginifier';
9
- import bytes from 'util/bytes';
10
- import uploaderTpl from 'ui/uploader/uploader';
11
- import fileEntryTpl from 'ui/uploader/fileEntry';
12
- import 'ui/filesender';
13
- import 'ui/progressbar';
14
-
15
- const ns = 'uploader';
16
- const dataNs = 'ui.' + ns;
17
-
18
- //the plugin defaults
19
- const defaults = {
20
- upload: true,
21
- read: false,
22
- multiple: false,
23
- uploadQueueSize: 3,
24
- inputName: 'content',
25
- showResetButton: true,
26
- showUploadButton: true,
27
- browseBtnClass: 'btn-browse',
28
- uploadBtnClass: 'btn-upload',
29
- resetBtnClass: 'btn-reset',
30
- fileNameClass: 'file-name',
31
- dropZoneClass: 'file-drop',
32
- progressBarClass: 'progressbar',
33
- dragOverClass: 'drag-hover',
34
- formAttributes: {
35
- class: 'uploader uploaderContainer'
36
- },
37
- defaultErrMsg: __('Unable to upload file'),
38
- uploadBtnText: __('Upload'),
39
-
40
- /**
41
- * Make files available before file selection. It can be used to filter.
42
- * @callback fileSelect
43
- * @param {Array<File>} files - the selected files
44
- * @param {Function} [done] - callback with filtered files
45
- * @returns {undefined|Array<File>} the files to be selected
46
- */
47
- fileSelect: function (files, done) {
48
- if (_.isFunction(done)) {
49
- return done(files);
50
- }
51
- return files;
52
- }
53
- };
54
-
55
- //feature tests
56
- const tests = {
57
- filereader: typeof FileReader !== 'undefined',
58
- dnd: 'draggable' in document.createElement('span')
59
- };
60
-
61
- /**
62
- * Define a jQuery component to help you to manage file(s) upload/reading.
63
- * @exports ui/uploader
64
- */
65
- const uploader = {
66
- /**
67
- * Initialize the plugin.
68
- *
69
- * Called the jQuery way once registered by the Pluginifier.
70
- * @example $('selector').uploader();
71
- *
72
- * @constructor
73
- * @param {Object} [options] - the plugin options
74
- * @param {Boolean} [options.upload = true] - if we upload the file once selected
75
- * @param {String} [options.uploadUrl] - the URL where the files will be posted
76
- * @param {jQueryElement} [options.$form] - a form to be used instead
77
- * @param {Boolean} [options.read = false] - if we can read the file once selected
78
- * @param {Boolean} [options.multiple = false] - enable to select more multiple files (may be not supported by old browsers)
79
- * @param {Number} [options.uploadQueueSize = 3] - max parallel uploads (applies only in multiple mode)
80
- * @param {String} [options.browseBtnClass = btn-browse] - the class to identify the browse button
81
- * @param {String} [options.uploadBtnClass = btn-upload] - the class to identify the upload button
82
- * @param {String} [options.resetBtnClass = btn-reset] - the class to identify the reset button
83
- * @param {String} [options.fileNameClass = file-name] - the class of the elt where the file name is set
84
- * @param {String} [options.dropZoneClass = file-drop] - the class of the drop file elt
85
- * @param {String} [options.progressBarClass = progressbar] - the class to identify the progress bar
86
- * @param {String} [options.dragOverClass = drag-hover] - the class to set to the drop zone when dragging over
87
- * @param {Function} [options.fileSelect] - called back before selection with files in params and returns the files to select; filter use case
88
- * @param {Object} [options.formAttributes] - object with all the attributes you want to be on the form element
89
- * @param {String} [options.defaultErrMsg] - localized error message when something goes wrong
90
- * @param {String} [options.uploadBtnText] - text on upload button
91
- * @returns {jQueryElement} for chainingV
92
- */
93
- init: function (options) {
94
- //get options using default
95
- options = _.defaults(options || {}, defaults);
96
-
97
- return this.each(function () {
98
- const $elt = $(this);
99
- let $builtInForm;
100
-
101
- if (!$elt.data(dataNs)) {
102
- $elt.html(uploaderTpl(options));
103
-
104
- // form could be inside $elt ...
105
- $builtInForm = options.$form && options.$form.length ? options.$form : $elt.find('form');
106
-
107
- // ... if not it could be a wrapper
108
- if (!$builtInForm.length) {
109
- $builtInForm = $elt.closest('form');
110
- }
111
-
112
- // ... if no form is present wrap $elt in one
113
- if (!$builtInForm.length) {
114
- $elt.wrap($('<form>', options.formAttributes));
115
- $builtInForm = $elt.parent();
116
- }
117
-
118
- //retrieve elements
119
- options.$input = $('input[type=file]', $elt);
120
- options.$browseBtn = $('.' + options.browseBtnClass, $elt);
121
- options.$fileName = $('.' + options.fileNameClass, $elt);
122
- options.$dropZone = $('.' + options.dropZoneClass, $elt);
123
- options.$progressBar = $('.' + options.progressBarClass, $elt);
124
- options.$form = $builtInForm;
125
- options.$uploadBtn = $('.' + options.uploadBtnClass, $elt);
126
- options.$resetBtn = $('.' + options.resetBtnClass, $elt);
127
-
128
- options.useDropZone = tests.dnd;
129
-
130
- options.dropZonePlaceholder = options.$dropZone.html();
131
- options.fileNamePlaceholder = options.$fileName.text();
132
-
133
- options.files = [];
134
-
135
- $elt.data(dataNs, options);
136
-
137
- uploader._reset($elt);
138
-
139
- const inputHandler = function (e) {
140
- // _.values also get the length property of the FileList object,
141
- // so we go for a plain old loop.
142
- const finalFiles = [];
143
- _.forEach(e.target.files, function (file) {
144
- finalFiles.push(file);
145
- });
146
-
147
- uploader._selectFiles($elt, finalFiles);
148
- options.$input.val('');
149
- };
150
-
151
- const dragOverHandler = function (e) {
152
- e.preventDefault();
153
- e.stopPropagation();
154
- options.$dropZone.addClass(options.dragOverClass);
155
- };
156
- const dragOutHandler = function (e) {
157
- e.preventDefault();
158
- e.stopPropagation();
159
- options.$dropZone.removeClass(options.dragOverClass);
160
- };
161
-
162
- //manage input selection
163
- if (!tests.filereader) {
164
- throw new Error('FileReader API not supported! Please use a compliant browser!');
165
- }
166
- options.$input.on('change', inputHandler);
167
-
168
- // IE Specific hack. It prevents the browseBtn to slightly
169
- // move on click. Special thanks to Dieter Raber, OAT S.A.
170
- options.$input.on('mousedown', function (e) {
171
- e.preventDefault();
172
- $(this).blur();
173
- return false;
174
- });
175
-
176
- //manage drag and drop selection
177
- if (options.useDropZone) {
178
- //prevent drag and drop outside the zone to loose the current context
179
- $(document)
180
- .off('drop.' + ns)
181
- .on('drop.' + ns, function (e) {
182
- e.stopImmediatePropagation();
183
- e.preventDefault();
184
- return false;
185
- });
186
- $(document)
187
- .off('dragover.' + ns)
188
- .on('dragover.' + ns, function (e) {
189
- e.stopImmediatePropagation();
190
- e.preventDefault();
191
- return false;
192
- });
193
- options.$dropZone
194
- .on('dragover', dragOverHandler)
195
- .on('dragend', dragOutHandler)
196
- .on('dragleave', dragOutHandler)
197
- .on('drop', function (e) {
198
- let files = [];
199
- dragOutHandler(e);
200
-
201
- if (e.target.files) {
202
- files = _.values(e.target.files);
203
- } else if (e.originalEvent.files) {
204
- files = _.values(e.originalEvent.files);
205
- } else if (e.originalEvent.dataTransfer && e.originalEvent.dataTransfer.files) {
206
- files = _.values(e.originalEvent.dataTransfer.files);
207
- }
208
-
209
- if (files && files.length) {
210
- let append = options.$dropZone.children('ul').length > 0;
211
- if (!options.multiple) {
212
- files = [files[0]];
213
- append = false;
214
- }
215
-
216
- uploader._selectFiles($elt, files, append);
217
- }
218
- return false;
219
- });
220
- } else {
221
- options.$dropZone.hide();
222
- }
223
-
224
- //getting files
225
- $elt.on('fileselect.' + ns, function () {
226
- if (options.files.length === 0) {
227
- uploader._reset($elt);
228
- }
229
-
230
- if (options.upload) {
231
- options.$uploadBtn
232
- .off('click')
233
- .on('click', function (e) {
234
- e.preventDefault();
235
- uploader._upload($elt, options.files);
236
- })
237
- .removeProp('disabled');
238
- }
239
-
240
- if (options.read) {
241
- uploader._read($elt, options.files);
242
- }
243
-
244
- options.$resetBtn
245
- .off('click')
246
- .on('click', function (e) {
247
- e.preventDefault();
248
- uploader._reset($elt);
249
- })
250
- .removeProp('disabled');
251
- });
252
-
253
- /**
254
- * The plugin has been created.
255
- * @event uploader#create.uploader
256
- */
257
- $elt.trigger('create.' + ns);
258
- }
259
- });
260
- },
261
-
262
- /**
263
- * Select files to upload/read.
264
- *
265
- * Called the jQuery way once registered by the Pluginifier:
266
- * @example $('selector').uploader('selectFiles', files);
267
- *
268
- * @param {jQueryElement} $elt - plugin's element
269
- * @param {Array<File>} files - the selected files
270
- * @param {Boolean} [append = false] - in append mode the files are added instead of replaced
271
- * @fires uploader#fileselect.uploader
272
- */
273
- _selectFiles: function _selectFiles($elt, files, append) {
274
- const self = this;
275
- let listContent;
276
- const options = $elt.data(dataNs);
277
-
278
- //update the file name field with the current number of files selected
279
- const updateFileName = function updateFileName() {
280
- const length = options.files.length;
281
- options.$fileName
282
- .text(length + ' ' + (length > 1 ? __('files selected') : __('file selected')))
283
- .removeClass('placeholder');
284
- };
285
-
286
- if (files.length <= 0 && !append) {
287
- //empty file list, so we reset the plugin
288
- self._reset($elt);
289
- }
290
- if (files.length > 0) {
291
- //execute the fileSelect function to filter files before selection
292
- options.fileSelect.call($elt, files, function (filteredFiles) {
293
- if (append) {
294
- options.files = options.files.concat(filteredFiles);
295
- } else {
296
- options.files = filteredFiles;
297
- }
298
-
299
- if (options.useDropZone) {
300
- updateFileName();
301
-
302
- listContent = _.reduce(
303
- filteredFiles,
304
- function (acc, file) {
305
- return (
306
- acc +
307
- fileEntryTpl({
308
- name: file.name,
309
- size: bytes.hrSize(file.size)
310
- })
311
- );
312
- },
313
- ''
314
- );
315
-
316
- if (append) {
317
- options.$dropZone.children('ul').append(listContent);
318
- } else {
319
- options.$dropZone.html('<ul>' + listContent + '</ul>');
320
- }
321
-
322
- options.$dropZone.off('click.' + ns).on('click.' + ns, '[data-role=delete]', function (e) {
323
- const $fileEntry = $(this).parent();
324
- const name = $fileEntry.data('file-name');
325
- e.preventDefault();
326
- e.stopPropagation();
327
- if (name) {
328
- options.files = _.reject(options.files, { name: name });
329
- if (options.files.length === 0) {
330
- self._reset($elt);
331
- } else {
332
- updateFileName();
333
- }
334
- $fileEntry.remove();
335
- }
336
- });
337
- } else {
338
- //legacy mode, no dnd support
339
- options.files = options.files.slice(0, 1);
340
- options.$fileName.text(files[0].name).removeClass('placeholder');
341
- }
342
-
343
- /**
344
- * Files has been selected
345
- * @event uploader#fileselect.uploader
346
- */
347
- $elt.trigger('fileselect.' + ns);
348
- });
349
- }
350
- },
351
-
352
- /**
353
- * Get the selected files.
354
- *
355
- * Called the jQuery way once registered by the Pluginifier:
356
- * @example const files = $('selector').uploader('files');
357
- *
358
- * @param {jQueryElement} $elt - plugin's element
359
- * @returns {Array<File>} the selected files
360
- */
361
- _files: function ($elt) {
362
- let files = [];
363
- const options = $elt.data(dataNs);
364
- if (options) {
365
- files = options.files;
366
- }
367
- return files;
368
- },
369
-
370
- /**
371
- * Reset the component
372
- *
373
- * Called the jQuery way once registered by the Pluginifier:
374
- * @example $('selector').uploader('reset');
375
- *
376
- * @param {jQueryElement} $elt - plugin's element
377
- * @fires uploader#reset.uploader
378
- */
379
- _reset: function ($elt) {
380
- const options = $elt.data(dataNs);
381
-
382
- options.$fileName.text(options.fileNamePlaceholder).addClass('placeholder');
383
-
384
- options.$dropZone.empty().html(options.dropZonePlaceholder);
385
-
386
- options.$uploadBtn.prop('disabled', true);
387
- options.$resetBtn.prop('disabled', true);
388
-
389
- const importButton = options.$form[0].querySelector('button');
390
- if (importButton) {
391
- importButton.setAttribute('disabled', true);
392
- }
393
-
394
- if (options.$progressBar) {
395
- options.$progressBar.removeClass('success').progressbar('destroy').progressbar({ value: 0 });
396
- }
397
- /**
398
- * The plugin has been created.
399
- * @event uploader#reset.uploader
400
- */
401
- $elt.trigger('reset.' + ns);
402
- },
403
-
404
- /**
405
- * Upload the selected file
406
- *
407
- * Called the jQuery way once registered by the Pluginifier:
408
- * @example $('selector').uploader('upload');
409
- *
410
- * @param {jQueryElement} $elt - plugin's element
411
- * @fires uploader#upload.uploader
412
- * @fires uploader#fail.uploader
413
- * @fires uploader#end.uploader
414
- */
415
- _upload: function ($elt) {
416
- let length,
417
- $fileEntries,
418
- entryHeight,
419
- errors = [],
420
- q;
421
-
422
- const options = $elt.data(dataNs);
423
-
424
- if (options && options.files.length) {
425
- length = options.files.length;
426
- $fileEntries = $('ul', options.$dropZone);
427
- entryHeight = $('li:first', $fileEntries).outerHeight();
428
-
429
- //create an async queue to start uploads
430
- q = async.queue(function (file, done) {
431
- var $fileEntry = $('li[data-file-name="' + file.name + '"]', $fileEntries);
432
- var $status = $('.status', $fileEntry);
433
- var index = $fileEntries.children().index($fileEntry);
434
-
435
- //update the scroll into the element
436
- options.$dropZone.stop(true, true).animate({ scrollTop: index * entryHeight }, 25);
437
-
438
- $status.removeClass('success').removeClass('error').addClass('sending');
439
-
440
- //send (upload) the file
441
- options.$form.sendfile({
442
- url: options.uploadUrl,
443
- file: file,
444
- loaded: function (result) {
445
- $status.removeClass('sending').removeClass('error').addClass('success');
446
- done(null, result);
447
- },
448
- failed: function (message) {
449
- message = message || options.defaultErrMsg;
450
- $status.removeClass('sending').removeClass('success').addClass('error').attr('title', message);
451
- done(new Error(message));
452
- }
453
- });
454
- }, options.uploadQueueSize || 1);
455
-
456
- //disable buttons
457
- options.$uploadBtn.prop('disabled', true);
458
- options.$resetBtn.prop('disabled', true);
459
-
460
- options.$progressBar.progressbar('value', 0);
461
-
462
- //start pushing uploads into the queue
463
- _.forEach(options.files, function (file, index) {
464
- _.delay(function () {
465
- q.push(file, function (err, result) {
466
- var complete = ((index + 1) / length) * 100;
467
-
468
- if (err) {
469
- errors.push(err);
470
-
471
- /**
472
- * The file fails to upload
473
- * @event uploader#fail.uploader
474
- * @param {Object} file - the uploaded file
475
- * @param {Object} err - the error
476
- */
477
- $elt.trigger('fail.' + ns, [file, err]);
478
- } else {
479
- /**
480
- * A file is uploaded
481
- * @event uploader#upload.uploader
482
- * @param {Object} file - the uploaded file
483
- * @param {Object} result - the upload response
484
- */
485
- $elt.trigger('upload.' + ns, [file, result]);
486
- }
487
-
488
- //update progress bar regarding the number of files uploaded
489
- options.$progressBar.progressbar('value', complete);
490
-
491
- if (complete >= 100) {
492
- if (errors.length === length) {
493
- options.$progressBar.addClass('error');
494
- } else if (errors.length > 0) {
495
- options.$progressBar.addClass('warning');
496
- } else {
497
- options.$progressBar.addClass('success');
498
- }
499
-
500
- /**
501
- * The upload sequence is complete
502
- * @event uploader#end.uploader
503
- */
504
- $elt.trigger('end.' + ns);
505
- }
506
- });
507
- }, 50);
508
- });
509
- }
510
- },
511
-
512
- /**
513
- * Read the selected file.
514
- *
515
- * TODO update files status and progress bar by file
516
- *
517
- * Called the jQuery way once registered by the Pluginifier:
518
- * @example $('selector').uploader('read');
519
- *
520
- * @param {jQueryElement} $elt - plugin's element
521
- * @fires uploader#readstart.uploader
522
- * @fires uploader#readend.uploader
523
- */
524
- _read: function ($elt) {
525
- var options = $elt.data(dataNs);
526
-
527
- if (options && options.files.length) {
528
- _.forEach(options.files, function (file) {
529
- // Let's read the file to get its base64 encoded content.
530
- var reader = new FileReader();
531
-
532
- reader.onload = function (e) {
533
- options.$progressBar.progressbar('value', 100);
534
-
535
- /**
536
- * The read is fininshed
537
- * @event uploader#readend.uploader
538
- * @param {Object} file - the reading file
539
- * @param {Object} result - the content
540
- */
541
- $elt.trigger('readend.' + ns, [file, e.target.result]);
542
- };
543
-
544
- reader.onloadstart = function () {
545
- options.$progressBar.progressbar('value', 0);
546
-
547
- /**
548
- * The reading starts
549
- * @event uploader#readstart.uploader
550
- * @param {Object} file - the reading file
551
- */
552
- $elt.trigger('readstart.' + ns, [file]);
553
- };
554
-
555
- if (options.$progressBar.length) {
556
- reader.onprogress = function (e) {
557
- var percentProgress = Math.ceil((Math.round(e.loaded) / Math.round(e.total)) * 100);
558
- options.$progressBar.progressbar('value', percentProgress);
559
- };
560
- }
561
- reader.readAsDataURL(file);
562
- });
563
- }
564
- },
565
-
566
- /**
567
- * Destroy completely the plugin.
568
- *
569
- * Called the jQuery way once registered by the Pluginifier:
570
- * @example $('selector').uploader('destroy');
571
- *
572
- * @fires uploader#destroy.uploader
573
- */
574
- destroy: function () {
575
- this.each(function () {
576
- var $elt = $(this);
577
-
578
- $(document)
579
- .off('drop.' + ns)
580
- .off('dragover.' + ns);
581
-
582
- $elt.empty();
583
-
584
- /**
585
- * The plugin has been destroyed.
586
- * @event uploader#destroy.uploader
587
- */
588
- $elt.trigger('destroy.' + ns);
589
- });
590
- }
591
- };
592
-
593
- //Register the incrementer to behave as a jQuery plugin.
594
- Pluginifier.register(ns, uploader, { expose: ['reset', 'selectFiles', 'upload', 'read'] });
1
+ /**
2
+ * @author Bertrand Chevrier <bertrand@taotesting.com>
3
+ */
4
+ import $ from 'jquery';
5
+ import _ from 'lodash';
6
+ import __ from 'i18n';
7
+ import async from 'async';
8
+ import Pluginifier from 'core/pluginifier';
9
+ import bytes from 'util/bytes';
10
+ import uploaderTpl from 'ui/uploader/uploader';
11
+ import fileEntryTpl from 'ui/uploader/fileEntry';
12
+ import 'ui/filesender';
13
+ import 'ui/progressbar';
14
+
15
+ const ns = 'uploader';
16
+ const dataNs = 'ui.' + ns;
17
+
18
+ //the plugin defaults
19
+ const defaults = {
20
+ upload: true,
21
+ read: false,
22
+ multiple: false,
23
+ uploadQueueSize: 3,
24
+ inputName: 'content',
25
+ showResetButton: true,
26
+ showUploadButton: true,
27
+ browseBtnClass: 'btn-browse',
28
+ uploadBtnClass: 'btn-upload',
29
+ resetBtnClass: 'btn-reset',
30
+ fileNameClass: 'file-name',
31
+ dropZoneClass: 'file-drop',
32
+ progressBarClass: 'progressbar',
33
+ dragOverClass: 'drag-hover',
34
+ formAttributes: {
35
+ class: 'uploader uploaderContainer'
36
+ },
37
+ defaultErrMsg: __('Unable to upload file'),
38
+ uploadBtnText: __('Upload'),
39
+
40
+ /**
41
+ * Make files available before file selection. It can be used to filter.
42
+ * @callback fileSelect
43
+ * @param {Array<File>} files - the selected files
44
+ * @param {Function} [done] - callback with filtered files
45
+ * @returns {undefined|Array<File>} the files to be selected
46
+ */
47
+ fileSelect: function (files, done) {
48
+ if (_.isFunction(done)) {
49
+ return done(files);
50
+ }
51
+ return files;
52
+ }
53
+ };
54
+
55
+ //feature tests
56
+ const tests = {
57
+ filereader: typeof FileReader !== 'undefined',
58
+ dnd: 'draggable' in document.createElement('span')
59
+ };
60
+
61
+ /**
62
+ * Define a jQuery component to help you to manage file(s) upload/reading.
63
+ * @exports ui/uploader
64
+ */
65
+ const uploader = {
66
+ /**
67
+ * Initialize the plugin.
68
+ *
69
+ * Called the jQuery way once registered by the Pluginifier.
70
+ * @example $('selector').uploader();
71
+ *
72
+ * @constructor
73
+ * @param {Object} [options] - the plugin options
74
+ * @param {Boolean} [options.upload = true] - if we upload the file once selected
75
+ * @param {String} [options.uploadUrl] - the URL where the files will be posted
76
+ * @param {jQueryElement} [options.$form] - a form to be used instead
77
+ * @param {Boolean} [options.read = false] - if we can read the file once selected
78
+ * @param {Boolean} [options.multiple = false] - enable to select more multiple files (may be not supported by old browsers)
79
+ * @param {Number} [options.uploadQueueSize = 3] - max parallel uploads (applies only in multiple mode)
80
+ * @param {String} [options.browseBtnClass = btn-browse] - the class to identify the browse button
81
+ * @param {String} [options.uploadBtnClass = btn-upload] - the class to identify the upload button
82
+ * @param {String} [options.resetBtnClass = btn-reset] - the class to identify the reset button
83
+ * @param {String} [options.fileNameClass = file-name] - the class of the elt where the file name is set
84
+ * @param {String} [options.dropZoneClass = file-drop] - the class of the drop file elt
85
+ * @param {String} [options.progressBarClass = progressbar] - the class to identify the progress bar
86
+ * @param {String} [options.dragOverClass = drag-hover] - the class to set to the drop zone when dragging over
87
+ * @param {Function} [options.fileSelect] - called back before selection with files in params and returns the files to select; filter use case
88
+ * @param {Object} [options.formAttributes] - object with all the attributes you want to be on the form element
89
+ * @param {String} [options.defaultErrMsg] - localized error message when something goes wrong
90
+ * @param {String} [options.uploadBtnText] - text on upload button
91
+ * @returns {jQueryElement} for chainingV
92
+ */
93
+ init: function (options) {
94
+ //get options using default
95
+ options = _.defaults(options || {}, defaults);
96
+
97
+ return this.each(function () {
98
+ const $elt = $(this);
99
+ let $builtInForm;
100
+
101
+ if (!$elt.data(dataNs)) {
102
+ $elt.html(uploaderTpl(options));
103
+
104
+ // form could be inside $elt ...
105
+ $builtInForm = options.$form && options.$form.length ? options.$form : $elt.find('form');
106
+
107
+ // ... if not it could be a wrapper
108
+ if (!$builtInForm.length) {
109
+ $builtInForm = $elt.closest('form');
110
+ }
111
+
112
+ // ... if no form is present wrap $elt in one
113
+ if (!$builtInForm.length) {
114
+ $elt.wrap($('<form>', options.formAttributes));
115
+ $builtInForm = $elt.parent();
116
+ }
117
+
118
+ //retrieve elements
119
+ options.$input = $('input[type=file]', $elt);
120
+ options.$browseBtn = $('.' + options.browseBtnClass, $elt);
121
+ options.$fileName = $('.' + options.fileNameClass, $elt);
122
+ options.$dropZone = $('.' + options.dropZoneClass, $elt);
123
+ options.$progressBar = $('.' + options.progressBarClass, $elt);
124
+ options.$form = $builtInForm;
125
+ options.$uploadBtn = $('.' + options.uploadBtnClass, $elt);
126
+ options.$resetBtn = $('.' + options.resetBtnClass, $elt);
127
+
128
+ options.useDropZone = tests.dnd;
129
+
130
+ options.dropZonePlaceholder = options.$dropZone.html();
131
+ options.fileNamePlaceholder = options.$fileName.text();
132
+
133
+ options.files = [];
134
+
135
+ $elt.data(dataNs, options);
136
+
137
+ uploader._reset($elt);
138
+
139
+ const inputHandler = function (e) {
140
+ // _.values also get the length property of the FileList object,
141
+ // so we go for a plain old loop.
142
+ const finalFiles = [];
143
+ _.forEach(e.target.files, function (file) {
144
+ finalFiles.push(file);
145
+ });
146
+
147
+ uploader._selectFiles($elt, finalFiles);
148
+ options.$input.val('');
149
+ };
150
+
151
+ const dragOverHandler = function (e) {
152
+ e.preventDefault();
153
+ e.stopPropagation();
154
+ options.$dropZone.addClass(options.dragOverClass);
155
+ };
156
+ const dragOutHandler = function (e) {
157
+ e.preventDefault();
158
+ e.stopPropagation();
159
+ options.$dropZone.removeClass(options.dragOverClass);
160
+ };
161
+
162
+ //manage input selection
163
+ if (!tests.filereader) {
164
+ throw new Error('FileReader API not supported! Please use a compliant browser!');
165
+ }
166
+ options.$input.on('change', inputHandler);
167
+
168
+ // IE Specific hack. It prevents the browseBtn to slightly
169
+ // move on click. Special thanks to Dieter Raber, OAT S.A.
170
+ options.$input.on('mousedown', function (e) {
171
+ e.preventDefault();
172
+ $(this).blur();
173
+ return false;
174
+ });
175
+
176
+ //manage drag and drop selection
177
+ if (options.useDropZone) {
178
+ //prevent drag and drop outside the zone to loose the current context
179
+ $(document)
180
+ .off('drop.' + ns)
181
+ .on('drop.' + ns, function (e) {
182
+ e.stopImmediatePropagation();
183
+ e.preventDefault();
184
+ return false;
185
+ });
186
+ $(document)
187
+ .off('dragover.' + ns)
188
+ .on('dragover.' + ns, function (e) {
189
+ e.stopImmediatePropagation();
190
+ e.preventDefault();
191
+ return false;
192
+ });
193
+ options.$dropZone
194
+ .on('dragover', dragOverHandler)
195
+ .on('dragend', dragOutHandler)
196
+ .on('dragleave', dragOutHandler)
197
+ .on('drop', function (e) {
198
+ let files = [];
199
+ dragOutHandler(e);
200
+
201
+ if (e.target.files) {
202
+ files = _.values(e.target.files);
203
+ } else if (e.originalEvent.files) {
204
+ files = _.values(e.originalEvent.files);
205
+ } else if (e.originalEvent.dataTransfer && e.originalEvent.dataTransfer.files) {
206
+ files = _.values(e.originalEvent.dataTransfer.files);
207
+ }
208
+
209
+ if (files && files.length) {
210
+ let append = options.$dropZone.children('ul').length > 0;
211
+ if (!options.multiple) {
212
+ files = [files[0]];
213
+ append = false;
214
+ }
215
+
216
+ uploader._selectFiles($elt, files, append);
217
+ }
218
+ return false;
219
+ });
220
+ } else {
221
+ options.$dropZone.hide();
222
+ }
223
+
224
+ //getting files
225
+ $elt.on('fileselect.' + ns, function () {
226
+ if (options.files.length === 0) {
227
+ uploader._reset($elt);
228
+ }
229
+
230
+ if (options.upload) {
231
+ options.$uploadBtn
232
+ .off('click')
233
+ .on('click', function (e) {
234
+ e.preventDefault();
235
+ uploader._upload($elt, options.files);
236
+ })
237
+ .removeProp('disabled');
238
+ }
239
+
240
+ if (options.read) {
241
+ uploader._read($elt, options.files);
242
+ }
243
+
244
+ options.$resetBtn
245
+ .off('click')
246
+ .on('click', function (e) {
247
+ e.preventDefault();
248
+ uploader._reset($elt);
249
+ })
250
+ .removeProp('disabled');
251
+ });
252
+
253
+ /**
254
+ * The plugin has been created.
255
+ * @event uploader#create.uploader
256
+ */
257
+ $elt.trigger('create.' + ns);
258
+ }
259
+ });
260
+ },
261
+
262
+ /**
263
+ * Select files to upload/read.
264
+ *
265
+ * Called the jQuery way once registered by the Pluginifier:
266
+ * @example $('selector').uploader('selectFiles', files);
267
+ *
268
+ * @param {jQueryElement} $elt - plugin's element
269
+ * @param {Array<File>} files - the selected files
270
+ * @param {Boolean} [append = false] - in append mode the files are added instead of replaced
271
+ * @fires uploader#fileselect.uploader
272
+ */
273
+ _selectFiles: function _selectFiles($elt, files, append) {
274
+ const self = this;
275
+ let listContent;
276
+ const options = $elt.data(dataNs);
277
+
278
+ //update the file name field with the current number of files selected
279
+ const updateFileName = function updateFileName() {
280
+ const length = options.files.length;
281
+ options.$fileName
282
+ .text(length + ' ' + (length > 1 ? __('files selected') : __('file selected')))
283
+ .removeClass('placeholder');
284
+ };
285
+
286
+ if (files.length <= 0 && !append) {
287
+ //empty file list, so we reset the plugin
288
+ self._reset($elt);
289
+ }
290
+ if (files.length > 0) {
291
+ //execute the fileSelect function to filter files before selection
292
+ options.fileSelect.call($elt, files, function (filteredFiles) {
293
+ if (append) {
294
+ options.files = options.files.concat(filteredFiles);
295
+ } else {
296
+ options.files = filteredFiles;
297
+ }
298
+
299
+ if (options.useDropZone) {
300
+ updateFileName();
301
+
302
+ listContent = _.reduce(
303
+ filteredFiles,
304
+ function (acc, file) {
305
+ return (
306
+ acc +
307
+ fileEntryTpl({
308
+ name: file.name,
309
+ size: bytes.hrSize(file.size)
310
+ })
311
+ );
312
+ },
313
+ ''
314
+ );
315
+
316
+ if (append) {
317
+ options.$dropZone.children('ul').append(listContent);
318
+ } else {
319
+ options.$dropZone.html('<ul>' + listContent + '</ul>');
320
+ }
321
+
322
+ options.$dropZone.off('click.' + ns).on('click.' + ns, '[data-role=delete]', function (e) {
323
+ const $fileEntry = $(this).parent();
324
+ const name = $fileEntry.data('file-name');
325
+ e.preventDefault();
326
+ e.stopPropagation();
327
+ if (name) {
328
+ options.files = _.reject(options.files, { name: name });
329
+ if (options.files.length === 0) {
330
+ self._reset($elt);
331
+ } else {
332
+ updateFileName();
333
+ }
334
+ $fileEntry.remove();
335
+ }
336
+ });
337
+ } else {
338
+ //legacy mode, no dnd support
339
+ options.files = options.files.slice(0, 1);
340
+ options.$fileName.text(files[0].name).removeClass('placeholder');
341
+ }
342
+
343
+ /**
344
+ * Files has been selected
345
+ * @event uploader#fileselect.uploader
346
+ */
347
+ $elt.trigger('fileselect.' + ns);
348
+ });
349
+ }
350
+ },
351
+
352
+ /**
353
+ * Get the selected files.
354
+ *
355
+ * Called the jQuery way once registered by the Pluginifier:
356
+ * @example const files = $('selector').uploader('files');
357
+ *
358
+ * @param {jQueryElement} $elt - plugin's element
359
+ * @returns {Array<File>} the selected files
360
+ */
361
+ _files: function ($elt) {
362
+ let files = [];
363
+ const options = $elt.data(dataNs);
364
+ if (options) {
365
+ files = options.files;
366
+ }
367
+ return files;
368
+ },
369
+
370
+ /**
371
+ * Reset the component
372
+ *
373
+ * Called the jQuery way once registered by the Pluginifier:
374
+ * @example $('selector').uploader('reset');
375
+ *
376
+ * @param {jQueryElement} $elt - plugin's element
377
+ * @fires uploader#reset.uploader
378
+ */
379
+ _reset: function ($elt) {
380
+ const options = $elt.data(dataNs);
381
+
382
+ options.$fileName.text(options.fileNamePlaceholder).addClass('placeholder');
383
+
384
+ options.$dropZone.empty().html(options.dropZonePlaceholder);
385
+
386
+ options.$uploadBtn.prop('disabled', true);
387
+ options.$resetBtn.prop('disabled', true);
388
+
389
+ const importButton = options.$form[0].querySelector('button');
390
+ if (importButton) {
391
+ importButton.setAttribute('disabled', true);
392
+ }
393
+
394
+ if (options.$progressBar) {
395
+ options.$progressBar.removeClass('success').progressbar('destroy').progressbar({ value: 0 });
396
+ }
397
+ /**
398
+ * The plugin has been created.
399
+ * @event uploader#reset.uploader
400
+ */
401
+ $elt.trigger('reset.' + ns);
402
+ },
403
+
404
+ /**
405
+ * Upload the selected file
406
+ *
407
+ * Called the jQuery way once registered by the Pluginifier:
408
+ * @example $('selector').uploader('upload');
409
+ *
410
+ * @param {jQueryElement} $elt - plugin's element
411
+ * @fires uploader#upload.uploader
412
+ * @fires uploader#fail.uploader
413
+ * @fires uploader#end.uploader
414
+ */
415
+ _upload: function ($elt) {
416
+ let length,
417
+ $fileEntries,
418
+ entryHeight,
419
+ errors = [],
420
+ q;
421
+
422
+ const options = $elt.data(dataNs);
423
+
424
+ if (options && options.files.length) {
425
+ length = options.files.length;
426
+ $fileEntries = $('ul', options.$dropZone);
427
+ entryHeight = $('li:first', $fileEntries).outerHeight();
428
+
429
+ //create an async queue to start uploads
430
+ q = async.queue(function (file, done) {
431
+ var $fileEntry = $('li[data-file-name="' + file.name + '"]', $fileEntries);
432
+ var $status = $('.status', $fileEntry);
433
+ var index = $fileEntries.children().index($fileEntry);
434
+
435
+ //update the scroll into the element
436
+ options.$dropZone.stop(true, true).animate({ scrollTop: index * entryHeight }, 25);
437
+
438
+ $status.removeClass('success').removeClass('error').addClass('sending');
439
+
440
+ //send (upload) the file
441
+ options.$form.sendfile({
442
+ url: options.uploadUrl,
443
+ file: file,
444
+ loaded: function (result) {
445
+ $status.removeClass('sending').removeClass('error').addClass('success');
446
+ done(null, result);
447
+ },
448
+ failed: function (message) {
449
+ message = message || options.defaultErrMsg;
450
+ $status.removeClass('sending').removeClass('success').addClass('error').attr('title', message);
451
+ done(new Error(message));
452
+ }
453
+ });
454
+ }, options.uploadQueueSize || 1);
455
+
456
+ //disable buttons
457
+ options.$uploadBtn.prop('disabled', true);
458
+ options.$resetBtn.prop('disabled', true);
459
+
460
+ options.$progressBar.progressbar('value', 0);
461
+
462
+ //start pushing uploads into the queue
463
+ _.forEach(options.files, function (file, index) {
464
+ _.delay(function () {
465
+ q.push(file, function (err, result) {
466
+ var complete = ((index + 1) / length) * 100;
467
+
468
+ if (err) {
469
+ errors.push(err);
470
+
471
+ /**
472
+ * The file fails to upload
473
+ * @event uploader#fail.uploader
474
+ * @param {Object} file - the uploaded file
475
+ * @param {Object} err - the error
476
+ */
477
+ $elt.trigger('fail.' + ns, [file, err]);
478
+ } else {
479
+ /**
480
+ * A file is uploaded
481
+ * @event uploader#upload.uploader
482
+ * @param {Object} file - the uploaded file
483
+ * @param {Object} result - the upload response
484
+ */
485
+ $elt.trigger('upload.' + ns, [file, result]);
486
+ }
487
+
488
+ //update progress bar regarding the number of files uploaded
489
+ options.$progressBar.progressbar('value', complete);
490
+
491
+ if (complete >= 100) {
492
+ if (errors.length === length) {
493
+ options.$progressBar.addClass('error');
494
+ } else if (errors.length > 0) {
495
+ options.$progressBar.addClass('warning');
496
+ } else {
497
+ options.$progressBar.addClass('success');
498
+ }
499
+
500
+ /**
501
+ * The upload sequence is complete
502
+ * @event uploader#end.uploader
503
+ */
504
+ $elt.trigger('end.' + ns);
505
+ }
506
+ });
507
+ }, 50);
508
+ });
509
+ }
510
+ },
511
+
512
+ /**
513
+ * Read the selected file.
514
+ *
515
+ * TODO update files status and progress bar by file
516
+ *
517
+ * Called the jQuery way once registered by the Pluginifier:
518
+ * @example $('selector').uploader('read');
519
+ *
520
+ * @param {jQueryElement} $elt - plugin's element
521
+ * @fires uploader#readstart.uploader
522
+ * @fires uploader#readend.uploader
523
+ */
524
+ _read: function ($elt) {
525
+ var options = $elt.data(dataNs);
526
+
527
+ if (options && options.files.length) {
528
+ _.forEach(options.files, function (file) {
529
+ // Let's read the file to get its base64 encoded content.
530
+ var reader = new FileReader();
531
+
532
+ reader.onload = function (e) {
533
+ options.$progressBar.progressbar('value', 100);
534
+
535
+ /**
536
+ * The read is fininshed
537
+ * @event uploader#readend.uploader
538
+ * @param {Object} file - the reading file
539
+ * @param {Object} result - the content
540
+ */
541
+ $elt.trigger('readend.' + ns, [file, e.target.result]);
542
+ };
543
+
544
+ reader.onloadstart = function () {
545
+ options.$progressBar.progressbar('value', 0);
546
+
547
+ /**
548
+ * The reading starts
549
+ * @event uploader#readstart.uploader
550
+ * @param {Object} file - the reading file
551
+ */
552
+ $elt.trigger('readstart.' + ns, [file]);
553
+ };
554
+
555
+ if (options.$progressBar.length) {
556
+ reader.onprogress = function (e) {
557
+ var percentProgress = Math.ceil((Math.round(e.loaded) / Math.round(e.total)) * 100);
558
+ options.$progressBar.progressbar('value', percentProgress);
559
+ };
560
+ }
561
+ reader.readAsDataURL(file);
562
+ });
563
+ }
564
+ },
565
+
566
+ /**
567
+ * Destroy completely the plugin.
568
+ *
569
+ * Called the jQuery way once registered by the Pluginifier:
570
+ * @example $('selector').uploader('destroy');
571
+ *
572
+ * @fires uploader#destroy.uploader
573
+ */
574
+ destroy: function () {
575
+ this.each(function () {
576
+ var $elt = $(this);
577
+
578
+ $(document)
579
+ .off('drop.' + ns)
580
+ .off('dragover.' + ns);
581
+
582
+ $elt.empty();
583
+
584
+ /**
585
+ * The plugin has been destroyed.
586
+ * @event uploader#destroy.uploader
587
+ */
588
+ $elt.trigger('destroy.' + ns);
589
+ });
590
+ }
591
+ };
592
+
593
+ //Register the incrementer to behave as a jQuery plugin.
594
+ Pluginifier.register(ns, uploader, { expose: ['reset', 'selectFiles', 'upload', 'read'] });