1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2026-01-25 04:14:40 +00:00

Compare commits

...

25 Commits

Author SHA1 Message Date
Saq Imtiaz
bd050521ff Create eslint.yml 2025-10-02 22:30:06 +02:00
Mario Pietsch
87ba87bdd2 Set AES strength to 256 bit (#8249)
* Set AES strength to 256 bit

* Update Encryption tiddler to AES 256
2025-10-02 11:49:45 +01:00
Leilei332
619bdfcab5 Reimplement regexp sticky flag (#9119) 2025-10-02 11:42:30 +01:00
Arlen Beiler
f8170cd50a [5.4.0] Update eslint target to 2017 and do initial fixes (#9135)
* eslint manual fixes
- update eslint to 2017
- add self to forbidden globals
- fix a few unfixable bugs caught by eslint
- convert newer features in twitter-archivist

* add eslint plugin to forbid features

* import changes from @saqimtiaz

* add package.json changes
2025-10-01 15:08:00 +01:00
Jeremy Ruston
5389dc0fa7 Merge branch 'tiddlywiki-com' 2025-09-25 16:48:39 +01:00
Jeremy Ruston
810ac42810 Release notes: show current banner for the current release 2025-09-14 14:36:31 +01:00
Jeremy Ruston
88d3f69a3b Merge branch 'tiddlywiki-com' 2025-09-14 14:32:25 +01:00
Jeremy Ruston
e956bb32e9 Extend release note mechanism to allow multiple github commits/prs for a change
Also added @Leilei332's credit for #9288
2025-09-14 11:43:22 +01:00
Leilei332
af63a3b920 Further improvements for offloading server components (#9288)
* Move edition-info and repository to core-server

* Update readme

* Set platform to server for filesystem plugin

* Move startup/command.js
2025-09-14 11:21:42 +01:00
Jeremy Ruston
e4fb47ee76 Add change note for #9183 2025-09-12 17:45:13 +01:00
Jeremy Ruston
7944f42467 [v5.4.0] Offload server components from browser builds of TiddlyWiki (#9183)
* Move Node.js specific files out of the core plugin

* Package server files as new $:/core-server plugin

* Missed commander.js

* Fix crash in browser

* Extend server-only mechanism to be usable by other plugins

* in

* Revert "Extend server-only mechanism to be usable by other plugins"

This reverts commit 3faf503073.

* Revert "in"

This reverts commit b80213128f.

* Reapply "Extend server-only mechanism to be usable by other plugins"

This reverts commit c6c83bc18b.

* Fix test failure

* Move filesystem utilities into core-server

* Move old-style release notes out of the way

* Move the 5.4.0 release note into the right place

* Revert "Move the 5.4.0 release note into the right place"

This reverts commit 3f5c2bfba3.

* Revert "Move old-style release notes out of the way"

This reverts commit ee16e48a43.
2025-09-12 15:21:34 +01:00
Jeremy Ruston
578c09e0ce Remove change note for #9183 until it is merged 2025-09-12 15:19:28 +01:00
Jeremy Ruston
ffb0a2fde2 Merge branch 'tiddlywiki-com' 2025-09-12 15:15:58 +01:00
Jeremy Ruston
c5a80a1984 [v5.4.0] New release note architecture (#9287)
* Initial Commit

* Move the old release notes out of the way

* A self-referential change note

* Fix procedure name

* Rationalise link badges in old release notes

Some of them were hardly used, and getting rid of them makes it easier to see what badges we need in the new system

* Update 5.4.0 and 5.3.8 to use the new format
2025-09-12 15:13:07 +01:00
Jeremy Ruston
3592a0be67 Merge branch 'tiddlywiki-com' 2025-09-09 21:15:51 +01:00
Jeremy Ruston
3c45c17b45 Merge branch 'tiddlywiki-com' 2025-09-02 18:02:33 +01:00
Jeremy Ruston
1a81f8ee06 Merge branch 'tiddlywiki-com' 2025-09-01 16:54:26 +01:00
Jeremy Ruston
ae970fde02 Merge branch 'tiddlywiki-com' 2025-09-01 12:13:46 +01:00
Jeremy Ruston
e38d7960a9 Merge branch 'tiddlywiki-com' 2025-09-01 10:44:05 +01:00
Jeremy Ruston
2246ffdc05 Merge branch 'tiddlywiki-com' 2025-08-29 12:09:23 +01:00
Jeremy Ruston
dba34f3323 Merge branch 'tiddlywiki-com' 2025-08-26 17:50:30 +01:00
Jeremy Ruston
617394ff08 Merge branch 'tiddlywiki-com' 2025-08-21 11:32:36 +01:00
Jeremy Ruston
373eec45cd Add final batch of survey responses 2025-08-19 10:40:18 +01:00
Jeremy Ruston
38462d4464 Merge branch 'tiddlywiki-com' 2025-08-07 19:16:55 +01:00
Jeremy Ruston
b2656c82dd Preparing for v5.4.0 2025-08-07 09:33:55 +01:00
149 changed files with 563 additions and 205 deletions

43
.github/workflows/eslint.yml vendored Normal file
View File

@@ -0,0 +1,43 @@
name: ESLint
on:
pull_request:
types: [opened, synchronize, reopened]
push:
branches:
- master
workflow_dispatch:
concurrency:
group: lint-${{ github.event.pull_request.number || github.ref_name }}
cancel-in-progress: true
permissions:
contents: read
# Needed for GitHub Checks API
checks: write
jobs:
eslint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies
run: npm install --include=dev
- name: Run ESLint with reviewdog (GitHub Checks)
uses: reviewdog/action-eslint@v1
with:
eslint_flags: '.'
reporter: github-pr-check
fail_level: error
level: error
tool_name: ESLint PR code

View File

@@ -5,7 +5,7 @@
# Default to the current version number for building the plugin library
if [ -z "$TW5_BUILD_VERSION" ]; then
TW5_BUILD_VERSION=v5.3.8
TW5_BUILD_VERSION=v5.4.0
fi
echo "Using TW5_BUILD_VERSION as [$TW5_BUILD_VERSION]"

View File

@@ -799,12 +799,13 @@ the password, and to encrypt/decrypt a block of text
$tw.utils.Crypto = function() {
var sjcl = $tw.node ? (global.sjcl || require("./sjcl.js")) : window.sjcl,
currentPassword = null,
callSjcl = function(method,inputText,password) {
callSjcl = function(method,inputText,password,options) {
options = options || {};
password = password || currentPassword;
var outputText;
try {
if(password) {
outputText = sjcl[method](password,inputText);
outputText = sjcl[method](password,inputText,options);
}
} catch(ex) {
console.log("Crypto error:" + ex);
@@ -830,7 +831,8 @@ $tw.utils.Crypto = function() {
return !!currentPassword;
}
this.encrypt = function(text,password) {
return callSjcl("encrypt",text,password);
// set default ks:256 -- see: http://bitwiseshiftleft.github.io/sjcl/doc/convenience.js.html
return callSjcl("encrypt",text,password,{v:1,iter:10000,ks:256,ts:64,mode:"ccm",adata:"",cipher:"aes"});
};
this.decrypt = function(text,password) {
return callSjcl("decrypt",text,password);
@@ -1433,7 +1435,7 @@ $tw.Wiki = function(options) {
checkTiddler = function(tiddler,title) {
if(tiddler && tiddler.fields.type === "application/json" && tiddler.fields["plugin-type"] && (!pluginType || tiddler.fields["plugin-type"] === pluginType)) {
var disablingTiddler = self.getTiddler("$:/config/Plugins/Disabled/" + title);
if(title === "$:/core" || !disablingTiddler || (disablingTiddler.fields.text || "").trim() !== "yes") {
if(title === "$:/core" || title === "$:/core-server" || !disablingTiddler || (disablingTiddler.fields.text || "").trim() !== "yes") {
self.unregisterPluginTiddlers(null,[title]); // Unregister the plugin if it's already registered
pluginTiddlers.push(tiddler);
registeredTitles.push(tiddler.fields.title);
@@ -2350,6 +2352,7 @@ $tw.loadTiddlersNode = function() {
});
// Load the core tiddlers
$tw.wiki.addTiddler($tw.loadPluginFolder($tw.boot.corePath));
$tw.wiki.addTiddler($tw.loadPluginFolder($tw.boot.coreServerPath));
// Load any extra plugins
$tw.utils.each($tw.boot.extraPlugins,function(name) {
if(name.charAt(0) === "+") { // Relative path to plugin
@@ -2423,6 +2426,7 @@ $tw.boot.initStartup = function(options) {
// System paths and filenames
$tw.boot.bootPath = options.bootPath || path.dirname(module.filename);
$tw.boot.corePath = path.resolve($tw.boot.bootPath,"../core");
$tw.boot.coreServerPath = path.resolve($tw.boot.bootPath,"../core-server");
// If there's no arguments then default to `--help`
if($tw.boot.argv.length === 0) {
$tw.boot.argv = ["--help"];

View File

@@ -76,6 +76,7 @@ WikiFolderMaker.prototype.tiddlersToIgnore = [
"$:/boot/boot.js",
"$:/boot/bootprefix.js",
"$:/core",
"$:/core-server",
"$:/library/sjcl.js",
"$:/temp/info-plugin"
];

11
core-server/plugin.info Normal file
View File

@@ -0,0 +1,11 @@
{
"title": "$:/core-server",
"name": "Core Server Components",
"description": "TiddlyWiki5 core server components",
"author": "JeremyRuston",
"core-version": ">=5.0.0",
"platform": "server",
"plugin-priority": "0",
"list": "readme",
"stability": "STABILITY_2_STABLE"
}

7
core-server/readme.tid Normal file
View File

@@ -0,0 +1,7 @@
title: $:/core-server/readme
This plugin contains TiddlyWiki's core components that are only needed on the server, comprising:
* Commands
* HTTP server code
* Utility functions for server

View File

@@ -82,6 +82,7 @@ exports.parseTokenString = function(source,pos,token) {
/*
Look for a token matching a regex. Returns null if not found, otherwise returns {type: "regexp", match:, start:, end:,}
Use the "Y" (sticky) flag to avoid searching the entire rest of the string
*/
exports.parseTokenRegExp = function(source,pos,reToken) {
var node = {
@@ -172,7 +173,7 @@ exports.parseMacroParameter = function(source,pos) {
start: pos
};
// Define our regexp
var reMacroParameter = /(?:([A-Za-z0-9\-_]+)\s*:)?(?:\s*(?:"""([\s\S]*?)"""|"([^"]*)"|'([^']*)'|\[\[([^\]]*)\]\]|((?:(?:>(?!>))|[^\s>"'])+)))/g;
const reMacroParameter = /(?:([A-Za-z0-9\-_]+)\s*:)?(?:\s*(?:"""([\s\S]*?)"""|"([^"]*)"|'([^']*)'|\[\[([^\]]*)\]\]|((?:(?:>(?!>))|[^\s>"'])+)))/y;
// Skip whitespace
pos = $tw.utils.skipWhiteSpace(source,pos);
// Look for the parameter
@@ -240,7 +241,7 @@ exports.parseMacroInvocation = function(source,pos) {
params: []
};
// Define our regexps
var reMacroName = /([^\s>"'=]+)/g;
const reMacroName = /([^\s>"'=]+)/y;
// Skip whitespace
pos = $tw.utils.skipWhiteSpace(source,pos);
// Look for a double less than sign
@@ -277,7 +278,7 @@ exports.parseFilterVariable = function(source) {
params: [],
},
pos = 0,
reName = /([^\s"']+)/g;
reName = /([^\s"']+)/y;
// If there is no whitespace or it is an empty string then there are no macro parameters
if(/^\S*$/.test(source)) {
node.name = source;
@@ -302,11 +303,11 @@ exports.parseAttribute = function(source,pos) {
start: pos
};
// Define our regexps
var reAttributeName = /([^\/\s>"'`=]+)/g,
reUnquotedAttribute = /([^\/\s<>"'`=]+)/g,
reFilteredValue = /\{\{\{([\S\s]+?)\}\}\}/g,
reIndirectValue = /\{\{([^\}]+)\}\}/g,
reSubstitutedValue = /(?:```([\s\S]*?)```|`([^`]|[\S\s]*?)`)/g;
const reAttributeName = /([^\/\s>"'`=]+)/y,
reUnquotedAttribute = /([^\/\s<>"'`=]+)/y,
reFilteredValue = /\{\{\{([\S\s]+?)\}\}\}/y,
reIndirectValue = /\{\{([^\}]+)\}\}/y,
reSubstitutedValue = /(?:```([\s\S]*?)```|`([^`]|[\S\s]*?)`)/y;
// Skip whitespace
pos = $tw.utils.skipWhiteSpace(source,pos);
// Get the attribute name

View File

@@ -49,7 +49,7 @@ exports.parse = function() {
// Advance the parser position to past the tag
this.parser.pos = tag.end;
// Check for an immediately following double linebreak
var hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\S\n\r]*\r?\n(?:[^\S\n\r]*\r?\n|$))/g);
var hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\S\n\r]*\r?\n(?:[^\S\n\r]*\r?\n|$))/y);
// Set whether we're in block mode
tag.isBlock = this.is.block || hasLineBreak;
// Parse the body if we need to
@@ -100,7 +100,7 @@ exports.parseTag = function(source,pos,options) {
orderedAttributes: []
};
// Define our regexps
var reTagName = /([a-zA-Z0-9\-\$\.]+)/g;
const reTagName = /([a-zA-Z0-9\-\$\.]+)/y;
// Skip whitespace
pos = $tw.utils.skipWhiteSpace(source,pos);
// Look for a less than sign
@@ -148,7 +148,7 @@ exports.parseTag = function(source,pos,options) {
pos = token.end;
// Check for a required line break
if(options.requireLineBreak) {
token = $tw.utils.parseTokenRegExp(source,pos,/([^\S\n\r]*\r?\n(?:[^\S\n\r]*\r?\n|$))/g);
token = $tw.utils.parseTokenRegExp(source,pos,/([^\S\n\r]*\r?\n(?:[^\S\n\r]*\r?\n|$))/y);
if(!token) {
return null;
}

View File

@@ -113,7 +113,7 @@ exports.parseImage = function(source,pos) {
// Skip whitespace
pos = $tw.utils.skipWhiteSpace(source,pos);
// Get the source up to the terminating `]]`
token = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\]]*?)\|)?([^\]]+?)\]\]/g);
token = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\]]*?)\|)?([^\]]+?)\]\]/y);
if(!token) {
return null;
}

View File

@@ -31,5 +31,7 @@ exports.startup = function() {
$tw.modules.applyMethods("tiddlerdeserializer",$tw.Wiki.tiddlerDeserializerModules);
$tw.macros = $tw.modules.getModulesByTypeAsHashmap("macro");
$tw.wiki.initParsers();
$tw.Commander.initCommands();
if($tw.node) {
$tw.Commander.initCommands();
}
};

View File

@@ -181,7 +181,7 @@ ScrollableWidget.prototype.render = function(parent,nextSibling) {
};
ScrollableWidget.prototype.listenerFunction = function(event) {
self = this;
var self = this;
clearTimeout(this.timeout);
this.timeout = setTimeout(function() {
var existingTiddler = self.wiki.getTiddler(self.scrollableBind),

View File

@@ -3,7 +3,7 @@ title: $:/core/save/all-external-js
\whitespace trim
\import [subfilter{$:/core/config/GlobalImportFilter}]
\define saveTiddlerFilter()
[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/core]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$
[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/core]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]] $(publishFilter)$
\end
<!-- Important: core library is provided by serving URI encoded $:/core/templates/tiddlywiki5.js -->

View File

@@ -3,7 +3,7 @@ title: $:/core/save/offline-external-js
\whitespace trim
\import [subfilter{$:/core/config/GlobalImportFilter}]
\define saveTiddlerFilter()
[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/core]] -[[$:/plugins/tiddlywiki/filesystem]] -[[$:/plugins/tiddlywiki/tiddlyweb]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$
[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/core]] -[[$:/plugins/tiddlywiki/filesystem]] -[[$:/plugins/tiddlywiki/tiddlyweb]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]] $(publishFilter)$
\end
\define defaultCoreURL() tiddlywikicore-$(version)$.js
<$let coreURL={{{ [[coreURL]is[variable]then<coreURL>else<defaultCoreURL>] }}}>

View File

@@ -2,6 +2,6 @@ title: $:/core/save/all
\import [subfilter{$:/core/config/GlobalImportFilter}]
\define saveTiddlerFilter()
[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$
[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]] $(publishFilter)$
\end
{{$:/core/templates/tiddlywiki5.html}}

View File

@@ -1,6 +1,6 @@
title: $:/core/save/empty
\define saveTiddlerFilter()
[is[system]] -[prefix[$:/state/popup/]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]
[is[system]] -[prefix[$:/state/popup/]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]]
\end
{{$:/core/templates/tiddlywiki5.html}}

View File

@@ -1,7 +1,7 @@
title: $:/core/save/lazy-all
\define saveTiddlerFilter()
[is[system]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] [is[tiddler]type[application/javascript]] +[sort[title]]
[is[system]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] [is[tiddler]type[application/javascript]] +[sort[title]]
\end
\define skinnySaveTiddlerFilter()
[!is[system]] -[type[application/javascript]]

View File

@@ -1,7 +1,7 @@
title: $:/core/save/lazy-images
\define saveTiddlerFilter()
[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[!is[system]is[image]] +[sort[title]]
[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] -[!is[system]is[image]] +[sort[title]]
\end
\define skinnySaveTiddlerFilter()
[!is[system]is[image]]

View File

@@ -1,6 +1,6 @@
title: $:/config/OfficialPluginLibrary
tags: $:/tags/PluginLibrary
url: https://tiddlywiki.com/library/v5.3.8/index.html
url: https://tiddlywiki.com/library/v5.4.0/index.html
caption: {{$:/language/OfficialPluginLibrary}}
{{$:/language/OfficialPluginLibrary/Hint}}

View File

@@ -4,7 +4,7 @@ title: $:/editions/de-AT-DE/download-empty
type: text/vnd.tiddlywiki
\define saveTiddlerFilter()
[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/de-DE]] [[$:/languages/de-AT]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]
[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/de-DE]] [[$:/languages/de-AT]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]]
\end
\define savingEmpty()
yes

View File

@@ -2,7 +2,7 @@ title: $:/editions/es-ES/download-empty
type: text/vnd.tiddlywiki
\define saveTiddlerFilter()
[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/es-ES]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]
[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/es-ES]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]]
\end
\define savingEmpty()
yes

View File

@@ -2,7 +2,7 @@ title: $:/editions/fr-FR/download-empty
type: text/vnd.tiddlywiki
\define saveTiddlerFilter()
[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/fr-FR]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]
[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/fr-FR]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]]
\end
\define savingEmpty()
yes

View File

@@ -2,7 +2,7 @@ title: $:/editions/ja-JP/download-empty
type: text/vnd.tiddlywiki
\define saveTiddlerFilter()
[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/ja-JP]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]
[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/ja-JP]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]]
\end
\define savingEmpty()
yes

View File

@@ -2,7 +2,7 @@ title: $:/editions/ko-KR/download-empty
type: text/vnd.tiddlywiki
\define saveTiddlerFilter()
[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/ko-KR]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]
[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/ko-KR]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]]
\end
\define savingEmpty()
yes

View File

@@ -1,6 +1,6 @@
title: $:/config/LocalPluginLibrary
tags: $:/tags/PluginLibrary
url: http://127.0.0.1:8080/prerelease/library/v5.3.7/index.html
url: http://127.0.0.1:8080/prerelease/library/v5.4.0/index.html
caption: {{$:/language/OfficialPluginLibrary}} (Prerelease Local)
A locally installed version of the official ~TiddlyWiki plugin library at tiddlywiki.com for testing and debugging. //Requires a local web server to share the library//

View File

@@ -1,6 +1,6 @@
title: $:/config/OfficialPluginLibrary
tags: $:/tags/PluginLibrary
url: https://tiddlywiki.com/prerelease/library/v5.3.8/index.html
url: https://tiddlywiki.com/prerelease/library/v5.4.0/index.html
caption: {{$:/language/OfficialPluginLibrary}} (Prerelease)
The prerelease version of the official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team.

View File

@@ -2,7 +2,7 @@ title: $:/editions/tw5.com/download-empty
code-body: yes
\define saveTiddlerFilter()
[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] [[$:/config/OfficialPluginLibrary]] +[sort[title]]
[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] [[$:/config/OfficialPluginLibrary]] +[sort[title]]
\end
\define savingEmpty()
yes

View File

@@ -103,7 +103,7 @@ Tests the checkbox widget thoroughly.
];
var indexModeTests = fieldModeTests.map(data => {
var newData = {...data};
var newData = Object.assign({}, data);
var newName = data.testName.replace('field mode', 'index mode');
var tiddlerOneAlreadyExists = false;
var newTiddlers = data.tiddlers.map(tiddler => {
@@ -274,14 +274,13 @@ Tests the checkbox widget thoroughly.
listModeTests
.filter(data => data.widgetText.includes("listField='colors'"))
.map(data => {
var newData = {
...data,
tiddlers: data.tiddlers.map(tiddler => ({...tiddler, list: tiddler.colors, colors: undefined})),
var newData = Object.assign({}, data, {
tiddlers: data.tiddlers.map(tiddler => Object.assign({}, tiddler, {list: tiddler.colors, colors: undefined})),
widgetText: data.widgetText.replace("listField='colors'", "listField='list'"),
expectedChange: {
"Colors": { list: data.expectedChange.Colors.colors.split(' ') }
},
}
})
return newData;
})
);
@@ -289,20 +288,19 @@ Tests the checkbox widget thoroughly.
listModeTests
.filter(data => data.widgetText.includes("listField='colors'"))
.map(data => {
var newData = {
...data,
tiddlers: data.tiddlers.map(tiddler => ({...tiddler, tags: tiddler.colors, colors: undefined})),
var newData = Object.assign({}, data, {
tiddlers: data.tiddlers.map(tiddler => Object.assign({}, tiddler, {tags: tiddler.colors, colors: undefined})),
widgetText: data.widgetText.replace("listField='colors'", "listField='tags'"),
expectedChange: {
"Colors": { tags: data.expectedChange.Colors.colors.split(' ') }
},
}
})
return newData;
})
);
var indexListModeTests = listModeTests.map(data => {
var newData = {...data};
var newData = Object.assign({}, data);
var newName = data.testName.replace('list mode', 'index list mode');
var newTiddlers = data.tiddlers.map(tiddler => {
if (tiddler.hasOwnProperty('colors')) {

View File

@@ -1137,7 +1137,7 @@ Tests the filtering mechanism.
// No such tiddlers. Nothing to return.
expect(wiki.filterTiddlers("[[nonexistent]moduleproperty[name]]").length).toBe(0);
// Non string properties should get toStringed.
expect(wiki.filterTiddlers("[[$:/core/modules/commands/init.js]moduleproperty[info]]").join(" ")).toBe('{"name":"init","synchronous":true}');
expect(wiki.filterTiddlers("[[$:/core/modules/startup.js]moduleproperty[synchronous]]").join(" ")).toBe('true');
});
it("should minimize unnecessary variable lookup", function() {

View File

@@ -197,17 +197,11 @@ This is an example tiddler. See [[Table-of-Contents Macros (Examples)]].
<!-- TODO use $:/palette colour settings -->
\procedure .link-badge-added(link,colour:#ffe246) <$macrocall $name=".link-badge" text="added" link=<<link>> colour=<<colour>>/>
\procedure .link-badge-addendum(link,colour:#fcc84a) <$macrocall $name=".link-badge" text="addendum" link=<<link>> colour=<<colour>>/>
\procedure .link-badge-extended(link,colour:#f9a344) <$macrocall $name=".link-badge" text="extended" link=<<link>> colour=<<colour>>/>
\procedure .link-badge-fixed(link,colour:#ffa86d) <$macrocall $name=".link-badge" text="fixed" link=<<link>> colour=<<colour>>/>
\procedure .link-badge-here(link,colour:#d88e63) <$macrocall $name=".link-badge" text="here" link=<<link>> colour=<<colour>>/>
\procedure .link-badge-hide(link,colour:#9d959f) <$macrocall $name=".link-badge" text="hide" link=<<link>> colour=<<colour>>/>
\procedure .link-badge-improved(link,colour:#7593c7) <$macrocall $name=".link-badge" text="improved" link=<<link>> colour=<<colour>>/>
\procedure .link-badge-modified(link,colour:#7f99c9) <$macrocall $name=".link-badge" text="modified" link=<<link>> colour=<<colour>>/>
\procedure .link-badge-removed(link,colour:#a9aabc) <$macrocall $name=".link-badge" text="removed" link=<<link>> colour=<<colour>>/>
\procedure .link-badge-renamed(link,colour:#b4b995) <$macrocall $name=".link-badge" text="renamed" link=<<link>> colour=<<colour>>/>
\procedure .link-badge-updated(link,colour:#91ba66) <$macrocall $name=".link-badge" text="updated" link=<<link>> colour=<<colour>>/>
\procedure .link-badge-reverted(link,colour:#ba8e66) <$macrocall $name=".link-badge" text="reverted" link=<<link>> colour=<<colour>>/>
\procedure .banner-credits(credit,url)
<img src=<<url>> width="140" style="float:left;margin-right:0.5em;"/>

View File

@@ -240,7 +240,7 @@ a.doc-deprecated-version.tc-tiddlylink {
vertical-align: text-bottom;
}
.doc-link-badge {
html button.doc-link-badge, html a.doc-link-badge {
text-decoration: none;
background-color: #7eba4c;
color: <<colour foreground>>;
@@ -250,10 +250,22 @@ a.doc-deprecated-version.tc-tiddlylink {
font-size: 0.75em;
}
.doc-link-badge:hover {
html button.doc-link-badge:hover, html a.doc-link-badge:hover {
text-decoration: underline;
}
.doc-github-link svg {
width: 1.2em;
height: 1.2em;
vertical-align: middle;
}
.doc-changenote-body {
margin-left: 2em;
font-style: italic;
font-size: 0.9em;
}
.doc-tiddler-fields {
background-color: <<colour code-background>>;
border: 1px solid <<colour tiddler-border>>;
@@ -283,6 +295,7 @@ a.doc-deprecated-version.tc-tiddlylink {
list-style: none;
display: flex;
flex-wrap: wrap;
padding: 0;
}
ol.doc-github-contributors li {
display: flex;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 91 KiB

View File

@@ -19,4 +19,5 @@ Plugins are stored as tiddlers with the following fields:
|text |JSON encoding of the list of tiddlers comprising the plugin |
|title |Title of plugin |
|type |Must be ''application/json'' |
|version |//(optional)// Version string (should conform to [ext[SemanticVersioning|http://semver.org/]] convention) |
|version |//(optional)// Version string (should conform to [ext[SemanticVersioning|http://semver.org/]] convention) |
|platform |<<.from-version 5.4.0>> //(optional)// Set this field to ''node'' to restrict the plugin to only be loaded on the server (this is accomplished by suppressing such plugins from the various save templates) |

View File

@@ -0,0 +1,8 @@
title: $:/changenotes/5.3.8/#9133
description: Update Chinese translation
release: 5.3.8
tags: $:/tags/ChangeNote
change-type: enhancement
change-category: translation
links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9133
github-contributors: BramChen

View File

@@ -0,0 +1,8 @@
title: $:/changenotes/5.3.8/#9166
description: Fixed name field of fa-IR language plugin
release: 5.3.8
tags: $:/tags/ChangeNote
change-type: bugfix
change-category: translation
links: https://github.com/TiddlyWiki/TiddlyWiki5/issue/9166
github-contributors: Leilei332

View File

@@ -0,0 +1,8 @@
title: $:/changenotes/5.3.8/#9175
description: Fixed Flexoki palette regressions
release: 5.3.8
tags: $:/tags/ChangeNote
change-type: bugfix
change-category: palette
links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9175
github-contributors: Leilei332

View File

@@ -0,0 +1,8 @@
title: $:/changenotes/5.3.8/#9184
description: Update Polish translation
release: 5.3.8
tags: $:/tags/ChangeNote
change-type: enhancement
change-category: translation
links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9184
github-contributors: EvidentlyCube

View File

@@ -0,0 +1,8 @@
title: $:/changenotes/5.3.8/#9185
description: Fixed [[Highlight Plugin]] theme listing
release: 5.3.8
tags: $:/tags/ChangeNote
change-type: bugfix
change-category: plugin
links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9185
github-contributors: Leilei332

View File

@@ -0,0 +1,10 @@
title: $:/changenotes/5.3.8/32caeb69c3e7b75a80a84a1e14363e87175b164e
description: Revert breakage of [[list-tagged-draggable Macro]]
release: 5.3.8
tags: $:/tags/ChangeNote
change-type: bugfix
change-category: hackability
links: https://github.com/TiddlyWiki/TiddlyWiki5/commit/32caeb69c3e7b75a80a84a1e14363e87175b164e
github-contributors: Jermolene
Reverted the [[change in v5.3.7|https://github.com/TiddlyWiki/TiddlyWiki5/pull/8721]] that broke the [[list-tagged-draggable Macro]]. The change involved updating some core macros to use procedures

View File

@@ -0,0 +1,8 @@
title: $:/changenotes/5.3.8/75502266176de9d4a5e1f89cd7f2e455b7a2f6da
description: Update Greek translation
release: 5.3.8
tags: $:/tags/ChangeNote
change-type: enhancement
change-category: translation
links: https://github.com/TiddlyWiki/TiddlyWiki5/commit/75502266176de9d4a5e1f89cd7f2e455b7a2f6da
github-contributors: superuser-does

View File

@@ -0,0 +1,8 @@
title: $:/changenotes/5.3.8/93d30f374da4a6b2037b335f7f7d4eddce8192db
description: Fixed display of field names longer than the available width in the info panel
release: 5.3.8
tags: $:/tags/ChangeNote
change-type: bugfix
change-category: usability
links: https://github.com/TiddlyWiki/TiddlyWiki5/commit/93d30f374da4a6b2037b335f7f7d4eddce8192db
github-contributors: Jermolene

View File

@@ -0,0 +1,10 @@
title: $:/changenotes/5.4.0/#9183
description: Offload server-only components to a plugin
release: 5.4.0
tags: $:/tags/ChangeNote
change-type: pluginisation
change-category: internal
links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9183 https://github.com/TiddlyWiki/TiddlyWiki5/pull/9288
github-contributors: Jermolene Leilei332
This change reduces the size of the core plugin by 119.3KB or about 4.5%.

View File

@@ -0,0 +1,10 @@
title: $:/changenotes/5.4.0/#9287
description: Split release notes into individual change notes
release: 5.4.0
tags: $:/tags/ChangeNote
change-type: enhancement
change-category: internal
links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9287
github-contributors: Jermolene
Doing so enables us to filter and group changes. For example, we could show all the breaking changes between two releases.

View File

@@ -0,0 +1,13 @@
caption: 5.4.0
created: 20250901000000000
modified: 20250901000000000
tags: ReleaseNotes
title: Release 5.4.0
type: text/vnd.tiddlywiki
description: Under development
\define release-introduction()
Release v5.4.0 includes major improvements in a number of areas. See the [[project plan|https://github.com/orgs/TiddlyWiki/projects/4]] for more details.
\end release-introduction
<<releasenote 5.4.0>>

View File

@@ -1,43 +0,0 @@
caption: 5.3.8
created: 20250807084952911
description: Bugfix release for 5.3.7
modified: 20250807100514203
released: 20250807084952911
tags: ReleaseNotes
title: Release 5.3.8
type: text/vnd.tiddlywiki
//[[See GitHub for detailed change history of this release|https://github.com/TiddlyWiki/TiddlyWiki5/compare/v5.3.7...master]]//
<<.banner-credits
credit:"""Congratulations to [[Christian Byron|https://talk.tiddlywiki.org/u/Christian_Byron]] for their winning design for the banner for this release (here is the [[discussion|https://talk.tiddlywiki.org/t/planning-a-v5-3-8-bug-fix-release/12963]]).
"""
url:"https://raw.githubusercontent.com/TiddlyWiki/TiddlyWiki5/e8a7bbf14e078d83ab6ba55a80cb8d9ba5290303/editions/tw5.com/tiddlers/images/New%20Release%20Banner.png"
>>
This is a bug fix release for TiddlyWiki [[Release 5.3.7]] that fixes problems introduced in that release.
! Translation improvements
* Chinese
* Polish
* Greek
! Bug Fixes
* <<.link-badge-reverted "https://github.com/TiddlyWiki/TiddlyWiki5/commit/32caeb69c3e7b75a80a84a1e14363e87175b164e">> the [[change in v5.3.7|https://github.com/TiddlyWiki/TiddlyWiki5/pull/8721]] that broke the [[list-tagged-draggable Macro]]. The change involved updating some core macros to use procedures
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/93d30f374da4a6b2037b335f7f7d4eddce8192db">> display of field names longer than the available width in the info panel
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9185">> [[Highlight Plugin]] theme listing
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9175">> Flexoki palette regressions
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/9166">> name field of fa-IR language plugin
! Acknowledgements
[[@Jermolene|https://github.com/Jermolene]] would like to thank the contributors to this release who have generously given their time to help improve TiddlyWiki:
<<.contributors """
CeeBeeTree
EvidentlyCube
Leilei332
pmario
""">>

View File

@@ -0,0 +1,38 @@
title: Release Notes and Changes
! Release Notes
! Change Notes
* `title` by convention titles are formed `$:/changenotes/<version>/<unique identifier>`. The unique identifier is typically a GitHub PR or issue like `#1234` or a GitHub commit ID such as `98f850609d29bc36ded83f90c0d5be231649254b`
* `tags` must include `$:/tags/ChangeNote`, see below for other valid tags
* `change-type` the type of change as a single string; see below for values
* `change-category` the category of the change; see below for vqalues
Other valid tags for change notes:
* `$:/tags/ChangeNote/Deprecation`
* `$:/tags/ChangeNote/Breaking`
Valid change note types are as follows:
* ''bugfix''
* ''feature''
* ''enhancement''
* ''deprecation''
* ''security''
* ''pluginisation''
Valid change categories are as follows:
* ''internal''
* ''translation''
* ''plugin''
* ''widget''
* ''filters''
* ''usability''
* ''palette''
* ''hackability''
* ''nodejs''
* ''performance''
* ''developer''

View File

@@ -0,0 +1,25 @@
title: $:/tw5.com/releases/info/
category-order: translation plugin usability palette hackability widget filters performance nodejs internal developer
categories/internal/caption: Internal
categories/translation/caption: Translation
categories/plugin/caption: Plugin
categories/widget/caption: Widget
categories/usability/caption: Usability
categories/palette/caption: Palette
categories/hackability/caption: Hackability
categories/nodejs/caption: Node.js
categories/performance/caption: Performance
categories/developer/caption: Developer
change-types/bugfix/caption: BUGFIX
change-types/bugfix/colour: #ffe246
change-types/feature/caption: FEATURE
change-types/feature/colour: #91ba66
change-types/enhancement/caption: ENHANCEMENT
change-types/enhancement/colour: #cba5ff
change-types/deprecation/caption: DEPRECATION
change-types/deprecation/colour: #ff9d6c
change-types/security/caption: SECURITY
change-types/security/colour: #ff6666
change-types/pluginisation/caption: PLUGINISATION
change-types/pluginisation/colour: #aaaaaa

View File

@@ -0,0 +1,125 @@
title: $:/tw5.com/releases/procedures
tags: $:/tags/Global
\procedure github-changes-link()
<a
class="tc-tiddlylink-external"
href=`https://github.com/TiddlyWiki/TiddlyWiki5/compare/v${ [all[tiddlers]tag[ReleaseNotes]has[released]!sort[released]] :filter[get[released]compare:number:lt<releaseTiddlerCreated>] +[get[caption]] }$...${ [<releaseTiddler>has[released]get[caption]addprefix[v]] :else[[master]] }$`
rel="noopener noreferrer"
target="_blank"
>the detailed change history on ~GitHub</a>
\end github-changes-link
\procedure banner-credits()
<%if [<banner-credit-user-name>!match[]] %>
<img src=<<banner-credit-permalink>> width="140" style="float:left;margin-right:0.5em;"/>
Congratulations to
<a
class="tc-tiddlylink-external"
href=<<banner-credit-user-link>>
rel="noopener noreferrer"
target="_blank"
><$text text=<<banner-credit-user-name>>/></a>
for their winning design for the banner for this release (here is the
<a
class="tc-tiddlylink-external"
href=<<banner-credit-discussion-link>>
rel="noopener noreferrer"
target="_blank"
>discussion</a>).
<%else%>
<$image source="New Release Banner" width="140">
<%endif%>
<div style="clear:both;"/>
\end banner-credits
\procedure change-list()
\whitespace trim
<$list filter="[enlist{$:/tw5.com/releases/info/category-order}]" variable="category">
<%if [tag[$:/tags/ChangeNote]] :filter[{!!release}match<release>] :filter[{!!change-category}match<category>] %>
<h2>
<$text text={{{ [[$:/tw5.com/releases/info/categories/]addsuffix<category>addsuffix[/caption]get[text]] }}} />
</h2>
<ul>
<$list filter="[tag[$:/tags/ChangeNote]] :filter[{!!release}match<release>] :filter[{!!change-category}match<category>]" variable="change">
<li>
<$link
to="Release Notes and Changes"
class="doc-link-badge"
target="_blank"
rel="noopener noreferrer"
style.backgroundColor={{{ [<change>get[change-type]addprefix[$:/tw5.com/releases/info/change-types/]addsuffix[/colour]get[text]] }}}
>
<$text text={{{ [<change>get[change-type]addprefix[$:/tw5.com/releases/info/change-types/]addsuffix[/caption]get[text]] }}}/>
</$link>
<$text text=" "/>
<$list filter="[<change>get[links]enlist-input[]]" variable="link">
<a
href=<<link>>
class="doc-github-link"
target="_blank"
rel="noopener noreferrer"
>
{{$:/core/images/github}}
</a>
<$text text=" "/>
</$list>
<$transclude $tiddler=<<change>> $field="description" $mode="inline"/>
<div class="doc-changenote-body">
<$transclude $tiddler=<<change>> $mode="block"/>
</div>
</li>
</$list>
</ul>
<%endif%>
</$list>
\end change-list
\procedure acknowledgements()
<ol class="doc-github-contributors">
<$list filter="[enlist<release-github-contributors>sort[]]" variable="username">
<li>
<a href={{{ [[https://github.com/]addsuffix<username>] }}} class="tc-tiddlylink-external" target="_blank" rel="noopener noreferrer">
<img src={{{ [[https://github.com/]addsuffix<username>addsuffix[.png?size=64]] }}} width="64" height="64"/>
<span class="doc-github-contributor-username">
@<$text text=<<username>>/>
</span>
</a>
</li>
</$list>
</ol>
\end acknowledgements
\procedure releasenote(release)
<$let
releaseTiddler={{{ [all[tiddlers]tag[ReleaseNotes]] :filter[{!!caption}match<release>] }}}
releaseTiddlerCreated={{{ [<releaseTiddler>get[created]] }}}
release-github-contributors={{{ [tag[$:/tags/ChangeNote]] :filter[{!!release}match<release>] :map:flat[enlist{!!github-contributors}] +[sort[]format:titlelist[]join[ ]]}}}
>
See <<github-changes-link>> and [[other versions|TiddlyWiki Releases]].
<<banner-credits>>
! Introduction
<$transclude $variable="release-introduction" $mode="block"/>
! Changes
This release includes the following changes.
<<change-list>>
<!-- Acknowledgement list -->
! Acknowledgements
A warm thank you to the developers who have contributed to this release:
<<acknowledgements>>
</$let>
\end releasenote

View File

@@ -0,0 +1,3 @@
title: $:/tw5.com/releases/styles
tags: $:/tags/Stylesheet
type: text/vnd.tiddlywiki

View File

@@ -5,13 +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.
If you are using node.js, you can also install prior versions like this:
> npm install -g tiddlywiki@5.1.13
(BetaReleases and AlphaReleases are listed separately).
Here are the details of recent releases of TiddlyWiki5. See [[TiddlyWiki5 Versioning]] for details of how releases are named, and [[Release Notes and Changes]] for details of how release notes are constructed.
<$list filter="[tag[ReleaseNotes]!sort[created]limit[1]]">
<$macrocall $name="tabs" tabsList="[tag[ReleaseNotes]!sort[created]]" default={{!!title}} class="tc-vertical" template="ReleaseTemplate" />

Some files were not shown because too many files have changed in this diff Show More