Markerov
10 years ago
committed by
czaks
1 changed files with 82 additions and 0 deletions
@ -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