1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2026-01-22 19:04:38 +00:00

Compare commits

...

108 Commits

Author SHA1 Message Date
jeremy@jermolene.com
f690458792 Version number update for 5.2.3 2022-08-02 12:32:01 +01:00
jeremy@jermolene.com
6bc18570f2 Update readmes for v5.2.3 2022-08-02 12:31:33 +01:00
jeremy@jermolene.com
1f4b12cd0e Preparing for release of v5.2.3 2022-08-02 12:27:50 +01:00
jeremy@jermolene.com
608aa3378a Merge branch 'tiddlywiki-com' 2022-08-02 12:21:14 +01:00
jeremy@jermolene.com
bff7dc88e8 Update release note 2022-08-02 10:03:28 +01:00
jeremy@jermolene.com
667da96c97 Fix crash when closing plugin library
Fixes #6855
2022-07-31 15:35:14 +01:00
jeremy@jermolene.com
fb037de091 WIP 2022-07-31 15:34:31 +01:00
jeremy@jermolene.com
75865385a6 Docs: Fix typos
Thanks @amreus

Fixes #6860

Fixes #6859
2022-07-31 15:23:58 +01:00
Xavier Cazin
091a6a9dc1 Updates to various fr-FR translation strings (#6856)
* Update to the fr-FR translation of the render command

* Add a Caption entry to the fr-FR translation of EditTemplate strings

* updates to the fr-FR translation of the default command help

* Add a Caption to the fr-FR translation of SideBar-related strings

* Update to fr-FR translation strings for Control Panel

* Update to Misc fr-FR translations strings

* Updates to the Fields-related fr-FR translation strings
2022-07-31 14:06:19 +01:00
Mario Pietsch
38f0337207 Update german translation (#6857) 2022-07-31 13:58:03 +01:00
Bram Chen
a3b294470f Update chinese language files (#6853)
* Render command help: use single quotes for safety
2022-07-30 11:45:24 +01:00
jeremy@jermolene.com
53c5cc535e Put hide-body at the start of the view template body cascade 2022-07-29 14:20:26 +01:00
jeremy@jermolene.com
9e6713d3e0 Release note: Remove duplicated line 2022-07-29 14:18:07 +01:00
jeremy@jermolene.com
1acad41574 Docs: Clarify ordering of tagged tiddlers
Fixes #6850
2022-07-29 14:16:09 +01:00
jeremy@jermolene.com
9a5f6558fe Updated release banner (GitHub URL this time) 2022-07-29 14:11:09 +01:00
jeremy@jermolene.com
5d9b71771a Updated new release banner
See https://talk.tiddlywiki.org/t/banner-competition-voting-for-v5-2-3/4009/16
2022-07-29 14:09:55 +01:00
jeremy@jermolene.com
f891eacddc Ensure code-body field can override new stylesheet view
See https://github.com/Jermolene/TiddlyWiki5/issues/6813#issuecomment-1199108091
2022-07-29 11:16:20 +01:00
jeremy@jermolene.com
178e652a5d Update release note inc. banner credits 2022-07-29 10:48:57 +01:00
jeremy@jermolene.com
daf4eec702 Final new release banner for v5.2.3
See https://talk.tiddlywiki.org/t/banner-competition-voting-for-v5-2-3/4009
2022-07-29 10:20:45 +01:00
jeremy@jermolene.com
34b1b8128f Server: correctly print URL when running on IPv6
Since https://github.com/nodejs/node/issues/40537 users are more likely to encounter IPv6 connections.

IPv6 URLs require square brackets around raw addresses.

With this change VS Code correctly hyperlinks the message `Serving on http://[::1]:8080`
2022-07-29 10:07:59 +01:00
jeremy@jermolene.com
a453121e96 Render command help: use single quotes for safety
See https://github.com/Jermolene/TiddlyWiki5/issues/6827#issuecomment-1198540330
2022-07-29 09:48:49 +01:00
Bram Chen
e849aaab4d Update chinese language files (#6846)
* Additional example of render command
2022-07-29 08:53:35 +01:00
Saq Imtiaz
453d91caeb Fix invalid file path in tiddlywiki-com branch (#6844)
* Delete editions/tw5.com/tiddlers/$:/editions/tw5.com directory

* Create systemtag-template.tid
2022-07-28 21:31:14 +01:00
Mario Pietsch
0ad0001e29 Fix #6840 tab macro stat handling (#6841) 2022-07-28 21:26:09 +01:00
Mario Pietsch
2441819c70 Remove hardcoded spaces and replace with SPAN and proper class (#6825) 2022-07-28 17:02:14 +01:00
jeremy@jermolene.com
ca762ab7a6 Additional example of render command
Fixes #6827
2022-07-28 16:33:57 +01:00
jeremy@jermolene.com
28070f847c Ensure dirty indicator has higher CSS specificity than menu bar
Fixes #6832
2022-07-28 16:20:47 +01:00
jeremy@jermolene.com
8f85fbca33 Added some background on different types of brackets 2022-07-28 16:05:10 +01:00
Nathaniel Knight
655cf4729a Add tiddly-wiki-server to TiddlyWeb implementors (#6794) 2022-07-27 19:22:49 +01:00
Nathaniel Knight
55f3ee5eab Add Nathaniel Knight's signature to the CLA (#6830) 2022-07-27 19:21:42 +01:00
Robin Munn
63bba13758 Fix copy-and-paste mistake in insertafter docs (#6824) 2022-07-25 08:41:06 +01:00
BALLOON | FU-SEN
c22d52c046 Japanese translation: Fixed Title/Relink/Prompt (#6814) 2022-07-24 20:42:50 +01:00
BALLOON | FU-SEN
8c57cfdf26 Spell correction (#6815) 2022-07-24 20:42:27 +01:00
btheado
4f38903c7b Add description and examples comparing :map vs. :map:flat (#6821)
* Added description and examples comparing :map vs. :map:flat

* Make it clear :flat is just a suffix on the :map filter run

* Reword the description comparing :map and :map:flat

* Swap the :map and :map:flat columns in the examples table

* Removed mention of how to express ':map' in terms of ':map:flat'
2022-07-24 19:12:33 +01:00
Saq Imtiaz
ab1e85e01e Fixes invalid path in new docus view template (#6820)
* Delete editions/tw5.com/tiddlers/$:/editions/tw5.com directory

Delete invalid file path directory

* Create systemtag-template.tid

Restore deleted file
2022-07-23 13:53:39 +01:00
jeremy@jermolene.com
065911259b Add modified date to front page release note listing 2022-07-22 16:45:05 +01:00
jeremy@jermolene.com
6497633859 Update release note 2022-07-22 16:20:00 +01:00
jeremy@jermolene.com
9cc4c3ead7 Add first pass at Code of Conduct 2022-07-21 21:22:52 +01:00
Saq Imtiaz
613b3df367 Image lazy loading (#6809)
* Extend image widget with lazy loading support

* docs: added from-version to docs update
2022-07-21 15:30:56 +01:00
jeremy@jermolene.com
39996c7a2f Merge branch 'tiddlywiki-com' 2022-07-21 10:11:14 +01:00
Saq Imtiaz
0237d9ed94 feat(filters): extend :map filter run prefix to accept a suffix to enable mapflat (#6806) 2022-07-21 09:23:01 +01:00
jeremy@jermolene.com
7e9c2a1a10 Fix crash when viewing $:/core/ui/ViewTemplate/body/rendered-plain-text
Fixes #6805
2022-07-21 09:05:20 +01:00
Robin Munn
d4fc8f585e Small grammar fix in release notes (#6800) 2022-07-20 09:56:41 +01:00
Robin Munn
caa6b888e9 Make insertafter docs more similar to insertbefore (#6801)
Now both the insertafter and insertbefore filter operators have similar
wording in their documentation tiddlers, making it more clear that the
"start" and "end" suffixes are only available in the two-parameter form.
2022-07-20 09:56:06 +01:00
twMat
a1b240de2f [doc] Update TagMacro.tid (#6797) 2022-07-19 19:10:39 +01:00
twMat
7a98ab1677 [doc] SystemTag template (#6798) 2022-07-19 19:10:07 +01:00
twMat
c49d5a3b08 [tw.com] Improve the saver cards (#6799)
* [tw.com] Improve the saver cards

* [tw.com] Improve the saver cards _ take 2

* Update tw5.com-styles.tid
2022-07-19 19:05:23 +01:00
jeremy@jermolene.com
93717560dc Docs: Update advice about using counter attribute of list widget 2022-07-18 12:03:42 +01:00
BALLOON | FU-SEN
abc3af16c3 Significant improvement in Japanese (#6795)
- Add translations for untranslated items
- Unification of terms (translations differed by multiple translators)
- Add signature of `author` (Includes translation assistance for dajya-ranger. I also added his signature)

It's a lot of updates, but I've tested it on my TiddlyWiki.
Help etc. are still lacking.
2022-07-18 09:29:58 +01:00
Saq Imtiaz
97eaec88d1 Update Release 5.2.3.tid (#6790) 2022-07-15 18:45:27 +01:00
Mohammad Rahmani
2275255c2b Improve formatting of Contributors Section in Release Tiddler (#6788)
* improve contributors section in release tiddler

* comments implemented

Jeremy comments were implemented
2022-07-15 18:20:40 +01:00
Saq Imtiaz
fe1147c6fd Fix: restore drag and drop on mobile chrome (#6789) 2022-07-15 18:19:44 +01:00
jeremy@jermolene.com
eceacc23c8 Update release note 2022-07-15 17:43:19 +01:00
Jeremy Ruston
1ca6305acb Split the tiddler subtitle into individual segments tagged $:/tags/ViewTemplate/Subtitle (#6779) 2022-07-15 17:37:25 +01:00
Saq Imtiaz
19331cc6f9 Fix: brittle selector implementation for draggable widget (#6786)
* Fix: fixes #6595, brittle selector implementation for draggable widget

* Docs: updated for fix to selector implementation for draggable widget
2022-07-15 15:38:09 +01:00
Saq Imtiaz
f6e021d70f Feat: dynamically refresh class for draggable widget DOM node instead of re-rendering the widget (#6787) 2022-07-15 15:37:27 +01:00
jeremy@jermolene.com
2da117484c Docs: Update release note contributors to new format 2022-07-14 13:50:30 +01:00
jeremy@jermolene.com
1c1dd2a4cf Merge branch 'tiddlywiki-com' 2022-07-14 13:50:08 +01:00
jeremy@jermolene.com
f957874d18 Docs: Improve styling of GitHub contributors listing 2022-07-14 13:49:23 +01:00
jeremy@jermolene.com
aa4a284b88 Update release note 2022-07-14 09:03:04 +01:00
Jeremy Ruston
338dc11436 Show stylesheets as rendered plain text with highlighting (#6778)
* First commit

* Enable syntax highlighting when highlight plugin is installed

* Use highlighting for the control panel stylesheet listings
2022-07-14 09:00:56 +01:00
Mario Pietsch
22d8fdd259 Adjust position of server page control dropdown (#6767) 2022-07-13 17:28:32 +01:00
twMat
c270e3cd6b Update TiddlyWiki in the Sky for TiddlyWeb.tid (#6769)
For e.g the listing in 
https://tiddlywiki.com/prerelease/#Deprecated%20-%20What%20does%20it%20mean
2022-07-13 17:27:45 +01:00
Robin Munn
18d8173dcc New insertafter filter operator (#6771)
* Implement insertafter operator (like insertbefore)

Currently, the behavior of insertafter if the target is not found is to
append the inserted tiddler to the end of the list, like insertbefore
does. In the next commit, we'll add a suffix to customize what both
insertafter and insertbefore do when the target is not found.

* Add failing tests for insertafter suffixes

Also includes tests for insertbefore suffixes (start/end), since we'll
be implementing both of those at the same time.

* Add start/end suffixes for insertafter/before

The tests that exercise the start/end suffixes now pass.
2022-07-13 17:08:17 +01:00
Mohammad Rahmani
4cd3c065e7 Add emptyMessage to list-links-draggable and correct docs (#6776) 2022-07-13 15:58:27 +01:00
jeremy@jermolene.com
45895bd560 Update release note 2022-07-13 09:32:31 +01:00
jeremy@jermolene.com
af86080943 Docs for $:/info/browser/is/mobile 2022-07-13 09:32:22 +01:00
jeremy@jermolene.com
94b02ba3a0 Docs missed off #6675 2022-07-12 16:51:38 +01:00
lin onetwo
bbae2ab6da Feat: update katex to 0.16 stable (#6768) 2022-07-12 11:18:15 +01:00
jeremy@jermolene.com
3b778c156b Merge branch 'tiddlywiki-com' 2022-07-11 17:22:50 +01:00
lin onetwo
2f817e4293 Update katex to latest 0.15.3 (#6671)
* feat: update snippet fields

https://github.com/Jermolene/TiddlyWiki5/discussions/6670

* chore: upgrade files

* docs: update readme

* fix: usage of mhchem

* fix: add back katex.without-font-face.min.css

https://github.com/Jermolene/TiddlyWiki5/pull/6671#issuecomment-1116287404

* style: format json with 4 space

* style: format json with 1 space

* style: restore old format

* feat: update css by using new one and delete font face

* update developer info

* move implementation notes to plugin

* update TW style tiddler

* update katexdemo edition

* chore: delete unused files

* Update developer.tid

* Update developer.tid

Co-authored-by: pmario <pmariojo@gmail.com>
2022-07-09 08:37:47 +01:00
Mario Pietsch
0112d04033 Fix 6731 tag and field name trim (#6740)
* this commit should fix #6731. It trims field and tag whitespace

* this commit increases tag space visibility as mentioned in 002d47b4d9

* fix a missing HTML end tag

* fix $:/Manager select element max width
2022-07-09 08:35:38 +01:00
BALLOON | FU-SEN
56d8f47710 Japanese translation: Month correction (#6760)
The month notation is strange in the date in the default Japanese display.
2022-07-07 09:06:23 +01:00
BALLOON | FU-SEN
f818fd96cd Set the date and time in Japanese format (#6761)
The date and time format is incorrect in the current Japanese display of TiddleWiki. I fixed it.
2022-07-07 09:05:45 +01:00
BALLOON | FU-SEN
c5821326d0 Add signature (#6762)
https://github.com/Jermolene/TiddlyWiki5/pull/6761
2022-07-07 09:05:12 +01:00
Maurycy Zarzycki
add14ef65a add polish translation to a new string added in 92c4c820 (#6763)
Co-authored-by: Maurycy Zarzycki <maurycy@evidentlycube.com>
2022-07-07 08:59:31 +01:00
jeremy@jermolene.com
f93fe50044 Fix anchor links do not work with addressbar=permalink and animationduration=0
Fixes #6757
2022-07-05 18:39:14 +01:00
jeremy@jermolene.com
ceec7b5737 Style tweaks for #6755 2022-07-05 17:47:57 +01:00
Mario Pietsch
76bc2f7524 Fix svg foreignObject that contains DIVs (#6755)
* xmlns attribute defined in element takes precedence

* use predefined tagNamespaces variable as default value

* change code as suggested by Jeremy
2022-07-05 17:46:31 +01:00
jeremy@jermolene.com
a59ec3ebf7 Merge branch 'tiddlywiki-com' 2022-07-04 21:15:23 +01:00
jeremy@jermolene.com
20df381cf3 Docs: Improve deprecation documentation 2022-07-04 17:42:58 +01:00
jeremy@jermolene.com
4185d9a26c Docs: Make .from-version macro be a link to the release note
Fixes #6750
2022-07-04 17:35:03 +01:00
Bram Chen
bf6d5fa767 Update chinese language files (#6752)
* Add `Caption` to EditTemplate.multids
2022-07-04 15:19:03 +01:00
Nolan Darilek
92c4c82005 Add ARIA region for editor. (#6749) 2022-07-01 15:39:52 +01:00
Maurycy Zarzycki
1110fd50cf add Polish translation for the newly introduced English i18n string (#6747)
Co-authored-by: Maurycy Zarzycki <maurycy@evidentlycube.com>
2022-06-29 14:03:16 +01:00
FSpark
2c607ee8e6 Add storyTiddler to render command (#6746) 2022-06-29 08:58:40 +01:00
Bram Chen
dfebd69d8f Update chinese language files (#6745)
* Add `Caption/Sidebar` in SideBar.multids
* Update Help/default.tid
2022-06-29 08:20:29 +01:00
Mario Pietsch
926b7808b3 Fix a typo in the Plugin Ordering tiddler (#6744) 2022-06-28 17:59:33 +01:00
Nolan Darilek
7ac7d26f86 Add alert role to notifications so they're automatically spoken by screen readers. (#6743) 2022-06-28 17:48:03 +01:00
Nolan Darilek
f02bd2392f Various accessibility improvements (#6742)
* Add `main` and `article` roles to stories and story.

* Support `role` and \aria-checked` in buttons, and integrate with sidebar tabs.

* Add `region` role to sidebar, and set caption as `aria-label`.

* Add accessibility roles and labels to static templates.

* Update test fixtures with new ARIA tab attributes.
2022-06-28 14:05:52 +01:00
Nolan Darilek
2b45bbc4c4 Sign the CLA. (#6741) 2022-06-27 20:48:54 +01:00
Rizwan
bce3ec6e6f Update Installing TiddlyWiki on Node.js.tid (#6734) 2022-06-23 08:48:15 +01:00
jeremy@jermolene.com
5e35c8dda6 Revert "Allow global keyboard shortcuts to work in framed editor (#6705)"
This reverts commit 8e64e21039.

See https://github.com/Jermolene/TiddlyWiki5/pull/6705#issuecomment-1162738927
2022-06-22 08:18:13 +01:00
Mario Pietsch
8af7054efa Doc restructuring Plugin Install using core Libraries and with Node.js (#6722)
* Doc restructuring Plugin Install using core Libraries and with Node.js

* fixing typos and concerns raised by Jeremy
2022-06-20 13:55:12 +01:00
Mario Pietsch
10bc84ba6c Add Note formatting to an important paragraph in ScrollableWidget (#6729) 2022-06-20 13:51:44 +01:00
jeremy@jermolene.com
0391e1855c Fix new selection tracker to return relative coordinates 2022-06-17 16:40:29 +01:00
jeremy@jermolene.com
a29889a741 Fix layout bug introduced in d5030eb87b
Thanks @pmario
2022-06-17 14:03:36 +01:00
Marxsal
27609d2619 Add new instructions for saving with Koofr (#6726) 2022-06-17 08:01:11 +01:00
jeremy@jermolene.com
d5030eb87b Prevent Chrome from offering password autocomplete for search boxes
Fixes #6723
2022-06-14 09:45:49 +01:00
jeremy@jermolene.com
35b0833e0c Fix handling of {!!title} in a filter with no currentTiddler
Fixes #6721
2022-06-14 08:33:47 +01:00
Maurycy Zarzycki
45f5ba7d38 update Keyboard Shortcut documentation with information on how it interacts with navigate actions (#6703) 2022-06-11 09:53:06 +01:00
Maurycy Zarzycki
8e64e21039 Allow global keyboard shortcuts to work in framed editor (#6705)
Co-authored-by: Maurycy Zarzycki <maurycy@evidentlycube.com>
2022-06-11 08:57:08 +01:00
jeremy@jermolene.com
bb47cc97f5 Fix code_body typo 2022-05-29 10:51:49 +01:00
jeremy@jermolene.com
7e4722f07a Fix crash with missing palette tiddler 2022-05-25 18:08:08 +01:00
jeremy@jermolene.com
df7416d16b Dynannotate: Improve selection tracker
These improvements rely on the new JSON operators to be useful. Those improvements were originally in #6522 but now there's an updated version in #6666. Managing things is simpler if I merge these changes now
2022-05-25 15:23:11 +01:00
Robin Munn
a226975b3e Fix UTC format date string test properly this time (#6709)
Hours could also end up as a single-digit number, just like date, if
timezone offset is low enough that it wraps around midnight.
2022-05-24 10:02:45 +01:00
Robin Munn
2a62da1498 Fix unit test for formatDateString UTC format (#6708)
Now the test should run correctly in any timezone
2022-05-24 09:47:02 +01:00
Cameron Fischer
696c5c9c7a Compiled filters are cached (#6402)
* Compiled filters are cached

* Adjusting comments, and filtercache cap
2022-05-23 11:26:56 +01:00
275 changed files with 2456 additions and 20239 deletions

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,6 @@
title: $:/language/EditTemplate/
Caption: Editor
Body/External/Hint: This tiddler shows content stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself
Body/Placeholder: Type the text for this tiddler
Body/Preview/Type/Output: output

View File

@@ -31,5 +31,5 @@ Notes:
Examples:
* `--render "[!is[system]]" "[encodeuricomponent[]addprefix[tiddlers/]addsuffix[.html]]"` -- renders all non-system tiddlers as files in the subdirectory "tiddlers" with URL-encoded titles and the extension HTML
* `--render '[!is[system]]' '[encodeuricomponent[]addprefix[tiddlers/]addsuffix[.html]]'` -- renders all non-system tiddlers as files in the subdirectory "tiddlers" with URL-encoded titles and the extension HTML
* `--render '.' 'tiddlers.json' 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' '[tag[HelloThere]]'` -- renders the tiddlers tagged "HelloThere" to a JSON file named "tiddlers.json"

View File

@@ -1,5 +1,6 @@
title: $:/language/SideBar/
Caption: Sidebar
All/Caption: All
Contents/Caption: Contents
Drafts/Caption: Drafts

View File

@@ -50,7 +50,7 @@ Render individual tiddlers and save the results to the specified files
console.log("Rendering \"" + title + "\" to \"" + filepath + "\"");
}
var parser = wiki.parseTiddler(template || title),
widgetNode = wiki.makeWidget(parser,{variables: $tw.utils.extend({},variables,{currentTiddler: title})}),
widgetNode = wiki.makeWidget(parser,{variables: $tw.utils.extend({},variables,{currentTiddler: title,storyTiddler: title})}),
container = $tw.fakeDocument.createElement("div");
widgetNode.render(container,null);
var text = type === "text/html" ? container.innerHTML : container.textContent;

View File

@@ -40,6 +40,7 @@ Command.prototype.execute = function() {
$tw.utils.createFileDirectories(filename);
if(template) {
variables.currentTiddler = title;
variables.storyTiddler = title;
title = template;
}
if(name && value) {

View File

@@ -46,7 +46,7 @@ Command.prototype.execute = function() {
}
$tw.utils.each(tiddlers,function(title) {
var parser = wiki.parseTiddler(template),
widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}}),
widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title, storyTiddler: title}}),
container = $tw.fakeDocument.createElement("div");
widgetNode.render(container,null);
var text = type === "text/html" ? container.innerHTML : container.textContent,

View File

@@ -35,7 +35,7 @@ function FramedEngine(options) {
this.iframeDoc = this.iframeNode.contentWindow.document;
// (Firefox requires us to put some empty content in the iframe)
var paletteTitle = this.widget.wiki.getTiddlerText("$:/palette");
var colorScheme = this.widget.wiki.getTiddler(paletteTitle).fields["color-scheme"] || "light";
var colorScheme = (this.widget.wiki.getTiddler(paletteTitle) || {fields: {}}).fields["color-scheme"] || "light";
this.iframeDoc.open();
this.iframeDoc.write("<meta name='color-scheme' content='" + colorScheme + "'>");
this.iframeDoc.close();

View File

@@ -16,7 +16,9 @@ exports.map = function(operationSubFunction,options) {
return function(results,source,widget) {
if(results.length > 0) {
var inputTitles = results.toArray(),
index = 0;
index = 0,
suffixes = options.suffixes,
flatten = (suffixes[0] && suffixes[0][0] === "flat") ? true : false;
results.clear();
$tw.utils.each(inputTitles,function(title) {
var filtered = operationSubFunction(options.wiki.makeTiddlerIterator([title]),{
@@ -36,7 +38,13 @@ exports.map = function(operationSubFunction,options) {
}
}
});
results.push(filtered[0] || "");
if(filtered.length && flatten) {
$tw.utils.each(filtered,function(value) {
results.push(value);
})
} else {
results.push(filtered[0]||"");
}
++index;
});
}

View File

@@ -220,10 +220,18 @@ source: an iterator function for the source tiddlers, called source(iterator), w
widget: an optional widget node for retrieving the current tiddler etc.
*/
exports.compileFilter = function(filterString) {
if(!this.filterCache) {
this.filterCache = Object.create(null);
this.filterCacheCount = 0;
}
if(this.filterCache[filterString] !== undefined) {
return this.filterCache[filterString];
}
var filterParseTree;
try {
filterParseTree = this.parseFilter(filterString);
} catch(e) {
// We do not cache this result, so it adjusts along with localization changes
return function(source,widget) {
return [$tw.language.getString("Error/Filter") + ": " + e];
};
@@ -320,7 +328,7 @@ exports.compileFilter = function(filterString) {
})());
});
// Return a function that applies the operations to a source iterator of tiddler titles
return $tw.perf.measure("filter: " + filterString,function filterFunction(source,widget) {
var compiled = $tw.perf.measure("filter: " + filterString,function filterFunction(source,widget) {
if(!source) {
source = self.each;
} else if(typeof source === "object") { // Array or hashmap
@@ -335,6 +343,16 @@ exports.compileFilter = function(filterString) {
});
return results.toArray();
});
if(this.filterCacheCount >= 2000) {
// To prevent memory leak, we maintain an upper limit for cache size.
// Reset if exceeded. This should give us 95% of the benefit
// that no cache limit would give us.
this.filterCache = Object.create(null);
this.filterCacheCount = 0;
}
this.filterCache[filterString] = compiled;
this.filterCacheCount++;
return compiled;
};
})();

View File

@@ -0,0 +1,46 @@
/*\
title: $:/core/modules/filters/insertafter.js
type: application/javascript
module-type: filteroperator
Insert an item after another item in a list
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Order a list
*/
exports.insertafter = function(source,operator,options) {
var results = [];
source(function(tiddler,title) {
results.push(title);
});
var target = operator.operands[1] || (options.widget && options.widget.getVariable(operator.suffix || "currentTiddler"));
if(target !== operator.operand) {
// Remove the entry from the list if it is present
var pos = results.indexOf(operator.operand);
if(pos !== -1) {
results.splice(pos,1);
}
// Insert the entry after the target marker
pos = results.indexOf(target);
if(pos !== -1) {
results.splice(pos+1,0,operator.operand);
} else {
var suffix = operator.operands.length > 1 ? operator.suffix : "";
if(suffix === "start") {
results.splice(0,0,operator.operand);
} else {
results.push(operator.operand);
}
}
}
return results;
};
})();

View File

@@ -32,7 +32,12 @@ exports.insertbefore = function(source,operator,options) {
if(pos !== -1) {
results.splice(pos,0,operator.operand);
} else {
results.push(operator.operand);
var suffix = operator.operands.length > 1 ? operator.suffix : "";
if(suffix == "start") {
results.splice(0,0,operator.operand);
} else {
results.push(operator.operand);
}
}
}
return results;

View File

@@ -359,8 +359,9 @@ Server.prototype.listen = function(port,host,prefix) {
}
// Display the port number after we've started listening (the port number might have been specified as zero, in which case we will get an assigned port)
server.on("listening",function() {
var address = server.address();
$tw.utils.log("Serving on " + self.protocol + "://" + address.address + ":" + address.port + prefix,"brown/orange");
var address = server.address(),
url = self.protocol + "://" + (address.family === "IPv6" ? "[" + address.address + "]" : address.address) + ":" + address.port + prefix;
$tw.utils.log("Serving on " + url,"brown/orange");
$tw.utils.log("(press ctrl-C to exit)","red");
});
// Listen

View File

@@ -62,12 +62,14 @@ function loadIFrame(url,callback) {
Unload library iframe for given url
*/
function unloadIFrame(url){
$tw.utils.each(document.getElementsByTagName('iframe'), function(iframe) {
var iframes = document.getElementsByTagName('iframe');
for(var t=iframes.length-1; t--; t>=0) {
var iframe = iframes[t];
if(iframe.getAttribute("library") === "true" &&
iframe.getAttribute("src") === url) {
iframe.parentNode.removeChild(iframe);
}
});
}
}
function saveIFrameInfoTiddler(iframeInfo) {

View File

@@ -54,7 +54,9 @@ exports.startup = function() {
var hash = $tw.utils.getLocationHash();
if(hash !== $tw.locationHash) {
$tw.locationHash = hash;
openStartupTiddlers({defaultToCurrentStory: true});
if(hash !== "#") {
openStartupTiddlers({defaultToCurrentStory: true});
}
}
},false);
// Listen for the tm-browser-refresh message

View File

@@ -25,14 +25,13 @@ widget: widget to use as the context for the filter
exports.makeDraggable = function(options) {
var dragImageType = options.dragImageType || "dom",
dragImage,
domNode = options.domNode,
dragHandle = options.selector && domNode.querySelector(options.selector) || domNode;
domNode = options.domNode;
// Make the dom node draggable (not necessary for anchor tags)
if((domNode.tagName || "").toLowerCase() !== "a") {
dragHandle.setAttribute("draggable","true");
if(!options.selector && ((domNode.tagName || "").toLowerCase() !== "a")) {
domNode.setAttribute("draggable","true");
}
// Add event handlers
$tw.utils.addEventListeners(dragHandle,[
$tw.utils.addEventListeners(domNode,[
{name: "dragstart", handlerFunction: function(event) {
if(event.dataTransfer === undefined) {
return false;
@@ -41,19 +40,19 @@ exports.makeDraggable = function(options) {
var dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),
dragFilter = options.dragFilterFn && options.dragFilterFn(),
titles = dragTiddler ? [dragTiddler] : [],
startActions = options.startActions,
variables,
domNodeRect;
startActions = options.startActions,
variables,
domNodeRect;
if(dragFilter) {
titles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));
}
var titleString = $tw.utils.stringifyList(titles);
// Check that we've something to drag
if(titles.length > 0 && event.target === dragHandle) {
if(titles.length > 0 && (options.selector && $tw.utils.domMatchesSelector(event.target,options.selector) || event.target === domNode)) {
// Mark the drag in progress
$tw.dragInProgress = domNode;
// Set the dragging class on the element being dragged
$tw.utils.addClass(event.target,"tc-dragging");
$tw.utils.addClass(domNode,"tc-dragging");
// Invoke drag-start actions if given
if(startActions !== undefined) {
// Collect our variables
@@ -107,21 +106,22 @@ exports.makeDraggable = function(options) {
dataTransfer.setData("text/vnd.tiddler",jsonData);
dataTransfer.setData("text/plain",titleString);
dataTransfer.setData("text/x-moz-url","data:text/vnd.tiddler," + encodeURIComponent(jsonData));
} else {
dataTransfer.setData("URL","data:text/vnd.tiddler," + encodeURIComponent(jsonData));
}
dataTransfer.setData("URL","data:text/vnd.tiddler," + encodeURIComponent(jsonData));
dataTransfer.setData("Text",titleString);
event.stopPropagation();
}
return false;
}},
{name: "dragend", handlerFunction: function(event) {
if(event.target === domNode) {
if((options.selector && $tw.utils.domMatchesSelector(event.target,options.selector)) || event.target === domNode) {
// Collect the tiddlers being dragged
var dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),
dragFilter = options.dragFilterFn && options.dragFilterFn(),
titles = dragTiddler ? [dragTiddler] : [],
endActions = options.endActions,
variables;
endActions = options.endActions,
variables;
if(dragFilter) {
titles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));
}
@@ -135,7 +135,7 @@ exports.makeDraggable = function(options) {
options.widget.invokeActionString(endActions,options.widget,event,variables);
}
// Remove the dragging class on the element being dragged
$tw.utils.removeClass(event.target,"tc-dragging");
$tw.utils.removeClass(domNode,"tc-dragging");
// Delete the drag image element
if(dragImage) {
dragImage.parentNode.removeChild(dragImage);

View File

@@ -36,8 +36,9 @@ Notifier.prototype.display = function(title,options) {
if(!tiddler) {
return;
}
// Add classes
// Add classes and roles
$tw.utils.addClass(notification,"tc-notification");
notification.setAttribute("role","alert");
// Create the variables
var variables = $tw.utils.extend({currentTiddler: title},options.variables);
// Render the body of the notification

View File

@@ -46,7 +46,8 @@ ButtonWidget.prototype.render = function(parent,nextSibling) {
isPoppedUp = (this.popup || this.popupTitle) && this.isPoppedUp();
if(this.selectedClass) {
if((this.set || this.setTitle) && this.setTo && this.isSelected()) {
$tw.utils.pushTop(classes,this.selectedClass.split(" "));
$tw.utils.pushTop(classes, this.selectedClass.split(" "));
domNode.setAttribute("aria-checked", "true");
}
if(isPoppedUp) {
$tw.utils.pushTop(classes,this.selectedClass.split(" "));
@@ -66,6 +67,9 @@ ButtonWidget.prototype.render = function(parent,nextSibling) {
if(this["aria-label"]) {
domNode.setAttribute("aria-label",this["aria-label"]);
}
if (this.role) {
domNode.setAttribute("role", this.role);
}
if(this.popup || this.popupTitle) {
domNode.setAttribute("aria-expanded",isPoppedUp ? "true" : "false");
}
@@ -206,6 +210,7 @@ ButtonWidget.prototype.execute = function() {
this.popup = this.getAttribute("popup");
this.hover = this.getAttribute("hover");
this["aria-label"] = this.getAttribute("aria-label");
this.role = this.getAttribute("role");
this.tooltip = this.getAttribute("tooltip");
this.style = this.getAttribute("style");
this["class"] = this.getAttribute("class","");

View File

@@ -87,12 +87,32 @@ DraggableWidget.prototype.execute = function() {
this.makeChildWidgets();
};
DraggableWidget.prototype.updateDomNodeClasses = function() {
var domNodeClasses = this.domNodes[0].className.split(" "),
oldClasses = this.draggableClasses.split(" ");
this.draggableClasses = this.getAttribute("class");
//Remove classes assigned from the old value of class attribute
$tw.utils.each(oldClasses,function(oldClass){
var i = domNodeClasses.indexOf(oldClass);
if(i !== -1) {
domNodeClasses.splice(i,1);
}
});
//Add new classes from updated class attribute.
$tw.utils.pushTop(domNodeClasses,this.draggableClasses);
this.domNodes[0].setAttribute("class",domNodeClasses.join(" "))
}
/*
Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering
*/
DraggableWidget.prototype.refresh = function(changedTiddlers) {
var changedAttributes = this.computeAttributes();
if($tw.utils.count(changedAttributes) > 0) {
var changedAttributes = this.computeAttributes(),
changedAttributesCount = $tw.utils.count(changedAttributes);
if(changedAttributesCount === 1 && changedAttributes["class"]) {
this.updateDomNodeClasses();
} else if(changedAttributesCount > 0) {
this.refreshSelf();
return true;
}
@@ -101,4 +121,4 @@ DraggableWidget.prototype.refresh = function(changedTiddlers) {
exports.draggable = DraggableWidget;
})();
})();

View File

@@ -42,16 +42,22 @@ ElementWidget.prototype.render = function(parent,nextSibling) {
this.tag = "h" + headingLevel;
}
// Select the namespace for the tag
var tagNamespaces = {
var XHTML_NAMESPACE = "http://www.w3.org/1999/xhtml",
tagNamespaces = {
svg: "http://www.w3.org/2000/svg",
math: "http://www.w3.org/1998/Math/MathML",
body: "http://www.w3.org/1999/xhtml"
body: XHTML_NAMESPACE
};
this.namespace = tagNamespaces[this.tag];
if(this.namespace) {
this.setVariable("namespace",this.namespace);
} else {
this.namespace = this.getVariable("namespace",{defaultValue: "http://www.w3.org/1999/xhtml"});
if(this.hasAttribute("xmlns")) {
this.namespace = this.getAttribute("xmlns");
this.setVariable("namespace",this.namespace);
} else {
this.namespace = this.getVariable("namespace",{defaultValue: XHTML_NAMESPACE});
}
}
// Invoke the th-rendering-element hook
var parseTreeNodes = $tw.hooks.invokeHook("th-rendering-element",null,this);

View File

@@ -111,6 +111,9 @@ ImageWidget.prototype.render = function(parent,nextSibling) {
if(this.imageAlt) {
domNode.setAttribute("alt",this.imageAlt);
}
if(this.lazyLoading && tag === "img") {
domNode.setAttribute("loading",this.lazyLoading);
}
// Add classes when the image loads or fails
$tw.utils.addClass(domNode,"tc-image-loading");
domNode.addEventListener("load",function() {
@@ -137,6 +140,7 @@ ImageWidget.prototype.execute = function() {
this.imageClass = this.getAttribute("class");
this.imageTooltip = this.getAttribute("tooltip");
this.imageAlt = this.getAttribute("alt");
this.lazyLoading = this.getAttribute("loading");
};
/*

View File

@@ -50,7 +50,7 @@ exports.getTextReference = function(textRef,defaultText,currTiddlerTitle) {
if(tr.field) {
var tiddler = this.getTiddler(title);
if(tr.field === "title") { // Special case so we can return the title of a non-existent tiddler
return title;
return title || defaultText;
} else if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {
return tiddler.getFieldString(tr.field);
} else {

View File

@@ -1,7 +1,7 @@
title: $:/core/templates/server/static.sidebar.wikitext
\whitespace trim
<div class="tc-sidebar-scrollable" style="overflow: auto;">
<div class="tc-sidebar-scrollable" style="overflow: auto;" role="region" aria-label={{$:/language/SideBar/Caption}}>
<div class="tc-sidebar-header">
<h1 class="tc-site-title">
<$transclude tiddler="$:/SiteTitle"/>

View File

@@ -19,8 +19,8 @@ title: $:/core/templates/server/static.tiddler.html
</head>
<body class="tc-body">
<$transclude tiddler="$:/core/templates/server/static.sidebar.wikitext" mode="inline"/>
<section class="tc-story-river">
<div class="tc-tiddler-frame">
<section class="tc-story-river" role="main">
<div class="tc-tiddler-frame" role="article">
<$transclude tiddler="$:/core/templates/server/static.tiddler.wikitext" mode="inline"/>
</div>
</section>

View File

@@ -23,7 +23,9 @@ title: $:/core/ui/EditTemplate
<div
data-tiddler-title=<<currentTiddler>>
data-tags={{!!tags}}
class={{{ tc-tiddler-frame tc-tiddler-edit-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}>
class={{{ tc-tiddler-frame tc-tiddler-edit-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}
role="region"
aria-label={{$:/language/EditTemplate/Caption}}>
<$fieldmangler>
<$vars
storyTiddler=<<currentTiddler>>

View File

@@ -2,7 +2,7 @@ title: $:/core/ui/PageTemplate/story
tags: $:/tags/PageTemplate
\whitespace trim
<section class="tc-story-river">
<section class="tc-story-river" role="main">
<section class="story-backdrop">

View File

@@ -51,12 +51,14 @@ tags: $:/tags/SideBarSegment
<$keyboard key="((input-tab-right))" actions=<<set-next-input-tab>>>
<$keyboard key="((input-tab-left))" actions=<<set-next-input-tab "before">>>
<$keyboard key="((advanced-search-sidebar))" actions=<<advanced-search-actions>>>
<form class="tc-form-inline">
<$macrocall $name="keyboard-driven-input" tiddler=<<editTiddler>> storeTitle=<<searchTiddler>>
selectionStateTitle=<<searchListState>> refreshTitle="$:/temp/search/refresh" type="search"
tag="input" focus={{$:/config/Search/AutoFocus}} focusPopup=<<qualify "$:/state/popup/search-dropdown">>
class="tc-popup-handle" filterMinLength={{$:/config/Search/MinLength}} inputCancelActions=<<cancel-search-actions>>
inputAcceptActions=<<input-accept-actions>> inputAcceptVariantActions=<<input-accept-variant-actions>> cancelPopups="yes"
configTiddlerFilter="[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]"/>
</form>
</$keyboard>
</$keyboard>
</$keyboard>

View File

@@ -1,7 +1,7 @@
title: $:/core/ui/SideBarSegments/tabs
tags: $:/tags/SideBarSegment
<div class="tc-sidebar-lists tc-sidebar-tabs">
<div class="tc-sidebar-lists tc-sidebar-tabs" role="region" aria-label={{$:/language/SideBar/Caption}}>
<$macrocall $name="tabs" tabsList="[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]" default={{$:/config/DefaultSidebarTab}} state="$:/state/tab/sidebar" class="tc-sidebar-tabs-main" explicitState="$:/state/tab/sidebar--595412856"/>

View File

@@ -7,7 +7,7 @@ $:/state/folded/$(currentTiddler)$
\define cancel-delete-tiddler-actions(message) <$action-sendmessage $message="tm-$message$-tiddler"/>
\import [all[shadows+tiddlers]tag[$:/tags/Macro/View]!has[draft.of]]
<$vars storyTiddler=<<currentTiddler>> tiddlerInfoState=<<qualify "$:/state/popup/tiddler-info">>>
<div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-view-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[shadow]is[tiddler]then[tc-tiddler-overridden-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}>
<div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-view-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[shadow]is[tiddler]then[tc-tiddler-overridden-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}} role="article">
<$list filter="[all[shadows+tiddlers]tag[$:/tags/ViewTemplate]!has[draft.of]]" variable="listItem">
<$transclude tiddler=<<listItem>>/>
</$list>

View File

@@ -0,0 +1,7 @@
title: $:/core/ui/ViewTemplate/body/rendered-plain-text
code-body: yes
\whitespace trim
<$wikify name="text" text={{!!text}} type={{!!type}}>
<$codeblock code=<<text>> language="css"/>
</$wikify>

View File

@@ -4,7 +4,11 @@ tags: $:/tags/ViewTemplate
\whitespace trim
<$reveal type="nomatch" stateTitle=<<folded-state>> text="hide" tag="div" retain="yes" animate="yes">
<div class="tc-subtitle">
<$link to={{!!modifier}} />
<$view field="modified" format="date" template={{$:/language/Tiddler/DateFormat}}/>
<$list filter="[all[shadows+tiddlers]tag[$:/tags/ViewTemplate/Subtitle]!has[draft.of]]" variable="subtitleTiddler" counter="indexSubtitleTiddler">
<$list filter="[<indexSubtitleTiddler-first>match[no]]" variable="ignore">
&nbsp;
</$list>
<$transclude tiddler=<<subtitleTiddler>> mode="inline"/>
</$list>
</div>
</$reveal>

View File

@@ -0,0 +1,4 @@
title: $:/core/ui/ViewTemplate/subtitle/modified
tags: $:/tags/ViewTemplate/Subtitle
<$view field="modified" format="date" template={{$:/language/Tiddler/DateFormat}}/>

View File

@@ -0,0 +1,4 @@
title: $:/core/ui/ViewTemplate/subtitle/modifier
tags: $:/tags/ViewTemplate/Subtitle
<$link to={{!!modifier}}/>

View File

@@ -1,6 +1,7 @@
title: $:/config/ViewTemplateBodyFilters/
tags: $:/tags/ViewTemplateBodyFilter
stylesheet: [tag[$:/tags/Stylesheet]then[$:/core/ui/ViewTemplate/body/rendered-plain-text]]
system: [prefix[$:/boot/]] [prefix[$:/config/]] [prefix[$:/core/macros]] [prefix[$:/core/save/]] [prefix[$:/core/templates/]] [prefix[$:/core/ui/]split[/]count[]compare:number:eq[4]] [prefix[$:/info/]] [prefix[$:/language/]] [prefix[$:/languages/]] [prefix[$:/snippets/]] [prefix[$:/state/]] [prefix[$:/status/]] [prefix[$:/info/]] [prefix[$:/temp/]] +[!is[image]limit[1]then[$:/core/ui/ViewTemplate/body/code]]
code-body: [field:code-body[yes]then[$:/core/ui/ViewTemplate/body/code]]
import: [field:plugin-type[import]then[$:/core/ui/ViewTemplate/body/import]]

View File

@@ -22,12 +22,12 @@ tags: $:/tags/Macro
<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter="+[insertbefore<actionTiddler>,<currentTiddler>]"/>
\end
\define list-links-draggable(tiddler,field:"list",type:"ul",subtype:"li",class:"",itemTemplate)
\define list-links-draggable(tiddler,field:"list",emptyMessage,type:"ul",subtype:"li",class:"",itemTemplate)
\whitespace trim
<span class="tc-links-draggable-list">
<$vars targetTiddler="""$tiddler$""" targetField="""$field$""">
<$type$ class="$class$">
<$list filter="[list[$tiddler$!!$field$]]">
<$list filter="[list[$tiddler$!!$field$]]" emptyMessage=<<__emptyMessage__>>>
<$droppable actions=<<list-links-draggable-drop-actions>> tag="""$subtype$""" enable=<<tv-enable-drag-and-drop>>>
<div class="tc-droppable-placeholder"/>
<div>

View File

@@ -1,10 +1,10 @@
title: $:/core/macros/tabs
tags: $:/tags/Macro
code_body: yes
code-body: yes
\define tabs-button()
\whitespace trim
<$button set=<<tabsState>> setTo=<<currentTab>> default=<<__default__>> selectedClass="tc-tab-selected" tooltip={{!!tooltip}}>
<$button set=<<tabsState>> setTo=<<currentTab>> default=<<__default__>> selectedClass="tc-tab-selected" tooltip={{!!tooltip}} role="switch">
<$tiddler tiddler=<<save-currentTiddler>>>
<$set name="tv-wikilinks" value="no">
<$transclude tiddler=<<__buttonTemplate__>> mode="inline">
@@ -48,7 +48,7 @@ code_body: yes
\define tabs(tabsList,default,state:"$:/state/tab",class,template,buttonTemplate,retain,actions,explicitState)
\whitespace trim
<$qualify title=<<__state__>> name="qualifiedState">
<$set name="tabsState" filter={{{ [<__explicitState__>minlength[1]] ~[<qualifiedState>] }}}>
<$let tabsState={{{ [<__explicitState__>minlength[1]] ~[<qualifiedState>] }}}>
<div class={{{ [[tc-tab-set]addsuffix[ ]addsuffix<__class__>] }}}>
<div class={{{ [[tc-tab-buttons]addsuffix[ ]addsuffix<__class__>] }}}>
<<tabs-tab-list>>
@@ -58,6 +58,6 @@ code_body: yes
<<tabs-tab-body>>
</div>
</div>
</$set>
</$let>
</$qualify>
\end

View File

@@ -11,7 +11,7 @@ second-search-filter: [tags[]is[system]search:title<userInput>sort[]]
\whitespace trim
<$set name="tag" value={{{ [<__tiddler__>get[text]] }}}>
<$list filter="[<saveTiddler>!contains:$tagField$<tag>!match[]]" variable="ignore" emptyMessage="<$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter='-[<tag>]'/>">
<$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter="[<tag>]"/>
<$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter="[<tag>trim[]]"/>
$actions$
</$list>
</$set>
@@ -52,7 +52,7 @@ $actions$
</span><$button popup=<<qualify "$:/state/popup/tags-auto-complete">> class="tc-btn-invisible tc-btn-dropdown" tooltip={{$:/language/EditTemplate/Tags/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Tags/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button><$reveal state=<<storeTitle>> type="nomatch" text=""><$button class="tc-btn-invisible tc-small-gap tc-btn-dropdown" tooltip={{$:/language/EditTemplate/Tags/ClearInput/Hint}} aria-label={{$:/language/EditTemplate/Tags/ClearInput/Caption}}>{{$:/core/images/close-button}}<<delete-tag-state-tiddlers>></$button></$reveal><span class="tc-add-tag-button tc-small-gap-left">
<$set name="tag" value={{{ [<newTagNameTiddler>get[text]] }}}>
<$button set=<<newTagNameTiddler>> setTo="" class="">
<$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter="[<tag>]"/>
<$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter="[<tag>trim[]]"/>
$actions$
<$set name="currentTiddlerCSSEscaped" value={{{ [<saveTiddler>escapecss[]] }}}>
<<delete-tag-state-tiddlers>><$action-sendmessage $message="tm-focus-selector" $param=<<get-tagpicker-focus-selector>>/>

View File

@@ -16,7 +16,7 @@ color:$(foregroundColor)$;
$element-attributes$
class="tc-tag-label tc-btn-invisible"
style=<<tag-pill-styles>>
>$actions$<$transclude tiddler="""$icon$"""/><$view tiddler=<<__tag__>> field="title" format="text" />
>$actions$<$transclude tiddler="""$icon$"""/><$view tiddler=<<__tag__>> field="title" format="text" /></$element-tag$>
\end
\define tag-pill-body(tag,icon,colour,palette,element-tag,element-attributes,actions)

View File

@@ -3,11 +3,13 @@ tags: $:/tags/Macro
\define toc-caption()
\whitespace trim
<span class="tc-toc-caption tc-tiny-gap-left">
<$set name="tv-wikilinks" value="no">
<$transclude field="caption">
<$view field="title"/>
</$transclude>
</$set>
</span>
\end
\define toc-body(tag,sort:"",itemClassFilter,exclude,path)
@@ -51,7 +53,6 @@ tags: $:/tags/Macro
{{$:/core/images/down-arrow}}
</$button>
</$reveal>
&#32;
<<toc-caption>>
</$link>
<$reveal type="match" stateTitle=<<toc-state>> text="open">
@@ -71,14 +72,12 @@ tags: $:/tags/Macro
<$reveal type="nomatch" stateTitle=<<toc-state>> text="open">
<$button setTitle=<<toc-state>> setTo="open" class="tc-btn-invisible tc-popup-keep">
{{$:/core/images/right-arrow}}
&#32;
<<toc-caption>>
</$button>
</$reveal>
<$reveal type="match" stateTitle=<<toc-state>> text="open">
<$button setTitle=<<toc-state>> setTo="close" class="tc-btn-invisible tc-popup-keep">
{{$:/core/images/down-arrow}}
&#32;
<<toc-caption>>
</$button>
</$reveal>
@@ -127,7 +126,6 @@ tags: $:/tags/Macro
</$button>
</$reveal>
</$list>
&#32;
<<toc-caption>>
</$link>
<$reveal type="match" stateTitle=<<toc-state>> text="open">
@@ -147,14 +145,12 @@ tags: $:/tags/Macro
<$reveal type="nomatch" stateTitle=<<toc-state>> text="open">
<$button setTitle=<<toc-state>> setTo="open" class="tc-btn-invisible tc-popup-keep">
{{$:/core/images/right-arrow}}
&#32;
<<toc-caption>>
</$button>
</$reveal>
<$reveal type="match" stateTitle=<<toc-state>> text="open">
<$button setTitle=<<toc-state>> setTo="close" class="tc-btn-invisible tc-popup-keep">
{{$:/core/images/down-arrow}}
&#32;
<<toc-caption>>
</$button>
</$reveal>

View File

@@ -23,11 +23,7 @@ title: $:/snippets/peek-stylesheets
<$reveal type="match" state=<<state>> text="yes" tag="div">
<$set name="source" tiddler=<<currentTiddler>>>
<$wikify name="styles" text=<<source>>>
<pre>
<code>
<$text text=<<styles>>/>
</code>
</pre>
<$codeblock code=<<styles>> language="css"/>
</$wikify>
</$set>
</$reveal>

View File

@@ -1,3 +1,3 @@
title: $:/tags/ViewTemplateBodyFilter
list: $:/config/ViewTemplateBodyFilters/system $:/config/ViewTemplateBodyFilters/code-body $:/config/ViewTemplateBodyFilters/import $:/config/ViewTemplateBodyFilters/plugin $:/config/ViewTemplateBodyFilters/hide-body $:/config/ViewTemplateBodyFilters/default
list: $:/config/ViewTemplateBodyFilters/hide-body $:/config/ViewTemplateBodyFilters/code-body $:/config/ViewTemplateBodyFilters/stylesheet $:/config/ViewTemplateBodyFilters/system $:/config/ViewTemplateBodyFilters/import $:/config/ViewTemplateBodyFilters/plugin $:/config/ViewTemplateBodyFilters/default

View File

@@ -0,0 +1,2 @@
title: $:/tags/ViewTemplate/Subtitle
list: $:/core/ui/ViewTemplate/subtitle/modifier $:/core/ui/ViewTemplate/subtitle/modified

View File

@@ -0,0 +1,8 @@
created: 20220504131459155
modified: 20220504131522349
title: $:/DefaultTiddlers
type: text/vnd.tiddlywiki
HelloThere
KaTeX
$:/plugins/tiddlywiki/katex/developer

View File

@@ -1,5 +0,0 @@
title: $:/DefaultTiddlers
HelloThere
KaTeX
ImplementationNotes

View File

@@ -1,4 +1,7 @@
created: 20220504124110967
modified: 20220504124250020
title: HelloThere
type: text/vnd.tiddlywiki
This is a TiddlyWiki plugin for mathematical and chemical typesetting based on KaTeX from Khan Academy.
@@ -6,7 +9,7 @@ It is completely self-contained, and doesn't need an Internet connection in orde
! Installation
To add the plugin to your own TiddlyWiki5, just drag this link to the browser window:
To add the plugin to your own wiki, just //drag the following link to your ~TiddlyWiki browser window//.
[[$:/plugins/tiddlywiki/katex]]

View File

@@ -0,0 +1,8 @@
created: 20220504123802219
modified: 20220504123918414
title: LaTeX
type: text/vnd.tiddlywiki
<<<https://en.wikipedia.org/wiki/LaTeX
LaTeX is widely used in academia for the communication and publication of scientific documents in many fields, including mathematics, computer science, engineering, physics, chemistry, economics, linguistics, quantitative psychology, philosophy, and political science.
<<<

View File

@@ -0,0 +1,8 @@
created: 20220504123347104
modified: 20220504123400803
title: TiddlyWiki
type: text/vnd.tiddlywiki
TiddlyWiki is a rich, interactive tool for manipulating complex data with structure that doesn't easily fit into conventional tools like spreadsheets or wordprocessors.
Learn more at: https://tiddlywiki.com

View File

@@ -0,0 +1,6 @@
created: 20220504123412027
modified: 20220504123416593
title: TiddlyWiki5
type: text/vnd.tiddlywiki
{{TiddlyWiki}}

View File

@@ -1,83 +0,0 @@
caption: 5.2.3
created: 20220325131459084
modified: 20220325131459084
tags: ReleaseNotes
title: Release 5.2.3
type: text/vnd.tiddlywiki
\define contributor(username)
<a href="https://github.com/$username$" style="text-decoration:none;font-size:24px;" class="tc-tiddlylink-external" target="_blank" rel="noopener noreferrer"><img src="https://github.com/$username$.png?size=32" width="32" height="32"/> @<$text text=<<__username__>>/></a>
\end
//[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.2.2...master]]//
! Plugin Improvements
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/6625">> [[BrowserStorage Plugin]] to be able to delete existing tiddlers as well as modify or add tiddlers
! Translation improvements
* Polish
! Usability Improvements
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/issues/5916">> ActionSetFieldWidget to avoid inadvertent changes to the current tiddler
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/pull/6589">> "put" and "upload" savers (as used by TiddlyHost) to display error responses from the server
! Widget Improvements
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/6561">> CheckboxWidget to support for the ''listField'' and ''filter'' attributes
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/6581">> DraggableWidget to support an ''enabled'' attribute
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/6582">> DraggableWidget to pass additional context variables to the ''dragstartactions'' action string
! Filter improvements
*
! Hackability Improvements
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/6624">> [[colour Macro]] to allow for palette-specific fallback colours to be specified
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/6578">> whitespace and indentation of [[tabs Macro]] to improve readability
! Developer Improvements
* A number of core tiddlers have been refactored to use `\whitespace trim` for improved readability. The work was split into a number of PRs: [[#6257|https://github.com/Jermolene/TiddlyWiki5/pull/6257]], [[#6265|https://github.com/Jermolene/TiddlyWiki5/pull/6265]], [[#6269|https://github.com/Jermolene/TiddlyWiki5/pull/6269]], [[#6270|https://github.com/Jermolene/TiddlyWiki5/pull/6270]], [[#6272|https://github.com/Jermolene/TiddlyWiki5/pull/6272]], [[#6275|https://github.com/Jermolene/TiddlyWiki5/pull/6275]], [[#6276|https://github.com/Jermolene/TiddlyWiki5/pull/6276]], [[#6587|https://github.com/Jermolene/TiddlyWiki5/pull/6587]], [[#6600|https://github.com/Jermolene/TiddlyWiki5/pull/6600]], [[#6604|https://github.com/Jermolene/TiddlyWiki5/pull/6604]], [[#6611|https://github.com/Jermolene/TiddlyWiki5/pull/6611]]
! Node.js Improvements
*
! Performance Improvements
*
! Bug Fixes
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/6614">> bug with formatting UTC date strings
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/6603">> SaveCommand crash when attempting to save missing tiddlers
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/6599">> fix broken [[style block behaviour|Styles and Classes in WikiText]]
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/6594">> incorrect display of image system tiddlers as text
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/1c16f12d6f5b81d86f79c3e687eec05b3a8d45bf">> erroneous link rendering within captions in [[list-links Macro]]
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/758d590837c30ddde9cc7b8171273756680f1545">> erroneous link rendering within captions in [[list-links-draggable Macro]]
! 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:
* <<contributor Arlen22>>
* <<contributor btheado>>
* <<contributor BurningTreeC>>
* <<contributor damscal>>
* <<contributor es-kha>>
* <<contributor EvidentlyCube>>
* <<contributor FlashSystems>>
* <<contributor flibbles>>
* <<contributor linonetwo>>
* <<contributor Marxsal>>
* <<contributor pmario>>
* <<contributor rmunn>>
* <<contributor saqimtiaz>>
* <<contributor simonbaird>>
* <<contributor tobibeer>>

View File

@@ -0,0 +1,59 @@
caption: 5.2.4
created: 20220802100223020
modified: 20220802100223020
tags: ReleaseNotes
title: Release 5.2.4
type: text/vnd.tiddlywiki
//[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.2.3...master]]//
! Plugin Improvements
*
! Translation improvements
*
! Accessibility Improvements
*
! Usability Improvements
*
! Widget Improvements
*
! Filter improvements
*
! Hackability Improvements
*
! Bug Fixes
*
! Developer Improvements
*
! Node.js Improvements
*
! Performance Improvements
*
! 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 """
""">>

View File

@@ -4,6 +4,9 @@ modified: 20150428204930183
This is a pre-release build of TiddlyWiki, [[also available in empty form|https://tiddlywiki.com/prerelease/empty.html]]. It is provided for testing purposes. ''Please don't try to use it for anything important'' -- you should use the latest official release from https://tiddlywiki.com.
<$list filter="[tag[ReleaseNotes]!has[released]!sort[created]]">
<h1><$text text=<<currentTiddler>>/></h1>
<div class="tc-titlebar">
<h2 class="tc-title"><$text text=<<currentTiddler>>/></h2>
</div>
<div class="tc-subtitle">Updated: <$view field="modified" format="date" template={{$:/language/Tiddler/DateFormat}}/></div>
<$transclude mode="block"/>
</$list>

View File

@@ -2,4 +2,4 @@ title: expected-html-tabs-horizontal-all
type: text/html
description: Horizontal tabs with all parameters active. This is the expected HTML output from a test in test-wikitext-tabs-macro.js
<p><div class="tc-tab-set "><div class="tc-tab-buttons "><button class="">t 1</button><button class=" tc-tab-selected">t 2</button><button class="">desc</button><button class="">TabFour</button></div><div class="tc-tab-divider "></div><div class="tc-tab-content "><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal"><h2 class=""><a class="tc-tiddlylink tc-tiddlylink-resolves" href="#TabTwo">TabTwo</a></h2><p><p>Text tab 2</p></p></div><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal" hidden="true"></div></div></div></p>
<p><div class="tc-tab-set "><div class="tc-tab-buttons "><button class="" role="switch">t 1</button><button aria-checked="true" class=" tc-tab-selected" role="switch">t 2</button><button class="" role="switch">desc</button><button class="" role="switch">TabFour</button></div><div class="tc-tab-divider "></div><div class="tc-tab-content "><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal"><h2 class=""><a class="tc-tiddlylink tc-tiddlylink-resolves" href="#TabTwo">TabTwo</a></h2><p><p>Text tab 2</p></p></div><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal" hidden="true"></div></div></div></p>

View File

@@ -2,4 +2,4 @@ title: expected-html-tabs-horizontal
type: text/html
description: Horizontal tabs test - This is the expected HTML output from a test in test-wikitext-tabs-macro.js
<p><div class="tc-tab-set "><div class="tc-tab-buttons "><button class="">t 1</button><button class=" tc-tab-selected">t 2</button><button class="">t 3</button><button class="">TabFour</button></div><div class="tc-tab-divider "></div><div class="tc-tab-content "><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal"><p>Text tab 2</p></div><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal" hidden="true"></div></div></div></p>
<p><div class="tc-tab-set "><div class="tc-tab-buttons "><button class="" role="switch">t 1</button><button aria-checked="true" class=" tc-tab-selected" role="switch">t 2</button><button class="" role="switch">t 3</button><button class="" role="switch">TabFour</button></div><div class="tc-tab-divider "></div><div class="tc-tab-content "><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal"><p>Text tab 2</p></div><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal" hidden="true"></div></div></div></p>

View File

@@ -2,4 +2,4 @@ title: expected-html-tabs-vertical
type: text/html
description: Vertical tabs test -- This is the expected HTML output from the test in test-wikitext-tabs-macro.js
<p><div class="tc-tab-set tc-vertical"><div class="tc-tab-buttons tc-vertical"><button class="">t 1</button><button class=" tc-tab-selected">t 2</button><button class="">t 3</button><button class="">TabFour</button></div><div class="tc-tab-divider tc-vertical"></div><div class="tc-tab-content tc-vertical"><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal"><p>Text tab 2</p></div><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal" hidden="true"></div></div></div></p>
<p><div class="tc-tab-set tc-vertical"><div class="tc-tab-buttons tc-vertical"><button class="" role="switch">t 1</button><button aria-checked="true" class=" tc-tab-selected" role="switch">t 2</button><button class="" role="switch">t 3</button><button class="" role="switch">TabFour</button></div><div class="tc-tab-divider tc-vertical"></div><div class="tc-tab-content tc-vertical"><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal"><p>Text tab 2</p></div><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal" hidden="true"></div></div></div></p>

View File

@@ -621,6 +621,8 @@ Tests the filtering mechanism.
});
it("should handle indirect operands", function() {
expect(wiki.filterTiddlers("[{!!missing}]").join(",")).toBe("");
expect(wiki.filterTiddlers("[{!!title}]").join(",")).toBe("");
expect(wiki.filterTiddlers("[prefix{Tiddler8}] +[sort[title]]").join(",")).toBe("Tiddler Three,TiddlerOne");
expect(wiki.filterTiddlers("[modifier{Tiddler8!!test-field}] +[sort[title]]").join(",")).toBe("TiddlerOne");
var fakeWidget = {wiki: wiki, getVariable: function() {return "Tiddler Three";}};
@@ -745,7 +747,46 @@ Tests the filtering mechanism.
expect(wiki.filterTiddlers("a [[b c]] +[append{TiddlerSix!!filter}]").join(",")).toBe("a,b c,one,a a,[subfilter{hasList!!list}]");
});
it("should handle the insertafter operator", function() {
var widget = require("$:/core/modules/widgets/widget.js");
var rootWidget = new widget.widget({ type:"widget", children:[ {type:"widget", children:[]} ] },
{ wiki:wiki, document:$tw.document});
rootWidget.makeChildWidgets();
var anchorWidget = rootWidget.children[0];
rootWidget.setVariable("myVar","c");
rootWidget.setVariable("tidTitle","e");
rootWidget.setVariable("tidList","one tid with spaces");
// Position title specified as suffix.
expect(wiki.filterTiddlers("a b c d e f +[insertafter:myVar[f]]",anchorWidget).join(",")).toBe("a,b,c,f,d,e");
expect(wiki.filterTiddlers("a b c d e f +[insertafter:myVar<tidTitle>]",anchorWidget).join(",")).toBe("a,b,c,e,d,f");
expect(wiki.filterTiddlers("a b c d e f +[insertafter:myVar[gg gg]]",anchorWidget).join(",")).toBe("a,b,c,gg gg,d,e,f");
expect(wiki.filterTiddlers("a b c d e +[insertafter:myVar<tidList>]",anchorWidget).join(",")).toBe("a,b,c,one tid with spaces,d,e");
expect(wiki.filterTiddlers("a b c d e f +[insertafter:tidTitle{TiddlerOne!!tags}]",anchorWidget).join(",")).toBe("a,b,c,d,e,one,f");
// Position title specified as parameter.
expect(wiki.filterTiddlers("a b c d e +[insertafter[f],[a]]",anchorWidget).join(",")).toBe("a,f,b,c,d,e");
expect(wiki.filterTiddlers("a b c d e +[insertafter[f],<myVar>]",anchorWidget).join(",")).toBe("a,b,c,f,d,e");
// Parameter takes precedence over suffix.
expect(wiki.filterTiddlers("a b c d e +[insertafter:myVar[f],[a]]",anchorWidget).join(",")).toBe("a,f,b,c,d,e");
// No position title.
expect(wiki.filterTiddlers("a b c [[with space]] +[insertafter[b]]").join(",")).toBe("a,c,with space,b");
// Position title does not exist, and no suffix given.
expect(wiki.filterTiddlers("a b c d e +[insertafter:foo[b]]").join(",")).toBe("a,c,d,e,b");
expect(wiki.filterTiddlers("a b c d e +[insertafter[b],[foo]]").join(",")).toBe("a,c,d,e,b");
expect(wiki.filterTiddlers("a b c d e +[insertafter[b],<foo>]").join(",")).toBe("a,c,d,e,b");
// Position title does not exist, but "start" or "end" given as suffix
expect(wiki.filterTiddlers("a b c d e +[insertafter:start[b],[foo]]").join(",")).toBe("b,a,c,d,e");
expect(wiki.filterTiddlers("a b c d e +[insertafter:start[b],<foo>]").join(",")).toBe("b,a,c,d,e");
expect(wiki.filterTiddlers("a b c d e +[insertafter:end[b],[foo]]").join(",")).toBe("a,c,d,e,b");
expect(wiki.filterTiddlers("a b c d e +[insertafter:end[b],<foo>]").join(",")).toBe("a,c,d,e,b");
});
it("should handle the insertbefore operator", function() {
var widget = require("$:/core/modules/widgets/widget.js");
var rootWidget = new widget.widget({ type:"widget", children:[ {type:"widget", children:[]} ] },
@@ -773,10 +814,16 @@ Tests the filtering mechanism.
// No position title.
expect(wiki.filterTiddlers("a b c [[with space]] +[insertbefore[b]]").join(",")).toBe("a,c,with space,b");
// Position title does not exist.
// Position title does not exist, and no suffix given.
expect(wiki.filterTiddlers("a b c d e +[insertbefore:foo[b]]").join(",")).toBe("a,c,d,e,b");
expect(wiki.filterTiddlers("a b c d e +[insertbefore[b],[foo]]").join(",")).toBe("a,c,d,e,b");
expect(wiki.filterTiddlers("a b c d e +[insertbefore[b],<foo>]").join(",")).toBe("a,c,d,e,b");
// Position title does not exist, but "start" or "end" given as suffix
expect(wiki.filterTiddlers("a b c d e +[insertbefore:start[b],[foo]]").join(",")).toBe("b,a,c,d,e");
expect(wiki.filterTiddlers("a b c d e +[insertbefore:start[b],<foo>]").join(",")).toBe("b,a,c,d,e");
expect(wiki.filterTiddlers("a b c d e +[insertbefore:end[b],[foo]]").join(",")).toBe("a,c,d,e,b");
expect(wiki.filterTiddlers("a b c d e +[insertbefore:end[b],<foo>]").join(",")).toBe("a,c,d,e,b");
});
it("should handle the move operator", function() {

View File

@@ -416,6 +416,8 @@ describe("'reduce' and 'intersection' filter prefix tests", function() {
expect(wiki.filterTiddlers("[tag[shopping]] :map[get[description]else{!!title}]").join(",")).toBe("A square of rich chocolate cake,a round yellow seed,Milk,Rice Pudding");
// Return the first title from :map if the filter returns more than one result
expect(wiki.filterTiddlers("[tag[shopping]] :map[tags[]]").join(",")).toBe("shopping,shopping,shopping,shopping");
// Return all titles from :map if the flat suffix is used
expect(wiki.filterTiddlers("[tag[shopping]] :map:flat[tags[]]").join(",")).toBe("shopping,food,shopping,food,shopping,dairy,drinks,shopping,dairy");
// Prepend the position in the list using the index and length variables
expect(wiki.filterTiddlers("[tag[shopping]] :map[get[title]addprefix[-]addprefix<length>addprefix[of]addprefix<index>]").join(",")).toBe("0of4-Brownies,1of4-Chick Peas,2of4-Milk,3of4-Rice Pudding");
});

View File

@@ -78,7 +78,12 @@ describe("Utility tests", function() {
expect(fds(d,"ddd hh mm ssss")).toBe("Sun 17 41 2828");
expect(fds(d,"MM0DD")).toBe("1109");
expect(fds(d,"MM0\\D\\D")).toBe("110DD");
expect(fds(d,"[UTC]YYYY0MM0DD0hh0mm0ssXXX")).toBe("20141109174128542");
const day = d.getUTCDate();
const dayStr = ("" + day).padStart(2, '0');
const hours = d.getUTCHours();
const hoursStr = ("" + hours).padStart(2, '0');
const expectedUtcStr = `201411${dayStr}${hoursStr}4128542`;
expect(fds(d,"[UTC]YYYY0MM0DD0hh0mm0ssXXX")).toBe(expectedUtcStr);
// test some edge cases found at: https://en.wikipedia.org/wiki/ISO_week_date
// 2016-11-13 is Week 45 and it's a Sunday (month nr: 10)

View File

@@ -0,0 +1,6 @@
created: 20220721202136733
modified: 20220721202136733
title: $:/config/DefaultSidebarTab
type: text/vnd.tiddlywiki
Table of Contents

View File

@@ -0,0 +1,30 @@
created: 20220721200137586
modified: 20220721200137586
tags: [[Table of Contents]]
title: Code of Conduct
type: text/vnd.tiddlywiki
This community exists because TiddlyWiki is more useful when people share and work together.
This community is a beautiful but fragile thing: a collection of diverse people from all over the planet, united in their interest in the project, and their commitment to helping one another achieve and learn more.
We try to make the community as broad and welcoming as possible by remembering some basic principles of culture and behaviour.
These principles guide technical and non-technical decisions, and help contributors and leaders support our project and community.
* We are optimistic and hopeful
* We aim to foster a learning environment that is collaborative and safe for everyone
* We recognise that the motivation for sharing and helping is usually for appreciation, and not financial gain, and so we take care to acknowledge and ''thank the people who enrich the community by sharing what they have created''
* While we are united in our interest in TiddlyWiki, we differ in every other conceivable way. We choose to focus on what unites us, and ''avoid unnecessarily mixing contentious topics like religion and politics''
* We treat each other with respect, and start with the assumption that ''others are acting in good faith''
* We try to use our strength as a community to help others
* We avoid responding when angry or upset because we try to de-escalate conflict
* We make sure we critique ideas, not people
* When we disagree with others we do so graciously, and treat others with dignity and respoect
* We do not tolerate intolerance towards others
* We seek first to understand others, and then to be understood
* We have fun
Our discussions are in English. It is not the first language of many people in the community, nor do we all share the same cultural background and reference points. So we take care to use language that is clear and unambigous, and avoid cultural references or jokes that will not be widely understood.
As an inclusive community, we are committed to making sure that TiddlyWiki is an accessible tool that understands the needs of people with disabilities.

View File

@@ -1,5 +1,5 @@
created: 20211126104006194
list: [[Page and tiddler layout customisation]] [[Creating new buttons for the ViewToolbar and page controls]] [[Structuring TiddlyWiki]] Tagging [[Introduction to Lists]] [[Icon Gallery]] [[How to widen tiddlers (aka storyriver)]] [[How to turn off camel case linking]] [[How to put the last modification date in a banner]] [[How to hide the author's and other fields with CSS]] [[How to export tiddlers]] [[How to Customize TiddlyDesktop]] [[Editing Tiddlers with Vim]] [[Concatenating text and variables using macro substitution]] [[Demonstration: keyboard-driven-input Macro]] HelloThere GettingStarted Community
modified: 20211126111221917
created: 20220728145919904
list: Brackets Base64 HelloThere GettingStarted Community
modified: 20220728145919904
title: $:/StoryList
type: text/vnd.tiddlywiki

View File

@@ -0,0 +1,14 @@
created: 20220728145925343
modified: 20220728150440771
tags: Definitions
title: Brackets
type: text/vnd.tiddlywiki
WikiText syntax uses a number of different types of brackets. Their names are shown in the table below:
|!Appearance |!Name |!Short name |!Usage |
|`()` |Round brackets |Parenthesis |Not used in WikiText |
|`[]` |Square brackets |Brackets |[[Links|Linking in WikiText]], [[Filters|Filters]] |
|`{}` |Curly brackets |Braces |[[Text references|TextReference]], [[Filtered attributes|HTML in WikiText]] |
|`<>` |Angle brackets |Chevrons |[[HTML elements and widgets|HTML in WikiText]], [[Macros|Macros in WikiText]] |

View File

@@ -1,6 +1,5 @@
title: $:/_tw_shared/styles
tags: $:/tags/Stylesheet TiddlyWikiSitesMenu
code-body: yes
\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock

View File

@@ -10,3 +10,10 @@ A ''Keyboard Shortcut Tiddler'' is made of three parts:
If the [[Keyboard Shortcut Descriptor]] has the form `((my-shortcut))` it's a ''reference'' to a ''configuration Tiddler'' that stores the corresponding [[Keyboard Shortcut|KeyboardShortcuts]]
In order to make a ''shortcut'' editable through the <<.controlpanel-tab KeyboardShortcuts>> Tab in the $:/ControlPanel it's sufficient to create a tiddler `$:/config/ShortcutInfo/my-shortcut`, where the ''suffix'' is the ''reference'' used for the [[Keyboard Shortcut|KeyboardShortcuts]]
!! Notes on wiki navigation
If you want to create keyboard shortcuts for navigation, there are two things to keep in mind:
* If your shortcut uses ''Ctrl'', you need to include `$scroll="yes"` in the [[ActionNavigateWidget's|ActionNavigateWidget]] attributes otherwise the action will be ignored.
* The actions need to be wrapped in [[NavigatorWidget]] like in this [[New Tiddler keyboard shortcut|$:/core/ui/KeyboardShortcuts/new-tiddler]].

View File

@@ -1,5 +1,5 @@
created: 20150124125646000
modified: 20211127140005352
modified: 20220729141540007
tags: Tagging
title: Order of Tagged Tiddlers
type: text/vnd.tiddlywiki
@@ -13,6 +13,8 @@ When ~TiddlyWiki generates a list of the tiddlers that have a particular tag (e.
# In each remaining tiddler <<.place T>>, look for a <<.field list-after>> field. If this has a tiddler title as its value, place tiddler <<.place T>> just <<.em after>> that one.
#* As a special case, if the field exists but its value is empty, place <<.place T>> at the very end of the list.
# If any tiddlers still remain, place them at the end of the list in ascending alphabetical order of title. The difference between capital and lowercase letters is ignored.
The ordering of tiddlers with a particular tag can be directly modified using drag and drop within a tag pill dropdown. The underlying [[list-tagged-draggable Macro]] can also be used elsewhere.

View File

@@ -1,7 +1,9 @@
created: 201308252136
modified: 201308252136
created: 20130825213600000
modified: 20220613145033713
tags: Concepts
title: TiddlyWiki5
type: text/vnd.tiddlywiki
~TiddlyWiki5 is a reboot of TiddlyWiki for the next 25 years. It is a complete interactive wiki in JavaScript that can be run in the browser or on the server under [[Node.js]].
The ~TiddlyWiki repository can be found at GitHub.

View File

@@ -1,13 +1,15 @@
created: 20131129094739786
modified: 20140211195455541
modified: 20220612091858504
tags: Definitions
title: Node.js
type: text/vnd.tiddlywiki
''Node.js'' is a downloadable application for your PC, Mac or Linux computer that lets it run JavaScript applications. Unlike ~JavaScript applications running in a web browser, Node.js code has full access to the file system and other resources of the computer, enabling it to perform the roles that have traditionally been the preserve of languages like Java, PHP and Python. See http://nodejs.org for more details.
''Node.js'' is a downloadable application for your PC, Mac or Linux computer that lets it run JavaScript applications. Unlike ~JavaScript applications running in a web browser, Node.js code has full access to the file system and other resources of the computer, enabling it to perform the roles that have traditionally been the preserve of languages like Java, PHP and Python.
For ~TiddlyWiki, Node.js means that we can have a single code base that can run in the browser or on the server, giving great flexibility in how it is used.
For end users, Node.js is no more complicated to install than a web browser, but unlocks powerful capabilities such as the ability to run ~TiddlyWiki as a web server that you can connect to from other devices.
See [[TiddlyWiki on Node.js]] for more details.
''Node.js'' is a ''trademark'' of the ~OpenJS Foundation. See: https://nodejs.org fore more details.
[[TiddlyWiki on Node.js]] will give an overview about the possibilities using a client-server configuration.

View File

@@ -15,5 +15,6 @@ Other implementations of the API include:
* [[TiddlyWiki App Engine Server|https://github.com/rsc/tiddly]], a 300-line Go implementation from Russ Cox
* [[TiddlyWiki 5 server module|https://github.com/Jermolene/TiddlyWiki5/blob/master/core/modules/commands/server.js]], the bare-bones subset of the API implemented in TiddlyWiki version 5 for Node.js
* [[tiddly-wiki-server|https://github.com/nathanielknight/tiddly-wiki-server]], an implementation based on Rust and SQLite
As of early 2017, none is currently as complete as TiddlyWeb itself.

View File

@@ -1,6 +1,5 @@
title: $:/_tw5.com/CustomStoryTiddlerTemplateDemo/Styles
tags: $:/tags/Stylesheet
code-body: yes
.tc-custom-tiddler-template {
border: 3px solid <<colour muted-foreground>>;

View File

@@ -0,0 +1,28 @@
created: 20220223004441865
modified: 20220223004441865
tags: [[Operator Examples]] [[insertafter Operator]]
title: insertafter Operator (Examples)
type: text/vnd.tiddlywiki
\define after-title() Friday
\define missing-title() Yesterday
\define display-variable(name)
''<$text text=<<__name__>>/>'': <code><$text text={{{ [<__name__>getvariable[]] }}}/></code>
\end
These examples use the following predefined variables:
* <<display-variable after-title>>
* <<display-variable missing-title>>
<<.operator-example 1 """[list[Days of the Week]insertafter[Today]]""">>
<<.operator-example 2 """[list[Days of the Week]insertafter[Today],[Tuesday]]""">>
<<.operator-example 3 """[list[Days of the Week]insertafter[Today],<after-title>]""">>
<<.operator-example 4 """[list[Days of the Week]insertafter:after-title[Today]]""">>
<<.operator-example 5 """[list[Days of the Week]insertafter[Today],<missing-title>]""">>
<<.operator-example 6 """[list[Days of the Week]insertafter:missing-title[Today]]""">>

View File

@@ -0,0 +1,35 @@
caption: insertafter
created: 20170406090122441
modified: 20220223004441865
op-input: a [[selection of titles|Title Selection]]
op-output: the input tiddler list with the new entry inserted
op-parameter: the <<.op insertafter>> operator accepts 1 or 2 parameters, see below for details
op-purpose: insert an item <<.place T>> into a list immediately after an item <<.place A>>
op-suffix: (optional) the name of a variable containing the title of the tiddler after which this one should be inserted
tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]]
title: insertafter Operator
type: text/vnd.tiddlywiki
<<.from-version "5.2.3">>
The <<.op insertafter>> operator requires at least one parameter which specifies the title to insert into the input list. A second parameter can be used to specify the title after which the new title should be inserted.
A suffix can also be used to specify <<.place A>>, the title after which the new title should be inserted, but this form is deprecated. Instead, the two-parameter form is recommended. If the two-parameter form is used, the suffixes ''start'' and ''end'' can be used to specify where the item should be inserted if <<.place A>> is not found.
```
insertafter:<after-title-variable>[<title>]
insertafter:<missing-location>[<title>],[<after-title>]
```
* ''title'' : a title <<.place T>> to insert in the input list.
* ''after-title'' : (optional). Insert <<.place T>> after this title <<.place A>> in the input list.
* ''after-title-variable'' : (optional). The name of a variable specifying <<.place A>> instead of the `after-title` parameter.
* ''missing-location'' : (optional). Either `start` or `end`: where to insert <<.place T>> if <<.place A>> is not found in the list.
If the item <<.place A>> isn't present in the input list then the new item is inserted at the end of the list. <<.from-version "5.2.3">> The suffixes ''start'' and ''end'' can be spedified to control where the new item is inserted when <<.place A>> is not found. The suffix ''end'' is the default, inserting the new item at the end of the list. The suffix ''start'' will cause the new item to be inserted at the start of the list when <<.place A>> is not found.
<<.tip "Either [[parameter|Filter Parameter]] can be a string, a text reference or a variable">>
<<.tip "If <<.place A>> is specified as both a suffix and a parameter, the parameter takes precedence">>
<<.operator-examples "insertafter">>

View File

@@ -5,7 +5,7 @@ op-input: a [[selection of titles|Title Selection]]
op-output: the input tiddler list with the new entry inserted
op-parameter: <<.from-version "5.2.2">> the <<.op insertbefore>> operator accepts 1 or 2 parameters, see below for details
op-purpose: insert an item <<.place T>> into a list immediately before an item <<.place B>>
op-suffix: (optional) the name of a variable containing the title of the tiddler before which this one should be inserted
op-suffix: <<.from-version "5.2.3">> (optional) the name of a variable containing the title of the tiddler before which this one should be inserted
tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]]
title: insertbefore Operator
type: text/vnd.tiddlywiki
@@ -14,15 +14,21 @@ type: text/vnd.tiddlywiki
The <<.op insertbefore>> operator requires at least one parameter which specifies the title to insert into the input list. A second parameter can be used to specify the title before which the new title should be inserted.
<<.from-version "5.2.3">>
Using the suffix to specify <<.place B>>, the title before which the new title should be inserted, is deprecated. Instead, the two-parameter form is recommended. If the two-parameter form is used, the suffixes ''start'' and ''end'' can be used to specify where the item should be inserted if <<.place B>> is not found.
```
insertbefore:<before-title-variable>[<title>],[<before-title>]
insertbefore:<before-title-variable>[<title>]
insertbefore:<missing-location>[<title>],[<before-title>]
```
* ''title'' : a title <<.place T>> to insert in the input list.
* ''before-title'' : (optional). Insert <<.place T>> before this title <<.place B>> in the input list.
* ''before-title-variable'' : (optional). The name of a variable specifying <<.place B>> instead of the `before-title` parameter.
* ''missing-location'' : (optional). Either `start` or `end`: where to insert <<.place T>> if <<.place B>> is not found in the list.
If the item <<.place B>> isn't present in the input list then the new item is inserted at the end of the list.
If the item <<.place B>> isn't present in the input list then the new item is inserted at the end of the list. <<.from-version "5.2.3">> The suffixes ''start'' and ''end'' can be spedified to control where the new item is inserted when <<.place B>> is not found. The suffix ''end'' is the default, inserting the new item at the end of the list. The suffix ''start'' will cause the new item to be inserted at the start of the list when <<.place B>> is not found.
<<.tip "Either [[parameter|Filter Parameter]] can be a string, a text reference or a variable">>

View File

@@ -1,5 +1,5 @@
created: 20210618134753828
modified: 20211125152755859
modified: 20220724162340642
tags: [[Filter Syntax]] [[Filter Run Prefix Examples]] [[Map Filter Run Prefix]]
title: Map Filter Run Prefix (Examples)
type: text/vnd.tiddlywiki
@@ -15,12 +15,30 @@ For each title in a shopping list, calculate the total cost of purchasing each i
<<.operator-example 2 "[tag[shopping]] :map[get[quantity]else[0]multiply{!!price}]">>
Get the tags of all tiddlers tagged `Widget:`
<<.operator-example 3 "[tag[Widgets]] :map:flat[tagging[]] :and[!is[blank]unique[]]">>
<<.tip "Without the `flat` suffix the `:map` filter run only returns the first result for each input title">>
!! Comparison between `:map` with and without the `flat` suffix
The `:map` filter run will return at least as many outputs as given in the input. By default one input item will result in exactly one output item. When the filter run transforms an input item into an empty result, the output for that item will be an empty string. When the filter run transforms an input item into multiple items, only the first item will appear in the output. This behavior can be overridden by providing the `flat` suffix. The `flat` suffix will cause all the items to appear in the output.
| `:map` | `:map:flat` |
|^<<.operator-example m0.1 "[range[4]] :map[match[this matches nothing]]">>|^<<.operator-example m0.2 "[range[4]] :map:flat[match[this matches nothing]]">>|
|^<<.operator-example m1.1 "[range[4]] :map[range<currentTiddler>]">>|^<<.operator-example m1.2 "[range[4]] :map:flat[range<currentTiddler>]">>|
|^<<.operator-example m2.1 "[range[4]] :map[range<currentTiddler>]">>|^<<.operator-example m2.2 "[range[4]] :map:flat[range<currentTiddler>first[]]">>|
|^<<.operator-example m3.1 "[range[4]] :map[range<currentTiddler>sum[]]">>|^<<.operator-example m3.2 "[range[4]] :map:flat[range<currentTiddler>sum[]]">>|
|^<<.operator-example m4.1 "[[1,2,3]] [[4,5]] :map[split[,]]">>|^<<.operator-example m4.2 "[[1,2,3]] [[4,5]] :map:flat[split[,]]">>|
|^<<.operator-example m5.1 "[[1,2,3]] [[4,5]] :map[split[,]]">>|^<<.operator-example m5.2 "[[1,2,3]] [[4,5]] :map:flat[split[,]first[]]">>|
!! Comparison between `:map` and `:and`/`+` filter run prefixes
The functionality of the `:map` filter run prefix has some overlap with the `:and` prefix (alias `+`). They will sometimes return the same results as each other. In at least these cases, the results will be different:
# The `:and` filter run can modify the number of items (either increase or decrease). The `:map` run will never alter the number of items.
# The number of items in the `:and` filter run will also decrease due to de-duplication. The `:map` run will not de-duplicate.
# The number of items in the `:and` filter run will also decrease due to [[de-duplication|Dominant Append]]. The `:map` run will not [[de-duplicate|Dominant Append]].
# Explicit references to the "currentTiddler" variable will behave differently
# Implicit references to the "currentTiddler" using TextReference will behave differently.

View File

@@ -1,5 +1,5 @@
created: 20210618133745003
modified: 20211029025541750
modified: 20220720190146771
tags: [[Filter Syntax]] [[Filter Run Prefix]]
title: Map Filter Run Prefix
type: text/vnd.tiddlywiki
@@ -8,6 +8,7 @@ type: text/vnd.tiddlywiki
|''purpose'' |modify input titles by the result of evaluating this filter run for each item |
|''input'' |all titles from previous filter runs |
|''suffix''|<<.from-version "5.2.3">> `flat` to return all results from the filter run, If omitted (default), only the first result is returned.|
|''output''|the input titles as modified by the result of this filter run |
Each input title from previous runs is passed to this run in turn. The filter run transforms the input titles and the output of this run replaces the input title. For example, the filter run `[get[caption]else{!!title}]` replaces each input title with its caption field, unless the field does not exist in which case the title is preserved.
@@ -22,6 +23,6 @@ The following variables are available within the filter run:
* ''revIndex'' - <<.from-version "5.2.1">> the reverse numeric index of the current list item (with zero being the last item in the list).
* ''length'' - <<.from-version "5.2.1">> the total length of the input list.
Filter runs used with the `:map` prefix should return the same number of items that they are passed. Any missing entries will be treated as an empty string. In particular, when retrieving the value of a field with the [[get Operator]] it is helpful to guard against a missing field value using the [[else Operator]]. For example `[get[myfield]else[default-value]...`.
Filter runs used with the `:map` prefix should return at least the same number of items that they are passed. Any missing entries will be treated as an empty string. In particular, when retrieving the value of a field with the [[get Operator]] it is helpful to guard against a missing field value using the [[else Operator]]. For example `[get[myfield]else[default-value]...`.
[[Examples|Map Filter Run Prefix (Examples)]]

View File

@@ -4,6 +4,12 @@ tags: [[Working with TiddlyWiki]]
title: GettingStarted
type: text/vnd.tiddlywiki
The easiest way to use TiddlyWiki is to sign up for a free account with [[Tiddlyhost]], an independently run community service:
https://tiddlyhost.com/
If you find Tiddlyhost useful, please consider [[donation or sponsorship|https://tiddlyhost.com/donate]].
Click here to download an empty copy of TiddlyWiki: {{$:/editions/tw5.com/snippets/download-empty-button}}
The next step is to choose a method for saving changes. There's a wide variety of methods available, with different features and limitations. Click on the badge for a method to see more information about it. You can also click on one of the platform filters to restrict the listing to methods that work with that platform.

View File

@@ -1,6 +1,6 @@
created: 20130822170200000
list: [[A Gentle Guide to TiddlyWiki]] [[Discover TiddlyWiki]] [[Some of the things you can do with TiddlyWiki]] [[Ten reasons to switch to TiddlyWiki]] Examples [[What happened to the original TiddlyWiki?]] [[HelloThumbnail - TWEUM2017]]
modified: 20220325130817150
modified: 20220802122551819
tags: TableOfContents
title: HelloThere
type: text/vnd.tiddlywiki

View File

@@ -1,11 +1,11 @@
caption: {{!!title}} - ^^deprecated^^
created: 20141001132300000
modified: 201804111739
modified: 20220704174221300
tags: [[How to apply custom styles]] $:/deprecated
title: How to apply custom styles by tag
type: text/vnd.tiddlywiki
<<.deprecated-since "5.1.16 <- click" "Custom styles by data-tags">>. Also see: [[How to apply custom styles]]
<<.deprecated-since "5.1.16" "Custom styles by data-tags">>. Also see: [[How to apply custom styles]]
----

View File

@@ -8,7 +8,7 @@ type: text/vnd.tiddlywiki
Before experimenting with TiddlyDesktop internals you should find the location of the “user configuration folder” - click the “Settings” button on the main TiddlyDesktop window, and then click the button “Open user config folder”. Then move up to locate the parent folder, which should be called “TiddlyDesktop”. If things go wrong, you can reset TiddlyDesktop to its factory state by deleting this entire folder.
Click the `Backstage` button on the main TiddlyDesktop window to open the backstage wiki. This is is a Node.js-like instance of TiddlyWiki that runs the UI and logic of TiddlyDesktop.
Click the `Backstage` button on the main TiddlyDesktop window to open the backstage wiki. This is a Node.js-like instance of TiddlyWiki that runs the UI and logic of TiddlyDesktop.
!! How do I get rid of the "Add a ~TiddlyWiki Folder" button.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -5,7 +5,7 @@ tags: Macros [[Core Macros]]
title: tag Macro
type: text/vnd.tiddlywiki
The <<.def tag>> [[macro|Macros]] generates a tag pill for a specified tag.
The <<.def tag>> [[macro|Macros]] generates a tag pill for a specified tag. Clicking the tag pill opens a dropdown. This can be compared to the [[tag-pill Macro]] which also features other parameters.
!! Parameters

View File

@@ -13,6 +13,8 @@ The <<.def list-links-draggable>> [[macro|Macros]] renders the ListField of a ti
: The title of the tiddler containing the list
;field
: The name of the field containing the list (defaults to `list`)
;emptyMessage
: Optional wikitext to display if there is no output (tiddler is not existed, field is not existed or empty)
;type
: The element tag to use for the list wrapper (defaults to `ul`)
;subtype

View File

@@ -15,6 +15,7 @@ System tiddlers in the namespace `$:/info/` are used to expose information about
|!Title |!Description |
|[[$:/info/startup-timestamp]] |<<.from-version "5.1.23">> Startup timestamp in TiddlyWiki date format |
|[[$:/info/browser]] |Running in the browser? ("yes" or "no") |
|[[$:/info/mobile]] |<<.from-version "5.2.3">> Is running on a mobile device? ("yes" or "no" - eg, ''<<example full>>'') |
|[[$:/info/browser/language]] |<<.from-version "5.1.20">> Language as reported by browser (note that some browsers report two character codes such as `en` while others report full codes such as `en-GB`) |
|[[$:/info/browser/screen/width]] |Screen width in pixels |
|[[$:/info/browser/screen/height]] |Screen height in pixels |

View File

@@ -1,5 +1,5 @@
created: 20130826122000000
modified: 20190928082000464
modified: 20220613124446953
tags: Mechanisms
title: PluginMechanism
type: text/vnd.tiddlywiki

View File

@@ -1,5 +1,5 @@
created: 20140617211749290
modified: 20211104172343220
modified: 20220613114121229
tags: [[TiddlyWiki on Node.js]]
title: Environment Variables on Node.js
type: text/vnd.tiddlywiki
@@ -11,15 +11,15 @@ type: text/vnd.tiddlywiki
* `TIDDLYWIKI_LANGUAGE_PATH` - Search path for languages
* `TIDDLYWIKI_EDITION_PATH` - Search path for editions (used by the InitCommand)
''Note 1'': The delimiter may vary between operating systems. While on Windows a semicolon `;` is used, Linux implements a colon `:`.
''Note 2'': On Linux systems, it may be necessary to //''export''// the variable as well as to define it.
<$macrocall $name=".note" _="""''1.'' The delimiter may vary between operating systems. While on Windows a semicolon `;` is used, Linux implements a colon `:`.<br><br>''2.'' On Linux systems, it may be necessary to //''export''// the variable as well as to define it.
"""/>
The additional paths should each point to folders structured like the equivalent directories in the TiddlyWiki5 GitHub repository: the plugin, theme and language directories contain `publisher/pluginname/<files>` while the edition directories contain `editionname/<files>`
The additional paths should each point to folders structured like the equivalent directories in the ~TiddlyWiki5 GitHub repository: the plugin, theme and language directories contain `publisher/pluginname/<files>` while the edition directories contain `editionname/<files>`
For example:
```
TIDDLYWIKI_PLUGIN_PATH=~/MyPluginStore
export TIDDLYWIKI_PLUGIN_PATH=~/MyPluginStore
tiddlywiki mywiki --build index
```

View File

@@ -23,9 +23,9 @@ type: text/vnd.tiddlywiki
#> `npm install -g tiddlywiki`
#> If it fails with an error you may need to re-run the command as an administrator:
#> `sudo npm install -g tiddlywiki` (Mac/Linux)
# Check TiddlyWiki is installed by typing:
# Ensure ~TiddlyWiki is installed by typing:
#> `tiddlywiki --version`
# In response, you should see TiddlyWiki report its current version (eg "<<version>>"; you may also see other debugging information reported)
#* In response, you should see TiddlyWiki report its current version (eg "<<version>>". You may also see other debugging information reported.)
# Try it out:
## `tiddlywiki mynewwiki --init server` to create a folder for a new wiki that includes server-related components
## `tiddlywiki mynewwiki --listen` to start TiddlyWiki
@@ -37,11 +37,6 @@ type: text/vnd.tiddlywiki
The `-g` flag causes TiddlyWiki to be installed globally. Without it, TiddlyWiki will only be available in the directory where you installed it.
If you are using Debian or Debian-based Linux and you are receiving a `node: command not found` error though node.js package is installed, you may need to create a symbolic link between `nodejs` and `node`. Consult your distro's manual and `whereis` to correctly create a link. See github [[issue 1434|http://github.com/Jermolene/TiddlyWiki5/issues/1434]]
Example Debian v8.0: `sudo ln -s /usr/bin/nodejs /usr/bin/node`
You can also install prior versions like this:
> npm install -g tiddlywiki@5.1.13
<<.warning "If you are using Debian or Debian-based Linux and you are receiving a `node: command not found` error though node.js package is installed, you may need to create a symbolic link between `nodejs` and `node`. Consult your distro's manual and `whereis` to correctly create a link. See github [[issue 1434|http://github.com/Jermolene/TiddlyWiki5/issues/1434]]. <br><br>Example Debian v8.0: `sudo ln -s /usr/bin/nodejs /usr/bin/node`">>
<br>
<<.tip "You can also install prior versions like this: <br><code> npm install -g tiddlywiki@5.1.13</code>">>

View File

@@ -1,27 +1,19 @@
created: 20191022095653896
modified: 20191102131824766
tags: [[TiddlyWiki on Node.js]]
modified: 20220617130125173
tags: [[TiddlyWiki on Node.js]] PluginsCS
title: Installing custom plugins on Node.js
type: text/vnd.tiddlywiki
There are several ways in which custom plugins that are not part of TiddlyWiki's plugin library can be installed when using TiddlyWiki under Node.js. (See [[Installing a plugin from the plugin library]] for instructions on installing plugins from the library).
\rules except wikilink
* Arrange the PluginFolders containing the plugins in a convenient shared location and then use [[environment variables|Environment Variables on Node.js]] to tell TiddlyWiki to search those folders. The plugins can be referenced in `tiddlywiki.info` by their name (e.g. `tiddlytools/magic`)
* Place the PluginFolders containing the plugins in a `plugins` folder within the [[wiki folder|TiddlyWikiFolders]]. TiddlyWiki will attempt to include every subfolder as a plugin. Do not add the plugin names to `tiddlywiki.info`. Do not add the PluginFolders under a specific namespace:<br><pre>.
├── plugins
│   ├── relink
│   │   ├── js
│   │   ├── plugin.info
│   │   └── tiddlers
│   └── relink-markdown
│   ├── js
│   ├── plugin.info
│   └── readme.tid
├── tiddlers
└── tiddlywiki.info
</pre>
* Depending on how TiddlyWiki itself has been installed, plugins can also be installed by copying the plugin folders into the `plugins` folder of the repository. This is only recommended if working with a forked copy of the repo. It is not recommended if TiddlyWiki has been installed with npm because npm is liable to overwrite the installation when performing an update
! Introduction
Note that including a plugin as an ordinary tiddler (e.g. by dragging and dropping a plugin into the browser) will result in the plugin only being active in the browser, and not available under Node.js.
There are several ways in which official plugins and custom plugins can be installed when using TiddlyWiki with a Node.js client-server configuration.
<$macrocall $name=".note" _="""For instructions on installing plugins from libraries to ''single-file'' wikis learn more at [[Plugins]].
"""/>
!! Plugin Load Order
{{Plugin Ordering}}

View File

@@ -0,0 +1,40 @@
created: 20220611123344385
modified: 20220617132351460
tags: [[TiddlyWiki on Node.js]] PluginsCS
title: Installing official plugins on Node.js
type: text/vnd.tiddlywiki
Follow these instructions when using TiddlyWiki with a client-server Node.js configuration:
# Identify the plugins you want to install using the ''Plugins'' tab of <<controlPanel-plugin-link>> (''don't'' install the plugins from here, though)
#* Plugins are identified by their type (ie language, theme or plugin) and their publisher and title. For example, the plugin `$:/plugins/tiddlywiki/internals` is referred to as ''tiddlywiki/internals''
# Quit the server if it is running
# Edit the `tiddlywiki.info` file (it is in JSON format) and locate the `plugins`, `themes` or `languages` section (see below)
# Add entries corresponding to the plugins you wish to add
#* Take care to retain ''commas ''to separate items
#* Do ''not'' terminate the last item in a list with a comma
# Restart the server
```
{
"plugins": [
"tiddlywiki/codemirror"
],
"themes": [
"tiddlywiki/vanilla",
"tiddlywiki/snowwhite"
],
"languages": [
"es-ES",
"fr-FR",
"en-EN"
]
}
```
<$macrocall $name=".note" _="An overview of working with plugins can be found at [[Plugins]].<br>Also see: [[Installing custom plugins on Node.js]]."/>

View File

@@ -0,0 +1,9 @@
created: 20220612082924589
list: [[Installing custom plugins on Node.js]] [[Installing official plugins on Node.js]] [[Uninstalling a plugin with Node.js]]
modified: 20220617124533352
title: PluginsCS
type: text/vnd.tiddlywiki
This tiddler is used as a tag in the [[Plugins]] tiddler to create a sorted list
<<list-links-draggable>>

View File

@@ -1,15 +1,20 @@
created: 20131129094353704
modified: 20200318115527226
modified: 20220617114433107
tags: Platforms
title: TiddlyWiki on Node.js
type: text/vnd.tiddlywiki
\rules except wikilink
Running TiddlyWiki on [[Node.js]] brings several important benefits over and above the single file version:
* You can edit your content on any suitably compatible HTML5 browser, including smartphones and tablets
* Individual tiddlers are stored in separate files, which you can organise as you wish
* The ability to build multiple wikis that blend different combinations of shared and unique content
* You can edit your content on any modern browser, including smartphones and tablets
<<.warning """Note that TiddlyWiki on Node.js doesn't currently support directly modifying the tiddler files via the file system while it is running. The server must be restarted in order to for changes to take effect. The recommended way to interact with a running wiki is via the HTTP or JavaScript APIs.""">>
For more information see:

View File

@@ -0,0 +1,31 @@
created: 20220611125113040
modified: 20220617133704286
tags: [[TiddlyWiki on Node.js]] PluginsCS
title: Uninstalling a plugin with Node.js
type: text/vnd.tiddlywiki
Follow these instructions when using TiddlyWiki with client-server Node.js configuration:
# Quit the server if it is running
# Edit the `tiddlywiki.info` file (it is in JSON format) and locate the `plugins` and `themes` section (see below)
# Remove the entries corresponding to the plugins you wish to remove
#* Take care to retain ''commas'' to separate items
#* Do ''not'' terminate the last item in a list with a comma
# Restart the server
```
{
"plugins": [
"tiddlywiki/codemirror"
],
"themes": [
"tiddlywiki/vanilla",
"tiddlywiki/snowwhite"
]
}
```
<$macrocall $name=".note" _="An overview of working with plugins can be found at [[Plugins]]"/>

View File

@@ -1,18 +1,18 @@
created: 20131219100520659
modified: 20200523092939199
modified: 20220613172345723
tags: [[TiddlyWiki on Node.js]]
title: Using TiddlyWiki on Node.js
type: text/vnd.tiddlywiki
TiddlyWiki5 includes a set of [[Commands]] for use on the command line to perform an extensive set of operations based on TiddlyWikiFolders, TiddlerFiles and TiddlyWikiFiles.
~TiddlyWiki5 includes a set of commands for use on the command line to perform an extensive set of operations based on TiddlyWikiFolders, TiddlerFiles.
For example, the following command loads the tiddlers from a TiddlyWiki HTML file and then saves one of them in static HTML:
For example, the following command loads the tiddlers from a ~TiddlyWiki HTML file and then saves one of them in static HTML:
```
tiddlywiki --verbose --load mywiki.html --rendertiddler ReadMe ./readme.html
```
Running `tiddlywiki` from the command line boots the TiddlyWiki kernel, loads the core plugins and establishes an empty wiki store. It then sequentially processes the command line arguments from left to right. The arguments are separated with spaces.
Running `tiddlywiki` from the command line boots the ~TiddlyWiki kernel, loads the core plugins and establishes an empty wiki store. It then sequentially processes the command line arguments from left to right. The arguments are separated with spaces.
<<.from-version "5.1.20">> First, there can be zero or more plugin references identified by the prefix `+` for plugin names or `++` for a path to a plugin folder. These plugins are loaded in addition to any specified in the [[TiddlyWikiFolder|TiddlyWikiFolders]].

View File

@@ -3,5 +3,6 @@ modified: 20211124214855770
tags: $:/deprecated
title: TiddlyWiki in the Sky for TiddlyWeb
type: text/vnd.tiddlywiki
caption: {{!!title}} - ^^deprecated^^
The term "TiddlyWiki in the Sky for TiddlyWeb" was used to refer to the ability for content to be synchronised between TiddlyWiki running in the browser and a TiddlyWeb server. This configuration should still work but is no longer commonly used.
The term "TiddlyWiki in the Sky for TiddlyWeb" was used to refer to the ability for content to be synchronised between TiddlyWiki running in the browser and a TiddlyWeb server. This configuration should still work but is no longer commonly used.

View File

@@ -1,51 +1,38 @@
created: 20160107222352710
modified: 20191022095637710
tags: [[TiddlyWiki on Node.js]] Plugins
modified: 20220617122143911
tags: Plugins
title: Installing a plugin from the plugin library
type: text/vnd.tiddlywiki
! Standalone Configuration
\rules except wikilink
Follow these instructions when using TiddlyWiki as a standalone HTML file:
If you want to follow the steps //side by side// you can <<open-tiddler-in-window>>.
Follow these instructions when using TiddlyWiki as a standalone, single file wiki.
# Create a backup of your current TiddlyWiki HTML file ([[just in case|The First Rule of Using TiddlyWiki]])
# Open your TiddlyWiki in a browser
# Open the [[control panel|$:/ControlPanel]] <<.icon $:/core/images/options-button>>, click on the ''Plugins'' tab and then the <<.icon $:/core/images/download-button>> ''Get more plugins'' button
# Create a backup of your current wiki file ([[just in case|The First Rule of Using TiddlyWiki]])
# Open the <<controlPanel-plugin-link>>
#* Click on the ''Plugins'' tab and then the
#*<<.icon $:/core/images/download-button>> ''Get more plugins'' button
# Click <<.icon $:/core/images/chevron-right>> ''open plugin library'' to open the official plugin library
# When the library listing is loaded:
## Use the tab to select between ''plugins'', ''themes'' and ''languages''
## Use the ''search'' box to search the plugin details
# Click the ''install'' button to install a plugin
# Save your TiddlyWiki <<.icon $:/core/images/save-button>>
# If a yellow warning bar appears at the top of the window, refresh the window so that TiddlyWiki completes installation of the plugin <<.icon $:/core/images/refresh-button>>
#* <<.from-version "5.1.22">> It is no longer necessary to refresh TiddlyWiki when deleting plugins that support dynamic loading. See PluginMechanism for more details
#* <<.from-version "5.1.22">> It is no longer necessary to refresh TiddlyWiki when deleting plugins that support dynamic loading. See the [[PluginMechanism]] for more details
# The plugin should now be available for use
! Client-Server Configuration
Follow these instructions when using TiddlyWiki under Node.js:
# Identify the plugins you want to install using the ''Plugins'' tab of [[control panel|$:/ControlPanel]] (''don't'' install the plugins from here, though). Plugins are identified by their type (ie language, theme or plugin) and their publisher and title. For example, the plugin `$:/plugins/tiddlywiki/internals` is referred to as ''tiddlywiki/internals''
# Quit the server if it is running
# Edit the `tiddlywiki.info` file (it is in JSON format) and locate the `plugins`, `themes` or `languages` section (see below)
# Add entries corresponding to the plugins you wish to add. Take care to retain commas to separate items, but do not terminate the last item in a list with a comma
# Restart the server
```
{
"plugins": [
"tiddlywiki/codemirror"
],
"themes": [
"tiddlywiki/vanilla",
"tiddlywiki/snowwhite"
],
"languages": [
"es-ES",
"fr-FR",
"en-EN"
]
}
```
See also [[Installing custom plugins on Node.js]].
<$macrocall $name=".note" _="""If you use TiddlyWiki with ''Node.js'' have a closer look at [[Installing official plugins on Node.js]]<br>An overview can be found at [[Plugins]]"""/>

View File

@@ -1,14 +1,29 @@
created: 20160107222430613
modified: 20190927205631648
modified: 20220617115930635
tags: Plugins
title: Manually installing a plugin
type: text/vnd.tiddlywiki
\rules except wikilink
If you want to follow the steps //side by side// you can <<open-external-window "https://tiddlywiki.com/plugins/tiddlywiki/katex">>.
# Create a backup of your current TiddlyWiki HTML file ([[just in case|The First Rule of Using TiddlyWiki]])
# Open your TiddlyWiki in a browser
# In another browser window, find a link to the plugin, e.g. [[$:/plugins/tiddlywiki/example]]. You will typically find these links on the home page of the plugin (for example, https://tiddlywiki.com/plugins/tiddlywiki/katex/)
# Drag the link [[$:/plugins/tiddlywiki/example]] to the browser window containing your TiddlyWiki
# In another browser window, find a link to the plugin, e.g. https://tiddlywiki.com/plugins/tiddlywiki/katex. You will typically find these links on the home page of the plugin
# Drag the link similar to `$:/plugins/tiddlywiki/example` to the browser window containing your TiddlyWiki
# Import the new plugin shown in the $:/Import tiddler
# Save your TiddlyWiki (<<.icon $:/core/images/save-button>>)
# If a yellow warning bar appears at the top of the window, refresh the window so that TiddlyWiki completes installation of the plugin <<.icon $:/core/images/refresh-button>>
#* <<.from-version "5.1.22">> It is no longer necessary to refresh TiddlyWiki when deleting plugins that support dynamic loading. See PluginMechanism for more details
# The plugin should now be available for use
# The plugin should now be available for use
<$macrocall $name=".note" _="More information about installing a plugin form the official plugin library, can be found at [[Installing a plugin from the plugin library]]<br>An overview can be found at [[Plugins]]"/>

View File

@@ -1,5 +1,5 @@
created: 20170210075109635
modified: 20170210075709809
modified: 20220612082350537
tags: Plugins
title: OfficialPlugins
type: text/vnd.tiddlywiki
@@ -7,3 +7,5 @@ type: text/vnd.tiddlywiki
The official TiddlyWiki plugin library contains the plugins that are part of the [[main TiddlyWiki 5 GitHub repository|Working with the TiddlyWiki5 repository]]. Install them from [[the plugin library|Installing a plugin from the plugin library]]. Plugins from the official plugin library are automatically updated as part of the [[upgrade process|UpgradeMechanism]].
<<list-links "[tag[OfficialPlugins]]">>
<$macrocall $name=".note" _="An overview, how to handle plugins can be found at: [[Plugins]]"/>

View File

@@ -0,0 +1,47 @@
created: 20220613115453346
modified: 20220628160136158
tags: PluginMechanism
title: Plugin Ordering
type: text/vnd.tiddlywiki
Using the Node.js client-server configuration plugins are activated in the following order:
# Plugins found using the OS environment variables
#* See: [[PluginFolders]]
#* and: [[Environment Variables on Node.js]]
# Plugins stored in the wiki `/plugins` path
#* See: [[PluginFolders]]
# Plugins specified in the command line
#* See: [[Using TiddlyWiki on Node.js]] ... the notes about <<.from-version "5.1.20">>
# Plugins imported by drag and drop as wiki content
#* See: [[Installing a plugin from the plugin library]] or [[Manually installing a plugin]]
''Important:''
* ''Elements lower in the list take precedence''
*Including a plugin as an ordinary tiddler by drag and drop into the browser, will result in the plugin only being active in the browser
** It will not be available under Node.js
Option 1:
* Using a Node.js configuration option 1 is the most common one
* It lowers maintenence, because all plugins can be updated in one go
Option 2:
* Option 2 is preferred if you want to work with a fixed configuration
* Plugin updates only effect the corresponding wiki
Option 3:
* This option allows to ''add and start'' an edition without the need to overwrite an existing `tiddlywiki.info` file
* It allows you to start any edition as a client-server edition, even if the tiddlywiki.info file didn't specify it.
Option 4:
* Is the exact same mechanism used for a single-file wiki
* This mechanism should only be used in a Node.js configuration for ''testing and debugging'' purposes, since the plugins are stored in the `tiddlers/` directory

View File

@@ -1,9 +1,35 @@
created: 20161015113519246
modified: 20190927172743140
modified: 20220613123551803
tags: PluginMechanism
title: PluginFolders
type: text/vnd.tiddlywiki
! Working with Plugin Folders
* Arrange the [[PluginFolders]] containing the plugins in a convenient shared location
* Use [[environment variables|Environment Variables on Node.js]] to tell TiddlyWiki to search those folders.
*The plugins can be referenced in `tiddlywiki.info` by their name (e.g. `tiddlytools/magic`)
* Place the PluginFolders containing the plugins in a `plugins` folder within the [[wiki folder|TiddlyWikiFolders]]. TiddlyWiki will attempt to include every subfolder as a plugin. Do not add the plugin names to `tiddlywiki.info`. Do not add the PluginFolders under a specific namespace:
```
├── plugins/
│ ├── relink/
│ │ ├── js/
│ │ ├── tiddlers/
│ │ └── plugin.info
│ └── relink-markdown/
│ ├── js/
│ ├── plugin.info
│ └── readme.tid
├── tiddlers/
└── tiddlywiki.info
```
! Plugin.info File
On the server, plugins can be stored as ordinary JSON tiddlers but it is often more convenient to store them as separate tiddler files within folders. Plugin folders must contain a `plugin.info` file that contains the metadata for the plugin. It can also optionally identify files external to the plugin folder that should be loaded as tiddlers.
The `plugin.info` file should contain the following JSON structure:

View File

@@ -1,18 +1,30 @@
created: 20140910215514237
modified: 20190108000000000
list: [[Installing a plugin from the plugin library]] [[Uninstalling a plugin]] [[Manually installing a plugin]] OfficialPlugins
modified: 20220617133819755
tags: Concepts TableOfContents
title: Plugins
type: text/vnd.tiddlywiki
Plugins in TiddlyWiki5 can be used to distribute optional components that customise and extend TiddlyWiki. You can install them from the [[official plugin library|Installing a plugin from the plugin library]] or from [[community sites|Resources]].
! Introduction
{{$:/core/ui/ControlPanel/Plugins/AddPlugins}}
Plugins in TiddlyWiki5 can be used to distribute optional components that customise and extend wiki. You can install them from the official plugin library or from community sites.
Internally, plugins are a bundle of tiddlers packaged together as a single tiddler that can be installed, copied or deleted as a unit. The individual tiddlers within a plugin appear as ShadowTiddlers. See the PluginMechanism discussion for more details about how plugins are implemented internally.
Internally, plugins are a bundle of tiddlers packaged together as a single tiddler that can be installed, copied, disabled or deleted as a unit. The individual tiddlers within a plugin appear as shadow tiddlers.
Plugins can contain JavaScript modules, style sheets, and templates. Plugins can also be used to distribute ordinary text, images or any other content.
Plugins can contain ~JavaScript modules, style sheets, and templates. Plugins can also be used to distribute ordinary text, images or any other content.
! Handling Plugins with a Single File Wiki
<<list-links "[tag[Plugins]]">>
<<list-links "[tag[Plugins]] -[has[draft.of]]">>
<$macrocall $name=".note" _="There is a plugin called $:/core that contains the main core code of ~TiddlyWiki. It is always present, and it is the source of default [[Shadow tiddlers|ShadowTiddlers]]. You can see the details of this in the <<.button control-panel>> on the <<.controlpanel-tab Plugins>> sub-tab.">
! Handling Plugins with a Client - Server Configuration (Node.js)
<<list-links "[tag[PluginsCS]] -[has[draft.of]]">>
! Plugin Mechanism
The PluginMechanism tiddler contains more details about how plugins are implemented internally.
You can open the plugin details in the <<controlPanel-plugin-link>> on the <<.controlpanel-tab Plugins>> sub-tab.
There is a plugin called $:/core that contains the main core code of TiddlyWiki. It is always present, and it is the source of default ShadowTiddlers.

View File

@@ -1,40 +1,30 @@
created: 20160107222504269
modified: 20190927205509760
modified: 20220617132957241
tags: Plugins
title: Uninstalling a plugin
type: text/vnd.tiddlywiki
! Standalone Configuration
\rules except wikilink
Follow these instructions when using TiddlyWiki as a standalone HTML file:
If you want to follow the steps //side by side// you can <<open-tiddler-in-window>>.
Follow these instructions when using TiddlyWiki as a standalone, single file wiki.
# Create a backup of your current TiddlyWiki HTML file ([[just in case|The First Rule of Using TiddlyWiki]])
# Open the [[control panel|$:/ControlPanel]] and go to the ''Plugins'' tab
# Open the <<controlPanel-plugin-link>> and go to the ''Plugins'' tab
# Click on the plugin you want to delete to open it as a standalone tiddler
# Click the <<.icon $:/core/images/down-arrow>> ''more'' button and <<.icon $:/core/images/delete-button>> ''delete'' the tiddler
# Save your TiddlyWiki <<.icon $:/core/images/save-button>>
# If a yellow warning bar appears at the top of the window, refresh the window so that TiddlyWiki completely removes the plugin <<.icon $:/core/images/refresh-button>>
#* <<.from-version "5.1.22">> It is no longer necessary to refresh TiddlyWiki when deleting plugins that support dynamic loading. See PluginMechanism for more details
#* <<.from-version "5.1.22">> It is no longer necessary to refresh TiddlyWiki when deleting plugins that support dynamic loading. See [[PluginMechanism]] for more details
# The plugin should no longer be active or available
! Client-Server Configuration
Follow these instructions when using TiddlyWiki under Node.js:
# Quit the server if it is running
# Edit the `tiddlywiki.info` file (it is in JSON format) and locate the `plugins` and `themes` section (see below)
# Remove the entries corresponding to the plugins you wish to remove. Take care to retain commas to separate items, but do not terminate the last item in a list with a comma
# Restart the server
```
{
"plugins": [
"tiddlywiki/codemirror"
],
"themes": [
"tiddlywiki/vanilla",
"tiddlywiki/snowwhite"
]
}
```
<$macrocall $name=".note" _="""If you use TiddlyWiki with node.js have a closer look at [[Uninstalling a plugin with Node.js]]<br>An overview of working with plugins can be found at [[Plugins]]"""/>

View File

@@ -6,10 +6,6 @@ tags: ReleaseNotes
title: Release 5.1.23
type: text/vnd.tiddlywiki
\define contributor(username)
<a href="https://github.com/$username$" style="text-decoration:none;font-size:24px;" class="tc-tiddlylink-external" target="_blank" rel="noopener noreferrer"><img src="https://github.com/$username$.png?size=32" width="32" height="32"/> @<$text text=<<__username__>>/></a>
\end
//[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.22...v5.1.23]]//
<<.banner-credits
@@ -267,33 +263,35 @@ Please note that using this plugin does not guarantee compliance with any partic
[[@Jermolene|https://github.com/Jermolene]] would like to thank the contributors to this release who have generously given their time to help improve TiddlyWiki:
* <<contributor adithya-badidey>>
* <<contributor Arlen22>>
* <<contributor bimlas>>
* <<contributor BramChen>>
* <<contributor BurningTreeC>>
* <<contributor danielo515>>
* <<contributor default-kramer>>
* <<contributor ento>>
* <<contributor favadi>>
* <<contributor fkohrt>>
* <<contributor flibbles>>
* <<contributor gera2ld>>
* <<contributor ibnishak>>
* <<contributor idotobi>>
* <<contributor jdangerx>>
* <<contributor jjduhamel>>
* <<contributor joshuafontany>>
* <<contributor kookma>>
* <<contributor Kamal-Habash>>
* <<contributor Marxsal>>
* <<contributor mocsa>>
* <<contributor NicolasPetton>>
* <<contributor OmbraDiFenice>>
* <<contributor passuf>>
* <<contributor pmario>>
* <<contributor rmunn>>
* <<contributor SmilyOrg>>
* <<contributor saqimtiaz>>
* <<contributor twMat>>
* <<contributor xcazin>>
<<.contributors """
adithya-badidey
Arlen22
bimlas
BramChen
BurningTreeC
danielo515
default-kramer
ento
favadi
fkohrt
flibbles
gera2ld
ibnishak
idotobi
jdangerx
jjduhamel
joshuafontany
kookma
Kamal-Habash
Marxsal
mocsa
NicolasPetton
OmbraDiFenice
passuf
pmario
rmunn
SmilyOrg
saqimtiaz
twMat
xcazin
""">>

View File

@@ -6,10 +6,6 @@ tags: ReleaseNotes
title: Release 5.2.0
type: text/vnd.tiddlywiki
\define contributor(username)
<a href="https://github.com/$username$" style="text-decoration:none;font-size:24px;" class="tc-tiddlylink-external" target="_blank" rel="noopener noreferrer"><img src="https://github.com/$username$.png?size=32" width="32" height="32"/> @<$text text=<<__username__>>/></a>
\end
//[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.23...v5.2.0]]//
<<.banner-credits
@@ -267,37 +263,39 @@ For end users, if an upgrade to v5.2.0 causes problems then consult the discussi
[[@Jermolene|https://github.com/Jermolene]] would like to thank the contributors to this release who have generously given their time to help improve TiddlyWiki:
* <<contributor 8d1h>>
* <<contributor Arlen22>>
* <<contributor BlueGreenMagick>>
* <<contributor BramChen>>
* <<contributor BurningTreeC>>
* <<contributor cdruan>>
* <<contributor clutterstack>>
* <<contributor CodaCodr>>
* <<contributor dixonge>>
* <<contributor donmor>>
* <<contributor felixhayashi>>
* <<contributor FlashSystems>>
* <<contributor flibbles>>
* <<contributor FND>>
* <<contributor hoelzro>>
* <<contributor jeremyredhead>>
* <<contributor joebordes>>
* <<contributor joshuafontany>>
* <<contributor kookma>>
* <<contributor laomaiweng>>
* <<contributor leehawk787>>
* <<contributor Marxsal>>
* <<contributor morosanuae>>
* <<contributor neumark>>
* <<contributor NicolasPetton>>
* <<contributor OdinJorna>>
* <<contributor pmario>>
* <<contributor rryan>>
* <<contributor saqimtiaz>>
* <<contributor simonbaird>>
* <<contributor slaymaker1907>>
* <<contributor sobjornstad>>
* <<contributor twMat>>
* <<contributor xcazin>>
<<.contributors """
8d1h
Arlen22
BlueGreenMagick
BramChen
BurningTreeC
cdruan
clutterstack
CodaCodr
dixonge
donmor
felixhayashi
FlashSystems
flibbles
FND
hoelzro
jeremyredhead
joebordes
joshuafontany
kookma
laomaiweng
leehawk787
Marxsal
morosanuae
neumark
NicolasPetton
OdinJorna
pmario
rryan
saqimtiaz
simonbaird
slaymaker1907
sobjornstad
twMat
xcazin
""">>

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