mirror of
https://github.com/lrsjng/h5ai.git
synced 2025-05-24 20:14:37 -04:00
Add debounce option to search.
This commit is contained in:
parent
a9f6f157fa
commit
570599c19d
4 changed files with 36 additions and 26 deletions
|
@ -20,4 +20,10 @@
|
|||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
&.pending {
|
||||
input {
|
||||
color: @col-text-disabled-black;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
modulejs.define('ext/search', ['_', '$', 'core/event', 'core/location', 'core/resource', 'core/server', 'core/settings', 'model/item', 'view/view'], function (_, $, event, location, resource, server, allsettings, Item, view) {
|
||||
|
||||
var settings = _.extend({
|
||||
enabled: false
|
||||
enabled: false,
|
||||
debounceTime: 300
|
||||
}, allsettings.search);
|
||||
var template =
|
||||
'<div id="search" class="tool">' +
|
||||
|
@ -27,6 +28,8 @@ modulejs.define('ext/search', ['_', '$', 'core/event', 'core/location', 'core/re
|
|||
return;
|
||||
}
|
||||
|
||||
$search.addClass('pending');
|
||||
|
||||
server.request({
|
||||
action: 'get',
|
||||
search: {
|
||||
|
@ -35,11 +38,11 @@ modulejs.define('ext/search', ['_', '$', 'core/event', 'core/location', 'core/re
|
|||
}
|
||||
}, function (response) {
|
||||
|
||||
var items = _.map(response.search, function (e) {
|
||||
$search.removeClass('pending');
|
||||
view.setItems('search', _.map(response.search, function (item) {
|
||||
|
||||
return Item.get(e);
|
||||
});
|
||||
view.setItems('search', items);
|
||||
return Item.get(item);
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -102,7 +105,7 @@ modulejs.define('ext/search', ['_', '$', 'core/event', 'core/location', 'core/re
|
|||
$input = $search.find('input');
|
||||
|
||||
$search.on('click', 'img', toggle);
|
||||
$input.on('keyup', _.debounce(update, 500, {trailing: true}));
|
||||
$input.on('keyup', _.debounce(update, settings.debounceTime, {trailing: true}));
|
||||
event.sub('location.changed', reset);
|
||||
}
|
||||
|
||||
|
|
|
@ -144,41 +144,39 @@ modulejs.define('ext/select', ['_', '$', 'core/event', 'core/resource', 'core/se
|
|||
.one('mouseup', selectionEnd);
|
||||
}
|
||||
|
||||
function initItem(item) {
|
||||
|
||||
if (item.$view) {
|
||||
$(template)
|
||||
.appendTo(item.$view.find('a'))
|
||||
.on('click', function (ev) {
|
||||
function onSelectorClick(ev) {
|
||||
|
||||
ev.stopImmediatePropagation();
|
||||
ev.preventDefault();
|
||||
|
||||
item.$view.toggleClass('selected');
|
||||
$(ev.target).closest('.item').toggleClass('selected');
|
||||
publish();
|
||||
});
|
||||
}
|
||||
|
||||
function addCheckbox(item) {
|
||||
|
||||
if (item.$view && !item.isCurrentParentFolder()) {
|
||||
$(template)
|
||||
.on('click', onSelectorClick)
|
||||
.appendTo(item.$view.find('a'));
|
||||
}
|
||||
}
|
||||
|
||||
function onViewChanged(added, removed) {
|
||||
|
||||
var selectionChanged = false;
|
||||
|
||||
if (settings.checkboxes) {
|
||||
_.each(added, initItem);
|
||||
_.each(added, addCheckbox);
|
||||
}
|
||||
|
||||
_.each(removed, function (item) {
|
||||
|
||||
if (item.$view && item.$view.hasClass('selected')) {
|
||||
if (item.$view) {
|
||||
item.$view.removeClass('selected');
|
||||
selectionChanged = true;
|
||||
}
|
||||
});
|
||||
|
||||
if (selectionChanged) {
|
||||
publish();
|
||||
}
|
||||
}
|
||||
|
||||
function init() {
|
||||
|
||||
|
|
|
@ -269,9 +269,12 @@ Options
|
|||
|
||||
Searches will be treated as JavaScript regular expressions
|
||||
if you prefix them with "re:".
|
||||
|
||||
- debounceTime: number, debounce wait time in milliseconds
|
||||
*/
|
||||
"search": {
|
||||
"enabled": true
|
||||
"enabled": true,
|
||||
"debounceTime": 300
|
||||
},
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue