entity_browser-8.x-2.x-dev/js/entity_browser.tabs.js
js/entity_browser.tabs.js
/**
* @file Entity_browser.admin.js.
*
* Defines the behavior of the entity browser's tab display.
*/
(function ($, Drupal, drupalSettings, once) {
'use strict';
/**
* Registers behaviours related to tab display.
*/
Drupal.behaviors.entityBrowserTabs = {
attach: function (context) {
var $form = $(once('entity-browser-admin', '.entity-browser-form', context));
if (!$form.length) {
return;
}
var $nav = $('<nav class="eb-tabs"></nav>');
var $tabs = $(Drupal.theme('entityTabs'));
$form.find('.tab').each(function (index, element) {
var $element = $(element);
var classesArray = [];
classesArray.push($element.attr('disabled') ? 'is-active active' : '');
var text = $element.text();
var textClass = text.toLowerCase().replace(/ /g, '-');
classesArray.push(textClass);
var classes = classesArray.join(' ');
var tabSettings = {
class: classes,
id: $element.attr('id'),
title: $(this)[0].value
};
var $tab = $(Drupal.theme('entityTab', tabSettings));
// Add a click event handler that submits the hidden input buttons.
$tab.find('a').on('click', function (event) {
var buttonID = $(event.currentTarget).data().buttonId;
$form.find('#' + buttonID).trigger('click');
event.preventDefault();
});
$tab.appendTo($tabs);
});
$tabs.appendTo($nav);
$nav.prependTo($form);
$form.find('.tab').css('display', 'none');
}
};
/**
* Theme function for entity browser tabs.
*
* @return {object}
* This function returns a jQuery object.
*/
Drupal.theme.entityTabs = function () {
return $('<ul role="navigation" aria-label="Tabs"></ul>');
};
/**
* Theme function for an entity browser tab.
*
* @param {object} settings
* An object with the following keys:
* @param {string} settings.title
* The name of the tab.
* @param {string} settings.class
* Classes for the tab.
* @param {string} settings.id
* ID for the data- button ID.
*
* @return {object}
* This function returns a jQuery object.
*/
Drupal.theme.entityTab = function (settings) {
return $('<li tabindex="-1"></li>')
.addClass(settings.class)
.append($('<a href="#"></a>').addClass(settings.class).attr('data-button-id', settings.id)
.append(settings.title)
);
};
}(jQuery, Drupal, drupalSettings, once));
