@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/resource/filters.js
CHANGED
|
@@ -1,324 +1,315 @@
|
|
|
1
1
|
define(['lodash', 'i18n', 'ui/component', 'ui/generis/form/form', 'handlebars', 'lib/dompurify/purify'], function (_, __, component, generisFormFactory, Handlebars, DOMPurify) { '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
|
+
component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;
|
|
6
|
+
generisFormFactory = generisFormFactory && Object.prototype.hasOwnProperty.call(generisFormFactory, 'default') ? generisFormFactory['default'] : generisFormFactory;
|
|
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
32
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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 : '"';
|
|
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
|
+
*/
|
|
59
44
|
|
|
60
|
-
|
|
61
|
-
|
|
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 : '"';
|
|
62
50
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
value = value ? 'true' : 'false';
|
|
66
|
-
} else if (typeof value === 'object') {
|
|
67
|
-
value = _.values(value).join(' ');
|
|
68
|
-
}
|
|
69
|
-
} else {
|
|
70
|
-
value = '';
|
|
71
|
-
}
|
|
51
|
+
_.forIn(arr, function (value, key) {
|
|
52
|
+
var fragment = '';
|
|
72
53
|
|
|
73
|
-
|
|
74
|
-
|
|
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(' ');
|
|
75
59
|
}
|
|
76
|
-
|
|
77
|
-
fragment += wrapper + value + wrapper;
|
|
78
|
-
fragments.push(fragment);
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
return fragments.join(fragmentGlue);
|
|
82
|
-
}); //register a classic "for loop" helper
|
|
83
|
-
//it also adds a local variable "i" as the index in each iteration loop
|
|
84
|
-
|
|
85
|
-
hb.registerHelper('for', function (startIndex, stopIndex, increment, options) {
|
|
86
|
-
var ret = '';
|
|
87
|
-
startIndex = parseInt(startIndex);
|
|
88
|
-
stopIndex = parseInt(stopIndex);
|
|
89
|
-
increment = parseInt(increment);
|
|
90
|
-
|
|
91
|
-
for (var i = startIndex; i < stopIndex; i += increment) {
|
|
92
|
-
ret += options.fn(_.extend({}, this, {
|
|
93
|
-
i: i
|
|
94
|
-
}));
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
return ret;
|
|
98
|
-
});
|
|
99
|
-
hb.registerHelper('equal', function (var1, var2, options) {
|
|
100
|
-
if (var1 == var2) {
|
|
101
|
-
return options.fn(this);
|
|
102
60
|
} else {
|
|
103
|
-
|
|
61
|
+
value = '';
|
|
104
62
|
}
|
|
105
|
-
}); // register a "get property" helper
|
|
106
|
-
// it gets the named property from the provided context
|
|
107
|
-
|
|
108
|
-
hb.registerHelper('property', function (name, context) {
|
|
109
|
-
return context[name] || '';
|
|
110
|
-
}); // register an 'includes' helper
|
|
111
|
-
// it checks if value is in array
|
|
112
63
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
return options.fn(this);
|
|
64
|
+
if (keyValueGlue !== undefined) {
|
|
65
|
+
fragment += key + keyValueGlue;
|
|
116
66
|
}
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
if (!Helpers0.__initialized) {
|
|
121
|
-
Helpers0(Handlebars);
|
|
122
|
-
Helpers0.__initialized = true;
|
|
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);
|
|
127
67
|
|
|
128
|
-
|
|
129
|
-
|
|
68
|
+
fragment += wrapper + value + wrapper;
|
|
69
|
+
fragments.push(fragment);
|
|
130
70
|
});
|
|
131
|
-
function filtersTpl(data, options, asString) {
|
|
132
|
-
var html = Template(data, options);
|
|
133
|
-
return (asString || true) ? html : $(html);
|
|
134
|
-
}
|
|
135
71
|
|
|
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
|
|
75
|
+
|
|
76
|
+
hb.registerHelper('for', function (startIndex, stopIndex, increment, options) {
|
|
77
|
+
var ret = '';
|
|
78
|
+
startIndex = parseInt(startIndex);
|
|
79
|
+
stopIndex = parseInt(stopIndex);
|
|
80
|
+
increment = parseInt(increment);
|
|
81
|
+
|
|
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);
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
return "<div class=\"filters\">\n</div>\n";
|
|
121
|
+
});
|
|
122
|
+
function filtersTpl(data, options, asString) {
|
|
123
|
+
var html = Template(data, options);
|
|
124
|
+
return (asString || true) ? html : $(html);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* This program is free software; you can redistribute it and/or
|
|
129
|
+
* modify it under the terms of the GNU General Public License
|
|
130
|
+
* as published by the Free Software Foundation; under version 2
|
|
131
|
+
* of the License (non-upgradable).
|
|
132
|
+
*
|
|
133
|
+
* This program is distributed in the hope that it will be useful,
|
|
134
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
135
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
136
|
+
* GNU General Public License for more details.
|
|
137
|
+
*
|
|
138
|
+
* You should have received a copy of the GNU General Public License
|
|
139
|
+
* along with this program; if not, write to the Free Software
|
|
140
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
141
|
+
*
|
|
142
|
+
* Copyright (c) 2017 (original work) Open Assessment Technologies SA ;
|
|
143
|
+
*/
|
|
144
|
+
/**
|
|
145
|
+
* The list of supported properties
|
|
146
|
+
*
|
|
147
|
+
* FIXME add radio as soon as supported
|
|
148
|
+
*/
|
|
149
|
+
|
|
150
|
+
var supportedWidgets = ['http://www.tao.lu/datatypes/WidgetDefinitions.rdf#TextBox', 'http://www.tao.lu/datatypes/WidgetDefinitions.rdf#CheckBox', 'http://www.tao.lu/datatypes/WidgetDefinitions.rdf#ComboBox', 'http://www.tao.lu/datatypes/WidgetDefinitions.rdf#TextArea', 'http://www.tao.lu/datatypes/WidgetDefinitions.rdf#StateWidget'];
|
|
151
|
+
var defaultConfig = {
|
|
152
|
+
title: __('Search by properties'),
|
|
153
|
+
applyLabel: __('Apply')
|
|
154
|
+
};
|
|
155
|
+
/**
|
|
156
|
+
* Builds the filter component
|
|
157
|
+
*
|
|
158
|
+
* @param {jQueryElement} $container - where to append the component
|
|
159
|
+
* @param {Object} config - the component config
|
|
160
|
+
* @param {String} config.classUri - the root Class URI
|
|
161
|
+
* @param {String} config.data - the root Class URI
|
|
162
|
+
* @param {Object} config.data.properties - the list of properties used to filter
|
|
163
|
+
* @param {Object} config.data.ranges - the property ranges
|
|
164
|
+
* @param {String} [config.title] - the form title
|
|
165
|
+
* @param {String} [config.applyLabel] - the label of the apply button
|
|
166
|
+
* @returns {filter} the component
|
|
167
|
+
*/
|
|
168
|
+
|
|
169
|
+
function filtersFactory($container, config) {
|
|
136
170
|
/**
|
|
137
|
-
*
|
|
138
|
-
* modify it under the terms of the GNU General Public License
|
|
139
|
-
* as published by the Free Software Foundation; under version 2
|
|
140
|
-
* of the License (non-upgradable).
|
|
141
|
-
*
|
|
142
|
-
* This program is distributed in the hope that it will be useful,
|
|
143
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
144
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
145
|
-
* GNU General Public License for more details.
|
|
146
|
-
*
|
|
147
|
-
* You should have received a copy of the GNU General Public License
|
|
148
|
-
* along with this program; if not, write to the Free Software
|
|
149
|
-
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
150
|
-
*
|
|
151
|
-
* Copyright (c) 2017 (original work) Open Assessment Technologies SA ;
|
|
171
|
+
* @typedef {ui/component}
|
|
152
172
|
*/
|
|
153
|
-
|
|
154
|
-
* The list of supported properties
|
|
155
|
-
*
|
|
156
|
-
* FIXME add radio as soon as supported
|
|
157
|
-
*/
|
|
158
|
-
|
|
159
|
-
var supportedWidgets = ['http://www.tao.lu/datatypes/WidgetDefinitions.rdf#TextBox', 'http://www.tao.lu/datatypes/WidgetDefinitions.rdf#CheckBox', 'http://www.tao.lu/datatypes/WidgetDefinitions.rdf#ComboBox', 'http://www.tao.lu/datatypes/WidgetDefinitions.rdf#TextArea', 'http://www.tao.lu/datatypes/WidgetDefinitions.rdf#StateWidget'];
|
|
160
|
-
var defaultConfig = {
|
|
161
|
-
title: __('Search by properties'),
|
|
162
|
-
applyLabel: __('Apply')
|
|
163
|
-
};
|
|
164
|
-
/**
|
|
165
|
-
* Builds the filter component
|
|
166
|
-
*
|
|
167
|
-
* @param {jQueryElement} $container - where to append the component
|
|
168
|
-
* @param {Object} config - the component config
|
|
169
|
-
* @param {String} config.classUri - the root Class URI
|
|
170
|
-
* @param {String} config.data - the root Class URI
|
|
171
|
-
* @param {Object} config.data.properties - the list of properties used to filter
|
|
172
|
-
* @param {Object} config.data.ranges - the property ranges
|
|
173
|
-
* @param {String} [config.title] - the form title
|
|
174
|
-
* @param {String} [config.applyLabel] - the label of the apply button
|
|
175
|
-
* @returns {filter} the component
|
|
176
|
-
*/
|
|
177
|
-
|
|
178
|
-
function filtersFactory($container, config) {
|
|
173
|
+
var filters = component({
|
|
179
174
|
/**
|
|
180
|
-
*
|
|
175
|
+
* Get the filter values
|
|
176
|
+
* @returns {Object[]} the form values
|
|
181
177
|
*/
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
*/
|
|
187
|
-
getValues: function getValues() {
|
|
188
|
-
if (this.is('rendered') && this.form) {
|
|
189
|
-
return this.form.getValues();
|
|
190
|
-
}
|
|
178
|
+
getValues: function getValues() {
|
|
179
|
+
if (this.is('rendered') && this.form) {
|
|
180
|
+
return this.form.getValues();
|
|
181
|
+
}
|
|
191
182
|
|
|
192
|
-
|
|
193
|
-
|
|
183
|
+
return null;
|
|
184
|
+
},
|
|
194
185
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
186
|
+
/**
|
|
187
|
+
* Set the value for a given field
|
|
188
|
+
* @param {String} uri - the property URI
|
|
189
|
+
* @param {String|String[]} value - the field value
|
|
190
|
+
* @return {filter} chains
|
|
191
|
+
*/
|
|
192
|
+
setValue: function setValue(uri, value) {
|
|
193
|
+
var widget;
|
|
203
194
|
|
|
204
|
-
|
|
205
|
-
|
|
195
|
+
if (this.is('rendered') && this.form) {
|
|
196
|
+
widget = this.form.getWidget(uri);
|
|
206
197
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
}
|
|
198
|
+
if (widget) {
|
|
199
|
+
widget.set(value);
|
|
210
200
|
}
|
|
201
|
+
}
|
|
211
202
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
/**
|
|
224
|
-
* Update the filter form
|
|
225
|
-
* @param {Object} data - the filtering data
|
|
226
|
-
* @param {Object} data.properties - the list of properties used to filter
|
|
227
|
-
* @param {Object} data.ranges - the property ranges
|
|
228
|
-
* @return {filter} chains
|
|
229
|
-
* @fires filter#change when the user wants to apply the filter
|
|
230
|
-
*/
|
|
231
|
-
update: function update(data) {
|
|
232
|
-
var self = this;
|
|
233
|
-
var properties;
|
|
234
|
-
|
|
235
|
-
if (this.is('rendered')) {
|
|
236
|
-
this.getElement().empty();
|
|
237
|
-
properties = _.filter(data.properties, function (property) {
|
|
238
|
-
return _.contains(supportedWidgets, property.widget);
|
|
239
|
-
});
|
|
240
|
-
this.form = generisFormFactory({
|
|
241
|
-
properties: properties,
|
|
242
|
-
values: data.ranges
|
|
243
|
-
}, {
|
|
244
|
-
submitText: this.config.applyLabel,
|
|
245
|
-
title: this.config.title
|
|
246
|
-
}).on('submit reset', function () {
|
|
247
|
-
/**
|
|
248
|
-
* Apply the filter values
|
|
249
|
-
* @event filter#change
|
|
250
|
-
* @param {Object} values - the filter values
|
|
251
|
-
*/
|
|
252
|
-
self.trigger('change', this.getValues());
|
|
253
|
-
}).render(this.getElement());
|
|
254
|
-
}
|
|
203
|
+
return this;
|
|
204
|
+
},
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Reset the filter form
|
|
208
|
+
* @return {filter} chains
|
|
209
|
+
*/
|
|
210
|
+
reset: function reset() {
|
|
211
|
+
return this.update(this.config.data);
|
|
212
|
+
},
|
|
255
213
|
|
|
256
|
-
|
|
257
|
-
|
|
214
|
+
/**
|
|
215
|
+
* Update the filter form
|
|
216
|
+
* @param {Object} data - the filtering data
|
|
217
|
+
* @param {Object} data.properties - the list of properties used to filter
|
|
218
|
+
* @param {Object} data.ranges - the property ranges
|
|
219
|
+
* @return {filter} chains
|
|
220
|
+
* @fires filter#change when the user wants to apply the filter
|
|
221
|
+
*/
|
|
222
|
+
update: function update(data) {
|
|
223
|
+
var self = this;
|
|
224
|
+
var properties;
|
|
225
|
+
|
|
226
|
+
if (this.is('rendered')) {
|
|
227
|
+
this.getElement().empty();
|
|
228
|
+
properties = _.filter(data.properties, function (property) {
|
|
229
|
+
return _.contains(supportedWidgets, property.widget);
|
|
230
|
+
});
|
|
231
|
+
this.form = generisFormFactory({
|
|
232
|
+
properties: properties,
|
|
233
|
+
values: data.ranges
|
|
234
|
+
}, {
|
|
235
|
+
submitText: this.config.applyLabel,
|
|
236
|
+
title: this.config.title
|
|
237
|
+
}).on('submit reset', function () {
|
|
238
|
+
/**
|
|
239
|
+
* Apply the filter values
|
|
240
|
+
* @event filter#change
|
|
241
|
+
* @param {Object} values - the filter values
|
|
242
|
+
*/
|
|
243
|
+
self.trigger('change', this.getValues());
|
|
244
|
+
}).render(this.getElement());
|
|
245
|
+
}
|
|
258
246
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
* @returns {String} the query
|
|
262
|
-
*/
|
|
263
|
-
getTextualQuery: function getTextualQuery() {
|
|
264
|
-
var self = this;
|
|
265
|
-
var result;
|
|
247
|
+
return this;
|
|
248
|
+
},
|
|
266
249
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
250
|
+
/**
|
|
251
|
+
* Get a text that represents the actual query
|
|
252
|
+
* @returns {String} the query
|
|
253
|
+
*/
|
|
254
|
+
getTextualQuery: function getTextualQuery() {
|
|
255
|
+
var self = this;
|
|
256
|
+
var result;
|
|
271
257
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
258
|
+
if (this.is('rendered')) {
|
|
259
|
+
result = _.reduce(this.form.getValues(), function (acc, value, uri) {
|
|
260
|
+
var widget = self.form.getWidget(uri);
|
|
261
|
+
var displayValue;
|
|
276
262
|
|
|
277
|
-
|
|
263
|
+
if (widget) {
|
|
264
|
+
if (!_.isEmpty(acc)) {
|
|
265
|
+
acc += __(' AND ');
|
|
266
|
+
}
|
|
278
267
|
|
|
279
|
-
|
|
280
|
-
displayValue = _.map(_.isArray(value) ? value : [value], function (val) {
|
|
281
|
-
var selectedValue = _.find(widget.config.range, {
|
|
282
|
-
uri: val
|
|
283
|
-
});
|
|
268
|
+
acc += widget.config.label + __(' is ');
|
|
284
269
|
|
|
285
|
-
|
|
270
|
+
if (widget.config.range) {
|
|
271
|
+
displayValue = _.map(_.isArray(value) ? value : [value], function (val) {
|
|
272
|
+
var selectedValue = _.find(widget.config.range, {
|
|
273
|
+
uri: val
|
|
286
274
|
});
|
|
287
|
-
} else {
|
|
288
|
-
displayValue = value;
|
|
289
|
-
}
|
|
290
275
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
276
|
+
return selectedValue && selectedValue.label;
|
|
277
|
+
});
|
|
278
|
+
} else {
|
|
279
|
+
displayValue = value;
|
|
280
|
+
}
|
|
294
281
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
}
|
|
282
|
+
if (_.isString(displayValue)) {
|
|
283
|
+
acc += displayValue;
|
|
298
284
|
}
|
|
299
285
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
286
|
+
if (_.isArray(displayValue)) {
|
|
287
|
+
acc += displayValue.join(', ');
|
|
288
|
+
}
|
|
289
|
+
}
|
|
303
290
|
|
|
304
|
-
|
|
291
|
+
return acc;
|
|
292
|
+
}, '');
|
|
305
293
|
}
|
|
306
|
-
}, defaultConfig);
|
|
307
|
-
filters.setTemplate(filtersTpl).on('init', function () {
|
|
308
|
-
this.render($container);
|
|
309
|
-
}).on('render', function () {
|
|
310
|
-
if (this.config.data) {
|
|
311
|
-
this.update(this.config.data);
|
|
312
|
-
}
|
|
313
|
-
}); //always defer the initialization to let consumers listen for init and render events.
|
|
314
|
-
|
|
315
|
-
_.defer(function () {
|
|
316
|
-
filters.init(config);
|
|
317
|
-
});
|
|
318
|
-
|
|
319
|
-
return filters;
|
|
320
|
-
}
|
|
321
294
|
|
|
322
|
-
|
|
295
|
+
return result;
|
|
296
|
+
}
|
|
297
|
+
}, defaultConfig);
|
|
298
|
+
filters.setTemplate(filtersTpl).on('init', function () {
|
|
299
|
+
this.render($container);
|
|
300
|
+
}).on('render', function () {
|
|
301
|
+
if (this.config.data) {
|
|
302
|
+
this.update(this.config.data);
|
|
303
|
+
}
|
|
304
|
+
}); //always defer the initialization to let consumers listen for init and render events.
|
|
305
|
+
|
|
306
|
+
_.defer(function () {
|
|
307
|
+
filters.init(config);
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
return filters;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
return filtersFactory;
|
|
323
314
|
|
|
324
315
|
});
|