muser-8.x-1.x-dev/modules/custom/muser_project/js/view-filters.js

modules/custom/muser_project/js/view-filters.js
/**
 * @file
 * View filter functionality.
 */

(function ($, Drupal) {
  Drupal.behaviors.muserProjectsSearchSubmit = {
    attach: function (context, settings) {
      let view_filters = $('.muser-view-filters');
      let search_button = $('.search__icon', view_filters);
      let filter_submit = $('.form-submit.button-submit', view_filters);
      search_button.once('search_button--processed').on('click', function () {
        filter_submit.click();
        return false;
      });

      let $resetButton = $('.muser-view-filters .button-reset');
      $resetButton.show();
      if ($('.muser-view-filters input:checkbox:checked').length === 0 && !$('input#edit-search').val()) {
        $resetButton.hide();
      }
    }
  };
  Drupal.behaviors.muserViewFilters = {
    attach: function (context, settings) {
      $('.muser-view-filters .form-item-search')
        .once('muser-view-filters-wrapper--applied')
        .wrapAll('<div class="muser-view-filters-wrapper muser-view-filters-wrapper--right"></div>');
      $('.muser-view-filters details')
        .once('muser-view-filters-wrapper--applied')
        .wrapAll('<div class="muser-view-filters-wrapper"></div>');

      let $submitButton = $('.muser-view-filters .button-submit');
      $submitButton.hide();
      let $resetButton = $('.muser-view-filters .button-reset');
      if ($('.muser-view-filters input:checkbox:checked').length === 0 && !$('input#edit-search').val()) {
        $resetButton.hide();
      }

      let getCheckedValues = function ($detailsElement) {
        let $checked = $detailsElement.find('input:checkbox:checked');
        if ($checked.length === 0) {
          return '';
        }
        else {
          return $checked.map(function () {
            return $(this).val();
          }).get().join('|');
        }
      };

      let setDetailsSummary = function ($detailsElement) {
        let $summary = $detailsElement.find('summary');
        let $checked = $detailsElement.find('input:checkbox:checked');
        let $clear = $detailsElement.find('.filter__action--clear');
        if ($checked.length === 0) {
          $clear.hide();
          $summary.html($summary.attr('data-default'));
          $summary.removeClass('summary--has-selected')
        }
        else if ($checked.length > 1) {
          $clear.show();
          $summary.addClass('summary--has-selected');
          $summary.html($summary.attr('data-default') + ' (' + $checked.length + ')');
        }
        else {
          $clear.show();
          $summary.addClass('summary--has-selected');
          $summary.html($checked.parents('.checkbox__wrapper').parent().find('label').text());
        }
      };

      let clearOverlay = function () {
        $('.filter-overlay').removeClass('filter-overlay--active');
      };

      let clearLink = '<button type="button" class="filter__action filter__action--clear">' + Drupal.t('Clear') + '</button>';
      let submitLink = '<button type="button" class="filter__action filter__action--submit">' + Drupal.t('Submit') + '</button>';
      let filters = '<div class="filter__actions">' + clearLink + submitLink + '</div>';
      $('body').once('filter-overlay--processed')
          .prepend('<div class="filter-overlay"></div>');
      $('.filter-overlay').once('filter-overlay--processed')
          .on('click', function () {
            clearOverlay();
            $('.muser-view-filters details[open]').removeAttr('open')
          });

      $('details').once('details--processed').on('click', function () {
        $(this).siblings('details').removeAttr('open');
      });

      $('.muser-view-filters details').once('muser-filters--processed').each(function () {
        let $details = $(this);
        $(this).attr('data-values', getCheckedValues($(this)));

        $(this).on('toggle', function () {
          if ($(this).prop('open')) {
            $('.filter-overlay').addClass('filter-overlay--active');
          }
          else {
            // Hide overlay.
            clearOverlay();
            if ($('.muser-view-filters input:checkbox:checked').length > 0) {
              $resetButton.show();
            }
            if ($details.attr('data-values') !== getCheckedValues($details)) {
              // Values have changed.
              $details.attr('data-values', getCheckedValues($details));
              $submitButton.click();
            }
          }
        });

        $(this).find('.details-wrapper').append(filters);
        let $summary = $(this).find('summary');
        $summary.attr('data-default', $summary.html());
        setDetailsSummary($(this));

      });

      $('.muser-view-filters').once('muser-view-filters--processed').each(function () {

        $('.muser-view-filters details button.filter__action--submit').once('submitted--processed').on('click', function (e) {
          setDetailsSummary($(this).parents('details'));
          $(this).parents('details').removeAttr('open');
        });

        $('.muser-view-filters details button.filter__action--clear').once('clear-button--processed').on('click', function (e) {
          $(this).parents('.details-wrapper').find('input.form-checkbox').prop('checked', false);
          setDetailsSummary($(this).parents('details'));
        });

        $('.muser-view-filters details input:checkbox').once('checkbox--processed').on('change', function () {
          setDetailsSummary($(this).parents('details'));
        });

      });

    }
  };

  Drupal.behaviors.muserProjectFilterCategories = {
    attach: function (context, settings) {
      let updateActiveTag = function (active_tids, term_wrapper) {
        if (active_tids.length < 1) {
          return;
        }
        let available_terms = $('.extra-term', term_wrapper).map(function (k, term) {
          let $term = $(term);
          return {
            tid: $term.attr('data-extra-term-id'),
            term_value: $term.find('.term').html(),
          }
        });
        if (available_terms.length === 0) {
          // Item has only the one term that's shown.
          return;
        }
        let new_term = available_terms.filter((k, item) => active_tids.toArray().find(el => el === item.tid));
        if (new_term.length === 0) {
          return;
        }
        $('.active-term__term', term_wrapper).html(new_term[0].term_value)
      };

      let projects = $('.node--type-project.node--view-mode-teaser').once('project--filters-updated')
      $.each(projects, function (k, project) {
        let $project = $(project);
        let hours_options_selected = $('.details--hours input[type="checkbox"]:checked').map((k, checkbox) => $(checkbox).attr('value'));
        updateActiveTag(hours_options_selected, $project.find('.field--name-field-hours-per-week'))
        let cats_options_selected = $('.details--categories input[type="checkbox"]:checked').map((k, checkbox) => $(checkbox).attr('value'));
        updateActiveTag(cats_options_selected, $project.find('.field--name-field-categories'))
      });
    }
  }
})(jQuery, Drupal);

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

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