@oat-sa/tao-core-ui 1.58.1 → 1.58.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actionbar.js +386 -395
- package/dist/adder.js +21 -19
- package/dist/animable/absorbable/absorbable.js +204 -213
- package/dist/animable/absorbable/css/absorb.css +1 -0
- package/dist/animable/absorbable/css/absorb.css.map +1 -1
- package/dist/animable/pulsable/pulsable.js +168 -177
- package/dist/autocomplete/css/autocomplete.css +1 -0
- package/dist/autocomplete/css/autocomplete.css.map +1 -1
- package/dist/autocomplete.js +68 -66
- package/dist/badge/badge.js +188 -197
- package/dist/badge/css/badge.css +1 -0
- package/dist/badge/css/badge.css.map +1 -1
- package/dist/breadcrumbs.js +275 -284
- package/dist/btngrouper.js +5 -5
- package/dist/bulkActionPopup.js +490 -495
- package/dist/button.js +283 -291
- package/dist/cascadingComboBox.js +249 -258
- package/dist/ckeditor/ckConfigurator.js +26 -19
- package/dist/ckeditor/dtdHandler.js +11 -9
- package/dist/class/selector.js +441 -450
- package/dist/component/resizable.js +1 -1
- package/dist/component/windowed.js +285 -294
- package/dist/component.js +419 -428
- package/dist/contextualPopup.js +417 -426
- package/dist/dashboard.js +300 -309
- package/dist/datalist.js +753 -762
- package/dist/datatable/filterStrategy/multiple.js +1 -1
- package/dist/datatable/filterStrategy/single.js +1 -1
- package/dist/datatable.js +1527 -1550
- package/dist/dateRange/dateRange.js +393 -402
- package/dist/datetime/picker.js +665 -672
- package/dist/deleter.js +368 -377
- package/dist/destination/selector.js +286 -295
- package/dist/dialog/alert.js +3 -3
- package/dist/dialog/confirm.js +1 -1
- package/dist/dialog/confirmDelete.js +216 -225
- package/dist/dialog.js +650 -654
- package/dist/disabler.js +8 -8
- package/dist/documentViewer/providers/pdfViewer/fallback/viewer.js +166 -175
- package/dist/documentViewer/providers/pdfViewer/pdfjs/findBar.js +518 -527
- package/dist/documentViewer/providers/pdfViewer/pdfjs/pageView.js +380 -389
- package/dist/documentViewer/providers/pdfViewer/pdfjs/searchEngine.js +539 -548
- package/dist/documentViewer/providers/pdfViewer/pdfjs/viewer.js +369 -378
- package/dist/documentViewer/providers/pdfViewer.js +184 -193
- package/dist/documentViewer.js +292 -301
- package/dist/dropdown.js +383 -392
- package/dist/durationer.js +5 -5
- package/dist/dynamicComponent.js +597 -598
- package/dist/feedback.js +356 -362
- package/dist/figure/FigureStateActive.js +117 -108
- package/dist/filesender.js +2 -2
- package/dist/filter.js +230 -239
- package/dist/form/dropdownForm.js +355 -357
- package/dist/form/form.js +919 -690
- package/dist/form/simpleForm.js +1 -1
- package/dist/form/validator/renderer.js +233 -235
- package/dist/form/validator/validator.js +257 -189
- package/dist/form/widget/definitions.js +1 -1
- package/dist/form/widget/providers/checkBox.js +254 -259
- package/dist/form/widget/providers/comboBox.js +187 -192
- package/dist/form/widget/providers/default.js +8 -9
- package/dist/form/widget/providers/hidden.js +170 -179
- package/dist/form/widget/providers/hiddenBox.js +262 -267
- package/dist/form/widget/providers/radioBox.js +216 -225
- package/dist/form/widget/providers/textArea.js +187 -196
- package/dist/form/widget/providers/textBox.js +2 -3
- package/dist/form/widget/widget.js +473 -475
- package/dist/formValidator/formValidator.js +1 -1
- package/dist/formValidator/highlighters/message.js +1 -1
- package/dist/generis/form/form.js +314 -323
- package/dist/generis/validator/validator.js +209 -218
- package/dist/generis/widget/checkBox/checkBox.js +218 -227
- package/dist/generis/widget/comboBox/comboBox.js +179 -188
- package/dist/generis/widget/hiddenBox/hiddenBox.js +220 -229
- package/dist/generis/widget/textBox/textBox.js +169 -178
- package/dist/generis/widget/widget.js +246 -255
- package/dist/groupedComboBox.js +222 -231
- package/dist/groupvalidator.js +2 -2
- package/dist/highlighter.js +967 -958
- package/dist/image/ImgStateActive/helper.js +7 -5
- package/dist/image/ImgStateActive/initHelper.js +49 -43
- package/dist/image/ImgStateActive/initMediaEditor.js +24 -20
- package/dist/image/ImgStateActive/mediaSizer.js +14 -12
- package/dist/image/ImgStateActive.js +72 -70
- package/dist/incrementer.js +6 -6
- package/dist/inplacer.js +6 -6
- package/dist/itemButtonList/css/item-button-list.css +1 -0
- package/dist/itemButtonList/css/item-button-list.css.map +1 -1
- package/dist/itemButtonList.js +439 -435
- package/dist/keyNavigation/navigableDomElement.js +51 -38
- package/dist/keyNavigation/navigator.js +85 -70
- package/dist/listbox.js +460 -469
- package/dist/liststyler.js +8 -8
- package/dist/loadingButton/loadingButton.js +209 -218
- package/dist/lock.js +476 -485
- package/dist/login/login.js +475 -484
- package/dist/maths/calculator/basicCalculator.js +235 -244
- package/dist/maths/calculator/calculatorComponent.js +3 -3
- package/dist/maths/calculator/core/board.js +772 -781
- package/dist/maths/calculator/core/expression.js +476 -485
- package/dist/maths/calculator/core/labels.js +228 -237
- package/dist/maths/calculator/core/tokenizer.js +1 -1
- package/dist/maths/calculator/core/tokens.js +163 -170
- package/dist/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +244 -253
- package/dist/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +279 -288
- package/dist/maths/calculator/scientificCalculator.js +327 -336
- package/dist/mediaEditor/mediaEditorComponent.js +238 -245
- package/dist/mediaEditor/plugins/mediaAlignment/helper.js +7 -7
- package/dist/mediaEditor/plugins/mediaAlignment/mediaAlignmentComponent.js +229 -235
- package/dist/mediaEditor/plugins/mediaDimension/mediaDimensionComponent.js +580 -589
- package/dist/mediaplayer/players/html5.js +666 -675
- package/dist/mediaplayer/players/youtube.js +419 -424
- package/dist/mediaplayer/support.js +11 -10
- package/dist/mediaplayer/utils/reminder.js +14 -13
- package/dist/mediaplayer/utils/timeObserver.js +10 -11
- package/dist/mediaplayer/youtubeManager.js +164 -145
- package/dist/mediaplayer.js +1565 -1520
- package/dist/mediasizer.js +669 -678
- package/dist/modal.js +10 -17
- package/dist/pageSizeSelector.js +219 -228
- package/dist/pagination/providers/pages.js +280 -289
- package/dist/pagination/providers/simple.js +192 -201
- package/dist/previewer.js +30 -30
- package/dist/progressbar.js +4 -4
- package/dist/report.js +347 -356
- package/dist/resource/filters.js +271 -280
- package/dist/resource/list.js +1264 -1273
- package/dist/resource/selector.js +865 -874
- package/dist/resource/tree.js +1483 -1492
- package/dist/resourcemgr/fileBrowser.js +564 -569
- package/dist/resourcemgr/filePreview.js +16 -16
- package/dist/resourcemgr/fileSelector.js +515 -524
- package/dist/resourcemgr/util/updatePermissions.js +2 -2
- package/dist/resourcemgr.js +306 -315
- package/dist/searchModal/advancedSearch.js +796 -767
- package/dist/searchModal.js +114 -91
- package/dist/switch/switch.js +298 -307
- package/dist/tabs.js +598 -575
- package/dist/taskQueue/status.js +312 -321
- package/dist/taskQueue/table.js +375 -384
- package/dist/taskQueue/taskQueueModel.js +488 -472
- package/dist/taskQueueButton/taskable.js +264 -273
- package/dist/taskQueueButton/treeButton.js +189 -198
- package/dist/themeLoader.js +24 -23
- package/dist/themes.js +1 -1
- package/dist/toggler.js +3 -3
- package/dist/tooltip.js +295 -304
- package/dist/transformer.js +2 -2
- package/dist/tristateCheckboxGroup.js +311 -320
- package/dist/uploader.js +687 -696
- package/dist/validator/Report.js +1 -1
- package/dist/validator/Validator.js +3 -3
- package/dist/validator/validators.js +9 -9
- package/dist/validator.js +240 -230
- package/dist/waitForMedia.js +1 -1
- package/package.json +3 -3
- package/src/animable/absorbable/css/absorb.css +1 -0
- package/src/animable/absorbable/css/absorb.css.map +1 -1
- package/src/autocomplete/css/autocomplete.css +1 -0
- package/src/autocomplete/css/autocomplete.css.map +1 -1
- package/src/badge/css/badge.css +1 -0
- package/src/badge/css/badge.css.map +1 -1
- package/src/ckeditor/ckConfigurator.js +4 -0
- package/src/itemButtonList/css/item-button-list.css +1 -0
- package/src/itemButtonList/css/item-button-list.css.map +1 -1
- package/src/.DS_Store +0 -0
- package/src/css/basic.css +0 -7826
- package/src/css/basic.css.map +0 -1
- package/src/css/ckeditor/skins/tao/css/dialog.css +0 -950
- package/src/css/ckeditor/skins/tao/css/dialog.css.map +0 -1
- package/src/css/ckeditor/skins/tao/css/editor.css +0 -1850
- package/src/css/ckeditor/skins/tao/css/editor.css.map +0 -1
- package/src/scss/.DS_Store +0 -0
- package/src/scss/basic.scss +0 -16
- package/src/scss/ckeditor/skins/tao/scss/dialog.scss +0 -763
- package/src/scss/ckeditor/skins/tao/scss/editor.scss +0 -111
- package/src/scss/ckeditor/skins/tao/scss/inc/_ck-icons.scss +0 -59
- package/src/scss/ckeditor/skins/tao/scss/inc/_colorpanel.scss +0 -118
- package/src/scss/ckeditor/skins/tao/scss/inc/_elementspath.scss +0 -69
- package/src/scss/ckeditor/skins/tao/scss/inc/_mainui.scss +0 -194
- package/src/scss/ckeditor/skins/tao/scss/inc/_menu.scss +0 -181
- package/src/scss/ckeditor/skins/tao/scss/inc/_panel.scss +0 -200
- package/src/scss/ckeditor/skins/tao/scss/inc/_presets.scss +0 -32
- package/src/scss/ckeditor/skins/tao/scss/inc/_reset.scss +0 -101
- package/src/scss/ckeditor/skins/tao/scss/inc/_richcombo.scss +0 -213
- package/src/scss/ckeditor/skins/tao/scss/inc/_tao.scss +0 -59
- package/src/scss/ckeditor/skins/tao/scss/inc/_toolbar.scss +0 -301
- package/src/scss/font/source-sans-pro/source-sans-pro-italic.eot +0 -0
- package/src/scss/font/source-sans-pro/source-sans-pro-italic.eot.b64 +0 -1
- package/src/scss/font/source-sans-pro/source-sans-pro-italic.woff +0 -0
- package/src/scss/font/source-sans-pro/source-sans-pro-italic.woff.b64 +0 -1
- package/src/scss/font/source-sans-pro/source-sans-pro-regular.eot +0 -0
- package/src/scss/font/source-sans-pro/source-sans-pro-regular.eot.b64 +0 -1
- package/src/scss/font/source-sans-pro/source-sans-pro-regular.woff +0 -0
- package/src/scss/font/source-sans-pro/source-sans-pro-regular.woff.b64 +0 -1
- package/src/scss/font/source-sans-pro/source-sans-pro-semibold-italic.eot +0 -0
- package/src/scss/font/source-sans-pro/source-sans-pro-semibold-italic.eot.b64 +0 -1
- package/src/scss/font/source-sans-pro/source-sans-pro-semibold-italic.woff +0 -0
- package/src/scss/font/source-sans-pro/source-sans-pro-semibold-italic.woff.b64 +0 -1
- package/src/scss/font/source-sans-pro/source-sans-pro-semibold.eot +0 -0
- package/src/scss/font/source-sans-pro/source-sans-pro-semibold.eot.b64 +0 -1
- package/src/scss/font/source-sans-pro/source-sans-pro-semibold.woff +0 -0
- package/src/scss/font/source-sans-pro/source-sans-pro-semibold.woff.b64 +0 -1
- package/src/scss/font/tao/tao.eot +0 -0
- package/src/scss/font/tao/tao.svg +0 -235
- package/src/scss/font/tao/tao.ttf +0 -0
- package/src/scss/font/tao/tao.woff +0 -0
- package/src/scss/inc/_base.scss +0 -496
- package/src/scss/inc/_bootstrap.scss +0 -6
- package/src/scss/inc/_buttons.scss +0 -114
- package/src/scss/inc/_colors.scss +0 -88
- package/src/scss/inc/_feedback.scss +0 -150
- package/src/scss/inc/_flex-grid.scss +0 -15
- package/src/scss/inc/_fonts.scss +0 -4
- package/src/scss/inc/_forms.scss +0 -827
- package/src/scss/inc/_functions.scss +0 -283
- package/src/scss/inc/_grid.scss +0 -66
- package/src/scss/inc/_jquery.nouislider.scss +0 -254
- package/src/scss/inc/_normalize.scss +0 -528
- package/src/scss/inc/_report.scss +0 -68
- package/src/scss/inc/_secondary-properties.scss +0 -89
- package/src/scss/inc/_select2.scss +0 -634
- package/src/scss/inc/_toolbars.scss +0 -155
- package/src/scss/inc/_tooltip.scss +0 -312
- package/src/scss/inc/_variables.scss +0 -21
- package/src/scss/inc/base/_highlight.scss +0 -5
- package/src/scss/inc/base/_list-style.scss +0 -59
- package/src/scss/inc/base/_svg.scss +0 -3
- package/src/scss/inc/base/_table.scss +0 -63
- package/src/scss/inc/fonts/_source-sans-pro.scss +0 -29
- package/src/scss/inc/fonts/_tao-icon-classes.scss +0 -226
- package/src/scss/inc/fonts/_tao-icon-def.scss +0 -12
- package/src/scss/inc/fonts/_tao-icon-vars.scss +0 -240
|
@@ -1,221 +1,289 @@
|
|
|
1
1
|
define(['lodash', 'i18n'], function (_, __) { 'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
_ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;
|
|
4
|
+
__ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
15
|
-
* GNU General Public License for more details.
|
|
16
|
-
*
|
|
17
|
-
* You should have received a copy of the GNU General Public License
|
|
18
|
-
* along with this program; if not, write to the Free Software
|
|
19
|
-
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
20
|
-
*
|
|
21
|
-
* Copyright (c) 2019 Open Assessment Technologies SA ;
|
|
22
|
-
*/
|
|
23
|
-
/**
|
|
24
|
-
* @typedef {Object} validationRule Defines a validation rule to apply on a value.
|
|
25
|
-
* @property {String} id - The validation identifier
|
|
26
|
-
* @property {RegExp|Function|String|String[]} predicate - The validation rule to apply on the value.
|
|
27
|
-
* It could be either a RegExp or a Function.
|
|
28
|
-
* The function must return a boolean value,
|
|
29
|
-
* it can wrap it in a Promise too.
|
|
30
|
-
* @property {String} [message] - The message returned in case of failed validation
|
|
31
|
-
* @property {Number} [precedence] - The precedence order for sorting
|
|
32
|
-
*/
|
|
6
|
+
function _unsupportedIterableToArray(o, minLen) {
|
|
7
|
+
if (!o) return;
|
|
8
|
+
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
9
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
10
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
11
|
+
if (n === "Map" || n === "Set") return Array.from(o);
|
|
12
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
13
|
+
}
|
|
33
14
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
* @property {validationRule[]} validations - The list of validations to apply
|
|
37
|
-
* @property {String} defaultMessage - The default message returned when a validation fails and no message is set
|
|
38
|
-
*/
|
|
15
|
+
function _arrayLikeToArray(arr, len) {
|
|
16
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
39
17
|
|
|
40
|
-
|
|
41
|
-
* Defaults config for the validator
|
|
42
|
-
* @type {validatorConfig}
|
|
43
|
-
*/
|
|
18
|
+
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
44
19
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
* @param {String} value
|
|
51
|
-
* @param {validationRule} validation
|
|
52
|
-
* @returns {Boolean|Promise}
|
|
53
|
-
*/
|
|
20
|
+
return arr2;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function _createForOfIteratorHelper(o, allowArrayLike) {
|
|
24
|
+
var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
|
|
54
25
|
|
|
55
|
-
|
|
56
|
-
if (
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
26
|
+
if (!it) {
|
|
27
|
+
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
|
|
28
|
+
if (it) o = it;
|
|
29
|
+
var i = 0;
|
|
30
|
+
|
|
31
|
+
var F = function () {};
|
|
32
|
+
|
|
33
|
+
return {
|
|
34
|
+
s: F,
|
|
35
|
+
n: function () {
|
|
36
|
+
if (i >= o.length) return {
|
|
37
|
+
done: true
|
|
38
|
+
};
|
|
39
|
+
return {
|
|
40
|
+
done: false,
|
|
41
|
+
value: o[i++]
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
e: function (e) {
|
|
45
|
+
throw e;
|
|
46
|
+
},
|
|
47
|
+
f: F
|
|
48
|
+
};
|
|
62
49
|
}
|
|
63
50
|
|
|
64
|
-
|
|
51
|
+
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
65
52
|
}
|
|
66
|
-
/**
|
|
67
|
-
* Compares validation rules
|
|
68
|
-
* @param {validationRule} a
|
|
69
|
-
* @param {validationRule} b
|
|
70
|
-
* @returns {Number}
|
|
71
|
-
*/
|
|
72
53
|
|
|
54
|
+
var normalCompletion = true,
|
|
55
|
+
didErr = false,
|
|
56
|
+
err;
|
|
57
|
+
return {
|
|
58
|
+
s: function () {
|
|
59
|
+
it = it.call(o);
|
|
60
|
+
},
|
|
61
|
+
n: function () {
|
|
62
|
+
var step = it.next();
|
|
63
|
+
normalCompletion = step.done;
|
|
64
|
+
return step;
|
|
65
|
+
},
|
|
66
|
+
e: function (e) {
|
|
67
|
+
didErr = true;
|
|
68
|
+
err = e;
|
|
69
|
+
},
|
|
70
|
+
f: function () {
|
|
71
|
+
try {
|
|
72
|
+
if (!normalCompletion && it.return != null) it.return();
|
|
73
|
+
} finally {
|
|
74
|
+
if (didErr) throw err;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @typedef {Object} validationRule Defines a validation rule to apply on a value.
|
|
82
|
+
* @property {String} id - The validation identifier
|
|
83
|
+
* @property {RegExp|Function|String|String[]} predicate - The validation rule to apply on the value.
|
|
84
|
+
* It could be either a RegExp or a Function.
|
|
85
|
+
* The function must return a boolean value,
|
|
86
|
+
* it can wrap it in a Promise too.
|
|
87
|
+
* @property {String} [message] - The message returned in case of failed validation
|
|
88
|
+
* @property {Number} [precedence] - The precedence order for sorting
|
|
89
|
+
*/
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* @typedef {Object} validatorConfig Defines the config entries available to setup a form widget validator
|
|
93
|
+
* @property {validationRule[]} validations - The list of validations to apply
|
|
94
|
+
* @property {String} defaultMessage - The default message returned when a validation fails and no message is set
|
|
95
|
+
*/
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Defaults config for the validator
|
|
99
|
+
* @type {validatorConfig}
|
|
100
|
+
*/
|
|
73
101
|
|
|
74
|
-
|
|
75
|
-
|
|
102
|
+
var defaults = {
|
|
103
|
+
defaultMessage: __('Invalid input')
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Validates a value
|
|
107
|
+
* @param {String} value
|
|
108
|
+
* @param {validationRule} validation
|
|
109
|
+
* @returns {Boolean|Promise}
|
|
110
|
+
*/
|
|
111
|
+
|
|
112
|
+
function validateValue(value, validation) {
|
|
113
|
+
if (validation.predicate instanceof RegExp) {
|
|
114
|
+
return validation.predicate.test(value);
|
|
115
|
+
} else if (_.isFunction(validation.predicate)) {
|
|
116
|
+
return validation.predicate(value);
|
|
117
|
+
} else if (_.isArray(validation.predicate)) {
|
|
118
|
+
return _.indexOf(validation.predicate, value) > -1;
|
|
76
119
|
}
|
|
120
|
+
|
|
121
|
+
return validation.predicate === value;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Compares validation rules
|
|
125
|
+
* @param {validationRule} a
|
|
126
|
+
* @param {validationRule} b
|
|
127
|
+
* @returns {Number}
|
|
128
|
+
*/
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
function compareRule(a, b) {
|
|
132
|
+
return (a && a.precedence || 0) - (b && b.precedence || 0);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Creates a simple form widget's validator.
|
|
136
|
+
* It manages and applies a collection of validation rules on a value.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* const validator = validatorFactory({
|
|
140
|
+
* defaultMessage: 'An error occurred!',
|
|
141
|
+
* validations: [{
|
|
142
|
+
* id: 'numeric',
|
|
143
|
+
* message: 'This field must be numerical',
|
|
144
|
+
* predicate: /^\d+$/,
|
|
145
|
+
* precedence: 2
|
|
146
|
+
* }, {
|
|
147
|
+
* id: 'required',
|
|
148
|
+
* message: 'This field is required',
|
|
149
|
+
* predicate: value => value.length > 0,
|
|
150
|
+
* precedence: 1
|
|
151
|
+
* }, {
|
|
152
|
+
* id: 'domain',
|
|
153
|
+
* predicate: value => (parseInt(value, 10) || 0) <= 10,
|
|
154
|
+
* precedence: 3
|
|
155
|
+
* }]
|
|
156
|
+
* });
|
|
157
|
+
*
|
|
158
|
+
* validator.validate('100')
|
|
159
|
+
* .then(() => {
|
|
160
|
+
* // ...
|
|
161
|
+
* })
|
|
162
|
+
* .catch(messages => {
|
|
163
|
+
* // ...
|
|
164
|
+
* });
|
|
165
|
+
*
|
|
166
|
+
* @param {validatorConfig} config
|
|
167
|
+
* @param {validationRule[]} [config.validations] - The list of validation rules to apply
|
|
168
|
+
* @param {String} [config.defaultMessage] - The default message returned when a validation fails and no message is set
|
|
169
|
+
* @returns {validator}
|
|
170
|
+
*/
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
function validatorFactory(config) {
|
|
174
|
+
var validations = new Map();
|
|
77
175
|
/**
|
|
78
|
-
*
|
|
79
|
-
* It manages and applies a collection of validation rules on a value.
|
|
80
|
-
*
|
|
81
|
-
* @example
|
|
82
|
-
* const validator = validatorFactory({
|
|
83
|
-
* defaultMessage: 'An error occurred!',
|
|
84
|
-
* validations: [{
|
|
85
|
-
* id: 'numeric',
|
|
86
|
-
* message: 'This field must be numerical',
|
|
87
|
-
* predicate: /^\d+$/,
|
|
88
|
-
* precedence: 2
|
|
89
|
-
* }, {
|
|
90
|
-
* id: 'required',
|
|
91
|
-
* message: 'This field is required',
|
|
92
|
-
* predicate: value => value.length > 0,
|
|
93
|
-
* precedence: 1
|
|
94
|
-
* }, {
|
|
95
|
-
* id: 'domain',
|
|
96
|
-
* predicate: value => (parseInt(value, 10) || 0) <= 10,
|
|
97
|
-
* precedence: 3
|
|
98
|
-
* }]
|
|
99
|
-
* });
|
|
100
|
-
*
|
|
101
|
-
* validator.validate('100')
|
|
102
|
-
* .then(() => {
|
|
103
|
-
* // ...
|
|
104
|
-
* })
|
|
105
|
-
* .catch(messages => {
|
|
106
|
-
* // ...
|
|
107
|
-
* });
|
|
108
|
-
*
|
|
109
|
-
* @param {validatorConfig} config
|
|
110
|
-
* @param {validationRule[]} [config.validations] - The list of validation rules to apply
|
|
111
|
-
* @param {String} [config.defaultMessage] - The default message returned when a validation fails and no message is set
|
|
112
|
-
* @returns {validator}
|
|
176
|
+
* @typedef {Object} validator
|
|
113
177
|
*/
|
|
114
178
|
|
|
115
|
-
|
|
116
|
-
function validatorFactory(config) {
|
|
117
|
-
const validations = new Map();
|
|
179
|
+
var validator = {
|
|
118
180
|
/**
|
|
119
|
-
*
|
|
181
|
+
* Runs all validation rules on a value
|
|
182
|
+
* @param {String} value
|
|
183
|
+
* @returns {Promise} Will provide the list of error messages if the validation failed.
|
|
120
184
|
*/
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
rules.sort(compareRule);
|
|
131
|
-
return Promise.all(rules.map(validation => Promise.resolve(validateValue(value, validation)))).then(results => {
|
|
132
|
-
const errors = _.reduce(results, (list, result, index) => {
|
|
133
|
-
if (!result) {
|
|
134
|
-
list.push(rules[index].message || config.defaultMessage);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
return list;
|
|
138
|
-
}, []);
|
|
139
|
-
|
|
140
|
-
if (errors.length) {
|
|
141
|
-
return Promise.reject(errors);
|
|
185
|
+
validate: function validate(value) {
|
|
186
|
+
var rules = this.getValidations();
|
|
187
|
+
rules.sort(compareRule);
|
|
188
|
+
return Promise.all(rules.map(function (validation) {
|
|
189
|
+
return Promise.resolve(validateValue(value, validation));
|
|
190
|
+
})).then(function (results) {
|
|
191
|
+
var errors = _.reduce(results, function (list, result, index) {
|
|
192
|
+
if (!result) {
|
|
193
|
+
list.push(rules[index].message || config.defaultMessage);
|
|
142
194
|
}
|
|
143
|
-
});
|
|
144
|
-
},
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* Adds a validation rule
|
|
148
|
-
* @param {validationRule} validation
|
|
149
|
-
* @returns {validator}
|
|
150
|
-
* @throws {TypeError} if the validation object is not valid
|
|
151
|
-
*/
|
|
152
|
-
addValidation(validation) {
|
|
153
|
-
if (!_.isPlainObject(validation)) {
|
|
154
|
-
throw new TypeError('The validation must be an object');
|
|
155
|
-
}
|
|
156
195
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
}
|
|
196
|
+
return list;
|
|
197
|
+
}, []);
|
|
160
198
|
|
|
161
|
-
if (
|
|
162
|
-
|
|
199
|
+
if (errors.length) {
|
|
200
|
+
return Promise.reject(errors);
|
|
163
201
|
}
|
|
202
|
+
});
|
|
203
|
+
},
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Adds a validation rule
|
|
207
|
+
* @param {validationRule} validation
|
|
208
|
+
* @returns {validator}
|
|
209
|
+
* @throws {TypeError} if the validation object is not valid
|
|
210
|
+
*/
|
|
211
|
+
addValidation: function addValidation(validation) {
|
|
212
|
+
if (!_.isPlainObject(validation)) {
|
|
213
|
+
throw new TypeError('The validation must be an object');
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
if (!_.isString(validation.id) || !validation.id) {
|
|
217
|
+
throw new TypeError('The validation must contain an identifier');
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
if (!_.isFunction(validation.predicate) && !_.isRegExp(validation.predicate) && !_.isString(validation.predicate) && !_.isArray(validation.predicate)) {
|
|
221
|
+
throw new TypeError('The validation must provide a predicate');
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
validations.set(validation.id, validation);
|
|
225
|
+
return this;
|
|
226
|
+
},
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Gets a validation rule by its identifier
|
|
230
|
+
* @param {String} id
|
|
231
|
+
* @returns {validationRule|null}
|
|
232
|
+
*/
|
|
233
|
+
getValidation: function getValidation(id) {
|
|
234
|
+
return validations.get(id) || null;
|
|
235
|
+
},
|
|
164
236
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Gets the list of validation rules.
|
|
180
|
-
* @returns {validationRule[]}
|
|
181
|
-
*/
|
|
182
|
-
getValidations() {
|
|
183
|
-
const list = [];
|
|
184
|
-
|
|
185
|
-
for (let validation of validations.values()) {
|
|
237
|
+
/**
|
|
238
|
+
* Gets the list of validation rules.
|
|
239
|
+
* @returns {validationRule[]}
|
|
240
|
+
*/
|
|
241
|
+
getValidations: function getValidations() {
|
|
242
|
+
var list = [];
|
|
243
|
+
|
|
244
|
+
var _iterator = _createForOfIteratorHelper(validations.values()),
|
|
245
|
+
_step;
|
|
246
|
+
|
|
247
|
+
try {
|
|
248
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
249
|
+
var validation = _step.value;
|
|
186
250
|
list.push(validation);
|
|
187
251
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* Removes a validation rule
|
|
194
|
-
* @param {String} id
|
|
195
|
-
* @returns {validator}
|
|
196
|
-
*/
|
|
197
|
-
removeValidation(id) {
|
|
198
|
-
validations.delete(id);
|
|
199
|
-
return this;
|
|
200
|
-
},
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* Removes all validation rules
|
|
204
|
-
* @returns {validator}
|
|
205
|
-
*/
|
|
206
|
-
removeValidations() {
|
|
207
|
-
validations.clear();
|
|
208
|
-
return this;
|
|
252
|
+
} catch (err) {
|
|
253
|
+
_iterator.e(err);
|
|
254
|
+
} finally {
|
|
255
|
+
_iterator.f();
|
|
209
256
|
}
|
|
210
257
|
|
|
211
|
-
|
|
212
|
-
|
|
258
|
+
return list;
|
|
259
|
+
},
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Removes a validation rule
|
|
263
|
+
* @param {String} id
|
|
264
|
+
* @returns {validator}
|
|
265
|
+
*/
|
|
266
|
+
removeValidation: function removeValidation(id) {
|
|
267
|
+
validations.delete(id);
|
|
268
|
+
return this;
|
|
269
|
+
},
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Removes all validation rules
|
|
273
|
+
* @returns {validator}
|
|
274
|
+
*/
|
|
275
|
+
removeValidations: function removeValidations() {
|
|
276
|
+
validations.clear();
|
|
277
|
+
return this;
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
config = _.defaults(_.clone(config) || {}, defaults);
|
|
213
281
|
|
|
214
|
-
|
|
282
|
+
_.forEach(config.validations, validator.addValidation);
|
|
215
283
|
|
|
216
|
-
|
|
217
|
-
|
|
284
|
+
return validator;
|
|
285
|
+
}
|
|
218
286
|
|
|
219
|
-
|
|
287
|
+
return validatorFactory;
|
|
220
288
|
|
|
221
289
|
});
|
|
@@ -27,7 +27,7 @@ define(function () { 'use strict';
|
|
|
27
27
|
* Defines the URI of each available widget
|
|
28
28
|
* @type {Object}
|
|
29
29
|
*/
|
|
30
|
-
|
|
30
|
+
var widgetDefinitions = {
|
|
31
31
|
TEXTBOX: 'http://www.tao.lu/datatypes/WidgetDefinitions.rdf#TextBox',
|
|
32
32
|
TEXTAREA: 'http://www.tao.lu/datatypes/WidgetDefinitions.rdf#TextArea',
|
|
33
33
|
HIDDEN: 'http://www.tao.lu/datatypes/WidgetDefinitions.rdf#Hidden',
|