@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.
- package/dist/actionbar.js +386 -395
- package/dist/adder.js +21 -19
- package/dist/animable/absorbable/absorbable.js +204 -213
- package/dist/animable/absorbable/css/absorb.css +1 -0
- package/dist/animable/absorbable/css/absorb.css.map +1 -1
- package/dist/animable/pulsable/pulsable.js +168 -177
- package/dist/autocomplete/css/autocomplete.css +1 -0
- package/dist/autocomplete/css/autocomplete.css.map +1 -1
- package/dist/autocomplete.js +68 -66
- package/dist/badge/badge.js +188 -197
- package/dist/badge/css/badge.css +1 -0
- package/dist/badge/css/badge.css.map +1 -1
- package/dist/breadcrumbs.js +275 -284
- package/dist/btngrouper.js +5 -5
- package/dist/bulkActionPopup.js +490 -495
- package/dist/button.js +283 -291
- package/dist/cascadingComboBox.js +249 -258
- package/dist/ckeditor/ckConfigurator.js +26 -19
- package/dist/ckeditor/dtdHandler.js +11 -9
- package/dist/class/selector.js +441 -450
- package/dist/component/resizable.js +1 -1
- package/dist/component/windowed.js +285 -294
- package/dist/component.js +419 -428
- package/dist/contextualPopup.js +417 -426
- package/dist/dashboard.js +300 -309
- package/dist/datalist.js +753 -762
- package/dist/datatable/filterStrategy/multiple.js +1 -1
- package/dist/datatable/filterStrategy/single.js +1 -1
- package/dist/datatable.js +1527 -1550
- package/dist/dateRange/dateRange.js +393 -402
- package/dist/datetime/picker.js +665 -672
- package/dist/deleter.js +368 -377
- package/dist/destination/selector.js +286 -295
- package/dist/dialog/alert.js +3 -3
- package/dist/dialog/confirm.js +1 -1
- package/dist/dialog/confirmDelete.js +216 -225
- package/dist/dialog.js +650 -654
- package/dist/disabler.js +8 -8
- package/dist/documentViewer/providers/pdfViewer/fallback/viewer.js +166 -175
- package/dist/documentViewer/providers/pdfViewer/pdfjs/findBar.js +518 -527
- package/dist/documentViewer/providers/pdfViewer/pdfjs/pageView.js +380 -389
- package/dist/documentViewer/providers/pdfViewer/pdfjs/searchEngine.js +539 -548
- package/dist/documentViewer/providers/pdfViewer/pdfjs/viewer.js +369 -378
- package/dist/documentViewer/providers/pdfViewer.js +184 -193
- package/dist/documentViewer.js +292 -301
- package/dist/dropdown.js +383 -392
- package/dist/durationer.js +5 -5
- package/dist/dynamicComponent.js +597 -598
- package/dist/feedback.js +356 -362
- package/dist/figure/FigureStateActive.js +117 -108
- package/dist/filesender.js +2 -2
- package/dist/filter.js +230 -239
- package/dist/form/dropdownForm.js +355 -357
- package/dist/form/form.js +919 -690
- package/dist/form/simpleForm.js +1 -1
- package/dist/form/validator/renderer.js +233 -235
- package/dist/form/validator/validator.js +257 -189
- package/dist/form/widget/definitions.js +1 -1
- package/dist/form/widget/providers/checkBox.js +254 -259
- package/dist/form/widget/providers/comboBox.js +187 -192
- package/dist/form/widget/providers/default.js +8 -9
- package/dist/form/widget/providers/hidden.js +170 -179
- package/dist/form/widget/providers/hiddenBox.js +262 -267
- package/dist/form/widget/providers/radioBox.js +216 -225
- package/dist/form/widget/providers/textArea.js +187 -196
- package/dist/form/widget/providers/textBox.js +2 -3
- package/dist/form/widget/widget.js +473 -475
- package/dist/formValidator/formValidator.js +1 -1
- package/dist/formValidator/highlighters/message.js +1 -1
- package/dist/generis/form/form.js +314 -323
- package/dist/generis/validator/validator.js +209 -218
- package/dist/generis/widget/checkBox/checkBox.js +218 -227
- package/dist/generis/widget/comboBox/comboBox.js +179 -188
- package/dist/generis/widget/hiddenBox/hiddenBox.js +220 -229
- package/dist/generis/widget/textBox/textBox.js +169 -178
- package/dist/generis/widget/widget.js +246 -255
- package/dist/groupedComboBox.js +222 -231
- package/dist/groupvalidator.js +2 -2
- package/dist/highlighter.js +967 -958
- package/dist/image/ImgStateActive/helper.js +7 -5
- package/dist/image/ImgStateActive/initHelper.js +49 -43
- package/dist/image/ImgStateActive/initMediaEditor.js +24 -20
- package/dist/image/ImgStateActive/mediaSizer.js +14 -12
- package/dist/image/ImgStateActive.js +72 -70
- package/dist/incrementer.js +6 -6
- package/dist/inplacer.js +6 -6
- package/dist/itemButtonList/css/item-button-list.css +1 -0
- package/dist/itemButtonList/css/item-button-list.css.map +1 -1
- package/dist/itemButtonList.js +439 -435
- package/dist/keyNavigation/navigableDomElement.js +51 -38
- package/dist/keyNavigation/navigator.js +85 -70
- package/dist/listbox.js +460 -469
- package/dist/liststyler.js +8 -8
- package/dist/loadingButton/loadingButton.js +209 -218
- package/dist/lock.js +476 -485
- package/dist/login/login.js +475 -484
- package/dist/maths/calculator/basicCalculator.js +235 -244
- package/dist/maths/calculator/calculatorComponent.js +3 -3
- package/dist/maths/calculator/core/board.js +772 -781
- package/dist/maths/calculator/core/expression.js +476 -485
- package/dist/maths/calculator/core/labels.js +228 -237
- package/dist/maths/calculator/core/tokenizer.js +1 -1
- package/dist/maths/calculator/core/tokens.js +163 -170
- package/dist/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +244 -253
- package/dist/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +279 -288
- package/dist/maths/calculator/scientificCalculator.js +327 -336
- package/dist/mediaEditor/mediaEditorComponent.js +238 -245
- package/dist/mediaEditor/plugins/mediaAlignment/helper.js +7 -7
- package/dist/mediaEditor/plugins/mediaAlignment/mediaAlignmentComponent.js +229 -235
- package/dist/mediaEditor/plugins/mediaDimension/mediaDimensionComponent.js +580 -589
- package/dist/mediaplayer/players/html5.js +666 -675
- package/dist/mediaplayer/players/youtube.js +419 -424
- package/dist/mediaplayer/support.js +11 -10
- package/dist/mediaplayer/utils/reminder.js +14 -13
- package/dist/mediaplayer/utils/timeObserver.js +10 -11
- package/dist/mediaplayer/youtubeManager.js +164 -145
- package/dist/mediaplayer.js +1565 -1520
- package/dist/mediasizer.js +669 -678
- package/dist/modal.js +10 -17
- package/dist/pageSizeSelector.js +219 -228
- package/dist/pagination/providers/pages.js +280 -289
- package/dist/pagination/providers/simple.js +192 -201
- package/dist/previewer.js +30 -30
- package/dist/progressbar.js +4 -4
- package/dist/report.js +347 -356
- package/dist/resource/filters.js +271 -280
- package/dist/resource/list.js +1264 -1273
- package/dist/resource/selector.js +865 -874
- package/dist/resource/tree.js +1483 -1492
- package/dist/resourcemgr/fileBrowser.js +564 -569
- package/dist/resourcemgr/filePreview.js +16 -16
- package/dist/resourcemgr/fileSelector.js +515 -524
- package/dist/resourcemgr/util/updatePermissions.js +2 -2
- package/dist/resourcemgr.js +306 -315
- package/dist/searchModal/advancedSearch.js +796 -767
- package/dist/searchModal.js +114 -91
- package/dist/switch/switch.js +298 -307
- package/dist/tabs.js +598 -575
- package/dist/taskQueue/status.js +312 -321
- package/dist/taskQueue/table.js +375 -384
- package/dist/taskQueue/taskQueueModel.js +488 -472
- package/dist/taskQueueButton/taskable.js +264 -273
- package/dist/taskQueueButton/treeButton.js +189 -198
- package/dist/themeLoader.js +24 -23
- package/dist/themes.js +1 -1
- package/dist/toggler.js +3 -3
- package/dist/tooltip.js +295 -304
- package/dist/transformer.js +2 -2
- package/dist/tristateCheckboxGroup.js +311 -320
- package/dist/uploader.js +687 -696
- package/dist/validator/Report.js +1 -1
- package/dist/validator/Validator.js +3 -3
- package/dist/validator/validators.js +9 -9
- package/dist/validator.js +240 -230
- package/dist/waitForMedia.js +1 -1
- package/package.json +3 -3
- package/src/animable/absorbable/css/absorb.css +1 -0
- package/src/animable/absorbable/css/absorb.css.map +1 -1
- package/src/autocomplete/css/autocomplete.css +1 -0
- package/src/autocomplete/css/autocomplete.css.map +1 -1
- package/src/badge/css/badge.css +1 -0
- package/src/badge/css/badge.css.map +1 -1
- package/src/ckeditor/ckConfigurator.js +4 -0
- package/src/itemButtonList/css/item-button-list.css +1 -0
- package/src/itemButtonList/css/item-button-list.css.map +1 -1
- package/src/.DS_Store +0 -0
- package/src/css/basic.css +0 -7826
- package/src/css/basic.css.map +0 -1
- package/src/css/ckeditor/skins/tao/css/dialog.css +0 -950
- package/src/css/ckeditor/skins/tao/css/dialog.css.map +0 -1
- package/src/css/ckeditor/skins/tao/css/editor.css +0 -1850
- package/src/css/ckeditor/skins/tao/css/editor.css.map +0 -1
- package/src/scss/.DS_Store +0 -0
- package/src/scss/basic.scss +0 -16
- package/src/scss/ckeditor/skins/tao/scss/dialog.scss +0 -763
- package/src/scss/ckeditor/skins/tao/scss/editor.scss +0 -111
- package/src/scss/ckeditor/skins/tao/scss/inc/_ck-icons.scss +0 -59
- package/src/scss/ckeditor/skins/tao/scss/inc/_colorpanel.scss +0 -118
- package/src/scss/ckeditor/skins/tao/scss/inc/_elementspath.scss +0 -69
- package/src/scss/ckeditor/skins/tao/scss/inc/_mainui.scss +0 -194
- package/src/scss/ckeditor/skins/tao/scss/inc/_menu.scss +0 -181
- package/src/scss/ckeditor/skins/tao/scss/inc/_panel.scss +0 -200
- package/src/scss/ckeditor/skins/tao/scss/inc/_presets.scss +0 -32
- package/src/scss/ckeditor/skins/tao/scss/inc/_reset.scss +0 -101
- package/src/scss/ckeditor/skins/tao/scss/inc/_richcombo.scss +0 -213
- package/src/scss/ckeditor/skins/tao/scss/inc/_tao.scss +0 -59
- package/src/scss/ckeditor/skins/tao/scss/inc/_toolbar.scss +0 -301
- package/src/scss/font/source-sans-pro/source-sans-pro-italic.eot +0 -0
- package/src/scss/font/source-sans-pro/source-sans-pro-italic.eot.b64 +0 -1
- package/src/scss/font/source-sans-pro/source-sans-pro-italic.woff +0 -0
- package/src/scss/font/source-sans-pro/source-sans-pro-italic.woff.b64 +0 -1
- package/src/scss/font/source-sans-pro/source-sans-pro-regular.eot +0 -0
- package/src/scss/font/source-sans-pro/source-sans-pro-regular.eot.b64 +0 -1
- package/src/scss/font/source-sans-pro/source-sans-pro-regular.woff +0 -0
- package/src/scss/font/source-sans-pro/source-sans-pro-regular.woff.b64 +0 -1
- package/src/scss/font/source-sans-pro/source-sans-pro-semibold-italic.eot +0 -0
- package/src/scss/font/source-sans-pro/source-sans-pro-semibold-italic.eot.b64 +0 -1
- package/src/scss/font/source-sans-pro/source-sans-pro-semibold-italic.woff +0 -0
- package/src/scss/font/source-sans-pro/source-sans-pro-semibold-italic.woff.b64 +0 -1
- package/src/scss/font/source-sans-pro/source-sans-pro-semibold.eot +0 -0
- package/src/scss/font/source-sans-pro/source-sans-pro-semibold.eot.b64 +0 -1
- package/src/scss/font/source-sans-pro/source-sans-pro-semibold.woff +0 -0
- package/src/scss/font/source-sans-pro/source-sans-pro-semibold.woff.b64 +0 -1
- package/src/scss/font/tao/tao.eot +0 -0
- package/src/scss/font/tao/tao.svg +0 -235
- package/src/scss/font/tao/tao.ttf +0 -0
- package/src/scss/font/tao/tao.woff +0 -0
- package/src/scss/inc/_base.scss +0 -496
- package/src/scss/inc/_bootstrap.scss +0 -6
- package/src/scss/inc/_buttons.scss +0 -114
- package/src/scss/inc/_colors.scss +0 -88
- package/src/scss/inc/_feedback.scss +0 -150
- package/src/scss/inc/_flex-grid.scss +0 -15
- package/src/scss/inc/_fonts.scss +0 -4
- package/src/scss/inc/_forms.scss +0 -827
- package/src/scss/inc/_functions.scss +0 -283
- package/src/scss/inc/_grid.scss +0 -66
- package/src/scss/inc/_jquery.nouislider.scss +0 -254
- package/src/scss/inc/_normalize.scss +0 -528
- package/src/scss/inc/_report.scss +0 -68
- package/src/scss/inc/_secondary-properties.scss +0 -89
- package/src/scss/inc/_select2.scss +0 -634
- package/src/scss/inc/_toolbars.scss +0 -155
- package/src/scss/inc/_tooltip.scss +0 -312
- package/src/scss/inc/_variables.scss +0 -21
- package/src/scss/inc/base/_highlight.scss +0 -5
- package/src/scss/inc/base/_list-style.scss +0 -59
- package/src/scss/inc/base/_svg.scss +0 -3
- package/src/scss/inc/base/_table.scss +0 -63
- package/src/scss/inc/fonts/_source-sans-pro.scss +0 -29
- package/src/scss/inc/fonts/_tao-icon-classes.scss +0 -226
- package/src/scss/inc/fonts/_tao-icon-def.scss +0 -12
- package/src/scss/inc/fonts/_tao-icon-vars.scss +0 -240
|
@@ -1,296 +1,287 @@
|
|
|
1
1
|
define(['jquery', 'lodash', 'i18n', 'ui/component', 'handlebars', 'lib/dompurify/purify', 'select2'], function ($$1, _, __, component, Handlebars, DOMPurify, select2) { 'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
$$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;
|
|
4
|
+
_ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;
|
|
5
|
+
__ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;
|
|
6
|
+
component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;
|
|
7
|
+
Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;
|
|
8
|
+
DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;
|
|
9
|
+
|
|
10
|
+
function _typeof(obj) {
|
|
11
|
+
"@babel/helpers - typeof";
|
|
12
|
+
|
|
13
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
|
|
14
|
+
return typeof obj;
|
|
15
|
+
} : function (obj) {
|
|
16
|
+
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
17
|
+
}, _typeof(obj);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function Helpers0 (hb) {
|
|
21
|
+
//register a i18n helper
|
|
22
|
+
hb.registerHelper('__', function (key) {
|
|
23
|
+
return __(key);
|
|
24
|
+
});
|
|
10
25
|
/**
|
|
11
|
-
*
|
|
12
|
-
* modify it under the terms of the GNU General Public License
|
|
13
|
-
* as published by the Free Software Foundation; under version 2
|
|
14
|
-
* of the License (non-upgradable).
|
|
15
|
-
*
|
|
16
|
-
* This program is distributed in the hope that it will be useful,
|
|
17
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
18
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
19
|
-
* GNU General Public License for more details.
|
|
20
|
-
*
|
|
21
|
-
* You should have received a copy of the GNU General Public License
|
|
22
|
-
* along with this program; if not, write to the Free Software
|
|
23
|
-
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
24
|
-
*
|
|
25
|
-
* Copyright (c) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
|
|
26
|
-
*
|
|
26
|
+
* Register dompurify helper
|
|
27
27
|
*
|
|
28
|
+
* https://github.com/cure53/DOMPurify
|
|
29
|
+
* with config SAFE_FOR_TEMPLATES: true
|
|
30
|
+
* to make output safe for template systems
|
|
28
31
|
*/
|
|
29
|
-
function Helpers0 (hb) {
|
|
30
|
-
//register a i18n helper
|
|
31
|
-
hb.registerHelper('__', function (key) {
|
|
32
|
-
return __(key);
|
|
33
|
-
});
|
|
34
|
-
/**
|
|
35
|
-
* Register dompurify helper
|
|
36
|
-
*
|
|
37
|
-
* https://github.com/cure53/DOMPurify
|
|
38
|
-
* with config SAFE_FOR_TEMPLATES: true
|
|
39
|
-
* to make output safe for template systems
|
|
40
|
-
*/
|
|
41
|
-
|
|
42
|
-
hb.registerHelper('dompurify', function (context) {
|
|
43
|
-
return DOMPurify.sanitize(context);
|
|
44
|
-
});
|
|
45
|
-
/**
|
|
46
|
-
* Register join helper
|
|
47
|
-
*
|
|
48
|
-
* Example :
|
|
49
|
-
* var values = {a:v1, b:v2, c:v3};
|
|
50
|
-
* Using {{{join attributes '=' ' ' '"'}}} will return : a="v1" b="v2" c="v3"
|
|
51
|
-
* Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*
|
|
52
|
-
*/
|
|
53
|
-
|
|
54
|
-
hb.registerHelper('join', function (arr, keyValueGlue, fragmentGlue, wrapper) {
|
|
55
|
-
var fragments = [];
|
|
56
|
-
keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;
|
|
57
|
-
fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';
|
|
58
|
-
wrapper = typeof wrapper === 'string' ? wrapper : '"';
|
|
59
|
-
|
|
60
|
-
_.forIn(arr, function (value, key) {
|
|
61
|
-
var fragment = '';
|
|
62
|
-
|
|
63
|
-
if (value !== null || value !== undefined) {
|
|
64
|
-
if (typeof value === 'boolean') {
|
|
65
|
-
value = value ? 'true' : 'false';
|
|
66
|
-
} else if (typeof value === 'object') {
|
|
67
|
-
value = _.values(value).join(' ');
|
|
68
|
-
}
|
|
69
|
-
} else {
|
|
70
|
-
value = '';
|
|
71
|
-
}
|
|
72
32
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
33
|
+
hb.registerHelper('dompurify', function (context) {
|
|
34
|
+
return DOMPurify.sanitize(context);
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* Register join helper
|
|
38
|
+
*
|
|
39
|
+
* Example :
|
|
40
|
+
* var values = {a:v1, b:v2, c:v3};
|
|
41
|
+
* Using {{{join attributes '=' ' ' '"'}}} will return : a="v1" b="v2" c="v3"
|
|
42
|
+
* Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*
|
|
43
|
+
*/
|
|
76
44
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
45
|
+
hb.registerHelper('join', function (arr, keyValueGlue, fragmentGlue, wrapper) {
|
|
46
|
+
var fragments = [];
|
|
47
|
+
keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;
|
|
48
|
+
fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';
|
|
49
|
+
wrapper = typeof wrapper === 'string' ? wrapper : '"';
|
|
80
50
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
//it also adds a local variable "i" as the index in each iteration loop
|
|
51
|
+
_.forIn(arr, function (value, key) {
|
|
52
|
+
var fragment = '';
|
|
84
53
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
54
|
+
if (value !== null || value !== undefined) {
|
|
55
|
+
if (typeof value === 'boolean') {
|
|
56
|
+
value = value ? 'true' : 'false';
|
|
57
|
+
} else if (_typeof(value) === 'object') {
|
|
58
|
+
value = _.values(value).join(' ');
|
|
59
|
+
}
|
|
60
|
+
} else {
|
|
61
|
+
value = '';
|
|
62
|
+
}
|
|
90
63
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
i: i
|
|
94
|
-
}));
|
|
64
|
+
if (keyValueGlue !== undefined) {
|
|
65
|
+
fragment += key + keyValueGlue;
|
|
95
66
|
}
|
|
96
67
|
|
|
97
|
-
|
|
68
|
+
fragment += wrapper + value + wrapper;
|
|
69
|
+
fragments.push(fragment);
|
|
98
70
|
});
|
|
99
|
-
hb.registerHelper('equal', function (var1, var2, options) {
|
|
100
|
-
if (var1 == var2) {
|
|
101
|
-
return options.fn(this);
|
|
102
|
-
} else {
|
|
103
|
-
return options.inverse(this);
|
|
104
|
-
}
|
|
105
|
-
}); // register a "get property" helper
|
|
106
|
-
// it gets the named property from the provided context
|
|
107
71
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
// it checks if value is in array
|
|
72
|
+
return fragments.join(fragmentGlue);
|
|
73
|
+
}); //register a classic "for loop" helper
|
|
74
|
+
//it also adds a local variable "i" as the index in each iteration loop
|
|
112
75
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
76
|
+
hb.registerHelper('for', function (startIndex, stopIndex, increment, options) {
|
|
77
|
+
var ret = '';
|
|
78
|
+
startIndex = parseInt(startIndex);
|
|
79
|
+
stopIndex = parseInt(stopIndex);
|
|
80
|
+
increment = parseInt(increment);
|
|
119
81
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
125
|
-
this.compilerInfo = [4,'>= 1.0.0'];
|
|
126
|
-
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
|
|
127
|
-
var buffer = "", stack1, helper, functionType="function", escapeExpression=this.escapeExpression, self=this;
|
|
128
|
-
|
|
129
|
-
function program1(depth0,data) {
|
|
130
|
-
|
|
131
|
-
var buffer = "", stack1, helper;
|
|
132
|
-
buffer += "<label>";
|
|
133
|
-
if (helper = helpers.comboboxLabel) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
134
|
-
else { helper = (depth0 && depth0.comboboxLabel); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
135
|
-
buffer += escapeExpression(stack1)
|
|
136
|
-
+ "</label>";
|
|
137
|
-
return buffer;
|
|
82
|
+
for (var i = startIndex; i < stopIndex; i += increment) {
|
|
83
|
+
ret += options.fn(_.extend({}, this, {
|
|
84
|
+
i: i
|
|
85
|
+
}));
|
|
138
86
|
}
|
|
139
87
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
else {
|
|
146
|
-
|
|
147
|
-
+ "\" data-categories=\"";
|
|
148
|
-
if (helper = helpers.categories) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
149
|
-
else { helper = (depth0 && depth0.categories); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
150
|
-
buffer += escapeExpression(stack1)
|
|
151
|
-
+ "\">";
|
|
152
|
-
if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
153
|
-
else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
154
|
-
buffer += escapeExpression(stack1)
|
|
155
|
-
+ "</option>\n ";
|
|
156
|
-
return buffer;
|
|
88
|
+
return ret;
|
|
89
|
+
});
|
|
90
|
+
hb.registerHelper('equal', function (var1, var2, options) {
|
|
91
|
+
if (var1 == var2) {
|
|
92
|
+
return options.fn(this);
|
|
93
|
+
} else {
|
|
94
|
+
return options.inverse(this);
|
|
157
95
|
}
|
|
96
|
+
}); // register a "get property" helper
|
|
97
|
+
// it gets the named property from the provided context
|
|
158
98
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
if (helper = helpers.comboboxId) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
164
|
-
else { helper = (depth0 && depth0.comboboxId); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
165
|
-
buffer += escapeExpression(stack1)
|
|
166
|
-
+ "\" data-has-search=\"false\">\n <option></option>\n ";
|
|
167
|
-
stack1 = helpers.each.call(depth0, (depth0 && depth0.options), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});
|
|
168
|
-
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
169
|
-
buffer += "\n </select>\n</span>";
|
|
170
|
-
return buffer;
|
|
171
|
-
});
|
|
172
|
-
function selectTpl(data, options, asString) {
|
|
173
|
-
var html = Template(data, options);
|
|
174
|
-
return (asString || true) ? html : $(html);
|
|
175
|
-
}
|
|
99
|
+
hb.registerHelper('property', function (name, context) {
|
|
100
|
+
return context[name] || '';
|
|
101
|
+
}); // register an 'includes' helper
|
|
102
|
+
// it checks if value is in array
|
|
176
103
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
function createCombobox(level, categoriesDefinitions, categories) {
|
|
205
|
-
if (categoriesDefinitions[level]) {
|
|
206
|
-
var categoryDef = categoriesDefinitions[level];
|
|
104
|
+
hb.registerHelper('includes', function (haystack, needle, options) {
|
|
105
|
+
if (_.contains(haystack, needle)) {
|
|
106
|
+
return options.fn(this);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (!Helpers0.__initialized) {
|
|
112
|
+
Helpers0(Handlebars);
|
|
113
|
+
Helpers0.__initialized = true;
|
|
114
|
+
}
|
|
115
|
+
var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
116
|
+
this.compilerInfo = [4,'>= 1.0.0'];
|
|
117
|
+
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
|
|
118
|
+
var buffer = "", stack1, helper, functionType="function", escapeExpression=this.escapeExpression, self=this;
|
|
119
|
+
|
|
120
|
+
function program1(depth0,data) {
|
|
121
|
+
|
|
122
|
+
var buffer = "", stack1, helper;
|
|
123
|
+
buffer += "<label>";
|
|
124
|
+
if (helper = helpers.comboboxLabel) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
125
|
+
else { helper = (depth0 && depth0.comboboxLabel); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
126
|
+
buffer += escapeExpression(stack1)
|
|
127
|
+
+ "</label>";
|
|
128
|
+
return buffer;
|
|
129
|
+
}
|
|
207
130
|
|
|
208
|
-
|
|
131
|
+
function program3(depth0,data) {
|
|
132
|
+
|
|
133
|
+
var buffer = "", stack1, helper;
|
|
134
|
+
buffer += "\n <option value=\"";
|
|
135
|
+
if (helper = helpers.id) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
136
|
+
else { helper = (depth0 && depth0.id); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
137
|
+
buffer += escapeExpression(stack1)
|
|
138
|
+
+ "\" data-categories=\"";
|
|
139
|
+
if (helper = helpers.categories) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
140
|
+
else { helper = (depth0 && depth0.categories); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
141
|
+
buffer += escapeExpression(stack1)
|
|
142
|
+
+ "\">";
|
|
143
|
+
if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
144
|
+
else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
145
|
+
buffer += escapeExpression(stack1)
|
|
146
|
+
+ "</option>\n ";
|
|
147
|
+
return buffer;
|
|
148
|
+
}
|
|
209
149
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
150
|
+
buffer += "<span class=\"cascading-combo-box\">\n ";
|
|
151
|
+
stack1 = helpers['if'].call(depth0, (depth0 && depth0.comboboxLabel), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
|
|
152
|
+
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
153
|
+
buffer += "\n <select class=\"\" data-id=\"";
|
|
154
|
+
if (helper = helpers.comboboxId) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
155
|
+
else { helper = (depth0 && depth0.comboboxId); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
156
|
+
buffer += escapeExpression(stack1)
|
|
157
|
+
+ "\" data-has-search=\"false\">\n <option></option>\n ";
|
|
158
|
+
stack1 = helpers.each.call(depth0, (depth0 && depth0.options), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});
|
|
159
|
+
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
160
|
+
buffer += "\n </select>\n</span>";
|
|
161
|
+
return buffer;
|
|
162
|
+
});
|
|
163
|
+
function selectTpl(data, options, asString) {
|
|
164
|
+
var html = Template(data, options);
|
|
165
|
+
return (asString || true) ? html : $(html);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* This program is free software; you can redistribute it and/or
|
|
170
|
+
* modify it under the terms of the GNU General Public License
|
|
171
|
+
* as published by the Free Software Foundation; under version 2
|
|
172
|
+
* of the License (non-upgradable).
|
|
173
|
+
*
|
|
174
|
+
* This program is distributed in the hope that it will be useful,
|
|
175
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
176
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
177
|
+
* GNU General Public License for more details.
|
|
178
|
+
*
|
|
179
|
+
* You should have received a copy of the GNU General Public License
|
|
180
|
+
* along with this program; if not, write to the Free Software
|
|
181
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
182
|
+
*
|
|
183
|
+
* Copyright (c) 2015 (original work) Open Assessment Technologies SA ;
|
|
184
|
+
*/
|
|
185
|
+
var selectedValues = {};
|
|
186
|
+
/**
|
|
187
|
+
* Create a combobox and initialize it with select2
|
|
188
|
+
*
|
|
189
|
+
* @param {Number} level
|
|
190
|
+
* @param {array} categoriesDefinitions - the array that defines the number and config for each level of combobox cascade
|
|
191
|
+
* @param {array} categories - the array that contains nested array of categories
|
|
192
|
+
* @returns {jQuery}
|
|
193
|
+
*/
|
|
194
|
+
|
|
195
|
+
function createCombobox(level, categoriesDefinitions, categories) {
|
|
196
|
+
if (categoriesDefinitions[level]) {
|
|
197
|
+
var categoryDef = categoriesDefinitions[level];
|
|
198
|
+
|
|
199
|
+
var _categories, $comboBox;
|
|
200
|
+
|
|
201
|
+
if (categoryDef.id) {
|
|
202
|
+
//format categories
|
|
203
|
+
_categories = _.map(categories, function (cat) {
|
|
204
|
+
var _cat = _.clone(cat);
|
|
205
|
+
|
|
206
|
+
if (_cat.categories) {
|
|
207
|
+
//encode subcategory in json
|
|
208
|
+
_cat.categories = JSON.stringify(_cat.categories);
|
|
209
|
+
}
|
|
214
210
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
211
|
+
return _cat;
|
|
212
|
+
}); //init <select> DOM element
|
|
213
|
+
|
|
214
|
+
$comboBox = $$1(selectTpl({
|
|
215
|
+
comboboxId: categoryDef.id,
|
|
216
|
+
comboboxLabel: categoryDef.label || '',
|
|
217
|
+
options: _categories
|
|
218
|
+
}));
|
|
219
|
+
categoriesDefinitions[level].$comboBox = $comboBox; //add event handler
|
|
220
|
+
|
|
221
|
+
$comboBox.on('change', function () {
|
|
222
|
+
var subCategories, $subComboBox;
|
|
223
|
+
var $selected = $comboBox.find(':selected');
|
|
224
|
+
selectedValues = {}; //clean previously created combo boxes
|
|
225
|
+
|
|
226
|
+
_.forEach(categoriesDefinitions, function (category, key) {
|
|
227
|
+
if (category.$comboBox && key > level) {
|
|
228
|
+
category.$comboBox.remove();
|
|
229
|
+
category.$comboBox = null;
|
|
218
230
|
}
|
|
231
|
+
});
|
|
219
232
|
|
|
220
|
-
|
|
221
|
-
}); //init <select> DOM element
|
|
222
|
-
|
|
223
|
-
$comboBox = $$1(selectTpl({
|
|
224
|
-
comboboxId: categoryDef.id,
|
|
225
|
-
comboboxLabel: categoryDef.label || '',
|
|
226
|
-
options: _categories
|
|
227
|
-
}));
|
|
228
|
-
categoriesDefinitions[level].$comboBox = $comboBox; //add event handler
|
|
229
|
-
|
|
230
|
-
$comboBox.on('change', function () {
|
|
231
|
-
var subCategories, $subComboBox;
|
|
232
|
-
var $selected = $comboBox.find(':selected');
|
|
233
|
-
selectedValues = {}; //clean previously created combo boxes
|
|
234
|
-
|
|
235
|
-
_.forEach(categoriesDefinitions, function (category, key) {
|
|
236
|
-
if (category.$comboBox && key > level) {
|
|
237
|
-
category.$comboBox.remove();
|
|
238
|
-
category.$comboBox = null;
|
|
239
|
-
}
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
subCategories = $selected.data('categories');
|
|
233
|
+
subCategories = $selected.data('categories');
|
|
243
234
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
235
|
+
if (_.isArray(subCategories) && subCategories.length) {
|
|
236
|
+
//init sub-level select box by recursive call to createCombobox
|
|
237
|
+
$subComboBox = createCombobox(level + 1, categoriesDefinitions, subCategories);
|
|
247
238
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
239
|
+
if ($subComboBox) {
|
|
240
|
+
categoriesDefinitions[level + 1].$comboBox = $subComboBox;
|
|
241
|
+
$comboBox.after($subComboBox);
|
|
242
|
+
}
|
|
243
|
+
} //retrieve combobox values
|
|
253
244
|
|
|
254
245
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
246
|
+
_.forEach(categoriesDefinitions, function (value) {
|
|
247
|
+
if (value.$comboBox) {
|
|
248
|
+
var $select = value.$comboBox.find('select');
|
|
249
|
+
selectedValues[value.id] = $select.val();
|
|
250
|
+
}
|
|
251
|
+
}); //trigger event
|
|
261
252
|
|
|
262
253
|
|
|
263
|
-
|
|
264
|
-
|
|
254
|
+
$comboBox.trigger('selected.cascading-combobox', [selectedValues]);
|
|
255
|
+
}); //init select 2 on $comboBox
|
|
265
256
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
}
|
|
273
|
-
} else {
|
|
274
|
-
throw 'missing category definition on level : ' + level;
|
|
257
|
+
$comboBox.find('select').select2({
|
|
258
|
+
dropdownAutoWidth: true,
|
|
259
|
+
placeholder: categoryDef.placeholder || __('select...'),
|
|
260
|
+
minimumResultsForSearch: -1
|
|
261
|
+
});
|
|
262
|
+
return $comboBox;
|
|
275
263
|
}
|
|
264
|
+
} else {
|
|
265
|
+
throw 'missing category definition on level : ' + level;
|
|
276
266
|
}
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
}
|
|
292
|
-
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* @param {object} options
|
|
270
|
+
* @param {Array} [options.categoriesDefinitions] - the array that defines the number and config for each level of combobox cascade
|
|
271
|
+
* @param {Array} [options.categories] - the array that contains nested array of categories
|
|
272
|
+
* @returns {function}
|
|
273
|
+
*/
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
function cascadingComboBoxFactory(options) {
|
|
277
|
+
return component().on('render', function render($container) {
|
|
278
|
+
if (_.isArray(options.categoriesDefinitions) && _.isArray(options.categories)) {
|
|
279
|
+
var $comboBox = createCombobox(0, options.categoriesDefinitions, options.categories);
|
|
280
|
+
$container.append($comboBox);
|
|
281
|
+
}
|
|
282
|
+
}).init(options);
|
|
283
|
+
}
|
|
293
284
|
|
|
294
|
-
|
|
285
|
+
return cascadingComboBoxFactory;
|
|
295
286
|
|
|
296
287
|
});
|