Catalog Search
This commit is contained in:
parent
a8982ce0a9
commit
2f7127a3cb
82
js/catalog-search.js
Normal file
82
js/catalog-search.js
Normal file
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* catalog-search.js
|
||||
* - Search and filters threads when on catalog view
|
||||
* - Optional shortcuts 's' and 'esc' to open and close the search.
|
||||
*
|
||||
* Usage:
|
||||
* $config['additional_javascript'][] = 'js/jquery.min.js';
|
||||
* $config['additional_javascript'][] = 'js/comment-toolbar.js';
|
||||
*/
|
||||
if (active_page == 'catalog') {
|
||||
$(document).ready(function () {
|
||||
'use strict';
|
||||
|
||||
// 'true' = enable shortcuts
|
||||
var useKeybinds = true;
|
||||
|
||||
// trigger the search 400ms after last keystroke
|
||||
var delay = 400;
|
||||
var timeoutHandle;
|
||||
|
||||
//search and hide none matching threads
|
||||
function filter(search_term) {
|
||||
$('.replies').each(function () {
|
||||
var subject = $(this).children('.intro').text().toLowerCase();
|
||||
var comment = $(this).clone().children().remove(':lt(2)').end().text().trim().toLowerCase();
|
||||
search_term = search_term.toLowerCase();
|
||||
|
||||
if (subject.indexOf(search_term) == -1 && comment.indexOf(search_term) == -1) {
|
||||
$(this).parents('div[id="Grid"]>.mix').css('display', 'none');
|
||||
} else {
|
||||
$(this).parents('div[id="Grid"]>.mix').css('display', 'inline-block');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function searchToggle() {
|
||||
var button = $('#catalog_search_button')[0];
|
||||
|
||||
if (!button.dataset.expanded) {
|
||||
button.dataset.expanded = '1';
|
||||
button.innerText = 'Close';
|
||||
$('.catalog_search').append(' <input id="search_field" style="border: inset 1px;">');
|
||||
$('#search_field').focus();
|
||||
} else {
|
||||
delete button.dataset.expanded;
|
||||
button.innerText = 'Search';
|
||||
$('.catalog_search').children().last().remove();
|
||||
$('div[id="Grid"]>.mix').each(function () { $(this).css('display', 'inline-block'); });
|
||||
}
|
||||
}
|
||||
|
||||
$('.threads').before('<span class="catalog_search">[<a id="catalog_search_button" style="text-decoration:none; cursor:pointer;"></a>]</span>');
|
||||
$('#catalog_search_button').text('Search');
|
||||
|
||||
$('#catalog_search_button').on('click', searchToggle);
|
||||
$('.catalog_search').on('keyup', 'input#search_field', function (e) {
|
||||
window.clearTimeout(timeoutHandle);
|
||||
timeoutHandle = window.setTimeout(filter, 400, e.target.value);
|
||||
});
|
||||
|
||||
if (useKeybinds) {
|
||||
// 's'
|
||||
$('body').on('keydown', function (e) {
|
||||
if (e.which === 83 && e.target.tagName === 'BODY' && !(e.ctrlKey || e.altKey || e.shiftKey)) {
|
||||
e.preventDefault();
|
||||
if ($('#search_field').length !== 0) {
|
||||
$('#search_field').focus();
|
||||
} else {
|
||||
searchToggle();
|
||||
}
|
||||
}
|
||||
});
|
||||
// 'esc'
|
||||
$('.catalog_search').on('keydown', 'input#search_field', function (e) {
|
||||
if (e.which === 27 && !(e.ctrlKey || e.altKey || e.shiftKey)) {
|
||||
window.clearTimeout(timeoutHandle);
|
||||
searchToggle();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
Loading…
Reference in New Issue
Block a user