mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2026-06-19 19:58:51 +00:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a812313072 | |||
| f85cbeda70 | |||
| e9e22598ad | |||
| 1e47b88dc7 | |||
| 55cf0b2965 |
@@ -2,7 +2,6 @@
|
||||
.c9/
|
||||
.vs/
|
||||
.vscode/
|
||||
.claude/
|
||||
tmp/
|
||||
output/
|
||||
node_modules/
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,7 +1,6 @@
|
||||
created: 20250909171928024
|
||||
modified: 20251110133437795
|
||||
tags: Community/Team
|
||||
leader: @kjharcombe
|
||||
team: @MotovunJack
|
||||
title: Infrastructure Team
|
||||
|
||||
@@ -13,4 +12,4 @@ The infrastructure includes:
|
||||
* github.com/TiddlyWiki
|
||||
* tiddlywiki.com DNS
|
||||
* Netlify account for PR previews
|
||||
* edit.tiddlywiki.com
|
||||
* edit.tiddlywiki.com
|
||||
@@ -14,31 +14,31 @@ Export our filter function
|
||||
*/
|
||||
exports.sort = function(source,operator,options) {
|
||||
var results = prepare_results(source);
|
||||
options.wiki.sortTiddlers(results,operator.operand || "title",operator.prefix === "!",false,false);
|
||||
options.wiki.sortTiddlers(results,operator.operands[0] || "title",operator.prefix === "!",false,false,undefined,operator.operands[1]);
|
||||
return results;
|
||||
};
|
||||
|
||||
exports.nsort = function(source,operator,options) {
|
||||
var results = prepare_results(source);
|
||||
options.wiki.sortTiddlers(results,operator.operand || "title",operator.prefix === "!",false,true);
|
||||
options.wiki.sortTiddlers(results,operator.operands[0] || "title",operator.prefix === "!",false,true,undefined,operator.operands[1]);
|
||||
return results;
|
||||
};
|
||||
|
||||
exports.sortan = function(source, operator, options) {
|
||||
var results = prepare_results(source);
|
||||
options.wiki.sortTiddlers(results, operator.operand || "title", operator.prefix === "!",false,false,true);
|
||||
options.wiki.sortTiddlers(results, operator.operands[0] || "title", operator.prefix === "!",false,false,true,operator.operands[1]);
|
||||
return results;
|
||||
};
|
||||
|
||||
exports.sortcs = function(source,operator,options) {
|
||||
var results = prepare_results(source);
|
||||
options.wiki.sortTiddlers(results,operator.operand || "title",operator.prefix === "!",true,false);
|
||||
options.wiki.sortTiddlers(results,operator.operands[0] || "title",operator.prefix === "!",true,false,undefined,operator.operands[1]);
|
||||
return results;
|
||||
};
|
||||
|
||||
exports.nsortcs = function(source,operator,options) {
|
||||
var results = prepare_results(source);
|
||||
options.wiki.sortTiddlers(results,operator.operand || "title",operator.prefix === "!",true,true);
|
||||
options.wiki.sortTiddlers(results,operator.operands[0] || "title",operator.prefix === "!",true,true,undefined,operator.operands[1]);
|
||||
return results;
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
/*\
|
||||
title: $:/core/modules/filters/wikify.js
|
||||
type: application/javascript
|
||||
module-type: filteroperator
|
||||
|
||||
Filter operator wikifying each string in the input list and returning the result as a list of strings
|
||||
|
||||
\*/
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
/*
|
||||
Export our filter function
|
||||
*/
|
||||
exports.wikify = function(source,operator,options) {
|
||||
var output = operator.operands[0],
|
||||
mode = operator.operands[1],
|
||||
type = operator.operands[2],
|
||||
results = [];
|
||||
source(function(tiddler,title) {
|
||||
var wikifier = new $tw.utils.Wikifier({
|
||||
wiki: options.wiki,
|
||||
widget: options.widget,
|
||||
text: title,
|
||||
type: type,
|
||||
mode: mode,
|
||||
output: output
|
||||
});
|
||||
results.push(wikifier.getResult());
|
||||
});
|
||||
return results;
|
||||
};
|
||||
@@ -0,0 +1,105 @@
|
||||
/*\
|
||||
title: $:/core/modules/utils/wikifier.js
|
||||
type: application/javascript
|
||||
module-type: utils
|
||||
|
||||
A high level helper class for parsing and wikification
|
||||
|
||||
\*/
|
||||
|
||||
/*
|
||||
Options include:
|
||||
wiki: wiki to be used for wikification
|
||||
widget: optional widget to be used as parent of wikified text
|
||||
text: text to be parsed/wikified
|
||||
type: type of the text
|
||||
mode: inline or block
|
||||
output: text, formattedtext, html, parsetree or widgettree
|
||||
*/
|
||||
function Wikifier(options) {
|
||||
this.wiki = options.wiki || $tw.wiki;
|
||||
this.widget = options.widget || $tw.rootWidget;
|
||||
this.text = options.text || "";
|
||||
this.type = options.type || "";
|
||||
this.mode = options.mode || "block";
|
||||
this.output = options.output || "text";
|
||||
// Create the parse tree
|
||||
this.parser = this.wiki.parseText(this.type,this.text,{
|
||||
parseAsInline: this.mode === "inline"
|
||||
});
|
||||
// Create the widget tree
|
||||
this.widgetNode = this.wiki.makeWidget(this.parser,{
|
||||
document: $tw.fakeDocument,
|
||||
parentWidget: this.widget
|
||||
});
|
||||
// Render the widget tree to the container
|
||||
this.container = $tw.fakeDocument.createElement("div");
|
||||
this.widgetNode.render(this.container,null);
|
||||
};
|
||||
|
||||
Wikifier.prototype.refresh = function(changedTiddlers) {
|
||||
// Refresh the widget tree
|
||||
return this.widgetNode.refresh(changedTiddlers);
|
||||
};
|
||||
|
||||
/*
|
||||
Return the result string
|
||||
*/
|
||||
Wikifier.prototype.getResult = function() {
|
||||
var result;
|
||||
switch(this.output) {
|
||||
case "text":
|
||||
result = this.container.textContent;
|
||||
break;
|
||||
case "formattedtext":
|
||||
result = this.container.formattedTextContent;
|
||||
break;
|
||||
case "html":
|
||||
result = this.container.innerHTML;
|
||||
break;
|
||||
case "parsetree":
|
||||
result = JSON.stringify(this.parser.tree,0,$tw.config.preferences.jsonSpaces);
|
||||
break;
|
||||
case "widgettree":
|
||||
result = JSON.stringify(this.getWidgetTree(),0,$tw.config.preferences.jsonSpaces);
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
/*
|
||||
Return a string of the widget tree
|
||||
*/
|
||||
Wikifier.prototype.getWidgetTree = function() {
|
||||
var copyNode = function(widgetNode,resultNode) {
|
||||
var type = widgetNode.parseTreeNode.type;
|
||||
resultNode.type = type;
|
||||
switch(type) {
|
||||
case "element":
|
||||
resultNode.tag = widgetNode.parseTreeNode.tag;
|
||||
break;
|
||||
case "text":
|
||||
resultNode.text = widgetNode.parseTreeNode.text;
|
||||
break;
|
||||
}
|
||||
if(Object.keys(widgetNode.attributes || {}).length > 0) {
|
||||
resultNode.attributes = {};
|
||||
$tw.utils.each(widgetNode.attributes,function(attr,attrName) {
|
||||
resultNode.attributes[attrName] = widgetNode.getAttribute(attrName);
|
||||
});
|
||||
}
|
||||
if(Object.keys(widgetNode.children || {}).length > 0) {
|
||||
resultNode.children = [];
|
||||
$tw.utils.each(widgetNode.children,function(widgetChildNode) {
|
||||
var node = {};
|
||||
resultNode.children.push(node);
|
||||
copyNode(widgetChildNode,node);
|
||||
});
|
||||
}
|
||||
},
|
||||
results = {};
|
||||
copyNode(this.widgetNode,results);
|
||||
return results;
|
||||
};
|
||||
|
||||
exports.Wikifier = Wikifier;
|
||||
@@ -36,89 +36,22 @@ Compute the internal state of the widget
|
||||
WikifyWidget.prototype.execute = function() {
|
||||
// Get our parameters
|
||||
this.wikifyName = this.getAttribute("name");
|
||||
this.wikifyText = this.getAttribute("text");
|
||||
this.wikifyType = this.getAttribute("type");
|
||||
this.wikifyMode = this.getAttribute("mode","block");
|
||||
this.wikifyOutput = this.getAttribute("output","text");
|
||||
// Create the parse tree
|
||||
this.wikifyParser = this.wiki.parseText(this.wikifyType,this.wikifyText,{
|
||||
parseAsInline: this.wikifyMode === "inline"
|
||||
// Create the wikifier
|
||||
this.wikifier = new $tw.utils.Wikifier({
|
||||
wiki: this.wiki,
|
||||
widget: this,
|
||||
text: this.getAttribute("text"),
|
||||
type: this.getAttribute("type"),
|
||||
mode: this.getAttribute("mode","block"),
|
||||
output: this.getAttribute("output","text")
|
||||
});
|
||||
// Create the widget tree
|
||||
this.wikifyWidgetNode = this.wiki.makeWidget(this.wikifyParser,{
|
||||
document: $tw.fakeDocument,
|
||||
parentWidget: this
|
||||
});
|
||||
// Render the widget tree to the container
|
||||
this.wikifyContainer = $tw.fakeDocument.createElement("div");
|
||||
this.wikifyWidgetNode.render(this.wikifyContainer,null);
|
||||
this.wikifyResult = this.getResult();
|
||||
this.wikifyResult = this.wikifier.getResult();
|
||||
// Set context variable
|
||||
this.setVariable(this.wikifyName,this.wikifyResult);
|
||||
// Construct the child widgets
|
||||
this.makeChildWidgets();
|
||||
};
|
||||
|
||||
/*
|
||||
Return the result string
|
||||
*/
|
||||
WikifyWidget.prototype.getResult = function() {
|
||||
var result;
|
||||
switch(this.wikifyOutput) {
|
||||
case "text":
|
||||
result = this.wikifyContainer.textContent;
|
||||
break;
|
||||
case "formattedtext":
|
||||
result = this.wikifyContainer.formattedTextContent;
|
||||
break;
|
||||
case "html":
|
||||
result = this.wikifyContainer.innerHTML;
|
||||
break;
|
||||
case "parsetree":
|
||||
result = JSON.stringify(this.wikifyParser.tree,0,$tw.config.preferences.jsonSpaces);
|
||||
break;
|
||||
case "widgettree":
|
||||
result = JSON.stringify(this.getWidgetTree(),0,$tw.config.preferences.jsonSpaces);
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
/*
|
||||
Return a string of the widget tree
|
||||
*/
|
||||
WikifyWidget.prototype.getWidgetTree = function() {
|
||||
var copyNode = function(widgetNode,resultNode) {
|
||||
var type = widgetNode.parseTreeNode.type;
|
||||
resultNode.type = type;
|
||||
switch(type) {
|
||||
case "element":
|
||||
resultNode.tag = widgetNode.parseTreeNode.tag;
|
||||
break;
|
||||
case "text":
|
||||
resultNode.text = widgetNode.parseTreeNode.text;
|
||||
break;
|
||||
}
|
||||
if(Object.keys(widgetNode.attributes || {}).length > 0) {
|
||||
resultNode.attributes = {};
|
||||
$tw.utils.each(widgetNode.attributes,function(attr,attrName) {
|
||||
resultNode.attributes[attrName] = widgetNode.getAttribute(attrName);
|
||||
});
|
||||
}
|
||||
if(Object.keys(widgetNode.children || {}).length > 0) {
|
||||
resultNode.children = [];
|
||||
$tw.utils.each(widgetNode.children,function(widgetChildNode) {
|
||||
var node = {};
|
||||
resultNode.children.push(node);
|
||||
copyNode(widgetChildNode,node);
|
||||
});
|
||||
}
|
||||
},
|
||||
results = {};
|
||||
copyNode(this.wikifyWidgetNode,results);
|
||||
return results;
|
||||
};
|
||||
|
||||
/*
|
||||
Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering
|
||||
*/
|
||||
@@ -130,9 +63,9 @@ WikifyWidget.prototype.refresh = function(changedTiddlers) {
|
||||
return true;
|
||||
} else {
|
||||
// Refresh the widget tree
|
||||
if(this.wikifyWidgetNode.refresh(changedTiddlers)) {
|
||||
if(this.wikifier.refresh(changedTiddlers)) {
|
||||
// Check if there was any change
|
||||
var result = this.getResult();
|
||||
var result = this.wikifier.getResult();
|
||||
if(result !== this.wikifyResult) {
|
||||
// If so, save the change
|
||||
this.wikifyResult = result;
|
||||
|
||||
+10
-37
@@ -369,31 +369,16 @@ 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,isNumeric,isAlphaNumeric) {
|
||||
exports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive,isNumeric,isAlphaNumeric,locale) {
|
||||
var self = this;
|
||||
if(sortField === "title") {
|
||||
if(!isNumeric && !isAlphaNumeric) {
|
||||
if(isCaseSensitive) {
|
||||
if(isDescending) {
|
||||
titles.sort(function(a,b) {
|
||||
return b.localeCompare(a);
|
||||
});
|
||||
} else {
|
||||
titles.sort(function(a,b) {
|
||||
return a.localeCompare(b);
|
||||
});
|
||||
}
|
||||
const sorter = new Intl.Collator(locale, { sensitivity: isCaseSensitive ? "variant" : "accent" });
|
||||
if(isDescending) {
|
||||
titles.sort((a,b) => sorter.compare(b, a));
|
||||
} else {
|
||||
if(isDescending) {
|
||||
titles.sort(function(a,b) {
|
||||
return b.toLowerCase().localeCompare(a.toLowerCase());
|
||||
});
|
||||
} else {
|
||||
titles.sort(function(a,b) {
|
||||
return a.toLowerCase().localeCompare(b.toLowerCase());
|
||||
});
|
||||
}
|
||||
}
|
||||
titles.sort((a,b) => sorter.compare(a, b));
|
||||
}
|
||||
} else {
|
||||
titles.sort(function(a,b) {
|
||||
var x,y;
|
||||
@@ -414,14 +399,8 @@ exports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive,is
|
||||
}
|
||||
}
|
||||
}
|
||||
if(isAlphaNumeric) {
|
||||
return isDescending ? b.localeCompare(a,undefined,{numeric: true,sensitivity: "base"}) : a.localeCompare(b,undefined,{numeric: true,sensitivity: "base"});
|
||||
}
|
||||
if(!isCaseSensitive) {
|
||||
a = a.toLowerCase();
|
||||
b = b.toLowerCase();
|
||||
}
|
||||
return isDescending ? b.localeCompare(a) : a.localeCompare(b);
|
||||
const sorter = new Intl.Collator(locale, { numeric: isAlphaNumeric, sensitivity: isAlphaNumeric ? "base" : isCaseSensitive ? "variant" : "accent" });
|
||||
return isDescending ? sorter.compare(b, a) : sorter.compare(a, b);
|
||||
});
|
||||
}
|
||||
} else {
|
||||
@@ -463,14 +442,8 @@ exports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive,is
|
||||
}
|
||||
a = String(a);
|
||||
b = String(b);
|
||||
if(isAlphaNumeric) {
|
||||
return isDescending ? b.localeCompare(a,undefined,{numeric: true,sensitivity: "base"}) : a.localeCompare(b,undefined,{numeric: true,sensitivity: "base"});
|
||||
}
|
||||
if(!isCaseSensitive) {
|
||||
a = a.toLowerCase();
|
||||
b = b.toLowerCase();
|
||||
}
|
||||
return isDescending ? b.localeCompare(a) : a.localeCompare(b);
|
||||
const sorter = new Intl.Collator(locale, { numeric: isAlphaNumeric, sensitivity: isAlphaNumeric ? "base" : isCaseSensitive ? "variant" : "accent" });
|
||||
return isDescending ? sorter.compare(b, a) : sorter.compare(a, b);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -13,8 +13,7 @@
|
||||
"tiddlywiki/menubar",
|
||||
"tiddlywiki/jszip",
|
||||
"tiddlywiki/confetti",
|
||||
"tiddlywiki/tour",
|
||||
"tiddlywiki/dom-to-image"
|
||||
"tiddlywiki/tour"
|
||||
],
|
||||
"themes": [
|
||||
"tiddlywiki/vanilla",
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
title: Operators/Wikify/TextMode
|
||||
description: Simple wikify operator
|
||||
type: text/vnd.tiddlywiki-multiple
|
||||
tags: [[$:/tags/wiki-test-spec]]
|
||||
|
||||
title: Output
|
||||
|
||||
\parsermode inline
|
||||
<$text text={{{ [subfilter{Filter}] }}}/>
|
||||
+
|
||||
title: Filter
|
||||
|
||||
[{Text}wikify[html],[inline],[text/vnd.tiddlywiki]]
|
||||
+
|
||||
title: Text
|
||||
|
||||
This is ''the text'' that is __wikified__
|
||||
+
|
||||
title: ExpectedResult
|
||||
|
||||
This is <strong>the text</strong> that is <u>wikified</u>
|
||||
@@ -0,0 +1,64 @@
|
||||
title: Operators/Wikify/ParseTreeMode
|
||||
description: Simple wikify operator
|
||||
type: text/vnd.tiddlywiki-multiple
|
||||
tags: [[$:/tags/wiki-test-spec]]
|
||||
|
||||
title: Output
|
||||
|
||||
\parsermode inline
|
||||
<$text text={{{ [subfilter{Filter}] }}}/>
|
||||
+
|
||||
title: Filter
|
||||
|
||||
[{Text}wikify[parsetree],[inline],[text/vnd.tiddlywiki]]
|
||||
+
|
||||
title: Text
|
||||
|
||||
This is ''the text'' that is __wikified__
|
||||
+
|
||||
title: ExpectedResult
|
||||
|
||||
[
|
||||
{
|
||||
"type": "text",
|
||||
"text": "This is ",
|
||||
"start": 0,
|
||||
"end": 8
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"tag": "strong",
|
||||
"children": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": "the text",
|
||||
"start": 10,
|
||||
"end": 18
|
||||
}
|
||||
],
|
||||
"start": 8,
|
||||
"end": 20,
|
||||
"rule": "bold"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"text": " that is ",
|
||||
"start": 20,
|
||||
"end": 29
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"tag": "u",
|
||||
"children": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": "wikified",
|
||||
"start": 31,
|
||||
"end": 39
|
||||
}
|
||||
],
|
||||
"start": 29,
|
||||
"end": 41,
|
||||
"rule": "underscore"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,21 @@
|
||||
title: Operators/Wikify/TextMode
|
||||
description: Simple wikify operator
|
||||
type: text/vnd.tiddlywiki-multiple
|
||||
tags: [[$:/tags/wiki-test-spec]]
|
||||
|
||||
title: Output
|
||||
|
||||
\parsermode inline
|
||||
<$text text={{{ [subfilter{Filter}] }}}/>
|
||||
+
|
||||
title: Filter
|
||||
|
||||
[{Text}wikify[text],[inline],[text/vnd.tiddlywiki]]
|
||||
+
|
||||
title: Text
|
||||
|
||||
This is ''the text'' that is __wikified__
|
||||
+
|
||||
title: ExpectedResult
|
||||
|
||||
This is the text that is wikified
|
||||
@@ -0,0 +1,6 @@
|
||||
created: 20251001034405510
|
||||
list: A a Ä ä Z z O o Õ õ Ö ö Ü ü Y y
|
||||
modified: 20251218023544134
|
||||
tags:
|
||||
title: Locale Example
|
||||
type: text/vnd.tiddlywiki
|
||||
@@ -1,5 +1,5 @@
|
||||
created: 20150124112340000
|
||||
modified: 20150124113250000
|
||||
modified: 20251218023608468
|
||||
tags: [[sort Operator]] [[Operator Examples]]
|
||||
title: sort Operator (Examples)
|
||||
type: text/vnd.tiddlywiki
|
||||
@@ -11,3 +11,10 @@ type: text/vnd.tiddlywiki
|
||||
<<.operator-example 3 "one two Three four +[sort[]]">>
|
||||
<<.operator-example 4 "[prefix[Tiddl]sort[text]]">>
|
||||
<<.operator-example 5 "[has[created]sort[created]limit[10]]" "the oldest 10 tiddlers in the wiki">>
|
||||
|
||||
! Using a custom locale
|
||||
The following examples shows the differences when using the sort operator with default, Swedish and Estonian locale.
|
||||
|
||||
<<.operator-example 6 "[list[Locale Example]sort[]]">>
|
||||
<<.operator-example 7 "[list[Locale Example]sort[],[sv]]">>
|
||||
<<.operator-example 8 "[list[Locale Example]sort[],[et]]">>
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
caption: nsort
|
||||
created: 20140410103123179
|
||||
modified: 20150203190051000
|
||||
modified: 20251227084602319
|
||||
op-input: a [[selection of titles|Title Selection]]
|
||||
op-neg-output: the input, likewise sorted into descending order
|
||||
op-output: the input, sorted into ascending order by field <<.field F>>, treating field values as numbers
|
||||
op-parameter: accept same parameters as the [[sort Operator]]
|
||||
op-parameter-name: F
|
||||
op-purpose: sort the input by number field
|
||||
tags: [[Filter Operators]] [[Field Operators]] [[Order Operators]] [[Negatable Operators]]
|
||||
title: nsort Operator
|
||||
type: text/vnd.tiddlywiki
|
||||
caption: nsort
|
||||
op-purpose: sort the input by number field
|
||||
op-input: a [[selection of titles|Title Selection]]
|
||||
op-parameter: the name of a [[field|TiddlerFields]], defaulting to <<.field title>>
|
||||
op-parameter-name: F
|
||||
op-output: the input, sorted into ascending order by field <<.field F>>, treating field values as numbers
|
||||
op-neg-output: the input, likewise sorted into descending order
|
||||
|
||||
Non-numeric values are treated as having a higher value than any number, and the difference between capital and lowercase letters is ignored. Compare <<.olink nsortcs>>.
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
caption: nsortcs
|
||||
created: 20140410103123179
|
||||
modified: 20150417125717078
|
||||
modified: 20251227084615705
|
||||
op-input: a [[selection of titles|Title Selection]]
|
||||
op-neg-output: the input, likewise sorted into descending order
|
||||
op-output: the input, sorted into ascending order by field <<.place F>>, treating field values as numbers
|
||||
op-parameter: the name of a [[field|TiddlerFields]], defaulting to <<.field title>>
|
||||
op-parameter: accept same parameters as the [[sort Operator]]
|
||||
op-parameter-name: F
|
||||
op-purpose: sort the input titles by number field, treating upper and lower case as different
|
||||
tags: [[Filter Operators]] [[Field Operators]] [[Order Operators]] [[Negatable Operators]]
|
||||
|
||||
@@ -1,16 +1,22 @@
|
||||
caption: sort
|
||||
created: 20140410103123179
|
||||
modified: 20150203191228000
|
||||
modified: 20251227084644651
|
||||
op-input: a [[selection of titles|Title Selection]]
|
||||
op-neg-output: the input, likewise sorted into descending order
|
||||
op-output: the input, sorted into ascending order by field <<.field F>>, treating field values as text
|
||||
op-parameter: the <<.op sort>> operator accepts 1 or 2 parameters, see below for details
|
||||
op-parameter-name: F
|
||||
op-purpose: sort the input by text field
|
||||
tags: [[Filter Operators]] [[Common Operators]] [[Field Operators]] [[Order Operators]] [[Negatable Operators]]
|
||||
title: sort Operator
|
||||
type: text/vnd.tiddlywiki
|
||||
caption: sort
|
||||
op-purpose: sort the input by text field
|
||||
op-input: a [[selection of titles|Title Selection]]
|
||||
op-parameter: the name of a [[field|TiddlerFields]], defaulting to <<.field title>>
|
||||
op-parameter-name: F
|
||||
op-output: the input, sorted into ascending order by field <<.field F>>, treating field values as text
|
||||
op-neg-output: the input, likewise sorted into descending order
|
||||
|
||||
The difference between capital and lowercase letters is ignored. Compare <<.olink sortcs>>.
|
||||
|
||||
```
|
||||
[sort[<field>],[<locale>]]
|
||||
```
|
||||
* ''field'' : the name of a [[field|TiddlerFields]], defaulting to <<.field title>>
|
||||
* ''locale'': (optional). A string with a [[BCP 47 language tag|https://developer.mozilla.org/en-US/docs/Glossary/BCP_47_language_tag]]
|
||||
|
||||
<<.operator-examples "sort">>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
caption: sortan
|
||||
created: 20180222071605739
|
||||
modified: 20180223012553446
|
||||
modified: 20251227084439804
|
||||
op-input: a [[selection of titles|Title Selection]]
|
||||
op-neg-output: the input, likewise sorted into descending order
|
||||
op-output: the input, sorted into ascending order by field <<.field F>>, treating field values as alphanumerics
|
||||
op-parameter: the name of a [[field|TiddlerFields]], defaulting to <<.field title>>
|
||||
op-parameter: accept same parameters as the [[sort Operator]]
|
||||
op-parameter-name: F
|
||||
op-purpose: sort the input by text field considering them as alphanumerics
|
||||
tags: [[Filter Operators]] [[Common Operators]] [[Field Operators]] [[Order Operators]] [[Negatable Operators]]
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
caption: sortcs
|
||||
created: 20140410103123179
|
||||
modified: 20150417125704503
|
||||
modified: 20251227084416522
|
||||
op-input: a [[selection of titles|Title Selection]]
|
||||
op-neg-output: the input, likewise sorted into descending order
|
||||
op-output: the input, sorted into ascending order by field <<.field F>>, treating field values as text
|
||||
op-parameter: the name of a [[field|TiddlerFields]], defaulting to <<.field title>>
|
||||
op-parameter: accept same parameters as the [[sort Operator]]
|
||||
op-parameter-name: F
|
||||
op-purpose: sort the input by text field, treating upper and lower case as different
|
||||
tags: [[Filter Operators]] [[Field Operators]] [[Order Operators]] [[Negatable Operators]]
|
||||
|
||||
@@ -12,15 +12,3 @@ eg="""<<tabs "[tag[sampletab]]" "SampleTabTwo" "$:/state/tab2" "tc-vertical">>""
|
||||
|
||||
<$macrocall $name=".example" n="3"
|
||||
eg="""<<tabs "[tag[sampletab]nsort[order]]" "SampleTabThree" "$:/state/tab3" "tc-vertical">>"""/>
|
||||
|
||||
The following example sets the default tab to be the first tiddler selected in the filter and makes the saved state non-persistent (by using "~$:/temp/"):
|
||||
|
||||
<$macrocall $name=".example" n="4"
|
||||
eg="""<$set name=tl filter="[tag[sampletab]nsort[order]]">
|
||||
<$transclude $variable=tabs tabsList=<<tl>> default={{{[enlist<tl>]}}} state="$:/temp/state/tab" class="tc-vertical"/>
|
||||
</$set>"""/>
|
||||
|
||||
<<.from-version "5.4.0">> Dynamic parameters can be used to specify the default tab:
|
||||
|
||||
<$macrocall $name=".example" n="5"
|
||||
eg="""<<tabs "[tag[sampletab]nsort[order]]" default={{{[tag[sampletab]nsort[order]]}}} state="$:/temp/state/tab" class="tc-vertical">>"""/>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
caption: Calls
|
||||
created: 20221007130006705
|
||||
modified: 20260301030947969
|
||||
modified: 20260125212303316
|
||||
tags: WikiText Procedures Functions Macros
|
||||
title: Calls
|
||||
type: text/vnd.tiddlywiki
|
||||
@@ -25,12 +25,6 @@ Each parameter value can be enclosed in `'`single quotes`'`, `"`double quotes`"`
|
||||
|
||||
See the discussion about [[parser modes|WikiText parser mode: macro examples]]
|
||||
|
||||
!!! Examples
|
||||
|
||||
<<testcase TestCases/Calls/ProcedureStaticAttributes>>
|
||||
|
||||
<<testcase TestCases/Calls/ProcedureDynamicAttributes>>
|
||||
|
||||
!! Calls with <<.wlink TranscludeWidget>> Widget
|
||||
|
||||
The shortcut syntax expands to the <<.wlink TranscludeWidget>> widget with the `$variable` attribute specifying the name of the procedure to transclude.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
title: $:/changenotes/5.4.0/#8093
|
||||
description: Fix SelectWidget not working with multiple options organised into groups
|
||||
description: Fixes SelectWidget does not work with multiple options organised into group - issue #8092
|
||||
release: 5.4.0
|
||||
tags: $:/tags/ChangeNote
|
||||
change-type: bugfix
|
||||
@@ -7,4 +7,4 @@ change-category: widget
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/issues/8093 https://github.com/TiddlyWiki/TiddlyWiki5/pull/9616
|
||||
github-contributors: buggyj saqimtiaz
|
||||
|
||||
Fixed a bug where the SelectWidget did not work correctly when multiple options were organised into groups.
|
||||
Fixed SelectWidget does not work with multiple options organised into group.
|
||||
|
||||
@@ -10,6 +10,16 @@ tags: $:/tags/ChangeNote
|
||||
title: $:/changenotes/5.4.0/#8249
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
The default AES encryption strength has been increased from 128-bit to 256-bit, improving the security of encrypted wikis.
|
||||
This PR changes the default ''AES encryption'' setting ''from 128 bit to 256'' bit.
|
||||
|
||||
Existing wikis encrypted with the old 128-bit setting can still be decrypted and imported into wikis using 256-bit encryption, and vice versa, so there is no risk of losing access to previously-saved data.
|
||||
* Download [[emtpy.html v5.3.8 from the archve|https://tiddlywiki.com/archive/empty/Empty-TiddlyWiki-5.3.8]] which uses AES 128 bit
|
||||
* Create some content
|
||||
* Save encrypted as eg: ''aes-128.html''
|
||||
* Create aes-256.html with TW v5.4.x
|
||||
* Create some content
|
||||
* Save encrypted as: ''aes-256.html''
|
||||
|
||||
''Import decryption test''
|
||||
|
||||
* Import ''aes-256.html'' into ''aes-128.html'' -> Decryption and import works
|
||||
* Import ''aes-128.html'' into ''aes-256.html'' -> Decryption and import works
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
title: $:/changenotes/5.4.0/#8258
|
||||
description: Core support for serializing parsed wikitext syntax trees back to strings
|
||||
description: Core plugin to serialize syntax trees back to strings
|
||||
tags: $:/tags/ChangeNote
|
||||
release: 5.4.0
|
||||
change-type: feature
|
||||
@@ -7,8 +7,8 @@ change-category: developer
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/8258
|
||||
github-contributors: linonetwo
|
||||
|
||||
The core can now serialize parsed wikitext syntax trees back to wikitext strings. This is a developer-facing foundation that enables future tools such as:
|
||||
This is an internal change that will only be of direct interest to plugin developers but will form the basis of future user-facing features. For example:
|
||||
|
||||
* Programmatic wikitext manipulation (parse, modify the AST, serialize back)
|
||||
* WYSIWYG editors
|
||||
* WikiText formatters and linters
|
||||
* Programmatically manipulating wikitext content by modifying the syntax tree and deserializing it back to wikitext
|
||||
* Building WYSIWYG editors
|
||||
* Creating WikiText formatters and linters
|
||||
|
||||
@@ -7,9 +7,10 @@ change-category: hackability
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/8972 https://github.com/TiddlyWiki/TiddlyWiki5/pull/9614 https://github.com/TiddlyWiki/TiddlyWiki5/pull/9645
|
||||
github-contributors: Jermolene saqimtiaz
|
||||
|
||||
Two related capabilities have been added to TiddlyWiki's filter system:
|
||||
This PR introduces a new filter run prefix `:let` that assigns the result of the filter run to a variable that is made available for the remaining filter runs of the filter expression. It solves the problem that previously it was impossible to compute values for filter operator parameters; parameters could only be a literal string, text reference or variable reference.
|
||||
|
||||
* ''`:let` filter run prefix'': Assigns the result of a filter run to a named variable, making it available to subsequent filter runs in the same expression. This solves a long-standing limitation where filter operator parameters could only be literal strings, text references, or variable references — not computed values
|
||||
* ''Multi-valued variables'': Variables can now hold a list of values, not just a single string. Assign them using `:let` or `<$let>`, and retrieve the full list using round brackets (e.g. `([myvar])`). In all other contexts, only the first value is used
|
||||
This PR also introduces multi-valued variables, the ability to store a list of results in a variable, not just a single string. They can be assigned with the new `:let` filter run prefix, or the existing `<$let>` widget. The full list of values can be retrieved using round brackets instead of the usual angle brackets. In all other contexts only the first item in the list is used as the variable value.
|
||||
|
||||
See [[Multi-Valued Variables]], [[Let Filter Run Prefix]], and [[LetWidget]] for details and examples.
|
||||
* [[Multi-Valued Variables]]
|
||||
* [[Let Filter Run Prefix]]
|
||||
* [[LetWidget]]
|
||||
|
||||
@@ -8,6 +8,4 @@ modified: 20251115012705865
|
||||
release: 5.4.0
|
||||
tags: $:/tags/ChangeNote
|
||||
title: $:/changenotes/5.4.0/#9015
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Minor colour adjustments to the Muted palette.
|
||||
type: text/vnd.tiddlywiki
|
||||
@@ -7,11 +7,21 @@ change-category: hackability
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9055
|
||||
github-contributors: Jermolene
|
||||
|
||||
Macro, procedure, and function calls via the `<<..>>` shortcut syntax now support dynamic parameter values, not just static strings. Use an equals sign instead of a colon to pass transclusions, filter expressions, or nested invocations as parameter values. For example:
|
||||
This PR extends the handling of macro/procedure/function invocationsmade via the `<<..>>` shortcut syntax to allow dynamic parameters instead of just static strings. To indicate the new syntax the colon that usually separates a parameter name from its value is replaced by an equals sign. For example:
|
||||
|
||||
```
|
||||
<<mymacro param={{Something}}>>
|
||||
<div class=<<mymacro param={{Something}}>>>
|
||||
<div class=<<mymacro param={{{ [<myvar>addprefix[https:] }}}>>>
|
||||
<div class=<<mymacro param={{{ [<innermacro p={{Something}}>addprefix[https:] }}}>>>
|
||||
```
|
||||
|
||||
This removes the need for `<$transclude $variable=...>` in many common cases. See [[Calls]] for full details and examples.
|
||||
Note that the new syntax obviates the need for `<$transclude $variable=...>` constructions in many cases.
|
||||
|
||||
The extended syntax allows parameter values to be passed as transclusions, filter expressions or nested invocations in three settings:
|
||||
|
||||
* As a standalone construction
|
||||
* As a widget attribute value
|
||||
* As a filter operand value
|
||||
|
||||
See [[Calls]] for more details and examples.
|
||||
|
||||
@@ -7,4 +7,10 @@ change-category: nodejs
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9078
|
||||
github-contributors: linonetwo
|
||||
|
||||
The web server's `get-file` route now supports HTTP Range requests and file streaming. This enables proper seeking and playback of video and audio files served from the `/files/` directory, and allows interrupted downloads to be resumed.
|
||||
The web server's `get-file` route now supports HTTP Range requests and file streaming, enabling better loading and playback of large media files.
|
||||
|
||||
!! Features
|
||||
|
||||
* HTTP Range header: Enables partial content delivery with `206 Partial Content` responses, which is used when the user drags the progress bar in video/audio playback
|
||||
* Streaming file delivery: Browsers can now properly seek and stream video files from the `/files/` directory. Files are read using Node.js streams for better performance and memory efficiency.
|
||||
* Resumable downloads: To save interrupted downloads
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
change-category: developer
|
||||
change-type: enhancement
|
||||
created: 20260120153052332
|
||||
description: Add a destroy method to widgets for cleaning up resources when a widget is removed
|
||||
description: Adds a destroy method for widgets allowing for clean up of resources when a widget is removed.
|
||||
github-contributors: saqimtiaz
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9097
|
||||
modified: 20260125212701672
|
||||
@@ -10,4 +10,4 @@ tags: $:/tags/ChangeNote
|
||||
title: $:/changenotes/5.4.0/#9097
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
A `destroy()` method has been added to the widget base class, called when a widget is removed from the tree. Plugin developers can override this method to clean up event listeners, timers, or other resources when a widget is destroyed.
|
||||
Adds a destroy method for widgets allowing for clean up of resources when a widget is removed.
|
||||
@@ -7,6 +7,12 @@ change-category: developer
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9103
|
||||
github-contributors: Arlen22
|
||||
|
||||
Commands and startup modules can now return a Promise (or be `async` functions). In both `synchronous: true` and `synchronous: false` modes, the resolved value is used as the return value.
|
||||
This adds support for async functions to commands and startups.
|
||||
|
||||
Note: In `synchronous: true` mode, a returned promise is now awaited rather than immediately logged to console. If it resolves to a truthy value, execution halts (unchanged behaviour); if it resolves to a falsy value, execution continues. Rejected promises are still reported as unhandled rejections.
|
||||
In both `synchronous: true` and `synchronous: false` mode, if you return a promise (manually or by using the async keyword), it will wait for the promise to resolve, and then proceed using the resolved value as the return value of the function.
|
||||
|
||||
Importantly, in `synchronous: false` mode, returning a promise will not change the callback behavior. So you can safely use an async function and still call the callback to continue execution.
|
||||
|
||||
Previously, in `synchronous: true` mode, returning a promise would have just logged the promise to console and halted execution. Now the promise will be awaited, and if the value is truthy, it will be logged to console and halt execution. If the promise resolves to a falsy value, execution will continue. This is the main breaking change, but since logging an opaque promise to console is the most useless of all error messages, this is unlikely to seriously break anything in practice. Throwing anything, truthy or not, will still stop execution (in `synchronous: true` mode).
|
||||
|
||||
This also does not add any error handling code. Rejected promises should still be logged to console as unhandled rejections just as uncaught exceptions are currently.
|
||||
@@ -3,5 +3,5 @@ changenote: $:/changenotes/5.4.0/#9119
|
||||
created: 20251114082949025
|
||||
modified: 20251114082949025
|
||||
tags: $:/tags/ImpactNote
|
||||
description: TiddlyWiki no longer works on old browsers that do not support the [[regular expression sticky flag|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/sticky]].
|
||||
description: Tiddlywiki no longer works on old browsers that doesn't support [[sticky flag|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/sticky]].
|
||||
impact-type: compatibility-break
|
||||
|
||||
@@ -6,5 +6,3 @@ change-type: performance
|
||||
change-category: internal
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9119
|
||||
github-contributors: Leilei332
|
||||
|
||||
The wikitext parser now uses the regular expression sticky flag (`y`) instead of the global flag (`g`), improving search performance during parsing.
|
||||
|
||||
@@ -3,7 +3,7 @@ changenote: $:/changenotes/5.4.0/#9131
|
||||
created: 20250901000000000
|
||||
modified: 20250901000000000
|
||||
tags: $:/tags/ImpactNote
|
||||
description: CSS rules targeting the `strike` element will no longer apply
|
||||
description: CSS rules using `strike` selector will broken
|
||||
impact-type: compatibility-break
|
||||
|
||||
Any custom CSS rules that target the `strike` element should be updated to target `s` instead.
|
||||
`strike` should be replaced by `s`.
|
||||
|
||||
@@ -6,5 +6,3 @@ change-type: deprecation
|
||||
change-category: internal
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9131
|
||||
github-contributors: Leilei332
|
||||
|
||||
The strikethrough wikitext syntax now renders an `<s>` element instead of the obsolete `<strike>` element, aligning with the HTML5 standard.
|
||||
|
||||
@@ -7,4 +7,4 @@ change-category: developer
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9135
|
||||
github-contributors: Arlen22
|
||||
|
||||
The ESLint configuration now checks for JavaScript syntax newer than ES2017, producing better error messages when unsupported language features are accidentally used in the codebase.
|
||||
Updates the eslint config to check for syntax newer than ES2017. This uses a plugin to check for newer syntax, for better error messages, and may need to be updated regularly along with eslint to catch the latest features.
|
||||
@@ -7,4 +7,4 @@ change-category: theme
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9148
|
||||
github-contributors: Leilei332
|
||||
|
||||
Core CSS classes have been updated to display correctly when TiddlyWiki is used with right-to-left or bidirectional scripts.
|
||||
Make some core classes display properly when Tiddlywiki's language uses bidirectional scripts.
|
||||
@@ -6,5 +6,3 @@ change-type: enhancement
|
||||
change-category: widget
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9154
|
||||
github-contributors: Leilei332
|
||||
|
||||
The ButtonWidget now supports all `aria-*` attributes directly, improving accessibility for custom button implementations.
|
||||
|
||||
@@ -7,4 +7,4 @@ change-category: widget
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9167
|
||||
github-contributors: Leilei332
|
||||
|
||||
The LinkWidget now supports all `aria-*` attributes directly, improving accessibility for custom link implementations.
|
||||
Allow LinkWidget to use all aria attributes directly.
|
||||
@@ -7,4 +7,6 @@ change-category: hackability
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9177
|
||||
github-contributors: kookma
|
||||
|
||||
A new `displayField` parameter has been added to the `list-links-draggable` and `list-tagged-draggable` macros, allowing you to specify which field (for example, `title`, `caption`, or any custom field) is shown when a tiddler is rendered in the list.
|
||||
A new input parameter, `displayField`, has been added to the `list-links-draggable` and `list-tagged-draggable` macros,
|
||||
allowing users to specify which field (e.g., title, caption, or any custom field) should be displayed when a tiddler is
|
||||
rendered via the draggable macro.
|
||||
|
||||
@@ -3,7 +3,7 @@ changenote: $:/changenotes/5.4.0/#9183
|
||||
created: 20250901000000000
|
||||
modified: 20250901000000000
|
||||
tags: $:/tags/ImpactNote
|
||||
description: Server-only components of the core have been moved into a new $:/core-server plugin
|
||||
description: Server components of the core have been moved into a new `$:/core-server` plugin
|
||||
impact-type: pluginisation
|
||||
|
||||
The `$:/core-server` plugin is included automatically when running the Node.js server — wikis do not need to include it explicitly.
|
||||
It is not necessary for wikis to explicitly include the `$:/core-server` plugin.
|
||||
@@ -7,4 +7,4 @@ change-category: internal
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9183 https://github.com/TiddlyWiki/TiddlyWiki5/pull/9288
|
||||
github-contributors: Jermolene Leilei332
|
||||
|
||||
Server-only code has been moved from the core into a new `$:/core-server` plugin, reducing the core plugin size by approximately 119KB (about 4.5%). This benefits all browser-based wikis where the server code was previously loaded unnecessarily.
|
||||
This change reduces the size of the core plugin by 119.3KB or about 4.5%.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
change-category: nodejs
|
||||
change-type: feature
|
||||
created: 20260120154012282
|
||||
description: Server routes can now declare a priority to control matching order
|
||||
description: Allows server routes to be prioritized via ordering.
|
||||
github-contributors: saqimtiaz
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9206
|
||||
modified: 20260120160656948
|
||||
@@ -10,4 +10,8 @@ tags: $:/tags/ChangeNote
|
||||
title: $:/changenotes/5.4.0/#9206
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Server route modules can now export an `info.priority` field to control the order in which routes are matched. Higher numeric values take precedence (like saver modules). Modules that omit `info.priority` default to 100, maintaining backward compatibility.
|
||||
This PR adds support for an info property to server route module exports. The info object may include a priority field, which determines the route’s order of precedence.
|
||||
|
||||
Priorities are numeric and follow a descending order: routes with higher priority values are processed first, similar to how saver modules are prioritized.
|
||||
|
||||
To maintain backward compatibility with existing code, any module that omits info or info.priority is assigned a default priority of 100. Core server routes have been updated to explicitly use this default value of 100.
|
||||
@@ -10,4 +10,4 @@ tags: $:/tags/ChangeNote
|
||||
title: $:/changenotes/5.4.0/#9214
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
A new ''Default focus field for existing tiddlers'' setting in ''Control Panel > Info > Basics'' lets you choose which field (title, text, or tags) receives focus when a tiddler's editor is opened.
|
||||
''ControlPanel -> Info -> Basics'' tab now contains a ''Default focus field for existing tiddlers'' setting, which allows users to select, title, text or tags to be auto-focused if the editor is opened.
|
||||
@@ -7,4 +7,4 @@ change-category: internal
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9235 https://github.com/TiddlyWiki/TiddlyWiki5/pull/9325
|
||||
github-contributors: Leilei332
|
||||
|
||||
Removed an unnecessary nested `<span class="tc-keyboard">` element from the core search field, cleaning up the rendered HTML structure.
|
||||
Removes nested `<span class="tc-keyboard">` element in core search field.
|
||||
|
||||
@@ -3,5 +3,5 @@ changenote: $:/changenotes/5.4.0/#9242
|
||||
created: 20250901000000000
|
||||
modified: 20250901000000000
|
||||
tags: $:/tags/ImpactNote
|
||||
description: CSS property macros with native CSS equivalents are now deprecated
|
||||
description: Currently all the CSS property macros are deprecated
|
||||
impact-type: deprecation
|
||||
|
||||
@@ -7,4 +7,4 @@ change-category: developer
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9242
|
||||
github-contributors: Leilei332
|
||||
|
||||
CSS property macros that have native CSS equivalents in the 2017 baseline (such as `<<box-shadow>>` and `<<transform-origin>>`) have been deprecated and moved to [[$:/core/macros/deprecated]]. Use standard CSS properties in their place.
|
||||
Mark CSS macros supported in 2017 baseline as deprecated. They are moved to [[$:/core/macros/deprecated]] now.
|
||||
@@ -6,5 +6,3 @@ change-type: enhancement
|
||||
change-category: theme
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9243 https://github.com/TiddlyWiki/TiddlyWiki5/pull/9625
|
||||
github-contributors: Leilei332
|
||||
|
||||
The Snow White theme has been updated to use standard CSS properties in place of the deprecated CSS property macros.
|
||||
|
||||
+2
-1
@@ -10,4 +10,5 @@ tags: $:/tags/ChangeNote
|
||||
title: $:/changenotes/5.4.0/#9254
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
The `list-links-draggable` macro now defaults to `currentTiddler` when no `tiddler` parameter is supplied, fixing a long-standing inconsistency with similar macros.
|
||||
* If macro `list-links-draggable` misses the tiddler parameter it points to `currentTiddler` variable by default now
|
||||
* Also discussed at [[Talk Tiddlywiki|https://talk.tiddlywiki.org/t/long-standing-bug-in-list-links-draggable-macro/8057]]
|
||||
@@ -1,7 +1,7 @@
|
||||
change-category: widget
|
||||
change-type: deprecation
|
||||
created: 20260120154533983
|
||||
description: Remove the deprecated events and actions-* attributes from the eventcatcher widget
|
||||
description: The deprecated events and actions-* atrributes for the eventcatcher widget have been removed.
|
||||
github-contributors: saqimtiaz
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9259
|
||||
modified: 20260120160236297
|
||||
@@ -10,4 +10,4 @@ tags: $:/tags/ChangeNote
|
||||
title: $:/changenotes/5.4.0/#9259
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
The previously-deprecated `events` and `actions-*` attributes of the `$eventcatcher` widget have been removed. Use the `on-*` attribute syntax instead.
|
||||
Deprecates and removes the `events` and `actions-*` attributes for the $eventcatcher widget.
|
||||
+2
-4
@@ -1,10 +1,8 @@
|
||||
changenote: $:/changenotes/5.4.0/#9259
|
||||
created: 20260120154817011
|
||||
description: The deprecated events and actions-* attributes have been removed from the eventcatcher widget
|
||||
description: Deprecated events and actons-* attributes from the eventcatcher widget
|
||||
impact-type: deprecation
|
||||
modified: 20260120154900978
|
||||
tags: $:/tags/ImpactNote
|
||||
title: $:/changenotes/5.4.0/#9259/impacts/deprecate-eventcatcher-attributes
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Any `$eventcatcher` widgets using the `events` or `actions-*` attributes must be updated to use the `on-*` attribute syntax.
|
||||
type: text/vnd.tiddlywiki
|
||||
@@ -1,7 +1,7 @@
|
||||
change-category: hackability
|
||||
change-type: feature
|
||||
created: 20260120154445701
|
||||
description: New info tiddlers report viewport and window dimensions, updated on resize
|
||||
description: Adds info tiddlers for viewport dimensions that are updated on window resize.
|
||||
github-contributors: saqimtiaz
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9260
|
||||
modified: 20260120160515462
|
||||
@@ -10,9 +10,9 @@ tags: $:/tags/ChangeNote
|
||||
title: $:/changenotes/5.4.0/#9260
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
New `$:/info/browser/window/...` tiddlers report the current viewport and window dimensions, and are updated automatically when the window is resized. This makes it easy to build responsive layouts in wikitext without custom JavaScript.
|
||||
Adds info tiddlers for viewport dimensions that are updated on window resize.
|
||||
|
||||
!! Available info tiddlers (example: main window and a user-created window with windowID my-window)
|
||||
!! Example: Main and a user-created window with windowID my-window
|
||||
|
||||
|Window | Info tiddler | Meaning |h
|
||||
|system/main |`$:/info/browser/window/system/main/outer/width` | Full browser window including chrome, tabs, toolbars |
|
||||
|
||||
@@ -6,5 +6,3 @@ change-type: deprecation
|
||||
change-category: widget
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9275
|
||||
github-contributors: Leilei332
|
||||
|
||||
The Internet Explorer compatibility workaround in the RangeWidget has been removed as IE is no longer supported.
|
||||
|
||||
@@ -7,4 +7,4 @@ change-category: developer
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9277
|
||||
github-contributors: kixam
|
||||
|
||||
The TiddlyWiki Node.js server now has an option to disable same-origin checking, allowing cross-origin requests. This is intended for advanced users who have a specific need for it and understand the security implications.
|
||||
Added an option to the TiddlyWiki5 server to enable CORS (ie. don't check `same-origin`). It is meant for advanced users, do not use it unless you understand the full consequences.
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
title: $:/changenotes/5.4.0/#9280
|
||||
description: Fixed :reverse suffix being ignored by version sort filter
|
||||
tags: $:/tags/ChangeNote
|
||||
release: 5.4.0
|
||||
change-type: bugfix
|
||||
change-category: filters
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9280
|
||||
github-contributors: Flibbles
|
||||
|
||||
When using the version suffix with the sort filter, the reverse flag had no effect. Fixed.
|
||||
@@ -10,4 +10,8 @@ tags: $:/tags/ChangeNote
|
||||
title: $:/changenotes/5.4.0/#9281
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
The new `th-dom-rendering-element` hook is called immediately before each DOM node is inserted into the document. Plugin developers can use it to attach debug information to rendered elements.
|
||||
This PR adds:
|
||||
|
||||
* `th-dom-rendering-element` hook, that is called right before the DOM node is inserted into the DOM
|
||||
* It allows plugins to add debug info
|
||||
* An example using an experimental hook can be found at: [[#9222|https://github.com/TiddlyWiki/TiddlyWiki5/pull/9222]]
|
||||
@@ -7,4 +7,4 @@ change-category: internal
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9287 https://github.com/TiddlyWiki/TiddlyWiki5/pull/9657
|
||||
github-contributors: Jermolene
|
||||
|
||||
Release notes are now composed of individual change note tiddlers, allowing changes to be filtered and grouped. For example, it is now possible to show all breaking changes introduced between two releases.
|
||||
Doing so enables us to filter and group changes. For example, we could show all the breaking changes between two releases.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
change-category: developer
|
||||
change-type: bugfix
|
||||
created: 20251115011834670
|
||||
description: Prevent modules in draft tiddlers from being executed
|
||||
description: Modules in draft tidders should not be executed
|
||||
github-contributors: pmario
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9293
|
||||
modified: 20251115012143765
|
||||
@@ -10,4 +10,10 @@ tags: $:/tags/ChangeNote
|
||||
title: $:/changenotes/5.4.0/#9293
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Module tiddlers in draft state are no longer executed, preventing unintended side-effects while editing. Draft modules sourced from plugins are also blocked and reported.
|
||||
Modules in draft tiddlers should not be executed.
|
||||
|
||||
This PR:
|
||||
|
||||
* Checks for drafts in `$tw.Wiki.prototype.defineTiddlerModules`
|
||||
* It also reports and blocks draft modules that come from plugins
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@ change-category: plugin
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9295
|
||||
github-contributors: cdruan
|
||||
|
||||
* Fixed the Markdown parser not respecting the `parseAsInline` option
|
||||
* Fixed incorrect parsing of macro calls when arguments contain a `>` character
|
||||
* Debug logging can now be enabled with the `$tw.log.MARKDOWN` flag
|
||||
* Fix markdown parser to respect ''parseAsInline'' option [[#8917|https://github.com/TiddlyWiki/TiddlyWiki5/pull/8917]].
|
||||
|
||||
* Fix improper parsing of macrocall, whenenver args contain `>` character.
|
||||
|
||||
* Use ''$tw.log.MARKDOWN'' flag to enable debug messages.
|
||||
@@ -1,10 +0,0 @@
|
||||
title: $:/changenotes/5.4.0/#9297
|
||||
description: Better support for downloading binary image tiddlers
|
||||
tags: $:/tags/ChangeNote
|
||||
release: 5.4.0
|
||||
change-type: enhancement
|
||||
change-category: usability
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9297
|
||||
github-contributors: Flibbles
|
||||
|
||||
Binary image tiddlers can now be downloaded by the browser in a format it correctly recognises. Previously, all tiddlers were converted to blobs before downloading, which prevented browsers from identifying binary image data properly.
|
||||
@@ -7,4 +7,7 @@ change-category: internal
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9305
|
||||
github-contributors: yaisog
|
||||
|
||||
Fixed a bug where a module tiddler with a different title from a shadow module but the same export type could be overwritten by that shadow. Tiddlers are now registered after shadow modules, so user tiddlers correctly take precedence over shadows with the same export.
|
||||
Tiddlers were previously processed before shadows during module registration. The shadow modules registration algorithm only checked for a matching title to prevent overwriting, but a differently named tiddler with the same exports would be overwritten by a shadow. This change swaps the order of $tw.wiki.defineTiddlerModules() and $tw.wiki.defineShadowModules() in boot.js, so that tiddlers are processed after shadows and can therefore override them.
|
||||
|
||||
Each group (tiddlers or shadows) is sorted alphabetically, so plugin shadows would previously correctly overwrite core shadows (assuming their name starts with $:/plugins/), which remains unchanged. This change only affects module tiddlers that have the same export as a shadow, but a different name.
|
||||
|
||||
|
||||
@@ -7,4 +7,4 @@ change-category: hackability
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9313
|
||||
github-contributors: Leilei332
|
||||
|
||||
The `mask-closable` attribute of the ModalWidget now defaults to `yes`, so clicking outside a modal will close it unless explicitly overridden.
|
||||
|
||||
|
||||
@@ -3,6 +3,6 @@ changenote: $:/changenotes/5.4.0/#9316
|
||||
created: 20251115032340986
|
||||
modified: 20251115032340986
|
||||
tags: $:/tags/ImpactNote
|
||||
description: SVG icons now inherit the text colour of their parent element instead of using a hardcoded colour
|
||||
description: SVG icons will inherit colors instead of using `#333333` if its parent element has `color` property set
|
||||
impact-type: compatibility-break
|
||||
|
||||
|
||||
@@ -7,4 +7,4 @@ change-category: theme
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9316 https://github.com/TiddlyWiki/TiddlyWiki5/pull/9568
|
||||
github-contributors: Leilei332
|
||||
|
||||
Hardcoded `fill` attributes on SVG icons have been replaced with a `fill: currentColor` CSS rule. SVG icons now inherit their colour from the surrounding text, making theme customisation and dark mode easier to support.
|
||||
Replaces hardcoded `fill` attributes with one `fill: currentColor` rule to solve the compatibility issues of migrating to lucide icons.
|
||||
@@ -10,4 +10,4 @@ tags: $:/tags/ChangeNote
|
||||
title: $:/changenotes/5.4.0/#9317
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
The `**/output/**` directory is now excluded from ESLint linting, preventing spurious warnings on built output files.
|
||||
This PR adds the `**/output/**` directory to eslint ignore configuration
|
||||
@@ -7,4 +7,4 @@ change-category: developer
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9328
|
||||
github-contributors: Leilei332
|
||||
|
||||
Migrated deprecated ESLint rules (except Node.js-related ones) to their current equivalents. Code formatting rules are now handled by `@stylistic/eslint-plugin`.
|
||||
Migrate eslint deprecated rules (except for nodejs related rules). Format related rules are replaced by `@stylistic/eslint-plugin`.
|
||||
@@ -1,5 +1,5 @@
|
||||
title: $:/changenotes/5.4.0/#9333
|
||||
description: Expose TiddlyWiki palette colours and theme settings as CSS custom properties
|
||||
description: Intergrate Tiddlywiki palette colors and settings to custom CSS properties
|
||||
release: 5.4.0
|
||||
tags: $:/tags/ChangeNote
|
||||
change-type: feature
|
||||
@@ -7,9 +7,7 @@ change-category: developer
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9333
|
||||
github-contributors: Leilei332
|
||||
|
||||
TiddlyWiki palette colours and theme settings are now exposed as standard CSS custom properties, making it possible to write stylesheets in plain CSS without wikitext. Use `--tpc-*` for palette colours and `--tp-*` for theme settings. See [[Writing stylesheets in vanilla CSS]] and [[Core CSS Variables]] for details.
|
||||
|
||||
For example:
|
||||
Adds `--tpc-*` (for palettes colors) and `--tp-*` (for CSS settings) [[custom CSS properties|https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/--*]] to allow writing stylesheets with vanilla CSS, for example:
|
||||
|
||||
```
|
||||
/* Old way to get a palette color, which requires using wikitext */
|
||||
@@ -45,3 +43,7 @@ For example:
|
||||
}
|
||||
```
|
||||
|
||||
See:
|
||||
|
||||
* [[Writing stylesheets in vanilla CSS]] and [[Core CSS Variables]] for details.
|
||||
* https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/var
|
||||
@@ -3,5 +3,5 @@ changenote: $:/changenotes/5.4.0/#9337
|
||||
created: 20251112152513384
|
||||
modified: 20251209160312626
|
||||
tags: $:/tags/ImpactNote
|
||||
description: Some math filter operators now return an empty list when the input list is empty
|
||||
description: filter output changes for some math filter operators when input list is empty
|
||||
impact-type: compatibility-break
|
||||
@@ -7,7 +7,7 @@ change-category: filters
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9337
|
||||
github-contributors: yaisog
|
||||
|
||||
The following math filter operators now return an empty list when given an empty input list, rather than returning a default value. Filters that relied on the previous behaviour may need to be updated:
|
||||
The following math operators are changed to output an empty list when the input list is empty:
|
||||
|
||||
* sum[]
|
||||
* product[]
|
||||
|
||||
@@ -7,4 +7,6 @@ change-category: nodejs
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9341
|
||||
github-contributors: cdruan
|
||||
|
||||
Fixed a crash when loading wikis that include very large files via `tiddlywiki.files`. Files with a `_canonical_uri` field are no longer read into memory, and files that exceed the size limit are skipped gracefully.
|
||||
* skip reading file content when `_canonical_uri` is present
|
||||
|
||||
* skip loading file when file size is too large
|
||||
@@ -6,5 +6,3 @@ change-type: enhancement
|
||||
change-category: usability
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9347
|
||||
github-contributors: Leilei332
|
||||
|
||||
Accessibility improvements to the theme/language/palette switcher UI, including better ARIA roles and keyboard navigation support.
|
||||
|
||||
@@ -7,4 +7,4 @@ change-category: usability
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9348
|
||||
github-contributors: Leilei332
|
||||
|
||||
The tabs macro now uses the appropriate `tablist`, `tab`, and `tabpanel` ARIA roles, making tab navigation accessible to screen readers. The ButtonWidget also gains a `selectedAria` attribute to indicate the selected state.
|
||||
Adds `tablist`, `tabpanel` and `tab` roles to the tabs macro to improve its accessibility. It also adds a `selectedAria` attribute to the button widget.
|
||||
@@ -3,6 +3,6 @@ changenote: $:/changenotes/5.4.0/#9350
|
||||
created: 20251116030650076
|
||||
modified: 20251116030650076
|
||||
tags: $:/tags/ImpactNote
|
||||
description: The removed deprecated plugins are no longer available in the official plugin library
|
||||
description: The purged deprecated plugins are no longer availabe in the official plugin library
|
||||
impact-type: deprecation
|
||||
|
||||
|
||||
@@ -7,4 +7,4 @@ change-category: internal
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9358
|
||||
github-contributors: cdruan
|
||||
|
||||
Removed redundant code from the `format/json` filter module, reducing code size and improving maintainability.
|
||||
Remove redundant code in `core/modules/filters/format/json.js`.
|
||||
|
||||
@@ -7,4 +7,5 @@ change-category: filters
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9390
|
||||
github-contributors: SmartDever02
|
||||
|
||||
The new `jsondelete` operator deletes properties from JSON strings. It uses the same path-resolution logic as `jsonset`, and supports deleting both object properties and array elements (including negative indices counted from the end).
|
||||
Added the <<.op jsondelete>> operator for deleting properties from JSON strings. The operator uses the same code path as <<.op jsonset>> to locate the correct part of the object, ensuring consistency between setting and deleting operations. It supports deleting both object properties and array elements, with support for negative array indexes counted from the end.
|
||||
|
||||
|
||||
@@ -7,5 +7,5 @@ change-category: translation
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9375 https://github.com/TiddlyWiki/TiddlyWiki5/pull/9576
|
||||
github-contributors: BramChen
|
||||
|
||||
* Updated camel-case hint text for Chinese translations
|
||||
* Added ARIA message strings for alerts
|
||||
* change camel-case hint text for chinese translations
|
||||
* add alerts ARIA message
|
||||
@@ -0,0 +1,17 @@
|
||||
title: $:/changenotes/5.4.0/#9397
|
||||
description: Fix critical freelinks bugs: first character loss and false positive matches in v5.4.0
|
||||
release: 5.4.0
|
||||
tags: $:/tags/ChangeNote
|
||||
change-type: bugfix
|
||||
change-category: plugin
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9084 https://github.com/TiddlyWiki/TiddlyWiki5/pull/9397
|
||||
github-contributors: s793016
|
||||
|
||||
This note addresses two major bugs introduced in the Freelinks plugin with the v5.4.0 release:
|
||||
|
||||
Fixes:
|
||||
* First Character Loss: The first character of a matched word would incorrectly disappear (e.g., "The" became "he"). This was fixed by correctly timing the filtering of the current tiddler's title during match validation, ensuring proper substring handling.
|
||||
* False Positive Matches: Unrelated words (like "it is" or "Choose") would incorrectly link to a tiddler title. This was resolved by fixing wrong output merging in the Aho-Corasick failure-link handling, eliminating spurious matches from intermediate nodes, and adding cycle detection.
|
||||
|
||||
Impact:
|
||||
* Significantly improved correctness and reliability of automatic linking for all users, especially in multilingual and large wikis.
|
||||
@@ -0,0 +1,9 @@
|
||||
title: $:/changenotes/5.4.0/#9400/impacts/collator
|
||||
changenote: $:/changenotes/5.4.0/#9400
|
||||
created: 20251114102355243
|
||||
modified: 20251114102355243
|
||||
tags: $:/tags/ImpactNote
|
||||
description: Tiddlywiki no longer works on browsers that doesn't support [[Intl.Collator|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Collator]]
|
||||
impact-type: compatibility-break
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
title: $:/changenotes/5.4.0/#9400
|
||||
description: Add locale support for sort operators
|
||||
release: 5.4.0
|
||||
tags: $:/tags/ChangeNote
|
||||
change-type: feature
|
||||
change-category: filters
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9400
|
||||
github-contributors: Leilei332
|
||||
|
||||
Add a new parameter for `sort`, `nsort`, `sortan`, `sortcs` and `nsortcs` to support sorting with a custom locale.
|
||||
@@ -7,4 +7,4 @@ change-category: developer
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9401
|
||||
github-contributors: andrewgoz
|
||||
|
||||
`$tw.utils.repackPlugin()` now sets the standard `created` and `modified` timestamp fields when repacking a plugin tiddler, ensuring the tiddler's metadata is consistent after repacking.
|
||||
This PR modifies `$tw.utils.repackPlugin()` so that it adds the standard tiddler modification fields to plugin tiddlers when they are repacked.
|
||||
|
||||
@@ -7,4 +7,4 @@ change-category: internal
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9422
|
||||
github-contributors: Leilei332
|
||||
|
||||
Legacy Opera and Microsoft browser-detection prefixes have been removed from the browser utility module, as those browsers are no longer supported.
|
||||
Remove Opera & Microsoft prefix in `$:/core/modules/utils/dom/browser.js`.
|
||||
|
||||
@@ -7,5 +7,5 @@ change-category: widget
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/issues/9427
|
||||
github-contributors: linonetwo
|
||||
|
||||
Fixed a bug in the RevealWidget, DroppableWidget, EventcatcherWidget, and KeyboardWidget where an empty additional class attribute would produce a leading space in the rendered HTML `class` attribute.
|
||||
Fixed a bug in the RevealWidget, DroppableWidget, EventcatcherWidget, and KeyboardWidget where an empty class attribute would generate a leading space in the rendered HTML. By trimming the resulting class string, we shorten the HTML and avoid potential confusion.
|
||||
|
||||
|
||||
@@ -7,4 +7,4 @@ change-category: internal
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9218 https://github.com/TiddlyWiki/TiddlyWiki5/pull/9439
|
||||
github-contributors: Leilei332
|
||||
|
||||
Fixed a bug where raw markup shadow tiddlers from `$:/core` were not included when building the external-core edition HTML output.
|
||||
Fix the problem that tiddlywiki's raw markup shadow tiddlers in `$:/core` is not included in HTML.
|
||||
@@ -7,4 +7,4 @@ change-category: developer
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9445
|
||||
github-contributors: EvidentlyCube
|
||||
|
||||
The TSV parser previously only recognised the `text/tab-delimited-values` MIME type. It now also accepts the more widely-used `text/tab-separated-values`, improving compatibility with files generated by spreadsheet applications.
|
||||
CSV parser used to support only the very obscure `text/tab-delimited-values` mimetype so this change adds the more common `text/tab-separated-values`.
|
||||
@@ -7,4 +7,4 @@ change-category: widget
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9452
|
||||
github-contributors: pmario
|
||||
|
||||
The new `editcost` parameter lets you tune the trade-off between the number of edits and the length of the diff output. See [[DiffTextWidget]] for details and examples.
|
||||
See: [[DiffTextWidget]] -> Attributes and Examples
|
||||
@@ -7,4 +7,4 @@ change-category: widget
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9454
|
||||
github-contributors: pmario
|
||||
|
||||
The `rows` parameter of the [[EditTextWidget]] now takes precedence over any other height settings, and the CodeMirror editor plugin also respects this parameter.
|
||||
[[Edit-text widget|EditTextWidget]] rows parameter takes precedence and ~CodeMirror editor accepts rows parameter now
|
||||
|
||||
@@ -7,7 +7,7 @@ change-category: usability
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9465
|
||||
github-contributors: linonetwo
|
||||
|
||||
The import UI now shows file-type-specific options only when the relevant file types are included in the import. Plugin developers can target their import options to specific MIME types using a `condition` field, for example:
|
||||
The import UI now displays import options based on the file types being imported. Import options are only shown when relevant files are detected, an example is:
|
||||
|
||||
```tid
|
||||
tags: $:/tags/ImportOptions
|
||||
|
||||
@@ -7,7 +7,7 @@ change-category: hackability
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9466
|
||||
github-contributors: linonetwo
|
||||
|
||||
ViewToolbar buttons can now include a `condition` filter field to show them only for specific tiddler types, consistent with how `$:/tags/Exporter` and `$:/tags/EditorTools` already work. For example:
|
||||
ViewToolbar buttons can now be conditionally displayed based on the currentTiddler using a `condition` field. Similar to how `$:/tags/Exporter` and `$:/tags/EditorTools` already have. An example would be:
|
||||
|
||||
```tid
|
||||
tags: $:/tags/ViewToolbar
|
||||
|
||||
@@ -7,4 +7,4 @@ change-category: widget
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9489
|
||||
github-contributors: yaisog
|
||||
|
||||
Fixed a significant slowdown in the ActionLogWidget that was introduced alongside the multi-valued variables feature (#8972).
|
||||
PR #8972 introduced a change in the ActionLogWidget that could lead to a significant slowdown, which has been fixed.
|
||||
|
||||
@@ -7,4 +7,4 @@ change-category: widget
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9494
|
||||
github-contributors: yaisog
|
||||
|
||||
Fixed a bug where the LetWidget would not set a variable if its value came from a filtered transclusion that returned an empty result.
|
||||
This PR corrects a bug where the LetWidget did not set variables if their value was the empty output of a filtered transclusion.
|
||||
|
||||
@@ -7,4 +7,4 @@ change-category: internal
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9495
|
||||
github-contributors: yaisog
|
||||
|
||||
Functions that return cached tiddler lists now return shallow copies, preventing external code from accidentally mutating the internal cache.
|
||||
Functions returning cached tiddler lists now return shallow copies to prevent external code from inadvertently mutating the cache
|
||||
|
||||
@@ -7,4 +7,4 @@ change-category: internal
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9582
|
||||
github-contributors: yaisog
|
||||
|
||||
Refactored the `EditTemplate fields.tid` template to improve code maintainability and readability.
|
||||
Refactored the EditTemplate fields.tid template to improve code maintainability and readability
|
||||
@@ -10,4 +10,4 @@ github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9585
|
||||
github-contributors: BurningTreeC
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
The `button-classes` field of Editor toolbar buttons can now contain a filter expression, allowing CSS classes to be assigned dynamically based on the current tiddler or other state.
|
||||
This change lets you define the button-classes of Editor toolbar buttons as filters for flexible styling
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
change-category: filters
|
||||
change-type: bugfix
|
||||
created: 20260120145005984
|
||||
description: Fix substitute operator not resolving functions with access to filter-run variables
|
||||
description: Fixes a bug with the resolution of functions within the substitute operator, where the function did not have access to variables set in the filter run.
|
||||
github-contributors: saqimtiaz
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9598
|
||||
modified: 20260120145321774
|
||||
release: 5.4.0
|
||||
tags: $:/tags/ChangeNote
|
||||
tags:
|
||||
title: $:/changenotes/5.4.0/#9598
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Fixed a bug where functions called within the `substitute` filter operator could not access variables that had been set in the same filter run.
|
||||
type: text/vnd.tiddlywiki
|
||||
@@ -7,4 +7,4 @@ change-category: internal
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9600
|
||||
github-contributors: yaisog
|
||||
|
||||
Pressing Ctrl-Enter (or the configured `input-accept-variant` keyboard shortcut) in the tag name input field now saves the tiddler, consistent with behaviour in the title and text fields.
|
||||
The tag name input now calls `<<save-tiddler-actions>>` from the EditTemplate when Ctrl-Enter (or whichever key is assigned to input-accept-variant) is pressed.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
change-category: widget
|
||||
change-type: enhancement
|
||||
created: 20260125124838970
|
||||
description: Add pointer capture, enable/disable control, and eventJSON variable to EventCatcherWidget
|
||||
description: Adds support for pointer capture and enabling/disabling to the EventCatcherWidget.
|
||||
github-contributors: saqimtiaz
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9609
|
||||
modified: 20260125202924515
|
||||
@@ -10,8 +10,15 @@ tags: $:/tags/ChangeNote
|
||||
title: $:/changenotes/5.4.0/#9609
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
The [[EventCatcherWidget]] has been enhanced with three new capabilities:
|
||||
The [[EventCatcher|EventCatcherWidget]] widget has been updated to provide:
|
||||
|
||||
* ''Pointer capture'': An optional mode that captures `pointermove`, `pointerup`, and `pointercancel` events even when the pointer moves outside the widget's DOM boundary, improving reliability for drag interactions
|
||||
* ''Enable/disable control'': A new attribute lets you temporarily disable event handling at runtime without removing the widget from the DOM
|
||||
* ''`eventJSON` variable'': Event properties are now accessible in actions via an `eventJSON` variable. The older `event-detail*` variables have been deprecated in its favour
|
||||
1. ''Optional Pointer Capture Support''
|
||||
Adds native pointer capture handling to improve pointer event reliability and tracking outside the widget DOM nodes boundaries. When enabled, pointer events such as `pointermove`, `pointerup`, and `pointercancel` are correctly captured and routed to the widget, even if the pointer moves off-screen or outside the element.
|
||||
The pointer capture logic supports two modes of event listener attachment for better performance and control.
|
||||
|
||||
2. ''Widget Enable/Disable Control''
|
||||
Adds a new attribute to enable or disable the ~EventCatcher widget at runtime. This allows users to temporarily deactivate event handling without removing the widget or disrupting the DOM structure, enhancing flexibility for dynamic UIs.
|
||||
|
||||
3. Access to event properties via the variable `eventJSON` in actions.
|
||||
|
||||
4. Deprecation of the error-prone event-detail* variables in favour of using the new `eventJSON` variable.
|
||||
+4
-4
@@ -1,13 +1,13 @@
|
||||
[
|
||||
{
|
||||
"created": "20260125202948362",
|
||||
"text": "Any actions in `$eventcatcher` widgets that use `event-detail*` variables must be updated to use the new `eventJSON` variable instead.",
|
||||
"text": "",
|
||||
"title": "$:/changenotes/5.4.0/#9609/impacts/event detail variables in eventcatcher",
|
||||
"modified": "20260125203132149",
|
||||
"tags": "$:/tags/ImpactNote",
|
||||
"type": "text/vnd.tiddlywiki",
|
||||
"changenote": "$:/changenotes/5.4.0/#9609",
|
||||
"description": "The event-detail* variables in the eventcatcher widget have been deprecated in favour of the new eventJSON variable",
|
||||
"impact-type": "compatibility-break"
|
||||
"description": "`event-detail*` variables have been removed in favour of the new `eventJSON` variable",
|
||||
"impact-type": "compatibility-break "
|
||||
}
|
||||
]
|
||||
]
|
||||
@@ -10,4 +10,5 @@ tags: $:/tags/ChangeNote
|
||||
title: $:/changenotes/5.4.0/#9612
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
The [[Table-of-Contents Macros]] now support a `level` parameter to limit the depth of the tree shown. When a level limit is set, entries with children display a level indicator (the core "+" icon by default) to indicate there are deeper levels not shown.
|
||||
* The [[toc-macro|Table-of-Contents Macros]] now supports a ''level'' parameter, that allows us to limit the [[toc-levels|Table-of-Contents Macros (Examples)]], that are listed.
|
||||
* If the level parameter is active, levels, which have children will show a level indicator at the front. By default it uses the core "+" icon
|
||||
|
||||
+1
-2
@@ -1,7 +1,7 @@
|
||||
change-category: widget
|
||||
change-type: bugfix
|
||||
created: 20260125195754439
|
||||
description: Fix SelectWidget not refreshing when the default attribute value changes
|
||||
description: Refresh widget if "default" parameter input value is changed
|
||||
github-contributors: pmario
|
||||
github-links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9617
|
||||
modified: 20260125195754439
|
||||
@@ -10,4 +10,3 @@ tags: $:/tags/ChangeNote
|
||||
title: $:/changenotes/5.4.0/#9617
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Fixed a bug where the SelectWidget would not refresh when the value of its `default` attribute changed, causing the displayed selection to become out of sync.
|
||||
|
||||
+3
-4
@@ -10,8 +10,7 @@ tags: $:/tags/ChangeNote
|
||||
title: $:/changenotes/5.4.0/#9621
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
The LinkWidget and the `list-links-draggable` and `list-tagged-draggable` macros now support `startactions` and `endactions` attributes, allowing you to trigger actions when a drag operation starts or ends. See the updated documentation for each:
|
||||
* [[LinkWidget]] new Attributes and Action Variables section
|
||||
* [[list-links-draggable Macro]] new Attributes
|
||||
* [[list-tagged-draggable Macro]] new Attributes
|
||||
|
||||
* [[LinkWidget]] — Attributes and Action Variables section
|
||||
* [[list-links-draggable Macro]] — Attributes
|
||||
* [[list-tagged-draggable Macro]] — Attributes
|
||||
|
||||
@@ -6,4 +6,6 @@ change-type: enhancement
|
||||
change-category: usability
|
||||
github-links: https://github.com/Jermolene/TiddlyWiki5/pull/9634 https://github.com/Jermolene/TiddlyWiki5/pull/9643
|
||||
github-contributors: DesignThinkerer
|
||||
The Tiddler Info panel's ''Advanced'' tab now displays the cascade templates and filters used to render the current tiddler, making it much easier to understand how a tiddler is being displayed.
|
||||
|
||||
|
||||
The Tiddler Info panel's `Advanced` tab now displays the templates and filters used to render the current tiddler.
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user