@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
|
@@ -23,14 +23,14 @@ define(['jquery', 'lodash', 'core/eventifier', 'util/shortcut/registry'], functi
|
|
|
23
23
|
* Copyright (c) 2017-2020 (original work) Open Assessment Technologies SA;
|
|
24
24
|
*
|
|
25
25
|
*/
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
var navigableCls = 'key-navigation-highlight';
|
|
27
|
+
var eventNS = '.ui-key-navigator';
|
|
28
28
|
/**
|
|
29
29
|
* The list of mandatory methods a navigable element must expose.
|
|
30
30
|
* @type {String[]}
|
|
31
31
|
*/
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
var navigableApi = ['init', 'destroy', 'getType', 'getElement', 'isVisible', 'isEnabled', 'isFocused', 'blur', 'focus'];
|
|
34
34
|
/**
|
|
35
35
|
* From a dom element, create a navigable element compatible with ui/KeyNavigator/navigator
|
|
36
36
|
* @param {String|Element|jQuery} element
|
|
@@ -41,9 +41,9 @@ define(['jquery', 'lodash', 'core/eventifier', 'util/shortcut/registry'], functi
|
|
|
41
41
|
*/
|
|
42
42
|
|
|
43
43
|
function navigableDomElement(element) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
var $element = $(element);
|
|
45
|
+
var shortcuts = shortcutRegistry($element);
|
|
46
|
+
var initialTabIndex = null;
|
|
47
47
|
/**
|
|
48
48
|
* @typedef navigableDomElement
|
|
49
49
|
*/
|
|
@@ -54,21 +54,25 @@ define(['jquery', 'lodash', 'core/eventifier', 'util/shortcut/registry'], functi
|
|
|
54
54
|
* @param {Boolean} propagateTab - allows the key event to propagate when the Tab key is pressed.
|
|
55
55
|
* @returns {navigableDomElement}
|
|
56
56
|
*/
|
|
57
|
-
init() {
|
|
58
|
-
|
|
59
|
-
propagateTab = false
|
|
60
|
-
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
57
|
+
init: function init() {
|
|
58
|
+
var _this = this;
|
|
61
59
|
|
|
62
|
-
|
|
60
|
+
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
61
|
+
_ref$propagateTab = _ref.propagateTab,
|
|
62
|
+
propagateTab = _ref$propagateTab === void 0 ? false : _ref$propagateTab;
|
|
63
|
+
|
|
64
|
+
var keyboard = function keyboard(key, el) {
|
|
63
65
|
/**
|
|
64
66
|
* @event key
|
|
65
67
|
* @param {String} key
|
|
66
68
|
* @param {Element} el
|
|
67
69
|
*/
|
|
68
|
-
|
|
70
|
+
_this.trigger('key', key, el);
|
|
69
71
|
};
|
|
70
72
|
|
|
71
|
-
|
|
73
|
+
var isInput = function isInput($el) {
|
|
74
|
+
return $el.is(':text,textarea');
|
|
75
|
+
};
|
|
72
76
|
|
|
73
77
|
if (!$element.length) {
|
|
74
78
|
throw new TypeError('dom element does not exist');
|
|
@@ -76,21 +80,21 @@ define(['jquery', 'lodash', 'core/eventifier', 'util/shortcut/registry'], functi
|
|
|
76
80
|
|
|
77
81
|
initialTabIndex = $element.attr('tabindex'); // add a tabindex to enable focusing, this tabindex is not actually used in tabbing order
|
|
78
82
|
|
|
79
|
-
$element.addClass(navigableCls).attr('tabindex', -1).on(
|
|
83
|
+
$element.addClass(navigableCls).attr('tabindex', -1).on("focus".concat(eventNS), function (e) {
|
|
80
84
|
/**
|
|
81
85
|
* @event focus
|
|
82
86
|
* @param {Element} el
|
|
83
87
|
*/
|
|
84
|
-
|
|
85
|
-
}).on(
|
|
88
|
+
_this.trigger('focus', e.target);
|
|
89
|
+
}).on("blur".concat(eventNS), function (e) {
|
|
86
90
|
/**
|
|
87
91
|
* @event blur
|
|
88
92
|
* @param {Element} el
|
|
89
93
|
*/
|
|
90
|
-
|
|
94
|
+
_this.trigger('blur', e.target);
|
|
91
95
|
}) // requires a keyup event to make unselecting radio button work with space bar
|
|
92
|
-
.on(
|
|
93
|
-
|
|
96
|
+
.on("keyup".concat(eventNS), function (e) {
|
|
97
|
+
var keyCode = e.keyCode ? e.keyCode : e.charCode;
|
|
94
98
|
|
|
95
99
|
if (keyCode === 32) {
|
|
96
100
|
// if the inner element is an input we let the space work
|
|
@@ -103,11 +107,13 @@ define(['jquery', 'lodash', 'core/eventifier', 'util/shortcut/registry'], functi
|
|
|
103
107
|
}
|
|
104
108
|
}); // init standard key bindings
|
|
105
109
|
|
|
106
|
-
shortcuts.clear().add('tab shift+tab', (e, key)
|
|
110
|
+
shortcuts.clear().add('tab shift+tab', function (e, key) {
|
|
111
|
+
return keyboard(key, e.target);
|
|
112
|
+
}, {
|
|
107
113
|
propagate: !!propagateTab,
|
|
108
114
|
prevent: true
|
|
109
|
-
}).add('up down left right', (e, key)
|
|
110
|
-
|
|
115
|
+
}).add('up down left right', function (e, key) {
|
|
116
|
+
var $target = $(e.target);
|
|
111
117
|
|
|
112
118
|
if (!isInput($target)) {
|
|
113
119
|
if (!$target.is('img') && !$target.hasClass('key-navigation-scrollable') && !($target.hasClass('key-navigation-scrollable-up') && (key === 'up' || key === 'left')) && !($target.hasClass('key-navigation-scrollable-down') && (key === 'down' || key === 'right'))) {
|
|
@@ -119,7 +125,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'util/shortcut/registry'], functi
|
|
|
119
125
|
}
|
|
120
126
|
}, {
|
|
121
127
|
propagate: false
|
|
122
|
-
}).add('enter', e
|
|
128
|
+
}).add('enter', function (e) {
|
|
123
129
|
if (!isInput($(e.target))) {
|
|
124
130
|
if (!e.target.classList.contains('key-navigation-actionable')) {
|
|
125
131
|
//prevent activating the element when typing a text
|
|
@@ -138,7 +144,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'util/shortcut/registry'], functi
|
|
|
138
144
|
* Destroys the navigableDomElement instance
|
|
139
145
|
* @returns {navigableDomElement}
|
|
140
146
|
*/
|
|
141
|
-
destroy() {
|
|
147
|
+
destroy: function destroy() {
|
|
142
148
|
$element.removeClass(navigableCls).off(eventNS);
|
|
143
149
|
|
|
144
150
|
if (initialTabIndex || initialTabIndex === 0) {
|
|
@@ -160,7 +166,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'util/shortcut/registry'], functi
|
|
|
160
166
|
* Gets the type of navigable element
|
|
161
167
|
* @returns {String}
|
|
162
168
|
*/
|
|
163
|
-
getType() {
|
|
169
|
+
getType: function getType() {
|
|
164
170
|
return 'element';
|
|
165
171
|
},
|
|
166
172
|
|
|
@@ -168,7 +174,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'util/shortcut/registry'], functi
|
|
|
168
174
|
* Gets the dom element
|
|
169
175
|
* @returns {jQuery}
|
|
170
176
|
*/
|
|
171
|
-
getElement() {
|
|
177
|
+
getElement: function getElement() {
|
|
172
178
|
return $element;
|
|
173
179
|
},
|
|
174
180
|
|
|
@@ -176,7 +182,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'util/shortcut/registry'], functi
|
|
|
176
182
|
* Checks if the navigable element is visible
|
|
177
183
|
* @returns {Boolean}
|
|
178
184
|
*/
|
|
179
|
-
isVisible() {
|
|
185
|
+
isVisible: function isVisible() {
|
|
180
186
|
return $element.is(':visible');
|
|
181
187
|
},
|
|
182
188
|
|
|
@@ -184,7 +190,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'util/shortcut/registry'], functi
|
|
|
184
190
|
* Checks if the navigable element is enabled
|
|
185
191
|
* @returns {Boolean}
|
|
186
192
|
*/
|
|
187
|
-
isEnabled() {
|
|
193
|
+
isEnabled: function isEnabled() {
|
|
188
194
|
return !$element.is(':disabled');
|
|
189
195
|
},
|
|
190
196
|
|
|
@@ -192,8 +198,8 @@ define(['jquery', 'lodash', 'core/eventifier', 'util/shortcut/registry'], functi
|
|
|
192
198
|
* Checks if the navigable element is focused
|
|
193
199
|
* @returns {Boolean}
|
|
194
200
|
*/
|
|
195
|
-
isFocused() {
|
|
196
|
-
|
|
201
|
+
isFocused: function isFocused() {
|
|
202
|
+
var el = $element.get(0);
|
|
197
203
|
return document.activeElement && el === document.activeElement;
|
|
198
204
|
},
|
|
199
205
|
|
|
@@ -201,7 +207,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'util/shortcut/registry'], functi
|
|
|
201
207
|
* Removes the focus from the navigable element
|
|
202
208
|
* @returns {navigableDomElement}
|
|
203
209
|
*/
|
|
204
|
-
blur() {
|
|
210
|
+
blur: function blur() {
|
|
205
211
|
$element.blur();
|
|
206
212
|
return this;
|
|
207
213
|
},
|
|
@@ -210,11 +216,10 @@ define(['jquery', 'lodash', 'core/eventifier', 'util/shortcut/registry'], functi
|
|
|
210
216
|
* Sets the focus on the navigable element
|
|
211
217
|
* @returns {navigableDomElement}
|
|
212
218
|
*/
|
|
213
|
-
focus() {
|
|
219
|
+
focus: function focus() {
|
|
214
220
|
$element.focus();
|
|
215
221
|
return this;
|
|
216
222
|
}
|
|
217
|
-
|
|
218
223
|
});
|
|
219
224
|
}
|
|
220
225
|
/**
|
|
@@ -223,14 +228,18 @@ define(['jquery', 'lodash', 'core/eventifier', 'util/shortcut/registry'], functi
|
|
|
223
228
|
* @returns {Array}
|
|
224
229
|
*/
|
|
225
230
|
|
|
226
|
-
navigableDomElement.createFromDoms = $elements
|
|
227
|
-
|
|
231
|
+
navigableDomElement.createFromDoms = function ($elements) {
|
|
232
|
+
var list = [];
|
|
228
233
|
|
|
229
|
-
|
|
234
|
+
var addElement = function addElement(element) {
|
|
235
|
+
return list.push(navigableDomElement(element));
|
|
236
|
+
};
|
|
230
237
|
|
|
231
238
|
if ($elements) {
|
|
232
239
|
if ($elements instanceof $) {
|
|
233
|
-
$elements.each((i, element)
|
|
240
|
+
$elements.each(function (i, element) {
|
|
241
|
+
return addElement(element);
|
|
242
|
+
});
|
|
234
243
|
} else {
|
|
235
244
|
_.forEach($elements, addElement);
|
|
236
245
|
}
|
|
@@ -246,7 +255,11 @@ define(['jquery', 'lodash', 'core/eventifier', 'util/shortcut/registry'], functi
|
|
|
246
255
|
*/
|
|
247
256
|
|
|
248
257
|
|
|
249
|
-
navigableDomElement.isNavigableElement =
|
|
258
|
+
navigableDomElement.isNavigableElement = function (navigable) {
|
|
259
|
+
return !!navigable && navigableApi.every(function (n) {
|
|
260
|
+
return 'function' === typeof navigable[n];
|
|
261
|
+
});
|
|
262
|
+
};
|
|
250
263
|
|
|
251
264
|
return navigableDomElement;
|
|
252
265
|
|
|
@@ -23,7 +23,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
23
23
|
* Copyright (c) 2017-2020 (original work) Open Assessment Technologies SA;
|
|
24
24
|
*
|
|
25
25
|
*/
|
|
26
|
-
|
|
26
|
+
var defaults = {
|
|
27
27
|
defaultPosition: -1,
|
|
28
28
|
keepState: false,
|
|
29
29
|
loop: false,
|
|
@@ -44,26 +44,28 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
44
44
|
*/
|
|
45
45
|
|
|
46
46
|
function keyNavigatorFactory(config) {
|
|
47
|
-
|
|
47
|
+
var navigatorConfig = Object.assign({}, defaults, config || {});
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
var id = navigatorConfig.id || _.uniqueId('navigator_');
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
var $group = navigatorConfig.group && $(navigatorConfig.group).addClass('key-navigation-group').attr('data-navigation-id', id);
|
|
52
52
|
|
|
53
53
|
if (navigatorConfig.group && (!$group.length || !$.contains(document.body, $group.get(0)))) {
|
|
54
54
|
throw new TypeError('group element does not exist');
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
var navigableElements = navigatorConfig.elements || [];
|
|
58
|
+
var lastPosition = -1;
|
|
59
|
+
var focusOutObserver;
|
|
60
60
|
/**
|
|
61
61
|
* Checks if the navigable element is available
|
|
62
62
|
* @param {navigableDomElement} navigable
|
|
63
63
|
* @returns {Boolean}
|
|
64
64
|
*/
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
var isNavigableAvailable = function isNavigableAvailable(navigable) {
|
|
67
|
+
return navigable && navigable.isVisible() && navigable.isEnabled();
|
|
68
|
+
};
|
|
67
69
|
/**
|
|
68
70
|
* Checks if the navigable element is focused
|
|
69
71
|
* @param {navigableDomElement} navigable
|
|
@@ -71,7 +73,9 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
71
73
|
*/
|
|
72
74
|
|
|
73
75
|
|
|
74
|
-
|
|
76
|
+
var isNavigableFocused = function isNavigableFocused(navigable) {
|
|
77
|
+
return isNavigableAvailable(navigable) && navigable.isFocused();
|
|
78
|
+
};
|
|
75
79
|
/**
|
|
76
80
|
* Gets the closest allowed position to the right
|
|
77
81
|
*
|
|
@@ -80,8 +84,8 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
80
84
|
*/
|
|
81
85
|
|
|
82
86
|
|
|
83
|
-
|
|
84
|
-
for (
|
|
87
|
+
var getClosestPositionRight = function getClosestPositionRight(fromPosition) {
|
|
88
|
+
for (var pos = fromPosition; pos < navigableElements.length; pos++) {
|
|
85
89
|
if (isNavigableAvailable(navigableElements[pos])) {
|
|
86
90
|
return pos;
|
|
87
91
|
}
|
|
@@ -97,8 +101,8 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
97
101
|
*/
|
|
98
102
|
|
|
99
103
|
|
|
100
|
-
|
|
101
|
-
for (
|
|
104
|
+
var getClosestPositionLeft = function getClosestPositionLeft(fromPosition) {
|
|
105
|
+
for (var pos = fromPosition; pos >= 0; pos--) {
|
|
102
106
|
if (isNavigableAvailable(navigableElements[pos])) {
|
|
103
107
|
return pos;
|
|
104
108
|
}
|
|
@@ -113,29 +117,31 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
113
117
|
*/
|
|
114
118
|
|
|
115
119
|
|
|
116
|
-
|
|
120
|
+
var keyNavigator = eventifier({
|
|
117
121
|
/**
|
|
118
122
|
* Setups the navigator
|
|
119
123
|
* @returns {keyNavigator}
|
|
120
124
|
*/
|
|
121
|
-
init() {
|
|
125
|
+
init: function init() {
|
|
126
|
+
var _this = this;
|
|
127
|
+
|
|
122
128
|
if ($group) {
|
|
123
129
|
//add the focusin and focus out class for group highlighting
|
|
124
|
-
$group.on(
|
|
125
|
-
if (
|
|
130
|
+
$group.on("focusin.".concat(this.getId()), function () {
|
|
131
|
+
if (_this.isFocused()) {
|
|
126
132
|
$group.addClass('focusin');
|
|
127
133
|
}
|
|
128
|
-
}).on(
|
|
129
|
-
if (!
|
|
134
|
+
}).on("focusout.".concat(this.getId()), function () {
|
|
135
|
+
if (!_this.isFocused()) {
|
|
130
136
|
$group.removeClass('focusin');
|
|
131
137
|
}
|
|
132
138
|
});
|
|
133
|
-
focusOutObserver = new MutationObserver(()
|
|
134
|
-
if (!
|
|
139
|
+
focusOutObserver = new MutationObserver(function () {
|
|
140
|
+
if (!_this.isVisible() && $group.hasClass('focusin')) {
|
|
135
141
|
$group.removeClass('focusin');
|
|
136
142
|
}
|
|
137
143
|
});
|
|
138
|
-
$group.each(index
|
|
144
|
+
$group.each(function (index) {
|
|
139
145
|
focusOutObserver.observe($group.get(index), {
|
|
140
146
|
childList: true,
|
|
141
147
|
subtree: true
|
|
@@ -143,7 +149,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
143
149
|
});
|
|
144
150
|
}
|
|
145
151
|
|
|
146
|
-
navigableElements.forEach(navigable
|
|
152
|
+
navigableElements.forEach(function (navigable) {
|
|
147
153
|
if (!navigableDomElement.isNavigableElement(navigable)) {
|
|
148
154
|
throw new TypeError('not a valid navigable element');
|
|
149
155
|
}
|
|
@@ -154,13 +160,15 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
154
160
|
});
|
|
155
161
|
}
|
|
156
162
|
|
|
157
|
-
navigable.off(
|
|
158
|
-
|
|
159
|
-
}).on(
|
|
160
|
-
|
|
163
|
+
navigable.off(".".concat(_this.getId())).on("key.".concat(_this.getId()), function (key, el) {
|
|
164
|
+
return _this.trigger('key', key, el);
|
|
165
|
+
}).on("focus.".concat(_this.getId()), function () {
|
|
166
|
+
lastPosition = _this.getCurrentPosition();
|
|
167
|
+
}).on("blur.".concat(_this.getId()), function () {
|
|
168
|
+
var cursor = _this.getCursorAt(lastPosition);
|
|
161
169
|
|
|
162
170
|
if (cursor.navigable) {
|
|
163
|
-
|
|
171
|
+
_this.trigger('blur', cursor);
|
|
164
172
|
}
|
|
165
173
|
});
|
|
166
174
|
});
|
|
@@ -171,17 +179,19 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
171
179
|
* Destroys and cleanup
|
|
172
180
|
* @returns {keyNavigator}
|
|
173
181
|
*/
|
|
174
|
-
destroy() {
|
|
182
|
+
destroy: function destroy() {
|
|
183
|
+
var _this2 = this;
|
|
184
|
+
|
|
175
185
|
if ($group) {
|
|
176
|
-
$group.off(
|
|
186
|
+
$group.off(".".concat(this.getId())).removeClass('focusin');
|
|
177
187
|
}
|
|
178
188
|
|
|
179
189
|
if (focusOutObserver) {
|
|
180
190
|
focusOutObserver.disconnect();
|
|
181
191
|
}
|
|
182
192
|
|
|
183
|
-
navigableElements.forEach(navigable
|
|
184
|
-
navigable.off(
|
|
193
|
+
navigableElements.forEach(function (navigable) {
|
|
194
|
+
navigable.off(".".concat(_this2.getId));
|
|
185
195
|
|
|
186
196
|
if (navigable.getType() === 'element') {
|
|
187
197
|
navigable.destroy();
|
|
@@ -195,7 +205,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
195
205
|
* Gets the navigation group id
|
|
196
206
|
* @returns {String}
|
|
197
207
|
*/
|
|
198
|
-
getId() {
|
|
208
|
+
getId: function getId() {
|
|
199
209
|
return id;
|
|
200
210
|
},
|
|
201
211
|
|
|
@@ -203,7 +213,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
203
213
|
* Gets the type of navigable element
|
|
204
214
|
* @returns {String}
|
|
205
215
|
*/
|
|
206
|
-
getType() {
|
|
216
|
+
getType: function getType() {
|
|
207
217
|
return 'navigator';
|
|
208
218
|
},
|
|
209
219
|
|
|
@@ -211,7 +221,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
211
221
|
* Gets the defined group the navigator group belongs to
|
|
212
222
|
* @returns {jQuery}
|
|
213
223
|
*/
|
|
214
|
-
getElement() {
|
|
224
|
+
getElement: function getElement() {
|
|
215
225
|
return $group;
|
|
216
226
|
},
|
|
217
227
|
|
|
@@ -219,7 +229,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
219
229
|
* Returns the current cursor of the navigator
|
|
220
230
|
* @returns {Object}
|
|
221
231
|
*/
|
|
222
|
-
getCursor() {
|
|
232
|
+
getCursor: function getCursor() {
|
|
223
233
|
return this.getCursorAt(this.getCurrentPosition());
|
|
224
234
|
},
|
|
225
235
|
|
|
@@ -228,7 +238,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
228
238
|
* @param {Number} position
|
|
229
239
|
* @returns {navigableDomElement}
|
|
230
240
|
*/
|
|
231
|
-
getNavigableAt(position) {
|
|
241
|
+
getNavigableAt: function getNavigableAt(position) {
|
|
232
242
|
if (position >= 0 && navigableElements[position]) {
|
|
233
243
|
return navigableElements[position];
|
|
234
244
|
}
|
|
@@ -241,11 +251,11 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
241
251
|
* @param {Number} position
|
|
242
252
|
* @returns {Object}
|
|
243
253
|
*/
|
|
244
|
-
getCursorAt(position) {
|
|
245
|
-
|
|
254
|
+
getCursorAt: function getCursorAt(position) {
|
|
255
|
+
var navigable = this.getNavigableAt(position);
|
|
246
256
|
return {
|
|
247
257
|
position: navigable ? position : -1,
|
|
248
|
-
navigable
|
|
258
|
+
navigable: navigable
|
|
249
259
|
};
|
|
250
260
|
},
|
|
251
261
|
|
|
@@ -257,9 +267,9 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
257
267
|
* @fires blur on the previous cursor
|
|
258
268
|
* @fires focus on the new cursor
|
|
259
269
|
*/
|
|
260
|
-
setCursorAt(position) {
|
|
270
|
+
setCursorAt: function setCursorAt(position) {
|
|
261
271
|
if (navigableElements[position]) {
|
|
262
|
-
|
|
272
|
+
var cursor = this.getCursorAt(lastPosition);
|
|
263
273
|
|
|
264
274
|
if (cursor.navigable) {
|
|
265
275
|
/**
|
|
@@ -269,7 +279,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
269
279
|
this.trigger('blur', cursor);
|
|
270
280
|
}
|
|
271
281
|
|
|
272
|
-
|
|
282
|
+
var direction = position - lastPosition;
|
|
273
283
|
lastPosition = position;
|
|
274
284
|
navigableElements[position].focus(direction);
|
|
275
285
|
/**
|
|
@@ -287,7 +297,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
287
297
|
* Returns the current position in the navigator
|
|
288
298
|
* @returns {Number}
|
|
289
299
|
*/
|
|
290
|
-
getCurrentPosition() {
|
|
300
|
+
getCurrentPosition: function getCurrentPosition() {
|
|
291
301
|
if (document.activeElement) {
|
|
292
302
|
return _.findIndex(navigableElements, isNavigableFocused);
|
|
293
303
|
}
|
|
@@ -299,8 +309,8 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
299
309
|
* Returns the current navigable in the navigator
|
|
300
310
|
* @returns {Object}
|
|
301
311
|
*/
|
|
302
|
-
getCurrentNavigable() {
|
|
303
|
-
|
|
312
|
+
getCurrentNavigable: function getCurrentNavigable() {
|
|
313
|
+
var position = this.getCurrentPosition();
|
|
304
314
|
|
|
305
315
|
if (position >= 0) {
|
|
306
316
|
return navigableElements[position];
|
|
@@ -313,7 +323,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
313
323
|
* Returns the array of navigable objects composing the navigator
|
|
314
324
|
* @returns {Array}
|
|
315
325
|
*/
|
|
316
|
-
getNavigableElements() {
|
|
326
|
+
getNavigableElements: function getNavigableElements() {
|
|
317
327
|
return navigableElements.slice();
|
|
318
328
|
},
|
|
319
329
|
|
|
@@ -321,9 +331,11 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
321
331
|
* Checks if the group and at least one navigable element is visible
|
|
322
332
|
* @returns {boolean}
|
|
323
333
|
*/
|
|
324
|
-
isVisible() {
|
|
334
|
+
isVisible: function isVisible() {
|
|
325
335
|
if (!$group || $group.is(':visible')) {
|
|
326
|
-
return navigableElements.some(
|
|
336
|
+
return navigableElements.some(function (navigable) {
|
|
337
|
+
return navigable.isVisible();
|
|
338
|
+
});
|
|
327
339
|
}
|
|
328
340
|
|
|
329
341
|
return false;
|
|
@@ -333,9 +345,11 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
333
345
|
* Checks if the group and at least one navigable element is enabled
|
|
334
346
|
* @returns {Boolean}
|
|
335
347
|
*/
|
|
336
|
-
isEnabled() {
|
|
348
|
+
isEnabled: function isEnabled() {
|
|
337
349
|
if (!$group || !$group.is(':disabled')) {
|
|
338
|
-
return navigableElements.some(
|
|
350
|
+
return navigableElements.some(function (navigable) {
|
|
351
|
+
return navigable.isEnabled();
|
|
352
|
+
});
|
|
339
353
|
}
|
|
340
354
|
|
|
341
355
|
return false;
|
|
@@ -345,9 +359,11 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
345
359
|
* Checks if at least one navigable element is focused
|
|
346
360
|
* @returns {Boolean}
|
|
347
361
|
*/
|
|
348
|
-
isFocused() {
|
|
362
|
+
isFocused: function isFocused() {
|
|
349
363
|
if (document.activeElement) {
|
|
350
|
-
return navigableElements.some(
|
|
364
|
+
return navigableElements.some(function (navigable) {
|
|
365
|
+
return navigable.isFocused();
|
|
366
|
+
});
|
|
351
367
|
}
|
|
352
368
|
|
|
353
369
|
return false;
|
|
@@ -357,7 +373,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
357
373
|
* Sets the focus on the first available focusable element
|
|
358
374
|
* @returns {keyNavigator}
|
|
359
375
|
*/
|
|
360
|
-
first() {
|
|
376
|
+
first: function first() {
|
|
361
377
|
this.setCursorAt(getClosestPositionRight(0));
|
|
362
378
|
return this;
|
|
363
379
|
},
|
|
@@ -366,7 +382,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
366
382
|
* Sets the focus on the last available focusable element
|
|
367
383
|
* @returns {keyNavigator}
|
|
368
384
|
*/
|
|
369
|
-
last() {
|
|
385
|
+
last: function last() {
|
|
370
386
|
this.setCursorAt(getClosestPositionLeft(navigableElements.length - 1));
|
|
371
387
|
return this;
|
|
372
388
|
},
|
|
@@ -378,8 +394,8 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
378
394
|
* @fires upperbound when we cannot move further
|
|
379
395
|
* @fires next when the cursor successfully moved to the next position
|
|
380
396
|
*/
|
|
381
|
-
next() {
|
|
382
|
-
|
|
397
|
+
next: function next() {
|
|
398
|
+
var position = this.getCurrentPosition();
|
|
383
399
|
|
|
384
400
|
if (position >= 0) {
|
|
385
401
|
position = getClosestPositionRight(position + 1);
|
|
@@ -396,7 +412,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
396
412
|
this.trigger('upperbound');
|
|
397
413
|
}
|
|
398
414
|
|
|
399
|
-
|
|
415
|
+
var cursor = this.getCursor();
|
|
400
416
|
/**
|
|
401
417
|
* @event next
|
|
402
418
|
* @param {Object} cursor
|
|
@@ -417,8 +433,8 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
417
433
|
* @fires lowerbound when we cannot move lower
|
|
418
434
|
* @fires previous when the cursor successfully moved to the previous position
|
|
419
435
|
*/
|
|
420
|
-
previous() {
|
|
421
|
-
|
|
436
|
+
previous: function previous() {
|
|
437
|
+
var position = this.getCurrentPosition();
|
|
422
438
|
|
|
423
439
|
if (position >= 0) {
|
|
424
440
|
position = getClosestPositionLeft(position - 1);
|
|
@@ -435,7 +451,7 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
435
451
|
this.trigger('lowerbound');
|
|
436
452
|
}
|
|
437
453
|
|
|
438
|
-
|
|
454
|
+
var cursor = this.getCursor();
|
|
439
455
|
/**
|
|
440
456
|
* @event previous
|
|
441
457
|
* @param {Object} cursor
|
|
@@ -456,8 +472,8 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
456
472
|
* @returns {keyNavigator}
|
|
457
473
|
* @fires activate
|
|
458
474
|
*/
|
|
459
|
-
activate(target) {
|
|
460
|
-
|
|
475
|
+
activate: function activate(target) {
|
|
476
|
+
var cursor = this.getCursor();
|
|
461
477
|
|
|
462
478
|
if (cursor.navigable) {
|
|
463
479
|
/**
|
|
@@ -475,8 +491,8 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
475
491
|
* Blurs the focused element, if any
|
|
476
492
|
* @returns {keyNavigator}
|
|
477
493
|
*/
|
|
478
|
-
blur() {
|
|
479
|
-
|
|
494
|
+
blur: function blur() {
|
|
495
|
+
var cursor = this.getCursorAt(lastPosition);
|
|
480
496
|
|
|
481
497
|
if (cursor.navigable) {
|
|
482
498
|
cursor.navigable.blur();
|
|
@@ -493,9 +509,9 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
493
509
|
* A negative direction will lead to the last focusable element.
|
|
494
510
|
* @returns {keyNavigator}
|
|
495
511
|
*/
|
|
496
|
-
focus() {
|
|
497
|
-
|
|
498
|
-
|
|
512
|
+
focus: function focus() {
|
|
513
|
+
var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
|
|
514
|
+
var position = -1; // try to get the default position
|
|
499
515
|
|
|
500
516
|
if (navigatorConfig.keepState && this.getNavigableAt(lastPosition)) {
|
|
501
517
|
position = lastPosition;
|
|
@@ -523,9 +539,8 @@ define(['jquery', 'lodash', 'core/eventifier', 'ui/keyNavigation/navigableDomEle
|
|
|
523
539
|
this.setCursorAt(getClosestPositionRight(position));
|
|
524
540
|
return this;
|
|
525
541
|
}
|
|
526
|
-
|
|
527
542
|
});
|
|
528
|
-
return keyNavigator.init().on('key', (key, el)
|
|
543
|
+
return keyNavigator.init().on('key', function (key, el) {
|
|
529
544
|
if (key === 'space' || key === 'enter') {
|
|
530
545
|
keyNavigator.activate(el);
|
|
531
546
|
} else {
|