123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- /**
- * Copyright (c) Tiny Technologies, Inc. All rights reserved.
- * Licensed under the LGPL or a commercial license.
- * For LGPL see License.txt in the project root for license information.
- * For commercial licenses see https://www.tiny.cloud/
- *
- * Version: 5.2.0 (2020-02-13)
- */
- (function (domGlobals) {
- 'use strict';
- var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
- var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
- var global$2 = tinymce.util.Tools.resolve('tinymce.EditorManager');
- var global$3 = tinymce.util.Tools.resolve('tinymce.Env');
- var global$4 = tinymce.util.Tools.resolve('tinymce.util.Delay');
- var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');
- var global$6 = tinymce.util.Tools.resolve('tinymce.util.VK');
- var getTabFocusElements = function (editor) {
- return editor.getParam('tabfocus_elements', ':prev,:next');
- };
- var getTabFocus = function (editor) {
- return editor.getParam('tab_focus', getTabFocusElements(editor));
- };
- var Settings = { getTabFocus: getTabFocus };
- var DOM = global$1.DOM;
- var tabCancel = function (e) {
- if (e.keyCode === global$6.TAB && !e.ctrlKey && !e.altKey && !e.metaKey) {
- e.preventDefault();
- }
- };
- var setup = function (editor) {
- function tabHandler(e) {
- var x, el, v, i;
- if (e.keyCode !== global$6.TAB || e.ctrlKey || e.altKey || e.metaKey || e.isDefaultPrevented()) {
- return;
- }
- function find(direction) {
- el = DOM.select(':input:enabled,*[tabindex]:not(iframe)');
- function canSelectRecursive(e) {
- return e.nodeName === 'BODY' || e.type !== 'hidden' && e.style.display !== 'none' && e.style.visibility !== 'hidden' && canSelectRecursive(e.parentNode);
- }
- function canSelect(el) {
- return /INPUT|TEXTAREA|BUTTON/.test(el.tagName) && global$2.get(e.id) && el.tabIndex !== -1 && canSelectRecursive(el);
- }
- global$5.each(el, function (e, i) {
- if (e.id === editor.id) {
- x = i;
- return false;
- }
- });
- if (direction > 0) {
- for (i = x + 1; i < el.length; i++) {
- if (canSelect(el[i])) {
- return el[i];
- }
- }
- } else {
- for (i = x - 1; i >= 0; i--) {
- if (canSelect(el[i])) {
- return el[i];
- }
- }
- }
- return null;
- }
- v = global$5.explode(Settings.getTabFocus(editor));
- if (v.length === 1) {
- v[1] = v[0];
- v[0] = ':prev';
- }
- if (e.shiftKey) {
- if (v[0] === ':prev') {
- el = find(-1);
- } else {
- el = DOM.get(v[0]);
- }
- } else {
- if (v[1] === ':next') {
- el = find(1);
- } else {
- el = DOM.get(v[1]);
- }
- }
- if (el) {
- var focusEditor = global$2.get(el.id || el.name);
- if (el.id && focusEditor) {
- focusEditor.focus();
- } else {
- global$4.setTimeout(function () {
- if (!global$3.webkit) {
- domGlobals.window.focus();
- }
- el.focus();
- }, 10);
- }
- e.preventDefault();
- }
- }
- editor.on('init', function () {
- if (editor.inline) {
- DOM.setAttrib(editor.getBody(), 'tabIndex', null);
- }
- editor.on('keyup', tabCancel);
- if (global$3.gecko) {
- editor.on('keypress keydown', tabHandler);
- } else {
- editor.on('keydown', tabHandler);
- }
- });
- };
- var Keyboard = { setup: setup };
- function Plugin () {
- global.add('tabfocus', function (editor) {
- Keyboard.setup(editor);
- });
- }
- Plugin();
- }(window));
|