From c65d08240b1f69078c8b3129cb9b00df56ada1d3 Mon Sep 17 00:00:00 2001 From: Jermolene Date: Mon, 28 Nov 2016 13:42:30 +0000 Subject: [PATCH] Add strict mode to tag operator --- core/modules/filters/tag.js | 31 +++++++++++++++-------- editions/tw5.com/tiddlers/filters/tag.tid | 23 ++++++++++------- 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/core/modules/filters/tag.js b/core/modules/filters/tag.js index 408d7f98f..a421c61d7 100644 --- a/core/modules/filters/tag.js +++ b/core/modules/filters/tag.js @@ -17,19 +17,30 @@ Export our filter function */ exports.tag = function(source,operator,options) { var results = []; - if(operator.prefix === "!") { + if((operator.suffix || "").toLowerCase() === "strict" && !operator.operand) { + // New semantics: + // Always return copy of input if operator.operand is missing source(function(tiddler,title) { - if(tiddler && !tiddler.hasTag(operator.operand)) { - results.push(title); - } + results.push(title); }); } else { - source(function(tiddler,title) { - if(tiddler && tiddler.hasTag(operator.operand)) { - results.push(title); - } - }); - results = options.wiki.sortByList(results,operator.operand); + // Old semantics: + if(operator.prefix === "!") { + // Returns a copy of the input if operator.operand is missing + source(function(tiddler,title) { + if(tiddler && !tiddler.hasTag(operator.operand)) { + results.push(title); + } + }); + } else { + // Returns empty results if operator.operand is missing + source(function(tiddler,title) { + if(tiddler && tiddler.hasTag(operator.operand)) { + results.push(title); + } + }); + results = options.wiki.sortByList(results,operator.operand); + } } return results; }; diff --git a/editions/tw5.com/tiddlers/filters/tag.tid b/editions/tw5.com/tiddlers/filters/tag.tid index 995cae7b1..929464b15 100644 --- a/editions/tw5.com/tiddlers/filters/tag.tid +++ b/editions/tw5.com/tiddlers/filters/tag.tid @@ -1,18 +1,23 @@ +caption: tag created: 20140410103123179 -modified: 20150203191853000 +modified: 20161126122900712 +op-input: a [[selection of titles|Title Selection]] +op-neg-output: those input tiddlers that do <<.em not>> have tag <<.place T>> +op-output: those input tiddlers that have tag <<.place T>> +op-parameter: the title of a [[tag|Tagging]] +op-parameter-name: T +op-purpose: filter the input by tag +op-suffix: <<.from-version "5.1.14">> optional `strict` flag +op-suffix-name: S tags: [[Filter Operators]] [[Common Operators]] [[Tag Operators]] [[Negatable Operators]] title: tag Operator type: text/vnd.tiddlywiki -caption: tag -op-purpose: filter the input by tag -op-input: a [[selection of titles|Title Selection]] -op-parameter: the title of a [[tag|Tagging]] -op-parameter-name: T -op-output: those input tiddlers that have tag <<.place T>> -op-neg-output: those input tiddlers that do <<.em not>> have tag <<.place T>> The output is [[sorted|Order of Tagged Tiddlers]] using the tag's <<.field list>> field and the tiddlers' <<.field list-before>> and <<.field list-after>> fields. -If <<.place T>> is empty, the output of `tag` is empty, and the output of `!tag` is a copy of the input. +The behaviour when <<.place T>> is empty depends on the settings of the <<.place S>> optional suffix: + +* if <<.place T>> is missing and <<.place S>> is either missing or set to "loose", then the output of `tag` is empty, and the output of `!tag` is a copy of the input. +* <<.from-version "5.1.14">> if <<.place T>> is missing and <<.place S>> is set to "strict", then the output of both `tag` and `!tag` is a copy of the input <<.operator-examples "tag">>