mirror of
https://github.com/lrsjng/h5ai.git
synced 2025-05-25 04:24:45 -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;
|
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) {
|
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({
|
var settings = _.extend({
|
||||||
enabled: false
|
enabled: false,
|
||||||
|
debounceTime: 300
|
||||||
}, allsettings.search);
|
}, allsettings.search);
|
||||||
var template =
|
var template =
|
||||||
'<div id="search" class="tool">' +
|
'<div id="search" class="tool">' +
|
||||||
|
@ -27,6 +28,8 @@ modulejs.define('ext/search', ['_', '$', 'core/event', 'core/location', 'core/re
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$search.addClass('pending');
|
||||||
|
|
||||||
server.request({
|
server.request({
|
||||||
action: 'get',
|
action: 'get',
|
||||||
search: {
|
search: {
|
||||||
|
@ -35,11 +38,11 @@ modulejs.define('ext/search', ['_', '$', 'core/event', 'core/location', 'core/re
|
||||||
}
|
}
|
||||||
}, function (response) {
|
}, function (response) {
|
||||||
|
|
||||||
var items = _.map(response.search, function (e) {
|
$search.removeClass('pending');
|
||||||
|
view.setItems('search', _.map(response.search, function (item) {
|
||||||
|
|
||||||
return Item.get(e);
|
return Item.get(item);
|
||||||
});
|
}));
|
||||||
view.setItems('search', items);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +105,7 @@ modulejs.define('ext/search', ['_', '$', 'core/event', 'core/location', 'core/re
|
||||||
$input = $search.find('input');
|
$input = $search.find('input');
|
||||||
|
|
||||||
$search.on('click', 'img', toggle);
|
$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);
|
event.sub('location.changed', reset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -144,41 +144,39 @@ modulejs.define('ext/select', ['_', '$', 'core/event', 'core/resource', 'core/se
|
||||||
.one('mouseup', selectionEnd);
|
.one('mouseup', selectionEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
function initItem(item) {
|
function onSelectorClick(ev) {
|
||||||
|
|
||||||
if (item.$view) {
|
|
||||||
$(template)
|
|
||||||
.appendTo(item.$view.find('a'))
|
|
||||||
.on('click', function (ev) {
|
|
||||||
|
|
||||||
ev.stopImmediatePropagation();
|
ev.stopImmediatePropagation();
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
|
|
||||||
item.$view.toggleClass('selected');
|
$(ev.target).closest('.item').toggleClass('selected');
|
||||||
publish();
|
publish();
|
||||||
});
|
}
|
||||||
|
|
||||||
|
function addCheckbox(item) {
|
||||||
|
|
||||||
|
if (item.$view && !item.isCurrentParentFolder()) {
|
||||||
|
$(template)
|
||||||
|
.on('click', onSelectorClick)
|
||||||
|
.appendTo(item.$view.find('a'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onViewChanged(added, removed) {
|
function onViewChanged(added, removed) {
|
||||||
|
|
||||||
var selectionChanged = false;
|
|
||||||
|
|
||||||
if (settings.checkboxes) {
|
if (settings.checkboxes) {
|
||||||
_.each(added, initItem);
|
_.each(added, addCheckbox);
|
||||||
}
|
}
|
||||||
|
|
||||||
_.each(removed, function (item) {
|
_.each(removed, function (item) {
|
||||||
|
|
||||||
if (item.$view && item.$view.hasClass('selected')) {
|
if (item.$view) {
|
||||||
item.$view.removeClass('selected');
|
item.$view.removeClass('selected');
|
||||||
selectionChanged = true;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (selectionChanged) {
|
|
||||||
publish();
|
publish();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
|
|
||||||
|
|
|
@ -269,9 +269,12 @@ Options
|
||||||
|
|
||||||
Searches will be treated as JavaScript regular expressions
|
Searches will be treated as JavaScript regular expressions
|
||||||
if you prefix them with "re:".
|
if you prefix them with "re:".
|
||||||
|
|
||||||
|
- debounceTime: number, debounce wait time in milliseconds
|
||||||
*/
|
*/
|
||||||
"search": {
|
"search": {
|
||||||
"enabled": true
|
"enabled": true,
|
||||||
|
"debounceTime": 300
|
||||||
},
|
},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue