1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2026-01-28 22:01:26 +00:00

Merge branch 'master' into external-tasks

This commit is contained in:
Jeremy Ruston
2019-10-22 21:52:41 +01:00
156 changed files with 785 additions and 636 deletions

View File

@@ -10,5 +10,4 @@ tags: $:/tags/Image
<rect x="96" y="80" width="16" height="48" rx="8"></rect>
<rect x="80" y="96" width="48" height="16" rx="8"></rect>
</g>
</g>
</svg>

View File

@@ -4,25 +4,27 @@ Advanced/Caption: Advanced
Advanced/Hint: Internal information about this TiddlyWiki
Appearance/Caption: Appearance
Appearance/Hint: Ways to customise the appearance of your TiddlyWiki.
Basics/AnimDuration/Prompt: Animation duration:
Basics/AnimDuration/Prompt: Animation duration
Basics/AutoFocus/Prompt: Default focus field for new tiddlers
Basics/Caption: Basics
Basics/DefaultTiddlers/BottomHint: Use &#91;&#91;double square brackets&#93;&#93; for titles with spaces. Or you can choose to <$button set="$:/DefaultTiddlers" setTo="[list[$:/StoryList]]">retain story ordering</$button>
Basics/DefaultTiddlers/Prompt: Default tiddlers:
Basics/DefaultTiddlers/TopHint: Choose which tiddlers are displayed at startup:
Basics/DefaultTiddlers/Prompt: Default tiddlers
Basics/DefaultTiddlers/TopHint: Choose which tiddlers are displayed at startup
Basics/Language/Prompt: Hello! Current language:
Basics/NewJournal/Title/Prompt: Title of new journal tiddlers
Basics/NewJournal/Text/Prompt: Text for new journal tiddlers
Basics/NewJournal/Tags/Prompt: Tags for new journal tiddlers
Basics/NewTiddler/Title/Prompt: Title of new tiddlers
Basics/OverriddenShadowTiddlers/Prompt: Number of overridden shadow tiddlers:
Basics/ShadowTiddlers/Prompt: Number of shadow tiddlers:
Basics/Subtitle/Prompt: Subtitle:
Basics/SystemTiddlers/Prompt: Number of system tiddlers:
Basics/Tags/Prompt: Number of tags:
Basics/Tiddlers/Prompt: Number of tiddlers:
Basics/Title/Prompt: Title of this ~TiddlyWiki:
Basics/Username/Prompt: Username for signing edits:
Basics/Version/Prompt: ~TiddlyWiki version:
Basics/NewTiddler/Tags/Prompt: Tags for new tiddlers
Basics/OverriddenShadowTiddlers/Prompt: Number of overridden shadow tiddlers
Basics/ShadowTiddlers/Prompt: Number of shadow tiddlers
Basics/Subtitle/Prompt: Subtitle
Basics/SystemTiddlers/Prompt: Number of system tiddlers
Basics/Tags/Prompt: Number of tags
Basics/Tiddlers/Prompt: Number of tiddlers
Basics/Title/Prompt: Title of this ~TiddlyWiki
Basics/Username/Prompt: Username for signing edits
Basics/Version/Prompt: ~TiddlyWiki version
EditorTypes/Caption: Editor Types
EditorTypes/Editor/Caption: Editor
EditorTypes/Hint: These tiddlers determine which editor is used to edit specific tiddler types.
@@ -63,6 +65,7 @@ Parsing/Pragma/Caption: Pragma Parse Rules
Plugins/Add/Caption: Get more plugins
Plugins/Add/Hint: Install plugins from the official library
Plugins/AlreadyInstalled/Hint: This plugin is already installed at version <$text text=<<installedVersion>>/>
Plugins/AlsoRequires: Also requires:
Plugins/Caption: Plugins
Plugins/Disable/Caption: disable
Plugins/Disable/Hint: Disable this plugin when reloading page

View File

@@ -8,6 +8,7 @@ Field/Remove/Hint: Remove field
Field/Dropdown/Caption: field list
Field/Dropdown/Hint: Show field list
Fields/Add/Button: add
Fields/Add/Button/Hint: Add the new field to the tiddler
Fields/Add/Name/Placeholder: field name
Fields/Add/Prompt: Add a new field:
Fields/Add/Value/Placeholder: field value
@@ -16,6 +17,7 @@ Fields/Add/Dropdown/User: User fields
Shadow/Warning: This is a shadow tiddler. Any changes you make will override the default version from the plugin <<pluginLink>>
Shadow/OverriddenWarning: This is a modified shadow tiddler. You can revert to the default version in the plugin <<pluginLink>> by deleting this tiddler
Tags/Add/Button: add
Tags/Add/Button/Hint: add tag
Tags/Add/Placeholder: tag name
Tags/Dropdown/Caption: tag list
Tags/Dropdown/Hint: Show tag list

View File

@@ -31,6 +31,7 @@ source: The source URL associated with a tiddler
subtitle: The subtitle text for a wizard
tags: A list of tags associated with a tiddler
text: The body text of a tiddler
throttle.refresh: If present, throttles refreshes of this tiddler
title: The unique name of a tiddler
toc-link: Suppresses the tiddler's link in a Table of Contents tree if set to: ''no''
type: The content type of a tiddler

View File

@@ -2,4 +2,3 @@ title: $:/config/NewJournal/
Title: DDth MMM YYYY
Text:
Tags: Journal

View File

@@ -0,0 +1,2 @@
title: $:/config/NewJournal/Tags
tags: Journal

View File

@@ -69,7 +69,7 @@ Command.prototype.execute = function() {
// Collect the skinny list data
var pluginTiddlers = JSON.parse(tiddler.text),
readmeContent = (pluginTiddlers.tiddlers[title + "/readme"] || {}).text,
doesContainJavaScript = !!$tw.wiki.doesPluginInfoContainModules(pluginTiddlers),
doesRequireReload = !!$tw.wiki.doesPluginInfoRequireReload(pluginTiddlers),
iconTiddler = pluginTiddlers.tiddlers[title + "/icon"] || {},
iconType = iconTiddler.type,
iconText = iconTiddler.text,
@@ -80,7 +80,7 @@ Command.prototype.execute = function() {
skinnyList.push($tw.utils.extend({},tiddler,{
text: undefined,
readme: readmeContent,
"contains-javascript": doesContainJavaScript ? "yes" : "no",
"requires-reload": doesRequireReload ? "yes" : "no",
icon: iconContent
}));
});

View File

@@ -79,7 +79,6 @@ function FramedEngine(options) {
// Add event listeners
$tw.utils.addEventListeners(this.domNode,[
{name: "click",handlerObject: this,handlerMethod: "handleClickEvent"},
{name: "focus",handlerObject: this,handlerMethod: "handleFocusEvent"},
{name: "input",handlerObject: this,handlerMethod: "handleInputEvent"},
{name: "keydown",handlerObject: this.widget,handlerMethod: "handleKeydownEvent"}
]);
@@ -153,14 +152,6 @@ FramedEngine.prototype.focus = function() {
this.domNode.select();
}
};
/*
Handle the focus event
*/
FramedEngine.prototype.handleFocusEvent = function(event) {
this.widget.cancelPopups();
return true;
};
/*
Handle a click

View File

@@ -122,7 +122,6 @@ SimpleEngine.prototype.handleInputEvent = function(event) {
Handle a dom "focus" event
*/
SimpleEngine.prototype.handleFocusEvent = function(event) {
this.widget.cancelPopups();
if(this.widget.editFocusPopup) {
$tw.popup.triggerPopup({
domNode: this.domNode,

View File

@@ -248,13 +248,6 @@ function editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {
}
};
/*
Cancel Popups
*/
EditTextWidget.prototype.cancelPopups = function() {
$tw.popup.cancel(0,this.engine.domNode);
};
/*
Handle a dom "keydown" event, which we'll bubble up to our container for the keyboard widgets benefit
*/

View File

@@ -13,12 +13,13 @@ Text editor operation to add a prefix to the selected lines
"use strict";
exports["prefix-lines"] = function(event,operation) {
var targetCount = parseInt(event.paramObject.count + "",10);
// Cut just past the preceding line break, or the start of the text
operation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);
// Cut to just past the following line break, or to the end of the text
operation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);
// Compose the required prefix
var prefix = $tw.utils.repeat(event.paramObject.character,event.paramObject.count);
var prefix = $tw.utils.repeat(event.paramObject.character,targetCount);
// Process each line
var lines = operation.text.substring(operation.cutStart,operation.cutEnd).split(/\r?\n/mg);
$tw.utils.each(lines,function(line,index) {
@@ -33,7 +34,7 @@ exports["prefix-lines"] = function(event,operation) {
line = line.substring(1);
}
// We're done if we removed the exact required prefix, otherwise add it
if(count !== event.paramObject.count) {
if(count !== targetCount) {
// Apply the prefix
line = prefix + " " + line;
}

View File

@@ -17,7 +17,8 @@ var AudioParser = function(type,text,options) {
type: "element",
tag: "audio",
attributes: {
controls: {type: "string", value: "controls"}
controls: {type: "string", value: "controls"},
style: {type: "string", value: "width: 100%; object-fit: contain"}
}
},
src;

View File

@@ -17,7 +17,8 @@ var VideoParser = function(type,text,options) {
type: "element",
tag: "video",
attributes: {
controls: {type: "string", value: "controls"}
controls: {type: "string", value: "controls"},
style: {type: "string", value: "width: 100%; object-fit: contain"}
}
},
src;

View File

@@ -34,6 +34,7 @@ exports.handler = function(request,response,state) {
}
});
tiddlerFields.revision = state.wiki.getChangeCount(title);
tiddlerFields.bag = "default";
tiddlerFields.type = tiddlerFields.type || "text/vnd.tiddlywiki";
response.writeHead(200, {"Content-Type": "application/json"});
response.end(JSON.stringify(tiddlerFields),"utf8");

View File

@@ -28,8 +28,8 @@ exports.startup = function() {
requireReloadDueToPluginChange = false;
$tw.utils.each(Object.keys(changes),function(title) {
var tiddler = $tw.wiki.getTiddler(title),
containsModules = $tw.wiki.doesPluginContainModules(title);
if(containsModules) {
requiresReload = $tw.wiki.doesPluginRequireReload(title);
if(requiresReload) {
requireReloadDueToPluginChange = true;
} else if(tiddler) {
var pluginType = tiddler.fields["plugin-type"];

View File

@@ -25,7 +25,7 @@ var PAGE_TEMPLATE_TITLE = "$:/core/ui/PageTemplate";
// Time (in ms) that we defer refreshing changes to draft tiddlers
var DRAFT_TIDDLER_TIMEOUT_TITLE = "$:/config/Drafts/TypingTimeout";
var DRAFT_TIDDLER_TIMEOUT = 400;
var THROTTLE_REFRESH_TIMEOUT = 400;
exports.startup = function() {
// Set up the title
@@ -78,12 +78,12 @@ exports.startup = function() {
}
// Add the change event handler
$tw.wiki.addEventListener("change",$tw.perf.report("mainRefresh",function(changes) {
// Check if only drafts have changed
var onlyDraftsHaveChanged = true;
// Check if only tiddlers that are throttled have changed
var onlyThrottledTiddlersHaveChanged = true;
for(var title in changes) {
var tiddler = $tw.wiki.getTiddler(title);
if(!tiddler || !tiddler.hasField("draft.of")) {
onlyDraftsHaveChanged = false;
if(!tiddler || !(tiddler.hasField("draft.of") || tiddler.hasField("throttle.refresh"))) {
onlyThrottledTiddlersHaveChanged = false;
}
}
// Defer the change if only drafts have changed
@@ -91,10 +91,10 @@ exports.startup = function() {
clearTimeout(timerId);
}
timerId = null;
if(onlyDraftsHaveChanged) {
if(onlyThrottledTiddlersHaveChanged) {
var timeout = parseInt($tw.wiki.getTiddlerText(DRAFT_TIDDLER_TIMEOUT_TITLE,""),10);
if(isNaN(timeout)) {
timeout = DRAFT_TIDDLER_TIMEOUT;
timeout = THROTTLE_REFRESH_TIMEOUT;
}
timerId = setTimeout(refresh,timeout);
$tw.utils.extend(deferredChanges,changes);

View File

@@ -41,14 +41,14 @@ exports.upgrade = function(wiki,titles,tiddlers) {
// Check if we're dealing with a plugin
if(incomingTiddler && incomingTiddler["plugin-type"]) {
// Check whether the plugin contains JS modules
var doesContainJavaScript = $tw.wiki.doesPluginInfoContainModules(JSON.parse(incomingTiddler.text)) ? ($tw.wiki.getTiddlerText("$:/language/ControlPanel/Plugins/PluginWillRequireReload") + " ") : "";
messages[title] = doesContainJavaScript;
var requiresReload = $tw.wiki.doesPluginInfoRequireReload(JSON.parse(incomingTiddler.text)) ? ($tw.wiki.getTiddlerText("$:/language/ControlPanel/Plugins/PluginWillRequireReload") + " ") : "";
messages[title] = requiresReload;
if(incomingTiddler.version) {
// Upgrade the incoming plugin if it is in the upgrade library
var libraryTiddler = getLibraryTiddler(title);
if(libraryTiddler && libraryTiddler["plugin-type"] && libraryTiddler.version) {
tiddlers[title] = libraryTiddler;
messages[title] = doesContainJavaScript + $tw.language.getString("Import/Upgrader/Plugins/Upgraded",{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}});
messages[title] = requiresReload + $tw.language.getString("Import/Upgrader/Plugins/Upgraded",{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}});
return;
}
// Suppress the incoming plugin if it is older than the currently installed one
@@ -57,7 +57,7 @@ exports.upgrade = function(wiki,titles,tiddlers) {
// Reject the incoming plugin by blanking all its fields
if($tw.utils.checkVersions(existingTiddler.fields.version,incomingTiddler.version)) {
tiddlers[title] = Object.create(null);
messages[title] = doesContainJavaScript + $tw.language.getString("Import/Upgrader/Plugins/Suppressed/Version",{variables: {incoming: incomingTiddler.version, existing: existingTiddler.fields.version}});
messages[title] = requiresReload + $tw.language.getString("Import/Upgrader/Plugins/Suppressed/Version",{variables: {incoming: incomingTiddler.version, existing: existingTiddler.fields.version}});
return;
}
}

View File

@@ -149,46 +149,21 @@ Popup.prototype.show = function(options) {
}
};
/*
Detect if a Popup contains an input field that has focus
Returns true or false
*/
Popup.prototype.detectInputWithinPopup = function(node) {
var withinPopup = false,
currNode = node;
for(var i=0; i<this.popups.length; i++) {
var popup = (this.popups[i] && this.popups[i].domNode) ? this.popups[i].domNode : null;
while(node && popup) {
if(node === popup || (node.classList && (node.classList.contains("tc-popup-keep") || (node !== currNode && node.classList.contains("tc-popup-handle"))))) {
withinPopup = true;
}
node = node.parentNode;
}
}
return withinPopup;
};
/*
Cancel all popups at or above a specified level or DOM node
level: popup level to cancel (0 cancels all popups)
*/
Popup.prototype.cancel = function(level,focusedInputNode) {
Popup.prototype.cancel = function(level) {
var numPopups = this.popups.length;
level = Math.max(0,Math.min(level,numPopups));
for(var t=level; t<numPopups; t++) {
var inputWithinPopup;
if(focusedInputNode) {
inputWithinPopup = this.detectInputWithinPopup(focusedInputNode);
}
if(!inputWithinPopup) {
var popup = this.popups.pop();
if(popup.title) {
if(popup.noStateReference) {
popup.wiki.deleteTiddler(popup.title);
} else {
popup.wiki.deleteTiddler($tw.utils.parseTextReference(popup.title).title);
}
}
var popup = this.popups.pop();
if(popup.title) {
if(popup.noStateReference) {
popup.wiki.deleteTiddler(popup.title);
} else {
popup.wiki.deleteTiddler($tw.utils.parseTextReference(popup.title).title);
}
}
}
if(this.popups.length === 0) {

View File

@@ -47,6 +47,7 @@ EditWidget.prototype.execute = function() {
this.editClass = this.getAttribute("class");
this.editPlaceholder = this.getAttribute("placeholder");
this.editTabIndex = this.getAttribute("tabindex");
this.editFocus = this.getAttribute("focus","");
// Choose the appropriate edit widget
this.editorType = this.getEditorType();
// Make the child widgets
@@ -58,7 +59,8 @@ EditWidget.prototype.execute = function() {
index: {type: "string", value: this.editIndex},
"class": {type: "string", value: this.editClass},
"placeholder": {type: "string", value: this.editPlaceholder},
"tabindex": {type: "string", value: this.editTabIndex}
"tabindex": {type: "string", value: this.editTabIndex},
"focus": {type: "string", value: this.editFocus}
},
children: this.parseTreeNode.children
}]);

View File

@@ -96,11 +96,8 @@ SelectWidget.prototype.setSelectValue = function() {
var select = this.getSelectDomNode();
var values = Array.isArray(value) ? value : $tw.utils.parseStringArray(value);
for(var i=0; i < select.children.length; i++){
if(values.indexOf(select.children[i].value) != -1) {
select.children[i].selected = true;
}
select.children[i].selected = values.indexOf(select.children[i].value) !== -1
}
} else {
var domNode = this.getSelectDomNode();
if(domNode.value !== value) {

View File

@@ -1460,13 +1460,13 @@ exports.invokeUpgraders = function(titles,tiddlers) {
return messages;
};
// Determine whether a plugin by title contains JS modules.
exports.doesPluginContainModules = function(title) {
return this.doesPluginInfoContainModules(this.getPluginInfo(title) || this.getTiddlerDataCached(title));
// Determine whether a plugin by title is dynamically loadable
exports.doesPluginRequireReload = function(title) {
return this.doesPluginInfoRequireReload(this.getPluginInfo(title) || this.getTiddlerDataCached(title));
};
// Determine whether a plugin info structure contains JS modules.
exports.doesPluginInfoContainModules = function(pluginInfo) {
// Determine whether a plugin info structure is dynamically loadable
exports.doesPluginInfoRequireReload = function(pluginInfo) {
if(pluginInfo) {
var foundModule = false;
$tw.utils.each(pluginInfo.tiddlers,function(tiddler) {

View File

@@ -2,7 +2,7 @@ title: $:/core/templates/tiddlywiki5-external-js.html
\rules only filteredtranscludeinline transcludeinline
<!doctype html>
{{$:/core/templates/MOTW.html}}<html>
{{$:/core/templates/MOTW.html}}<html lang="`<$text text={{{ [{$:/language}get[name]] }}}/>`">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<!--~~ Raw markup for the top of the head section ~~-->

View File

@@ -2,7 +2,7 @@ title: $:/core/templates/tiddlywiki5.html
<$set name="saveTiddlerAndShadowsFilter" filter="[subfilter<saveTiddlerFilter>] [subfilter<saveTiddlerFilter>plugintiddlers[]]">
`<!doctype html>
`{{$:/core/templates/MOTW.html}}`<html>
`{{$:/core/templates/MOTW.html}}`<html lang="`<$text text={{{ [{$:/language}get[name]] }}}/>`">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<!--~~ Raw markup for the top of the head section ~~-->

View File

@@ -6,5 +6,5 @@ description: create a new image tiddler
image/$(imageType)$
\end
<$vars imageType={{$:/config/NewImageType}}>
<$action-sendmessage $message="tm-new-tiddler" type=<<get-type>>/>
<$action-sendmessage $message="tm-new-tiddler" type=<<get-type>> tags={{$:/config/NewTiddler/Tags!!tags}}/>
</$vars>

View File

@@ -2,7 +2,7 @@ title: $:/core/ui/Actions/new-journal
tags: $:/tags/Actions
description: create a new journal tiddler
<$vars journalTitleTemplate={{$:/config/NewJournal/Title}} journalTags={{$:/config/NewJournal/Tags}} journalText={{$:/config/NewJournal/Text}}>
<$vars journalTitleTemplate={{$:/config/NewJournal/Title}} journalTags={{$:/config/NewJournal/Tags!!tags}} journalText={{$:/config/NewJournal/Text}}>
<$wikify name="journalTitle" text="""<$macrocall $name="now" format=<<journalTitleTemplate>>/>""">
<$reveal type="nomatch" state=<<journalTitle>> text="">
<$action-sendmessage $message="tm-new-tiddler" title=<<journalTitle>> tags=<<journalTags>> text={{{ [<journalTitle>get[]] }}}/>

View File

@@ -2,4 +2,4 @@ title: $:/core/ui/Actions/new-tiddler
tags: $:/tags/Actions
description: create a new empty tiddler
<$action-sendmessage $message="tm-new-tiddler"/>
<$action-sendmessage $message="tm-new-tiddler" tags={{$:/config/NewTiddler/Tags!!tags}}/>

View File

@@ -23,7 +23,9 @@ caption: {{$:/language/ControlPanel/Basics/Caption}}
|<$link to="$:/language/DefaultNewTiddlerTitle"><<lingo NewTiddler/Title/Prompt>></$link> |<$edit-text tiddler="$:/language/DefaultNewTiddlerTitle" default="" tag="input"/> |
|<$link to="$:/config/NewJournal/Title"><<lingo NewJournal/Title/Prompt>></$link> |<$edit-text tiddler="$:/config/NewJournal/Title" default="" tag="input"/> |
|<$link to="$:/config/NewJournal/Text"><<lingo NewJournal/Text/Prompt>></$link> |<$edit tiddler="$:/config/NewJournal/Text" tag="textarea" class="tc-edit-texteditor" default=""/> |
|<$link to="$:/config/NewJournal/Tags"><<lingo NewJournal/Tags/Prompt>></$link> |<$edit-text tiddler="$:/config/NewJournal/Tags" default="" tag="input"/> |
|<$link to="$:/config/NewTiddler/Tags"><<lingo NewTiddler/Tags/Prompt>></$link> |<$list filter="[[$:/config/NewTiddler/Tags]]" template="$:/core/ui/EditTemplate/tags"/> |
|<$link to="$:/config/NewJournal/Tags"><<lingo NewJournal/Tags/Prompt>></$link> |<$list filter="[[$:/config/NewJournal/Tags]]" template="$:/core/ui/EditTemplate/tags"/> |
|<$link to="$:/config/AutoFocus"><<lingo AutoFocus/Prompt>></$link> |{{$:/snippets/minifocusswitcher}} |
|<<lingo Language/Prompt>> |{{$:/snippets/minilanguageswitcher}} |
|<<lingo Tiddlers/Prompt>> |<<show-filter-count "[!is[system]sort[title]]">> |
|<<lingo Tags/Prompt>> |<<show-filter-count "[tags[]sort[title]]">> |

View File

@@ -5,6 +5,13 @@ subtitle: {{$:/core/images/download-button}} {{$:/language/ControlPanel/Plugins/
<div>
<$button class={{{ [<assetInfo>get[original-title]get[version]then[tc-reinstall]] tc-btn-invisible tc-install-plugin +[join[ ]] }}}>
<$action-sendmessage $message="tm-load-plugin-from-library" url={{!!url}} title={{$(assetInfo)$!!original-title}}/>
<$set name="url" value={{!!url}}>
<$set name="currentTiddler" value=<<assetInfo>>>
<$list filter="[enlist{!!dependents}] [{!!parent-plugin}] +[sort[title]]" variable="dependency">
<$action-sendmessage $message="tm-load-plugin-from-library" url=<<url>> title=<<dependency>>/>
</$list>
</$set>
</$set>
{{$:/core/images/download-button}}
<$list filter="[<assetInfo>get[original-title]get[version]]" variable="installedVersion" emptyMessage="""{{$:/language/ControlPanel/Plugins/Install/Caption}}""">
{{$:/language/ControlPanel/Plugins/Reinstall/Caption}}
@@ -12,7 +19,7 @@ subtitle: {{$:/core/images/download-button}} {{$:/language/ControlPanel/Plugins/
</$button>
<div>
</div>
<$reveal stateTitle=<<assetInfo>> stateField="contains-javascript" type="match" text="yes">{{$:/language/ControlPanel/Plugins/PluginWillRequireReload}}</$reveal>
<$reveal stateTitle=<<assetInfo>> stateField="requires-reload" type="match" text="yes">{{$:/language/ControlPanel/Plugins/PluginWillRequireReload}}</$reveal>
</div>
\end
@@ -57,10 +64,29 @@ $:/state/add-plugin-info/$(connectionTiddler)$/$(assetInfo)$
{{$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint}}
</em>
</$list>
<$set name="currentTiddler" value=<<assetInfo>>>
<$list filter="[enlist{!!dependents}] [<currentTiddler>get[parent-plugin]] +[limit[1]]" variable="ignore">
<div>
{{$:/language/ControlPanel/Plugins/AlsoRequires}}
<$list filter="[enlist{!!dependents}] [{!!parent-plugin}] +[sort[title]]" variable="dependency">
<$text text=<<dependency>>/>
</$list>
</div>
</$list>
</$set>
</div>
<div class="tc-plugin-info-dropdown-body">
<$transclude tiddler=<<assetInfo>> field="readme" mode="block"/>
</div>
<$set name="original-title" value={{{ [<assetInfo>get[original-title]] }}}>
<$list filter="[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>limit[1]]" variable="ignore">
<div class="tc-plugin-info-sub-plugins">
<$list filter="[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>sort[title]sort[name]]" variable="assetInfo">
<<display-plugin-info "$type$">>
</$list>
</div>
</$list>
</$set>
</div>
</$reveal>
</$set>
@@ -83,8 +109,10 @@ $:/state/add-plugin-info/$(connectionTiddler)$/$(assetInfo)$
</$reveal>
<div class="tc-plugin-library-listing">
<$list filter="[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]search:author,description,original-title,readme,title{$:/temp/RemoteAssetSearch/$(currentTiddler)$}sort[title]sort[name]]" variable="assetInfo">
<$list filter="[[$:/temp/RemoteAssetSearch/$(currentTiddler)$]has[text]] ~[<assetInfo>!has[parent-plugin]]" variable="ignore"><!-- Hide sub-plugins if we're not searching -->
<<display-plugin-info "$type$">>
</$list>
</$list>
</div>
\end

View File

@@ -1,11 +1,11 @@
title: $:/core/ui/EditTemplate
\define actions()
<$action-sendmessage $message="tm-add-tag" $param={{$:/temp/NewTagName}}/>
<$action-deletetiddler $tiddler="$:/temp/NewTagName"/>
<$action-sendmessage $message="tm-add-field" $name={{$:/temp/newfieldname}} $value={{$:/temp/newfieldvalue}}/>
<$action-deletetiddler $tiddler="$:/temp/newfieldname"/>
<$action-deletetiddler $tiddler="$:/temp/newfieldvalue"/>
\define save-tiddler-actions()
<$action-sendmessage $message="tm-add-tag" $param={{{ [<newTagNameTiddler>get[text]] }}}/>
<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>
<$action-sendmessage $message="tm-add-field" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>
<$action-deletetiddler $tiddler=<<newFieldNameTiddler>>/>
<$action-deletetiddler $tiddler=<<newFieldValueTiddler>>/>
<$action-sendmessage $message="tm-save-tiddler"/>
\end
\define frame-classes()
@@ -13,9 +13,9 @@ tc-tiddler-frame tc-tiddler-edit-frame $(missingTiddlerClass)$ $(shadowTiddlerCl
\end
<div class=<<frame-classes>> data-tiddler-title=<<currentTiddler>>>
<$fieldmangler>
<$set name="storyTiddler" value=<<currentTiddler>>>
<$vars storyTiddler=<<currentTiddler>> newTagNameTiddler=<<qualify "$:/temp/NewTagName">> newFieldNameTiddler=<<qualify "$:/temp/NewFieldName">> newFieldValueTiddler=<<qualify "$:/temp/NewFieldValue">>>
<$keyboard key="((cancel-edit-tiddler))" message="tm-cancel-tiddler">
<$keyboard key="((save-tiddler))" actions=<<actions>>>
<$keyboard key="((save-tiddler))" actions=<<save-tiddler-actions>>>
<$list filter="[all[shadows+tiddlers]tag[$:/tags/EditTemplate]!has[draft.of]]" variable="listItem">
<$set name="tv-config-toolbar-class" filter="[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]">
<$transclude tiddler=<<listItem>>/>
@@ -23,6 +23,6 @@ tc-tiddler-frame tc-tiddler-edit-frame $(missingTiddlerClass)$ $(shadowTiddlerCl
</$list>
</$keyboard>
</$keyboard>
</$set>
</$vars>
</$fieldmangler>
</div>

View File

@@ -3,9 +3,10 @@ title: $:/core/ui/EditTemplate/body/editor
<$edit
field="text"
class="tc-edit-texteditor"
class="tc-edit-texteditor tc-edit-texteditor-body"
placeholder={{$:/language/EditTemplate/Body/Placeholder}}
tabindex={{$:/config/EditTabIndex}}
focus={{{ [{$:/config/AutoFocus}match[text]then[true]] ~[[false]] }}}
><$set

View File

@@ -10,15 +10,26 @@ $:/config/EditTemplateFields/Visibility/$(currentField)$
[[hide]] -[title{$(config-title)$}]
\end
\define current-tiddler-new-field-selector()
[data-tiddler-title="$(currentTiddlerCSSescaped)$"] .tc-edit-field-add-name input
\end
\define new-field-actions()
<$action-sendmessage $message="tm-add-field" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>
<$action-deletetiddler $tiddler=<<newFieldNameTiddler>>/>
<$action-deletetiddler $tiddler=<<newFieldValueTiddler>>/>
<$action-sendmessage $message="tm-focus-selector" $param=<<current-tiddler-new-field-selector>>/>
\end
\define new-field()
<$vars name={{$:/temp/newfieldname}}>
<$vars name={{{ [<newFieldNameTiddler>get[text]] }}}>
<$reveal type="nomatch" text="" default=<<name>>>
<$button>
<$button tooltip=<<lingo Fields/Add/Button/Hint>>>
<$action-sendmessage $message="tm-add-field"
$name=<<name>>
$value={{$:/temp/newfieldvalue}}/>
<$action-deletetiddler $tiddler="$:/temp/newfieldname"/>
<$action-deletetiddler $tiddler="$:/temp/newfieldvalue"/>
$value={{{ [<newFieldValueTiddler>get[text]] }}}/>
<$action-deletetiddler $tiddler=<<newFieldNameTiddler>>/>
<$action-deletetiddler $tiddler=<<newFieldValueTiddler>>/>
<<lingo Fields/Add/Button>>
</$button>
</$reveal>
@@ -61,17 +72,18 @@ $value={{$:/temp/newfieldvalue}}/>
<<lingo Fields/Add/Prompt>>&nbsp;
</em>
<span class="tc-edit-field-add-name">
<$edit-text tiddler="$:/temp/newfieldname" tag="input" default="" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} focusPopup=<<qualify "$:/state/popup/field-dropdown">> class="tc-edit-texteditor tc-popup-handle" tabindex={{$:/config/EditTabIndex}}/>
<$edit-text tiddler=<<newFieldNameTiddler>> tag="input" default="" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} focusPopup=<<qualify "$:/state/popup/field-dropdown">> class="tc-edit-texteditor tc-popup-handle" tabindex={{$:/config/EditTabIndex}} focus={{{ [{$:/config/AutoFocus}match[fields]then[true]] ~[[false]] }}}/>
</span>&nbsp;
<$button popup=<<qualify "$:/state/popup/field-dropdown">> class="tc-btn-invisible tc-btn-dropdown" tooltip={{$:/language/EditTemplate/Field/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Field/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button>&nbsp;
<$reveal state=<<qualify "$:/state/popup/field-dropdown">> type="nomatch" text="" default="">
<div class="tc-block-dropdown tc-edit-type-dropdown">
<$set name="tv-show-missing-links" value="yes">
<$linkcatcher to="$:/temp/newfieldname">
<$linkcatcher to=<<newFieldNameTiddler>>>
<div class="tc-dropdown-item">
<<lingo Fields/Add/Dropdown/User>>
</div>
<$list filter="[!is[shadow]!is[system]fields[]search:title{$:/temp/newfieldname}sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type" variable="currentField">
<$set name="newFieldName" value={{{ [<newFieldNameTiddler>get[text]] }}}>
<$list filter="[!is[shadow]!is[system]fields[]search:title<newFieldName>sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type" variable="currentField">
<$link to=<<currentField>>>
<$text text=<<currentField>>/>
</$link>
@@ -79,17 +91,22 @@ $value={{$:/temp/newfieldvalue}}/>
<div class="tc-dropdown-item">
<<lingo Fields/Add/Dropdown/System>>
</div>
<$list filter="[fields[]search:title{$:/temp/newfieldname}sort[]] -[!is[shadow]!is[system]fields[]]" variable="currentField">
<$list filter="[fields[]search:title<newFieldName>sort[]] -[!is[shadow]!is[system]fields[]]" variable="currentField">
<$link to=<<currentField>>>
<$text text=<<currentField>>/>
</$link>
</$list>
</$set>
</$linkcatcher>
</$set>
</div>
</$reveal>
<span class="tc-edit-field-add-value">
<$edit-text tiddler="$:/temp/newfieldvalue" tag="input" default="" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class="tc-edit-texteditor" tabindex={{$:/config/EditTabIndex}}/>
<$set name="currentTiddlerCSSescaped" value={{{ [<currentTiddler>escapecss[]] }}}>
<$keyboard key="((add-field))" actions=<<new-field-actions>>>
<$edit-text tiddler=<<newFieldValueTiddler>> tag="input" default="" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class="tc-edit-texteditor" tabindex={{$:/config/EditTabIndex}}/>
</$keyboard>
</$set>
</span>&nbsp;
<span class="tc-edit-field-add-button">
<$macrocall $name="new-field"/>

View File

@@ -25,21 +25,13 @@ color:$(foregroundColor)$;
<$macrocall $name="tag-body-inner" colour="""$colour$""" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} icon="""$icon$"""/>
\end
\define tag-picker-actions()
<$action-listops
$tiddler=<<currentTiddler>>
$field="tags"
$subfilter="[<tag>] [all[current]tags[]]"
/>
\end
<div class="tc-edit-tags">
<$fieldmangler>
<$list filter="[all[current]tags[]sort[title]]" storyview="pop">
<$macrocall $name="tag-body" colour={{!!color}} palette={{$:/palette}} icon={{!!icon}}/>
</$list>
</$fieldmangler>
<$set name="tabIndex" value={{$:/config/EditTabIndex}}>
<$macrocall $name="tag-picker" actions=<<tag-picker-actions>>/>
<$macrocall $name="tag-picker"/>
</$set>
</$fieldmangler>
</div>

View File

@@ -1,7 +1,7 @@
title: $:/core/ui/EditTemplate/title
tags: $:/tags/EditTemplate
<$edit-text field="draft.title" class="tc-titlebar tc-edit-texteditor" focus="true" tabindex={{$:/config/EditTabIndex}}/>
<$edit-text field="draft.title" class="tc-titlebar tc-edit-texteditor" focus={{{ [{$:/config/AutoFocus}match[title]then[true]] ~[[false]] }}} tabindex={{$:/config/EditTabIndex}}/>
<$vars pattern="""[\|\[\]{}]""" bad-chars="""`| [ ] { }`""">

View File

@@ -3,7 +3,7 @@ tags: $:/tags/EditTemplate
\define lingo-base() $:/language/EditTemplate/
<div class="tc-type-selector"><$fieldmangler>
<em class="tc-edit"><<lingo Type/Prompt>></em> <$edit-text field="type" tag="input" default="" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify "$:/state/popup/type-dropdown">> class="tc-edit-typeeditor tc-popup-handle" tabindex={{$:/config/EditTabIndex}}/> <$button popup=<<qualify "$:/state/popup/type-dropdown">> class="tc-btn-invisible tc-btn-dropdown" tooltip={{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> <$button message="tm-remove-field" param="type" class="tc-btn-invisible tc-btn-icon" tooltip={{$:/language/EditTemplate/Type/Delete/Hint}} aria-label={{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}</$button>
<em class="tc-edit"><<lingo Type/Prompt>></em> <$edit-text field="type" tag="input" default="" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify "$:/state/popup/type-dropdown">> class="tc-edit-typeeditor tc-popup-handle" tabindex={{$:/config/EditTabIndex}} focus={{{ [{$:/config/AutoFocus}match[type]then[true]] ~[[false]] }}}/> <$button popup=<<qualify "$:/state/popup/type-dropdown">> class="tc-btn-invisible tc-btn-dropdown" tooltip={{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> <$button message="tm-remove-field" param="type" class="tc-btn-invisible tc-btn-icon" tooltip={{$:/language/EditTemplate/Type/Delete/Hint}} aria-label={{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}</$button>
</$fieldmangler></div>
<div class="tc-block-dropdown-wrapper">

View File

@@ -3,13 +3,9 @@ tags: $:/tags/EditToolbar
caption: {{$:/core/images/done-button}} {{$:/language/Buttons/Save/Caption}}
description: {{$:/language/Buttons/Save/Hint}}
\define save-tiddler-button()
<$fieldmangler><$button tooltip={{$:/language/Buttons/Save/Hint}} aria-label={{$:/language/Buttons/Save/Caption}} class=<<tv-config-toolbar-class>>>
<$action-sendmessage $message="tm-add-tag" $param={{$:/temp/NewTagName}}/>
<$action-deletetiddler $tiddler="$:/temp/NewTagName"/>
<$action-sendmessage $message="tm-add-field" $name={{$:/temp/newfieldname}} $value={{$:/temp/newfieldvalue}}/>
<$action-deletetiddler $tiddler="$:/temp/newfieldname"/>
<$action-deletetiddler $tiddler="$:/temp/newfieldvalue"/>
<$action-sendmessage $message="tm-save-tiddler"/>
<<save-tiddler-actions>>
<$list filter="[<tv-config-toolbar-icons>match[yes]]">
{{$:/core/images/done-button}}
</$list>
@@ -17,3 +13,5 @@ description: {{$:/language/Buttons/Save/Hint}}
<span class="tc-btn-text"><$text text={{$:/language/Buttons/Save/Caption}}/></span>
</$list>
</$button></$fieldmangler>
\end
<<save-tiddler-button>>

View File

@@ -7,7 +7,7 @@ $:/config/PageControlButtons/Visibility/$(listItem)$
<div class="tc-page-controls">
<$list filter="[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]" variable="listItem">
<$set name="hidden" value=<<config-title>>>
<$list filter="[<hidden>!text[hide]]" storyview="pop">
<$list filter="[<hidden>!text[hide]]" storyview="pop" variable="ignore">
<$set name="tv-config-toolbar-class" filter="[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]">
<$transclude tiddler=<<listItem>> mode="inline"/>
</$set>

View File

@@ -3,6 +3,7 @@ tags: $:/tags/PageControls
caption: {{$:/core/images/advanced-search-button}} {{$:/language/Buttons/AdvancedSearch/Caption}}
description: {{$:/language/Buttons/AdvancedSearch/Hint}}
\whitespace trim
\define control-panel-button(class)
<$button to="$:/AdvancedSearch" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class="""$(tv-config-toolbar-class)$ $class$""">
<$list filter="[<tv-config-toolbar-icons>match[yes]]">

View File

@@ -3,6 +3,7 @@ tags: $:/tags/PageControls
caption: {{$:/core/images/options-button}} {{$:/language/Buttons/ControlPanel/Caption}}
description: {{$:/language/Buttons/ControlPanel/Hint}}
\whitespace trim
\define control-panel-button(class)
<$button to="$:/ControlPanel" tooltip={{$:/language/Buttons/ControlPanel/Hint}} aria-label={{$:/language/Buttons/ControlPanel/Caption}} class="""$(tv-config-toolbar-class)$ $class$""">
<$list filter="[<tv-config-toolbar-icons>match[yes]]">

View File

@@ -3,6 +3,7 @@ tags: $:/tags/PageControls
caption: {{$:/core/images/locked-padlock}} {{$:/language/Buttons/Encryption/Caption}}
description: {{$:/language/Buttons/Encryption/Hint}}
\whitespace trim
<$reveal type="match" state="$:/isEncrypted" text="yes">
<$button message="tm-clear-password" tooltip={{$:/language/Buttons/Encryption/ClearPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/ClearPassword/Caption}} class=<<tv-config-toolbar-class>>>
<$list filter="[<tv-config-toolbar-icons>match[yes]]">
@@ -22,4 +23,4 @@ description: {{$:/language/Buttons/Encryption/Hint}}
<span class="tc-btn-text"><$text text={{$:/language/Buttons/Encryption/SetPassword/Caption}}/></span>
</$list>
</$button>
</$reveal>
</$reveal>

View File

@@ -3,6 +3,7 @@ tags: $:/tags/PageControls
caption: {{$:/core/images/globe}} {{$:/language/Buttons/Language/Caption}}
description: {{$:/language/Buttons/Language/Hint}}
\whitespace trim
\define flag-title()
$(languagePluginTitle)$/icon
\end
@@ -24,4 +25,4 @@ $(languagePluginTitle)$/icon
<div class="tc-drop-down">
{{$:/snippets/languageswitcher}}
</div>
</$reveal>
</$reveal>

View File

@@ -3,6 +3,7 @@ tags: $:/tags/PageControls
caption: {{$:/core/images/list}} {{$:/language/Buttons/Manager/Caption}}
description: {{$:/language/Buttons/Manager/Hint}}
\whitespace trim
\define manager-button(class)
<$button to="$:/Manager" tooltip={{$:/language/Buttons/Manager/Hint}} aria-label={{$:/language/Buttons/Manager/Caption}} class="""$(tv-config-toolbar-class)$ $class$""">
<$list filter="[<tv-config-toolbar-icons>match[yes]]">

View File

@@ -3,6 +3,7 @@ tags: $:/tags/PageControls
caption: {{$:/core/images/new-image-button}} {{$:/language/Buttons/NewImage/Caption}}
description: {{$:/language/Buttons/NewImage/Hint}}
\whitespace trim
<$button tooltip={{$:/language/Buttons/NewImage/Hint}} aria-label={{$:/language/Buttons/NewImage/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-image}}>
<$list filter="[<tv-config-toolbar-icons>match[yes]]">
{{$:/core/images/new-image-button}}

View File

@@ -3,6 +3,7 @@ tags: $:/tags/PageControls
caption: {{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournal/Caption}}
description: {{$:/language/Buttons/NewJournal/Hint}}
\whitespace trim
\define journalButton()
<$button tooltip={{$:/language/Buttons/NewJournal/Hint}} aria-label={{$:/language/Buttons/NewJournal/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-journal}}>
<$list filter="[<tv-config-toolbar-icons>match[yes]]">

View File

@@ -3,6 +3,7 @@ tags: $:/tags/PageControls
caption: {{$:/core/images/new-button}} {{$:/language/Buttons/NewTiddler/Caption}}
description: {{$:/language/Buttons/NewTiddler/Hint}}
\whitespace trim
<$button actions={{$:/core/ui/Actions/new-tiddler}} tooltip={{$:/language/Buttons/NewTiddler/Hint}} aria-label={{$:/language/Buttons/NewTiddler/Caption}} class=<<tv-config-toolbar-class>>>
<$list filter="[<tv-config-toolbar-icons>match[yes]]">
{{$:/core/images/new-button}}

View File

@@ -3,6 +3,7 @@ tags: $:/tags/PageControls
caption: {{$:/core/images/palette}} {{$:/language/Buttons/Palette/Caption}}
description: {{$:/language/Buttons/Palette/Hint}}
\whitespace trim
<span class="tc-popup-keep">
<$button popup=<<qualify "$:/state/popup/palette">> tooltip={{$:/language/Buttons/Palette/Hint}} aria-label={{$:/language/Buttons/Palette/Caption}} class=<<tv-config-toolbar-class>> selectedClass="tc-selected">
<$list filter="[<tv-config-toolbar-icons>match[yes]]">
@@ -17,4 +18,4 @@ description: {{$:/language/Buttons/Palette/Hint}}
<div class="tc-drop-down" style="font-size:0.7em;">
{{$:/snippets/paletteswitcher}}
</div>
</$reveal>
</$reveal>

View File

@@ -3,6 +3,7 @@ tags: $:/tags/PageControls
caption: {{$:/core/images/storyview-classic}} {{$:/language/Buttons/StoryView/Caption}}
description: {{$:/language/Buttons/StoryView/Hint}}
\whitespace trim
\define icon()
$:/core/images/storyview-$(storyview)$
\end
@@ -22,4 +23,4 @@ $:/core/images/storyview-$(storyview)$
<div class="tc-drop-down">
{{$:/snippets/viewswitcher}}
</div>
</$reveal>
</$reveal>

View File

@@ -3,6 +3,7 @@ tags: $:/tags/PageControls
caption: {{$:/core/images/tag-button}} {{$:/language/Buttons/TagManager/Caption}}
description: {{$:/language/Buttons/TagManager/Hint}}
\whitespace trim
\define control-panel-button(class)
<$button to="$:/TagManager" tooltip={{$:/language/Buttons/TagManager/Hint}} aria-label={{$:/language/Buttons/TagManager/Caption}} class="""$(tv-config-toolbar-class)$ $class$""">
<$list filter="[<tv-config-toolbar-icons>match[yes]]">

View File

@@ -3,6 +3,7 @@ tags: $:/tags/PageControls
caption: {{$:/core/images/theme-button}} {{$:/language/Buttons/Theme/Caption}}
description: {{$:/language/Buttons/Theme/Hint}}
\whitespace trim
<span class="tc-popup-keep">
<$button popup=<<qualify "$:/state/popup/theme">> tooltip={{$:/language/Buttons/Theme/Hint}} aria-label={{$:/language/Buttons/Theme/Caption}} class=<<tv-config-toolbar-class>> selectedClass="tc-selected">
<$list filter="[<tv-config-toolbar-icons>match[yes]]">
@@ -19,4 +20,4 @@ description: {{$:/language/Buttons/Theme/Hint}}
{{$:/snippets/themeswitcher}}
</$linkcatcher>
</div>
</$reveal>
</$reveal>

View File

@@ -3,6 +3,7 @@ tags: $:/tags/PageControls
caption: {{$:/core/images/timestamp-on}} {{$:/language/Buttons/Timestamp/Caption}}
description: {{$:/language/Buttons/Timestamp/Hint}}
\whitespace trim
<$reveal type="nomatch" state="$:/config/TimestampDisable" text="yes">
<$button tooltip={{$:/language/Buttons/Timestamp/On/Hint}} aria-label={{$:/language/Buttons/Timestamp/On/Caption}} class=<<tv-config-toolbar-class>>>
<$action-setfield $tiddler="$:/config/TimestampDisable" $value="yes"/>
@@ -24,4 +25,4 @@ description: {{$:/language/Buttons/Timestamp/Hint}}
<span class="tc-btn-text"><$text text={{$:/language/Buttons/Timestamp/Off/Caption}}/></span>
</$list>
</$button>
</$reveal>
</$reveal>

View File

@@ -3,5 +3,5 @@ tags: $:/tags/SideBar
caption: {{$:/language/SideBar/More/Caption}}
<div class="tc-more-sidebar">
<$macrocall $name="tabs" tabsList="[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]" default={{$:/config/DefaultMoreSidebarTab}} state="$:/state/tab/moresidebar" class="tc-vertical" />
<$macrocall $name="tabs" tabsList="[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]" default={{$:/config/DefaultMoreSidebarTab}} state="$:/state/tab/moresidebar" class="tc-vertical tc-sidebar-tabs-more" />
</div>

View File

@@ -1,6 +1,7 @@
title: $:/core/ui/SideBarSegments/search
tags: $:/tags/SideBarSegment
\whitespace trim
<div class="tc-sidebar-lists tc-sidebar-search">
<$set name="searchTiddler" value="$:/temp/search">

View File

@@ -3,6 +3,6 @@ tags: $:/tags/SideBarSegment
<div class="tc-sidebar-lists tc-sidebar-tabs">
<$macrocall $name="tabs" tabsList="[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]" default={{$:/config/DefaultSidebarTab}} state="$:/state/tab/sidebar" />
<$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"/>
</div>

View File

@@ -5,7 +5,7 @@ description: {{$:/language/Buttons/NewHere/Hint}}
\whitespace trim
\define newHereActions()
<$set name="tags" filter="[<currentTiddler>]">
<$set name="tags" filter="[<currentTiddler>] [{$:/config/NewTiddler/Tags!!tags}]">
<$action-sendmessage $message="tm-new-tiddler" tags=<<tags>>/>
</$set>
\end
@@ -21,4 +21,4 @@ description: {{$:/language/Buttons/NewHere/Hint}}
</$list>
</$button>
\end
<<newHereButton>>
<<newHereButton>>

View File

@@ -23,9 +23,9 @@ description: {{$:/language/Buttons/NewJournalHere/Hint}}
</$button>
\end
<$set name="journalTitleTemplate" value={{$:/config/NewJournal/Title}}>
<$set name="journalTags" value={{$:/config/NewJournal/Tags}}>
<$set name="journalTags" value={{$:/config/NewJournal/Tags!!tags}}>
<$set name="currentTiddlerTag" value=<<currentTiddler>>>
<<journalButton>>
</$set>
</$set>
</$set>
</$set>

View File

@@ -0,0 +1,2 @@
title: $:/config/AutoFocus
text: title

View File

@@ -1,5 +1,6 @@
title: $:/config/ShortcutInfo/
add-field: {{$:/language/EditTemplate/Fields/Add/Button/Hint}}
advanced-search: {{$:/language/Buttons/AdvancedSearch/Hint}}
bold: {{$:/language/Buttons/Bold/Hint}}
cancel-edit-tiddler: {{$:/language/Buttons/Cancel/Hint}}

View File

@@ -1,5 +1,6 @@
title: $:/config/shortcuts/
add-field: enter
advanced-search: ctrl-shift-A
cancel-edit-tiddler: escape
excise: ctrl-E

View File

@@ -15,7 +15,7 @@ $(colour-picker-update-recent)$
$actions$
<div style="background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;"/>
<span style="display:inline-block; background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;"/>
</$button>
\end
@@ -44,7 +44,7 @@ $actions$
---
<$edit-text tiddler="$:/config/ColourPicker/New" tag="input" default="" placeholder=""/>
<$edit-text tiddler="$:/config/ColourPicker/New" tag="input" default="" placeholder=""/>
<$edit-text tiddler="$:/config/ColourPicker/New" type="color" tag="input"/>
<$set name="colour-picker-value" value={{$:/config/ColourPicker/New}}>
<$macrocall $name="colour-picker-inner" actions="""$actions$"""/>

View File

@@ -2,30 +2,29 @@ title: $:/core/macros/tag-picker
tags: $:/tags/Macro
\define add-tag-actions()
<$action-sendmessage $message="tm-add-tag" $param={{$:/temp/NewTagName}}/>
<$action-deletetiddler $tiddler="$:/temp/NewTagName"/>
<$action-sendmessage $message="tm-add-tag" $param={{{ [<newTagNameTiddler>get[text]] }}}/>
<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>
\end
\define tag-button()
<$button class="tc-btn-invisible" tag="a">
$(actions)$
<$action-deletetiddler $tiddler="$:/temp/NewTagName"/>
<$button class="tc-btn-invisible" tag="a" tooltip={{$:/language/EditTemplate/Tags/Add/Button/Hint}}>
<$action-sendmessage $message="tm-add-tag" $param=<<tag>>/>
<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>
<$macrocall $name="tag-pill" tag=<<tag>>/>
</$button>
\end
\define tag-picker(actions)
<$set name="actions" value="""$actions$""">
\define tag-picker-inner()
<div class="tc-edit-add-tag">
<span class="tc-add-tag-name">
<$keyboard key="ENTER" actions=<<add-tag-actions>>>
<$edit-text tiddler="$:/temp/NewTagName" tag="input" default="" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}} focusPopup=<<qualify "$:/state/popup/tags-auto-complete">> class="tc-edit-texteditor tc-popup-handle" tabindex=<<tabIndex>>/>
<$edit-text tiddler=<<newTagNameTiddler>> tag="input" default="" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}} focusPopup=<<qualify "$:/state/popup/tags-auto-complete">> class="tc-edit-texteditor tc-popup-handle" tabindex=<<tabIndex>> focus={{{ [{$:/config/AutoFocus}match[tags]then[true]] ~[[false]] }}}/>
</$keyboard>
</span> <$button popup=<<qualify "$:/state/popup/tags-auto-complete">> class="tc-btn-invisible" tooltip={{$:/language/EditTemplate/Tags/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Tags/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> <span class="tc-add-tag-button">
<$set name="tag" value={{$:/temp/NewTagName}}>
<$set name="tag" value={{{ [<newTagNameTiddler>get[text]] }}}>
<$button set="$:/temp/NewTagName" setTo="" class="">
$actions$
<$action-deletetiddler $tiddler="$:/temp/NewTagName"/>
<<add-tag-actions>>
<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>
{{$:/language/EditTemplate/Tags/Add/Button}}
</$button>
</$set>
@@ -34,17 +33,25 @@ $actions$
<div class="tc-block-dropdown-wrapper">
<$reveal state=<<qualify "$:/state/popup/tags-auto-complete">> type="nomatch" text="" default="">
<div class="tc-block-dropdown">
<$list filter="[{$:/temp/NewTagName}minlength{$:/config/Tags/MinLength}limit[1]]" emptyMessage="""<div class="tc-search-results">{{$:/language/Search/Search/TooShort}}</div>""" variable="listItem">
<$list filter="[tags[]!is[system]search:title{$:/temp/NewTagName}sort[]]" variable="tag">
<$set name="newTagName" value={{{ [<newTagNameTiddler>get[text]] }}}>
<$list filter="[<newTagName>minlength{$:/config/Tags/MinLength}limit[1]]" emptyMessage="""<div class="tc-search-results">{{$:/language/Search/Search/TooShort}}</div>""" variable="listItem">
<$list filter="[tags[]!is[system]search:title<newTagName>sort[]]" variable="tag">
<<tag-button>>
</$list></$list>
<hr>
<$list filter="[{$:/temp/NewTagName}minlength{$:/config/Tags/MinLength}limit[1]]" emptyMessage="""<div class="tc-search-results">{{$:/language/Search/Search/TooShort}}</div>""" variable="listItem">
<$list filter="[tags[]is[system]search:title{$:/temp/NewTagName}sort[]]" variable="tag">
<$list filter="[<newTagName>minlength{$:/config/Tags/MinLength}limit[1]]" emptyMessage="""<div class="tc-search-results">{{$:/language/Search/Search/TooShort}}</div>""" variable="listItem">
<$list filter="[tags[]is[system]search:title<newTagName>sort[]]" variable="tag">
<<tag-button>>
</$list></$list>
</$set>
</div>
</$reveal>
</div>
</$set>
\end
\define tag-picker()
<$list filter="[<newTagNameTiddler>match[]]" emptyMessage=<<tag-picker-inner>>>
<$set name="newTagNameTiddler" value=<<qualify "$:/temp/NewTagName">>>
<<tag-picker-inner>>
</$set>
</$list>
\end

View File

@@ -106,7 +106,7 @@ tags: $:/tags/Macro
<$set name="toc-item-class" filter=<<__itemClassFilter__>> emptyValue="toc-item-selected" value="toc-item" >
<li class=<<toc-item-class>>>
<$link>
<$list filter="[all[current]tagging[]limit[1]]" variable="ignore" emptyMessage="<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>">
<$list filter="[all[current]tagging[]$sort$limit[1]]" variable="ignore" emptyMessage="<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>">
<$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}}
@@ -132,7 +132,7 @@ tags: $:/tags/Macro
<$qualify name="toc-state" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>
<$set name="toc-item-class" filter=<<__itemClassFilter__>> emptyValue="toc-item-selected" value="toc-item">
<li class=<<toc-item-class>>>
<$list filter="[all[current]tagging[]limit[1]]" variable="ignore" emptyMessage="<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button> <$view field='caption'><$view field='title'/></$view>">
<$list filter="[all[current]tagging[]$sort$limit[1]]" variable="ignore" emptyMessage="<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button> <$view field='caption'><$view field='title'/></$view>">
<$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}}

View File

@@ -0,0 +1,7 @@
title: $:/snippets/minifocusswitcher
<$select tiddler="$:/config/AutoFocus">
<$list filter="title tags text type fields">
<option value=<<currentTiddler>>><<currentTiddler>></option>
</$list>
</$select>

View File

@@ -11,18 +11,41 @@ type: text/vnd.tiddlywiki
Plugins [[can now|https://github.com/Jermolene/TiddlyWiki5/pull/4259]] be loaded or deleted dynamically, without requiring a reload -- as long as they don't contain any ~JavaScript modules. Plugins that require a reload are indicated in the plugin chooser in [[$:/ControlPanel]].
The [[plugin listing|$:/core/ui/ControlPanel/Plugins]] and the [[plugin chooser|$:/core/ui/ControlPanel/Modals/AddPlugins]] in the control panel feature several improvements:
* The plugin chooser now displays plugins that provide add-on functionality to another plugin as nested "sub-plugins", making the main listing easier to navigate
* Plugins may now declare dependencies that are automatically installed without user intervention
* All plugins now feature a concise, informal name (in addition to the description and title)
! Translation Improvements
* Improved Dutch translation
! Usability Improvements
* [[Added|https://github.com/Jermolene/TiddlyWiki5/pull/4238]] support for specifying the field that should receive focus when editing or creating a tiddler
* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/pull/4293]] ([[and here|https://github.com/Jermolene/TiddlyWiki5/pull/4296]]) spacing for page control buttons
* [[Improved|https://github.com/Jermolene/TiddlyWiki5/commit/9395d7567179c436d0e8ac26fc976d717eae7f50]] display of icons in documentation
* [[Added|https://github.com/Jermolene/TiddlyWiki5/pull/4314]] support in control panel for specifying the tags for new tiddlers and journals
! Hackability Improvements
* [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/6089c4de2921df0f76f605f1830fb2c04548f73c]] support for RefreshThrottling via the `throttle.refresh` field
* [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/1150c87edb7478af6cc943eb0ef52fdf3051c121]] (and [[here|https://github.com/Jermolene/TiddlyWiki5/commit/8c894612914e21cf941a1daa953538c28ce91d8e]]) new `[is[binary]]` operand for the [[is Operator]]
* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/commit/68163684a2e57108e160295e445c194268b873c5]] usage of `publishFilter` in save templates -- see SavingMechanism
* [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/89716bb81d68b9c68d3c0fd2f2de96afad1b086a]] CSS class identifying the tiddler body editor
* [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/e9211b0eee8e0b081f9f1597bde6673bf4c55d5c]] CSS classes to identify sidebar tabsets
* [[Updated|https://github.com/Jermolene/TiddlyWiki5/pull/4208]] normalize.css from v3.0.0 to v8.0.1
! Bug Fixes
* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/issues/4291]] bug with deletes failing when lazy loading used under Node.js
* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/pull/4243]] problem with the [[GitLab saver|Saving to a Git service]]
* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/issues/4237]] bug with permaview button when placed above the search box
* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/commit/a054d100e73db95071299e92c4321c2aa8e42382]] usage of ''count'' parameter of [[WidgetMessage: tm-edit-text-operation]]
* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/issues/4284]] bug with toc-selective-expandable macro still showing disclosure arrow despite excluding tiddlers
* [[Removed|https://github.com/Jermolene/TiddlyWiki5/commit/81f1e6af4e5920c6ff41e7f08171bfddc1b26dfc]] erroneous word break setting for vertical tabs
* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/commit/d30eacc6520971c95bdabf24f4c4122534d9414a]] problem with programmatically deselecting entries from the SelectWidget in multiple selection mode
! Contributors

View File

@@ -12,7 +12,7 @@ table-border: #ccc
...
```
Several palettes form part of the core. The system tiddler [[$:/palette]] always contains the title of the currently selected palette tiddler. You can change a palette using the {{$:/core/images/palette}} ''palette'' button, found on the "Tools" tab in the sidebar.
Several palettes form part of the core. The system tiddler [[$:/palette]] always contains the title of the currently selected palette tiddler. You can change a palette using the <<.icon $:/core/images/palette>> ''palette'' button, found on the "Tools" tab in the sidebar.
To retrieve the value of a named colour from the current palette, e.g. for use in a stylesheet tiddler, use the <<.mlink colour>> macro:

View File

@@ -4,7 +4,7 @@ tags: Features
title: InfoPanel
type: text/vnd.tiddlywiki
Each tiddler has a panel of additional information. To reveal it, click the {{$:/core/images/down-arrow}} button in the tiddler's toolbar and then choose {{$:/core/images/info-button}} ''info'' from the dropdown list.
Each tiddler has a panel of additional information. To reveal it, click the <<.icon $:/core/images/down-arrow>> button in the tiddler's toolbar and then choose <<.icon $:/core/images/info-button>> ''info'' from the dropdown list.
The info panel has the following tabs:

View File

@@ -6,4 +6,4 @@ type: text/vnd.tiddlywiki
A //module// in TiddlyWiki5 is a tiddler containing executable JavaScript, of the type `application/javascript` and with the field `module-type` set to the ModuleType of the module.
See [[control panel|$:/ControlPanel]] {{$:/core/images/options-button}} > ''Info'' > ''Advanced'' > ''Loaded Modules'' for a list of currently loaded modules.
See [[control panel|$:/ControlPanel]] <<.icon $:/core/images/options-button>> > ''Info'' > ''Advanced'' > ''Loaded Modules'' for a list of currently loaded modules.

View File

@@ -8,7 +8,7 @@ Permalinks allow direct links to individual tiddlers within a TiddlyWiki.
! Simple Permalinks
The simplest form of permalink ({{$:/core/images/permalink-button}}) is a single target tiddler title appended to the base URL with `#`:
The simplest form of permalink (<<.icon $:/core/images/permalink-button>>) is a single target tiddler title appended to the base URL with `#`:
https://tiddlywiki.com/#HelloThere
@@ -42,7 +42,7 @@ Both the target tiddler title and the story filter should be URL encoded (but no
! Permalink Behaviour
Two important aspects of TiddlyWiki's behaviour with permalinks can be controlled via options in the [[control panel|$:/ControlPanel]] {{$:/core/images/options-button}} ''Settings'' tab:
Two important aspects of TiddlyWiki's behaviour with permalinks can be controlled via options in the [[control panel|$:/ControlPanel]] <<.icon $:/core/images/options-button>> ''Settings'' tab:
* Whether to automatically update the address bar at each navigation, and if so whether to include the story sequence as well as the target tiddler
* Whether the updates to the address bar should affect browser history. The default is ''no''; when switched to ''yes'' you can rewind navigation between tiddlers using the browser back and forward buttons

View File

@@ -1,5 +1,5 @@
created: 20130825213300000
modified: 20180104000000000
modified: 20191013093910961
tags: Concepts
title: TiddlerFields
type: text/vnd.tiddlywiki
@@ -9,43 +9,44 @@ type: text/vnd.tiddlywiki
The standard fields are:
|!Field Name |!Reference |!Description |
|`title` |TitleField |<<lingo title>> |
|`text` |TextField |<<lingo text>> |
|`modified` |ModifiedField |<<lingo modified>> |
|`modifier` |ModifierField |<<lingo modifier>> |
|`created` |CreatedField |<<lingo created>> |
|`creator` |CreatorField |<<lingo creator>> |
|`tags` |TagsField |<<lingo tags>> |
|`type` |TypeField |<<lingo type>> |
|`list` |ListField |<<lingo list>> |
|`caption` |CaptionField |<<lingo caption>> |
|!Field Name |!Description |
|`title` |<<lingo title>> |
|`text` |<<lingo text>> |
|`modified` |<<lingo modified>> |
|`modifier` |<<lingo modifier>> |
|`created` |<<lingo created>> |
|`creator` |<<lingo creator>> |
|`tags` |<<lingo tags>> |
|`type` |<<lingo type>> |
|`list` |<<lingo list>> -- see ListField |
|`caption` |<<lingo caption>> |
Other fields used by the core are:
|!Field Name |!Reference |!Description |
|`class` |ClassField |<<lingo class>> |
|`color` |ColorField |<<lingo color>> |
|`description` |DescriptionField |<<lingo description>> |
|`draft.of` |DraftOfField |<<lingo draft.of>> |
|`draft.title` |DraftTitleField |<<lingo draft.title>> |
|`footer` |FooterField |<<lingo footer>> |
|`hide-body`|HideBodyField|<<lingo hide-body>>|
|`icon` |IconField |<<lingo icon>> |
|`library` |LibraryField |<<lingo library>> |
|`list-after` |ListAfterField |<<lingo list-after>> |
|`list-before` |ListBeforeField |<<lingo list-before>> |
|`name` |NameField |<<lingo name>> |
|`plugin-priority` |PluginPriorityField |<<lingo plugin-priority>> |
|`plugin-type` |PluginTypeField |<<lingo plugin-type>> |
|`source` |SourceField |<<lingo source>> |
|`subtitle` |SubtitleField |<<lingo subtitle>> |
|`toc-link`|TocLink|<<lingo toc-link>>|
|!Field Name |!Description |
|`class` |<<lingo class>> |
|`color` |<<lingo color>> |
|`description` |<<lingo description>> |
|`draft.of` |<<lingo draft.of>> |
|`draft.title` |<<lingo draft.title>> |
|`footer` |<<lingo footer>> |
|`hide-body`|<<lingo hide-body>>|
|`icon` |<<lingo icon>> |
|`library` |<<lingo library>> |
|`list-after` |<<lingo list-after>> |
|`list-before` |<<lingo list-before>> |
|`name` |<<lingo name>> |
|`plugin-priority` |<<lingo plugin-priority>> |
|`plugin-type` |<<lingo plugin-type>> |
|`source` |<<lingo source>> |
|`subtitle` |<<lingo subtitle>> |
|`throttle.refresh` |<<lingo throttle.refresh>> |
|`toc-link`|<<lingo toc-link>>|
The TiddlyWebAdaptor uses a few more fields:
|!Field Name |!Reference |!Description |
|`bag` |BagField |<<lingo bag>> |
|`revision` |RevisionField |<<lingo revision>> |
|!Field Name |!Description |
|`bag` |<<lingo bag>> |
|`revision` |<<lingo revision>> |
Details of the fields used in this ~TiddlyWiki are shown in the [[control panel|$:/ControlPanel]] {{$:/core/ui/Buttons/control-panel}} under the <<.controlpanel-tab Info>> tab >> <<.info-tab Advanced>> sub-tab >> Tiddler Fields

View File

@@ -4,8 +4,8 @@ tags: Features
title: AutoSave
type: text/vnd.tiddlywiki
If there is a SaverModule available that supports it, TiddlyWiki will automatically trigger a save of the current document on clicking {{$:/core/images/done-button}} ''ok'' or {{$:/core/images/delete-button}} ''delete'' when editing a tiddler.
If there is a SaverModule available that supports it, TiddlyWiki will automatically trigger a save of the current document on clicking <<.icon $:/core/images/done-button>> ''ok'' or <<.icon $:/core/images/delete-button>> ''delete'' when editing a tiddler.
You should see a yellow notification at the top right of the window to confirm that an automatic save has taken place.
Automatic saving can be enabled or disabled through the ''Settings'' tab of the [[control panel|$:/ControlPanel]] {{$:/core/images/options-button}}. Behind the scenes, it is controlled through the configuration tiddler [[$:/config/AutoSave]], which must have the value ''yes'' to enable automatic saving.
Automatic saving can be enabled or disabled through the ''Settings'' tab of the [[control panel|$:/ControlPanel]] <<.icon $:/core/images/options-button>>. Behind the scenes, it is controlled through the configuration tiddler [[$:/config/AutoSave]], which must have the value ''yes'' to enable automatic saving.

View File

@@ -10,7 +10,7 @@ You can import tiddlers into a ~TiddlyWiki from external files or directly from
There are several ways to import content from external files:
* Use the {{$:/core/images/import-button}} ''import'' button (under the ''Tools'' tab in the sidebar) to select a local file
* Use the <<.icon $:/core/images/import-button>> ''import'' button (under the ''Tools'' tab in the sidebar) to select a local file
* Drag and drop files from Windows Explorer or OS X Finder etc. into the TiddlyWiki browser window
* Paste content directly from the clipboard using the menu or keyboard shortcut (<kbd>ctrl-V</kbd> or <kbd>cmd-V</kbd>)
** Currently supported in Chrome, Firefox and Edge (but not Internet Explorer)

View File

@@ -18,7 +18,7 @@ https://tiddlywiki.com/#:safe
Safe mode triggers two changes:
* All plugins are temporarily disabled. You can use the [[control panel|$:/ControlPanel]] {{$:/core/images/options-button}} to disable individual plugins
* All plugins are temporarily disabled. You can use the [[control panel|$:/ControlPanel]] <<.icon $:/core/images/options-button>> to disable individual plugins
* Any tiddlers that override shadow tiddlers are renamed to give them the prefix `SAFE: `, thus restoring the underlying shadow tiddler
* Certain configuration options are ignored, and the default settings used instead:
** WikiParserRuleConfiguration

View File

@@ -14,7 +14,7 @@ Typing text into the search box in the sidebar will turn up a list of all the ti
! Advanced searching
Clicking on the magnifying glass icon {{$:/core/images/advanced-search-button}} to the right of the search box will open [[$:/AdvancedSearch]]. This tiddler contains four tabs:
Clicking on the magnifying glass icon <<.icon $:/core/images/advanced-search-button>> to the right of the search box will open [[$:/AdvancedSearch]]. This tiddler contains four tabs:
* The ''standard'' tab contains another instance of the search box found in the sidebar
* The ''system'' tab allows you to limit your search to system tiddlers

View File

@@ -1,10 +1,12 @@
created: 20150619162409306
modified: 20150619162511957
modified: 20191014091803518
tags: [[Hidden Settings]]
title: Hidden Setting: Typing Refresh Delay
type: text/vnd.tiddlywiki
TiddlyWiki defers processing changes to draft tiddlers until a timeout has elapsed. The default value of 400ms gives a good balance of responsiveness in most cases but isn't always optimal on lower powered mobile devices.
TiddlyWiki defers processing changes to draft tiddlers until a timeout has elapsed (this is called throttling). The mechanism can be extended to other tiddlers by adding a `throttle.refresh` field. See RefreshThrottling for details.
The default value of 400ms gives a good balance of responsiveness in most cases but isn't always optimal on lower powered mobile devices.
The timeout can now be changed by changing this value (in milliseconds):

View File

@@ -19,7 +19,7 @@ A customisable [[table of contents|Table-of-Contents Macros]] can be added to th
# Add a ''caption'' field with the text ''Contents''
# Add a ''list-after'' field with the text ''~$:/core/ui/SideBar/Open''
Add entries to the table of contents by creating tiddlers tagged ''~TableOfContents''. An easy way is to choose {{$:/core/images/new-here-button}} ''new here'' from the tiddler toolbar of the ''~TableOfContents'' tiddler.
(if you don't see the "new here" button, click on the down arrow {{$:/core/images/down-arrow}} to see more menu options.)
Add entries to the table of contents by creating tiddlers tagged ''~TableOfContents''. An easy way is to choose <<.icon $:/core/images/new-here-button>> ''new here'' from the tiddler toolbar of the ''~TableOfContents'' tiddler.
(if you don't see the "new here" button, click on the down arrow <<.icon $:/core/images/down-arrow>> to see more menu options.)
To create child tiddlers (tiddlers that come below other tiddlers), tag them with the name of the parent tiddler.

View File

@@ -14,7 +14,7 @@ A tiddler with the <<.def prefix>> `$:/config/ShortcutInfo/` and a ''unique suff
In the [[Keyboard Shortcuts Tab|$:/core/ui/ControlPanel/KeyboardShortcuts]] the ''key combination'' that should trigger the shortcut can be configured:
> Look for the ''unique suffix'' defined for the new shortcut and click the <$button class="tc-btn-invisible">{{$:/core/images/edit-button}}<$action-sendmessage $message="tm-notify" $param="$:/core/images/edit-button"/></$button> button to open a popup that detects ''key combinations'' and shows the detected combination in its input field
> Look for the ''unique suffix'' defined for the new shortcut and click the <$button class="tc-btn-invisible"><<.icon $:/core/images/edit-button>><$action-sendmessage $message="tm-notify" $param="$:/core/images/edit-button"/></$button> button to open a popup that detects ''key combinations'' and shows the detected combination in its input field
>The ''add shortcut'' assigns the key-combination to the shortcut

View File

@@ -6,17 +6,17 @@ type: text/vnd.tiddlywiki
! Selecting All tiddlers for export
To export ''all'' tiddlers click on the "Tools" tab of the Sidebar. Find and click the {{$:/core/images/export-button}} ''export all'' button. A pop-up menu will offer you the chance to export tiddlers in multiple formats.
To export ''all'' tiddlers click on the "Tools" tab of the Sidebar. Find and click the <<.icon $:/core/images/export-button>> ''export all'' button. A pop-up menu will offer you the chance to export tiddlers in multiple formats.
! Exporting a tiddler
If you want to export a particular tiddler, first navigate to that tiddler. Then click on the {{$:/core/images/down-arrow}} ''more'' button that appears above the tiddler. From the list that appears select {{$:/core/images/export-button}} ''export tiddler''. A pop-up menu will offer you the chance to export the tiddler in multiple formats.
If you want to export a particular tiddler, first navigate to that tiddler. Then click on the <<.icon $:/core/images/down-arrow>> ''more'' button that appears above the tiddler. From the list that appears select <<.icon $:/core/images/export-button>> ''export tiddler''. A pop-up menu will offer you the chance to export the tiddler in multiple formats.
! Exporting tiddlers matching a criteria (filter)
To export a selection of tiddlers, click the little magnifying glass {{$:/core/images/advanced-search-button}} next to the search area on the sidebar. This will open the [[Advanced Search|$:/AdvancedSearch]] tiddler. Click on the "Filter" tab of the Advanced Search tiddler. Only the [[Filter|Filters]] tab will allow you to export a selection of tiddlers. [[Filters]] follow a particular syntax. Click on this [[Filters|Filters]] link to learn about how to make filters.
To export a selection of tiddlers, click the little magnifying glass <<.icon $:/core/images/advanced-search-button>> next to the search area on the sidebar. This will open the [[Advanced Search|$:/AdvancedSearch]] tiddler. Click on the "Filter" tab of the Advanced Search tiddler. Only the [[Filter|Filters]] tab will allow you to export a selection of tiddlers. [[Filters]] follow a particular syntax. Click on this [[Filters|Filters]] link to learn about how to make filters.
Once you have written a filter, a list of tiddlers matching the filter will appear. Now you can click on the {{$:/core/images/export-button}} ''export tiddler'' button to the right of the filter input field. A pop-up menu will offer you the chance to export tiddlers in multiple formats.
Once you have written a filter, a list of tiddlers matching the filter will appear. Now you can click on the <<.icon $:/core/images/export-button>> ''export tiddler'' button to the right of the filter input field. A pop-up menu will offer you the chance to export tiddlers in multiple formats.
! Export formats

View File

@@ -7,7 +7,7 @@ type: text/vnd.tiddlywiki
Here's how to display the last modification date of a wiki in a banner in the corner of the window:
# [[Install the plugin|Installing a plugin from the plugin library]] <<.def "Corner ribbon">> in your ~TiddlyWiki
# Save ({{$:/core/images/save-button}}) and reload ({{$:/core/images/refresh-button}}) your wiki
# Save (<<.icon $:/core/images/save-button>>) and reload (<<.icon $:/core/images/refresh-button>>) your wiki
# Create a new tiddler called [[$:/_MyRibbon]] tagged [[$:/tags/PageControls]] and containing:<div>
```

View File

@@ -5,6 +5,6 @@ title: Insert link
This will give you a dialog to search for and pick existing tiddlers in the wiki. When you pick a tiddler it will be inserted as a WikiText link where the cursor is in the text field.
Pressing {{$:/core/images/link}} will give you `[[Some link]]`
Pressing <<.icon $:/core/images/link>> will give you `[[Some link]]`
It wil ''not'' insert: external web links or [[picture|Insert picture]] links.

View File

@@ -6,4 +6,4 @@ title: Insert picture
This will give you a dialog to search for and pick existing image tiddlers in the wiki. When you pick a tiddler it will be inserted as a WikiText image link where the cursor is in the text field.
Pressing {{$:/core/images/picture}} will give you `[img[$:/favicon.ico]]`
Pressing <<.icon $:/core/images/picture>> will give you `[img[$:/favicon.ico]]`

View File

@@ -24,7 +24,7 @@ Keyboard shortcuts are available for common editing operations within the Text E
* Creating a new journal (defaults to <kbd>alt-J</kbd> )
* Creating a new image (defaults to <kbd>alt-I</kbd> )
The current shortcuts can be inspected and customised in the "Keyboard Shortcuts" tab of the [[Control Panel|$:/ControlPanel]] {{$:/core/images/options-button}}.
The current shortcuts can be inspected and customised in the "Keyboard Shortcuts" tab of the [[Control Panel|$:/ControlPanel]] <<.icon $:/core/images/options-button>>.
!! Special Keys

View File

@@ -3,4 +3,4 @@ modified: 20160817110101356
tags: [[Editor toolbar]]
title: More actions
Pressing {{$:/core/images/down-arrow}} Gives you a dropdown menu with more editing options.
Pressing <<.icon $:/core/images/down-arrow>> Gives you a dropdown menu with more editing options.

View File

@@ -6,7 +6,7 @@ type: text/vnd.tiddlywiki
# Import your image as a tiddler (see [[Images in WikiText]])
#* You can also use an [[external image|ExternalImages]]
# Open the [[control panel|$:/ControlPanel]] {{$:/core/images/options-button}} and switch to the ''Appearance''/''Theme Tweaks'' tab
# Open the [[control panel|$:/ControlPanel]] <<.icon $:/core/images/options-button>> and switch to the ''Appearance''/''Theme Tweaks'' tab
# Select your image from the dropdown labelled "Page background image"
# Set "Page background image attachment" to "Fixed to window" to have the background stay stationary and the content to scroll over the top of it, or "Scroll with tiddlers" to have it move (note that the iPhone/iPad [[doesn't support the fixed setting|http://stackoverflow.com/a/20444219]] for performance reasons)
# Set "Page background image size" as follows:

View File

@@ -26,10 +26,10 @@ There are two more things you can do with tags:
! Set a tag's colour and icon
You can use the {{$:/core/images/tag-button}} [[tag manager|$:/TagManager]], found on the ''Tags'' tab under ''More'' in the sidebar, to change the colour of a tag's pill or add an icon to the pill.
You can use the <<.icon $:/core/images/tag-button>> [[tag manager|$:/TagManager]], found on the ''Tags'' tab under ''More'' in the sidebar, to change the colour of a tag's pill or add an icon to the pill.
* To change the colour, click the button in the ''Colour'' column to select from a colour picker. Alternatively, click the icon in the ''Info'' column, then type a [[CSS]] colour value in the ''Colour'' field
* To change the icon, click the {{$:/core/images/down-arrow}} button in the ''Icon'' column and choose from the list of available icons
* To change the icon, click the <<.icon $:/core/images/down-arrow>> button in the ''Icon'' column and choose from the list of available icons
! Change the order in which tags are listed

View File

@@ -27,7 +27,7 @@ This process will work on most desktop browsers. Note that none of your personal
#* If the file is encrypted you will be prompted for the password
# Review the list of tiddlers that will be upgraded
# Click ''Upgrade''
# Save changes to save the new version ({{$:/core/images/save-button}})
# Save changes to save the new version (<<.icon $:/core/images/save-button>>)
This will download a file called ''upgrade.html'' to your computer. This file is the upgrade of your old file. You may need to open the location where ''upgrade.html'' was downloaded, rename ''upgrade.html'' with the name of the old file you are upgrading, and replace the old file by moving the new file in its place.

View File

@@ -6,11 +6,11 @@ type: text/vnd.tiddlywiki
! Excise text
From the EditorToolbar you can export selected text to a new tiddler and insert a [[link|Linking in WikiText]] [[Transclusion]] or [[macro|Macros]] in its place. Click ''Excise text'' ({{$:/core/images/excise}}), input name of the new tiddler, and choose excise method.
From the EditorToolbar you can export selected text to a new tiddler and insert a [[link|Linking in WikiText]] [[Transclusion]] or [[macro|Macros]] in its place. Click ''Excise text'' (<<.icon $:/core/images/excise>>), input name of the new tiddler, and choose excise method.
!! How to excise text
# Highlight the relevant piece of text
#Click ''Excise text'' ({{$:/core/images/excise}})
#Click ''Excise text'' (<<.icon $:/core/images/excise>>)
# Give the new tiddler a title.
# Chosse if the new tiddler will be tagged with the title of the current tiddler''*''.
# Choose replacing method. [[link|Linking in WikiText]] [[Transclusion]] or [[macro|Macros]].

View File

@@ -5,24 +5,24 @@ title: Using Stamp
type: text/vnd.tiddlywiki
! Insert snippets
You can insert preconfigured snippets of text to use stamp from toolbar. Click ''stamp'' ({{$:/core/images/stamp}}) and just select a snippet.
You can insert preconfigured snippets of text to use stamp from toolbar. Click ''stamp'' (<<.icon $:/core/images/stamp>>) and just select a snippet.
! Create a snippet
# Click ''stamp'' ({{$:/core/images/stamp}})
# Click ''stamp'' (<<.icon $:/core/images/stamp>>)
# Create a snippet tiddler through the "//Add your own//" menu entry
# Type some text as snippet for the tiddler, add a caption for the name as shown in the menu
# Click the {{$:/core/images/done-button}} ''ok'' button
# Click the <<.icon $:/core/images/done-button>> ''ok'' button
<<.tip """''Tip:'' You can also create a snippet tiddler using the ''new tiddler'' {{$:/core/images/new-button}} button in the sidebar, and add tag ''~$:/tags/TextEditor/Snippet''""">>
<<.tip """''Tip:'' You can also create a snippet tiddler using the ''new tiddler'' <<.icon $:/core/images/new-button>> button in the sidebar, and add tag ''~$:/tags/TextEditor/Snippet''""">>
!!<<.from-version "5.1.20">> Adding a prefix and/or suffix to a selection
# Click ''stamp'' ({{$:/core/images/stamp}})
# Click ''stamp'' (<<.icon $:/core/images/stamp>>)
# Create a snippet tiddler through the "//Add your own//" menu entry
# Add a caption for the name as shown in the menu
# Create a tiddler with the same title but add the suffix `/prefix`
# Insert the prefix in its text field
# Create a tiddler with the same title but add the suffix `/suffix`
# Insert the suffix in its text field
# Click the {{$:/core/images/done-button}} ''ok'' button
# Click the <<.icon $:/core/images/done-button>> ''ok'' button

View File

@@ -18,7 +18,7 @@ The first steps to changing the appearance of ~TiddlyWiki are to choose and appl
* One of the available themes: <span class="tc-btn-standard"> {{$:/core/ui/Buttons/theme}} </span>
* Modify the colour palette: <span class="tc-btn-standard"> {{$:/core/ui/Buttons/palette}} </span>
* Experiment with the <$button actions=<<openCpTheme>> >{{$:/core/images/options-button}} ControlPanel</$button>
* Experiment with the <$button actions=<<openCpTheme>> ><<.icon $:/core/images/options-button>> ControlPanel</$button>
! Work with Stylesheets

View File

@@ -4,7 +4,7 @@ tags: Mechanisms Features
title: AlertMechanism
type: text/vnd.tiddlywiki
Alerts are displayed as yellow boxes overlaying the main TiddlyWiki window. Each one corresponds to a tiddler with the tag [[$:/tags/Alert]]. Clicking the {{$:/core/images/delete-button}} delete icon on an alert deletes the corresponding tiddler.
Alerts are displayed as yellow boxes overlaying the main TiddlyWiki window. Each one corresponds to a tiddler with the tag [[$:/tags/Alert]]. Clicking the <<.icon $:/core/images/delete-button>> delete icon on an alert deletes the corresponding tiddler.
Here's a demo <$fieldmangler tiddler="SampleAlert"><$set name="currentTiddler" value="SampleAlert"><$button message="tm-add-tag" param="$:/tags/Alert">alert</$button></$set></$fieldmangler>.

View File

@@ -1,27 +1,37 @@
created: 20130826122000000
modified: 20161015122959346
modified: 20190928082000464
tags: Mechanisms
title: PluginMechanism
type: text/vnd.tiddlywiki
! Introduction
[[Plugins]] are bundles of tiddlers that are distributed and managed as a single unit by being packed into a single JSON tiddler. Users can install them with drag and drop, or using the [[plugin library|Installing a plugin from the plugin library]].
[[Plugins]] are bundles of tiddlers that are distributed and managed as a single unit. Users can install them with drag and drop, or using the [[plugin library|Installing a plugin from the plugin library]].
The tiddlers within registered plugins behave as ShadowTiddlers: they can be freely overwritten by creating a tiddler with the same title, but deleting that tiddler restores the underlying tiddler value from the plugin.
<<.from-version "5.1.22">> Plugins that contain JavaScript modules require a reload of the wiki before they will work. Plugins that do not contain JavaScript modules are automatically dynamically loaded and unloaded.
Plugins have a `plugin-type` field that may take the following values:
Plugins can be used to package any tiddler content, including JavaScript [[modules|Modules]] that extend and enhance the core TiddlyWiki5 functionality. The tiddlers within registered plugins are ShadowTiddlers: they can be freely overwritten by creating a tiddler with the same title, but deleting that tiddler restores the underlying tiddler value from the plugin.
* `plugin` //(default)// - a plain plugin
* `theme` - a theme plugin (see ThemeMechanism)
* `language` - for translations only
Plugins can be used to package ordinary content, or can include JavaScript [[modules|Modules]] that extend and enhance the core TiddlyWiki5 functionality.
Plugins conventionally have a title of the form `$:/plugins/publisher/name`. Plugins that are part of the core TiddlyWiki distribution have titles of the form `$:/plugins/tiddlywiki/name`.
By convention, plugin titles have the form `$:/plugins/<publisher>/<name>`. Plugins that are part of the core TiddlyWiki distribution have titles of the form `$:/plugins/tiddlywiki/<name>`.
When [[running TiddlyWiki under Node.js|TiddlyWiki on Node.js]], plugins can also be stored as individual tiddler files in [[PluginFolders]].
! Plugin Types
{{Plugin Types}}
! Plugin Dependencies
{{Plugin Dependencies}}
! Plugin Ordering
{{Plugin Ordering}}
! Plugin Fields
{{Plugin Fields}}
! More information
<<list-links "[tag[PluginMechanism]]">>

View File

@@ -0,0 +1,13 @@
created: 20191012152414236
modified: 20191014091753894
tags: Mechanisms
title: RefreshMechanism
type: text/vnd.tiddlywiki
The refresh mechanism is the part of the WikificationMechanism concerned with updating a rendering when there are changes in the tiddler store.
The refresh mechanism is notified of changes to the tiddler store asynchronously. This is done so that multiple consecutive changes can be coalesced into a single change notification. Thus, a series of action widgets modifying several different tiddlers will only trigger a single refresh cycle.
When changes occur, the rendering is updated by calling the "refresh" method of the root widget. The refresh method determines whether the widget needs to be updated to reflect the incoming changes, and then recursively calls into the refresh methods of each child widget
The refresh cycle is inherently fairly slow because it involves visiting every node in the render tree. To maintain performance there is a RefreshThrottling mechanism that enables refresh processing to be deferred when rapid changes occur to the same tiddler.

View File

@@ -0,0 +1,16 @@
created: 20191013095916159
modified: 20191014093837558
tags: RefreshMechanism
title: RefreshThrottling
type: text/vnd.tiddlywiki
The RefreshMechanism allows the refresh cycle to be throttled (or deferred) when rapid changes occur to the same tiddler. It is used to maintain responsiveness while editing a draft tiddler, but can also be used on other tiddlers.
The rules governing refresh throttling are:
* When a change notification occurs, throttling will only take place if all of the modified tiddlers meet at least one of these criteria:
** Has the field `draft.of`
** Has the field `throttle.refresh`
* If the refresh cycle is to be throttled, a timer is set for the internal specified in [[$:/config/Drafts/TypingTimeout|Hidden Setting: Typing Refresh Delay]] (cancelling any preciously set timer)
** When the timer fires, the refresh cycle is triggered, passing the aggregated titles of all the deferred refresh cycles

View File

@@ -0,0 +1,28 @@
created: 20191012080221911
modified: 20191013094002890
tags: Mechanisms
title: WikificationMechanism
type: text/vnd.tiddlywiki
"Wikification" is a general term for the dynamic process of converting tiddlers containing WikiText into the HTML DOM representation needed by the browser, and updating that representation if the underlying tiddlers change.
It is composed of several distinct steps:
* ParserMechanism: reading the text of tiddlers and scanning for wikitext constructions, outputting a tree representation of the resulting structure. It is an expensive process so parse trees are cached, and only need to be updated if the corresponding tiddler is changed
* WidgetMechanism: starting with a specified root tiddler, recursively instantiate a widget for each parse tree node making a rendering tree. Widgets can optionally also create DOM nodes
* RefreshMechanism: handling changes to the tiddler store by selectively and efficiently updating a rendering tree
This mechanism is used in the browser to build TiddlyWiki's main interactive page. At startup, the tiddler $:/core/ui/PageTemplate is parsed and rendered to the DOM, recursively pulling in other tiddlers to build the entire user interface. Any user interactions -- following a link, clicking a button, or typing in a text box -- trigger a change in the tiddler store which then automatically propagates through the widget tree. For example, if the user clicks a link to navigate to a new tiddler, the following steps take place:
# Clicking the link triggers the action of the LinkWidget which by default is to add the target tiddler to the list field of the tiddler $:/StoryList
# The modification to the tiddler store asynchronously triggers the refresh cycle. The asynchronous triggering ensures that the refresh cycle is only run once even if multiple tiddlers were modified in succession
# The refresh cycle recursively visits each node of the render tree giving them the chance to update themselves in the light of the accumulated changes to the tiddler store. In this case, the ListWidget of the main story river notices that a single tiddler needs to be added to the river, and renders that newly displayed tiddler without disturbing the other tiddlers
The performance of the entire wikification process is critical. If the refresh cycle takes more than about 400ms then the user will notice a delay between their actions and the effects. See [[Performance]] for some discussion of how to optimise performance.
The rendering process is also aggressively reused in other parts of TiddlyWiki, both in the browser and on the server:
* Generating TiddlyWiki's standalone HTML representation
* Creating static HTML renderings of tiddlers
* Dynamically rendering CSS stylesheet tiddlers

View File

@@ -24,7 +24,7 @@ type: text/vnd.tiddlywiki
## Visit http://127.0.0.1:8080/ in your browser
## Try editing and creating tiddlers
# Optionally, make an offline copy:
#* click the {{$:/core/images/save-button}} ''save changes'' button in the sidebar, ''OR''
#* click the <<.icon $:/core/images/save-button>> ''save changes'' button in the sidebar, ''OR''
#* `tiddlywiki mynewwiki --build index`
The `-g` flag causes TiddlyWiki to be installed globally. Without it, TiddlyWiki will only be available in the directory where you installed it.

View File

@@ -1,5 +1,5 @@
created: 20160107222352710
modified: 20160720145836265
modified: 20190927205622498
tags: Plugins
title: Installing a plugin from the plugin library
type: text/vnd.tiddlywiki
@@ -10,14 +10,15 @@ Follow these instructions when using TiddlyWiki as a standalone HTML file:
# 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]] {{$:/core/images/options-button}}, click on the ''Plugins'' tab and then the {{$:/core/images/download-button}} ''Get more plugins'' button
# Click {{$:/core/images/chevron-right}} ''open plugin library'' to open the official plugin library
# 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
# 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 {{$:/core/images/save-button}}
# ''Refresh the page so that TiddlyWiki loads the new plugin'' {{$:/core/images/refresh-button}}
# 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
! Client-Server Configuration

View File

@@ -1,5 +1,5 @@
created: 20160107222430613
modified: 20160617104949358
modified: 20190927205631648
tags: Plugins
title: Manually installing a plugin
type: text/vnd.tiddlywiki
@@ -8,6 +8,7 @@ type: text/vnd.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
# Save your TiddlyWiki ({{$:/core/images/save-button}})
# ''Refresh the page so that TiddlyWiki loads the new plugin'' ({{$:/core/images/refresh-button}})
# 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

View File

@@ -0,0 +1,13 @@
created: 20190928081852771
modified: 20190928082758674
tags: PluginMechanism
title: Plugin Dependencies
type: text/vnd.tiddlywiki
The simplest form of dependency between plugins is that one plugin can declare itself to be a sub-plugin of another plugin by specifying that plugin in the `parent-plugin` [[field|Plugin Fields]]. Sub-plugins are displayed in the control panel plugin chooser within the expandable area of their parent plugin. For example, the official plugin library includes the [[CodeMirror Plugin]] and also more than a dozen sub-plugins that extend the CodeMirror plugin with optional functionality. Note that sub-plugins cannot themselves have further sub-plugins.
Plugins can also use their `dependents` [[field|Plugin Fields]] to list the titles of any other plugins that should also be installed. Note that the list is not resolved recursively: dependents of dependents will not be installed.
When installing a plugin from the plugin library, both the `parent-plugin` and `dependents` fields are used to determine any additional plugins to be installed.
Note that the `dependents` field is also used by the ThemeMechanism and the LanguageMechanism to switch in dependent theme/language plugins.

View File

@@ -0,0 +1,20 @@
created: 20190928081810311
modified: 20190928103750812
tags:
title: Plugin Types
type: text/vnd.tiddlywiki
Plugins have a `plugin-type` field that determines how it is treated. The following values are defined by the core:
* `plugin` - an ordinary plugin
* `theme` - a theme plugin (see ThemeMechanism). Only the theme plugin named in the tiddler $:/theme is activated at any one time (along with any dependent theme plugins)
* `language` - a language plugin (see TranslationMechanism). Only the language plugin named in the tiddler $:/language is activated at any one time (along with any dependent language plugins)
The following plugin types are used internally by the core:
* `import` - for the special $:/Import plugin created while importing is in progress
* `info` - for the special $:/temp/info-plugin tiddler created by the InfoMechanism
While not supported by the plugin library, it is also possible to use custom plugin types to build plugin-like behaviour with a custom user interface. Plugins with a custom type will automatically receive the same behaviour as plain plugins but can display a custom user interface using an appropriate [[view template segment|SystemTag: $:/tags/ViewTemplate]].
By default, tiddlers within plugins with custom plugin types will not be registered as shadow tiddlers (the constituent tiddlers can still be addressed as subtiddlers by the TranscludeWidget, ViewWidget or the [[plugintiddlers Operator]]). Setting a configuration tiddler `$:/config/RegisterPluginType/<plugin-type>` to `yes` will cause the tiddlers within the plugin to be registered as shadow tiddlers.

View File

@@ -1,5 +1,5 @@
created: 20161015113519246
modified: 20161015113833256
modified: 20190927172743140
tags: PluginMechanism
title: PluginFolders
type: text/vnd.tiddlywiki
@@ -13,6 +13,7 @@ The JSON structure for plugin tiddlers is as follows:
```
{
"title": "$:/plugins/publisher/name",
"name": "name",
"description": "An exemplary plugin for demonstration purposes",
"author": "JeremyRuston",
"version": "1.2.3-alpha3",

View File

@@ -1,22 +1,22 @@
created: 20161015122718559
modified: 20161015122719647
modified: 20190928083018378
tags: PluginMechanism
title: Plugin Fields
type: text/vnd.tiddlywiki
! Plugin fields
Plugins are stored as tiddlers with the following fields:
|!Field |!Description |
|title |Title of plugin |
|author |//(optional)// Author of plugin |
|dependents |List of dependencies: plugins that should be installed in order for this one to work |
|description |Description of plugin |
|author |Author of plugin |
|version |Version string (must conform to [ext[SemanticVersioning|http://semver.org/]] convention) |
|source |Source URL of plugin |
|type |Must be ''application/json'' |
|plugin-type |Can be ''plugin'' (default), ''language'' or ''theme'' |
|text |JSON encoding of the list of tiddlers comprising the plugin |
|list |Names of exposed plugin information tiddlers (see below) |
|name |Name of the theme (only for themes) |
|dependents |List of dependent plugins (currently only implemented for themes) |
|name |Brief name of the plugin |
|plugin-priority |//(optional)// Numerical priority (higher numbers install later, the core plugin has a priority of zero |
|plugin-type |Generally ''plugin'', ''language'' or ''theme''; see PluginMechanism for details |
|parent-plugin |//(optional)// <<.from-version "5.1.22">> Title of the plugin under which this plugin should be displayed as a sub-plugin in the control panel plugin chooser |
|source |//(optional)// Source URL of plugin |
|text |JSON encoding of the list of tiddlers comprising the plugin |
|title |Title of plugin |
|type |Must be ''application/json'' |
|version |//(optional)// Version string (should conform to [ext[SemanticVersioning|http://semver.org/]] convention) |

View File

@@ -1,5 +1,5 @@
created: 20160107222504269
modified: 20160720145839711
modified: 20190927205509760
tags: Plugins
title: Uninstalling a plugin
type: text/vnd.tiddlywiki
@@ -9,12 +9,14 @@ type: text/vnd.tiddlywiki
Follow these instructions when using TiddlyWiki as a standalone HTML file:
# Create a backup of your current TiddlyWiki HTML file ([[just in case|The First Rule of Using TiddlyWiki]])
# Open the [[control panel|$:/ControlPanel]] {{$:/core/images/options-button}} and go to the ''Plugins'' tab
# Click on the plugin you want to delete to open its tiddler
# Click the {{$:/core/images/down-arrow}} ''more'' button and {{$:/core/images/delete-button}} ''delete'' the tiddler
# Save your TiddlyWiki {{$:/core/images/save-button}}
# ''Refresh the window so that TiddlyWiki completely removes the plugin'' {{$:/core/images/refresh-button}}
# The plugin should now be deleted
# Open the [[control panel|$:/ControlPanel]] 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
# The plugin should no longer be active or available
! Client-Server Configuration

View File

@@ -21,7 +21,7 @@ This method is useful if, for any reason, you should find your current TiddlyWik
```
* Check the list of tiddlers.
* Adjust the number "25" in the filter to make sure you found all your recently modified tiddlers
* Press the bucket with the up arrow [<button class="tc-btn-invisible" disabled>{{$:/core/images/export-button}}</button>] which appears on the right
* Press the bucket with the up arrow [<button class="tc-btn-invisible" disabled><<.icon $:/core/images/export-button>></button>] which appears on the right
* A dialogue window will ask for a location to download a file called tiddler.json on your local drive, or depending on browser configuration, just alert you that such a file will be downloaded. Press save.
* The `tiddlers.json` file can be imported (tools in sidebar) or drag and drop the file on the top line of the story river of another TW .
** You can (de)select specific tiddlers.

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