/**
* @file
* Views listing behaviors.
*/
(function ($, Drupal) {
/**
* Filters the view listing tables by a text input search string.
*
* Text search input: input.views-filter-text
* Target table: input.views-filter-text[data-table]
* Source text: [data-drupal-selector="views-table-filter-text-source"]
*
* @type {Drupal~behavior}
*
* @prop {Drupal~behaviorAttach} attach
* Attaches the filter functionality to the views admin text search field.
*/
Drupal.behaviors.viewTableFilterByText = {
attach(context, settings) {
const $input = $('input.views-filter-text').once('views-filter-text');
const $table = $($input.attr('data-table'));
let $rows;
function filterViewList(e) {
const query = $(e.target).val().toLowerCase();
function showViewRow(index, row) {
const $row = $(row);
const $sources = $row.find(
'[data-drupal-selector="views-table-filter-text-source"]',
);
const textMatch = $sources.text().toLowerCase().indexOf(query) !== -1;
$row.closest('tr').toggle(textMatch);
}
// Filter if the length of the query is at least 2 characters.
if (query.length >= 2) {
$rows.each(showViewRow);
} else {
$rows.show();
}
}
if ($table.length) {
$rows = $table.find('tbody tr');
$input.on('keyup', filterViewList);
}
},
};
})(jQuery, Drupal);