diff --git a/src/_h5ai/client/css/inc/ext/search.less b/src/_h5ai/client/css/inc/ext/search.less
index d74b626d..772db7a3 100644
--- a/src/_h5ai/client/css/inc/ext/search.less
+++ b/src/_h5ai/client/css/inc/ext/search.less
@@ -20,4 +20,10 @@
display: inline-block;
}
}
+
+ &.pending {
+ input {
+ color: @col-text-disabled-black;
+ }
+ }
}
diff --git a/src/_h5ai/client/js/inc/ext/search.js b/src/_h5ai/client/js/inc/ext/search.js
index 7475aa56..694c2d4e 100644
--- a/src/_h5ai/client/js/inc/ext/search.js
+++ b/src/_h5ai/client/js/inc/ext/search.js
@@ -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 =
'
' +
@@ -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);
}
diff --git a/src/_h5ai/client/js/inc/ext/select.js b/src/_h5ai/client/js/inc/ext/select.js
index 10aaa2b4..9762e5d1 100644
--- a/src/_h5ai/client/js/inc/ext/select.js
+++ b/src/_h5ai/client/js/inc/ext/select.js
@@ -144,40 +144,38 @@ modulejs.define('ext/select', ['_', '$', 'core/event', 'core/resource', 'core/se
.one('mouseup', selectionEnd);
}
- function initItem(item) {
+ function onSelectorClick(ev) {
- if (item.$view) {
+ ev.stopImmediatePropagation();
+ ev.preventDefault();
+
+ $(ev.target).closest('.item').toggleClass('selected');
+ publish();
+ }
+
+ function addCheckbox(item) {
+
+ if (item.$view && !item.isCurrentParentFolder()) {
$(template)
- .appendTo(item.$view.find('a'))
- .on('click', function (ev) {
-
- ev.stopImmediatePropagation();
- ev.preventDefault();
-
- item.$view.toggleClass('selected');
- publish();
- });
+ .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();
- }
+ publish();
}
function init() {
diff --git a/src/_h5ai/conf/options.json b/src/_h5ai/conf/options.json
index f694778a..0fd43631 100644
--- a/src/_h5ai/conf/options.json
+++ b/src/_h5ai/conf/options.json
@@ -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
},
/*