widget_engine-8.x-1.2/modules/widget_engine_entity_form/js/widget_engine_entity_form.select_add_tabs.js

modules/widget_engine_entity_form/js/widget_engine_entity_form.select_add_tabs.js
/**
 * @file Entity_browser.admin.js.
 *
 * Defines the behavior of the entity browser's Select&Add tabs display.
 */

var EntityBrowser = EntityBrowser || {};

(function ($, Drupal, drupalSettings, once) {

  'use strict';

  /**
   * Registers behaviours related to tabs display.
   */
  Drupal.behaviors.entityBrowserTabs = {
    attach: function (context) {
      var $form = $(once('entity-browser-admin', '.entity-browser-form', context))
      if (!$form.length) {
        return;
      }
      // Creates basic DOM structure elements.
      var $nav = $('<nav class="eb-tabs"></nav>');
      var $tabs = $(Drupal.theme('entityTabs'));
      var $addOptions = $(Drupal.theme('entityAddList'));

      $form.find('.tab').each(function (index, element) {
        var $element = $(element);
        var classesArray = [];
        classesArray.push($element.attr('disabled') ? 'is-active active' : '');
        classesArray.push($element.attr('tab-class') ? $element.attr('tab-class') : '');
        var classes = classesArray.join(' '),
            tabSettings = {
              class: classes,
              id: $element.attr('id'),
              title: $(this)[0].value
            },
            specialClass = '';

        if ($element.hasClass('view-option-tab')) {
          specialClass = '.view-option-tab';
        } else if ($element.hasClass('add-option-tab')) {
          specialClass = '.add-option-tab';
        }

        if (specialClass) {
          $tabs.find(specialClass).each(function (index, linkElement) {
            var $linkElement = $(linkElement);
            $linkElement.attr('data-button-id', tabSettings.id);
            $linkElement.on('click', function (event) {
              var buttonID = $(event.currentTarget).data().buttonId;
              $form.find('#' + buttonID).trigger('click');
              event.preventDefault();
            });
            if (specialClass == '.view-option-tab') {
              $linkElement.append(tabSettings.title);
              if ($element.attr('disabled')) {
                $linkElement.addClass('is-active active');
              }
              else {
                $tabs.addClass('creation-process');
                $tabs.find('.add-option-tab').addClass('is-active active');
              }
            }
            else if (specialClass == '.add-option-tab' && $element.attr('disabled')) {
              $tabs.addClass('single-item-creation');
              $linkElement.on('click', function (event) {
                event.preventDefault();
                return false;
              });
            }
          });
        }
        else {
          var $tab = $(Drupal.theme('entityTab', tabSettings));
          $tab.appendTo($addOptions);
          // 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();
          });
        }
      });
      $tabs.appendTo($nav);
      $addOptions.prependTo($form);
      $nav.prependTo($form);

      if ($('.add-tab-open').length > 0) {
        if ($('.add-option-tab-single').length > 0){
          $(".add-option-tab").click();
        } else {
          $('.entity-browser-form div').toggle();
          $('.add-options-list').toggle();
          $('.basic-tabs a').toggleClass('is-active active');
          $('.view-option-tab').on('click', function (event) {
            EntityBrowser.changeIFrameURL();
          });
          $form.show();
        }
      } else {
        $form.show();
      }

      // It will fix aligning for adaptive design.
      $('.add-options-list').append('<li></li><li></li><li></li>');
    }
  };

  /**
   * Registers behaviours related to Select and Add tabs click.
   */
  Drupal.behaviors.basicTabsControl = {
    attach: function (context) {
      var $tabs = $(once('entity-browser-admin', '.basic-tabs', context))
      if (!$tabs.length || $tabs.hasClass('single-item-creation')) {
        var add_tab = EntityBrowser.getUrlParameter('add_tab');
        if (add_tab) {
          $('a.view-option-tab').on('click', function() {
            EntityBrowser.changeIFrameURL();
          });
        }
        return;
      }
      if ($tabs.hasClass('creation-process')) {
        $tabs.find('a').on('click', function() {
          if (!$(this).hasClass('view-option-tab')) {
            $('.entity-browser-form div').toggle();
            $('.add-options-list').toggle();
          } else {
            var add_tab = EntityBrowser.getUrlParameter('add_tab');
            if (add_tab) {
              EntityBrowser.changeIFrameURL()
            } else {
              $('.basic-tabs a').toggleClass('is-active active');
            }
          }

          return false;
        });
      } else {
        $tabs.find('a').on('click', function() {
          if (!$(this).hasClass('is-active')) {
            $('.entity-browser-form div').toggle();
            $('.add-options-list').toggle();
            $('.basic-tabs a').toggleClass('is-active active');
          }

          return false;
        });
      }
    }
  };

  /**
   * Theme function for entity browser Select&Add tabs.
   *
   * @return {object}
   *   This function returns a jQuery object.
   */
  Drupal.theme.entityTabs = function () {
    return $('<ul role="navigation" aria-label="Tabs" class="basic-tabs"></ul>')
        .append($('<li tabindex="-1"></li>')
            .append($('<a href="#" class="add-option-tab"></a>')
                .append(Drupal.t('Create new'))
            )
        )
        .append($('<li tabindex="-1"></li>')
            .append($('<a href="#" class="view-option-tab"></a>')));
  };

  /**
   * Theme function for an entity browser Add tab items.
   *
   * @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>')
        .append($('<a href="#" class="tab-create"></a>').addClass(settings.class).attr('data-button-id', settings.id)
            .append(settings.title)
        );
  };

  /**
   * Theme function for entity browser Add tabs wrapper.
   *
   * @return {object}
   *   This function returns a jQuery object.
   */
  Drupal.theme.entityAddList = function () {
    return $('<ul class="add-options-list"></ul>')
        .css('display', 'none');
  };

  /**
   * Helper function for getting query parameters from URL.
   *
   * @param name
   *   Url query parameter to find.
   * @returns {string}
   */
  EntityBrowser.getUrlParameter = function (name) {
    name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
    var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
    var results = regex.exec(location.search);
    return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
  };

  /**
   * Helper function for changing parent entity browser iFrame src.
   */
  EntityBrowser.changeIFrameURL = function () {
    var $iframe = $('iframe.entity-browser-modal-iframe', top.document),
        src = $iframe.attr('src'),
        res_src = src.replace('add_tab=true', '');
    $iframe.attr('src', res_src);
  }

}(jQuery, Drupal, drupalSettings, once));

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc