better_exposed_filters-8.x-4.x-dev/js/bef_soft_limit.js

js/bef_soft_limit.js
/**
 * @file
 * Provides the soft limit functionality.
 */

(function ($, once) {
  Drupal.behaviors.better_exposed_filters_soft_limit = {
    attach: function (context, settings) {
      if (settings.better_exposed_filters.soft_limit !== 'undefined') {
        $.each(settings.better_exposed_filters.soft_limit, function (bef) {
          Drupal.better_exposed_filters.applySoftLimit(bef, settings.better_exposed_filters.soft_limit[bef]);
        });
      }
    }
  };

  Drupal.better_exposed_filters = Drupal.better_exposed_filters || {};

  /**
   * Applies the soft limit UI feature to a specific filter.
   *
   * @param {string} filter_id
   *   The filter id.
   * @param {object} settings
   *   The maximum amount of items to show.
   */
  Drupal.better_exposed_filters.applySoftLimit = function (filter_id, settings) {
    var filter_selector = filter_id.replace(/_/g, '-');
    var zero_based_limit = (settings.limit - 1);
    var bef_list = $('[data-drupal-selector^="edit-' + filter_selector + '"] ' + settings.list_selector);

    // In case of multiple instances of a filter, we need to key them.
    if (bef_list.length > 1) {
      bef_list.each(function (key, $value) {
        $(this).attr('data-drupal-filter-id', filter_selector + '-' + key);
      });
    }

    // Hide befs over the limit.
    bef_list.each(function () {
      var allLiElements = $(this).find(settings.item_selector);
      $(once('applySoftLimit', allLiElements.slice(zero_based_limit + 1))).hide();
    });

    // Add "Show more" / "Show less" links.
    $(once('applySoftLimit', bef_list.filter(function () {
      return $(this).find(settings.item_selector).length > settings.limit;
    }))).each(function () {
      var bef = $(this);
      var showLessLabel = settings.show_less;
      var showMoreLabel = settings.show_more;
      $('<a href="#" class="bef-soft-limit-link"></a>')
        .text(showMoreLabel)
        .on('click', function () {
          if (bef.find(settings.item_selector + ':hidden').length > 0) {
            bef.find(settings.item_selector + ':gt(' + zero_based_limit + ')').slideDown();
            bef.find(settings.item_selector + ':lt(' + (zero_based_limit + 2) + ') a, ' + settings.item_selector +':lt(' + (zero_based_limit + 2) + ') input').focus();
            $(this).addClass('open').text(showLessLabel);
          }
          else {
            bef.find(settings.item_selector + ':gt(' + zero_based_limit + ')').slideUp();
            $(this).removeClass('open').text(showMoreLabel);
          }
          return false;
        }).insertAfter($(this));
    });
  };

})(jQuery, once);

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

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