Skip to content
Snippets Groups Projects
Unverified Commit 06eac4f5 authored by Lauri Timmanee's avatar Lauri Timmanee
Browse files

Issue #3223048 by smustgrave, Rishi Kulshreshtha, Theresa.Grannum,...

Issue #3223048 by smustgrave, Rishi Kulshreshtha, Theresa.Grannum, tim.plunkett, Gauravvvv, ranjith_kumar_k_u, larowlan, lauriii, oknate, tedbow: Layout builder filter leaves blank space
parent 0421a652
Branches
Tags
14 merge requests!8394[warning] array_flip(): Can only flip STRING and INTEGER values, when saving a non-revisionable custom content entity,!7780issue 3443822: fix for 'No route found for the specified format html. Supported formats: json, xml.',!5013Issue #3071143: Table Render Array Example Is Incorrect,!4848Issue #1566662: Update module should send notifications on Thursdays,!4792Issue #2230689: Remove redundant "Italic" style,!4220Issue #3368223: Link field > Access to internal links is not checked on display.,!3884Issue #3356842,!3870Issue #3087868,!3812Draft: Issue #3339373 by alexpott, andypost, mondrake:...,!3686Issue #3219967 against 9.5.x,!3683Issue #2939397: Clearing AliasManager cache with root path raises warning,!2205Quote all names in the regions section.,!1459Issue #3087632: menu_name max length is too long,!866Issue #2845319: The highlighting of the 'Home' menu-link does not respect query strings and fragment identifiers
......@@ -43,9 +43,16 @@
* The link to add the block.
*/
const toggleBlockEntry = (index, link) => {
const $link = $(link);
const textMatch =
link.textContent.toLowerCase().indexOf(query) !== -1;
$(link).toggle(textMatch);
// Checks if a category is currently hidden.
// Toggles the category on if so.
if ($link.closest('.js-layout-builder-category').is(':hidden')) {
$link.closest('.js-layout-builder-category').show();
}
// Toggle the li tag of the matching link.
$link.parent().toggle(textMatch);
};
// Filter if the length of the query is at least 2 characters.
......@@ -82,15 +89,17 @@
.find('.js-layout-builder-category[remember-closed]')
.removeAttr('open')
.removeAttr('remember-closed');
// Show all categories since filter is turned off.
$categories.find('.js-layout-builder-category').show();
$filterLinks.show();
// Show all li tags since filter is turned off.
$filterLinks.parent().show();
announce(Drupal.t('All available blocks are listed.'));
}
};
$(
once('block-filter-text', 'input.js-layout-builder-filter', context),
).on('keyup', debounce(filterBlockList, 200));
).on('input', debounce(filterBlockList, 200));
},
};
......
......@@ -18,8 +18,12 @@
var filterBlockList = function filterBlockList(e) {
var query = e.target.value.toLowerCase();
var toggleBlockEntry = function toggleBlockEntry(index, link) {
var $link = $(link);
var textMatch = link.textContent.toLowerCase().indexOf(query) !== -1;
$(link).toggle(textMatch);
if ($link.closest('.js-layout-builder-category').is(':hidden')) {
$link.closest('.js-layout-builder-category').show();
}
$link.parent().toggle(textMatch);
};
if (query.length >= 2) {
$categories.find('.js-layout-builder-category:not([open])').attr('remember-closed', '');
......@@ -32,11 +36,11 @@
layoutBuilderBlocksFiltered = false;
$categories.find('.js-layout-builder-category[remember-closed]').removeAttr('open').removeAttr('remember-closed');
$categories.find('.js-layout-builder-category').show();
$filterLinks.show();
$filterLinks.parent().show();
announce(Drupal.t('All available blocks are listed.'));
}
};
$(once('block-filter-text', 'input.js-layout-builder-filter', context)).on('keyup', debounce(filterBlockList, 200));
$(once('block-filter-text', 'input.js-layout-builder-filter', context)).on('input', debounce(filterBlockList, 200));
}
};
Drupal.layoutBuilderBlockUpdate = function (item, from, to) {
......
......@@ -62,7 +62,7 @@ public function testBlockFilter() {
// Get all blocks, for assertions later.
$blocks = $page->findAll('css', '.js-layout-builder-block-link');
$categories = $page->findAll('css', '.js-layout-builder-category');
$categories = $page->findAll('css', '.js-layout-builder-categories li');
$filter = $assert_session->elementExists('css', '.js-layout-builder-filter');
......@@ -89,16 +89,32 @@ public function testBlockFilter() {
$fewer_blocks_message = ' blocks are available in the modified list';
$this->assertAnnounceContains($fewer_blocks_message);
$visible_rows = $this->filterVisibleElements($blocks);
$this->assertGreaterThan(0, count($blocks));
$this->assertLessThan(count($blocks), count($visible_rows));
$this->assertCount(4, $visible_rows);
$visible_categories = $this->filterVisibleElements($categories);
$this->assertGreaterThan(0, count($visible_categories));
$this->assertLessThan(count($categories), count($visible_categories));
$this->assertCount(4, $visible_categories);
// Test Drupal.announce() message when multiple matches are present.
$expected_message = count($visible_rows) . $fewer_blocks_message;
$this->assertAnnounceContains($expected_message);
// Test 3 letter search.
$filter->setValue('adm');
$visible_rows = $this->filterVisibleElements($blocks);
$this->assertCount(3, $visible_rows);
$visible_categories = $this->filterVisibleElements($categories);
$this->assertCount(3, $visible_categories);
// Retest that blocks appear when reducing letters.
$filter->setValue('ad');
$visible_rows = $this->filterVisibleElements($blocks);
$this->assertCount(4, $visible_rows);
$visible_categories = $this->filterVisibleElements($categories);
$this->assertCount(4, $visible_categories);
// Test blocks reappear after being filtered by repeating search for "a".
$filter->setValue('a');
$this->assertAnnounceContains('All available blocks are listed.');
// Test Drupal.announce() message when only one match is present.
$filter->setValue('Powered by');
$this->assertAnnounceContains(' block is available');
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment