diff --git a/src/_h5ai/client/js/inc/core/util.js b/src/_h5ai/client/js/inc/core/util.js
index 74ed06fc..6ab4f6a5 100644
--- a/src/_h5ai/client/js/inc/core/util.js
+++ b/src/_h5ai/client/js/inc/core/util.js
@@ -1,4 +1,4 @@
-modulejs.define('core/util', [], function () {
+modulejs.define('core/util', ['_'], function (_) {
function regularCmpFn(val1, val2) {
@@ -65,9 +65,37 @@ modulejs.define('core/util', [], function () {
return 0;
}
+ function escapePattern(sequence) {
+
+ return sequence.replace(/[\-\[\]{}()*+?.,\\$\^|#\s]/g, '\\$&');
+ }
+
+ function parsePattern(sequence, advanced) {
+
+ if (!advanced) {
+ return escapePattern(sequence);
+ }
+
+ if (sequence.substr(0, 3) === 're:') {
+ return sequence.substr(3);
+ }
+
+ sequence = _.map(_.trim(sequence).split(/\s+/), function (part) {
+
+ return _.map(part.split(''), function (character) {
+
+ return escapePattern(character);
+ }).join('.*?');
+ }).join('|');
+
+ return sequence;
+ }
+
return {
regularCmpFn: regularCmpFn,
- naturalCmpFn: naturalCmpFn
+ naturalCmpFn: naturalCmpFn,
+ escapePattern: escapePattern,
+ parsePattern: parsePattern
};
});
diff --git a/src/_h5ai/client/js/inc/ext/filter.js b/src/_h5ai/client/js/inc/ext/filter.js
index 71804755..c79259f5 100644
--- a/src/_h5ai/client/js/inc/ext/filter.js
+++ b/src/_h5ai/client/js/inc/ext/filter.js
@@ -1,8 +1,9 @@
-modulejs.define('ext/filter', ['_', '$', 'core/event', 'core/location', 'core/resource', 'core/settings', 'view/view'], function (_, $, event, location, resource, allsettings, view) {
+modulejs.define('ext/filter', ['_', '$', 'core/event', 'core/location', 'core/resource', 'core/settings', 'core/util', 'view/view'], function (_, $, event, location, resource, allsettings, util, view) {
var settings = _.extend({
enabled: false,
- debounceTime: 100
+ debounceTime: 100,
+ advanced: false
}, allsettings.filter);
var template =
'
' +
@@ -45,36 +46,12 @@ modulejs.define('ext/filter', ['_', '$', 'core/event', 'core/location', 'core/re
view.setItems('filter', matchedItems);
}
- function escapeRegExp(sequence) {
-
- return sequence.replace(/[\-\[\]{}()*+?.,\\$\^|#\s]/g, '\\$&');
- }
-
- function parseInput(sequence) {
-
- if (sequence.substr(0, 3) === 're:') {
- return sequence.substr(3);
- }
-
- return escapeRegExp(sequence);
-
- // sequence = $.map($.trim(sequence).split(/\s+/), function (part) {
-
- // return _.map(part.split(''), function (character) {
-
- // return escapeRegExp(character);
- // }).join('.*?');
- // }).join('|');
-
- // return sequence;
- }
-
function update() {
if (inputIsVisible) {
$filter.addClass('active');
$input.focus();
- filter(parseInput($input.val()));
+ filter(util.parsePattern($input.val(), settings.advanced));
} else {
filter();
$filter.removeClass('active');
diff --git a/src/_h5ai/client/js/inc/ext/search.js b/src/_h5ai/client/js/inc/ext/search.js
index fbc1332d..9f65a438 100644
--- a/src/_h5ai/client/js/inc/ext/search.js
+++ b/src/_h5ai/client/js/inc/ext/search.js
@@ -1,8 +1,9 @@
-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', 'core/util', 'model/item', 'view/view'], function (_, $, event, location, resource, server, allsettings, util, Item, view) {
var settings = _.extend({
enabled: false,
- debounceTime: 300
+ debounceTime: 300,
+ advanced: false
}, allsettings.search);
var template =
'
' +
@@ -47,36 +48,12 @@ modulejs.define('ext/search', ['_', '$', 'core/event', 'core/location', 'core/re
});
}
- function escapeRegExp(sequence) {
-
- return sequence.replace(/[\-\[\]{}()*+?.,\\$\^|#\s]/g, '\\$&');
- }
-
- function parseInput(sequence) {
-
- if (sequence.substr(0, 3) === 're:') {
- return sequence.substr(3);
- }
-
- return escapeRegExp(sequence);
-
- // sequence = $.map($.trim(sequence).split(/\s+/), function (part) {
-
- // return _.map(part.split(''), function (character) {
-
- // return escapeRegExp(character);
- // }).join('.*?');
- // }).join('|');
-
- // return sequence;
- }
-
function update() {
if (inputIsVisible) {
$search.addClass('active');
$input.focus();
- search(parseInput($input.val()));
+ search(util.parsePattern($input.val(), settings.advanced));
} else {
search();
$search.removeClass('active');
diff --git a/src/_h5ai/client/js/lib/lodash-3.8.0.min.js b/src/_h5ai/client/js/lib/lodash-3.8.0.min.js
new file mode 100644
index 00000000..a552cabf
--- /dev/null
+++ b/src/_h5ai/client/js/lib/lodash-3.8.0.min.js
@@ -0,0 +1,53 @@
+/**
+ * @license
+ * lodash 3.8.0 (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE
+ * Build: `lodash exports="global" include="compact,contains,debounce,difference,each,extend,filter,indexOf,intersection,isFunction,isNumber,isString,keys,map,pluck,sortBy,trim,values,without"`
+ */
+;(function(){function n(n,r,t){if(r!==r){n:{for(r=n.length,t+=-1;++te||!u||t===yn&&o){t=1;break n}if(t=n&&9<=n&&13>=n||32==n||160==n||5760==n||6158==n||8192<=n&&(8202>=n||8232==n||8233==n||8239==n||8287==n||12288==n||65279==n)}function i(n){for(var r=-1,t=n.length;++rc(t,i,0)&&u.push(i);return u}function w(n,r){var t=[];return Cr(n,function(n,e,u){r(n,e,u)&&t.push(n)}),t}function A(n,r,t){for(var e=-1,u=n.length,o=-1,a=[];++ea&&(a=-a>l?0:l+a),i=i===yn||i>l?l:+i||0,0>i&&(i+=l),l=a>i?0:i-a>>>0,a>>>=0,i=Array(l);++fe?Or(u+e,0):e;else if(e){if(e=0,u=r?r.length:e,typeof t!="number"||t!==t||u>Ir){u=hn,e=u(t);for(var o=0,c=r?r.length:0,a=e!==e,i=e===yn;o>>1;r[o]t?Or(u+t,0):t||0,typeof n=="string"||!qr(n)&&on(n)?t>>1,Pr=jr?jr.BYTES_PER_ELEMENT:0,_r=Math.pow(2,53)-1,Mr={};Mr[In]=Zn.Float32Array,Mr[Pn]=Zn.Float64Array,Mr[_n]=Zn.Int8Array,
+Mr[Mn]=Zn.Int16Array,Mr[Fn]=Zn.Int32Array,Mr[Un]=Zn.Uint8Array,Mr[$n]=Zn.Uint8ClampedArray,Mr[Cn]=Zn.Uint16Array,Mr[Nn]=Zn.Uint32Array;var Fr={};Fr[jn]=Fr[wn]=Fr[On]={constructor:true,toLocaleString:true,toString:true,valueOf:true},Fr[dn]=Fr[Tn]={constructor:true,toString:true,valueOf:true},Fr[An]=Fr[xn]=Fr[Sn]={constructor:true,toString:true},Fr[En]={constructor:true},v(zn,function(n){for(var r in Fr)if(cr.call(Fr,r)){var t=Fr[r];t[n]=cr.call(t,n)}});var Ur=l.support={};!function(n){var r=function(){this.x=n},t=arguments,e={
+0:n,length:n},u=[];r.prototype={valueOf:n,y:n};for(var o in new r)u.push(o);Ur.argsTag=ar.call(t)==mn,Ur.enumErrorProps=gr.call(tr,"message")||gr.call(tr,"name"),Ur.enumPrototypes=gr.call(r,"prototype"),Ur.funcDecomp=/\bthis\b/.test(function(){return this}),Ur.funcNames=typeof Function.name=="string",Ur.nonEnumStrings=!gr.call("x",0),Ur.nonEnumShadows=!/valueOf/.test(u),Ur.spliceObjects=(br.call(e,0,1),!e[0]),Ur.unindexedChars="xx"!="x"[0]+Object("x")[0];try{Ur.nonEnumArgs=!gr.call(t,1)}catch(c){
+Ur.nonEnumArgs=true}}(1,0);var $r=dr||function(n,r){return null==r?n:b(r,Dr(r),b(r,Hr(r),n))},Cr=function(n,r){return function(t,e){var u=t?Br(t):0;if(!z(u))return n(t,e);for(var o=r?u:-1,c=H(t);(r?o--:++ou?null:o,u=1);++e=t||t>r?(a&&clearTimeout(a),t=p,a=s=p=yn,t&&(h=Yr(),i=n.apply(l,c),s||a||(c=l=null))):s=setTimeout(e,t)}function u(){s&&clearTimeout(s),a=s=p=yn,(g||v!==r)&&(h=Yr(),i=n.apply(l,c),s||a||(c=l=null))}function o(){if(c=arguments,f=Yr(),l=this,p=g&&(s||!y),false===v)var t=y&&!s;else{a||y||(h=f);var o=v-(f-h),b=0>=o||o>v;b?(a&&(a=clearTimeout(a)),h=f,i=n.apply(l,c)):a||(a=setTimeout(u,o))}return b&&s?s=clearTimeout(s):s||r===v||(s=setTimeout(e,r)),t&&(b=true,i=n.apply(l,c)),
+!b||s||a||(c=l=null),i}var c,a,i,f,l,s,p,h=0,v=false,g=true;if(typeof n!="function")throw new TypeError(bn);if(r=0>r?0:+r||0,true===t)var y=true,g=false;else en(t)&&(y=t.leading,v="maxWait"in t&&Or(+t.maxWait||0,r),g="trailing"in t?t.trailing:g);return o.cancel=function(){s&&clearTimeout(s),a&&clearTimeout(a),a=s=p=yn},o},l.difference=Lr,l.filter=X,l.forEach=Vr,l.intersection=function(){for(var r=[],t=-1,e=arguments.length,u=[],o=R(),c=o==n,a=[];++te)return a;var c=r[0],f=-1,l=c?c.length:0,s=u[0];n:for(;++f(s?p(s,i):o(a,i,0))){for(t=e;--t;){var h=u[t];if(0>(h?p(h,i):o(r[t],i,0)))continue n}s&&s.push(i),a.push(i)}return a},l.keys=Hr,l.keysIn=an,l.map=nn,l.matches=vn,l.pluck=function(n,r){return nn(n,gn(r))},l.property=gn,l.restParam=rn,l.sortBy=function(n,r,t){if(null==n)return[];t&&Y(n,r,t)&&(r=null);var e=-1;return r=N(r,t,3),n=S(n,function(n,t,u){return{a:r(n,t,u),b:++e,c:n}}),_(n,o)},l.values=fn,l.without=Wr,
+l.collect=nn,l.each=Vr,l.extend=Gr,l.iteratee=sn,l.select=X,l.escapeRegExp=ln,l.identity=hn,l.includes=Z,l.indexOf=K,l.isArguments=tn,l.isArray=qr,l.isFunction=zr,l.isNative=un,l.isNumber=function(n){return typeof n=="number"||c(n)&&ar.call(n)==On},l.isObject=en,l.isString=on,l.isTypedArray=cn,l.last=Q,l.now=Yr,l.trim=function(n,r,o){var c=n;return(n=t(n))?(o?Y(c,r,o):null==r)?n.slice(i(n),f(n)+1):(r+="",n.slice(e(n,r),u(n,r)+1)):n},l.contains=Z,l.include=Z,l.VERSION="3.8.0",Zn._=l}).call(this);
\ No newline at end of file
diff --git a/src/_h5ai/client/js/lib/lodash-custom-3.8.0.min.js b/src/_h5ai/client/js/lib/lodash-custom-3.8.0.min.js
deleted file mode 100644
index bb92da3f..00000000
--- a/src/_h5ai/client/js/lib/lodash-custom-3.8.0.min.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * @license
- * lodash 3.8.0 (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE
- * Build: `lodash exports="global" include="compact,contains,debounce,difference,each,extend,filter,indexOf,intersection,isFunction,isNumber,isString,keys,map,pluck,sortBy,values,without"`
- */
-;(function(){function n(n,r,t){if(r!==r){n:{for(r=n.length,t+=-1;++te||!u||t===sn&&o){t=1;break n}if(tc(t,f,0)&&u.push(f);return u}function v(n,r){var t=[];return _r(n,function(n,e,u){r(n,e,u)&&t.push(n)}),t}function b(n,r,t){for(var e=-1,o=n.length,c=-1,a=[];++ea&&(a=-a>l?0:l+a),i=i===sn||i>l?l:+i||0,0>i&&(i+=l),l=a>i?0:i-a>>>0,a>>>=0,i=Array(l);++fe?jr(u+e,0):e;else if(e){if(e=0,u=r?r.length:e,typeof t!="number"||t!==t||u>Or){u=an,e=u(t);for(var o=0,c=r?r.length:0,a=e!==e,i=e===sn;o>>1;r[o]t?jr(u+t,0):t||0,typeof n=="string"||!Dr(n)&&nn(n)?t>>1,Er=yr?yr.BYTES_PER_ELEMENT:0,Sr=Math.pow(2,53)-1,Tr={};Tr[On]=Hn.Float32Array,Tr[En]=Hn.Float64Array,Tr[Sn]=Hn.Int8Array,
-Tr[Tn]=Hn.Int16Array,Tr[kn]=Hn.Int32Array,Tr[In]=Hn.Uint8Array,Tr[Pn]=Hn.Uint8ClampedArray,Tr[_n]=Hn.Uint16Array,Tr[Mn]=Hn.Uint32Array;var kr={};kr[yn]=kr[vn]=kr[jn]={constructor:true,toLocaleString:true,toString:true,valueOf:true},kr[gn]=kr[An]={constructor:true,toString:true,valueOf:true},kr[bn]=kr[mn]=kr[dn]={constructor:true,toString:true},kr[wn]={constructor:true},f(Ln,function(n){for(var r in kr)if(rr.call(kr,r)){var t=kr[r];t[n]=rr.call(t,n)}});var Ir=o.support={};!function(n){function r(){this.x=n}var t=arguments,e={
-0:n,length:n},u=[];r.prototype={valueOf:n,y:n};for(var o in new r)u.push(o);Ir.argsTag=tr.call(t)==hn,Ir.enumErrorProps=lr.call(Qn,"message")||lr.call(Qn,"name"),Ir.enumPrototypes=lr.call(r,"prototype"),Ir.funcDecomp=/\bthis\b/.test(function(){return this}),Ir.funcNames=typeof Function.name=="string",Ir.nonEnumStrings=!lr.call("x",0),Ir.nonEnumShadows=!/valueOf/.test(u),Ir.spliceObjects=(pr.call(e,0,1),!e[0]),Ir.unindexedChars="xx"!="x"[0]+Object("x")[0];try{Ir.nonEnumArgs=!lr.call(t,1)}catch(c){
-Ir.nonEnumArgs=true}}(1,0);var Pr=gr||function(n,r){return null==r?n:p(r,$r(r),p(r,Vr(r),n))},_r=function(n,r){return function(t,e){var u=t?Ur(t):0;if(!L(u))return n(t,e);for(var o=r?u:-1,c=V(t);(r?o--:++ou?null:o,u=1);++e=t||t>r?(a&&clearTimeout(a),t=p,a=s=p=sn,t&&(h=Cr(),i=n.apply(l,c),s||a||(c=l=null))):s=setTimeout(e,t)}function u(){s&&clearTimeout(s),a=s=p=sn,(g||y!==r)&&(h=Cr(),i=n.apply(l,c),s||a||(c=l=null))}function o(){if(c=arguments,f=Cr(),l=this,p=g&&(s||!v),false===y)var t=v&&!s;else{a||v||(h=f);var o=y-(f-h),b=0>=o||o>y;b?(a&&(a=clearTimeout(a)),h=f,i=n.apply(l,c)):a||(a=setTimeout(u,o))}return b&&s?s=clearTimeout(s):s||r===y||(s=setTimeout(e,r)),t&&(b=true,i=n.apply(l,c)),
-!b||s||a||(c=l=null),i}var c,a,i,f,l,s,p,h=0,y=false,g=true;if(typeof n!="function")throw new TypeError(pn);if(r=0>r?0:+r||0,true===t)var v=true,g=false;else X(t)&&(v=t.leading,y="maxWait"in t&&jr(+t.maxWait||0,r),g="trailing"in t?t.trailing:g);return o.cancel=function(){s&&clearTimeout(s),a&&clearTimeout(a),a=s=p=sn},o},o.difference=Nr,o.filter=G,o.forEach=Br,o.intersection=function(){for(var r=[],t=-1,e=arguments.length,u=[],o=F(),c=o==n,i=[];++te)return i;var c=r[0],l=-1,s=c?c.length:0,p=u[0];n:for(;++l(p?a(p,f):o(i,f,0))){for(t=e;--t;){var h=u[t];if(0>(h?a(h,f):o(r[t],f,0)))continue n}p&&p.push(f),i.push(f)}return i},o.keys=Vr,o.keysIn=tn,o.map=J,o.matches=fn,o.pluck=function(n,r){return J(n,ln(r))},o.property=ln,o.restParam=K,o.sortBy=function(n,r,t){if(null==n)return[];t&&C(n,r,t)&&(r=null);var u=-1;return r=M(r,t),n=d(n,function(n,t,e){return{a:r(n,t,e),b:++u,c:n}}),S(n,e)},o.values=en,o.without=Rr,o.collect=J,
-o.each=Br,o.extend=Wr,o.iteratee=on,o.select=G,o.escapeRegExp=un,o.identity=an,o.includes=H,o.indexOf=q,o.isArguments=Q,o.isArray=Dr,o.isFunction=Lr,o.isNative=Z,o.isNumber=function(n){return typeof n=="number"||u(n)&&tr.call(n)==jn},o.isObject=X,o.isString=nn,o.isTypedArray=rn,o.last=z,o.now=Cr,o.contains=H,o.include=H,o.VERSION="3.8.0",Hn._=o}).call(this);
\ No newline at end of file
diff --git a/src/_h5ai/conf/options.json b/src/_h5ai/conf/options.json
index 277c5561..03cc3b2b 100644
--- a/src/_h5ai/conf/options.json
+++ b/src/_h5ai/conf/options.json
@@ -102,18 +102,20 @@ Options
},
/*
- Allow filtering the displayed files and folders.
- Will check entries for right order of characters, i.e.
- "ab" matches "ab", "axb", "xaxbx" but not "ba".
- Space separated sequences get OR-ed.
+ Allow filtering the displayed files and folders in current folder.
+ Checks for substrings.
- Filters will be treated as JavaScript regular expressions
- if you prefix them with "re:".
+ If advanced is enabled it checks entries for right order of characters,
+ i.e. "ab" matches "ab", "axb", "xaxbx" but not "ba". Space separated
+ sequences get OR-ed. Searches will be treated as JavaScript regular
+ expressions if you prefix them with "re:".
+ - advanced: boolean, use advanced pattern parsing
- debounceTime: number, debounce wait time in milliseconds
*/
"filter": {
"enabled": true,
+ "advanced": true,
"debounceTime": 100
},
@@ -265,18 +267,20 @@ Options
},
/*
- Allow searching files and folders.
- Will check entries for right order of characters, i.e.
- "ab" matches "ab", "axb", "xaxbx" but not "ba".
- Space separated sequences get OR-ed.
+ Allow searching files and folders in and below current folder.
+ Checks for substrings.
- Searches will be treated as JavaScript regular expressions
- if you prefix them with "re:".
+ If advanced is enabled it checks entries for right order of characters,
+ i.e. "ab" matches "ab", "axb", "xaxbx" but not "ba". Space separated
+ sequences get OR-ed. Searches will be treated as JavaScript regular
+ expressions if you prefix them with "re:".
+ - advanced: boolean, use advanced pattern parsing
- debounceTime: number, debounce wait time in milliseconds
*/
"search": {
"enabled": true,
+ "advanced": true,
"debounceTime": 300
},