Chris@0: /** Chris@0: * DO NOT EDIT THIS FILE. Chris@0: * See the following change record for more information, Chris@0: * https://www.drupal.org/node/2815083 Chris@0: * @preserve Chris@0: **/ Chris@0: Chris@0: (function ($, Drupal, drupalSettings) { Chris@0: var handleFragmentLinkClickOrHashChange = function handleFragmentLinkClickOrHashChange(e, $target) { Chris@0: $target.parents('.vertical-tabs__pane').each(function (index, pane) { Chris@0: $(pane).data('verticalTab').focus(); Chris@0: }); Chris@0: }; Chris@0: Chris@0: Drupal.behaviors.verticalTabs = { Chris@0: attach: function attach(context) { Chris@0: var width = drupalSettings.widthBreakpoint || 640; Chris@0: var mq = '(max-width: ' + width + 'px)'; Chris@0: Chris@0: if (window.matchMedia(mq).matches) { Chris@0: return; Chris@0: } Chris@0: Chris@0: $('body').once('vertical-tabs-fragments').on('formFragmentLinkClickOrHashChange.verticalTabs', handleFragmentLinkClickOrHashChange); Chris@0: Chris@0: $(context).find('[data-vertical-tabs-panes]').once('vertical-tabs').each(function () { Chris@0: var $this = $(this).addClass('vertical-tabs__panes'); Chris@0: var focusID = $this.find(':hidden.vertical-tabs__active-tab').val(); Chris@14: var tabFocus = void 0; Chris@0: Chris@0: var $details = $this.find('> details'); Chris@0: if ($details.length === 0) { Chris@0: return; Chris@0: } Chris@0: Chris@14: var tabList = $(''); Chris@14: $this.wrap('
').before(tabList); Chris@0: Chris@0: $details.each(function () { Chris@0: var $that = $(this); Chris@14: var verticalTab = new Drupal.verticalTab({ Chris@0: title: $that.find('> summary').text(), Chris@0: details: $that Chris@0: }); Chris@14: tabList.append(verticalTab.item); Chris@14: $that.removeClass('collapsed').attr('open', true).addClass('vertical-tabs__pane').data('verticalTab', verticalTab); Chris@0: if (this.id === focusID) { Chris@14: tabFocus = $that; Chris@0: } Chris@0: }); Chris@0: Chris@14: $(tabList).find('> li').eq(0).addClass('first'); Chris@14: $(tabList).find('> li').eq(-1).addClass('last'); Chris@0: Chris@14: if (!tabFocus) { Chris@0: var $locationHash = $this.find(window.location.hash); Chris@0: if (window.location.hash && $locationHash.length) { Chris@14: tabFocus = $locationHash.closest('.vertical-tabs__pane'); Chris@0: } else { Chris@14: tabFocus = $this.find('> .vertical-tabs__pane').eq(0); Chris@0: } Chris@0: } Chris@14: if (tabFocus.length) { Chris@14: tabFocus.data('verticalTab').focus(); Chris@0: } Chris@0: }); Chris@0: } Chris@0: }; Chris@0: Chris@0: Drupal.verticalTab = function (settings) { Chris@0: var self = this; Chris@0: $.extend(this, settings, Drupal.theme('verticalTab', settings)); Chris@0: Chris@0: this.link.attr('href', '#' + settings.details.attr('id')); Chris@0: Chris@0: this.link.on('click', function (e) { Chris@0: e.preventDefault(); Chris@0: self.focus(); Chris@0: }); Chris@0: Chris@0: this.link.on('keydown', function (event) { Chris@0: if (event.keyCode === 13) { Chris@0: event.preventDefault(); Chris@0: self.focus(); Chris@0: Chris@0: $('.vertical-tabs__pane :input:visible:enabled').eq(0).trigger('focus'); Chris@0: } Chris@0: }); Chris@0: Chris@0: this.details.on('summaryUpdated', function () { Chris@0: self.updateSummary(); Chris@0: }).trigger('summaryUpdated'); Chris@0: }; Chris@0: Chris@0: Drupal.verticalTab.prototype = { Chris@0: focus: function focus() { Chris@0: this.details.siblings('.vertical-tabs__pane').each(function () { Chris@0: var tab = $(this).data('verticalTab'); Chris@0: tab.details.hide(); Chris@0: tab.item.removeClass('is-selected'); Chris@0: }).end().show().siblings(':hidden.vertical-tabs__active-tab').val(this.details.attr('id')); Chris@0: this.item.addClass('is-selected'); Chris@0: Chris@0: $('#active-vertical-tab').remove(); Chris@0: this.link.append('' + Drupal.t('(active tab)') + ''); Chris@0: }, Chris@0: updateSummary: function updateSummary() { Chris@0: this.summary.html(this.details.drupalGetSummary()); Chris@0: }, Chris@0: tabShow: function tabShow() { Chris@0: this.item.show(); Chris@0: Chris@0: this.item.closest('.js-form-type-vertical-tabs').show(); Chris@0: Chris@0: this.item.parent().children('.vertical-tabs__menu-item').removeClass('first').filter(':visible').eq(0).addClass('first'); Chris@0: Chris@0: this.details.removeClass('vertical-tab--hidden').show(); Chris@0: Chris@0: this.focus(); Chris@0: return this; Chris@0: }, Chris@0: tabHide: function tabHide() { Chris@0: this.item.hide(); Chris@0: Chris@0: this.item.parent().children('.vertical-tabs__menu-item').removeClass('first').filter(':visible').eq(0).addClass('first'); Chris@0: Chris@0: this.details.addClass('vertical-tab--hidden').hide(); Chris@0: Chris@0: var $firstTab = this.details.siblings('.vertical-tabs__pane:not(.vertical-tab--hidden)').eq(0); Chris@0: if ($firstTab.length) { Chris@0: $firstTab.data('verticalTab').focus(); Chris@0: } else { Chris@0: this.item.closest('.js-form-type-vertical-tabs').hide(); Chris@0: } Chris@0: return this; Chris@0: } Chris@0: }; Chris@0: Chris@0: Drupal.theme.verticalTab = function (settings) { Chris@0: var tab = {}; Chris@0: tab.item = $('
  • ').append(tab.link = $('').append(tab.title = $('').text(settings.title)).append(tab.summary = $(''))); Chris@0: return tab; Chris@0: }; Chris@0: })(jQuery, Drupal, drupalSettings);