From e83759e86d2a9e05e4b85dae50925fe988f8e239 Mon Sep 17 00:00:00 2001 From: Jermolene Date: Mon, 12 May 2014 15:16:44 +0100 Subject: [PATCH] Add "before" and "after" filter operators MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #357 by adding new “before” and “after” filter operators. --- core/modules/filters/after.js | 31 +++++++++++++++++++ core/modules/filters/before.js | 31 +++++++++++++++++++ editions/test/tiddlers/tests/test-filters.js | 9 ++++++ .../tiddlers/filters/FilterOperator after.tid | 20 ++++++++++++ .../filters/FilterOperator before.tid | 20 ++++++++++++ 5 files changed, 111 insertions(+) create mode 100644 core/modules/filters/after.js create mode 100644 core/modules/filters/before.js create mode 100644 editions/tw5.com/tiddlers/filters/FilterOperator after.tid create mode 100644 editions/tw5.com/tiddlers/filters/FilterOperator before.tid diff --git a/core/modules/filters/after.js b/core/modules/filters/after.js new file mode 100644 index 000000000..6e5f3c77c --- /dev/null +++ b/core/modules/filters/after.js @@ -0,0 +1,31 @@ +/*\ +title: $:/core/modules/filters/after.js +type: application/javascript +module-type: filteroperator + +Filter operator returning the tiddler from the current list that is after the tiddler named in the operand. + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +/* +Export our filter function +*/ +exports.after = function(source,operator,options) { + var results = []; + source(function(tiddler,title) { + results.push(title); + }); + var index = results.indexOf(operator.operand); + if(index === -1 || index > (results.length - 2)) { + return []; + } else { + return [results[index + 1]]; + } +}; + +})(); diff --git a/core/modules/filters/before.js b/core/modules/filters/before.js new file mode 100644 index 000000000..292cc619d --- /dev/null +++ b/core/modules/filters/before.js @@ -0,0 +1,31 @@ +/*\ +title: $:/core/modules/filters/before.js +type: application/javascript +module-type: filteroperator + +Filter operator returning the tiddler from the current list that is before the tiddler named in the operand. + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +/* +Export our filter function +*/ +exports.before = function(source,operator,options) { + var results = []; + source(function(tiddler,title) { + results.push(title); + }); + var index = results.indexOf(operator.operand); + if(index <= 0) { + return []; + } else { + return [results[index - 1]]; + } +}; + +})(); diff --git a/editions/test/tiddlers/tests/test-filters.js b/editions/test/tiddlers/tests/test-filters.js index d02aecfdc..d16db5d3e 100644 --- a/editions/test/tiddlers/tests/test-filters.js +++ b/editions/test/tiddlers/tests/test-filters.js @@ -269,6 +269,15 @@ describe("Filter tests", function() { expect(wiki.filterTiddlers("[modifier{!!modifier}] +[sort[title]]",fakeWidget).join(",")).toBe("$:/TiddlerTwo,a fourth tiddler,one,Tiddler Three"); }); + it("should handle the before and after operators", function() { + expect(wiki.filterTiddlers("[list[TiddlerSeventh]after[TiddlerOne]]").join(",")).toBe("Tiddler Three"); + expect(wiki.filterTiddlers("[list[TiddlerSeventh]after[a fourth tiddler]]").join(",")).toBe("MissingTiddler"); + expect(wiki.filterTiddlers("[list[TiddlerSeventh]after[MissingTiddler]]").join(",")).toBe(""); + expect(wiki.filterTiddlers("[list[TiddlerSeventh]before[TiddlerOne]]").join(",")).toBe(""); + expect(wiki.filterTiddlers("[list[TiddlerSeventh]before[a fourth tiddler]]").join(",")).toBe("Tiddler Three"); + expect(wiki.filterTiddlers("[list[TiddlerSeventh]before[MissingTiddler]]").join(",")).toBe("a fourth tiddler"); + }); + }); })(); diff --git a/editions/tw5.com/tiddlers/filters/FilterOperator after.tid b/editions/tw5.com/tiddlers/filters/FilterOperator after.tid new file mode 100644 index 000000000..e9b8de15d --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/FilterOperator after.tid @@ -0,0 +1,20 @@ +created: 20140512103123179 +modified: 20140512103123179 +tags: filters +title: FilterOperator: after +type: text/vnd.tiddlywiki + +The ''after'' filter operator returns the tiddler from the current list that is after the tiddler named in the operand. + +The following examples assume a tiddler called `MyList` with a `list` field containing: + +``` +one two three four five +``` + +|!Filter String |!Description | +|`[list[MyList]after[two]]` |Returns `three` | +|`[list[MyList]after[five]]` |Returns an empty list | +|`[list[MyList]after{!!title}]` |Returns `five` if the current tiddler is `four` | + +See also [[FilterOperator: before]], [[FilterOperator: previous]] and [[FilterOperator: next]]. diff --git a/editions/tw5.com/tiddlers/filters/FilterOperator before.tid b/editions/tw5.com/tiddlers/filters/FilterOperator before.tid new file mode 100644 index 000000000..42ed5548f --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/FilterOperator before.tid @@ -0,0 +1,20 @@ +created: 20140512103123179 +modified: 20140512103123179 +tags: filters +title: FilterOperator: before +type: text/vnd.tiddlywiki + +The ''before'' filter operator returns the tiddler from the current list that is before the tiddler named in the operand. + +The following examples assume a tiddler called `MyList` with a `list` field containing: + +``` +one two three four five +``` + +|!Filter String |!Description | +|`[list[MyList]before[two]]` |Returns `one` | +|`[list[MyList]before[one]]` |Returns an empty list | +|`[list[MyList]before{!!title}]` |Returns `three` if the current tiddler is `four` | + +See also [[FilterOperator: after]], [[FilterOperator: previous]] and [[FilterOperator: next]].