mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-02-06 11:23:48 -05:00
It was losing its position because filtering the list of templates with find as you type was causing the height of the page to change.
61 lines
1.2 KiB
JavaScript
61 lines
1.2 KiB
JavaScript
(function(Modules) {
|
|
"use strict";
|
|
|
|
let normalize = (string) => string.toLowerCase().replace(/ /g,'');
|
|
|
|
let filter = ($searchBox, $targets) => () => {
|
|
|
|
let query = normalize($searchBox.val());
|
|
|
|
$targets.each(function() {
|
|
|
|
let content = $('.live-search-relevant', this).text() || $(this).text();
|
|
|
|
if ($(this).has(':checked').length) {
|
|
$(this).show();
|
|
return;
|
|
}
|
|
|
|
if (query == '') {
|
|
$(this).css('display', '');
|
|
return;
|
|
}
|
|
|
|
$(this).toggle(
|
|
normalize(content).indexOf(normalize(query)) > -1
|
|
);
|
|
|
|
});
|
|
|
|
// make sticky JS recalculate its cache of the element's position
|
|
// because live search can change the height document
|
|
if ('stickAtBottomWhenScrolling' in GOVUK) {
|
|
GOVUK.stickAtBottomWhenScrolling.recalculate();
|
|
}
|
|
|
|
};
|
|
|
|
|
|
Modules.LiveSearch = function() {
|
|
|
|
this.start = function(component) {
|
|
|
|
let $component = $(component);
|
|
|
|
let $searchBox = $('input', $component);
|
|
|
|
let filterFunc = filter(
|
|
$searchBox,
|
|
$($component.data('targets'))
|
|
);
|
|
|
|
$searchBox.on('keyup input', filterFunc);
|
|
|
|
filterFunc();
|
|
|
|
};
|
|
|
|
};
|
|
|
|
})(window.GOVUK.Modules);
|