diff --git a/core/modules/filters/sort.js b/core/modules/filters/sort.js index 538ac0ae2..efa3c05bb 100644 --- a/core/modules/filters/sort.js +++ b/core/modules/filters/sort.js @@ -1,5 +1,5 @@ /*\ -title: $:/core/modules/filters/sort.js +title: $:/core/modules/filters/nsort.js type: application/javascript module-type: filteroperator @@ -16,6 +16,30 @@ Filter operator for sorting Export our filter function */ exports.sort = function(source,operator,options) { + var results = prepare_results(source); + options.wiki.sortTiddlers(results,operator.operand,operator.prefix === "!",false,false); + return results; +}; + +exports.nsort = function(source,operator,options) { + var results = prepare_results(source); + options.wiki.sortTiddlers(results,operator.operand,operator.prefix === "!",false,true); + return results; +}; + +exports.sortcs = function(source,operator,options) { + var results = prepare_results(source); + options.wiki.sortTiddlers(results,operator.operand,operator.prefix === "!",true,false); + return results; +}; + +exports.nsortcs = function(source,operator,options) { + var results = prepare_results(source); + options.wiki.sortTiddlers(results,operator.operand,operator.prefix === "!",true,true); + return results; +}; + +var prepare_results = function (source) { var results; if($tw.utils.isArray(source)) { results = source; @@ -25,8 +49,7 @@ exports.sort = function(source,operator,options) { results.push(title); }); } - options.wiki.sortTiddlers(results,operator.operand,operator.prefix === "!"); return results; -}; +} })(); diff --git a/core/modules/wiki.js b/core/modules/wiki.js index cf9f74973..80b8fbfe0 100755 --- a/core/modules/wiki.js +++ b/core/modules/wiki.js @@ -305,21 +305,27 @@ Sort an array of tiddler titles by a specified field isDescending: true if the sort should be descending isCaseSensitive: true if the sort should consider upper and lower case letters to be different */ -exports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive) { +exports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive,isNumeric) { var self = this; titles.sort(function(a,b) { if(sortField !== "title") { a = self.getTiddler(a).fields[sortField] || ""; b = self.getTiddler(b).fields[sortField] || ""; } - if(!isCaseSensitive) { - if(typeof a === "string") { - a = a.toLowerCase(); - } - if(typeof b === "string") { - b = b.toLowerCase(); + if (!isNumeric || isNaN(a) || isNaN(b)) { + if(!isCaseSensitive) { + if(typeof a === "string") { + a = a.toLowerCase(); + } + if(typeof b === "string") { + b = b.toLowerCase(); + } } } + else { + a-= 0; + b-= 0; + } if(a < b) { return isDescending ? +1 : -1; } else {