Добавление возможности отметить все чекбоксы разом в Drupal

Опубликовано admin - вт, 07/01/2014 - 16:56

Плагин для добавления чекбокса «Выбрать все» в определенном блоке Drupal.

Использование

(function($) {$(document).ready(function() {
  var options = {'label': 'Выбрать все',};
  $('.form-item-field-event-sites-und').drupalCheckAll(options);
});}(jQuery));

Параметры

  • label: Надпись на чекбоксе
  • location: Расположение 'top' или 'bottom'
  • prefix: html который будет добавлен новому чекбоксу
  • suffix: html который будет добавлен новому чекбоксу
  • id: id нового чекбокса
  • callback: функция выполняемая при клике на чекбокс

Плагин

/* @author Aaron Klump, In the Loft Studios, LLC
 * @see http://www.intheloftstudios.com
 * @see https://gist.github.com/4261607
 */
(function($) {
  $.fn.drupalCheckAll = function(options) {
 
    // Create some defaults, extending them with any options that were provided
    var settings = $.extend( {
      'label'     : 'Check All',
      'location'  : 'prepend',
      'prefix'    : '<div class="form-item">',
      'id'        : $(this).parents('form').attr('id') + '-trigger',
      'classes'   : 'form-checkbox drupal-check-all-trigger',
      'suffix'    : '</div>',
      'children'  : '.form-checkbox',
      'callback'  : null
    }, options);
 
    var $wrapper = $(this);
    // Do not apply if total children is less than 2
    if ($wrapper.find(settings.children).length < 2) {
      console.log($wrapper.find(settings.children).length);
      return $(this);
    }
    
    // Check if we can translate (the test is for portability outside Drupal)
    if (Drupal.t !== undefined) {
      settings.label = Drupal.t(settings.label);
    }
 
    var $toggle = $(settings.prefix + '<input id="' + settings.id + '" type="checkbox" class="' + settings.classes + '"> <label for="' + settings.id + '" class="option">' + settings.label + '</label>' + settings.suffix);
 
    switch (settings.location) {
      case 'bottom':
        $wrapper.append($toggle);
        break;
      case 'top':
      default:
        $wrapper.prepend($toggle);
        break;
    }
 
    // Click handler
    $toggle.find(settings.children).click(function(){
      var state = $(this).is(':checked');
      var $children = $wrapper.find(settings.children);
      $children.attr('checked', state);
      // Fire callback if provided
      if (options.callback) {
        $form = $wrapper.parents('form');
        options.callback($form, $children);
      }
    });
 
      return $(this);
  };
})(jQuery);
Ссылки на источники
Яндекс.Метрика