@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
|
@@ -40,7 +40,7 @@ define(['lodash', 'interact', 'ui/component/placeable'], function (_, interact,
|
|
|
40
40
|
* @returns {Number} The new value
|
|
41
41
|
* @private
|
|
42
42
|
*/
|
|
43
|
-
_getCappedValue: function (value, min, max) {
|
|
43
|
+
_getCappedValue: function _getCappedValue(value, min, max) {
|
|
44
44
|
var capped = value;
|
|
45
45
|
|
|
46
46
|
if (!_.isUndefined(max) && !_.isNull(max)) {
|
|
@@ -1,334 +1,325 @@
|
|
|
1
1
|
define(['lodash', 'i18n', 'jquery', 'ui/component/placeable', 'handlebars', 'lib/dompurify/purify', 'css!ui/component/css/windowComponent.css'], function (_, __, $$1, makePlaceable, Handlebars, DOMPurify, windowComponent_css) { 'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
_ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;
|
|
4
|
+
__ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;
|
|
5
|
+
$$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;
|
|
6
|
+
makePlaceable = makePlaceable && Object.prototype.hasOwnProperty.call(makePlaceable, 'default') ? makePlaceable['default'] : makePlaceable;
|
|
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
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
function
|
|
138
|
-
|
|
139
|
-
|
|
82
|
+
for (var i = startIndex; i < stopIndex; i += increment) {
|
|
83
|
+
ret += options.fn(_.extend({}, this, {
|
|
84
|
+
i: i
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
|
|
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);
|
|
95
|
+
}
|
|
96
|
+
}); // register a "get property" helper
|
|
97
|
+
// it gets the named property from the provided context
|
|
98
|
+
|
|
99
|
+
hb.registerHelper('property', function (name, context) {
|
|
100
|
+
return context[name] || '';
|
|
101
|
+
}); // register an 'includes' helper
|
|
102
|
+
// it checks if value is in array
|
|
103
|
+
|
|
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;
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
buffer += "<div class=\"window-component\">\n <div class=\"window-component-title-bar\">\n <div class=\"window-component-title\">";
|
|
122
|
+
if (helper = helpers.windowTitle) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
123
|
+
else { helper = (depth0 && depth0.windowTitle); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
124
|
+
buffer += escapeExpression(stack1)
|
|
125
|
+
+ "</div>\n <div class=\"window-component-controls\"> </div>\n </div>\n <div class=\"window-component-body\"></div>\n</div>\n";
|
|
126
|
+
return buffer;
|
|
127
|
+
});
|
|
128
|
+
function windowTpl(data, options, asString) {
|
|
129
|
+
var html = Template(data, options);
|
|
130
|
+
return (asString || true) ? html : $(html);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* This program is free software; you can redistribute it and/or
|
|
135
|
+
* modify it under the terms of the GNU General Public License
|
|
136
|
+
* as published by the Free Software Foundation; under version 2
|
|
137
|
+
* of the License (non-upgradable).
|
|
138
|
+
*
|
|
139
|
+
* This program is distributed in the hope that it will be useful,
|
|
140
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
141
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
142
|
+
* GNU General Public License for more details.
|
|
143
|
+
*
|
|
144
|
+
* You should have received a copy of the GNU General Public License
|
|
145
|
+
* along with this program; if not, write to the Free Software
|
|
146
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
147
|
+
*
|
|
148
|
+
* Copyright (c) 2016 (original work) Open Assessment Technologies SA;
|
|
149
|
+
*/
|
|
150
|
+
var eventNs = '.windowed',
|
|
151
|
+
cssNs = '.window-component',
|
|
152
|
+
defaultConfig = {
|
|
153
|
+
hasCloser: true,
|
|
154
|
+
hasBin: false
|
|
155
|
+
};
|
|
156
|
+
var controlsPresets = {
|
|
157
|
+
bin: {
|
|
158
|
+
id: 'bin',
|
|
159
|
+
order: 100,
|
|
160
|
+
icon: 'bin',
|
|
161
|
+
description: __('Delete'),
|
|
162
|
+
event: 'delete'
|
|
163
|
+
},
|
|
164
|
+
closer: {
|
|
165
|
+
id: 'closer',
|
|
166
|
+
order: 200,
|
|
167
|
+
icon: 'result-nok',
|
|
168
|
+
description: __('Close'),
|
|
169
|
+
event: 'close',
|
|
170
|
+
onclick: function onclick() {
|
|
171
|
+
this.hide();
|
|
172
|
+
}
|
|
140
173
|
}
|
|
174
|
+
};
|
|
175
|
+
var windowedComponentAPI = {
|
|
176
|
+
/**
|
|
177
|
+
* @returns {jQuery} - the container where the title bar controls are rendered
|
|
178
|
+
*/
|
|
179
|
+
getControls: function getControls() {
|
|
180
|
+
var $component = this.getElement();
|
|
181
|
+
return $component.find(cssNs + '-controls');
|
|
182
|
+
},
|
|
141
183
|
|
|
142
184
|
/**
|
|
143
|
-
*
|
|
144
|
-
* modify it under the terms of the GNU General Public License
|
|
145
|
-
* as published by the Free Software Foundation; under version 2
|
|
146
|
-
* of the License (non-upgradable).
|
|
147
|
-
*
|
|
148
|
-
* This program is distributed in the hope that it will be useful,
|
|
149
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
150
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
151
|
-
* GNU General Public License for more details.
|
|
152
|
-
*
|
|
153
|
-
* You should have received a copy of the GNU General Public License
|
|
154
|
-
* along with this program; if not, write to the Free Software
|
|
155
|
-
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
156
|
-
*
|
|
157
|
-
* Copyright (c) 2016 (original work) Open Assessment Technologies SA;
|
|
185
|
+
* @returns {jQuery} - the container where the title is rendered
|
|
158
186
|
*/
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
hasBin: false
|
|
164
|
-
};
|
|
165
|
-
var controlsPresets = {
|
|
166
|
-
bin: {
|
|
167
|
-
id: 'bin',
|
|
168
|
-
order: 100,
|
|
169
|
-
icon: 'bin',
|
|
170
|
-
description: __('Delete'),
|
|
171
|
-
event: 'delete'
|
|
172
|
-
},
|
|
173
|
-
closer: {
|
|
174
|
-
id: 'closer',
|
|
175
|
-
order: 200,
|
|
176
|
-
icon: 'result-nok',
|
|
177
|
-
description: __('Close'),
|
|
178
|
-
event: 'close',
|
|
179
|
-
onclick: function onclick() {
|
|
180
|
-
this.hide();
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
};
|
|
184
|
-
var windowedComponentAPI = {
|
|
185
|
-
/**
|
|
186
|
-
* @returns {jQuery} - the container where the title bar controls are rendered
|
|
187
|
-
*/
|
|
188
|
-
getControls: function getControls() {
|
|
189
|
-
var $component = this.getElement();
|
|
190
|
-
return $component.find(cssNs + '-controls');
|
|
191
|
-
},
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* @returns {jQuery} - the container where the title is rendered
|
|
195
|
-
*/
|
|
196
|
-
getTitle: function getTitle() {
|
|
197
|
-
var $component = this.getElement();
|
|
198
|
-
return $component.find(cssNs + '-title');
|
|
199
|
-
},
|
|
200
|
-
|
|
201
|
-
/**
|
|
202
|
-
* @returns {jQuery} - the content area of the window
|
|
203
|
-
*/
|
|
204
|
-
getBody: function getBody() {
|
|
205
|
-
var $component = this.getElement();
|
|
206
|
-
return $component.find(cssNs + '-body');
|
|
207
|
-
},
|
|
208
|
-
|
|
209
|
-
/**
|
|
210
|
-
* Adds a control to the control area
|
|
211
|
-
* @param {String} controlOptions.id
|
|
212
|
-
* @param {String} controlOptions.icon
|
|
213
|
-
* @param {Number} [controlOptions.order] - position relative to the other controls
|
|
214
|
-
* @param {String} [controlOptions.description] - link description on mouse over
|
|
215
|
-
* @param {Function} [controlOptions.onclick] - what to do when the control is clicked. Optional if event is specified.
|
|
216
|
-
* @param {Function} [controlOptions.event] - event to trigger when the control is clicked. Optional if onclick is specified
|
|
217
|
-
* @returns {component}
|
|
218
|
-
*/
|
|
219
|
-
addControl: function addControl(controlOptions) {
|
|
220
|
-
if (!_.isString(controlOptions.id) || _.isEmpty(controlOptions.id)) {
|
|
221
|
-
throw new Error('control must have an id');
|
|
222
|
-
}
|
|
187
|
+
getTitle: function getTitle() {
|
|
188
|
+
var $component = this.getElement();
|
|
189
|
+
return $component.find(cssNs + '-title');
|
|
190
|
+
},
|
|
223
191
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
192
|
+
/**
|
|
193
|
+
* @returns {jQuery} - the content area of the window
|
|
194
|
+
*/
|
|
195
|
+
getBody: function getBody() {
|
|
196
|
+
var $component = this.getElement();
|
|
197
|
+
return $component.find(cssNs + '-body');
|
|
198
|
+
},
|
|
227
199
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
200
|
+
/**
|
|
201
|
+
* Adds a control to the control area
|
|
202
|
+
* @param {String} controlOptions.id
|
|
203
|
+
* @param {String} controlOptions.icon
|
|
204
|
+
* @param {Number} [controlOptions.order] - position relative to the other controls
|
|
205
|
+
* @param {String} [controlOptions.description] - link description on mouse over
|
|
206
|
+
* @param {Function} [controlOptions.onclick] - what to do when the control is clicked. Optional if event is specified.
|
|
207
|
+
* @param {Function} [controlOptions.event] - event to trigger when the control is clicked. Optional if onclick is specified
|
|
208
|
+
* @returns {component}
|
|
209
|
+
*/
|
|
210
|
+
addControl: function addControl(controlOptions) {
|
|
211
|
+
if (!_.isString(controlOptions.id) || _.isEmpty(controlOptions.id)) {
|
|
212
|
+
throw new Error('control must have an id');
|
|
213
|
+
}
|
|
231
214
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
215
|
+
if (!_.isString(controlOptions.icon) || _.isEmpty(controlOptions.icon)) {
|
|
216
|
+
throw new Error('control must have an icon');
|
|
217
|
+
}
|
|
235
218
|
|
|
236
|
-
|
|
219
|
+
if (!_.isFunction(controlOptions.onclick) && !(_.isString(controlOptions.event) && controlOptions.event.trim() !== '')) {
|
|
220
|
+
throw new Error('control must have valid onclick or event parameter');
|
|
221
|
+
}
|
|
237
222
|
|
|
238
|
-
|
|
239
|
-
|
|
223
|
+
if (!_.isArray(this._windowControls)) {
|
|
224
|
+
this._windowControls = [];
|
|
225
|
+
}
|
|
240
226
|
|
|
241
|
-
|
|
242
|
-
* Add pre-configured controls to the title bar
|
|
243
|
-
* @returns {component}
|
|
244
|
-
*/
|
|
245
|
-
addPresets: function addPresets() {
|
|
246
|
-
if (this.config.hasCloser) {
|
|
247
|
-
this.addControl(controlsPresets.closer);
|
|
248
|
-
}
|
|
227
|
+
this._windowControls.push(controlOptions);
|
|
249
228
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
}
|
|
229
|
+
return this;
|
|
230
|
+
},
|
|
253
231
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
_renderControls: function _renderControls() {
|
|
263
|
-
var self = this,
|
|
264
|
-
$controlsArea = this.getControls(),
|
|
265
|
-
controlsCallbacks = {},
|
|
266
|
-
controlsEvents = {};
|
|
267
|
-
|
|
268
|
-
if (_.isArray(this._windowControls)) {
|
|
269
|
-
$controlsArea.empty(); // sort controls
|
|
270
|
-
|
|
271
|
-
this._windowControls.sort(function sortAscending(a, b) {
|
|
272
|
-
return (a.order || 0) - (b.order || 0);
|
|
273
|
-
}); // render controls
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
this._windowControls.forEach(function (control) {
|
|
277
|
-
var $control = $$1('<button>', {
|
|
278
|
-
class: 'icon-' + control.icon,
|
|
279
|
-
'data-control': control.id,
|
|
280
|
-
title: control.description
|
|
281
|
-
});
|
|
282
|
-
$controlsArea.append($control);
|
|
283
|
-
controlsCallbacks[control.id] = control.onclick;
|
|
284
|
-
controlsEvents[control.id] = control.event;
|
|
285
|
-
}); // add behavior
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
$controlsArea.off('click' + eventNs).on('click' + eventNs, function (e) {
|
|
289
|
-
var controlId = $$1(e.target).data('control');
|
|
290
|
-
e.stopPropagation();
|
|
291
|
-
|
|
292
|
-
if (_.isFunction(controlsCallbacks[controlId])) {
|
|
293
|
-
controlsCallbacks[controlId].call(self);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
if (_.isString(controlsEvents[controlId])) {
|
|
297
|
-
self.trigger(controlsEvents[controlId]);
|
|
298
|
-
}
|
|
299
|
-
});
|
|
300
|
-
}
|
|
232
|
+
/**
|
|
233
|
+
* Add pre-configured controls to the title bar
|
|
234
|
+
* @returns {component}
|
|
235
|
+
*/
|
|
236
|
+
addPresets: function addPresets() {
|
|
237
|
+
if (this.config.hasCloser) {
|
|
238
|
+
this.addControl(controlsPresets.closer);
|
|
239
|
+
}
|
|
301
240
|
|
|
302
|
-
|
|
241
|
+
if (this.config.hasBin) {
|
|
242
|
+
this.addControl(controlsPresets.bin);
|
|
303
243
|
}
|
|
304
|
-
|
|
244
|
+
|
|
245
|
+
return this;
|
|
246
|
+
},
|
|
247
|
+
|
|
305
248
|
/**
|
|
306
|
-
*
|
|
307
|
-
* @
|
|
308
|
-
* @
|
|
309
|
-
* @param {Boolean} hasBin - auto-add the delete control to the title bar
|
|
310
|
-
* @param {String} windowTitle - to be rendered in the title bar
|
|
249
|
+
* Render the controls buttons in the title bar
|
|
250
|
+
* @returns {component}
|
|
251
|
+
* @private
|
|
311
252
|
*/
|
|
253
|
+
_renderControls: function _renderControls() {
|
|
254
|
+
var self = this,
|
|
255
|
+
$controlsArea = this.getControls(),
|
|
256
|
+
controlsCallbacks = {},
|
|
257
|
+
controlsEvents = {};
|
|
312
258
|
|
|
313
|
-
|
|
314
|
-
|
|
259
|
+
if (_.isArray(this._windowControls)) {
|
|
260
|
+
$controlsArea.empty(); // sort controls
|
|
315
261
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
262
|
+
this._windowControls.sort(function sortAscending(a, b) {
|
|
263
|
+
return (a.order || 0) - (b.order || 0);
|
|
264
|
+
}); // render controls
|
|
319
265
|
|
|
320
|
-
return component.setTemplate(windowTpl).off(eventNs).on('init' + eventNs, function () {
|
|
321
|
-
_.defaults(this.config, config || {}, defaultConfig);
|
|
322
266
|
|
|
323
|
-
this.
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
267
|
+
this._windowControls.forEach(function (control) {
|
|
268
|
+
var $control = $$1('<button>', {
|
|
269
|
+
class: 'icon-' + control.icon,
|
|
270
|
+
'data-control': control.id,
|
|
271
|
+
title: control.description
|
|
272
|
+
});
|
|
273
|
+
$controlsArea.append($control);
|
|
274
|
+
controlsCallbacks[control.id] = control.onclick;
|
|
275
|
+
controlsEvents[control.id] = control.event;
|
|
276
|
+
}); // add behavior
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
$controlsArea.off('click' + eventNs).on('click' + eventNs, function (e) {
|
|
280
|
+
var controlId = $$1(e.target).data('control');
|
|
281
|
+
e.stopPropagation();
|
|
282
|
+
|
|
283
|
+
if (_.isFunction(controlsCallbacks[controlId])) {
|
|
284
|
+
controlsCallbacks[controlId].call(self);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
if (_.isString(controlsEvents[controlId])) {
|
|
288
|
+
self.trigger(controlsEvents[controlId]);
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
return this;
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
/**
|
|
297
|
+
* @param {Component} component - an instance of ui/component
|
|
298
|
+
* @param {Object} config
|
|
299
|
+
* @param {Boolean} hasCloser - auto-add the closer control to the title bar
|
|
300
|
+
* @param {Boolean} hasBin - auto-add the delete control to the title bar
|
|
301
|
+
* @param {String} windowTitle - to be rendered in the title bar
|
|
302
|
+
*/
|
|
303
|
+
|
|
304
|
+
function makeWindowed(component, config) {
|
|
305
|
+
_.assign(component, windowedComponentAPI);
|
|
306
|
+
|
|
307
|
+
if (!makePlaceable.isPlaceable(component)) {
|
|
308
|
+
makePlaceable(component);
|
|
330
309
|
}
|
|
331
310
|
|
|
332
|
-
return
|
|
311
|
+
return component.setTemplate(windowTpl).off(eventNs).on('init' + eventNs, function () {
|
|
312
|
+
_.defaults(this.config, config || {}, defaultConfig);
|
|
313
|
+
|
|
314
|
+
this.addPresets();
|
|
315
|
+
}).on('render' + eventNs, function () {
|
|
316
|
+
this._renderControls();
|
|
317
|
+
}).on('destroy' + eventNs, function () {
|
|
318
|
+
var $controlsArea = this.getControls();
|
|
319
|
+
$controlsArea.off(eventNs);
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
return makeWindowed;
|
|
333
324
|
|
|
334
325
|
});
|