From 76cbfd80a291d59d032babc2812cb807e5e33517 Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Mon, 22 Oct 2018 11:47:10 +0300 Subject: [PATCH] new sort now online, still needs testing and revision... Signed-off-by: Alex A. Naanou --- ui (gen4)/features/sort.js | 62 +++++++++++++++----------------------- 1 file changed, 24 insertions(+), 38 deletions(-) diff --git a/ui (gen4)/features/sort.js b/ui (gen4)/features/sort.js index 53fc0b9e..3981ab3d 100755 --- a/ui (gen4)/features/sort.js +++ b/ui (gen4)/features/sort.js @@ -78,7 +78,7 @@ module.SortActions = actions.Actions({ // var st = s.trim() // st[0].toUpperCase() == st[0] 'Date': - 'metadata.createDate birthtime ctime name-sequence keep-position reverse', + 'image-date name-sequence keep-position reverse', 'File date': 'birthtime ctime keep-position reverse', 'File sequence number (with overflow)': @@ -118,12 +118,13 @@ module.SortActions = actions.Actions({ __sort_methods__: { // aliases... 'image-date': - 'image-create-date image-modify-date', + //'image-create-date image-modify-date', + 'image-create-date', 'image-create-date': 'metadata.createDate birthtime ctime name-sequence keep-position', // XXX - 'image-modify-date': - 'metadata.createDate birthtime ctime name-sequence keep-position', + //'image-modify-date': + // 'metadata.createDate birthtime ctime name-sequence keep-position', // XXX make sequence sort methods compatible with repeating numbers, // i.e. for file names like DSC_1234 sorting more than 10K files @@ -292,56 +293,40 @@ module.SortActions = actions.Actions({ this.data.sort_method = typeof(method) == typeof('str') ? method : method.join(' ') var splitMethods = function(m){ - return m instanceof Array ? m : - m - .split(/'([^']*)'|"([^"]*)"| +/) - .filter(function(e){ - return e && e.trim() != '' && !/['"]/.test(e) }) } - // XXX + return (m instanceof Array ? + m + : typeof(m) == typeof('str') ? + m + .split(/'([^']*)'|"([^"]*)"| +/) + .filter(function(e){ + return e && e.trim() != '' && !/['"]/.test(e) }) + : []) + .reduce(function(r, e){ + return r.concat(e instanceof Array ? e : [e]) }, []) } var expandMethods = function(m, seen){ - seen = seen || new Set() - if(seen.has(m)){ + seen = seen || [] + if(seen.indexOf(m) >= 0){ throw new Error('Sort method loop detected.') - } else { - seen.add(m) } + var methods = that.config['sort-methods'] || [] return (m instanceof Array ? m : splitMethods(m)) .map(function(m){ var a = SortActions.__sort_methods__[m] || (that.__sort_methods__ && that.__sort_methods__[m]) // expand local aliases... - return m in that.config['sort-methods'] ? - expandMethods(that.config['split-methods'], seen) + return m in methods ? + expandMethods(methods[m], seen.concat([m])) // expand system aliases... : typeof(a) == typeof('str') ? - expandMethods(a, seen) + expandMethods(a, seen.concat([m])) : a instanceof Array ? a : m }) // merge... .reduce(function(r, e){ - return e instanceof Array ? r.concat(e) : r.push(e) }, []) } + return r.concat(e instanceof Array ? e : [e]) }, []) } - // expand method names... - // XXX should this be recursive??? - method = splitMethods(method) - .map(function(m){ - return m in that.config['sort-methods'] ? - splitMethods(that.config['split-methods']) : m }) - // expand system aliases... - /* - method = method - .map(function(m){ - var a = (SortActions.__sort_methods__[m] - || (that.__sort_methods__ && that.__sort_methods__[m]) - return typeof(a) == typeof('str') ? - splitMethods(a) - : a instanceof Array ? - a - : m }) - .reduce(function(r, e){ - return e instanceof Array ? r.concat(e) : r.push(e) }, []) - //*/ + method = expandMethods(method) // get the reverse arity... var i = method.indexOf('reverse') @@ -360,6 +345,7 @@ module.SortActions = actions.Actions({ // build the compare routine... method = method // remove duplicate methods... + // XXX should we keep the last occurrence or the first occurrence??? .unique() .map(function(m){ return (SortActions.__sort_methods__[m]