From 3f68b1369944197a7b4a21b9c02e8530881ec9e2 Mon Sep 17 00:00:00 2001 From: "jeremy@jermolene.com" Date: Tue, 30 Aug 2022 18:01:46 +0100 Subject: [PATCH 1/3] First commit --- core/modules/filters.js | 45 +++++- core/modules/filters/count.js | 4 +- core/modules/filters/format/json.js | 35 +++++ core/modules/filters/json-ops.js | 142 ++++++++++++++++++ core/modules/filters/math.js | 11 +- core/modules/utils/simple-list.js | 86 +++++++++++ core/modules/utils/utils.js | 49 ++++++ editions/test/tiddlers/tests/test-filters.js | 4 + .../test/tiddlers/tests/test-json-filters.js | 105 +++++++++++++ 9 files changed, 468 insertions(+), 13 deletions(-) create mode 100644 core/modules/filters/format/json.js create mode 100644 core/modules/filters/json-ops.js create mode 100644 core/modules/utils/simple-list.js create mode 100644 editions/test/tiddlers/tests/test-json-filters.js diff --git a/core/modules/filters.js b/core/modules/filters.js index 221206e6b..d1d149a5a 100644 --- a/core/modules/filters.js +++ b/core/modules/filters.js @@ -195,12 +195,20 @@ exports.parseFilter = function(filterString) { exports.getFilterOperators = function() { if(!this.filterOperators) { - $tw.Wiki.prototype.filterOperators = {}; - $tw.modules.applyMethods("filteroperator",this.filterOperators); + $tw.Wiki.prototype.oldFilterOperators = {}; + $tw.modules.applyMethods("filteroperator",this.oldFilterOperators); + $tw.Wiki.prototype.newFilterOperators = {}; + $tw.modules.applyMethods("newfilteroperator",this.newFilterOperators); + $tw.Wiki.prototype.filterOperators = $tw.utils.extend({},$tw.Wiki.prototype.oldFilterOperators,$tw.Wiki.prototype.newFilterOperators); } return this.filterOperators; }; +exports.isFilterOperatorNew = function(name) { + this.getFilterOperators(); + return name in $tw.Wiki.prototype.newFilterOperators; +}; + exports.getFilterRunPrefixes = function() { if(!this.filterRunPrefixes) { $tw.Wiki.prototype.filterRunPrefixes = {}; @@ -209,11 +217,21 @@ exports.getFilterRunPrefixes = function() { return this.filterRunPrefixes; } -exports.filterTiddlers = function(filterString,widget,source) { +exports.filterTiddlersPolymorphic = function(filterString,widget,source) { var fn = this.compileFilter(filterString); return fn.call(this,source,widget); }; +exports.filterTiddlers = function(filterString,widget,source) { + var results = this.filterTiddlersPolymorphic(filterString,widget,source); + for(var t=0; t Date: Wed, 31 Aug 2022 09:17:06 +0100 Subject: [PATCH 2/3] Remove debugging code --- core/modules/filters/math.js | 3 --- core/modules/utils/utils.js | 1 - 2 files changed, 4 deletions(-) diff --git a/core/modules/filters/math.js b/core/modules/filters/math.js index 77e9438b3..3764f6725 100644 --- a/core/modules/filters/math.js +++ b/core/modules/filters/math.js @@ -207,9 +207,6 @@ function makeNumericBinaryOperator(fnCalc) { var result = [], numOperand = $tw.utils.parseNumber(operator.operand); source(function(tiddler,title) { - if(typeof title !== "string") { - console.log("YES!") - } result.push(fnCalc($tw.utils.parseNumber(title),numOperand)); }); return result; diff --git a/core/modules/utils/utils.js b/core/modules/utils/utils.js index 1eff82c71..8a2b6d254 100644 --- a/core/modules/utils/utils.js +++ b/core/modules/utils/utils.js @@ -1020,7 +1020,6 @@ exports.filterItemToObject = function(value,options) { case "undefined": return defaultValue; case "object": - console.log("Got an object!") return value; case "boolean": return value; From dceb873ce17d2c071a2d81b0b1fea1c534b4d360 Mon Sep 17 00:00:00 2001 From: "jeremy@jermolene.com" Date: Thu, 1 Sep 2022 11:31:56 +0100 Subject: [PATCH 3/3] More tests for type conversion --- editions/test/tiddlers/tests/test-json-filters.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/editions/test/tiddlers/tests/test-json-filters.js b/editions/test/tiddlers/tests/test-json-filters.js index cd21555ac..16fdbf652 100644 --- a/editions/test/tiddlers/tests/test-json-filters.js +++ b/editions/test/tiddlers/tests/test-json-filters.js @@ -25,6 +25,10 @@ describe("json filter tests", function() { title: "Second", text: '["une","deux","trois"]', type: "application/json" + },{ + title: "Third", + text: "This is not JSON", + type: "text/vnd.tiddlywiki" }]; wiki.addTiddlers(tiddlers); @@ -33,6 +37,7 @@ describe("json filter tests", function() { }); it("should support the jsonget operator", function() { + expect(wiki.filterTiddlers("[{Third}jsonget[]]")).toEqual(["This is not JSON"]); expect(wiki.filterTiddlers("[{First}jsonget[]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]}}']); expect(wiki.filterTiddlers("[{First}jsonget[a]]")).toEqual(["one"]); expect(wiki.filterTiddlers("[{First}jsonget[b]]")).toEqual([""]); @@ -64,6 +69,7 @@ describe("json filter tests", function() { }); it("should support the jsontype operator", function() { + expect(wiki.filterTiddlers("[{Third}jsontype[]]")).toEqual(["string"]); expect(wiki.filterTiddlers("[{First}jsontype[]]")).toEqual(["object"]); expect(wiki.filterTiddlers("[{First}jsontype[a]]")).toEqual(["string"]); expect(wiki.filterTiddlers("[{First}jsontype[b]]")).toEqual(["string"]);