/** * DO NOT EDIT THIS FILE. * See the following change record for more information, * https://www.drupal.org/node/2815083 * @preserve **/ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } (function ($, Drupal, _ref) { var tabbable = _ref.tabbable, isTabbable = _ref.isTabbable; function TabbingManager() { this.stack = []; } function TabbingContext(options) { $.extend(this, { level: null, $tabbableElements: $(), $disabledElements: $(), released: false, active: false }, options); } $.extend(TabbingManager.prototype, { constrain: function constrain(elements) { var il = this.stack.length; for (var i = 0; i < il; i++) { this.stack[i].deactivate(); } var tabbableElements = []; $(elements).each(function (index, rootElement) { tabbableElements = [].concat(_toConsumableArray(tabbableElements), _toConsumableArray(tabbable(rootElement))); if (isTabbable(rootElement)) { tabbableElements = [].concat(_toConsumableArray(tabbableElements), [rootElement]); } }); var tabbingContext = new TabbingContext({ level: this.stack.length, $tabbableElements: $(tabbableElements) }); this.stack.push(tabbingContext); tabbingContext.activate(); $(document).trigger('drupalTabbingConstrained', tabbingContext); return tabbingContext; }, release: function release() { var toActivate = this.stack.length - 1; while (toActivate >= 0 && this.stack[toActivate].released) { toActivate--; } this.stack.splice(toActivate + 1); if (toActivate >= 0) { this.stack[toActivate].activate(); } }, activate: function activate(tabbingContext) { var $set = tabbingContext.$tabbableElements; var level = tabbingContext.level; var $disabledSet = $(tabbable(document.body)).not($set); tabbingContext.$disabledElements = $disabledSet; var il = $disabledSet.length; for (var i = 0; i < il; i++) { this.recordTabindex($disabledSet.eq(i), level); } $disabledSet.prop('tabindex', -1).prop('autofocus', false); var $hasFocus = $set.filter('[autofocus]').eq(-1); if ($hasFocus.length === 0) { $hasFocus = $set.eq(0); } $hasFocus.trigger('focus'); }, deactivate: function deactivate(tabbingContext) { var $set = tabbingContext.$disabledElements; var level = tabbingContext.level; var il = $set.length; for (var i = 0; i < il; i++) { this.restoreTabindex($set.eq(i), level); } }, recordTabindex: function recordTabindex($el, level) { var tabInfo = $el.data('drupalOriginalTabIndices') || {}; tabInfo[level] = { tabindex: $el[0].getAttribute('tabindex'), autofocus: $el[0].hasAttribute('autofocus') }; $el.data('drupalOriginalTabIndices', tabInfo); }, restoreTabindex: function restoreTabindex($el, level) { var tabInfo = $el.data('drupalOriginalTabIndices'); if (tabInfo && tabInfo[level]) { var data = tabInfo[level]; if (data.tabindex) { $el[0].setAttribute('tabindex', data.tabindex); } else { $el[0].removeAttribute('tabindex'); } if (data.autofocus) { $el[0].setAttribute('autofocus', 'autofocus'); } if (level === 0) { $el.removeData('drupalOriginalTabIndices'); } else { var levelToDelete = level; while (tabInfo.hasOwnProperty(levelToDelete)) { delete tabInfo[levelToDelete]; levelToDelete++; } $el.data('drupalOriginalTabIndices', tabInfo); } } } }); $.extend(TabbingContext.prototype, { release: function release() { if (!this.released) { this.deactivate(); this.released = true; Drupal.tabbingManager.release(this); $(document).trigger('drupalTabbingContextReleased', this); } }, activate: function activate() { if (!this.active && !this.released) { this.active = true; Drupal.tabbingManager.activate(this); $(document).trigger('drupalTabbingContextActivated', this); } }, deactivate: function deactivate() { if (this.active) { this.active = false; Drupal.tabbingManager.deactivate(this); $(document).trigger('drupalTabbingContextDeactivated', this); } } }); if (Drupal.tabbingManager) { return; } Drupal.tabbingManager = new TabbingManager(); })(jQuery, Drupal, window.tabbable);