@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,394 +1,392 @@
|
|
|
1
1
|
define(['lodash', 'i18n', 'ui/component', 'ui/button', 'ui/form/simpleForm', 'handlebars', 'lib/dompurify/purify', 'css!ui/form/css/dropdownForm.css'], function (_, __, componentFactory, buttonFactory, formFactory, Handlebars, DOMPurify, dropdownForm_css) { 'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
_ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;
|
|
4
|
+
__ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;
|
|
5
|
+
componentFactory = componentFactory && Object.prototype.hasOwnProperty.call(componentFactory, 'default') ? componentFactory['default'] : componentFactory;
|
|
6
|
+
buttonFactory = buttonFactory && Object.prototype.hasOwnProperty.call(buttonFactory, 'default') ? buttonFactory['default'] : buttonFactory;
|
|
7
|
+
formFactory = formFactory && Object.prototype.hasOwnProperty.call(formFactory, 'default') ? formFactory['default'] : formFactory;
|
|
8
|
+
Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;
|
|
9
|
+
DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;
|
|
10
|
+
|
|
11
|
+
function _typeof(obj) {
|
|
12
|
+
"@babel/helpers - typeof";
|
|
13
|
+
|
|
14
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
|
|
15
|
+
return typeof obj;
|
|
16
|
+
} : function (obj) {
|
|
17
|
+
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
18
|
+
}, _typeof(obj);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function Helpers0 (hb) {
|
|
22
|
+
//register a i18n helper
|
|
23
|
+
hb.registerHelper('__', function (key) {
|
|
24
|
+
return __(key);
|
|
25
|
+
});
|
|
11
26
|
/**
|
|
12
|
-
*
|
|
13
|
-
* modify it under the terms of the GNU General Public License
|
|
14
|
-
* as published by the Free Software Foundation; under version 2
|
|
15
|
-
* of the License (non-upgradable).
|
|
16
|
-
*
|
|
17
|
-
* This program is distributed in the hope that it will be useful,
|
|
18
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
19
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
20
|
-
* GNU General Public License for more details.
|
|
21
|
-
*
|
|
22
|
-
* You should have received a copy of the GNU General Public License
|
|
23
|
-
* along with this program; if not, write to the Free Software
|
|
24
|
-
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
25
|
-
*
|
|
26
|
-
* Copyright (c) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
|
|
27
|
+
* Register dompurify helper
|
|
27
28
|
*
|
|
29
|
+
* https://github.com/cure53/DOMPurify
|
|
30
|
+
* with config SAFE_FOR_TEMPLATES: true
|
|
31
|
+
* to make output safe for template systems
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
hb.registerHelper('dompurify', function (context) {
|
|
35
|
+
return DOMPurify.sanitize(context);
|
|
36
|
+
});
|
|
37
|
+
/**
|
|
38
|
+
* Register join helper
|
|
28
39
|
*
|
|
40
|
+
* Example :
|
|
41
|
+
* var values = {a:v1, b:v2, c:v3};
|
|
42
|
+
* Using {{{join attributes '=' ' ' '"'}}} will return : a="v1" b="v2" c="v3"
|
|
43
|
+
* Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*
|
|
29
44
|
*/
|
|
30
|
-
function Helpers0 (hb) {
|
|
31
|
-
//register a i18n helper
|
|
32
|
-
hb.registerHelper('__', function (key) {
|
|
33
|
-
return __(key);
|
|
34
|
-
});
|
|
35
|
-
/**
|
|
36
|
-
* Register dompurify helper
|
|
37
|
-
*
|
|
38
|
-
* https://github.com/cure53/DOMPurify
|
|
39
|
-
* with config SAFE_FOR_TEMPLATES: true
|
|
40
|
-
* to make output safe for template systems
|
|
41
|
-
*/
|
|
42
45
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
*
|
|
49
|
-
* Example :
|
|
50
|
-
* var values = {a:v1, b:v2, c:v3};
|
|
51
|
-
* Using {{{join attributes '=' ' ' '"'}}} will return : a="v1" b="v2" c="v3"
|
|
52
|
-
* Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*
|
|
53
|
-
*/
|
|
46
|
+
hb.registerHelper('join', function (arr, keyValueGlue, fragmentGlue, wrapper) {
|
|
47
|
+
var fragments = [];
|
|
48
|
+
keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;
|
|
49
|
+
fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';
|
|
50
|
+
wrapper = typeof wrapper === 'string' ? wrapper : '"';
|
|
54
51
|
|
|
55
|
-
|
|
56
|
-
var
|
|
57
|
-
keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;
|
|
58
|
-
fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';
|
|
59
|
-
wrapper = typeof wrapper === 'string' ? wrapper : '"';
|
|
60
|
-
|
|
61
|
-
_.forIn(arr, function (value, key) {
|
|
62
|
-
var fragment = '';
|
|
63
|
-
|
|
64
|
-
if (value !== null || value !== undefined) {
|
|
65
|
-
if (typeof value === 'boolean') {
|
|
66
|
-
value = value ? 'true' : 'false';
|
|
67
|
-
} else if (typeof value === 'object') {
|
|
68
|
-
value = _.values(value).join(' ');
|
|
69
|
-
}
|
|
70
|
-
} else {
|
|
71
|
-
value = '';
|
|
72
|
-
}
|
|
52
|
+
_.forIn(arr, function (value, key) {
|
|
53
|
+
var fragment = '';
|
|
73
54
|
|
|
74
|
-
|
|
75
|
-
|
|
55
|
+
if (value !== null || value !== undefined) {
|
|
56
|
+
if (typeof value === 'boolean') {
|
|
57
|
+
value = value ? 'true' : 'false';
|
|
58
|
+
} else if (_typeof(value) === 'object') {
|
|
59
|
+
value = _.values(value).join(' ');
|
|
76
60
|
}
|
|
61
|
+
} else {
|
|
62
|
+
value = '';
|
|
63
|
+
}
|
|
77
64
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
return fragments.join(fragmentGlue);
|
|
83
|
-
}); //register a classic "for loop" helper
|
|
84
|
-
//it also adds a local variable "i" as the index in each iteration loop
|
|
85
|
-
|
|
86
|
-
hb.registerHelper('for', function (startIndex, stopIndex, increment, options) {
|
|
87
|
-
var ret = '';
|
|
88
|
-
startIndex = parseInt(startIndex);
|
|
89
|
-
stopIndex = parseInt(stopIndex);
|
|
90
|
-
increment = parseInt(increment);
|
|
91
|
-
|
|
92
|
-
for (var i = startIndex; i < stopIndex; i += increment) {
|
|
93
|
-
ret += options.fn(_.extend({}, this, {
|
|
94
|
-
i: i
|
|
95
|
-
}));
|
|
65
|
+
if (keyValueGlue !== undefined) {
|
|
66
|
+
fragment += key + keyValueGlue;
|
|
96
67
|
}
|
|
97
68
|
|
|
98
|
-
|
|
69
|
+
fragment += wrapper + value + wrapper;
|
|
70
|
+
fragments.push(fragment);
|
|
99
71
|
});
|
|
100
|
-
hb.registerHelper('equal', function (var1, var2, options) {
|
|
101
|
-
if (var1 == var2) {
|
|
102
|
-
return options.fn(this);
|
|
103
|
-
} else {
|
|
104
|
-
return options.inverse(this);
|
|
105
|
-
}
|
|
106
|
-
}); // register a "get property" helper
|
|
107
|
-
// it gets the named property from the provided context
|
|
108
72
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
73
|
+
return fragments.join(fragmentGlue);
|
|
74
|
+
}); //register a classic "for loop" helper
|
|
75
|
+
//it also adds a local variable "i" as the index in each iteration loop
|
|
76
|
+
|
|
77
|
+
hb.registerHelper('for', function (startIndex, stopIndex, increment, options) {
|
|
78
|
+
var ret = '';
|
|
79
|
+
startIndex = parseInt(startIndex);
|
|
80
|
+
stopIndex = parseInt(stopIndex);
|
|
81
|
+
increment = parseInt(increment);
|
|
82
|
+
|
|
83
|
+
for (var i = startIndex; i < stopIndex; i += increment) {
|
|
84
|
+
ret += options.fn(_.extend({}, this, {
|
|
85
|
+
i: i
|
|
86
|
+
}));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return ret;
|
|
90
|
+
});
|
|
91
|
+
hb.registerHelper('equal', function (var1, var2, options) {
|
|
92
|
+
if (var1 == var2) {
|
|
93
|
+
return options.fn(this);
|
|
94
|
+
} else {
|
|
95
|
+
return options.inverse(this);
|
|
96
|
+
}
|
|
97
|
+
}); // register a "get property" helper
|
|
98
|
+
// it gets the named property from the provided context
|
|
99
|
+
|
|
100
|
+
hb.registerHelper('property', function (name, context) {
|
|
101
|
+
return context[name] || '';
|
|
102
|
+
}); // register an 'includes' helper
|
|
103
|
+
// it checks if value is in array
|
|
104
|
+
|
|
105
|
+
hb.registerHelper('includes', function (haystack, needle, options) {
|
|
106
|
+
if (_.contains(haystack, needle)) {
|
|
107
|
+
return options.fn(this);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (!Helpers0.__initialized) {
|
|
113
|
+
Helpers0(Handlebars);
|
|
114
|
+
Helpers0.__initialized = true;
|
|
115
|
+
}
|
|
116
|
+
var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
117
|
+
this.compilerInfo = [4,'>= 1.0.0'];
|
|
118
|
+
helpers = this.merge(helpers, Handlebars.helpers);
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
return "<div class=\"dropdown-form\">\n <div class=\"trigger-button\"></div>\n <div class=\"form-panel\"></div>\n</div>\n";
|
|
122
|
+
});
|
|
123
|
+
function dropdownFormTpl(data, options, asString) {
|
|
124
|
+
var html = Template(data, options);
|
|
125
|
+
return (asString || true) ? html : $(html);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* This program is free software; you can redistribute it and/or
|
|
130
|
+
* modify it under the terms of the GNU General Public License
|
|
131
|
+
* as published by the Free Software Foundation; under version 2
|
|
132
|
+
* of the License (non-upgradable).
|
|
133
|
+
*
|
|
134
|
+
* This program is distributed in the hope that it will be useful,
|
|
135
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
136
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
137
|
+
* GNU General Public License for more details.
|
|
138
|
+
*
|
|
139
|
+
* You should have received a copy of the GNU General Public License
|
|
140
|
+
* along with this program; if not, write to the Free Software
|
|
141
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
142
|
+
*
|
|
143
|
+
* Copyright (c) 2019 Open Assessment Technologies SA ;
|
|
144
|
+
*/
|
|
145
|
+
/**
|
|
146
|
+
* @typedef {Object} dropdownFormConfig Defines the config entries available to setup a dropdown form
|
|
147
|
+
* @property {String} [triggerText] - The caption of the trigger button
|
|
148
|
+
* @property {String} [triggerIcon] - The icon of the trigger button
|
|
149
|
+
* @property {String} [submitText] - The caption of the submit button
|
|
150
|
+
* @property {String} [submitIcon] - The icon of the submit button
|
|
151
|
+
* @property {widgetConfig[]} [widgets] - The list of widgets to set in the form (default none)
|
|
152
|
+
* @property {buttonConfig[]} [buttons] - The list of buttons to set in the form (default none)
|
|
153
|
+
* @property {Object} [values] - Initial values for the widgets
|
|
154
|
+
* @property {Object} [ranges] - An optional list of ranges for the widgets (@see widgetConfig.range)
|
|
155
|
+
*/
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Some default config
|
|
159
|
+
* @type {Object}
|
|
160
|
+
*/
|
|
161
|
+
|
|
162
|
+
var defaults = {
|
|
163
|
+
triggerIcon: null,
|
|
164
|
+
triggerText: __('Form'),
|
|
165
|
+
submitIcon: null,
|
|
166
|
+
submitText: __('Submit')
|
|
167
|
+
};
|
|
168
|
+
/**
|
|
169
|
+
* Builds a dropdown form component.
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* const container = $('.my-container', $container);
|
|
173
|
+
*
|
|
174
|
+
* const config = {
|
|
175
|
+
* title: 'My fancy form',
|
|
176
|
+
* triggerText: 'Comment',
|
|
177
|
+
* submitText: 'Publish',
|
|
178
|
+
* widgets: [{
|
|
179
|
+
* widget: widgetDefinitions.TEXTBOX
|
|
180
|
+
* uri: 'nickname',
|
|
181
|
+
* label: 'Name',
|
|
182
|
+
* required: true
|
|
183
|
+
* }, {
|
|
184
|
+
* widget: widgetDefinitions.TEXTAREA
|
|
185
|
+
* uri: 'comment',
|
|
186
|
+
* label: 'Comment',
|
|
187
|
+
* required: true
|
|
188
|
+
* }]
|
|
189
|
+
* };
|
|
190
|
+
*
|
|
191
|
+
* const form = dropdownFormFactory(container, config)
|
|
192
|
+
* .on('submit', function(values) {
|
|
193
|
+
* // ...
|
|
194
|
+
* });
|
|
195
|
+
*
|
|
196
|
+
* @param {HTMLElement|String} container
|
|
197
|
+
* @param {dropdownFormConfig} config
|
|
198
|
+
* @param {String} [config.triggerText] - The caption of the trigger button
|
|
199
|
+
* @param {String} [config.triggerIcon] - The icon of the trigger button
|
|
200
|
+
* @param {String} [config.submitText] - The caption of the submit button
|
|
201
|
+
* @param {String} [config.submitIcon] - The icon of the submit button
|
|
202
|
+
* @param {widgetConfig[]} [config.widgets] - The list of widgets to set in the form (default none)
|
|
203
|
+
* @param {buttonConfig[]} [config.buttons] - The list of buttons to set in the form (default none)
|
|
204
|
+
* @param {Object} [config.values] - Initial values for the widgets
|
|
205
|
+
* @param {Object} [config.ranges] - An optional list of ranges for the widgets (@see widgetConfig.range)
|
|
206
|
+
* @returns {dropdownForm}
|
|
207
|
+
* @fires ready - When the component is ready to work
|
|
208
|
+
*/
|
|
209
|
+
|
|
210
|
+
function dropdownFormFactory(container, config) {
|
|
211
|
+
var form = null;
|
|
212
|
+
var button = null;
|
|
213
|
+
var controls = null;
|
|
214
|
+
var api = {
|
|
215
|
+
/**
|
|
216
|
+
* Gets access to the form
|
|
217
|
+
* @returns {form}
|
|
218
|
+
*/
|
|
219
|
+
getForm: function getForm() {
|
|
220
|
+
return form;
|
|
221
|
+
},
|
|
113
222
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
223
|
+
/**
|
|
224
|
+
* Update the form with a new list of widgets
|
|
225
|
+
* @param {widgetConfig[]} widgets
|
|
226
|
+
* @returns {Promise}
|
|
227
|
+
* @throws {Error} if the form is not yet rendered
|
|
228
|
+
*/
|
|
229
|
+
setFormWidgets: function setFormWidgets(widgets) {
|
|
230
|
+
if (!this.is('rendered') || !form) {
|
|
231
|
+
return Promise.reject(new Error('The form is not rendered'));
|
|
117
232
|
}
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
233
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
Helpers0.__initialized = true;
|
|
124
|
-
}
|
|
125
|
-
var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
|
|
126
|
-
this.compilerInfo = [4,'>= 1.0.0'];
|
|
127
|
-
helpers = this.merge(helpers, Handlebars.helpers);
|
|
234
|
+
return form.setWidgets(widgets);
|
|
235
|
+
},
|
|
128
236
|
|
|
237
|
+
/**
|
|
238
|
+
* Gets the values from the form widgets
|
|
239
|
+
* @returns {Object}
|
|
240
|
+
*/
|
|
241
|
+
getFormValues: function getFormValues() {
|
|
242
|
+
if (this.is('rendered')) {
|
|
243
|
+
return form.getValues();
|
|
244
|
+
}
|
|
129
245
|
|
|
130
|
-
|
|
131
|
-
}
|
|
132
|
-
function dropdownFormTpl(data, options, asString) {
|
|
133
|
-
var html = Template(data, options);
|
|
134
|
-
return (asString || true) ? html : $(html);
|
|
135
|
-
}
|
|
246
|
+
return {};
|
|
247
|
+
},
|
|
136
248
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
* GNU General Public License for more details.
|
|
147
|
-
*
|
|
148
|
-
* You should have received a copy of the GNU General Public License
|
|
149
|
-
* along with this program; if not, write to the Free Software
|
|
150
|
-
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
151
|
-
*
|
|
152
|
-
* Copyright (c) 2019 Open Assessment Technologies SA ;
|
|
153
|
-
*/
|
|
154
|
-
/**
|
|
155
|
-
* @typedef {Object} dropdownFormConfig Defines the config entries available to setup a dropdown form
|
|
156
|
-
* @property {String} [triggerText] - The caption of the trigger button
|
|
157
|
-
* @property {String} [triggerIcon] - The icon of the trigger button
|
|
158
|
-
* @property {String} [submitText] - The caption of the submit button
|
|
159
|
-
* @property {String} [submitIcon] - The icon of the submit button
|
|
160
|
-
* @property {widgetConfig[]} [widgets] - The list of widgets to set in the form (default none)
|
|
161
|
-
* @property {buttonConfig[]} [buttons] - The list of buttons to set in the form (default none)
|
|
162
|
-
* @property {Object} [values] - Initial values for the widgets
|
|
163
|
-
* @property {Object} [ranges] - An optional list of ranges for the widgets (@see widgetConfig.range)
|
|
164
|
-
*/
|
|
249
|
+
/**
|
|
250
|
+
* Sets the values to the form widgets
|
|
251
|
+
* @param {Object} values
|
|
252
|
+
* @returns {dropdownForm}
|
|
253
|
+
*/
|
|
254
|
+
setFormValues: function setFormValues(values) {
|
|
255
|
+
if (this.is('rendered')) {
|
|
256
|
+
form.setValues(values);
|
|
257
|
+
}
|
|
165
258
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
* @type {Object}
|
|
169
|
-
*/
|
|
259
|
+
return this;
|
|
260
|
+
},
|
|
170
261
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
* Builds a dropdown form component.
|
|
179
|
-
*
|
|
180
|
-
* @example
|
|
181
|
-
* const container = $('.my-container', $container);
|
|
182
|
-
*
|
|
183
|
-
* const config = {
|
|
184
|
-
* title: 'My fancy form',
|
|
185
|
-
* triggerText: 'Comment',
|
|
186
|
-
* submitText: 'Publish',
|
|
187
|
-
* widgets: [{
|
|
188
|
-
* widget: widgetDefinitions.TEXTBOX
|
|
189
|
-
* uri: 'nickname',
|
|
190
|
-
* label: 'Name',
|
|
191
|
-
* required: true
|
|
192
|
-
* }, {
|
|
193
|
-
* widget: widgetDefinitions.TEXTAREA
|
|
194
|
-
* uri: 'comment',
|
|
195
|
-
* label: 'Comment',
|
|
196
|
-
* required: true
|
|
197
|
-
* }]
|
|
198
|
-
* };
|
|
199
|
-
*
|
|
200
|
-
* const form = dropdownFormFactory(container, config)
|
|
201
|
-
* .on('submit', function(values) {
|
|
202
|
-
* // ...
|
|
203
|
-
* });
|
|
204
|
-
*
|
|
205
|
-
* @param {HTMLElement|String} container
|
|
206
|
-
* @param {dropdownFormConfig} config
|
|
207
|
-
* @param {String} [config.triggerText] - The caption of the trigger button
|
|
208
|
-
* @param {String} [config.triggerIcon] - The icon of the trigger button
|
|
209
|
-
* @param {String} [config.submitText] - The caption of the submit button
|
|
210
|
-
* @param {String} [config.submitIcon] - The icon of the submit button
|
|
211
|
-
* @param {widgetConfig[]} [config.widgets] - The list of widgets to set in the form (default none)
|
|
212
|
-
* @param {buttonConfig[]} [config.buttons] - The list of buttons to set in the form (default none)
|
|
213
|
-
* @param {Object} [config.values] - Initial values for the widgets
|
|
214
|
-
* @param {Object} [config.ranges] - An optional list of ranges for the widgets (@see widgetConfig.range)
|
|
215
|
-
* @returns {dropdownForm}
|
|
216
|
-
* @fires ready - When the component is ready to work
|
|
217
|
-
*/
|
|
262
|
+
/**
|
|
263
|
+
* Opens the form attached to the dropdown
|
|
264
|
+
* @returns {dropdownForm}
|
|
265
|
+
* @fires open - When the form is open
|
|
266
|
+
*/
|
|
267
|
+
openForm: function openForm() {
|
|
268
|
+
this.setState('open', true); // the event is emitted only if the component is rendered.
|
|
218
269
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
* @returns {form}
|
|
227
|
-
*/
|
|
228
|
-
getForm() {
|
|
229
|
-
return form;
|
|
230
|
-
},
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
* Update the form with a new list of widgets
|
|
234
|
-
* @param {widgetConfig[]} widgets
|
|
235
|
-
* @returns {Promise}
|
|
236
|
-
* @throws {Error} if the form is not yet rendered
|
|
237
|
-
*/
|
|
238
|
-
setFormWidgets(widgets) {
|
|
239
|
-
if (!this.is('rendered') || !form) {
|
|
240
|
-
return Promise.reject(new Error('The form is not rendered'));
|
|
270
|
+
if (this.is('rendered')) {
|
|
271
|
+
if (this.getContainer().width() < this.getElement().position().left + controls.$form.width()) {
|
|
272
|
+
this.setState('open-on-left', false);
|
|
273
|
+
this.setState('open-on-right', true);
|
|
274
|
+
} else {
|
|
275
|
+
this.setState('open-on-left', true);
|
|
276
|
+
this.setState('open-on-right', false);
|
|
241
277
|
}
|
|
278
|
+
/**
|
|
279
|
+
* @event open
|
|
280
|
+
*/
|
|
242
281
|
|
|
243
|
-
return form.setWidgets(widgets);
|
|
244
|
-
},
|
|
245
|
-
|
|
246
|
-
/**
|
|
247
|
-
* Gets the values from the form widgets
|
|
248
|
-
* @returns {Object}
|
|
249
|
-
*/
|
|
250
|
-
getFormValues() {
|
|
251
|
-
if (this.is('rendered')) {
|
|
252
|
-
return form.getValues();
|
|
253
|
-
}
|
|
254
282
|
|
|
255
|
-
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
/**
|
|
259
|
-
* Sets the values to the form widgets
|
|
260
|
-
* @param {Object} values
|
|
261
|
-
* @returns {dropdownForm}
|
|
262
|
-
*/
|
|
263
|
-
setFormValues(values) {
|
|
264
|
-
if (this.is('rendered')) {
|
|
265
|
-
form.setValues(values);
|
|
266
|
-
}
|
|
283
|
+
this.trigger('open');
|
|
284
|
+
}
|
|
267
285
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
/**
|
|
272
|
-
* Opens the form attached to the dropdown
|
|
273
|
-
* @returns {dropdownForm}
|
|
274
|
-
* @fires open - When the form is open
|
|
275
|
-
*/
|
|
276
|
-
openForm() {
|
|
277
|
-
this.setState('open', true); // the event is emitted only if the component is rendered.
|
|
278
|
-
|
|
279
|
-
if (this.is('rendered')) {
|
|
280
|
-
if (this.getContainer().width() < this.getElement().position().left + controls.$form.width()) {
|
|
281
|
-
this.setState('open-on-left', false);
|
|
282
|
-
this.setState('open-on-right', true);
|
|
283
|
-
} else {
|
|
284
|
-
this.setState('open-on-left', true);
|
|
285
|
-
this.setState('open-on-right', false);
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* @event open
|
|
289
|
-
*/
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
this.trigger('open');
|
|
293
|
-
}
|
|
286
|
+
return this;
|
|
287
|
+
},
|
|
294
288
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
this.setState('open', false);
|
|
305
|
-
this.setState('open-on-left', false);
|
|
306
|
-
this.setState('open-on-right', false); // the event is emitted only if the component is rendered.
|
|
307
|
-
|
|
308
|
-
if (this.is('rendered')) {
|
|
309
|
-
/**
|
|
310
|
-
* @event open
|
|
311
|
-
*/
|
|
312
|
-
this.trigger('close');
|
|
313
|
-
}
|
|
289
|
+
/**
|
|
290
|
+
* Closes the form attached to the dropdown
|
|
291
|
+
* @returns {dropdownForm}
|
|
292
|
+
* @fires close - When the form is closed
|
|
293
|
+
*/
|
|
294
|
+
closeForm: function closeForm() {
|
|
295
|
+
this.setState('open', false);
|
|
296
|
+
this.setState('open-on-left', false);
|
|
297
|
+
this.setState('open-on-right', false); // the event is emitted only if the component is rendered.
|
|
314
298
|
|
|
315
|
-
|
|
299
|
+
if (this.is('rendered')) {
|
|
300
|
+
/**
|
|
301
|
+
* @event open
|
|
302
|
+
*/
|
|
303
|
+
this.trigger('close');
|
|
316
304
|
}
|
|
317
305
|
|
|
306
|
+
return this;
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
var dropdownForm = componentFactory(api, defaults) // set the component's layout
|
|
310
|
+
.setTemplate(dropdownFormTpl) // auto render on init
|
|
311
|
+
.on('init', function onDropdownFormInit() {
|
|
312
|
+
var _this = this;
|
|
313
|
+
|
|
314
|
+
// auto render on init (defer the call to give a chance to the init event to be completed before)
|
|
315
|
+
_.defer(function () {
|
|
316
|
+
return _this.render(container);
|
|
317
|
+
});
|
|
318
|
+
}) // renders the component
|
|
319
|
+
.on('render', function onDropdownFormRender() {
|
|
320
|
+
var _this2 = this;
|
|
321
|
+
|
|
322
|
+
var initConfig = this.getConfig();
|
|
323
|
+
|
|
324
|
+
var formConfig = _.defaults({
|
|
325
|
+
reset: false
|
|
326
|
+
}, initConfig);
|
|
327
|
+
|
|
328
|
+
var buttonConfig = {
|
|
329
|
+
id: 'trigger',
|
|
330
|
+
type: 'info',
|
|
331
|
+
label: initConfig.triggerText,
|
|
332
|
+
icon: initConfig.triggerIcon
|
|
318
333
|
};
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
reset: false
|
|
330
|
-
}, initConfig);
|
|
331
|
-
|
|
332
|
-
const buttonConfig = {
|
|
333
|
-
id: 'trigger',
|
|
334
|
-
type: 'info',
|
|
335
|
-
label: initConfig.triggerText,
|
|
336
|
-
icon: initConfig.triggerIcon
|
|
337
|
-
};
|
|
338
|
-
controls = {
|
|
339
|
-
$trigger: this.getElement().find('.trigger-button'),
|
|
340
|
-
$form: this.getElement().find('.form-panel')
|
|
341
|
-
}; // toggle the form when clicking the dropdown button
|
|
342
|
-
|
|
343
|
-
button = buttonFactory(buttonConfig).on('click', () => {
|
|
344
|
-
if (this.is('open')) {
|
|
345
|
-
this.closeForm();
|
|
346
|
-
} else {
|
|
347
|
-
this.openForm();
|
|
348
|
-
}
|
|
349
|
-
}).render(controls.$trigger);
|
|
350
|
-
/**
|
|
351
|
-
* @event ready
|
|
352
|
-
*/
|
|
353
|
-
|
|
354
|
-
form = formFactory(controls.$form, formConfig).spread(this, 'ready change submit invalid error');
|
|
355
|
-
}).on('ready', function onDropdownFormReady() {
|
|
356
|
-
// init state
|
|
357
|
-
if (this.is('open')) {
|
|
358
|
-
this.openForm();
|
|
359
|
-
}
|
|
360
|
-
}).on('submit', function onDropdownFormSubmit() {
|
|
361
|
-
this.closeForm();
|
|
362
|
-
}) // take care of the disable state
|
|
363
|
-
.on('disable', function onDropdownFormDisable() {
|
|
364
|
-
if (this.is('open')) {
|
|
365
|
-
this.closeForm();
|
|
334
|
+
controls = {
|
|
335
|
+
$trigger: this.getElement().find('.trigger-button'),
|
|
336
|
+
$form: this.getElement().find('.form-panel')
|
|
337
|
+
}; // toggle the form when clicking the dropdown button
|
|
338
|
+
|
|
339
|
+
button = buttonFactory(buttonConfig).on('click', function () {
|
|
340
|
+
if (_this2.is('open')) {
|
|
341
|
+
_this2.closeForm();
|
|
342
|
+
} else {
|
|
343
|
+
_this2.openForm();
|
|
366
344
|
}
|
|
345
|
+
}).render(controls.$trigger);
|
|
346
|
+
/**
|
|
347
|
+
* @event ready
|
|
348
|
+
*/
|
|
367
349
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
.
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
350
|
+
form = formFactory(controls.$form, formConfig).spread(this, 'ready change submit invalid error');
|
|
351
|
+
}).on('ready', function onDropdownFormReady() {
|
|
352
|
+
// init state
|
|
353
|
+
if (this.is('open')) {
|
|
354
|
+
this.openForm();
|
|
355
|
+
}
|
|
356
|
+
}).on('submit', function onDropdownFormSubmit() {
|
|
357
|
+
this.closeForm();
|
|
358
|
+
}) // take care of the disable state
|
|
359
|
+
.on('disable', function onDropdownFormDisable() {
|
|
360
|
+
if (this.is('open')) {
|
|
361
|
+
this.closeForm();
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
if (this.is('rendered')) {
|
|
365
|
+
button.disable();
|
|
366
|
+
form.disable();
|
|
367
|
+
}
|
|
368
|
+
}).on('enable', function onDropdownFormEnable() {
|
|
369
|
+
if (this.is('rendered')) {
|
|
370
|
+
button.enable();
|
|
371
|
+
form.enable();
|
|
372
|
+
}
|
|
373
|
+
}) // cleanup the place
|
|
374
|
+
.on('destroy', function onDropdownFormDestroy() {
|
|
375
|
+
button.destroy();
|
|
376
|
+
form.destroy();
|
|
377
|
+
button = null;
|
|
378
|
+
form = null;
|
|
379
|
+
controls = null;
|
|
380
|
+
}); // initialize the component with the provided config
|
|
381
|
+
// defer the call to allow to listen to the init event
|
|
382
|
+
|
|
383
|
+
_.defer(function () {
|
|
384
|
+
return dropdownForm.init(config);
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
return dropdownForm;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
return dropdownFormFactory;
|
|
393
391
|
|
|
394
392
|
});
|