1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-11-18 07:44:51 +00:00

Merge pull request #324 from Skeeve/nsort

Add numeric sort filter operators
This commit is contained in:
Jeremy Ruston 2014-01-03 02:30:12 -08:00
commit 5dea8ca758
4 changed files with 40 additions and 41 deletions

View File

@ -16,6 +16,30 @@ Filter operator for sorting
Export our filter function Export our filter function
*/ */
exports.sort = function(source,operator,options) { 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; var results;
if($tw.utils.isArray(source)) { if($tw.utils.isArray(source)) {
results = source; results = source;
@ -25,8 +49,7 @@ exports.sort = function(source,operator,options) {
results.push(title); results.push(title);
}); });
} }
options.wiki.sortTiddlers(results,operator.operand,operator.prefix === "!");
return results; return results;
}; }
})(); })();

View File

@ -1,32 +0,0 @@
/*\
title: $:/core/modules/filters/sortcs.js
type: application/javascript
module-type: filteroperator
Filter operator for case-sensitive sorting
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Export our filter function
*/
exports.sortcs = function(source,operator,options) {
var results;
if($tw.utils.isArray(source)) {
results = source;
} else {
results = [];
$tw.utils.each(source,function(element,title) {
results.push(title);
});
}
options.wiki.sortTiddlers(results,operator.operand,operator.prefix === "!",true);
return results;
};
})();

View File

@ -305,21 +305,27 @@ Sort an array of tiddler titles by a specified field
isDescending: true if the sort should be descending isDescending: true if the sort should be descending
isCaseSensitive: true if the sort should consider upper and lower case letters to be different 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; var self = this;
titles.sort(function(a,b) { titles.sort(function(a,b) {
if(sortField !== "title") { if(sortField !== "title") {
a = self.getTiddler(a).fields[sortField] || ""; a = self.getTiddler(a).fields[sortField] || "";
b = self.getTiddler(b).fields[sortField] || ""; b = self.getTiddler(b).fields[sortField] || "";
} }
if(!isCaseSensitive) { if (!isNumeric || isNaN(a) || isNaN(b)) {
if(typeof a === "string") { if(!isCaseSensitive) {
a = a.toLowerCase(); if(typeof a === "string") {
} a = a.toLowerCase();
if(typeof b === "string") { }
b = b.toLowerCase(); if(typeof b === "string") {
b = b.toLowerCase();
}
} }
} }
else {
a-= 0;
b-= 0;
}
if(a < b) { if(a < b) {
return isDescending ? +1 : -1; return isDescending ? +1 : -1;
} else { } else {

View File

@ -39,6 +39,8 @@ A filter string consists of one or more runs of filter operators that each look
* ''has'': tests whether a tiddler has the field specified in the operand * ''has'': tests whether a tiddler has the field specified in the operand
* ''sort'': sorts the tiddlers by the field specified in the operand * ''sort'': sorts the tiddlers by the field specified in the operand
* ''sortcs'': a case sensitive sort of the current tiddlers by the field specified in the operand * ''sortcs'': a case sensitive sort of the current tiddlers by the field specified in the operand
* ''nsort'': sorts the tiddlers numerically by the field specified in the operand
* ''nsortcs'': a case sensitive (for the non-numerical elements) numerical sort of the current tiddlers by the field specified in the operand
* ''prefix'': tests whether a tiddlers title starts with the prefix specified in the operand * ''prefix'': tests whether a tiddlers title starts with the prefix specified in the operand
* ''limit'': limits the number of subresults to the integer specified in the operand * ''limit'': limits the number of subresults to the integer specified in the operand
* ''tag'': tests whether a given tag is (`[tag[mytag]]`) or is not (`[!tag[mytag]]`) present on the tiddler * ''tag'': tests whether a given tag is (`[tag[mytag]]`) or is not (`[!tag[mytag]]`) present on the tiddler