@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/class/selector.js
CHANGED
|
@@ -1,525 +1,516 @@
|
|
|
1
1
|
define(['jquery', 'lodash', 'i18n', 'ui/component', 'handlebars', 'lib/dompurify/purify', 'css!ui/class/css/selector.css'], function ($$1, _, __, component, Handlebars, DOMPurify, selector_css) { 'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
$$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;
|
|
4
|
+
_ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;
|
|
5
|
+
__ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;
|
|
6
|
+
component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;
|
|
7
|
+
Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;
|
|
8
|
+
DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;
|
|
9
|
+
|
|
10
|
+
function _typeof(obj) {
|
|
11
|
+
"@babel/helpers - typeof";
|
|
12
|
+
|
|
13
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
|
|
14
|
+
return typeof obj;
|
|
15
|
+
} : function (obj) {
|
|
16
|
+
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
17
|
+
}, _typeof(obj);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function Helpers0 (hb) {
|
|
21
|
+
//register a i18n helper
|
|
22
|
+
hb.registerHelper('__', function (key) {
|
|
23
|
+
return __(key);
|
|
24
|
+
});
|
|
10
25
|
/**
|
|
11
|
-
*
|
|
12
|
-
* modify it under the terms of the GNU General Public License
|
|
13
|
-
* as published by the Free Software Foundation; under version 2
|
|
14
|
-
* of the License (non-upgradable).
|
|
15
|
-
*
|
|
16
|
-
* This program is distributed in the hope that it will be useful,
|
|
17
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
18
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
19
|
-
* GNU General Public License for more details.
|
|
20
|
-
*
|
|
21
|
-
* You should have received a copy of the GNU General Public License
|
|
22
|
-
* along with this program; if not, write to the Free Software
|
|
23
|
-
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
24
|
-
*
|
|
25
|
-
* Copyright (c) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
|
|
26
|
+
* Register dompurify helper
|
|
26
27
|
*
|
|
28
|
+
* https://github.com/cure53/DOMPurify
|
|
29
|
+
* with config SAFE_FOR_TEMPLATES: true
|
|
30
|
+
* to make output safe for template systems
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
hb.registerHelper('dompurify', function (context) {
|
|
34
|
+
return DOMPurify.sanitize(context);
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* Register join helper
|
|
27
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*
|
|
28
43
|
*/
|
|
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
44
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
*/
|
|
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 : '"';
|
|
53
50
|
|
|
54
|
-
|
|
55
|
-
var
|
|
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
|
-
}
|
|
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
|
}
|
|
60
|
+
} else {
|
|
61
|
+
value = '';
|
|
62
|
+
}
|
|
76
63
|
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
}));
|
|
64
|
+
if (keyValueGlue !== undefined) {
|
|
65
|
+
fragment += key + keyValueGlue;
|
|
95
66
|
}
|
|
96
67
|
|
|
97
|
-
|
|
68
|
+
fragment += wrapper + value + wrapper;
|
|
69
|
+
fragments.push(fragment);
|
|
98
70
|
});
|
|
99
|
-
hb.registerHelper('equal', function (var1, var2, options) {
|
|
100
|
-
if (var1 == var2) {
|
|
101
|
-
return options.fn(this);
|
|
102
|
-
} else {
|
|
103
|
-
return options.inverse(this);
|
|
104
|
-
}
|
|
105
|
-
}); // register a "get property" helper
|
|
106
|
-
// it gets the named property from the provided context
|
|
107
71
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
// it checks if value is in array
|
|
72
|
+
return fragments.join(fragmentGlue);
|
|
73
|
+
}); //register a classic "for loop" helper
|
|
74
|
+
//it also adds a local variable "i" as the index in each iteration loop
|
|
112
75
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
76
|
+
hb.registerHelper('for', function (startIndex, stopIndex, increment, options) {
|
|
77
|
+
var ret = '';
|
|
78
|
+
startIndex = parseInt(startIndex);
|
|
79
|
+
stopIndex = parseInt(stopIndex);
|
|
80
|
+
increment = parseInt(increment);
|
|
119
81
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
125
|
-
this.compilerInfo = [4,'>= 1.0.0'];
|
|
126
|
-
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
|
|
127
|
-
var buffer = "", stack1, helper, functionType="function", escapeExpression=this.escapeExpression, self=this;
|
|
128
|
-
|
|
129
|
-
function program1(depth0,data) {
|
|
130
|
-
|
|
131
|
-
var buffer = "", stack1, helper;
|
|
132
|
-
buffer += "\n <a href=\"#\" class=\"selected truncate\" data-uri=\"";
|
|
133
|
-
if (helper = helpers.classUri) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
134
|
-
else { helper = (depth0 && depth0.classUri); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
135
|
-
buffer += escapeExpression(stack1)
|
|
136
|
-
+ "\" title=\"";
|
|
137
|
-
if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
138
|
-
else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
139
|
-
buffer += escapeExpression(stack1)
|
|
140
|
-
+ "\">";
|
|
141
|
-
if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
142
|
-
else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
143
|
-
buffer += escapeExpression(stack1)
|
|
144
|
-
+ "</a>\n ";
|
|
145
|
-
return buffer;
|
|
82
|
+
for (var i = startIndex; i < stopIndex; i += increment) {
|
|
83
|
+
ret += options.fn(_.extend({}, this, {
|
|
84
|
+
i: i
|
|
85
|
+
}));
|
|
146
86
|
}
|
|
147
87
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
else {
|
|
154
|
-
|
|
155
|
-
+ "</a>\n ";
|
|
156
|
-
return buffer;
|
|
88
|
+
return ret;
|
|
89
|
+
});
|
|
90
|
+
hb.registerHelper('equal', function (var1, var2, options) {
|
|
91
|
+
if (var1 == var2) {
|
|
92
|
+
return options.fn(this);
|
|
93
|
+
} else {
|
|
94
|
+
return options.inverse(this);
|
|
157
95
|
}
|
|
96
|
+
}); // register a "get property" helper
|
|
97
|
+
// it gets the named property from the provided context
|
|
158
98
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
if(
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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, self=this;
|
|
119
|
+
|
|
120
|
+
function program1(depth0,data) {
|
|
121
|
+
|
|
122
|
+
var buffer = "", stack1, helper;
|
|
123
|
+
buffer += "\n <a href=\"#\" class=\"selected truncate\" data-uri=\"";
|
|
124
|
+
if (helper = helpers.classUri) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
125
|
+
else { helper = (depth0 && depth0.classUri); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
126
|
+
buffer += escapeExpression(stack1)
|
|
127
|
+
+ "\" title=\"";
|
|
128
|
+
if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
129
|
+
else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
130
|
+
buffer += escapeExpression(stack1)
|
|
131
|
+
+ "\">";
|
|
132
|
+
if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
133
|
+
else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
134
|
+
buffer += escapeExpression(stack1)
|
|
135
|
+
+ "</a>\n ";
|
|
136
|
+
return buffer;
|
|
172
137
|
}
|
|
173
138
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
139
|
+
function program3(depth0,data) {
|
|
140
|
+
|
|
141
|
+
var buffer = "", stack1, helper;
|
|
142
|
+
buffer += "\n <a href=\"#\" class=\"selected truncate empty\">";
|
|
143
|
+
if (helper = helpers.placeholder) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
144
|
+
else { helper = (depth0 && depth0.placeholder); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
145
|
+
buffer += escapeExpression(stack1)
|
|
146
|
+
+ "</a>\n ";
|
|
147
|
+
return buffer;
|
|
177
148
|
}
|
|
178
|
-
var Template$1 = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
179
|
-
this.compilerInfo = [4,'>= 1.0.0'];
|
|
180
|
-
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
|
|
181
|
-
var buffer = "", stack1, helper, functionType="function", escapeExpression=this.escapeExpression, self=this;
|
|
182
|
-
|
|
183
|
-
function program1(depth0,data) {
|
|
184
|
-
|
|
185
|
-
var buffer = "", stack1, helper;
|
|
186
|
-
buffer += "\n <ul>\n ";
|
|
187
|
-
if (helper = helpers.childList) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
188
|
-
else { helper = (depth0 && depth0.childList); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
189
|
-
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
190
|
-
buffer += "\n </ul>\n ";
|
|
191
|
-
return buffer;
|
|
192
|
-
}
|
|
193
149
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
150
|
+
buffer += "<div class=\"class-selector\">\n ";
|
|
151
|
+
stack1 = helpers['if'].call(depth0, (depth0 && depth0.classUri), {hash:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),data:data});
|
|
152
|
+
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
153
|
+
buffer += "\n <div class=\"options folded\">\n <ul>";
|
|
154
|
+
if (helper = helpers.tree) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
155
|
+
else { helper = (depth0 && depth0.tree); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
156
|
+
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
157
|
+
buffer += "</ul>\n </div>\n</div>\n";
|
|
158
|
+
return buffer;
|
|
159
|
+
});
|
|
160
|
+
function selectorTpl(data, options, asString) {
|
|
161
|
+
var html = Template(data, options);
|
|
162
|
+
return (asString || true) ? html : $(html);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if (!Helpers0.__initialized) {
|
|
166
|
+
Helpers0(Handlebars);
|
|
167
|
+
Helpers0.__initialized = true;
|
|
168
|
+
}
|
|
169
|
+
var Template$1 = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
170
|
+
this.compilerInfo = [4,'>= 1.0.0'];
|
|
171
|
+
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
|
|
172
|
+
var buffer = "", stack1, helper, functionType="function", escapeExpression=this.escapeExpression, self=this;
|
|
173
|
+
|
|
174
|
+
function program1(depth0,data) {
|
|
175
|
+
|
|
176
|
+
var buffer = "", stack1, helper;
|
|
177
|
+
buffer += "\n <ul>\n ";
|
|
178
|
+
if (helper = helpers.childList) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
179
|
+
else { helper = (depth0 && depth0.childList); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
180
|
+
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
181
|
+
buffer += "\n </ul>\n ";
|
|
182
|
+
return buffer;
|
|
215
183
|
}
|
|
216
184
|
|
|
185
|
+
buffer += "<li>\n <a href=\"#\" data-uri=\"";
|
|
186
|
+
if (helper = helpers.uri) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
187
|
+
else { helper = (depth0 && depth0.uri); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
188
|
+
buffer += escapeExpression(stack1)
|
|
189
|
+
+ "\" title=\"";
|
|
190
|
+
if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
191
|
+
else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
192
|
+
buffer += escapeExpression(stack1)
|
|
193
|
+
+ "\">";
|
|
194
|
+
if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
195
|
+
else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
196
|
+
buffer += escapeExpression(stack1)
|
|
197
|
+
+ "</a>\n ";
|
|
198
|
+
stack1 = helpers['if'].call(depth0, (depth0 && depth0.childList), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
|
|
199
|
+
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
200
|
+
buffer += "\n</li>\n\n";
|
|
201
|
+
return buffer;
|
|
202
|
+
});
|
|
203
|
+
function listItemTpl(data, options, asString) {
|
|
204
|
+
var html = Template$1(data, options);
|
|
205
|
+
return (asString || true) ? html : $(html);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* This program is free software; you can redistribute it and/or
|
|
210
|
+
* modify it under the terms of the GNU General Public License
|
|
211
|
+
* as published by the Free Software Foundation; under version 2
|
|
212
|
+
* of the License (non-upgradable).
|
|
213
|
+
*
|
|
214
|
+
* This program is distributed in the hope that it will be useful,
|
|
215
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
216
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
217
|
+
* GNU General Public License for more details.
|
|
218
|
+
*
|
|
219
|
+
* You should have received a copy of the GNU General Public License
|
|
220
|
+
* along with this program; if not, write to the Free Software
|
|
221
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
222
|
+
*
|
|
223
|
+
* Copyright (c) 2017 (original work) Open Assessment Technologies SA ;
|
|
224
|
+
*/
|
|
225
|
+
var defaultConfig = {
|
|
226
|
+
classes: [],
|
|
227
|
+
placeholder: __('Select a class')
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
230
|
+
* Create a brand new class selector
|
|
231
|
+
* @param {jQueryElement} $container - where the component is rendered
|
|
232
|
+
* @param {Object} [config] - the configuration
|
|
233
|
+
* @param {String} [config.classUri] - the selected class URI (by default)
|
|
234
|
+
* @param {String} [config.placeholder] - when nothing is selected
|
|
235
|
+
* @param {Object[]} [config.classes] - the class tree data, a collection of objects as {uri, label, children}
|
|
236
|
+
* @returns {classSelector} the component itself
|
|
237
|
+
*/
|
|
238
|
+
|
|
239
|
+
function classesSelectorFactory($container, config) {
|
|
240
|
+
var $selected;
|
|
241
|
+
var $options; //create an index to manage classes easily
|
|
242
|
+
|
|
243
|
+
var classList = {};
|
|
217
244
|
/**
|
|
218
|
-
*
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
* of the License (non-upgradable).
|
|
222
|
-
*
|
|
223
|
-
* This program is distributed in the hope that it will be useful,
|
|
224
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
225
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
226
|
-
* GNU General Public License for more details.
|
|
227
|
-
*
|
|
228
|
-
* You should have received a copy of the GNU General Public License
|
|
229
|
-
* along with this program; if not, write to the Free Software
|
|
230
|
-
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
231
|
-
*
|
|
232
|
-
* Copyright (c) 2017 (original work) Open Assessment Technologies SA ;
|
|
245
|
+
* Build the Class Tree from the data
|
|
246
|
+
* @param {Object[]} classes - as {uri, label, children}
|
|
247
|
+
* @returns {String} the HTML tree
|
|
233
248
|
*/
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
249
|
+
|
|
250
|
+
var buildTree = function buildTree(classes) {
|
|
251
|
+
var nodeToListItem = function nodeToListItem(acc, node) {
|
|
252
|
+
var item;
|
|
253
|
+
|
|
254
|
+
if (node.uri && node.label) {
|
|
255
|
+
item = _.clone(node);
|
|
256
|
+
classList[item.uri] = item;
|
|
257
|
+
|
|
258
|
+
if (node.children && node.children.length) {
|
|
259
|
+
item.childList = _.reduce(node.children, nodeToListItem, '');
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
acc += listItemTpl(item);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
return acc;
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
return _.reduce(classes, nodeToListItem, '');
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
var isOutsideOfThisContainer = function isOutsideOfThisContainer(e) {
|
|
272
|
+
if (!$options[0].contains(e.target) && $selected[0] !== e.target && !$options[0].classList.contains('folded')) {
|
|
273
|
+
$selected.toggleClass('open');
|
|
274
|
+
$options.toggleClass('folded');
|
|
275
|
+
}
|
|
237
276
|
};
|
|
238
277
|
/**
|
|
239
|
-
*
|
|
240
|
-
* @param {jQueryElement} $container - where the component is rendered
|
|
241
|
-
* @param {Object} [config] - the configuration
|
|
242
|
-
* @param {String} [config.classUri] - the selected class URI (by default)
|
|
243
|
-
* @param {String} [config.placeholder] - when nothing is selected
|
|
244
|
-
* @param {Object[]} [config.classes] - the class tree data, a collection of objects as {uri, label, children}
|
|
245
|
-
* @returns {classSelector} the component itself
|
|
278
|
+
* @typedef {classSelector} the component
|
|
246
279
|
*/
|
|
247
280
|
|
|
248
|
-
function classesSelectorFactory($container, config) {
|
|
249
|
-
var $selected;
|
|
250
|
-
var $options; //create an index to manage classes easily
|
|
251
281
|
|
|
252
|
-
|
|
282
|
+
var classSelector = component({
|
|
253
283
|
/**
|
|
254
|
-
*
|
|
255
|
-
* @param {
|
|
256
|
-
* @returns {
|
|
284
|
+
* Set the selected class
|
|
285
|
+
* @param {String} uri - the class URI to select
|
|
286
|
+
* @returns {classSelector} chains
|
|
287
|
+
* @fires classSelector#change
|
|
257
288
|
*/
|
|
289
|
+
setValue: function setValue(uri) {
|
|
290
|
+
if (this.config.classUri !== uri && !_.isUndefined(classList[uri])) {
|
|
291
|
+
this.config.classUri = uri;
|
|
292
|
+
|
|
293
|
+
if (this.is('rendered') && $selected.length) {
|
|
294
|
+
$selected.text(classList[uri].label).attr({
|
|
295
|
+
title: classList[uri].label,
|
|
296
|
+
'data-uri': uri
|
|
297
|
+
}).data('uri', uri).removeClass('empty');
|
|
298
|
+
/**
|
|
299
|
+
* @event classSelector#change
|
|
300
|
+
* @param {String} uri - the selected class URI
|
|
301
|
+
* @param {Object} class - the class node
|
|
302
|
+
*/
|
|
303
|
+
|
|
304
|
+
this.trigger('change', uri, classList[uri]);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
258
307
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
var item;
|
|
308
|
+
return this;
|
|
309
|
+
},
|
|
262
310
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
311
|
+
/**
|
|
312
|
+
* Get the selected class
|
|
313
|
+
* @returns {String} the selected class URI
|
|
314
|
+
*/
|
|
315
|
+
getValue: function getValue() {
|
|
316
|
+
return this.config.classUri;
|
|
317
|
+
},
|
|
266
318
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
319
|
+
/**
|
|
320
|
+
* Get the selected class node
|
|
321
|
+
* @returns {Object} the node
|
|
322
|
+
*/
|
|
323
|
+
getClassNode: function getClassNode() {
|
|
324
|
+
var node = null;
|
|
270
325
|
|
|
271
|
-
|
|
272
|
-
|
|
326
|
+
if (this.config.classUri && classList[this.config.classUri]) {
|
|
327
|
+
node = classList[this.config.classUri];
|
|
328
|
+
}
|
|
273
329
|
|
|
274
|
-
|
|
275
|
-
|
|
330
|
+
return node;
|
|
331
|
+
},
|
|
276
332
|
|
|
277
|
-
|
|
278
|
-
|
|
333
|
+
/**
|
|
334
|
+
* Empty the component: remove the selection, set back the placeholder
|
|
335
|
+
* @returns {classSelector} chains
|
|
336
|
+
* @fires classSelector#change
|
|
337
|
+
*/
|
|
338
|
+
empty: function empty() {
|
|
339
|
+
if (this.is('rendered') && $selected.length && this.config.classUri) {
|
|
340
|
+
this.config = _.omit(this.config, 'classUri');
|
|
341
|
+
$selected.text(this.config.placeholder).removeAttr('title').data('uri', null).removeAttr('data-uri').addClass('empty');
|
|
342
|
+
this.trigger('change');
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
return this;
|
|
346
|
+
},
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Does the given node exists ?
|
|
350
|
+
*
|
|
351
|
+
* @param {Object|String} node - the node or directly the URI
|
|
352
|
+
* @param {String} [node.uri]
|
|
353
|
+
* @returns {Boolean}
|
|
354
|
+
*/
|
|
355
|
+
hasNode: function hasNode(node) {
|
|
356
|
+
var uri;
|
|
279
357
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
$options.toggleClass('folded');
|
|
358
|
+
if (node && classList) {
|
|
359
|
+
uri = _.isString(node) ? node : node.uri;
|
|
360
|
+
return _.has(classList, uri);
|
|
284
361
|
}
|
|
285
|
-
|
|
362
|
+
|
|
363
|
+
return false;
|
|
364
|
+
},
|
|
365
|
+
|
|
286
366
|
/**
|
|
287
|
-
*
|
|
367
|
+
* Removes the given node
|
|
368
|
+
*
|
|
369
|
+
* @param {Object|String} node - the node or directly the URI
|
|
370
|
+
* @param {String} [node.uri]
|
|
371
|
+
* @returns {Boolean}
|
|
288
372
|
*/
|
|
373
|
+
removeNode: function removeNode(node) {
|
|
374
|
+
var uri;
|
|
289
375
|
|
|
376
|
+
if (this.hasNode(node)) {
|
|
377
|
+
uri = _.isString(node) ? node : node.uri; //if the node is selected, we remove the selection
|
|
290
378
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
* Set the selected class
|
|
294
|
-
* @param {String} uri - the class URI to select
|
|
295
|
-
* @returns {classSelector} chains
|
|
296
|
-
* @fires classSelector#change
|
|
297
|
-
*/
|
|
298
|
-
setValue: function setValue(uri) {
|
|
299
|
-
if (this.config.classUri !== uri && !_.isUndefined(classList[uri])) {
|
|
300
|
-
this.config.classUri = uri;
|
|
301
|
-
|
|
302
|
-
if (this.is('rendered') && $selected.length) {
|
|
303
|
-
$selected.text(classList[uri].label).attr({
|
|
304
|
-
title: classList[uri].label,
|
|
305
|
-
'data-uri': uri
|
|
306
|
-
}).data('uri', uri).removeClass('empty');
|
|
307
|
-
/**
|
|
308
|
-
* @event classSelector#change
|
|
309
|
-
* @param {String} uri - the selected class URI
|
|
310
|
-
* @param {Object} class - the class node
|
|
311
|
-
*/
|
|
312
|
-
|
|
313
|
-
this.trigger('change', uri, classList[uri]);
|
|
314
|
-
}
|
|
379
|
+
if (uri === this.config.classUri) {
|
|
380
|
+
this.empty();
|
|
315
381
|
}
|
|
316
382
|
|
|
317
|
-
|
|
318
|
-
},
|
|
319
|
-
|
|
320
|
-
/**
|
|
321
|
-
* Get the selected class
|
|
322
|
-
* @returns {String} the selected class URI
|
|
323
|
-
*/
|
|
324
|
-
getValue: function getValue() {
|
|
325
|
-
return this.config.classUri;
|
|
326
|
-
},
|
|
327
|
-
|
|
328
|
-
/**
|
|
329
|
-
* Get the selected class node
|
|
330
|
-
* @returns {Object} the node
|
|
331
|
-
*/
|
|
332
|
-
getClassNode: function getClassNode() {
|
|
333
|
-
var node = null;
|
|
334
|
-
|
|
335
|
-
if (this.config.classUri && classList[this.config.classUri]) {
|
|
336
|
-
node = classList[this.config.classUri];
|
|
337
|
-
}
|
|
383
|
+
classList = _.omit(classList, uri);
|
|
338
384
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
/**
|
|
343
|
-
* Empty the component: remove the selection, set back the placeholder
|
|
344
|
-
* @returns {classSelector} chains
|
|
345
|
-
* @fires classSelector#change
|
|
346
|
-
*/
|
|
347
|
-
empty: function empty() {
|
|
348
|
-
if (this.is('rendered') && $selected.length && this.config.classUri) {
|
|
349
|
-
this.config = _.omit(this.config, 'classUri');
|
|
350
|
-
$selected.text(this.config.placeholder).removeAttr('title').data('uri', null).removeAttr('data-uri').addClass('empty');
|
|
351
|
-
this.trigger('change');
|
|
385
|
+
if (this.is('rendered')) {
|
|
386
|
+
$$1('[data-uri="' + uri + '"]', this.getElement()).parent('li').remove();
|
|
352
387
|
}
|
|
353
388
|
|
|
354
|
-
return this;
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
/**
|
|
358
|
-
* Does the given node exists ?
|
|
359
|
-
*
|
|
360
|
-
* @param {Object|String} node - the node or directly the URI
|
|
361
|
-
* @param {String} [node.uri]
|
|
362
|
-
* @returns {Boolean}
|
|
363
|
-
*/
|
|
364
|
-
hasNode: function hasNode(node) {
|
|
365
|
-
var uri;
|
|
366
|
-
|
|
367
|
-
if (node && classList) {
|
|
368
|
-
uri = _.isString(node) ? node : node.uri;
|
|
369
|
-
return _.has(classList, uri);
|
|
370
|
-
}
|
|
389
|
+
return !this.hasNode(node);
|
|
390
|
+
}
|
|
371
391
|
|
|
372
|
-
|
|
373
|
-
|
|
392
|
+
return false;
|
|
393
|
+
},
|
|
374
394
|
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
395
|
+
/**
|
|
396
|
+
* Add a node.
|
|
397
|
+
*
|
|
398
|
+
* @param {Object} node - the node to add
|
|
399
|
+
* @param {String} node.uri
|
|
400
|
+
* @param {String} node.label
|
|
401
|
+
* @param {Object[]} node.children - let's you add a sub hierarchy
|
|
402
|
+
* @param {String} [parentUri] - where to append the new node
|
|
403
|
+
* @returns {classSelector} chains
|
|
404
|
+
*/
|
|
405
|
+
addNode: function addNode(node, parentUri) {
|
|
406
|
+
var subTree;
|
|
407
|
+
var $parentNode;
|
|
384
408
|
|
|
385
|
-
|
|
386
|
-
|
|
409
|
+
if (this.is('rendered') && node && !this.hasNode(node)) {
|
|
410
|
+
//this will also update the classList
|
|
411
|
+
subTree = buildTree([node]);
|
|
387
412
|
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
413
|
+
if (parentUri) {
|
|
414
|
+
$parentNode = $$1('[data-uri="' + parentUri + '"]', $options);
|
|
415
|
+
}
|
|
391
416
|
|
|
392
|
-
|
|
417
|
+
if (!$parentNode || !$parentNode.length) {
|
|
418
|
+
$parentNode = $$1('[data-uri]:first-child', $options);
|
|
419
|
+
} //attach the sub tree
|
|
393
420
|
|
|
394
|
-
if (this.is('rendered')) {
|
|
395
|
-
$$1('[data-uri="' + uri + '"]', this.getElement()).parent('li').remove();
|
|
396
|
-
}
|
|
397
421
|
|
|
398
|
-
|
|
422
|
+
if ($parentNode.parent('li').children('ul').length) {
|
|
423
|
+
$parentNode.parent('li').children('ul').append(subTree);
|
|
424
|
+
} else {
|
|
425
|
+
$parentNode.parent('li').append('<ul>' + subTree + '</ul>');
|
|
399
426
|
}
|
|
427
|
+
}
|
|
400
428
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
/**
|
|
405
|
-
* Add a node.
|
|
406
|
-
*
|
|
407
|
-
* @param {Object} node - the node to add
|
|
408
|
-
* @param {String} node.uri
|
|
409
|
-
* @param {String} node.label
|
|
410
|
-
* @param {Object[]} node.children - let's you add a sub hierarchy
|
|
411
|
-
* @param {String} [parentUri] - where to append the new node
|
|
412
|
-
* @returns {classSelector} chains
|
|
413
|
-
*/
|
|
414
|
-
addNode: function addNode(node, parentUri) {
|
|
415
|
-
var subTree;
|
|
416
|
-
var $parentNode;
|
|
417
|
-
|
|
418
|
-
if (this.is('rendered') && node && !this.hasNode(node)) {
|
|
419
|
-
//this will also update the classList
|
|
420
|
-
subTree = buildTree([node]);
|
|
421
|
-
|
|
422
|
-
if (parentUri) {
|
|
423
|
-
$parentNode = $$1('[data-uri="' + parentUri + '"]', $options);
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
if (!$parentNode || !$parentNode.length) {
|
|
427
|
-
$parentNode = $$1('[data-uri]:first-child', $options);
|
|
428
|
-
} //attach the sub tree
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
if ($parentNode.parent('li').children('ul').length) {
|
|
432
|
-
$parentNode.parent('li').children('ul').append(subTree);
|
|
433
|
-
} else {
|
|
434
|
-
$parentNode.parent('li').append('<ul>' + subTree + '</ul>');
|
|
435
|
-
}
|
|
436
|
-
}
|
|
429
|
+
return this;
|
|
430
|
+
},
|
|
437
431
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
updateNode: function updateNode(node) {
|
|
450
|
-
if (node && node.uri && this.hasNode(node) && classList[node.uri].label !== node.label) {
|
|
451
|
-
classList[node.uri].label = node.label;
|
|
452
|
-
|
|
453
|
-
if (this.is('rendered')) {
|
|
454
|
-
$$1('[data-uri="' + node.uri + '"]', this.getElement()).attr('title', node.label).text(node.label);
|
|
455
|
-
}
|
|
456
|
-
}
|
|
432
|
+
/**
|
|
433
|
+
* Update a node (the label for now)
|
|
434
|
+
*
|
|
435
|
+
* @param {Object} node - the node to update
|
|
436
|
+
* @param {String} node.uri
|
|
437
|
+
* @param {String} node.label
|
|
438
|
+
* @returns {classSelector} chains
|
|
439
|
+
*/
|
|
440
|
+
updateNode: function updateNode(node) {
|
|
441
|
+
if (node && node.uri && this.hasNode(node) && classList[node.uri].label !== node.label) {
|
|
442
|
+
classList[node.uri].label = node.label;
|
|
457
443
|
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
/**
|
|
462
|
-
* Update multiple nodes, recursively
|
|
463
|
-
* @see {classSelector#updateNode}
|
|
464
|
-
*
|
|
465
|
-
* @param {Object[]} node - the node to update
|
|
466
|
-
* @param {String} node.uri
|
|
467
|
-
* @param {String} node.label
|
|
468
|
-
* @param {Object[]} node.children
|
|
469
|
-
* @returns {classSelector} chains
|
|
470
|
-
*/
|
|
471
|
-
updateNodes: function updateNodes(nodes) {
|
|
472
|
-
var self = this;
|
|
473
|
-
|
|
474
|
-
_.forEach(nodes, function (node) {
|
|
475
|
-
if (node.children) {
|
|
476
|
-
self.updateNodes(node.children);
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
self.updateNode(node);
|
|
480
|
-
});
|
|
481
|
-
|
|
482
|
-
return this;
|
|
444
|
+
if (this.is('rendered')) {
|
|
445
|
+
$$1('[data-uri="' + node.uri + '"]', this.getElement()).attr('title', node.label).text(node.label);
|
|
446
|
+
}
|
|
483
447
|
}
|
|
484
|
-
}, defaultConfig).setTemplate(selectorTpl).on('init', function () {
|
|
485
|
-
//generate the tree
|
|
486
|
-
this.config.tree = buildTree(this.config.classes);
|
|
487
448
|
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
this.config.label = classList[this.config.classUri].label;
|
|
491
|
-
}
|
|
449
|
+
return this;
|
|
450
|
+
},
|
|
492
451
|
|
|
493
|
-
|
|
494
|
-
|
|
452
|
+
/**
|
|
453
|
+
* Update multiple nodes, recursively
|
|
454
|
+
* @see {classSelector#updateNode}
|
|
455
|
+
*
|
|
456
|
+
* @param {Object[]} node - the node to update
|
|
457
|
+
* @param {String} node.uri
|
|
458
|
+
* @param {String} node.label
|
|
459
|
+
* @param {Object[]} node.children
|
|
460
|
+
* @returns {classSelector} chains
|
|
461
|
+
*/
|
|
462
|
+
updateNodes: function updateNodes(nodes) {
|
|
495
463
|
var self = this;
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
$options.toggleClass('folded');
|
|
504
|
-
});
|
|
505
|
-
$options.on('click', 'a', function (e) {
|
|
506
|
-
e.preventDefault();
|
|
507
|
-
self.setValue($$1(this).data('uri'));
|
|
508
|
-
$selected.toggleClass('open');
|
|
509
|
-
$options.toggleClass('folded');
|
|
464
|
+
|
|
465
|
+
_.forEach(nodes, function (node) {
|
|
466
|
+
if (node.children) {
|
|
467
|
+
self.updateNodes(node.children);
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
self.updateNode(node);
|
|
510
471
|
});
|
|
511
|
-
}).on('destroy', function () {
|
|
512
|
-
classList = {};
|
|
513
|
-
window.removeEventListener('click', isOutsideOfThisContainer);
|
|
514
|
-
});
|
|
515
472
|
|
|
516
|
-
|
|
517
|
-
|
|
473
|
+
return this;
|
|
474
|
+
}
|
|
475
|
+
}, defaultConfig).setTemplate(selectorTpl).on('init', function () {
|
|
476
|
+
//generate the tree
|
|
477
|
+
this.config.tree = buildTree(this.config.classes);
|
|
478
|
+
|
|
479
|
+
if (this.config.classUri && classList[this.config.classUri]) {
|
|
480
|
+
//set the default label
|
|
481
|
+
this.config.label = classList[this.config.classUri].label;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
this.render($container);
|
|
485
|
+
}).on('render', function () {
|
|
486
|
+
var self = this;
|
|
487
|
+
var $component = this.getElement();
|
|
488
|
+
$selected = $$1('.selected', $component);
|
|
489
|
+
$options = $$1('.options', $component);
|
|
490
|
+
window.addEventListener('click', isOutsideOfThisContainer);
|
|
491
|
+
$selected.on('click', function (e) {
|
|
492
|
+
e.preventDefault();
|
|
493
|
+
$selected.toggleClass('open');
|
|
494
|
+
$options.toggleClass('folded');
|
|
518
495
|
});
|
|
496
|
+
$options.on('click', 'a', function (e) {
|
|
497
|
+
e.preventDefault();
|
|
498
|
+
self.setValue($$1(this).data('uri'));
|
|
499
|
+
$selected.toggleClass('open');
|
|
500
|
+
$options.toggleClass('folded');
|
|
501
|
+
});
|
|
502
|
+
}).on('destroy', function () {
|
|
503
|
+
classList = {};
|
|
504
|
+
window.removeEventListener('click', isOutsideOfThisContainer);
|
|
505
|
+
});
|
|
519
506
|
|
|
520
|
-
|
|
521
|
-
|
|
507
|
+
_.defer(function () {
|
|
508
|
+
classSelector.init(config);
|
|
509
|
+
});
|
|
510
|
+
|
|
511
|
+
return classSelector;
|
|
512
|
+
}
|
|
522
513
|
|
|
523
|
-
|
|
514
|
+
return classesSelectorFactory;
|
|
524
515
|
|
|
525
516
|
});
|