@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
package/dist/taskQueue/status.js
CHANGED
|
@@ -1,364 +1,355 @@
|
|
|
1
1
|
define(['lodash', 'i18n', 'ui/taskQueue', 'ui/component', 'ui/report', 'handlebars', 'lib/dompurify/purify'], function (_, __, taskQueue, component, report, Handlebars, DOMPurify) { 'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
_ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;
|
|
4
|
+
__ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;
|
|
5
|
+
taskQueue = taskQueue && Object.prototype.hasOwnProperty.call(taskQueue, 'default') ? taskQueue['default'] : taskQueue;
|
|
6
|
+
component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;
|
|
7
|
+
report = report && Object.prototype.hasOwnProperty.call(report, 'default') ? report['default'] : report;
|
|
8
|
+
Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;
|
|
9
|
+
DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;
|
|
10
|
+
|
|
11
|
+
function _typeof(obj) {
|
|
12
|
+
"@babel/helpers - typeof";
|
|
13
|
+
|
|
14
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
|
|
15
|
+
return typeof obj;
|
|
16
|
+
} : function (obj) {
|
|
17
|
+
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
18
|
+
}, _typeof(obj);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function Helpers0 (hb) {
|
|
22
|
+
//register a i18n helper
|
|
23
|
+
hb.registerHelper('__', function (key) {
|
|
24
|
+
return __(key);
|
|
25
|
+
});
|
|
11
26
|
/**
|
|
12
|
-
*
|
|
13
|
-
* modify it under the terms of the GNU General Public License
|
|
14
|
-
* as published by the Free Software Foundation; under version 2
|
|
15
|
-
* of the License (non-upgradable).
|
|
16
|
-
*
|
|
17
|
-
* This program is distributed in the hope that it will be useful,
|
|
18
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
19
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
20
|
-
* GNU General Public License for more details.
|
|
21
|
-
*
|
|
22
|
-
* You should have received a copy of the GNU General Public License
|
|
23
|
-
* along with this program; if not, write to the Free Software
|
|
24
|
-
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
25
|
-
*
|
|
26
|
-
* Copyright (c) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
|
|
27
|
-
*
|
|
27
|
+
* Register dompurify helper
|
|
28
28
|
*
|
|
29
|
+
* https://github.com/cure53/DOMPurify
|
|
30
|
+
* with config SAFE_FOR_TEMPLATES: true
|
|
31
|
+
* to make output safe for template systems
|
|
29
32
|
*/
|
|
30
|
-
function Helpers0 (hb) {
|
|
31
|
-
//register a i18n helper
|
|
32
|
-
hb.registerHelper('__', function (key) {
|
|
33
|
-
return __(key);
|
|
34
|
-
});
|
|
35
|
-
/**
|
|
36
|
-
* Register dompurify helper
|
|
37
|
-
*
|
|
38
|
-
* https://github.com/cure53/DOMPurify
|
|
39
|
-
* with config SAFE_FOR_TEMPLATES: true
|
|
40
|
-
* to make output safe for template systems
|
|
41
|
-
*/
|
|
42
|
-
|
|
43
|
-
hb.registerHelper('dompurify', function (context) {
|
|
44
|
-
return DOMPurify.sanitize(context);
|
|
45
|
-
});
|
|
46
|
-
/**
|
|
47
|
-
* Register join helper
|
|
48
|
-
*
|
|
49
|
-
* Example :
|
|
50
|
-
* var values = {a:v1, b:v2, c:v3};
|
|
51
|
-
* Using {{{join attributes '=' ' ' '"'}}} will return : a="v1" b="v2" c="v3"
|
|
52
|
-
* Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*
|
|
53
|
-
*/
|
|
54
|
-
|
|
55
|
-
hb.registerHelper('join', function (arr, keyValueGlue, fragmentGlue, wrapper) {
|
|
56
|
-
var fragments = [];
|
|
57
|
-
keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;
|
|
58
|
-
fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';
|
|
59
|
-
wrapper = typeof wrapper === 'string' ? wrapper : '"';
|
|
60
|
-
|
|
61
|
-
_.forIn(arr, function (value, key) {
|
|
62
|
-
var fragment = '';
|
|
63
|
-
|
|
64
|
-
if (value !== null || value !== undefined) {
|
|
65
|
-
if (typeof value === 'boolean') {
|
|
66
|
-
value = value ? 'true' : 'false';
|
|
67
|
-
} else if (typeof value === 'object') {
|
|
68
|
-
value = _.values(value).join(' ');
|
|
69
|
-
}
|
|
70
|
-
} else {
|
|
71
|
-
value = '';
|
|
72
|
-
}
|
|
73
33
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
34
|
+
hb.registerHelper('dompurify', function (context) {
|
|
35
|
+
return DOMPurify.sanitize(context);
|
|
36
|
+
});
|
|
37
|
+
/**
|
|
38
|
+
* Register join helper
|
|
39
|
+
*
|
|
40
|
+
* Example :
|
|
41
|
+
* var values = {a:v1, b:v2, c:v3};
|
|
42
|
+
* Using {{{join attributes '=' ' ' '"'}}} will return : a="v1" b="v2" c="v3"
|
|
43
|
+
* Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*
|
|
44
|
+
*/
|
|
77
45
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
46
|
+
hb.registerHelper('join', function (arr, keyValueGlue, fragmentGlue, wrapper) {
|
|
47
|
+
var fragments = [];
|
|
48
|
+
keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;
|
|
49
|
+
fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';
|
|
50
|
+
wrapper = typeof wrapper === 'string' ? wrapper : '"';
|
|
81
51
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
//it also adds a local variable "i" as the index in each iteration loop
|
|
52
|
+
_.forIn(arr, function (value, key) {
|
|
53
|
+
var fragment = '';
|
|
85
54
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
55
|
+
if (value !== null || value !== undefined) {
|
|
56
|
+
if (typeof value === 'boolean') {
|
|
57
|
+
value = value ? 'true' : 'false';
|
|
58
|
+
} else if (_typeof(value) === 'object') {
|
|
59
|
+
value = _.values(value).join(' ');
|
|
60
|
+
}
|
|
61
|
+
} else {
|
|
62
|
+
value = '';
|
|
63
|
+
}
|
|
91
64
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
i: i
|
|
95
|
-
}));
|
|
65
|
+
if (keyValueGlue !== undefined) {
|
|
66
|
+
fragment += key + keyValueGlue;
|
|
96
67
|
}
|
|
97
68
|
|
|
98
|
-
|
|
69
|
+
fragment += wrapper + value + wrapper;
|
|
70
|
+
fragments.push(fragment);
|
|
99
71
|
});
|
|
100
|
-
hb.registerHelper('equal', function (var1, var2, options) {
|
|
101
|
-
if (var1 == var2) {
|
|
102
|
-
return options.fn(this);
|
|
103
|
-
} else {
|
|
104
|
-
return options.inverse(this);
|
|
105
|
-
}
|
|
106
|
-
}); // register a "get property" helper
|
|
107
|
-
// it gets the named property from the provided context
|
|
108
72
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
// it checks if value is in array
|
|
73
|
+
return fragments.join(fragmentGlue);
|
|
74
|
+
}); //register a classic "for loop" helper
|
|
75
|
+
//it also adds a local variable "i" as the index in each iteration loop
|
|
113
76
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}
|
|
77
|
+
hb.registerHelper('for', function (startIndex, stopIndex, increment, options) {
|
|
78
|
+
var ret = '';
|
|
79
|
+
startIndex = parseInt(startIndex);
|
|
80
|
+
stopIndex = parseInt(stopIndex);
|
|
81
|
+
increment = parseInt(increment);
|
|
120
82
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
83
|
+
for (var i = startIndex; i < stopIndex; i += increment) {
|
|
84
|
+
ret += options.fn(_.extend({}, this, {
|
|
85
|
+
i: i
|
|
86
|
+
}));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return ret;
|
|
90
|
+
});
|
|
91
|
+
hb.registerHelper('equal', function (var1, var2, options) {
|
|
92
|
+
if (var1 == var2) {
|
|
93
|
+
return options.fn(this);
|
|
94
|
+
} else {
|
|
95
|
+
return options.inverse(this);
|
|
96
|
+
}
|
|
97
|
+
}); // register a "get property" helper
|
|
98
|
+
// it gets the named property from the provided context
|
|
128
99
|
|
|
100
|
+
hb.registerHelper('property', function (name, context) {
|
|
101
|
+
return context[name] || '';
|
|
102
|
+
}); // register an 'includes' helper
|
|
103
|
+
// it checks if value is in array
|
|
129
104
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
105
|
+
hb.registerHelper('includes', function (haystack, needle, options) {
|
|
106
|
+
if (_.contains(haystack, needle)) {
|
|
107
|
+
return options.fn(this);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (!Helpers0.__initialized) {
|
|
113
|
+
Helpers0(Handlebars);
|
|
114
|
+
Helpers0.__initialized = true;
|
|
115
|
+
}
|
|
116
|
+
var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
117
|
+
this.compilerInfo = [4,'>= 1.0.0'];
|
|
118
|
+
helpers = this.merge(helpers, Handlebars.helpers);
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
return "<div class=\"task-queue-status\"></div>";
|
|
122
|
+
});
|
|
123
|
+
function statusTpl(data, options, asString) {
|
|
124
|
+
var html = Template(data, options);
|
|
125
|
+
return (asString || true) ? html : $(html);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (!Helpers0.__initialized) {
|
|
129
|
+
Helpers0(Handlebars);
|
|
130
|
+
Helpers0.__initialized = true;
|
|
131
|
+
}
|
|
132
|
+
var Template$1 = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
133
|
+
this.compilerInfo = [4,'>= 1.0.0'];
|
|
134
|
+
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
|
|
135
|
+
var buffer = "", stack1, helper, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, functionType="function", self=this;
|
|
136
|
+
|
|
137
|
+
function program1(depth0,data) {
|
|
138
|
+
|
|
139
|
+
var buffer = "", stack1, helper, options;
|
|
140
|
+
buffer += "\n "
|
|
141
|
+
+ escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, "Status of", options) : helperMissing.call(depth0, "__", "Status of", options)))
|
|
142
|
+
+ " <span class=\"task-name\">";
|
|
143
|
+
if (helper = helpers.name) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
144
|
+
else { helper = (depth0 && depth0.name); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
145
|
+
buffer += escapeExpression(stack1)
|
|
146
|
+
+ "</span>\n ";
|
|
147
|
+
return buffer;
|
|
135
148
|
}
|
|
136
149
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
150
|
+
function program3(depth0,data) {
|
|
151
|
+
|
|
152
|
+
var buffer = "", helper, options;
|
|
153
|
+
buffer += "\n "
|
|
154
|
+
+ escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, "Status", options) : helperMissing.call(depth0, "__", "Status", options)))
|
|
155
|
+
+ "\n ";
|
|
156
|
+
return buffer;
|
|
140
157
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
158
|
+
|
|
159
|
+
buffer += "<div class=\"message\">\n ";
|
|
160
|
+
stack1 = helpers['if'].call(depth0, (depth0 && depth0.name), {hash:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),data:data});
|
|
161
|
+
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
162
|
+
buffer += "\n : <span class=\"task-status\">";
|
|
163
|
+
if (helper = helpers.status) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
164
|
+
else { helper = (depth0 && depth0.status); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
165
|
+
buffer += escapeExpression(stack1)
|
|
166
|
+
+ "</span>\n</div>";
|
|
167
|
+
return buffer;
|
|
168
|
+
});
|
|
169
|
+
function messageTpl(data, options, asString) {
|
|
170
|
+
var html = Template$1(data, options);
|
|
171
|
+
return (asString || true) ? html : $(html);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* This program is free software; you can redistribute it and/or
|
|
176
|
+
* modify it under the terms of the GNU General Public License
|
|
177
|
+
* as published by the Free Software Foundation; under version 2
|
|
178
|
+
* of the License (non-upgradable).
|
|
179
|
+
*
|
|
180
|
+
* This program is distributed in the hope that it will be useful,
|
|
181
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
182
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
183
|
+
* GNU General Public License for more details.
|
|
184
|
+
*
|
|
185
|
+
* You should have received a copy of the GNU General Public License
|
|
186
|
+
* along with this program; if not, write to the Free Software
|
|
187
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
188
|
+
*
|
|
189
|
+
* Copyright (c) 2017 (original work) Open Assessment Technologies SA ;
|
|
190
|
+
*/
|
|
191
|
+
var _status = {
|
|
192
|
+
loading: __('Loading status'),
|
|
193
|
+
created: __('Not started'),
|
|
194
|
+
running: __('In progress'),
|
|
195
|
+
finished: __('Completed')
|
|
196
|
+
};
|
|
197
|
+
var _defaults = {
|
|
198
|
+
serviceUrl: '',
|
|
199
|
+
taskId: '',
|
|
200
|
+
taskStatus: _status.loading,
|
|
201
|
+
showDetailsButton: true,
|
|
202
|
+
actions: []
|
|
203
|
+
};
|
|
204
|
+
var statusComponent = {
|
|
205
|
+
/**
|
|
206
|
+
* Starts the task status polling
|
|
207
|
+
* @returns {statusComponent}
|
|
208
|
+
*/
|
|
209
|
+
start: function start() {
|
|
210
|
+
if (this.taskQueueApi) {
|
|
211
|
+
this.taskQueueApi.pollStatus(this.config.taskId);
|
|
157
212
|
}
|
|
158
213
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
214
|
+
return this;
|
|
215
|
+
},
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Stops the task status polling
|
|
219
|
+
* @returns {statusComponent}
|
|
220
|
+
*/
|
|
221
|
+
stop: function stop() {
|
|
222
|
+
if (this.taskQueueApi) {
|
|
223
|
+
this.taskQueueApi.pollStop();
|
|
166
224
|
}
|
|
167
225
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
226
|
+
return this;
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
230
|
+
* Create a status checker for task queue
|
|
231
|
+
*
|
|
232
|
+
* @param {Object} config
|
|
233
|
+
* @param {String} config.serviceUrl - the service be called in ajax to check the status of the task
|
|
234
|
+
* @param {String} config.taskId - the id of the task
|
|
235
|
+
* @param {Boolean} [config.showDetailsButton=true] - display the show/hide details toggle
|
|
236
|
+
* @param {Array} [config.actions] - possibility to add more button controls on the report
|
|
237
|
+
* @param {Object} [config.data] - directly set the task data if already available, in this case no polling required
|
|
238
|
+
* @returns {*}
|
|
239
|
+
*/
|
|
240
|
+
|
|
241
|
+
function taskQueueStatusComponent(config) {
|
|
242
|
+
var taskQueueStatus;
|
|
243
|
+
config = _.defaults(config || {}, _defaults);
|
|
244
|
+
|
|
245
|
+
if (_.isEmpty(config.serviceUrl)) {
|
|
246
|
+
throw new TypeError('The task queue status needs to be configured with a service url');
|
|
181
247
|
}
|
|
182
|
-
|
|
183
248
|
/**
|
|
184
|
-
*
|
|
185
|
-
* modify it under the terms of the GNU General Public License
|
|
186
|
-
* as published by the Free Software Foundation; under version 2
|
|
187
|
-
* of the License (non-upgradable).
|
|
249
|
+
* Create a report
|
|
188
250
|
*
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
*
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
*
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
251
|
+
* @param {String} reportType - the top report type
|
|
252
|
+
* @param {String} message - the top report message
|
|
253
|
+
* @param taskReport
|
|
254
|
+
* @returns {Object} a ui/report component
|
|
255
|
+
* @private
|
|
256
|
+
* @see ui/report
|
|
257
|
+
* @fires reportComponent#showDetails
|
|
258
|
+
* @fires reportComponent#hideDetails
|
|
259
|
+
* @fires reportComponent#action
|
|
260
|
+
* @fires reportComponent#action-{custom action name}
|
|
199
261
|
*/
|
|
200
|
-
var _status = {
|
|
201
|
-
loading: __('Loading status'),
|
|
202
|
-
created: __('Not started'),
|
|
203
|
-
running: __('In progress'),
|
|
204
|
-
finished: __('Completed')
|
|
205
|
-
};
|
|
206
|
-
var _defaults = {
|
|
207
|
-
serviceUrl: '',
|
|
208
|
-
taskId: '',
|
|
209
|
-
taskStatus: _status.loading,
|
|
210
|
-
showDetailsButton: true,
|
|
211
|
-
actions: []
|
|
212
|
-
};
|
|
213
|
-
var statusComponent = {
|
|
214
|
-
/**
|
|
215
|
-
* Starts the task status polling
|
|
216
|
-
* @returns {statusComponent}
|
|
217
|
-
*/
|
|
218
|
-
start: function start() {
|
|
219
|
-
if (this.taskQueueApi) {
|
|
220
|
-
this.taskQueueApi.pollStatus(this.config.taskId);
|
|
221
|
-
}
|
|
222
262
|
|
|
223
|
-
return this;
|
|
224
|
-
},
|
|
225
263
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
this.taskQueueApi.pollStop();
|
|
233
|
-
}
|
|
264
|
+
var createReport = function createReport(reportType, message, taskReport) {
|
|
265
|
+
var innerTaskReport;
|
|
266
|
+
var reportData = {
|
|
267
|
+
type: reportType,
|
|
268
|
+
message: message
|
|
269
|
+
};
|
|
234
270
|
|
|
235
|
-
|
|
271
|
+
if (_.isPlainObject(taskReport) && taskReport.type && _.isArray(taskReport.children) && taskReport.children.length) {
|
|
272
|
+
// strip the outer generic report that wraps the actual task report
|
|
273
|
+
innerTaskReport = taskReport.children[0]; //there could be only one report by task
|
|
274
|
+
|
|
275
|
+
reportData.type = innerTaskReport.type;
|
|
276
|
+
reportData.children = taskReport.children;
|
|
236
277
|
}
|
|
278
|
+
|
|
279
|
+
return report({
|
|
280
|
+
replace: true,
|
|
281
|
+
noBorder: true,
|
|
282
|
+
showDetailsButton: config.showDetailsButton,
|
|
283
|
+
actions: config.actions
|
|
284
|
+
}, reportData).on('action', function (actionId) {
|
|
285
|
+
taskQueueStatus.trigger('action-' + actionId);
|
|
286
|
+
taskQueueStatus.trigger('action', actionId);
|
|
287
|
+
}).on('showDetails', function () {
|
|
288
|
+
taskQueueStatus.trigger('showDetails');
|
|
289
|
+
}).on('hideDetails', function () {
|
|
290
|
+
taskQueueStatus.trigger('hideDetails');
|
|
291
|
+
}).render(taskQueueStatus.getElement()).showDetails();
|
|
237
292
|
};
|
|
238
293
|
/**
|
|
239
|
-
*
|
|
240
|
-
*
|
|
241
|
-
* @
|
|
242
|
-
* @
|
|
243
|
-
* @
|
|
244
|
-
* @
|
|
245
|
-
* @param {Array} [config.actions] - possibility to add more button controls on the report
|
|
246
|
-
* @param {Object} [config.data] - directly set the task data if already available, in this case no polling required
|
|
247
|
-
* @returns {*}
|
|
294
|
+
* The task queue status component
|
|
295
|
+
* @typedef taskQueueStatus
|
|
296
|
+
* @see ui/component
|
|
297
|
+
* @fires taskQueueStatus#running after every loop
|
|
298
|
+
* @fires taskQueueStatus#finished when the task is complete
|
|
299
|
+
* @fires taskQueueStatus#statechange on each task state change
|
|
248
300
|
*/
|
|
249
301
|
|
|
250
|
-
function taskQueueStatusComponent(config) {
|
|
251
|
-
var taskQueueStatus;
|
|
252
|
-
config = _.defaults(config || {}, _defaults);
|
|
253
302
|
|
|
254
|
-
|
|
255
|
-
|
|
303
|
+
taskQueueStatus = component(statusComponent).setTemplate(statusTpl).on('destroy', function () {
|
|
304
|
+
if (this.taskQueueApi) {
|
|
305
|
+
this.taskQueueApi.pollStop();
|
|
256
306
|
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
reportData.type = innerTaskReport.type;
|
|
285
|
-
reportData.children = taskReport.children;
|
|
286
|
-
}
|
|
307
|
+
}).on('render', function () {
|
|
308
|
+
var self = this;
|
|
309
|
+
|
|
310
|
+
if (config.data && config.data.status === 'finished') {
|
|
311
|
+
//since the data is already available, there is no need to poll the status, so we directly display the report
|
|
312
|
+
self.report = createReport(config.data.report.type || 'info', messageTpl({
|
|
313
|
+
name: config.data.label,
|
|
314
|
+
status: _status.finished
|
|
315
|
+
}), config.data.report || {});
|
|
316
|
+
} else {
|
|
317
|
+
//create a temporary report to display a loading message
|
|
318
|
+
self.report = createReport('info', __('Loading task status ...')); //poll the status
|
|
319
|
+
|
|
320
|
+
this.taskQueueApi = taskQueue({
|
|
321
|
+
url: {
|
|
322
|
+
status: config.serviceUrl
|
|
323
|
+
}
|
|
324
|
+
}).on('running', function (taskData) {
|
|
325
|
+
if (self.status !== 'running') {
|
|
326
|
+
self.report = createReport('info', messageTpl({
|
|
327
|
+
name: taskData.label,
|
|
328
|
+
status: _status.running
|
|
329
|
+
}));
|
|
330
|
+
self.status = 'running';
|
|
331
|
+
self.trigger('statechange', self.status);
|
|
332
|
+
}
|
|
287
333
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
* @fires taskQueueStatus#running after every loop
|
|
307
|
-
* @fires taskQueueStatus#finished when the task is complete
|
|
308
|
-
* @fires taskQueueStatus#statechange on each task state change
|
|
309
|
-
*/
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
taskQueueStatus = component(statusComponent).setTemplate(statusTpl).on('destroy', function () {
|
|
313
|
-
if (this.taskQueueApi) {
|
|
314
|
-
this.taskQueueApi.pollStop();
|
|
315
|
-
}
|
|
316
|
-
}).on('render', function () {
|
|
317
|
-
var self = this;
|
|
318
|
-
|
|
319
|
-
if (config.data && config.data.status === 'finished') {
|
|
320
|
-
//since the data is already available, there is no need to poll the status, so we directly display the report
|
|
321
|
-
self.report = createReport(config.data.report.type || 'info', messageTpl({
|
|
322
|
-
name: config.data.label,
|
|
323
|
-
status: _status.finished
|
|
324
|
-
}), config.data.report || {});
|
|
325
|
-
} else {
|
|
326
|
-
//create a temporary report to display a loading message
|
|
327
|
-
self.report = createReport('info', __('Loading task status ...')); //poll the status
|
|
328
|
-
|
|
329
|
-
this.taskQueueApi = taskQueue({
|
|
330
|
-
url: {
|
|
331
|
-
status: config.serviceUrl
|
|
332
|
-
}
|
|
333
|
-
}).on('running', function (taskData) {
|
|
334
|
-
if (self.status !== 'running') {
|
|
335
|
-
self.report = createReport('info', messageTpl({
|
|
336
|
-
name: taskData.label,
|
|
337
|
-
status: _status.running
|
|
338
|
-
}));
|
|
339
|
-
self.status = 'running';
|
|
340
|
-
self.trigger('statechange', self.status);
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
self.trigger('running', taskData);
|
|
344
|
-
}).on('finished', function (taskData) {
|
|
345
|
-
if (self.status !== 'finished') {
|
|
346
|
-
self.report = createReport(taskData.report.type || 'info', messageTpl({
|
|
347
|
-
name: taskData.label,
|
|
348
|
-
status: _status.finished
|
|
349
|
-
}), taskData.report || {});
|
|
350
|
-
self.status = 'finished';
|
|
351
|
-
self.trigger('finished', taskData);
|
|
352
|
-
self.trigger('statechange', self.status);
|
|
353
|
-
}
|
|
354
|
-
}).on('error', function (err) {
|
|
355
|
-
self.trigger('error', err);
|
|
356
|
-
});
|
|
357
|
-
}
|
|
358
|
-
}).init(config);
|
|
359
|
-
return taskQueueStatus;
|
|
360
|
-
}
|
|
334
|
+
self.trigger('running', taskData);
|
|
335
|
+
}).on('finished', function (taskData) {
|
|
336
|
+
if (self.status !== 'finished') {
|
|
337
|
+
self.report = createReport(taskData.report.type || 'info', messageTpl({
|
|
338
|
+
name: taskData.label,
|
|
339
|
+
status: _status.finished
|
|
340
|
+
}), taskData.report || {});
|
|
341
|
+
self.status = 'finished';
|
|
342
|
+
self.trigger('finished', taskData);
|
|
343
|
+
self.trigger('statechange', self.status);
|
|
344
|
+
}
|
|
345
|
+
}).on('error', function (err) {
|
|
346
|
+
self.trigger('error', err);
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
}).init(config);
|
|
350
|
+
return taskQueueStatus;
|
|
351
|
+
}
|
|
361
352
|
|
|
362
|
-
|
|
353
|
+
return taskQueueStatusComponent;
|
|
363
354
|
|
|
364
355
|
});
|