@oat-sa/tao-core-ui 1.58.1 → 1.58.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/dist/actionbar.js +386 -395
  2. package/dist/adder.js +21 -19
  3. package/dist/animable/absorbable/absorbable.js +204 -213
  4. package/dist/animable/absorbable/css/absorb.css +1 -0
  5. package/dist/animable/absorbable/css/absorb.css.map +1 -1
  6. package/dist/animable/pulsable/pulsable.js +168 -177
  7. package/dist/autocomplete/css/autocomplete.css +1 -0
  8. package/dist/autocomplete/css/autocomplete.css.map +1 -1
  9. package/dist/autocomplete.js +68 -66
  10. package/dist/badge/badge.js +188 -197
  11. package/dist/badge/css/badge.css +1 -0
  12. package/dist/badge/css/badge.css.map +1 -1
  13. package/dist/breadcrumbs.js +275 -284
  14. package/dist/btngrouper.js +5 -5
  15. package/dist/bulkActionPopup.js +490 -495
  16. package/dist/button.js +283 -291
  17. package/dist/cascadingComboBox.js +249 -258
  18. package/dist/ckeditor/ckConfigurator.js +26 -19
  19. package/dist/ckeditor/dtdHandler.js +11 -9
  20. package/dist/class/selector.js +441 -450
  21. package/dist/component/resizable.js +1 -1
  22. package/dist/component/windowed.js +285 -294
  23. package/dist/component.js +419 -428
  24. package/dist/contextualPopup.js +417 -426
  25. package/dist/dashboard.js +300 -309
  26. package/dist/datalist.js +753 -762
  27. package/dist/datatable/filterStrategy/multiple.js +1 -1
  28. package/dist/datatable/filterStrategy/single.js +1 -1
  29. package/dist/datatable.js +1527 -1550
  30. package/dist/dateRange/dateRange.js +393 -402
  31. package/dist/datetime/picker.js +665 -672
  32. package/dist/deleter.js +368 -377
  33. package/dist/destination/selector.js +286 -295
  34. package/dist/dialog/alert.js +3 -3
  35. package/dist/dialog/confirm.js +1 -1
  36. package/dist/dialog/confirmDelete.js +216 -225
  37. package/dist/dialog.js +650 -654
  38. package/dist/disabler.js +8 -8
  39. package/dist/documentViewer/providers/pdfViewer/fallback/viewer.js +166 -175
  40. package/dist/documentViewer/providers/pdfViewer/pdfjs/findBar.js +518 -527
  41. package/dist/documentViewer/providers/pdfViewer/pdfjs/pageView.js +380 -389
  42. package/dist/documentViewer/providers/pdfViewer/pdfjs/searchEngine.js +539 -548
  43. package/dist/documentViewer/providers/pdfViewer/pdfjs/viewer.js +369 -378
  44. package/dist/documentViewer/providers/pdfViewer.js +184 -193
  45. package/dist/documentViewer.js +292 -301
  46. package/dist/dropdown.js +383 -392
  47. package/dist/durationer.js +5 -5
  48. package/dist/dynamicComponent.js +597 -598
  49. package/dist/feedback.js +356 -362
  50. package/dist/figure/FigureStateActive.js +117 -108
  51. package/dist/filesender.js +2 -2
  52. package/dist/filter.js +230 -239
  53. package/dist/form/dropdownForm.js +355 -357
  54. package/dist/form/form.js +919 -690
  55. package/dist/form/simpleForm.js +1 -1
  56. package/dist/form/validator/renderer.js +233 -235
  57. package/dist/form/validator/validator.js +257 -189
  58. package/dist/form/widget/definitions.js +1 -1
  59. package/dist/form/widget/providers/checkBox.js +254 -259
  60. package/dist/form/widget/providers/comboBox.js +187 -192
  61. package/dist/form/widget/providers/default.js +8 -9
  62. package/dist/form/widget/providers/hidden.js +170 -179
  63. package/dist/form/widget/providers/hiddenBox.js +262 -267
  64. package/dist/form/widget/providers/radioBox.js +216 -225
  65. package/dist/form/widget/providers/textArea.js +187 -196
  66. package/dist/form/widget/providers/textBox.js +2 -3
  67. package/dist/form/widget/widget.js +473 -475
  68. package/dist/formValidator/formValidator.js +1 -1
  69. package/dist/formValidator/highlighters/message.js +1 -1
  70. package/dist/generis/form/form.js +314 -323
  71. package/dist/generis/validator/validator.js +209 -218
  72. package/dist/generis/widget/checkBox/checkBox.js +218 -227
  73. package/dist/generis/widget/comboBox/comboBox.js +179 -188
  74. package/dist/generis/widget/hiddenBox/hiddenBox.js +220 -229
  75. package/dist/generis/widget/textBox/textBox.js +169 -178
  76. package/dist/generis/widget/widget.js +246 -255
  77. package/dist/groupedComboBox.js +222 -231
  78. package/dist/groupvalidator.js +2 -2
  79. package/dist/highlighter.js +967 -958
  80. package/dist/image/ImgStateActive/helper.js +7 -5
  81. package/dist/image/ImgStateActive/initHelper.js +49 -43
  82. package/dist/image/ImgStateActive/initMediaEditor.js +24 -20
  83. package/dist/image/ImgStateActive/mediaSizer.js +14 -12
  84. package/dist/image/ImgStateActive.js +72 -70
  85. package/dist/incrementer.js +6 -6
  86. package/dist/inplacer.js +6 -6
  87. package/dist/itemButtonList/css/item-button-list.css +1 -0
  88. package/dist/itemButtonList/css/item-button-list.css.map +1 -1
  89. package/dist/itemButtonList.js +439 -435
  90. package/dist/keyNavigation/navigableDomElement.js +51 -38
  91. package/dist/keyNavigation/navigator.js +85 -70
  92. package/dist/listbox.js +460 -469
  93. package/dist/liststyler.js +8 -8
  94. package/dist/loadingButton/loadingButton.js +209 -218
  95. package/dist/lock.js +476 -485
  96. package/dist/login/login.js +475 -484
  97. package/dist/maths/calculator/basicCalculator.js +235 -244
  98. package/dist/maths/calculator/calculatorComponent.js +3 -3
  99. package/dist/maths/calculator/core/board.js +772 -781
  100. package/dist/maths/calculator/core/expression.js +476 -485
  101. package/dist/maths/calculator/core/labels.js +228 -237
  102. package/dist/maths/calculator/core/tokenizer.js +1 -1
  103. package/dist/maths/calculator/core/tokens.js +163 -170
  104. package/dist/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +244 -253
  105. package/dist/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +279 -288
  106. package/dist/maths/calculator/scientificCalculator.js +327 -336
  107. package/dist/mediaEditor/mediaEditorComponent.js +238 -245
  108. package/dist/mediaEditor/plugins/mediaAlignment/helper.js +7 -7
  109. package/dist/mediaEditor/plugins/mediaAlignment/mediaAlignmentComponent.js +229 -235
  110. package/dist/mediaEditor/plugins/mediaDimension/mediaDimensionComponent.js +580 -589
  111. package/dist/mediaplayer/players/html5.js +666 -675
  112. package/dist/mediaplayer/players/youtube.js +419 -424
  113. package/dist/mediaplayer/support.js +11 -10
  114. package/dist/mediaplayer/utils/reminder.js +14 -13
  115. package/dist/mediaplayer/utils/timeObserver.js +10 -11
  116. package/dist/mediaplayer/youtubeManager.js +164 -145
  117. package/dist/mediaplayer.js +1565 -1520
  118. package/dist/mediasizer.js +669 -678
  119. package/dist/modal.js +10 -17
  120. package/dist/pageSizeSelector.js +219 -228
  121. package/dist/pagination/providers/pages.js +280 -289
  122. package/dist/pagination/providers/simple.js +192 -201
  123. package/dist/previewer.js +30 -30
  124. package/dist/progressbar.js +4 -4
  125. package/dist/report.js +347 -356
  126. package/dist/resource/filters.js +271 -280
  127. package/dist/resource/list.js +1264 -1273
  128. package/dist/resource/selector.js +865 -874
  129. package/dist/resource/tree.js +1483 -1492
  130. package/dist/resourcemgr/fileBrowser.js +564 -569
  131. package/dist/resourcemgr/filePreview.js +16 -16
  132. package/dist/resourcemgr/fileSelector.js +515 -524
  133. package/dist/resourcemgr/util/updatePermissions.js +2 -2
  134. package/dist/resourcemgr.js +306 -315
  135. package/dist/searchModal/advancedSearch.js +796 -767
  136. package/dist/searchModal.js +114 -91
  137. package/dist/switch/switch.js +298 -307
  138. package/dist/tabs.js +598 -575
  139. package/dist/taskQueue/status.js +312 -321
  140. package/dist/taskQueue/table.js +375 -384
  141. package/dist/taskQueue/taskQueueModel.js +488 -472
  142. package/dist/taskQueueButton/taskable.js +264 -273
  143. package/dist/taskQueueButton/treeButton.js +189 -198
  144. package/dist/themeLoader.js +24 -23
  145. package/dist/themes.js +1 -1
  146. package/dist/toggler.js +3 -3
  147. package/dist/tooltip.js +295 -304
  148. package/dist/transformer.js +2 -2
  149. package/dist/tristateCheckboxGroup.js +311 -320
  150. package/dist/uploader.js +687 -696
  151. package/dist/validator/Report.js +1 -1
  152. package/dist/validator/Validator.js +3 -3
  153. package/dist/validator/validators.js +9 -9
  154. package/dist/validator.js +240 -230
  155. package/dist/waitForMedia.js +1 -1
  156. package/package.json +3 -3
  157. package/src/animable/absorbable/css/absorb.css +1 -0
  158. package/src/animable/absorbable/css/absorb.css.map +1 -1
  159. package/src/autocomplete/css/autocomplete.css +1 -0
  160. package/src/autocomplete/css/autocomplete.css.map +1 -1
  161. package/src/badge/css/badge.css +1 -0
  162. package/src/badge/css/badge.css.map +1 -1
  163. package/src/ckeditor/ckConfigurator.js +4 -0
  164. package/src/itemButtonList/css/item-button-list.css +1 -0
  165. package/src/itemButtonList/css/item-button-list.css.map +1 -1
  166. package/src/.DS_Store +0 -0
  167. package/src/css/basic.css +0 -7826
  168. package/src/css/basic.css.map +0 -1
  169. package/src/css/ckeditor/skins/tao/css/dialog.css +0 -950
  170. package/src/css/ckeditor/skins/tao/css/dialog.css.map +0 -1
  171. package/src/css/ckeditor/skins/tao/css/editor.css +0 -1850
  172. package/src/css/ckeditor/skins/tao/css/editor.css.map +0 -1
  173. package/src/scss/.DS_Store +0 -0
  174. package/src/scss/basic.scss +0 -16
  175. package/src/scss/ckeditor/skins/tao/scss/dialog.scss +0 -763
  176. package/src/scss/ckeditor/skins/tao/scss/editor.scss +0 -111
  177. package/src/scss/ckeditor/skins/tao/scss/inc/_ck-icons.scss +0 -59
  178. package/src/scss/ckeditor/skins/tao/scss/inc/_colorpanel.scss +0 -118
  179. package/src/scss/ckeditor/skins/tao/scss/inc/_elementspath.scss +0 -69
  180. package/src/scss/ckeditor/skins/tao/scss/inc/_mainui.scss +0 -194
  181. package/src/scss/ckeditor/skins/tao/scss/inc/_menu.scss +0 -181
  182. package/src/scss/ckeditor/skins/tao/scss/inc/_panel.scss +0 -200
  183. package/src/scss/ckeditor/skins/tao/scss/inc/_presets.scss +0 -32
  184. package/src/scss/ckeditor/skins/tao/scss/inc/_reset.scss +0 -101
  185. package/src/scss/ckeditor/skins/tao/scss/inc/_richcombo.scss +0 -213
  186. package/src/scss/ckeditor/skins/tao/scss/inc/_tao.scss +0 -59
  187. package/src/scss/ckeditor/skins/tao/scss/inc/_toolbar.scss +0 -301
  188. package/src/scss/font/source-sans-pro/source-sans-pro-italic.eot +0 -0
  189. package/src/scss/font/source-sans-pro/source-sans-pro-italic.eot.b64 +0 -1
  190. package/src/scss/font/source-sans-pro/source-sans-pro-italic.woff +0 -0
  191. package/src/scss/font/source-sans-pro/source-sans-pro-italic.woff.b64 +0 -1
  192. package/src/scss/font/source-sans-pro/source-sans-pro-regular.eot +0 -0
  193. package/src/scss/font/source-sans-pro/source-sans-pro-regular.eot.b64 +0 -1
  194. package/src/scss/font/source-sans-pro/source-sans-pro-regular.woff +0 -0
  195. package/src/scss/font/source-sans-pro/source-sans-pro-regular.woff.b64 +0 -1
  196. package/src/scss/font/source-sans-pro/source-sans-pro-semibold-italic.eot +0 -0
  197. package/src/scss/font/source-sans-pro/source-sans-pro-semibold-italic.eot.b64 +0 -1
  198. package/src/scss/font/source-sans-pro/source-sans-pro-semibold-italic.woff +0 -0
  199. package/src/scss/font/source-sans-pro/source-sans-pro-semibold-italic.woff.b64 +0 -1
  200. package/src/scss/font/source-sans-pro/source-sans-pro-semibold.eot +0 -0
  201. package/src/scss/font/source-sans-pro/source-sans-pro-semibold.eot.b64 +0 -1
  202. package/src/scss/font/source-sans-pro/source-sans-pro-semibold.woff +0 -0
  203. package/src/scss/font/source-sans-pro/source-sans-pro-semibold.woff.b64 +0 -1
  204. package/src/scss/font/tao/tao.eot +0 -0
  205. package/src/scss/font/tao/tao.svg +0 -235
  206. package/src/scss/font/tao/tao.ttf +0 -0
  207. package/src/scss/font/tao/tao.woff +0 -0
  208. package/src/scss/inc/_base.scss +0 -496
  209. package/src/scss/inc/_bootstrap.scss +0 -6
  210. package/src/scss/inc/_buttons.scss +0 -114
  211. package/src/scss/inc/_colors.scss +0 -88
  212. package/src/scss/inc/_feedback.scss +0 -150
  213. package/src/scss/inc/_flex-grid.scss +0 -15
  214. package/src/scss/inc/_fonts.scss +0 -4
  215. package/src/scss/inc/_forms.scss +0 -827
  216. package/src/scss/inc/_functions.scss +0 -283
  217. package/src/scss/inc/_grid.scss +0 -66
  218. package/src/scss/inc/_jquery.nouislider.scss +0 -254
  219. package/src/scss/inc/_normalize.scss +0 -528
  220. package/src/scss/inc/_report.scss +0 -68
  221. package/src/scss/inc/_secondary-properties.scss +0 -89
  222. package/src/scss/inc/_select2.scss +0 -634
  223. package/src/scss/inc/_toolbars.scss +0 -155
  224. package/src/scss/inc/_tooltip.scss +0 -312
  225. package/src/scss/inc/_variables.scss +0 -21
  226. package/src/scss/inc/base/_highlight.scss +0 -5
  227. package/src/scss/inc/base/_list-style.scss +0 -59
  228. package/src/scss/inc/base/_svg.scss +0 -3
  229. package/src/scss/inc/base/_table.scss +0 -63
  230. package/src/scss/inc/fonts/_source-sans-pro.scss +0 -29
  231. package/src/scss/inc/fonts/_tao-icon-classes.scss +0 -226
  232. package/src/scss/inc/fonts/_tao-icon-def.scss +0 -12
  233. package/src/scss/inc/fonts/_tao-icon-vars.scss +0 -240
package/dist/feedback.js CHANGED
@@ -1,412 +1,406 @@
1
1
  define(['jquery', 'lodash', 'core/format', 'ui/component', 'util/wrapLongWords', 'util/encode', 'handlebars', 'i18n', 'lib/dompurify/purify'], function ($$1, _, format, component, wrapLongWords, encode, Handlebars, __, DOMPurify) { 'use strict';
2
2
 
3
- $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;
4
- _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;
5
- format = format && Object.prototype.hasOwnProperty.call(format, 'default') ? format['default'] : format;
6
- component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;
7
- wrapLongWords = wrapLongWords && Object.prototype.hasOwnProperty.call(wrapLongWords, 'default') ? wrapLongWords['default'] : wrapLongWords;
8
- encode = encode && Object.prototype.hasOwnProperty.call(encode, 'default') ? encode['default'] : encode;
9
- Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;
10
- __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;
11
- DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;
12
-
3
+ $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;
4
+ _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;
5
+ format = format && Object.prototype.hasOwnProperty.call(format, 'default') ? format['default'] : format;
6
+ component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;
7
+ wrapLongWords = wrapLongWords && Object.prototype.hasOwnProperty.call(wrapLongWords, 'default') ? wrapLongWords['default'] : wrapLongWords;
8
+ encode = encode && Object.prototype.hasOwnProperty.call(encode, 'default') ? encode['default'] : encode;
9
+ Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;
10
+ __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;
11
+ DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;
12
+
13
+ function _typeof(obj) {
14
+ "@babel/helpers - typeof";
15
+
16
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
17
+ return typeof obj;
18
+ } : function (obj) {
19
+ return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
20
+ }, _typeof(obj);
21
+ }
22
+
23
+ function Helpers0 (hb) {
24
+ //register a i18n helper
25
+ hb.registerHelper('__', function (key) {
26
+ return __(key);
27
+ });
13
28
  /**
14
- * This program is free software; you can redistribute it and/or
15
- * modify it under the terms of the GNU General Public License
16
- * as published by the Free Software Foundation; under version 2
17
- * of the License (non-upgradable).
18
- *
19
- * This program is distributed in the hope that it will be useful,
20
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
- * GNU General Public License for more details.
23
- *
24
- * You should have received a copy of the GNU General Public License
25
- * along with this program; if not, write to the Free Software
26
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
27
- *
28
- * Copyright (c) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
29
+ * Register dompurify helper
29
30
  *
31
+ * https://github.com/cure53/DOMPurify
32
+ * with config SAFE_FOR_TEMPLATES: true
33
+ * to make output safe for template systems
34
+ */
35
+
36
+ hb.registerHelper('dompurify', function (context) {
37
+ return DOMPurify.sanitize(context);
38
+ });
39
+ /**
40
+ * Register join helper
30
41
  *
42
+ * Example :
43
+ * var values = {a:v1, b:v2, c:v3};
44
+ * Using {{{join attributes '=' ' ' '"'}}} will return : a="v1" b="v2" c="v3"
45
+ * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*
31
46
  */
32
- function Helpers0 (hb) {
33
- //register a i18n helper
34
- hb.registerHelper('__', function (key) {
35
- return __(key);
36
- });
37
- /**
38
- * Register dompurify helper
39
- *
40
- * https://github.com/cure53/DOMPurify
41
- * with config SAFE_FOR_TEMPLATES: true
42
- * to make output safe for template systems
43
- */
44
47
 
45
- hb.registerHelper('dompurify', function (context) {
46
- return DOMPurify.sanitize(context);
47
- });
48
- /**
49
- * Register join helper
50
- *
51
- * Example :
52
- * var values = {a:v1, b:v2, c:v3};
53
- * Using {{{join attributes '=' ' ' '"'}}} will return : a="v1" b="v2" c="v3"
54
- * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*
55
- */
48
+ hb.registerHelper('join', function (arr, keyValueGlue, fragmentGlue, wrapper) {
49
+ var fragments = [];
50
+ keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;
51
+ fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';
52
+ wrapper = typeof wrapper === 'string' ? wrapper : '"';
56
53
 
57
- hb.registerHelper('join', function (arr, keyValueGlue, fragmentGlue, wrapper) {
58
- var fragments = [];
59
- keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;
60
- fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';
61
- wrapper = typeof wrapper === 'string' ? wrapper : '"';
62
-
63
- _.forIn(arr, function (value, key) {
64
- var fragment = '';
65
-
66
- if (value !== null || value !== undefined) {
67
- if (typeof value === 'boolean') {
68
- value = value ? 'true' : 'false';
69
- } else if (typeof value === 'object') {
70
- value = _.values(value).join(' ');
71
- }
72
- } else {
73
- value = '';
74
- }
54
+ _.forIn(arr, function (value, key) {
55
+ var fragment = '';
75
56
 
76
- if (keyValueGlue !== undefined) {
77
- fragment += key + keyValueGlue;
57
+ if (value !== null || value !== undefined) {
58
+ if (typeof value === 'boolean') {
59
+ value = value ? 'true' : 'false';
60
+ } else if (_typeof(value) === 'object') {
61
+ value = _.values(value).join(' ');
78
62
  }
63
+ } else {
64
+ value = '';
65
+ }
79
66
 
80
- fragment += wrapper + value + wrapper;
81
- fragments.push(fragment);
82
- });
83
-
84
- return fragments.join(fragmentGlue);
85
- }); //register a classic "for loop" helper
86
- //it also adds a local variable "i" as the index in each iteration loop
87
-
88
- hb.registerHelper('for', function (startIndex, stopIndex, increment, options) {
89
- var ret = '';
90
- startIndex = parseInt(startIndex);
91
- stopIndex = parseInt(stopIndex);
92
- increment = parseInt(increment);
93
-
94
- for (var i = startIndex; i < stopIndex; i += increment) {
95
- ret += options.fn(_.extend({}, this, {
96
- i: i
97
- }));
67
+ if (keyValueGlue !== undefined) {
68
+ fragment += key + keyValueGlue;
98
69
  }
99
70
 
100
- return ret;
71
+ fragment += wrapper + value + wrapper;
72
+ fragments.push(fragment);
101
73
  });
102
- hb.registerHelper('equal', function (var1, var2, options) {
103
- if (var1 == var2) {
104
- return options.fn(this);
105
- } else {
106
- return options.inverse(this);
107
- }
108
- }); // register a "get property" helper
109
- // it gets the named property from the provided context
110
74
 
111
- hb.registerHelper('property', function (name, context) {
112
- return context[name] || '';
113
- }); // register an 'includes' helper
114
- // it checks if value is in array
75
+ return fragments.join(fragmentGlue);
76
+ }); //register a classic "for loop" helper
77
+ //it also adds a local variable "i" as the index in each iteration loop
115
78
 
116
- hb.registerHelper('includes', function (haystack, needle, options) {
117
- if (_.contains(haystack, needle)) {
118
- return options.fn(this);
119
- }
120
- });
121
- }
79
+ hb.registerHelper('for', function (startIndex, stopIndex, increment, options) {
80
+ var ret = '';
81
+ startIndex = parseInt(startIndex);
82
+ stopIndex = parseInt(stopIndex);
83
+ increment = parseInt(increment);
122
84
 
123
- if (!Helpers0.__initialized) {
124
- Helpers0(Handlebars);
125
- Helpers0.__initialized = true;
126
- }
127
- var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
128
- this.compilerInfo = [4,'>= 1.0.0'];
129
- helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
130
- var buffer = "", stack1, helper, options, functionType="function", escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;
131
-
132
- function program1(depth0,data) {
133
-
134
-
135
- return "popup";
85
+ for (var i = startIndex; i < stopIndex; i += increment) {
86
+ ret += options.fn(_.extend({}, this, {
87
+ i: i
88
+ }));
136
89
  }
137
90
 
138
- buffer += "<div id=\"";
139
- if (helper = helpers.id) { stack1 = helper.call(depth0, {hash:{},data:data}); }
140
- else { helper = (depth0 && depth0.id); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
141
- buffer += escapeExpression(stack1)
142
- + "\" class=\"feedback feedback-";
143
- if (helper = helpers.level) { stack1 = helper.call(depth0, {hash:{},data:data}); }
144
- else { helper = (depth0 && depth0.level); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
145
- buffer += escapeExpression(stack1)
146
- + " ";
147
- stack1 = helpers['if'].call(depth0, (depth0 && depth0.popup), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
148
- if(stack1 || stack1 === 0) { buffer += stack1; }
149
- buffer += "\" role=\"alert\" >\n <span class=\"icon-";
150
- if (helper = helpers.level) { stack1 = helper.call(depth0, {hash:{},data:data}); }
151
- else { helper = (depth0 && depth0.level); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
152
- buffer += escapeExpression(stack1)
153
- + "\"></span>\n <div>\n ";
154
- stack1 = (helper = helpers.dompurify || (depth0 && depth0.dompurify),options={hash:{},data:data},helper ? helper.call(depth0, (depth0 && depth0.msg), options) : helperMissing.call(depth0, "dompurify", (depth0 && depth0.msg), options));
155
- if(stack1 || stack1 === 0) { buffer += stack1; }
156
- buffer += "\n </div>\n <span title=\""
157
- + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, "Close message", options) : helperMissing.call(depth0, "__", "Close message", options)))
158
- + "\" class=\"icon-close\" data-close=\":parent .feedback\" role=\"button\" tabindex=\"0\"></span>\n</div>\n";
159
- return buffer;
160
- });
161
- function tpl(data, options, asString) {
162
- var html = Template(data, options);
163
- return (asString || true) ? html : $(html);
164
- }
91
+ return ret;
92
+ });
93
+ hb.registerHelper('equal', function (var1, var2, options) {
94
+ if (var1 == var2) {
95
+ return options.fn(this);
96
+ } else {
97
+ return options.inverse(this);
98
+ }
99
+ }); // register a "get property" helper
100
+ // it gets the named property from the provided context
165
101
 
166
- /*
167
- * This program is free software; you can redistribute it and/or
168
- * modify it under the terms of the GNU General Public License
169
- * as published by the Free Software Foundation; under version 2
170
- * of the License (non-upgradable).
171
- *
172
- * This program is distributed in the hope that it will be useful,
173
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
174
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
175
- * GNU General Public License for more details.
176
- *
177
- * You should have received a copy of the GNU General Public License
178
- * along with this program; if not, write to the Free Software
179
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
180
- *
181
- * Copyright (c) 2015-2020 (original work) Open Assessment Technologies SA ;
182
- *
183
- */
102
+ hb.registerHelper('property', function (name, context) {
103
+ return context[name] || '';
104
+ }); // register an 'includes' helper
105
+ // it checks if value is in array
184
106
 
185
- var defaultContainerSelector = '#feedback-box'; //keep a reference to ALL alive feedback
107
+ hb.registerHelper('includes', function (haystack, needle, options) {
108
+ if (_.contains(haystack, needle)) {
109
+ return options.fn(this);
110
+ }
111
+ });
112
+ }
113
+
114
+ if (!Helpers0.__initialized) {
115
+ Helpers0(Handlebars);
116
+ Helpers0.__initialized = true;
117
+ }
118
+ var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
119
+ this.compilerInfo = [4,'>= 1.0.0'];
120
+ helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
121
+ var buffer = "", stack1, helper, options, functionType="function", escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;
122
+
123
+ function program1(depth0,data) {
124
+
125
+
126
+ return "popup";
127
+ }
186
128
 
187
- var currents = []; //available levels
129
+ buffer += "<div id=\"";
130
+ if (helper = helpers.id) { stack1 = helper.call(depth0, {hash:{},data:data}); }
131
+ else { helper = (depth0 && depth0.id); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
132
+ buffer += escapeExpression(stack1)
133
+ + "\" class=\"feedback feedback-";
134
+ if (helper = helpers.level) { stack1 = helper.call(depth0, {hash:{},data:data}); }
135
+ else { helper = (depth0 && depth0.level); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
136
+ buffer += escapeExpression(stack1)
137
+ + " ";
138
+ stack1 = helpers['if'].call(depth0, (depth0 && depth0.popup), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
139
+ if(stack1 || stack1 === 0) { buffer += stack1; }
140
+ buffer += "\" role=\"alert\" >\n <span class=\"icon-";
141
+ if (helper = helpers.level) { stack1 = helper.call(depth0, {hash:{},data:data}); }
142
+ else { helper = (depth0 && depth0.level); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
143
+ buffer += escapeExpression(stack1)
144
+ + "\"></span>\n <div>\n ";
145
+ stack1 = (helper = helpers.dompurify || (depth0 && depth0.dompurify),options={hash:{},data:data},helper ? helper.call(depth0, (depth0 && depth0.msg), options) : helperMissing.call(depth0, "dompurify", (depth0 && depth0.msg), options));
146
+ if(stack1 || stack1 === 0) { buffer += stack1; }
147
+ buffer += "\n </div>\n <span title=\""
148
+ + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, "Close message", options) : helperMissing.call(depth0, "__", "Close message", options)))
149
+ + "\" class=\"icon-close\" data-close=\":parent .feedback\" role=\"button\" tabindex=\"0\"></span>\n</div>\n";
150
+ return buffer;
151
+ });
152
+ function tpl(data, options, asString) {
153
+ var html = Template(data, options);
154
+ return (asString || true) ? html : $(html);
155
+ }
156
+
157
+ /*
158
+ * This program is free software; you can redistribute it and/or
159
+ * modify it under the terms of the GNU General Public License
160
+ * as published by the Free Software Foundation; under version 2
161
+ * of the License (non-upgradable).
162
+ *
163
+ * This program is distributed in the hope that it will be useful,
164
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
165
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
166
+ * GNU General Public License for more details.
167
+ *
168
+ * You should have received a copy of the GNU General Public License
169
+ * along with this program; if not, write to the Free Software
170
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
171
+ *
172
+ * Copyright (c) 2015-2020 (original work) Open Assessment Technologies SA ;
173
+ *
174
+ */
175
+
176
+ var defaultContainerSelector = '#feedback-box'; //keep a reference to ALL alive feedback
177
+
178
+ var currents = []; //available levels
179
+
180
+ var levels = ['info', 'success', 'warning', 'danger', 'error'];
181
+ var defaultOptions = {
182
+ timeout: {
183
+ info: 2000,
184
+ success: 2000,
185
+ warning: 4000,
186
+ danger: 4000,
187
+ error: 8000
188
+ },
189
+ // Note: value depends on font, font-weight and such.
190
+ // 40 is pretty good in the current setup but will
191
+ // never be exact with a non-proportional font.
192
+ wrapLongWordsAfter: 40,
193
+ //by default HTML content is encoded
194
+ encodeHtml: true,
195
+ //change the display (absolute or in the flow)
196
+ popup: true
197
+ };
198
+ /**
199
+ * Creates a feedback object.
200
+ *
201
+ * @exports ui/feedback
202
+ * @param {jQUeryElement} [$container] - only to specify another container
203
+ * @param {Object} [config] - change the config
204
+ * @param {Object|Number} [config.timeout] - either one for every level or per level timeout in ms
205
+ * @param {Number} [config.wrapLongWordsAfter] - add a space in the middle of very long word to enable wrap lines
206
+ * @param {Boolean} [config.encodeHtml] - weither the message is html encoded
207
+ * @param {Boolean} [config.popup] - displays the message as a popup or in the flow
208
+ * @returns {feedback} the feedback object
209
+ * @throws {TypeError} without a container
210
+ */
211
+
212
+ var feedbackFactory = function feedbackFactory($container, config) {
213
+ var feedback;
214
+ var codeEnter = 13;
215
+ var codeSpace = 32;
216
+
217
+ if (!$container || !$container.length) {
218
+ $container = $$1(defaultContainerSelector);
219
+ }
188
220
 
189
- var levels = ['info', 'success', 'warning', 'danger', 'error'];
190
- var defaultOptions = {
191
- timeout: {
192
- info: 2000,
193
- success: 2000,
194
- warning: 4000,
195
- danger: 4000,
196
- error: 8000
197
- },
198
- // Note: value depends on font, font-weight and such.
199
- // 40 is pretty good in the current setup but will
200
- // never be exact with a non-proportional font.
201
- wrapLongWordsAfter: 40,
202
- //by default HTML content is encoded
203
- encodeHtml: true,
204
- //change the display (absolute or in the flow)
205
- popup: true
206
- };
221
+ if (!$container.length) {
222
+ throw new TypeError('The feedback needs to belong to an existing container');
223
+ }
207
224
  /**
208
- * Creates a feedback object.
209
- *
210
- * @exports ui/feedback
211
- * @param {jQUeryElement} [$container] - only to specify another container
212
- * @param {Object} [config] - change the config
213
- * @param {Object|Number} [config.timeout] - either one for every level or per level timeout in ms
214
- * @param {Number} [config.wrapLongWordsAfter] - add a space in the middle of very long word to enable wrap lines
215
- * @param {Boolean} [config.encodeHtml] - weither the message is html encoded
216
- * @param {Boolean} [config.popup] - displays the message as a popup or in the flow
217
- * @returns {feedback} the feedback object
218
- * @throws {TypeError} without a container
225
+ * @typedef {Object} feedback - the feedback component
219
226
  */
220
227
 
221
- var feedbackFactory = function feedbackFactory($container, config) {
222
- var feedback;
223
- const codeEnter = 13;
224
- const codeSpace = 32;
225
228
 
226
- if (!$container || !$container.length) {
227
- $container = $$1(defaultContainerSelector);
228
- }
229
-
230
- if (!$container.length) {
231
- throw new TypeError('The feedback needs to belong to an existing container');
232
- }
229
+ feedback = component({
233
230
  /**
234
- * @typedef {Object} feedback - the feedback component
231
+ * Creates a message, not displayed.
232
+ * @param {String} [level = 'info'] - the message level
233
+ * @param {String} msg - the message to display
234
+ * @param {Array} [params] - parameters for the message format (%s,%d,%j)
235
+ * @param {Object} [options] - specify the config
236
+ * @returns {feedback} chains
235
237
  */
238
+ message: function message(level, msg, params, options) {
239
+ var displayedMessage = msg;
236
240
 
241
+ if (!level || !_.contains(levels, level)) {
242
+ level = 'info';
243
+ } //parameterized messages
237
244
 
238
- feedback = component({
239
- /**
240
- * Creates a message, not displayed.
241
- * @param {String} [level = 'info'] - the message level
242
- * @param {String} msg - the message to display
243
- * @param {Array} [params] - parameters for the message format (%s,%d,%j)
244
- * @param {Object} [options] - specify the config
245
- * @returns {feedback} chains
246
- */
247
- message: function message(level, msg, params, options) {
248
- var displayedMessage = msg;
249
245
 
250
- if (!level || !_.contains(levels, level)) {
251
- level = 'info';
252
- } //parameterized messages
246
+ if (_.isPlainObject(params)) {
247
+ options = params;
248
+ params = [];
249
+ }
253
250
 
251
+ this.config = _.defaults(options || {}, this.config);
252
+ this.config.level = level; // encode plain text string to html
254
253
 
255
- if (_.isPlainObject(params)) {
256
- options = params;
257
- params = [];
258
- }
254
+ if (this.config.encodeHtml) {
255
+ displayedMessage = encode.html(displayedMessage);
256
+ } // wrap long words
259
257
 
260
- this.config = _.defaults(options || {}, this.config);
261
- this.config.level = level; // encode plain text string to html
262
258
 
263
- if (this.config.encodeHtml) {
264
- displayedMessage = encode.html(displayedMessage);
265
- } // wrap long words
259
+ if (this.config.wrapLongWordsAfter) {
260
+ displayedMessage = wrapLongWords(displayedMessage, this.config.wrapLongWordsAfter);
261
+ } //apply strf like format parameters
266
262
 
267
263
 
268
- if (this.config.wrapLongWordsAfter) {
269
- displayedMessage = wrapLongWords(displayedMessage, this.config.wrapLongWordsAfter);
270
- } //apply strf like format parameters
264
+ if (_.isArray(params) && params.length) {
265
+ displayedMessage = format.apply(format, [displayedMessage].concat(params));
266
+ }
271
267
 
268
+ this.config.msg = displayedMessage;
269
+ return this;
270
+ },
272
271
 
273
- if (_.isArray(params) && params.length) {
274
- displayedMessage = format.apply(format, [displayedMessage].concat(params));
275
- }
272
+ /**
273
+ * Opens an info message
274
+ * @param {String} msg - the message to display
275
+ * @param {Array} [params] - parameters for the message format (%s,%d,%j)
276
+ * @param {Object} [options] - specify the config
277
+ * @returns {feedback} chains
278
+ */
279
+ info: function info(msg, params, options) {
280
+ return this.message('info', msg, params, options).open();
281
+ },
276
282
 
277
- this.config.msg = displayedMessage;
278
- return this;
279
- },
280
-
281
- /**
282
- * Opens an info message
283
- * @param {String} msg - the message to display
284
- * @param {Array} [params] - parameters for the message format (%s,%d,%j)
285
- * @param {Object} [options] - specify the config
286
- * @returns {feedback} chains
287
- */
288
- info: function info(msg, params, options) {
289
- return this.message('info', msg, params, options).open();
290
- },
291
-
292
- /**
293
- * Opens an success message
294
- * @param {String} msg - the message to display
295
- * @param {Array} [params] - parameters for the message format (%s,%d,%j)
296
- * @param {Object} [options] - specify the config
297
- * @returns {feedback} chains
298
- */
299
- success: function success(msg, params, options) {
300
- return this.message('success', msg, params, options).open();
301
- },
302
-
303
- /**
304
- * Opens an warning message
305
- * @param {String} msg - the message to display
306
- * @param {Array} [params] - parameters for the message format (%s,%d,%j)
307
- * @param {Object} [options] - specify the config
308
- * @returns {feedback} chains
309
- */
310
- warning: function warning(msg, params, options) {
311
- return this.message('warning', msg, params, options).open();
312
- },
313
-
314
- /**
315
- * Opens an danger message
316
- * @param {String} msg - the message to display
317
- * @param {Array} [params] - parameters for the message format (%s,%d,%j)
318
- * @param {Object} [options] - specify the config
319
- * @returns {feedback} chains
320
- */
321
- danger: function danger(msg, params, options) {
322
- return this.message('danger', msg, params, options).open();
323
- },
324
-
325
- /**
326
- * Opens an error message
327
- * @param {String} msg - the message to display
328
- * @param {Array} [params] - parameters for the message format (%s,%d,%j)
329
- * @param {Object} [options] - specify the config
330
- * @returns {feedback} chains
331
- */
332
- error: function error(msg, params, options) {
333
- return this.message('error', msg, params, options).open();
334
- },
335
-
336
- /**
337
- * Opens the message (and close previous one)
338
- * ! Method kept for backward compat with previous version !
339
- * @returns {feedback} chains
340
- */
341
- open: function open() {
342
- //close others
343
- _(currents).reject(this).invoke('close'); //and display
344
-
345
-
346
- return this.display();
347
- },
348
-
349
- /**
350
- * Closes the message
351
- * ! Method kept for backward compat with previous version !
352
- * @returns {feedback} chains
353
- */
354
- close: function close() {
355
- if (this.is('rendered')) {
356
- this.destroy();
357
- }
358
- },
359
-
360
- /**
361
- * Displays the message (does the render)
362
- * ! Method kept for backward compat with previous version !
363
- * @returns {feedback} chains
364
- */
365
- display: function display() {
366
- if (this.is('rendered')) {
367
- this.show();
368
- } else {
369
- this.render($container);
370
- }
283
+ /**
284
+ * Opens an success message
285
+ * @param {String} msg - the message to display
286
+ * @param {Array} [params] - parameters for the message format (%s,%d,%j)
287
+ * @param {Object} [options] - specify the config
288
+ * @returns {feedback} chains
289
+ */
290
+ success: function success(msg, params, options) {
291
+ return this.message('success', msg, params, options).open();
292
+ },
371
293
 
372
- return this;
373
- }
374
- }, defaultOptions);
375
- return feedback.setTemplate(tpl).on('init', function () {
376
- this.config.id = 'feedback-' + (currents.length + 1);
377
- currents.push(this); //for backward compat
378
-
379
- $container.trigger('create.feedback');
380
- }).on('render', function () {
381
- var self = this;
382
- var $component = this.getElement();
383
- var $closer = $$1('.icon-close', $component);
384
- var timeout = _.isPlainObject(this.config.timeout) ? this.config.timeout[this.config.level] : this.config.timeout;
385
- $closer.off('click').on('click', e => {
386
- e.preventDefault();
294
+ /**
295
+ * Opens an warning message
296
+ * @param {String} msg - the message to display
297
+ * @param {Array} [params] - parameters for the message format (%s,%d,%j)
298
+ * @param {Object} [options] - specify the config
299
+ * @returns {feedback} chains
300
+ */
301
+ warning: function warning(msg, params, options) {
302
+ return this.message('warning', msg, params, options).open();
303
+ },
304
+
305
+ /**
306
+ * Opens an danger message
307
+ * @param {String} msg - the message to display
308
+ * @param {Array} [params] - parameters for the message format (%s,%d,%j)
309
+ * @param {Object} [options] - specify the config
310
+ * @returns {feedback} chains
311
+ */
312
+ danger: function danger(msg, params, options) {
313
+ return this.message('danger', msg, params, options).open();
314
+ },
315
+
316
+ /**
317
+ * Opens an error message
318
+ * @param {String} msg - the message to display
319
+ * @param {Array} [params] - parameters for the message format (%s,%d,%j)
320
+ * @param {Object} [options] - specify the config
321
+ * @returns {feedback} chains
322
+ */
323
+ error: function error(msg, params, options) {
324
+ return this.message('error', msg, params, options).open();
325
+ },
326
+
327
+ /**
328
+ * Opens the message (and close previous one)
329
+ * ! Method kept for backward compat with previous version !
330
+ * @returns {feedback} chains
331
+ */
332
+ open: function open() {
333
+ //close others
334
+ _(currents).reject(this).invoke('close'); //and display
335
+
336
+
337
+ return this.display();
338
+ },
339
+
340
+ /**
341
+ * Closes the message
342
+ * ! Method kept for backward compat with previous version !
343
+ * @returns {feedback} chains
344
+ */
345
+ close: function close() {
346
+ if (this.is('rendered')) {
387
347
  this.destroy();
388
- }).off('keyup').on('keyup', e => {
389
- if ([codeEnter, codeSpace].indexOf(e.which) !== -1) {
390
- this.destroy();
391
- }
392
- });
348
+ }
349
+ },
350
+
351
+ /**
352
+ * Displays the message (does the render)
353
+ * ! Method kept for backward compat with previous version !
354
+ * @returns {feedback} chains
355
+ */
356
+ display: function display() {
357
+ if (this.is('rendered')) {
358
+ this.show();
359
+ } else {
360
+ this.render($container);
361
+ }
362
+
363
+ return this;
364
+ }
365
+ }, defaultOptions);
366
+ return feedback.setTemplate(tpl).on('init', function () {
367
+ this.config.id = 'feedback-' + (currents.length + 1);
368
+ currents.push(this); //for backward compat
369
+
370
+ $container.trigger('create.feedback');
371
+ }).on('render', function () {
372
+ var _this = this;
373
+
374
+ var self = this;
375
+ var $component = this.getElement();
376
+ var $closer = $$1('.icon-close', $component);
377
+ var timeout = _.isPlainObject(this.config.timeout) ? this.config.timeout[this.config.level] : this.config.timeout;
378
+ $closer.off('click').on('click', function (e) {
379
+ e.preventDefault();
380
+
381
+ _this.destroy();
382
+ }).off('keyup').on('keyup', function (e) {
383
+ if ([codeEnter, codeSpace].indexOf(e.which) !== -1) {
384
+ _this.destroy();
385
+ }
386
+ });
393
387
 
394
- if (_.isNumber(timeout) && timeout > 0) {
395
- _.delay(function () {
396
- self.close();
397
- }, timeout);
398
- } //for backward compat
388
+ if (_.isNumber(timeout) && timeout > 0) {
389
+ _.delay(function () {
390
+ self.close();
391
+ }, timeout);
392
+ } //for backward compat
399
393
 
400
394
 
401
- $container.trigger('display.feedback');
402
- }).on('destroy', function () {
403
- //for backward compat
404
- $container.trigger('close.feedback');
395
+ $container.trigger('display.feedback');
396
+ }).on('destroy', function () {
397
+ //for backward compat
398
+ $container.trigger('close.feedback');
405
399
 
406
- _.remove(currents, this);
407
- }).init(config);
408
- };
400
+ _.remove(currents, this);
401
+ }).init(config);
402
+ };
409
403
 
410
- return feedbackFactory;
404
+ return feedbackFactory;
411
405
 
412
406
  });