@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,369 +1,360 @@
|
|
|
1
1
|
define(['lodash', 'i18n', 'ui/component', 'ui/generis/widget/loader', 'ui/generis/widget/checkBox/checkBox', 'ui/generis/widget/comboBox/comboBox', 'ui/generis/widget/hiddenBox/hiddenBox', 'ui/generis/widget/textBox/textBox', 'handlebars', 'lib/dompurify/purify', 'css!ui/generis/form/css/form.css'], function (_, __, componentFactory, widgetLoader, checkBox, comboBox, hiddenBox, textBox, Handlebars, DOMPurify, form_css) { 'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
_ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;
|
|
4
|
+
__ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;
|
|
5
|
+
componentFactory = componentFactory && Object.prototype.hasOwnProperty.call(componentFactory, 'default') ? componentFactory['default'] : componentFactory;
|
|
6
|
+
widgetLoader = widgetLoader && Object.prototype.hasOwnProperty.call(widgetLoader, 'default') ? widgetLoader['default'] : widgetLoader;
|
|
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 <button type=\"reset\" class=\"btn-neutral small\">\n <span class=\"icon-reset\"/> ";
|
|
133
|
-
if (helper = helpers.resetText) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
134
|
-
else { helper = (depth0 && depth0.resetText); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
135
|
-
buffer += escapeExpression(stack1)
|
|
136
|
-
+ "\n </button>\n ";
|
|
137
|
-
return buffer;
|
|
82
|
+
for (var i = startIndex; i < stopIndex; i += increment) {
|
|
83
|
+
ret += options.fn(_.extend({}, this, {
|
|
84
|
+
i: i
|
|
85
|
+
}));
|
|
138
86
|
}
|
|
139
87
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
else { helper = (depth0 && depth0.formMethod); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
151
|
-
buffer += escapeExpression(stack1)
|
|
152
|
-
+ "\">\n <fieldset></fieldset>\n <div class=\"toolbar\">\n ";
|
|
153
|
-
stack1 = helpers['if'].call(depth0, (depth0 && depth0.reset), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
|
|
154
|
-
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
155
|
-
buffer += "\n <button type=\"submit\" class=\"btn-info small\">\n <span class=\"icon-save\"/> ";
|
|
156
|
-
if (helper = helpers.submitText) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
157
|
-
else { helper = (depth0 && depth0.submitText); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
158
|
-
buffer += escapeExpression(stack1)
|
|
159
|
-
+ "\n </button>\n </div>\n </form>\n</div>\n";
|
|
160
|
-
return buffer;
|
|
161
|
-
});
|
|
162
|
-
function tpl(data, options, asString) {
|
|
163
|
-
var html = Template(data, options);
|
|
164
|
-
return (asString || true) ? html : $(html);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* This program is free software; you can redistribute it and/or
|
|
169
|
-
* modify it under the terms of the GNU General Public License
|
|
170
|
-
* as published by the Free Software Foundation; under version 2
|
|
171
|
-
* of the License (non-upgradable).
|
|
172
|
-
*
|
|
173
|
-
* This program is distributed in the hope that it will be useful,
|
|
174
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
175
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
176
|
-
* GNU General Public License for more details.
|
|
177
|
-
*
|
|
178
|
-
* You should have received a copy of the GNU General Public License
|
|
179
|
-
* along with this program; if not, write to the Free Software
|
|
180
|
-
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
181
|
-
*
|
|
182
|
-
* Copyright (c) 2017 (original work) Open Assessment Technologies SA;
|
|
183
|
-
*/
|
|
184
|
-
/**
|
|
185
|
-
* The factory
|
|
186
|
-
* @param {Object} [options]
|
|
187
|
-
* @param {String} [config.form.action = '#']
|
|
188
|
-
* @param {String} [config.form.method = 'get']
|
|
189
|
-
* @param {String} [config.submit.text = 'Save']
|
|
190
|
-
* @param {String} [config.title = 'Generis Form']
|
|
191
|
-
* @deprecated replaced by `ui/form/simpleForm`
|
|
192
|
-
*/
|
|
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
|
|
193
98
|
|
|
194
|
-
function
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
config.form = config.form || {};
|
|
199
|
-
config.submit = config.submit || {};
|
|
200
|
-
form = componentFactory({
|
|
201
|
-
/**
|
|
202
|
-
* Add a widget/field to form
|
|
203
|
-
* @param {Object} widgetOptions
|
|
204
|
-
* @param {String} widgetOptions.uri - the property URI
|
|
205
|
-
* @param {String} [widgetOptions.widget] - the widget URI
|
|
206
|
-
* @param {String|String[]} [widgetOptions.value] - the default value
|
|
207
|
-
* @param {Boolean} [widgetOptions.required = false] - is the field required
|
|
208
|
-
* @returns {this}
|
|
209
|
-
*/
|
|
210
|
-
addWidget: function addWidget(widgetOptions) {
|
|
211
|
-
var widget = widgetLoader(widgetOptions.widget)({}, widgetOptions);
|
|
212
|
-
this.widgets.push(widget);
|
|
99
|
+
hb.registerHelper('property', function (name, context) {
|
|
100
|
+
return context[name] || '';
|
|
101
|
+
}); // register an 'includes' helper
|
|
102
|
+
// it checks if value is in array
|
|
213
103
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
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 <button type=\"reset\" class=\"btn-neutral small\">\n <span class=\"icon-reset\"/> ";
|
|
124
|
+
if (helper = helpers.resetText) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
125
|
+
else { helper = (depth0 && depth0.resetText); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
126
|
+
buffer += escapeExpression(stack1)
|
|
127
|
+
+ "\n </button>\n ";
|
|
128
|
+
return buffer;
|
|
129
|
+
}
|
|
222
130
|
|
|
223
|
-
|
|
224
|
-
|
|
131
|
+
buffer += "<div class=\"ui-generis-form\">\n <h2>";
|
|
132
|
+
if (helper = helpers.title) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
133
|
+
else { helper = (depth0 && depth0.title); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
134
|
+
buffer += escapeExpression(stack1)
|
|
135
|
+
+ "</h2>\n <form action=\"";
|
|
136
|
+
if (helper = helpers.formAction) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
137
|
+
else { helper = (depth0 && depth0.formAction); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
138
|
+
buffer += escapeExpression(stack1)
|
|
139
|
+
+ "\" method=\"";
|
|
140
|
+
if (helper = helpers.formMethod) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
141
|
+
else { helper = (depth0 && depth0.formMethod); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
142
|
+
buffer += escapeExpression(stack1)
|
|
143
|
+
+ "\">\n <fieldset></fieldset>\n <div class=\"toolbar\">\n ";
|
|
144
|
+
stack1 = helpers['if'].call(depth0, (depth0 && depth0.reset), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
|
|
145
|
+
if(stack1 || stack1 === 0) { buffer += stack1; }
|
|
146
|
+
buffer += "\n <button type=\"submit\" class=\"btn-info small\">\n <span class=\"icon-save\"/> ";
|
|
147
|
+
if (helper = helpers.submitText) { stack1 = helper.call(depth0, {hash:{},data:data}); }
|
|
148
|
+
else { helper = (depth0 && depth0.submitText); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
|
|
149
|
+
buffer += escapeExpression(stack1)
|
|
150
|
+
+ "\n </button>\n </div>\n </form>\n</div>\n";
|
|
151
|
+
return buffer;
|
|
152
|
+
});
|
|
153
|
+
function tpl(data, options, asString) {
|
|
154
|
+
var html = Template(data, options);
|
|
155
|
+
return (asString || true) ? html : $(html);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* This program is free software; you can redistribute it and/or
|
|
160
|
+
* modify it under the terms of the GNU General Public License
|
|
161
|
+
* as published by the Free Software Foundation; under version 2
|
|
162
|
+
* of the License (non-upgradable).
|
|
163
|
+
*
|
|
164
|
+
* This program is distributed in the hope that it will be useful,
|
|
165
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
166
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
167
|
+
* GNU General Public License for more details.
|
|
168
|
+
*
|
|
169
|
+
* You should have received a copy of the GNU General Public License
|
|
170
|
+
* along with this program; if not, write to the Free Software
|
|
171
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
172
|
+
*
|
|
173
|
+
* Copyright (c) 2017 (original work) Open Assessment Technologies SA;
|
|
174
|
+
*/
|
|
175
|
+
/**
|
|
176
|
+
* The factory
|
|
177
|
+
* @param {Object} [options]
|
|
178
|
+
* @param {String} [config.form.action = '#']
|
|
179
|
+
* @param {String} [config.form.method = 'get']
|
|
180
|
+
* @param {String} [config.submit.text = 'Save']
|
|
181
|
+
* @param {String} [config.title = 'Generis Form']
|
|
182
|
+
* @deprecated replaced by `ui/form/simpleForm`
|
|
183
|
+
*/
|
|
184
|
+
|
|
185
|
+
function factory(options, config) {
|
|
186
|
+
var form;
|
|
187
|
+
options = options || {};
|
|
188
|
+
config = config || {};
|
|
189
|
+
config.form = config.form || {};
|
|
190
|
+
config.submit = config.submit || {};
|
|
191
|
+
form = componentFactory({
|
|
192
|
+
/**
|
|
193
|
+
* Add a widget/field to form
|
|
194
|
+
* @param {Object} widgetOptions
|
|
195
|
+
* @param {String} widgetOptions.uri - the property URI
|
|
196
|
+
* @param {String} [widgetOptions.widget] - the widget URI
|
|
197
|
+
* @param {String|String[]} [widgetOptions.value] - the default value
|
|
198
|
+
* @param {Boolean} [widgetOptions.required = false] - is the field required
|
|
199
|
+
* @returns {this}
|
|
200
|
+
*/
|
|
201
|
+
addWidget: function addWidget(widgetOptions) {
|
|
202
|
+
var widget = widgetLoader(widgetOptions.widget)({}, widgetOptions);
|
|
203
|
+
this.widgets.push(widget);
|
|
225
204
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
return _.find(this.widgets, function (widget) {
|
|
233
|
-
return widget.config.uri === uri;
|
|
205
|
+
if (this.is('rendered')) {
|
|
206
|
+
widget.render(this.getElement().find('form > fieldset'));
|
|
207
|
+
} else {
|
|
208
|
+
this.on('render.' + widget.config.uri, function () {
|
|
209
|
+
widget.render(this.getElement().find('form > fieldset'));
|
|
210
|
+
this.off('render.' + this.config.uri);
|
|
234
211
|
});
|
|
235
|
-
}
|
|
212
|
+
}
|
|
236
213
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
* @param {String} uri - the property URI
|
|
240
|
-
* @returns {this}
|
|
241
|
-
*/
|
|
242
|
-
removeWidget: function removeWidget(uri) {
|
|
243
|
-
_.remove(this.widgets, function (widget) {
|
|
244
|
-
if (widget.config.uri === uri) {
|
|
245
|
-
widget.destroy();
|
|
246
|
-
return true;
|
|
247
|
-
}
|
|
248
|
-
});
|
|
214
|
+
return this;
|
|
215
|
+
},
|
|
249
216
|
|
|
250
|
-
|
|
251
|
-
|
|
217
|
+
/**
|
|
218
|
+
* Get a widget
|
|
219
|
+
* @param {String} uri - the property URI
|
|
220
|
+
* @returns {Object} the widget
|
|
221
|
+
*/
|
|
222
|
+
getWidget: function getWidget(uri) {
|
|
223
|
+
return _.find(this.widgets, function (widget) {
|
|
224
|
+
return widget.config.uri === uri;
|
|
225
|
+
});
|
|
226
|
+
},
|
|
252
227
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
return data.errors ? data.errors.length === 0 : true;
|
|
266
|
-
}).value();
|
|
267
|
-
return this;
|
|
268
|
-
},
|
|
228
|
+
/**
|
|
229
|
+
* Remove a widget/field from form
|
|
230
|
+
* @param {String} uri - the property URI
|
|
231
|
+
* @returns {this}
|
|
232
|
+
*/
|
|
233
|
+
removeWidget: function removeWidget(uri) {
|
|
234
|
+
_.remove(this.widgets, function (widget) {
|
|
235
|
+
if (widget.config.uri === uri) {
|
|
236
|
+
widget.destroy();
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
});
|
|
269
240
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
* @returns {Object[]}
|
|
273
|
-
*/
|
|
274
|
-
serializeArray: function serializeArray() {
|
|
275
|
-
return _.map(this.widgets, function (widget) {
|
|
276
|
-
return widget.serialize();
|
|
277
|
-
});
|
|
278
|
-
},
|
|
241
|
+
return this;
|
|
242
|
+
},
|
|
279
243
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
244
|
+
/**
|
|
245
|
+
* Validates form and populates errors array
|
|
246
|
+
* @returns {this}
|
|
247
|
+
*/
|
|
248
|
+
validate: function validate() {
|
|
249
|
+
this.errors = _(this.widgets).map(function (widget) {
|
|
250
|
+
widget.validate();
|
|
251
|
+
return {
|
|
252
|
+
uri: widget.config.uri,
|
|
253
|
+
errors: widget.validator.errors
|
|
254
|
+
};
|
|
255
|
+
}).reject(function (data) {
|
|
256
|
+
return data.errors ? data.errors.length === 0 : true;
|
|
257
|
+
}).value();
|
|
258
|
+
return this;
|
|
259
|
+
},
|
|
290
260
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
261
|
+
/**
|
|
262
|
+
* Serializes form values to an array of name/value objects
|
|
263
|
+
* @returns {Object[]}
|
|
264
|
+
*/
|
|
265
|
+
serializeArray: function serializeArray() {
|
|
266
|
+
return _.map(this.widgets, function (widget) {
|
|
267
|
+
return widget.serialize();
|
|
268
|
+
});
|
|
269
|
+
},
|
|
294
270
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
isLoading = !this.is('loading');
|
|
271
|
+
/**
|
|
272
|
+
* Convenience method to retrieve the form values
|
|
273
|
+
* as name : value
|
|
274
|
+
* @returns {Object} the values object
|
|
275
|
+
*/
|
|
276
|
+
getValues: function getValues() {
|
|
277
|
+
return _.reduce(this.serializeArray(), function (acc, field) {
|
|
278
|
+
if (_.isString(field.name) && !_.isEmpty(field.name) && _.isString(field.value) && !_.isEmpty(field.value) || _.isArray(field.value) && field.value.length > 0) {
|
|
279
|
+
acc[field.name] = field.value;
|
|
305
280
|
}
|
|
306
281
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
*/
|
|
311
|
-
this.trigger('loading');
|
|
312
|
-
this.disable();
|
|
313
|
-
} else {
|
|
314
|
-
/**
|
|
315
|
-
* @event form#loaded
|
|
316
|
-
*/
|
|
317
|
-
this.trigger('loaded');
|
|
318
|
-
this.enable();
|
|
319
|
-
}
|
|
282
|
+
return acc;
|
|
283
|
+
}, {});
|
|
284
|
+
},
|
|
320
285
|
|
|
321
|
-
|
|
322
|
-
|
|
286
|
+
/**
|
|
287
|
+
* Toggles loading state
|
|
288
|
+
* @param {Boolean} [isLoading = undefined]
|
|
289
|
+
* @returns {this}
|
|
290
|
+
* @fires loading
|
|
291
|
+
* @fires loaded
|
|
292
|
+
*/
|
|
293
|
+
toggleLoading: function toggleLoading(isLoading) {
|
|
294
|
+
if (typeof isLoading === 'undefined') {
|
|
295
|
+
isLoading = !this.is('loading');
|
|
323
296
|
}
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
formMethod: 'get',
|
|
327
|
-
submitText: __('Save'),
|
|
328
|
-
title: __('Generis Form'),
|
|
329
|
-
reset: true,
|
|
330
|
-
resetText: __('Reset')
|
|
331
|
-
}).setTemplate(tpl).init(config).on('render', function () {
|
|
332
|
-
var $form = this.getElement().find('form');
|
|
333
|
-
var self = this;
|
|
334
|
-
$form.on('submit', function (e) {
|
|
335
|
-
e.preventDefault();
|
|
297
|
+
|
|
298
|
+
if (isLoading) {
|
|
336
299
|
/**
|
|
337
|
-
* @event form#
|
|
338
|
-
* @param {Object[]} formData
|
|
300
|
+
* @event form#loading
|
|
339
301
|
*/
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
});
|
|
344
|
-
$form.on('reset', function () {
|
|
302
|
+
this.trigger('loading');
|
|
303
|
+
this.disable();
|
|
304
|
+
} else {
|
|
345
305
|
/**
|
|
346
|
-
* @event form#
|
|
347
|
-
* @param {Object[]} formData
|
|
306
|
+
* @event form#loaded
|
|
348
307
|
*/
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
});
|
|
352
|
-
form.data = options;
|
|
353
|
-
form.errors = [];
|
|
354
|
-
form.widgets = []; // Add widgets to form
|
|
355
|
-
|
|
356
|
-
_.each(options.properties || [], function (property) {
|
|
357
|
-
if (property.range && typeof property.range === 'string') {
|
|
358
|
-
property.range = options.values[property.range];
|
|
308
|
+
this.trigger('loaded');
|
|
309
|
+
this.enable();
|
|
359
310
|
}
|
|
360
311
|
|
|
361
|
-
|
|
312
|
+
this.setState('loading', isLoading);
|
|
313
|
+
return this;
|
|
314
|
+
}
|
|
315
|
+
}, {
|
|
316
|
+
formAction: '#',
|
|
317
|
+
formMethod: 'get',
|
|
318
|
+
submitText: __('Save'),
|
|
319
|
+
title: __('Generis Form'),
|
|
320
|
+
reset: true,
|
|
321
|
+
resetText: __('Reset')
|
|
322
|
+
}).setTemplate(tpl).init(config).on('render', function () {
|
|
323
|
+
var $form = this.getElement().find('form');
|
|
324
|
+
var self = this;
|
|
325
|
+
$form.on('submit', function (e) {
|
|
326
|
+
e.preventDefault();
|
|
327
|
+
/**
|
|
328
|
+
* @event form#submit
|
|
329
|
+
* @param {Object[]} formData
|
|
330
|
+
*/
|
|
331
|
+
|
|
332
|
+
self.trigger('submit', self.serializeArray());
|
|
333
|
+
return false;
|
|
362
334
|
});
|
|
335
|
+
$form.on('reset', function () {
|
|
336
|
+
/**
|
|
337
|
+
* @event form#reset
|
|
338
|
+
* @param {Object[]} formData
|
|
339
|
+
*/
|
|
340
|
+
self.trigger('reset', self.serializeArray());
|
|
341
|
+
});
|
|
342
|
+
});
|
|
343
|
+
form.data = options;
|
|
344
|
+
form.errors = [];
|
|
345
|
+
form.widgets = []; // Add widgets to form
|
|
346
|
+
|
|
347
|
+
_.each(options.properties || [], function (property) {
|
|
348
|
+
if (property.range && typeof property.range === 'string') {
|
|
349
|
+
property.range = options.values[property.range];
|
|
350
|
+
}
|
|
363
351
|
|
|
364
|
-
|
|
365
|
-
}
|
|
352
|
+
form.addWidget(property);
|
|
353
|
+
});
|
|
354
|
+
|
|
355
|
+
return form;
|
|
356
|
+
}
|
|
366
357
|
|
|
367
|
-
|
|
358
|
+
return factory;
|
|
368
359
|
|
|
369
360
|
});
|