1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2025-02-28 08:50:01 +00:00

Merge branch 'master' into multi-wiki-support

This commit is contained in:
Jeremy Ruston 2024-09-30 15:20:56 +01:00
commit 517dae8242
49 changed files with 412 additions and 342 deletions

View File

@ -14,7 +14,7 @@ jobs:
if: ${{ (github.event.pull_request.user.login != github.repository_owner) }}
steps:
- run: |
if ! curl -s https://raw.githubusercontent.com/Jermolene/TiddlyWiki5/tiddlywiki-com/licenses/cla-individual.md | grep -o "@$USER,"; then
if ! curl -s https://raw.githubusercontent.com/Jermolene/TiddlyWiki5/tiddlywiki-com/licenses/cla-individual.md | grep -io "@$USER,"; then
echo "CLA not signed"
gh pr comment "$NUMBER" -b "@$USER It appears that this is your first contribution to the project, welcome.

View File

@ -164,20 +164,6 @@ node $TW5_BUILD_TIDDLYWIKI \
--rendertiddler $:/core/save/all tour.html text/plain \
|| exit 1
# /dev/index.html Developer docs
# /dev/favicon.ico Favicon for dev site
# /dev/static.html Static rendering of default tiddlers
# /dev/alltiddlers.html Static rendering of all tiddlers
# /dev/static/* Static single tiddlers
# /dev/static/static.css Static stylesheet
node $TW5_BUILD_TIDDLYWIKI \
./editions/dev \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/dev \
--build index favicon static \
|| exit 1
# /share.html Custom edition for sharing via the URL
node $TW5_BUILD_TIDDLYWIKI \
./editions/share \

View File

@ -26,7 +26,8 @@ Tags/ClearInput/Caption: clear input
Tags/ClearInput/Hint: Clear tag input
Tags/Dropdown/Caption: tag list
Tags/Dropdown/Hint: Show tag list
Tags/EmptyMessage: (no search result)
Tags/EmptyMessage: No tags found
Tags/EmptyMessage/System: No system tags found
Title/BadCharacterWarning: Warning: avoid using any of the characters <<bad-chars>> in tiddler titles
Title/Exists/Prompt: Target tiddler already exists
Title/Relink/Prompt: Update ''<$text text=<<fromTitle>>/>'' to ''<$text text=<<toTitle>>/>'' in the //tags// and //list// fields of other tiddlers

View File

@ -42,7 +42,7 @@ Error/RetrievingSkinny: Error retrieving skinny tiddler list
Error/SavingToTWEdit: Error saving to TWEdit
Error/WhileSaving: Error while saving
Error/XMLHttpRequest: XMLHttpRequest error code
Error/ZoominTextNode: Błąd Widoku: Wykryto błędną interakcję z tiddlerem, który wyświetlany jest w niestandardowym kontenerze. Jest to najprawdopodobniej spowodowane użyciem `$:/tags/StoryTiddlerTemplateFilter` z motywem, który ma tekst lub białe znaki na początku. Użyj pragmy `\whitespace trim` i upewnij się, że cała treść tiddlera opakowana jest w jeden element HTML. Tekst, który spowodał problem:
Error/ZoominTextNode: Story View Error: It appears you tried to interact with a tiddler that displays in a custom container. This is most likely caused by using `$:/tags/StoryTiddlerTemplateFilter` with a template that contains text or whitespace at the start. Please use the pragma `\whitespace trim` and ensure the whole contents of the tiddler is wrapped in a single HTML element. The text that caused this issue:
InternalJavaScriptError/Title: Internal JavaScript Error
InternalJavaScriptError/Hint: Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser
LayoutSwitcher/Description: Open the layout switcher

View File

@ -13,7 +13,7 @@ Text editor operation to excise the selection to a new tiddler
"use strict";
function isMarkdown(mediaType) {
return mediaType === 'text/markdown' || mediatype === 'text/x-markdown';
return mediaType === 'text/markdown' || mediaType === 'text/x-markdown';
}
exports["excise"] = function(event,operation) {

View File

@ -18,89 +18,6 @@ var ViewWidget = function(parseTreeNode,options) {
this.initialise(parseTreeNode,options);
};
var ViewHandler = function(widget) {
this.wiki = widget.wiki;
this.widget = widget;
this.document = widget.document;
};
/*
Base ViewHandler render method
*/
ViewHandler.prototype.render = function(parent,nextSibling) {
this.text = this.getValue();
this.createTextNode(parent,nextSibling);
};
/*
Base ViewHandler render method for wikified views
*/
ViewHandler.prototype.renderWikified = function(parent,nextSibling) {
this.createFakeWidget();
this.text = this.getValue();
this.createWikifiedTextNode(parent,nextSibling);
};
/*
ViewHandler method to create a simple text node
*/
ViewHandler.prototype.createTextNode = function(parent,nextSibling) {
if(this.text) {
var textNode = this.document.createTextNode(this.text);
parent.insertBefore(textNode,nextSibling);
this.widget.domNodes.push(textNode);
} else {
this.widget.makeChildWidgets();
this.widget.renderChildren(parent,nextSibling);
}
};
/*
ViewHandler method to always create a text node, even if there's no text
*/
ViewHandler.prototype.createWikifiedTextNode = function(parent,nextSibling) {
var textNode = this.document.createTextNode(this.text || "");
parent.insertBefore(textNode,nextSibling);
this.widget.domNodes.push(textNode);
};
/*
ViewHandler method to create a fake widget used by wikified views
*/
ViewHandler.prototype.createFakeWidget = function() {
this.fakeWidget = this.wiki.makeTranscludeWidget(this.widget.viewTitle,{
document: $tw.fakeDocument,
field: this.widget.viewField,
index: this.widget.viewIndex,
parseAsInline: this.widget.viewMode !== "block",
mode: this.widget.viewMode === "block" ? "block" : "inline",
parentWidget: this.widget,
subTiddler: this.widget.viewSubTiddler
});
this.fakeNode = $tw.fakeDocument.createElement("div");
this.fakeWidget.makeChildWidgets();
this.fakeWidget.render(this.fakeNode,null);
};
ViewHandler.prototype.refreshWikified = function(changedTiddlers) {
var refreshed = this.fakeWidget.refresh(changedTiddlers);
if(refreshed) {
var newText = this.getValue();
if(newText !== this.text) {
this.widget.domNodes[0].textContent = newText;
this.text = newText;
}
}
return refreshed;
};
/*
Base ViewHandler refresh method
*/
ViewHandler.prototype.refresh = function(changedTiddlers) {
return false;
};
/*
Inherit from the base widget class
*/
@ -113,8 +30,14 @@ ViewWidget.prototype.render = function(parent,nextSibling) {
this.parentDomNode = parent;
this.computeAttributes();
this.execute();
this.view = this.getView(this.viewFormat);
this.view.render(parent,nextSibling);
if(this.text) {
var textNode = this.document.createTextNode(this.text);
parent.insertBefore(textNode,nextSibling);
this.domNodes.push(textNode);
} else {
this.makeChildWidgets();
this.renderChildren(parent,nextSibling);
}
};
/*
@ -129,238 +52,49 @@ ViewWidget.prototype.execute = function() {
this.viewFormat = this.getAttribute("format","text");
this.viewTemplate = this.getAttribute("template","");
this.viewMode = this.getAttribute("mode","block");
};
/*
Initialise the view subclasses
*/
ViewWidget.prototype.getView = function(format) {
var View = this.initialiseView();
View.prototype = Object.create(ViewHandler.prototype);
switch(format) {
switch(this.viewFormat) {
case "htmlwikified":
View = this.initialiseHTMLWikifiedView(View);
this.text = this.getValueAsHtmlWikified(this.viewMode);
break;
case "plainwikified":
View = this.initialisePlainWikifiedView(View);
this.text = this.getValueAsPlainWikified(this.viewMode);
break;
case "htmlencodedplainwikified":
View = this.initialiseHTMLEncodedPlainWikifiedView(View);
this.text = this.getValueAsHtmlEncodedPlainWikified(this.viewMode);
break;
case "htmlencoded":
View = this.initialiseHTMLEncodedView(View);
this.text = this.getValueAsHtmlEncoded();
break;
case "htmltextencoded":
View = this.initialiseHTMLTextEncodedView(View);
this.text = this.getValueAsHtmlTextEncoded();
break;
case "urlencoded":
View = this.initialiseURLEncodedView(View);
this.text = this.getValueAsUrlEncoded();
break;
case "doubleurlencoded":
View = this.initialiseDoubleURLEncodedView(View);
this.text = this.getValueAsDoubleUrlEncoded();
break;
case "date":
View = this.initialiseDateView(View);
this.text = this.getValueAsDate(this.viewTemplate);
break;
case "relativedate":
View = this.initialiseRelativeDateView(View);
this.text = this.getValueAsRelativeDate();
break;
case "stripcomments":
View = this.initialiseStripCommentsView(View);
this.text = this.getValueAsStrippedComments();
break;
case "jsencoded":
View = this.initialiseJSEncodedView(View);
this.text = this.getValueAsJsEncoded();
break;
default: // "text"
View = this.initialiseTextView(View);
this.text = this.getValueAsText();
break;
};
return new View(this);
}
};
/*
Return the function to intitialise the view subclass
The various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions
*/
ViewWidget.prototype.initialiseView = function() {
return function(widget) {
ViewHandler.call(this,widget);
};
};
/*
Initialise HTML wikified view methods
*/
ViewWidget.prototype.initialiseHTMLWikifiedView = function(View) {
View.prototype.render = function(parent,nextSibling) {
this.renderWikified(parent,nextSibling);
};
View.prototype.getValue = function() {
return this.fakeNode.innerHTML;
};
View.prototype.refresh = function(changedTiddlers) {
return this.refreshWikified(changedTiddlers);
};
return View;
};
/*
Initialise plain wikified view methods
*/
ViewWidget.prototype.initialisePlainWikifiedView = function(View) {
View.prototype.render = function(parent,nextSibling) {
this.renderWikified(parent,nextSibling);
};
View.prototype.getValue = function() {
return this.fakeNode.textContent;
};
View.prototype.refresh = function(changedTiddlers) {
return this.refreshWikified(changedTiddlers);
};
return View;
};
/*
Initialise HTML encoded plain wikified methods
*/
ViewWidget.prototype.initialiseHTMLEncodedPlainWikifiedView = function(View) {
View.prototype.render = function(parent,nextSibling) {
this.renderWikified(parent,nextSibling);
};
View.prototype.getValue = function() {
return $tw.utils.htmlEncode(this.fakeNode.textContent);
};
View.prototype.refresh = function(changedTiddlers) {
return this.refreshWikified(changedTiddlers);
};
return View;
};
/*
Initialise HTML encoded mehods
*/
ViewWidget.prototype.initialiseHTMLEncodedView = function(View) {
var self = this;
View.prototype.getValue = function() {
return $tw.utils.htmlEncode(self.getValueAsText());
};
return View;
};
/*
Initialise HTML text encoded mehods
*/
ViewWidget.prototype.initialiseHTMLTextEncodedView = function(View) {
var self = this;
View.prototype.getValue = function() {
return $tw.utils.htmlTextEncode(self.getValueAsText());
};
return View;
};
/*
Initialise URL encoded mehods
*/
ViewWidget.prototype.initialiseURLEncodedView = function(View) {
var self = this;
View.prototype.getValue = function() {
return $tw.utils.encodeURIComponentExtended(self.getValueAsText());
};
return View;
};
/*
Initialise double URL encoded mehods
*/
ViewWidget.prototype.initialiseDoubleURLEncodedView = function(View) {
var self = this;
View.prototype.getValue = function() {
return $tw.utils.encodeURIComponentExtended($tw.utils.encodeURIComponentExtended(self.getValueAsText()));
};
return View;
};
/*
Initialise date mehods
*/
ViewWidget.prototype.initialiseDateView = function(View) {
var self = this;
View.prototype.getValue = function(format) {
format = format || "YYYY MM DD 0hh:0mm";
var value = $tw.utils.parseDate(self.getValue());
if(value && $tw.utils.isDate(value) && value.toString() !== "Invalid Date") {
return $tw.utils.formatDateString(value,format);
} else {
return "";
}
};
return View;
};
/*
Initialise relative date mehods
*/
ViewWidget.prototype.initialiseRelativeDateView = function(View) {
var self = this;
View.prototype.getValue = function(format) {
var value = $tw.utils.parseDate(self.getValue());
if(value && $tw.utils.isDate(value) && value.toString() !== "Invalid Date") {
return $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description;
} else {
return "";
}
};
return View;
};
/*
Initialise stripcomments mehods
*/
ViewWidget.prototype.initialiseStripCommentsView = function(View) {
var self = this;
View.prototype.getValue = function() {
var lines = self.getValueAsText().split("\n"),
out = [];
for(var line=0; line<lines.length; line++) {
var text = lines[line];
if(!/^\s*\/\/#/.test(text)) {
out.push(text);
}
}
return out.join("\n");
};
return View;
};
/*
Initialise JS encoded mehods
*/
ViewWidget.prototype.initialiseJSEncodedView = function(View) {
var self = this;
View.prototype.getValue = function() {
return $tw.utils.stringify(self.getValueAsText());
};
return View;
};
/*
Initialise text mehods
*/
ViewWidget.prototype.initialiseTextView = function(View) {
var self = this;
View.prototype.getValue = function() {
return self.getValueAsText();
};
return View;
};
/*
Retrieve the value of the widget. Options are:
@ -404,6 +138,78 @@ ViewWidget.prototype.getValueAsText = function() {
return this.getValue({asString: true});
};
ViewWidget.prototype.getValueAsHtmlWikified = function(mode) {
return this.wiki.renderText("text/html","text/vnd.tiddlywiki",this.getValueAsText(),{
parseAsInline: mode !== "block",
parentWidget: this
});
};
ViewWidget.prototype.getValueAsPlainWikified = function(mode) {
return this.wiki.renderText("text/plain","text/vnd.tiddlywiki",this.getValueAsText(),{
parseAsInline: mode !== "block",
parentWidget: this
});
};
ViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function(mode) {
return $tw.utils.htmlEncode(this.wiki.renderText("text/plain","text/vnd.tiddlywiki",this.getValueAsText(),{
parseAsInline: mode !== "block",
parentWidget: this
}));
};
ViewWidget.prototype.getValueAsHtmlEncoded = function() {
return $tw.utils.htmlEncode(this.getValueAsText());
};
ViewWidget.prototype.getValueAsHtmlTextEncoded = function() {
return $tw.utils.htmlTextEncode(this.getValueAsText());
};
ViewWidget.prototype.getValueAsUrlEncoded = function() {
return $tw.utils.encodeURIComponentExtended(this.getValueAsText());
};
ViewWidget.prototype.getValueAsDoubleUrlEncoded = function() {
return $tw.utils.encodeURIComponentExtended($tw.utils.encodeURIComponentExtended(this.getValueAsText()));
};
ViewWidget.prototype.getValueAsDate = function(format) {
format = format || "YYYY MM DD 0hh:0mm";
var value = $tw.utils.parseDate(this.getValue());
if(value && $tw.utils.isDate(value) && value.toString() !== "Invalid Date") {
return $tw.utils.formatDateString(value,format);
} else {
return "";
}
};
ViewWidget.prototype.getValueAsRelativeDate = function(format) {
var value = $tw.utils.parseDate(this.getValue());
if(value && $tw.utils.isDate(value) && value.toString() !== "Invalid Date") {
return $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description;
} else {
return "";
}
};
ViewWidget.prototype.getValueAsStrippedComments = function() {
var lines = this.getValueAsText().split("\n"),
out = [];
for(var line=0; line<lines.length; line++) {
var text = lines[line];
if(!/^\s*\/\/#/.test(text)) {
out.push(text);
}
}
return out.join("\n");
};
ViewWidget.prototype.getValueAsJsEncoded = function() {
return $tw.utils.stringify(this.getValueAsText());
};
/*
Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering
*/
@ -413,7 +219,7 @@ ViewWidget.prototype.refresh = function(changedTiddlers) {
this.refreshSelf();
return true;
} else {
return this.view.refresh(changedTiddlers);
return false;
}
};

View File

@ -335,7 +335,7 @@ Widget.prototype.makeFakeWidgetWithVariables = function(variables) {
};
} else {
opts = opts || {};
opts.variables = $tw.utils.extend(variables,opts.variables);
opts.variables = $tw.utils.extend({},variables,opts.variables);
return self.getVariableInfo(name,opts);
};
},

View File

@ -75,13 +75,13 @@ $:/state/add-plugin-info/$(connectionTiddler)$/$(assetInfo)$
<h2><$view tiddler=<<assetInfo>> field="original-title"/></h2>
<div>
<%if [<assetInfo>get[stability]match[STABILITY_0_DEPRECATED]] %>
<span class="tc-plugin-info-stability tc-plugin-info-stability-deprecated">DEPRECATED</span>
<span class="tc-plugin-info-stability tc-plugin-info-stability-deprecated">{{$:/language/ControlPanel/Plugins/Stability/Deprecated}}</span>
<%elseif [<assetInfo>get[stability]match[STABILITY_1_EXPERIMENTAL]] %>
<span class="tc-plugin-info-stability tc-plugin-info-stability-experimental">EXPERIMENTAL</span>
<span class="tc-plugin-info-stability tc-plugin-info-stability-experimental">{{$:/language/ControlPanel/Plugins/Stability/Experimental}}</span>
<%elseif [<assetInfo>get[stability]match[STABILITY_2_STABLE]] %>
<span class="tc-plugin-info-stability tc-plugin-info-stability-stable">STABLE</span>
<span class="tc-plugin-info-stability tc-plugin-info-stability-stable">{{$:/language/ControlPanel/Plugins/Stability/Stable}}</span>
<%elseif [<assetInfo>get[stability]match[STABILITY_3_LEGACY]] %>
<span class="tc-plugin-info-stability tc-plugin-info-stability-legacy">LEGACY</span>
<span class="tc-plugin-info-stability tc-plugin-info-stability-legacy">{{$:/language/ControlPanel/Plugins/Stability/Legacy}}</span>
<%endif%>
<em><$view tiddler=<<assetInfo>> field="version"/></em></div>
<$list filter="[<assetInfo>get[original-title]get[version]]" variable="installedVersion"><div><em>{{$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint}}</em></div></$list>

View File

@ -0,0 +1,10 @@
title: $:/core/ui/ViewTemplate/lazy-loading
tags: $:/tags/ViewTemplate
\whitespace trim
<%if [<currentTiddler>has:field[_is_skinny]] %>
<!-- Render the text to trigger lazy-loading -->
{{||$:/core/ui/ViewTemplate/body/default}}
<!-- Indicator of loading state -->
<div class="tc-tiddler-lazy-loading" />
<%endif%>

View File

@ -77,14 +77,14 @@ The second ESC tries to close the "draft tiddler"
<!-- <$action-log /> -->
<!-- create dropdown list -->
\procedure tag-picker-listTags(filter, suffix)
\procedure tag-picker-listTags(filter, suffix, empty)
<$let userInput=<<_tf.getUserInput>> >
<$list filter="[<userInput>minlength{$:/config/Tags/MinLength}limit[1]]"
emptyMessage="<div class='tc-search-results'>{{$:/language/Search/Search/TooShort}}</div>" variable="listItem"
>
<$list filter=<<filter>> variable="tag">
<$list-empty>
<span class="tc-small-gap-left">{{$:/language/EditTemplate/Tags/EmptyMessage}}</span>
<span class="tc-small-gap-left"><<empty>></span>
</$list-empty>
<!-- The buttonClasses filter is used to define tc-tag-button-selected state -->
<!-- tf.get-tagpicker-focus-selector has to be resolved for $:/core/ui/TagPickerTagTemplate,
@ -146,9 +146,9 @@ The second ESC tries to close the "draft tiddler"
<div class="tc-block-dropdown-wrapper">
<%if [<tf.tagpicker-dropdown-id>has[text]] %>
<div class="tc-block-dropdown tc-block-tags-dropdown">
<$macrocall $name="tag-picker-listTags" filter=<<nonSystemTagsFilter>> suffix="-primaryList" />
<$macrocall $name="tag-picker-listTags" filter=<<nonSystemTagsFilter>> suffix="-primaryList" empty={{$:/language/EditTemplate/Tags/EmptyMessage}}/>
<hr>
<$macrocall $name="tag-picker-listTags" filter=<<systemTagsFilter>> suffix="-secondaryList" />
<$macrocall $name="tag-picker-listTags" filter=<<systemTagsFilter>> suffix="-secondaryList" empty={{$:/language/EditTemplate/Tags/EmptyMessage/System}}/>
</div>
<%endif%>
</div>

View File

@ -1,2 +1,2 @@
title: $:/tags/ViewTemplate
list: [[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/unfold]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]]
list: [[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/unfold]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]] [[$:/core/ui/ViewTemplate/lazy-loading]]

View File

@ -2,15 +2,11 @@
"description": "Full edition, containing all languages, themes and plugins",
"plugins": [
"tiddlywiki/bibtex",
"tiddlywiki/blog",
"tiddlywiki/browser-sniff",
"tiddlywiki/browser-storage",
"tiddlywiki/cecily",
"tiddlywiki/classictools",
"tiddlywiki/codemirror",
"tiddlywiki/comments",
"tiddlywiki/d3",
"tiddlywiki/github-fork-ribbon",
"tiddlywiki/help",
"tiddlywiki/highlight",
"tiddlywiki/innerwiki",
@ -18,7 +14,6 @@
"tiddlywiki/jszip",
"tiddlywiki/katex",
"tiddlywiki/markdown",
"tiddlywiki/nodewebkitsaver",
"tiddlywiki/powered-by-tiddlywiki",
"tiddlywiki/qrcode",
"tiddlywiki/railroad",
@ -50,6 +45,7 @@
"mk-MK",
"nl-NL",
"pa-IN",
"pl-PL",
"pt-PT",
"pt-BR",
"ru-RU",
@ -75,4 +71,4 @@
"index": [
"--rendertiddler","$:/core/save/all","index.html","text/plain"]
}
}
}

View File

@ -0,0 +1,20 @@
title: Functions/FunctionFilterrunVariables4
description: Nested functions in filter runs that set variables should not pollute upstream widget tree
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\function .a() [.b[]]
\function .b() [all[]] :map[subtract[1].c[]]
\function .c() [all[]] :map[subtract[1].d[]]
\function .d() [all[]] :map[subtract[1].e[]]
\function .e() [all[]] :map[subtract[1]]
<$text text={{{ [[10]] :map:flat[.a[]then<currentTiddler>] }}}/>
+
title: ExpectedResult
10

View File

@ -0,0 +1,22 @@
title: Widgets/ViewWidget/Parameter/field-format-doubleurlencoded
description: Test view-widget parameters tiddler, field and format=*
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: input
Some text > "aaa"
+
title: Output
<$view tiddler="input" field="text" format="doubleurlencoded"/>
---
<$view tiddler="input" field="text"/>
+
title: ExpectedResult
<p>Some%2520text%2520%253E%2520%2522aaa%2522
Some text &gt; "aaa"
</p>

View File

@ -0,0 +1,21 @@
title: Widgets/ViewWidget/Parameter/field-format-htmlencoded
description: Test view-widget parameters tiddler, field and format=*
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: input
Some text > "aaa"
+
title: Output
<$view tiddler="input" field="text" format="htmlencoded"/>
<$view tiddler="input" field="text"/>
+
title: ExpectedResult
Some text &amp;gt; &amp;quot;aaa&amp;quot;
Some text &gt; "aaa"

View File

@ -0,0 +1,21 @@
title: Widgets/ViewWidget/Parameter/field-format-htmltextencoded
description: Test view-widget parameters tiddler, field and format=*
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: input
Some text > "aaa"
+
title: Output
<$view tiddler="input" field="text" format="htmltextencoded"/>
<$view tiddler="input" field="text"/>
+
title: ExpectedResult
Some text &amp;gt; "aaa"
Some text &gt; "aaa"

View File

@ -0,0 +1,22 @@
title: Widgets/ViewWidget/Parameter/field-format-urlencoded
description: Test view-widget parameters tiddler, field and format=*
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: input
Some text > "aaa"
+
title: Output
<$view tiddler="input" field="text" format="urlencoded"/>
---
<$view tiddler="input" field="text"/>
+
title: ExpectedResult
<p>Some%20text%20%3E%20%22aaa%22
Some text &gt; "aaa"
</p>

View File

@ -0,0 +1,19 @@
title: Widgets/ViewWidget/Parameter/field-format-text
description: Test view-widget parameters tiddler, field and format=*
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: input
caption: [[HelloThere]]
Some text
+
title: Output
<$view tiddler="input" field="caption" format="text"/>
<$view tiddler="input" field="caption"/>
+
title: ExpectedResult
[[HelloThere]]<p>[[HelloThere]]</p>

View File

@ -0,0 +1,28 @@
title: Widgets/ViewWidget/Parameter/field-index
description: Test view-widget parameters index type=application/json and type=application/x-tiddler-dictionary
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: input
type: application/x-tiddler-dictionary
01: value 01
02: value 02
+
title: input-json
type: application/json
{
"01": "value 01",
"02": "value 02"
}
+
title: Output
<$view tiddler="input-json" index="01"/>
<$view tiddler="input" index="02"/>
+
title: ExpectedResult
value 01<p>value 02</p>

View File

@ -0,0 +1,18 @@
title: Widgets/ViewWidget/Parameter/field-text
description: Test view-widget parameters tiddler and field=text
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: input
Some text
+
title: Output
<$view tiddler="input" field="text"/>
<$view tiddler="input" />
+
title: ExpectedResult
Some text<p>Some text</p>

View File

@ -0,0 +1,17 @@
title: Widgets/ViewWidget/Parameter/field-title
description: Test view-widget parameters tiddler and field=title
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: input
Some text
+
title: Output
<$view tiddler="input" field="title"/>
+
title: ExpectedResult
input

View File

@ -0,0 +1,20 @@
title: Widgets/ViewWidget/Parameter/format-data-template
description: Test view-widget parameters format, date and template
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: input
modified: 20240920162221000
Some text
+
title: Output
<!-- This can not be tested atm, since test-server timezone can be different
<$view tiddler="input" field="modified" format="date"/>
-->
<$view tiddler="input" field="modified" format="date" template="[UTC]DDth MMM YYYY at hh12:0mmam"/>
+
title: ExpectedResult
<p>20th September 2024 at 4:22pm</p>

View File

@ -4,9 +4,19 @@ tags: About
title: History of TiddlyWiki
type: text/vnd.tiddlywiki
//These are personal reflections on the history and development of TiddlyWiki from JeremyRuston.//
! Twenty Years of ~TiddlyWiki
//There is also a [[podcast from 2016|https://changelog.com/podcast/196]] discussing TiddlyWiki's backstory as well as a [[recording from 2021|https://twit.tv/shows/floss-weekly/episodes/620]].//
We've held a number of livestreams to celebrate twenty years of ~TiddlyWiki. You can watch the recordings here:
* 19th September 2024 - https://youtube.com/live/z9slx92TyrU
* 20th September 2024 - https://youtube.com/live/puFdN-FgOjg
* 21st September 2024 - https://youtube.com/live/0SjsHvwjHGE
* 22nd September 2024 - https://youtube.com/live/oD7Jtq2D4lg
Some recent podcasts featuring ~TiddlyWiki:
* The changelog podcast from 2016 - https://changelog.com/podcast/196 discussing ~TiddlyWiki's backstory
* Floss Weekly recording from 2021 - https://twit.tv/shows/floss-weekly/episodes/620
! Origins of TiddlyWiki

View File

@ -1,5 +1,5 @@
created: 20150414070451144
list: [[HelloThumbnail - Newsletter]] [[HelloThumbnail - Introduction Video]] [[HelloThumbnail - Grok TiddlyWiki]] [[HelloThumbnail - Latest Version]] [[HelloThumbnail - TiddlyWikiLinks]] [[HelloThumbnail - Developers]] [[HelloThumbnail - Funding]] [[HelloThumbnail - Marketplace]] [[HelloThumbnail - Intertwingled Innovations]]
list: [[HelloThumbnail - Twenty Years of TiddlyWiki]] [[HelloThumbnail - Newsletter]] [[HelloThumbnail - Introduction Video]] [[HelloThumbnail - Grok TiddlyWiki]] [[HelloThumbnail - Latest Version]] [[HelloThumbnail - TiddlyWikiLinks]] [[HelloThumbnail - Developers]] [[HelloThumbnail - Funding]] [[HelloThumbnail - Marketplace]] [[HelloThumbnail - Intertwingled Innovations]]
modified: 20150414070948246
title: HelloThumbnail
type: text/vnd.tiddlywiki

View File

@ -5,6 +5,5 @@ image: Funding.png
link: Funding TiddlyWiki
tags: HelloThumbnail
title: HelloThumbnail - Funding
ribbon-text: NEW
Find out how you can help support ~TiddlyWiki financially

View File

@ -5,6 +5,5 @@ background-color: #EAE57D
image: TiddlyWiki Marketplace Banner
caption: ~TiddlyWiki Marketplace
link: TiddlyWiki Marketplace
ribbon-text: NEW
Explore commercial products and services for ~TiddlyWiki

View File

@ -0,0 +1,9 @@
title: HelloThumbnail - Twenty Years of TiddlyWiki
tags: HelloThumbnail
color: #D5B7EA
image: Twenty Years of TiddlyWiki
caption: Twenty Years of ~TiddlyWiki
link: History of TiddlyWiki
ribbon-text: NEW
Celebrating 20 years since the launch of ~TiddlyWiki

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 KiB

View File

@ -0,0 +1,4 @@
title: Twenty Years of TiddlyWiki
type: image/png
tags: picture
alt-text: Screenshot of TiddlyWiki from 20th September 2004 with a banner reading "Twenty Years"

View File

@ -1,11 +1,11 @@
created: 20160107223425581
list:
modified: 20170228102531138
tags: OfficialPlugins [[Plugin Editions]]
caption: {{!!title}} - ^^deprecated^^
modified: 20240913122437925
tags: OfficialPlugins [[Plugin Editions]] $:/deprecated
title: D3 Plugin
type: text/vnd.tiddlywiki
The D3 plugin integrates the D3 visualisation library with TiddlyWiki.
<<.deprecated-since "5.3.4">> The D3 plugin integrates the D3 visualisation library with TiddlyWiki.
See https://tiddlywiki.com/plugins/tiddlywiki/d3/

View File

@ -1,7 +1,8 @@
created: 20170328173820802
modified: 20170328174328792
tags: OfficialPlugins
caption: {{!!title}} - ^^deprecated^^
modified: 20240913122844238
tags: OfficialPlugins $:/deprecated
title: Mobile Drag And Drop Shim Plugin
type: text/vnd.tiddlywiki
The Mobile Drag And Drop Shim Plugin provides a "shim" that enables HTML 5 compatible drag and drop operations on mobile browsers, including iOS and Android. The shim was created by Tim Ruffles and is published at https://github.com/timruffles/ios-html5-drag-drop-shim.
<<.deprecated-since "5.3.4">> The Mobile Drag And Drop Shim Plugin provides a "shim" that enables HTML 5 compatible drag and drop operations on mobile browsers, including iOS and Android. The shim was created by Tim Ruffles and is published at https://github.com/timruffles/ios-html5-drag-drop-shim.

View File

@ -1,6 +1,6 @@
caption: ignore parser mode
created: 20220111000929700
modified: 20220122182842038
modified: 20240921085112396
tags: [[WikiText Parser Modes]]
title: Places where the parser ignores WikiText
type: text/vnd.tiddlywiki
@ -10,5 +10,5 @@ Text enclosed by these constructs is skipped by the parser and WikiText punctuat
|[[Code Blocks in WikiText]]|One of the main purposes of code blocks is to suppress wikitext expansion. Once the code block starts, the parser will ignore all WikiText punctuation until the code block ends.|
|[[Images in WikiText]]|`[[img|literal image link text]]` - the text enclosed by square braces will be ignored. This means, for example, [[transclusions|Transclusion in WikiText]] and [[macro calls|Macro Calls]] cannot be used to dynamically construct the link text|
|[[Linking in WikiText]]|`[[literal link target|literal link text]]` - the text enclosed by square braces will be ignored. This means, for example, [[transclusions|Transclusion in WikiText]] and [[macro calls|Macro Calls]] cannot be used to dynamically construct the link target or the link text|
|[[Macro Calls]]|`<<mymacro ''notbold'' "literal text" "<<macro_expansion_ignored>>" {{transclusion_ignored}}>>` - while processing the text enclosed by a macro call, the parser will follow special rules for detecting macro parameters. These rules do not include detection of WikiText. However, after the parameters are substituted into the macro definition, the result will be parsed using [[normal rules|Wiki Text Parser Modes]]. This will likely result in the detection of any WikiText.|
|[[Macro Calls]]|`<<mymacro ''notbold'' "literal text" "<<macro_expansion_ignored>>" {{transclusion_ignored}}>>` - while processing the text enclosed by a macro call, the parser will follow special rules for detecting macro parameters. These rules do not include detection of WikiText. However, after the parameters are substituted into the macro definition, the result will be parsed using the [[normal rules|WikiText Parser Modes]]. This will likely result in the detection of any WikiText.|

View File

@ -96,6 +96,10 @@ Plugins/PluginWillRequireReload: (wymaga przeładowania)
Plugins/Plugins/Caption: Wtyczki
Plugins/Plugins/Hint: Wtyczki
Plugins/Reinstall/Caption: zainstaluj ponownie
Plugins/Stability/Deprecated: WYCOFANY
Plugins/Stability/Experimental: EKSPERYMENTALNY
Plugins/Stability/Legacy: STARY
Plugins/Stability/Stable: STABILNY
Plugins/Themes/Caption: Motywy
Plugins/Themes/Hint: Wtyczki z motywami
Plugins/Update/Caption: aktualizuj

View File

@ -29,7 +29,7 @@ name: Czytelna nazwa powiązana z tiddlerem wtyczki
parent-plugin: Określa nadrzędną wtyczkę
plugin-priority: Numeryczna wartość określająca tiddlera wtyczki
plugin-type: Typ tiddlera wtyczki
stability: Stan rozwoju wtyczki: wycofany (deprecated), eksperymentalny (experimental), stabilny (stable), stary (legacy)
stability: Stan rozwoju wtyczki: wycofany, eksperymentalny, stabilny, stary
revision: Numer rewizji tiddlera przechowywany na serwerze
released: Data wydania TiddlyWiki
source: URL źródłowy powiązany z tiddlerem

View File

@ -42,7 +42,7 @@ Error/RetrievingSkinny: Bład przy pobieraniu listy tiddlerów
Error/SavingToTWEdit: Bład przy zapisywaniu do TWEdit
Error/WhileSaving: Bład przy zapisywaniu
Error/XMLHttpRequest: Kod błedu XMLHttpRequest
Error/ZoominTextNode: Story View Error: It appears you tried to interact with a tiddler that displays in a custom container. This is most likely caused by using `$:/tags/StoryTiddlerTemplateFilter` with a template that contains text or whitespace at the start. Please use the pragma `\whitespace trim` and ensure the whole contents of the tiddler is wrapped in a single HTML element. The text that caused this issue:
Error/ZoominTextNode: Błąd Widoku: Wykryto błędną interakcję z tiddlerem, który wyświetlany jest w niestandardowym kontenerze. Jest to najprawdopodobniej spowodowane użyciem `$:/tags/StoryTiddlerTemplateFilter` z motywem, który ma tekst lub białe znaki na początku. Użyj pragmy `\whitespace trim` i upewnij się, że cała treść tiddlera opakowana jest w jeden element HTML. Tekst, który spowodał problem:
InternalJavaScriptError/Title: Wewnętrzny bład JavaScript
InternalJavaScriptError/Hint: Ups, to się nie powinno zdarzyć. Zalecamy ponowne uruchomienie TiddlyWiki poprzez odświeżenie strony w przeglądarce.
LayoutSwitcher/Description: Otwórzy wybór motywu

View File

@ -1,4 +1,6 @@
title: $:/plugins/tiddlywiki/browser-storage/settings
caption: Browser Storage
tags: $:/tags/ControlPanel/SettingsTab
! Disable

View File

@ -1,4 +1,6 @@
title: $:/plugins/tiddlywiki/comments/config
caption: Comments
tags: $:/tags/ControlPanel/SettingsTab
\define select(description,filter)
<$button>

View File

@ -1,4 +1,6 @@
title: $:/plugins/tiddlywiki/consent-banner/config
caption: Consent Banner
tags: $:/tags/ControlPanel/SettingsTab
! [[Greeting Message|$:/config/plugins/tiddlywiki/consent-banner/greeting-message]]

View File

@ -1,4 +1,6 @@
title: $:/plugins/tiddlywiki/dynaview/config
caption: Dynaview
tags: $:/tags/ControlPanel/SettingsTab
<$checkbox tiddler="$:/config/DynaView/ViewportDimensions" field="text" checked="yes" unchecked="no" default="no"> Enable dynamic saving of the viewport [[width|$:/state/DynaView/ViewportDimensions/Width]] and [[height|$:/state/DynaView/ViewportDimensions/Height]]</$checkbox>

View File

@ -1,4 +1,6 @@
title: $:/plugins/tiddlywiki/external-attachments/settings
caption: External Attachments
tags: $:/tags/ControlPanel/SettingsTab
When used on platforms that provide the necessary support (such as ~TiddlyDesktop), you can optionally import binary files as external tiddlers that reference the original file via the ''_canonical_uri'' field.

View File

@ -1,4 +1,6 @@
title: $:/plugins/tiddlywiki/freelinks/settings
caption: Freelinks
tags: $:/tags/ControlPanel/SettingsTab
Filter defining tiddlers to which freelinks are made: <$edit-text tiddler="$:/config/Freelinks/TargetFilter" tag="input" placeholder="Filter expression..." default=""/>

View File

@ -1,4 +1,6 @@
title: $:/plugins/tiddlywiki/geospatial/settings
caption: Geospatial
tags: $:/tags/ControlPanel/SettingsTab
! Geospatial Plugin Settings

View File

@ -292,7 +292,7 @@ GeomapWidget.prototype.setMapView = function() {
this.map.setMaxZoom($tw.utils.parseInt(this.getAttribute("maxZoom")));
}
// Set the view to the content of the state tiddler
var stateTiddler = this.geomapStateTitle && this.wiki.getTiddler(this.geomapStateTitle);
var stateTiddler = this.getAttribute("state") && this.wiki.getTiddler(this.getAttribute("state"));
if(stateTiddler) {
this.map.setView([$tw.utils.parseNumber(stateTiddler.fields.lat,0),$tw.utils.parseNumber(stateTiddler.fields.long,0)], $tw.utils.parseNumber(stateTiddler.fields.zoom,0));
return true;

View File

@ -1,4 +1,6 @@
title: $:/plugins/tiddlywiki/googleanalytics/settings
caption: Google Analytics
tags: $:/tags/ControlPanel/SettingsTab
''[[Google Analytics Measurement ID|$:/GoogleAnalyticsMeasurementID]]'': (mandatory) a code of the form `G-XXXXXXXXXX` where X are digits or uppercase letters<br/><$edit-text tiddler="$:/GoogleAnalyticsMeasurementID" default="" tag="input"/>

View File

@ -1,4 +1,6 @@
title: $:/plugins/tiddlywiki/katex/config
caption: KaTeX
tags: $:/tags/ControlPanel/SettingsTab
<div class="tc-control-panel">

View File

@ -1,5 +1,6 @@
title: $:/plugins/tiddlywiki/savetrail/settings
caption: Save Trail
tags: $:/tags/ControlPanel/SettingsTab
<$checkbox tiddler="$:/config/SaveTrailPlugin/enable" field="text" checked="yes" unchecked="no"> Enable automatic saving of modified tiddlers</$checkbox>

View File

@ -1,4 +1,6 @@
title: $:/plugins/tiddlywiki/share/settings
caption: Share
tags: $:/tags/ControlPanel/SettingsTab
!! Base sharing URL

View File

@ -1,4 +1,6 @@
title: $:/plugins/tiddlywiki/tour/settings
caption: Tour
tags: $:/tags/ControlPanel/SettingsTab
\import [[$:/plugins/tiddlywiki/tour/variables]]
\procedure button-expand-collapse-all(caption,text)

View File

@ -1201,6 +1201,20 @@ button.tc-btn-invisible.tc-remove-tag-button {
color: <<colour muted-foreground>>;
}
.tc-tiddler-lazy-loading {
height: 4px;
width: 100%;
background: no-repeat linear-gradient(<<colour background>> 0 0),no-repeat linear-gradient(<<colour background>> 0 0),<<colour primary>>;
background-size: 60% 100%;
animation: animation-loading-progress 3s infinite;
}
@keyframes animation-loading-progress {
0% {background-position:-150% 0,-150% 0}
66% {background-position: 250% 0,-150% 0}
100% {background-position: 250% 0, 250% 0}
}
.tc-titlebar h2 {
font-size: 1em;
display: inline;