From 7597f5af77c839ff79b1b72a282e6816bbc40831 Mon Sep 17 00:00:00 2001
From: Steve Schneider
Date: Mon, 3 Jul 2023 13:48:11 -0400
Subject: [PATCH 001/419] Update WidgetMessage_ tm-http-request Example
Zotero.tid (#7584)
* corrected zotero groups available for import
* added field zotero-group to imported tiddlers
---
.../messages/WidgetMessage_ tm-http-request Example Zotero.tid | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request Example Zotero.tid b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request Example Zotero.tid
index ea64dd3a2..472f0abb0 100644
--- a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request Example Zotero.tid
+++ b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request Example Zotero.tid
@@ -6,7 +6,7 @@ Specify the Zotero group ID to import
<$edit-text tiddler="$:/config/zotero-group" tag="input"/> or
<$select tiddler="$:/config/zotero-group">
-
+
$select>
\end
@@ -16,6 +16,7 @@ Specify the Zotero group ID to import
$basetitle={{{ =[[_zotero_import ]] =[- jsonget[key]] =[[ ]] =[
- jsonget[title]] +[join[]] }}}
text={{{ [
- jsonget[title]] }}}
tags="$:/tags/ZoteroImport"
+ zotero-group={{$:/config/zotero-group}}
>
<$action-setmultiplefields $tiddler=<> $fields="[
- jsonindexes[]addprefix[zotero-]]" $values="[
- jsonindexes[]] :map[
- jsongetelse[.XXXXX.]]"/>
<$list filter="[
- jsonindexes[creators]]" variable="creatorIndex">
From 02f6d850d5e853aece7cd5c2caf5f39c1e408972 Mon Sep 17 00:00:00 2001
From: "jeremy@jermolene.com"
Date: Thu, 6 Jul 2023 09:10:56 +0100
Subject: [PATCH 002/419] Remove references to
https://github.com/jermolene/tiddlywiki5/releases
It is not actually populated
---
editions/tw5.com/tiddlers/releasenotes/Releases.tid | 2 +-
editions/tw5.com/tiddlers/releasenotes/TiddlyWiki Releases.tid | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/editions/tw5.com/tiddlers/releasenotes/Releases.tid b/editions/tw5.com/tiddlers/releasenotes/Releases.tid
index 7257c19d9..e738520a7 100644
--- a/editions/tw5.com/tiddlers/releasenotes/Releases.tid
+++ b/editions/tw5.com/tiddlers/releasenotes/Releases.tid
@@ -4,6 +4,6 @@ tags: About
title: Releases
type: text/vnd.tiddlywiki
-New releases of TiddlyWiki and TiddlyDesktop are announced via the [[official discussion groups|Forums]] and [[Twitter|https://twitter.com/TiddlyWiki]] (you can also subscribe to an Atom/RSS feed of [[TiddlyWiki releases from GitHub|https://github.com/jermolene/tiddlywiki5/releases.atom]])
+New releases of TiddlyWiki and TiddlyDesktop are announced via the [[official discussion groups|Forums]] and [[Twitter|https://twitter.com/TiddlyWiki]]
<>
diff --git a/editions/tw5.com/tiddlers/releasenotes/TiddlyWiki Releases.tid b/editions/tw5.com/tiddlers/releasenotes/TiddlyWiki Releases.tid
index 3fbe6347f..57c335265 100644
--- a/editions/tw5.com/tiddlers/releasenotes/TiddlyWiki Releases.tid
+++ b/editions/tw5.com/tiddlers/releasenotes/TiddlyWiki Releases.tid
@@ -5,7 +5,7 @@ tags: Releases
title: TiddlyWiki Releases
type: text/vnd.tiddlywiki
-Here are the details of recent releases of TiddlyWiki5. See [[TiddlyWiki5 Versioning]] for details of how releases are named. Note that archived versions of release source files are available at https://github.com/Jermolene/TiddlyWiki5/releases
+Here are the details of recent releases of TiddlyWiki5. See [[TiddlyWiki5 Versioning]] for details of how releases are named.
If you are using node.js, you can also install prior versions like this:
From eff158b1ae44332b6b0c8b8d3907b24c14ebf57d Mon Sep 17 00:00:00 2001
From: btheado
Date: Sun, 9 Jul 2023 10:50:48 -0500
Subject: [PATCH 003/419] Fixed http-request bind-status and bind-progress
option names (#7595)
---
core/modules/utils/dom/http.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/core/modules/utils/dom/http.js b/core/modules/utils/dom/http.js
index ba4b3d2a1..5b1f0abe6 100644
--- a/core/modules/utils/dom/http.js
+++ b/core/modules/utils/dom/http.js
@@ -106,8 +106,8 @@ function HttpClientRequest(options) {
this.wiki = options.wiki;
this.completionActions = options.oncompletion;
this.progressActions = options.onprogress;
- this.bindStatus = options["bind-status"];
- this.bindProgress = options["bind-progress"];
+ this.bindStatus = options["bindStatus"];
+ this.bindProgress = options["bindProgress"];
this.method = options.method || "GET";
this.body = options.body || "";
this.variables = options.variables;
@@ -132,7 +132,7 @@ HttpClientRequest.prototype.send = function(callback) {
var self = this,
setBinding = function(title,text) {
if(title) {
- this.wiki.addTiddler(new $tw.Tiddler({title: title, text: text}));
+ self.wiki.addTiddler(new $tw.Tiddler({title: title, text: text}));
}
};
if(this.url) {
From f517497fe7cc2b9aec70e2a8390ebaf67fdee39f Mon Sep 17 00:00:00 2001
From: Scott Sauyet
Date: Sun, 9 Jul 2023 11:52:35 -0400
Subject: [PATCH 004/419] Add tabindex to SelectWidget and docs (#7594)
---
core/modules/widgets/select.js | 4 ++++
editions/tw5.com/tiddlers/widgets/SelectWidget.tid | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/core/modules/widgets/select.js b/core/modules/widgets/select.js
index cd789423f..ab9bef74e 100644
--- a/core/modules/widgets/select.js
+++ b/core/modules/widgets/select.js
@@ -145,6 +145,7 @@ SelectWidget.prototype.execute = function() {
this.selectDefault = this.getAttribute("default");
this.selectMultiple = this.getAttribute("multiple", false);
this.selectSize = this.getAttribute("size");
+ this.selectTabindex = this.getAttribute("tabindex");
this.selectTooltip = this.getAttribute("tooltip");
this.selectFocus = this.getAttribute("focus");
// Make the child widgets
@@ -162,6 +163,9 @@ SelectWidget.prototype.execute = function() {
if(this.selectSize) {
$tw.utils.addAttributeToParseTreeNode(selectNode,"size",this.selectSize);
}
+ if(this.selectTabindex) {
+ $tw.utils.addAttributeToParseTreeNode(selectNode,"tabindex",this.selectTabindex);
+ }
if(this.selectTooltip) {
$tw.utils.addAttributeToParseTreeNode(selectNode,"title",this.selectTooltip);
}
diff --git a/editions/tw5.com/tiddlers/widgets/SelectWidget.tid b/editions/tw5.com/tiddlers/widgets/SelectWidget.tid
index b46f0359f..e22fcfec6 100644
--- a/editions/tw5.com/tiddlers/widgets/SelectWidget.tid
+++ b/editions/tw5.com/tiddlers/widgets/SelectWidget.tid
@@ -41,7 +41,7 @@ The content of the `<$select>` widget should be one or more HTML `
\ No newline at end of file
+HelloThere" dashes="dashes" disabled="true" otherattrib="" quoted="here" spaces="spaces">
\ No newline at end of file
From ff7214ff561d479e7563dce82a525004c556b615 Mon Sep 17 00:00:00 2001
From: Jeremy Ruston <174761+Jermolene@users.noreply.github.com>
Date: Sat, 15 Jul 2023 17:56:20 +0100
Subject: [PATCH 012/419] New test for importvariables widget
---
.../data/importvariables/WithSetWidgets.tid | 23 +++++++++++++++++++
1 file changed, 23 insertions(+)
create mode 100644 editions/test/tiddlers/tests/data/importvariables/WithSetWidgets.tid
diff --git a/editions/test/tiddlers/tests/data/importvariables/WithSetWidgets.tid b/editions/test/tiddlers/tests/data/importvariables/WithSetWidgets.tid
new file mode 100644
index 000000000..5d351583e
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/importvariables/WithSetWidgets.tid
@@ -0,0 +1,23 @@
+title: ImportVariables/WithSetWidgets
+description: Import variables defined with a set widget
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\whitespace trim
+\import Definitions
+<$text text=<>/>,
+<$text text=<>/>
++
+title: Definitions
+
+\whitespace trim
+<$set name="one" value="elephant">
+<$set name="two" value="giraffe">
+$set>
+$set>
++
+title: ExpectedResult
+
+elephant,giraffe
\ No newline at end of file
From 3a90c37816ff39104ee2851e1c6c1732c4528763 Mon Sep 17 00:00:00 2001
From: Jeremy Ruston <174761+Jermolene@users.noreply.github.com>
Date: Sat, 15 Jul 2023 17:58:14 +0100
Subject: [PATCH 013/419] Update substitute operator docs
Fixes #7609
---
editions/tw5.com/tiddlers/filters/substitute Operator.tid | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/editions/tw5.com/tiddlers/filters/substitute Operator.tid b/editions/tw5.com/tiddlers/filters/substitute Operator.tid
index 85da915da..c7f98384e 100644
--- a/editions/tw5.com/tiddlers/filters/substitute Operator.tid
+++ b/editions/tw5.com/tiddlers/filters/substitute Operator.tid
@@ -18,9 +18,9 @@ The <<.op substitute>> operator replaces any placeholders in the input titles in
# variables
|placeholder syntax|description|h
-|`$n$`|Text substitution of a parameter provided to the operator, where n is the position of the parameter starting with 1 for the first parameter. Unmatched placeholders pass through unchanged.|
-|`$(varname)$`|Text substitution of a variable. Undefined variables are replaced with an empty string.|
-|`${ filter expression }$`|Text substitution with the first result of evaluating the filter expression. |
+|`$n$`|Text substitution of a parameter provided to the operator, where n is the position of the parameter starting with 1 for the first parameter. Unmatched placeholders pass through unchanged. |
+|`$(varname)$`|Text substitution of a variable. Undefined variables are replaced with an empty string. |
+|`${ filter expression }$`|Text substitution of the first result of evaluating a filter expression. In other words, if the filter returns multiple titles only the first one will be used. |
<<.tip """Placeholders that contain square bracket characters are not valid filter syntax when used directly in a filter expression. However they can be provided as input to the <$macrocall $name=".op" _="substitute"/> operator as text references or variables""">>
From 3bd8c5d50dbb2cb523f3eccc7a19142df7a50f94 Mon Sep 17 00:00:00 2001
From: Mario Pietsch
Date: Sat, 15 Jul 2023 19:12:10 +0200
Subject: [PATCH 014/419] Add code-body to unsafe templates, and new cascade
for tiddlers with system tags (#7583)
---
core/ui/AlertTemplate.tid | 1 +
core/ui/EditTemplate.tid | 1 +
core/ui/ImportPreviews/Text.tid | 1 +
core/ui/PageStylesheet.tid | 1 +
core/ui/PageTemplate.tid | 1 +
core/ui/RootTemplate.tid | 1 +
core/ui/StoryTiddlerTemplate.tid | 1 +
core/ui/ViewTemplate.tid | 1 +
core/ui/ViewTemplate/body/default.tid | 1 +
core/wiki/config/ViewTemplateBodyFilters.multids | 3 ++-
core/wiki/tags/ViewTemplateBodyFilter.tid | 3 +--
11 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/core/ui/AlertTemplate.tid b/core/ui/AlertTemplate.tid
index ae15818a0..d67586b8d 100644
--- a/core/ui/AlertTemplate.tid
+++ b/core/ui/AlertTemplate.tid
@@ -1,3 +1,4 @@
+code-body: yes
title: $:/core/ui/AlertTemplate
\whitespace trim
diff --git a/core/ui/EditTemplate.tid b/core/ui/EditTemplate.tid
index 5aed61a73..6ad84a139 100644
--- a/core/ui/EditTemplate.tid
+++ b/core/ui/EditTemplate.tid
@@ -1,3 +1,4 @@
+code-body: yes
title: $:/core/ui/EditTemplate
\define delete-edittemplate-state-tiddlers()
diff --git a/core/ui/ImportPreviews/Text.tid b/core/ui/ImportPreviews/Text.tid
index 7832eb8b8..b37c109ad 100644
--- a/core/ui/ImportPreviews/Text.tid
+++ b/core/ui/ImportPreviews/Text.tid
@@ -1,5 +1,6 @@
title: $:/core/ui/ImportPreviews/Text
tags: $:/tags/ImportPreview
caption: {{$:/language/Import/Listing/Preview/Text}}
+code-body: yes
<$transclude tiddler=<> subtiddler=<> mode="block"/>
diff --git a/core/ui/PageStylesheet.tid b/core/ui/PageStylesheet.tid
index 0b32df5f8..f21909f09 100644
--- a/core/ui/PageStylesheet.tid
+++ b/core/ui/PageStylesheet.tid
@@ -1,4 +1,5 @@
title: $:/core/ui/PageStylesheet
+code-body: yes
\import [subfilter{$:/core/config/GlobalImportFilter}]
\whitespace trim
diff --git a/core/ui/PageTemplate.tid b/core/ui/PageTemplate.tid
index f0ab4852a..38b4c915b 100644
--- a/core/ui/PageTemplate.tid
+++ b/core/ui/PageTemplate.tid
@@ -2,6 +2,7 @@ title: $:/core/ui/PageTemplate
name: {{$:/language/PageTemplate/Name}}
description: {{$:/language/PageTemplate/Description}}
icon: $:/core/images/layout-button
+code-body: yes
\whitespace trim
\import [subfilter{$:/core/config/GlobalImportFilter}]
diff --git a/core/ui/RootTemplate.tid b/core/ui/RootTemplate.tid
index 1fd7319ba..4a7443c79 100644
--- a/core/ui/RootTemplate.tid
+++ b/core/ui/RootTemplate.tid
@@ -1,4 +1,5 @@
title: $:/core/ui/RootTemplate
+code-body: yes
<$transclude tiddler={{{ [{$:/layout}has[text]] ~[[$:/core/ui/PageTemplate]] }}} mode="inline"/>
diff --git a/core/ui/StoryTiddlerTemplate.tid b/core/ui/StoryTiddlerTemplate.tid
index 7cc26a849..a2b2f5558 100644
--- a/core/ui/StoryTiddlerTemplate.tid
+++ b/core/ui/StoryTiddlerTemplate.tid
@@ -1,3 +1,4 @@
title: $:/core/ui/StoryTiddlerTemplate
+code-body: yes
<$transclude tiddler={{{ [] :cascade[all[shadows+tiddlers]tag[$:/tags/StoryTiddlerTemplateFilter]!is[draft]get[text]] :and[has[title]else[$:/core/ui/ViewTemplate]] }}} />
diff --git a/core/ui/ViewTemplate.tid b/core/ui/ViewTemplate.tid
index dcba5c953..9fa67816e 100644
--- a/core/ui/ViewTemplate.tid
+++ b/core/ui/ViewTemplate.tid
@@ -1,4 +1,5 @@
title: $:/core/ui/ViewTemplate
+code-body: yes
\whitespace trim
\define folded-state()
diff --git a/core/ui/ViewTemplate/body/default.tid b/core/ui/ViewTemplate/body/default.tid
index 083684879..5416c6e07 100644
--- a/core/ui/ViewTemplate/body/default.tid
+++ b/core/ui/ViewTemplate/body/default.tid
@@ -1,4 +1,5 @@
title: $:/core/ui/ViewTemplate/body/default
+code-body: yes
<$transclude>
diff --git a/core/wiki/config/ViewTemplateBodyFilters.multids b/core/wiki/config/ViewTemplateBodyFilters.multids
index 6348cc036..ff9fe7250 100644
--- a/core/wiki/config/ViewTemplateBodyFilters.multids
+++ b/core/wiki/config/ViewTemplateBodyFilters.multids
@@ -2,7 +2,8 @@ title: $:/config/ViewTemplateBodyFilters/
tags: $:/tags/ViewTemplateBodyFilter
stylesheet: [tag[$:/tags/Stylesheet]then[$:/core/ui/ViewTemplate/body/rendered-plain-text]]
-system: [prefix[$:/boot/]] [prefix[$:/config/]] [prefix[$:/core/macros]] [prefix[$:/core/save/]] [prefix[$:/core/templates/]] [prefix[$:/core/ui/]split[/]count[]compare:number:eq[4]] [prefix[$:/info/]] [prefix[$:/language/]] [prefix[$:/languages/]] [prefix[$:/snippets/]] [prefix[$:/state/]] [prefix[$:/status/]] [prefix[$:/info/]] [prefix[$:/temp/]] +[!is[image]limit[1]then[$:/core/ui/ViewTemplate/body/code]]
+core-ui-tags: [tag[$:/tags/PageTemplate]] [tag[$:/tags/EditTemplate]] [tag[$:/tags/ViewTemplate]] [tag[$:/tags/KeyboardShortcut]] [tag[$:/tags/ImportPreview]] [tag[$:/tags/EditPreview]][tag[$:/tags/EditorToolbar]] [tag[$:/tags/Actions]] :then[[$:/core/ui/ViewTemplate/body/code]]
+system: [prefix[$:/boot/]] [prefix[$:/config/]] [prefix[$:/core/macros]] [prefix[$:/core/save/]] [prefix[$:/core/templates/]] [prefix[$:/info/]] [prefix[$:/language/]] [prefix[$:/languages/]] [prefix[$:/snippets/]] [prefix[$:/state/]] [prefix[$:/status/]] [prefix[$:/info/]] [prefix[$:/temp/]] +[!is[image]limit[1]then[$:/core/ui/ViewTemplate/body/code]]
code-body: [field:code-body[yes]then[$:/core/ui/ViewTemplate/body/code]]
import: [field:plugin-type[import]then[$:/core/ui/ViewTemplate/body/import]]
plugin: [has[plugin-type]then[$:/core/ui/ViewTemplate/body/plugin]]
diff --git a/core/wiki/tags/ViewTemplateBodyFilter.tid b/core/wiki/tags/ViewTemplateBodyFilter.tid
index ab7ff262a..7b9fb7fd8 100644
--- a/core/wiki/tags/ViewTemplateBodyFilter.tid
+++ b/core/wiki/tags/ViewTemplateBodyFilter.tid
@@ -1,3 +1,2 @@
title: $:/tags/ViewTemplateBodyFilter
-list: $:/config/ViewTemplateBodyFilters/hide-body $:/config/ViewTemplateBodyFilters/code-body $:/config/ViewTemplateBodyFilters/stylesheet $:/config/ViewTemplateBodyFilters/system $:/config/ViewTemplateBodyFilters/import $:/config/ViewTemplateBodyFilters/plugin $:/config/ViewTemplateBodyFilters/default
-
+list: $:/config/ViewTemplateBodyFilters/hide-body $:/config/ViewTemplateBodyFilters/code-body $:/config/ViewTemplateBodyFilters/stylesheet $:/config/ViewTemplateBodyFilters/core-ui-advanced-search $:/config/ViewTemplateBodyFilters/core-ui-tags $:/config/ViewTemplateBodyFilters/system $:/config/ViewTemplateBodyFilters/import $:/config/ViewTemplateBodyFilters/plugin $:/config/ViewTemplateBodyFilters/default
\ No newline at end of file
From b54a88ce83fd4d5410d08310074dbfc10d20802a Mon Sep 17 00:00:00 2001
From: Jeremy Ruston
Date: Sun, 16 Jul 2023 14:04:09 +0100
Subject: [PATCH 015/419] Clean up transclude widget
1. Update comments
2. Refactor use of parseTreeNodes so that they are not referenced unnecessarily
3. getTransclusionTarget doesn't need to return the parser object
---
core/modules/widgets/transclude.js | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/core/modules/widgets/transclude.js b/core/modules/widgets/transclude.js
index 7e63ff156..7b4b9581d 100755
--- a/core/modules/widgets/transclude.js
+++ b/core/modules/widgets/transclude.js
@@ -41,16 +41,17 @@ TranscludeWidget.prototype.execute = function() {
this.collectAttributes();
this.collectStringParameters();
this.collectSlotFillParameters();
- // Get the parse tree nodes that we are transcluding
+ // Get the target text and parse tree nodes that we are transcluding
var target = this.getTransclusionTarget(),
- parseTreeNodes = target.parseTreeNodes;
+ parseTreeNodes;
this.sourceText = target.text;
this.parserType = target.type;
this.parseAsInline = target.parseAsInline;
// Process the transclusion according to the output type
switch(this.transcludeOutput || "text/html") {
case "text/html":
- // No further processing required
+ // Return the parse tree nodes
+ parseTreeNodes = target.parseTreeNodes;
break;
case "text/raw":
// Just return the raw text
@@ -158,7 +159,7 @@ TranscludeWidget.prototype.collectSlotFillParameters = function() {
};
/*
-Get transcluded parse tree nodes as an object {parser:,text:,type:}
+Get transcluded parse tree nodes as an object {text:,type:,parseTreeNodes:,parseAsInline:}
*/
TranscludeWidget.prototype.getTransclusionTarget = function() {
var self = this;
@@ -270,7 +271,6 @@ TranscludeWidget.prototype.getTransclusionTarget = function() {
// Return the parse tree
if(parser) {
return {
- parser: parser,
parseTreeNodes: parser.tree,
parseAsInline: parseAsInline,
text: parser.source,
@@ -279,7 +279,6 @@ TranscludeWidget.prototype.getTransclusionTarget = function() {
} else {
// If there's no parse tree then return the missing slot value
return {
- parser: null,
parseTreeNodes: (this.slotFillParseTrees["ts-missing"] || []),
parseAsInline: parseAsInline,
text: null,
From 284669544be3477106114617bc29b4d01a6f920c Mon Sep 17 00:00:00 2001
From: Saq Imtiaz
Date: Mon, 17 Jul 2023 10:18:42 +0200
Subject: [PATCH 016/419] Trim whitespace when importing variables in
$importvariables (#7611)
* fix: trim whitespace when importing variables
* feat: added tests for importing variables
---
core/modules/widgets/importvariables.js | 2 +-
.../data/importvariables/WithSetWidgets2.tid | 22 ++++++++++++++
.../WithSetWidgetsAndMacros.tid | 29 +++++++++++++++++++
3 files changed, 52 insertions(+), 1 deletion(-)
create mode 100644 editions/test/tiddlers/tests/data/importvariables/WithSetWidgets2.tid
create mode 100644 editions/test/tiddlers/tests/data/importvariables/WithSetWidgetsAndMacros.tid
diff --git a/core/modules/widgets/importvariables.js b/core/modules/widgets/importvariables.js
index aafc8ba8b..a8bb483b6 100644
--- a/core/modules/widgets/importvariables.js
+++ b/core/modules/widgets/importvariables.js
@@ -49,7 +49,7 @@ ImportVariablesWidget.prototype.execute = function(tiddlerList) {
this.tiddlerList = tiddlerList || this.wiki.filterTiddlers(this.filter,this);
// Accumulate the <$set> widgets from each tiddler
$tw.utils.each(this.tiddlerList,function(title) {
- var parser = widgetPointer.wiki.parseTiddler(title,{parseAsInline:true});
+ var parser = widgetPointer.wiki.parseTiddler(title,{parseAsInline:true, configTrimWhiteSpace:true});
if(parser) {
var parseTreeNode = parser.tree[0];
while(parseTreeNode && ["setvariable","set","parameters"].indexOf(parseTreeNode.type) !== -1) {
diff --git a/editions/test/tiddlers/tests/data/importvariables/WithSetWidgets2.tid b/editions/test/tiddlers/tests/data/importvariables/WithSetWidgets2.tid
new file mode 100644
index 000000000..23fa58c57
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/importvariables/WithSetWidgets2.tid
@@ -0,0 +1,22 @@
+title: ImportVariables/WithSetWidgets2
+description: Import variables defined with a set widget without whitespace pragma
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\whitespace trim
+\import Definitions
+<$text text=<>/>,
+<$text text=<>/>
++
+title: Definitions
+
+<$set name="one" value="elephant">
+<$set name="two" value="giraffe">
+$set>
+$set>
++
+title: ExpectedResult
+
+elephant,giraffe
\ No newline at end of file
diff --git a/editions/test/tiddlers/tests/data/importvariables/WithSetWidgetsAndMacros.tid b/editions/test/tiddlers/tests/data/importvariables/WithSetWidgetsAndMacros.tid
new file mode 100644
index 000000000..eaa81f38c
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/importvariables/WithSetWidgetsAndMacros.tid
@@ -0,0 +1,29 @@
+title: ImportVariables/WithSetWidgetsAndMacros
+description: Import variables defined with a set widget without whitespace pragma
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\whitespace trim
+\import Definitions
+<$text text=<>/>,
+<$text text=<>/>,
+<$text text=<>/>,
+<$text text=<>/>
++
+title: Definitions
+
+\define name() Bugs Bunny
+\procedure address()
+Bunny Hill
+\end
+
+<$set name="one" value="elephant">
+<$set name="two" value="giraffe">
+$set>
+$set>
++
+title: ExpectedResult
+
+Bugs Bunny,Bunny Hill,elephant,giraffe
\ No newline at end of file
From f61d244410bfeec0dd4f32f581e2ce2c8adfeeb5 Mon Sep 17 00:00:00 2001
From: Jeremy Ruston <174761+Jermolene@users.noreply.github.com>
Date: Mon, 17 Jul 2023 09:33:16 +0100
Subject: [PATCH 017/419] Adjust max widget tree depth to 500
See discussion at https://talk.tiddlywiki.org/t/recursive-error-in-template-tiddler-not-getting-caught-in-5-3-0/7566/12
---
core/modules/widgets/widget.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/modules/widgets/widget.js b/core/modules/widgets/widget.js
index 1e6beae25..3b9a1de25 100755
--- a/core/modules/widgets/widget.js
+++ b/core/modules/widgets/widget.js
@@ -13,7 +13,7 @@ Widget base class
"use strict";
/* Maximum permitted depth of the widget tree for recursion detection */
-var MAX_WIDGET_TREE_DEPTH = 1000;
+var MAX_WIDGET_TREE_DEPTH = 500;
/*
Create a widget object for a parse tree node
From 7182dbf2441c77e2a1f7b865df6553c4e74ce9e8 Mon Sep 17 00:00:00 2001
From: Jeremy Ruston <174761+Jermolene@users.noreply.github.com>
Date: Mon, 17 Jul 2023 09:33:38 +0100
Subject: [PATCH 018/419] Fix whitespace within new journal button image
Fixes #7612
---
core/images/new-journal-button.tid | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/core/images/new-journal-button.tid b/core/images/new-journal-button.tid
index 3b04d5786..5b793deb5 100755
--- a/core/images/new-journal-button.tid
+++ b/core/images/new-journal-button.tid
@@ -1,6 +1,4 @@
title: $:/core/images/new-journal-button
tags: $:/tags/Image
-<$parameters size="22pt" day=<>>
-
-$parameters>
\ No newline at end of file
+<$parameters size="22pt" day=<>>$parameters>
\ No newline at end of file
From 9b2af1359614f4ad5afd05be7cf9853909334592 Mon Sep 17 00:00:00 2001
From: Jeremy Ruston <174761+Jermolene@users.noreply.github.com>
Date: Mon, 17 Jul 2023 12:15:20 +0100
Subject: [PATCH 019/419] tm-http-request: Add support for binary responses
With a demo courtesy of https://random.dog/
@rmunn you recently worked on the base64 utilities. I tried to use $tw.utils.base64Encode instead of window.btoa, but found that it didn't work. It's concerning because we expose that utility method as a filter operation, and it would be frustrating if we were not base64encoding things properly.
---
core/modules/startup/rootwidget.js | 1 +
core/modules/utils/dom/http.js | 16 ++++
...ge_ tm-http-request Example Random Dog.tid | 88 +++++++++++++++++++
...essage_ tm-http-request Example Zotero.tid | 4 +-
.../WidgetMessage_ tm-http-request.tid | 4 +-
5 files changed, 110 insertions(+), 3 deletions(-)
create mode 100644 editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request Example Random Dog.tid
diff --git a/core/modules/startup/rootwidget.js b/core/modules/startup/rootwidget.js
index f5d90afb5..716275cda 100644
--- a/core/modules/startup/rootwidget.js
+++ b/core/modules/startup/rootwidget.js
@@ -38,6 +38,7 @@ exports.startup = function() {
url: params.url,
method: params.method,
body: params.body,
+ binary: params.binary,
oncompletion: params.oncompletion,
onprogress: params.onprogress,
bindStatus: params["bind-status"],
diff --git a/core/modules/utils/dom/http.js b/core/modules/utils/dom/http.js
index 5b1f0abe6..083381d8d 100644
--- a/core/modules/utils/dom/http.js
+++ b/core/modules/utils/dom/http.js
@@ -90,6 +90,7 @@ wiki: wiki to be used for executing action strings
url: URL for request
method: method eg GET, POST
body: text of request body
+binary: set to "yes" to force binary processing of response payload
oncompletion: action string to be invoked on completion
onprogress: action string to be invoked on progress updates
bindStatus: optional title of tiddler to which status ("pending", "complete", "error") should be written
@@ -110,6 +111,7 @@ function HttpClientRequest(options) {
this.bindProgress = options["bindProgress"];
this.method = options.method || "GET";
this.body = options.body || "";
+ this.binary = options.binary || "";
this.variables = options.variables;
var url = options.url;
$tw.utils.each(options.queryStrings,function(value,name) {
@@ -156,6 +158,8 @@ HttpClientRequest.prototype.send = function(callback) {
type: this.method,
headers: this.requestHeaders,
data: this.body,
+ returnProp: this.binary === "" ? "responseText" : "response",
+ responseType: this.binary === "" ? "text" : "arraybuffer",
callback: function(err,data,xhr) {
var hasSucceeded = xhr.status >= 200 && xhr.status < 300,
completionCode = hasSucceeded ? "complete" : "error",
@@ -175,6 +179,16 @@ HttpClientRequest.prototype.send = function(callback) {
data: (data || "").toString(),
headers: JSON.stringify(headers)
};
+ /* Convert data from binary to base64 */
+ if (xhr.responseType === "arraybuffer") {
+ var binary = "",
+ bytes = new Uint8Array(data),
+ len = bytes.byteLength;
+ for (var i=0; i
+ <$action-log/>
+
+ <$list filter="[compare:number:gteq[200]compare:number:lteq[299]]" variable="ignore">
+
+ <$action-createtiddler
+ $basetitle=`$:/RandomDog/$(title)$`
+ text=<>
+ tags="$:/tags/RandomDog"
+ type={{{ [jsonget[content-type]] }}}
+ credits="https://random.dog/"
+ >
+ <$action-log msg="Created tiddler" title=<>/>
+ $createtiddler>
+ $list>
+\end completion-download-dog
+
+<$action-sendmessage
+ $message="tm-http-request"
+ url=<>
+ method="GET"
+ binary="yes"
+ oncompletion=<>
+ var-title=<>
+/>
+\end download-dog
+
+\procedure get-random-dog()
+
+\procedure completion-get-json()
+\import [subfilter{$:/core/config/GlobalImportFilter}]
+ <$action-log msg="In completion-get-json"/>
+ <$action-log/>
+
+ <$list filter="[compare:number:gteq[200]compare:number:lteq[299]]" variable="ignore">
+
+ <$macrocall $name="download-dog" url={{{ [jsonget[url]] }}}/>
+ $list>
+\end completion-get-json
+
+<$action-sendmessage
+ $message="tm-http-request"
+ url="https://random.dog/woof.json"
+ method="GET"
+ oncompletion=<>
+/>
+\end get-random-dog
+
+!! Random Dogs
+
+This demo uses the API of the website https://random.dog/ to import a random dog image or video.
+
+<$button actions=<>>
+Import a random dog image or video
+$button>
+
+<$list filter="[tag[$:/tags/RandomDog]limit[1]]" variable="ignore">
+
+!! Imported Tiddlers
+
+<$button>
+<$action-deletetiddler $filter="[tag[$:/tags/RandomDog]]"/>
+Delete all imported random dogs
+$button>
+
+Export all imported random dogs: <$macrocall $name="exportButton" exportFilter="[tag[$:/tags/RandomDog]]" lingoBase="$:/language/Buttons/ExportTiddlers/"/>
+
+$list>
+
+
+<$list filter="[tag[$:/tags/RandomDog]!sort[modified]]">
+-
+<$link>
+<$text text=<>/>
+$link>
+
+<$transclude $tiddler=<>/>
+
+
+$list>
+
diff --git a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request Example Zotero.tid b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request Example Zotero.tid
index 472f0abb0..c26eb9895 100644
--- a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request Example Zotero.tid
+++ b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request Example Zotero.tid
@@ -1,5 +1,5 @@
title: WidgetMessage: tm-http-request Example - Zotero
-tags: $:/tags/Macro
+tags: $:/tags/Global
\procedure select-zotero-group()
Specify the Zotero group ID to import
@@ -34,7 +34,7 @@ Specify the Zotero group ID to import
\procedure zotero-get-items(start:"0",limit:"25")
\procedure completion()
-\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]
+\import [subfilter{$:/core/config/GlobalImportFilter}]
<$action-log msg="In completion"/>
<$action-log/>
diff --git a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request.tid b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request.tid
index f6c82e760..9c441c524 100644
--- a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request.tid
+++ b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request.tid
@@ -1,6 +1,6 @@
caption: tm-http-request
created: 20230429161453032
-modified: 20230429161453032
+modified: 20230717104212742
tags: Messages
title: WidgetMessage: tm-http-request
type: text/vnd.tiddlywiki
@@ -18,6 +18,7 @@ The following parameters are used:
|!Name |!Description |
|method |HTTP method (eg "GET", "POST") |
|body |String data to be sent with the request |
+|binary |<<.from-version "5.3.1">> Set to "yes" to cause the response body to be treated as binary data and returned in base64 format |
|query-* |Query string parameters with string values |
|header-* |Headers with string values |
|password-header-* |Headers with values taken from the password store |
@@ -49,3 +50,4 @@ Note that the state tiddler $:/state/http-requests contains a number representin
!! Examples
* [[Zotero's|https://www.zotero.org/]] API for retrieving reference items: [[WidgetMessage: tm-http-request Example - Zotero]]
+* [[Random Dog's|https://random.dog/]] API for retrieving random pictures of dogs showing how to retrieve binary data: [[WidgetMessage: tm-http-request Example - Random Dogs]]
From 98ff6b67fd07a8933578a61a41fcd2bd5a1fe80d Mon Sep 17 00:00:00 2001
From: Cameron Fischer
Date: Thu, 20 Jul 2023 11:13:36 -0400
Subject: [PATCH 020/419] Fixed boot so module line numbers are correct again
(#7618)
---
boot/boot.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/boot/boot.js b/boot/boot.js
index 0aa089aa0..cd77ae291 100644
--- a/boot/boot.js
+++ b/boot/boot.js
@@ -596,11 +596,11 @@ $tw.utils.evalGlobal = function(code,context,filename,sandbox,allowGlobals) {
// Add the code prologue and epilogue
code = [
"(function(" + contextNames.join(",") + ") {",
- " (function(){\n" + code + "\n;})();",
+ " (function(){" + code + "\n;})();\n",
(!$tw.browser && sandbox && !allowGlobals) ? globalCheck : "",
- " return exports;\n",
+ "\nreturn exports;\n",
"})"
- ].join("\n");
+ ].join("");
// Compile the code into a function
var fn;
From 4124bbdfb3e2445d45488006dfff1925d067ab0f Mon Sep 17 00:00:00 2001
From: Jeremy Ruston <174761+Jermolene@users.noreply.github.com>
Date: Thu, 20 Jul 2023 16:58:04 +0100
Subject: [PATCH 021/419] New release banner for v5.3.1
---
.../tiddlers/images/New Release Banner.png | Bin 313887 -> 43129 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/editions/tw5.com/tiddlers/images/New Release Banner.png b/editions/tw5.com/tiddlers/images/New Release Banner.png
index 17925343eff50c01c66385c691f7e80f5e7bb697..fd859e411dabacf77d48977e175bdcab9ded0d3a 100644
GIT binary patch
literal 43129
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