/** * @file * Block admin behaviors. */ (function ($, Drupal) { 'use strict'; /** * Filters the block list by a text input search string. * * The text input will have the selector `input.block-filter-text`. * * The target element to do searching in will be in the selector * `input.block-filter-text[data-element]` * * The text source where the text should be found will have the selector * `.block-filter-text-source` * * @type {Drupal~behavior} * * @prop {Drupal~behaviorAttach} attach * Attaches the behavior for the block filtering. */ Drupal.behaviors.blockFilterByText = { attach: function (context, settings) { var $input = $('input.block-filter-text').once('block-filter-text'); var $table = $($input.attr('data-element')); var $filter_rows; /** * Filters the block list. * * @param {jQuery.Event} e * The jQuery event for the keyup event that triggered the filter. */ function filterBlockList(e) { var query = $(e.target).val().toLowerCase(); /** * Shows or hides the block entry based on the query. * * @param {number} index * The index in the loop, as provided by `jQuery.each` * @param {HTMLElement} label * The label of the block. */ function toggleBlockEntry(index, label) { var $label = $(label); var $row = $label.parent().parent(); var textMatch = $label.text().toLowerCase().indexOf(query) !== -1; $row.toggle(textMatch); } // Filter if the length of the query is at least 2 characters. if (query.length >= 2) { $filter_rows.each(toggleBlockEntry); } else { $filter_rows.each(function (index) { $(this).parent().parent().show(); }); } } if ($table.length) { $filter_rows = $table.find('div.block-filter-text-source'); $input.on('keyup', filterBlockList); } } }; /** * Highlights the block that was just placed into the block listing. * * @type {Drupal~behavior} * * @prop {Drupal~behaviorAttach} attach * Attaches the behavior for the block placement highlighting. */ Drupal.behaviors.blockHighlightPlacement = { attach: function (context, settings) { if (settings.blockPlacement) { $(context).find('[data-drupal-selector="edit-blocks"]').once('block-highlight').each(function () { var $container = $(this); // Just scrolling the document.body will not work in Firefox. The html // element is needed as well. $('html, body').animate({ scrollTop: $('.js-block-placed').offset().top - $container.offset().top + $container.scrollTop() }, 500); }); } } }; }(jQuery, Drupal));