mirror of
				https://github.com/Jermolene/TiddlyWiki5
				synced 2025-10-31 15:42:59 +00:00 
			
		
		
		
	Merge pull request #324 from Skeeve/nsort
Add numeric sort filter operators
This commit is contained in:
		| @@ -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; | ||||
| }; | ||||
| } | ||||
|  | ||||
| })(); | ||||
|   | ||||
| @@ -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; | ||||
| }; | ||||
|  | ||||
| })(); | ||||
| @@ -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 { | ||||
|   | ||||
| @@ -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 | ||||
| * ''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 | ||||
| * ''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 | ||||
| * ''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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jeremy Ruston
					Jeremy Ruston