1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-12-25 17:40:29 +00:00

Merge branch 'master' into parameterised-transclusions

This commit is contained in:
jeremy@jermolene.com 2022-12-05 17:21:33 +00:00
commit 31f4c1f6af
114 changed files with 1059 additions and 393 deletions

4
core/images/layout-button.tid Executable file
View File

@ -0,0 +1,4 @@
title: $:/core/images/layout-button
tags: $:/tags/Image
<svg width="22pt" height="22pt" class="tc-image-layout-button tc-image-button" viewBox="0 0 24 24" stroke-width="1" stroke="none"><path d="M0 0h24v24H0z" fill="none"/><rect x="2" y="2" width="7" height="7" rx="2"/><rect x="2" y="13" width="7" height="9" rx="2"/><rect x="12" y="2" width="10" height="20" rx="2"/></svg>

View File

@ -59,6 +59,8 @@ Home/Caption: home
Home/Hint: Open the default tiddlers
Language/Caption: language
Language/Hint: Choose the user interface language
LayoutSwitcher/Hint: Open layout switcher
LayoutSwitcher/Caption: layout
Manager/Caption: tiddler manager
Manager/Hint: Open tiddler manager
More/Caption: more

View File

@ -0,0 +1,18 @@
title: $:/language/Help/commands
description: Run commands returned from a filter
Sequentially run the command tokens returned from a filter
```
--commands <filter>
```
Examples
```
--commands "[enlist{$:/build-commands-as-text}]"
```
```
--commands "[{$:/build-commands-as-json}jsonindexes[]] :map[{$:/build-commands-as-json}jsonget<currentTiddler>]"
```

View File

@ -0,0 +1,42 @@
/*\
title: $:/core/modules/commands/commands.js
type: application/javascript
module-type: command
Runs the commands returned from a filter
\*/
(function() {
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
exports.info = {
name: "commands",
synchronous: true
};
var Command = function(params, commander) {
this.params = params;
this.commander = commander;
};
Command.prototype.execute = function() {
// Parse the filter
var filter = this.params[0];
if(!filter) {
return "No filter specified";
}
var commands = this.commander.wiki.filterTiddlers(filter)
if(commands.length === 0) {
return "No tiddlers found for filter '" + filter + "'";
}
this.commander.addCommandTokens(commands);
return null;
};
exports.Command = Command;
})();

View File

@ -298,7 +298,7 @@ function editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {
Propogate keydown events to our container for the keyboard widgets benefit
*/
EditTextWidget.prototype.propogateKeydownEvent = function(event) {
var newEvent = this.cloneEvent(event,["keyCode","which","metaKey","ctrlKey","altKey","shiftKey"]);
var newEvent = this.cloneEvent(event,["keyCode","code","which","key","metaKey","ctrlKey","altKey","shiftKey"]);
return !this.parentDomNode.dispatchEvent(newEvent);
};

View File

@ -12,6 +12,8 @@ Various static DOM-related utility functions.
/*global $tw: false */
"use strict";
var Popup = require("$:/core/modules/utils/dom/popup.js");
/*
Determines whether element 'a' contains element 'b'
Code thanks to John Resig, http://ejohn.org/blog/comparing-document-position/
@ -294,8 +296,21 @@ exports.collectDOMVariables = function(selectedNode,domNode,event) {
});
if(selectedNode.offsetLeft) {
// Add a variable with a popup coordinate string for the selected node
variables["tv-popup-coords"] = "(" + selectedNode.offsetLeft + "," + selectedNode.offsetTop +"," + selectedNode.offsetWidth + "," + selectedNode.offsetHeight + ")";
// Add variables with a (relative and absolute) popup coordinate string for the selected node
var nodeRect = {
left: selectedNode.offsetLeft,
top: selectedNode.offsetTop,
width: selectedNode.offsetWidth,
height: selectedNode.offsetHeight
};
variables["tv-popup-coords"] = Popup.buildCoordinates(Popup.coordinatePrefix.csOffsetParent,nodeRect);
var absRect = $tw.utils.extend({}, nodeRect);
for (var currentNode = selectedNode.offsetParent; currentNode; currentNode = currentNode.offsetParent) {
absRect.left += currentNode.offsetLeft;
absRect.top += currentNode.offsetTop;
}
variables["tv-popup-abs-coords"] = Popup.buildCoordinates(Popup.coordinatePrefix.csAbsolute,absRect);
// Add variables for offset of selected node
variables["tv-selectednode-posx"] = selectedNode.offsetLeft.toString();

View File

@ -26,6 +26,8 @@ Display a modal dialogue
options: see below
Options include:
downloadLink: Text of a big download link to include
event: widget event
variables: from event.paramObject
*/
Modal.prototype.display = function(title,options) {
options = options || {};
@ -209,6 +211,10 @@ Modal.prototype.display = function(title,options) {
headerWidgetNode.addEventListener("tm-close-tiddler",closeHandler,false);
bodyWidgetNode.addEventListener("tm-close-tiddler",closeHandler,false);
footerWidgetNode.addEventListener("tm-close-tiddler",closeHandler,false);
// Whether to close the modal dialog when the mask (area outside the modal) is clicked
if(tiddler.fields && (tiddler.fields["mask-closable"] === "yes" || tiddler.fields["mask-closable"] === "true")) {
modalBackdrop.addEventListener("click",closeHandler,false);
}
// Set the initial styles for the message
$tw.utils.setStyle(modalBackdrop,[
{opacity: "0"}

View File

@ -22,6 +22,19 @@ var Popup = function(options) {
this.popups = []; // Array of {title:,wiki:,domNode:} objects
};
/*
Global regular expression for parsing the location of a popup.
This is also used by the Reveal widget.
*/
exports.popupLocationRegExp = /^(@?)\((-?[0-9\.E]+),(-?[0-9\.E]+),(-?[0-9\.E]+),(-?[0-9\.E]+)\)$/
/*
Objekt containing the available prefixes for coordinates build with the `buildCoordinates` function:
- csOffsetParent: Uses a coordinate system based on the offset parent (no prefix).
- csAbsolute: Use an absolute coordinate system (prefix "@").
*/
exports.coordinatePrefix = { csOffsetParent: "", csAbsolute: "@" }
/*
Trigger a popup open or closed. Parameters are in a hashmap:
title: title of the tiddler where the popup details are stored
@ -136,8 +149,17 @@ Popup.prototype.show = function(options) {
height: options.domNode.offsetHeight
};
}
var popupRect = "(" + rect.left + "," + rect.top + "," +
rect.width + "," + rect.height + ")";
if(options.absolute && options.domNode) {
// Walk the offsetParent chain and add the position of the offsetParents to make
// the position absolute to the root node of the page.
var currentNode = options.domNode.offsetParent;
while(currentNode) {
rect.left += currentNode.offsetLeft;
rect.top += currentNode.offsetTop;
currentNode = currentNode.offsetParent;
}
}
var popupRect = exports.buildCoordinates(options.absolute?exports.coordinatePrefix.csAbsolute:exports.coordinatePrefix.csOffsetParent,rect);
if(options.noStateReference) {
options.wiki.setText(options.title,"text",undefined,popupRect);
} else {
@ -172,13 +194,54 @@ Popup.prototype.cancel = function(level) {
};
/*
Returns true if the specified title and text identifies an active popup
Returns true if the specified title and text identifies an active popup.
This function is safe to call, even if the popup class was not initialized.
*/
Popup.prototype.readPopupState = function(text) {
var popupLocationRegExp = /^\((-?[0-9\.E]+),(-?[0-9\.E]+),(-?[0-9\.E]+),(-?[0-9\.E]+)\)$/;
return popupLocationRegExp.test(text);
exports.readPopupState = function(text) {
return exports.popupLocationRegExp.test(text);
};
/*
Parses a coordinate string in the format `(x,y,w,h)` or `@(x,y,z,h)` and returns
an object containing the position, width and height. The absolute-Mark is boolean
value that indicates the coordinate system of the coordinates. If they start with
an `@`, `absolute` is set to true and the coordinates are relative to the root
element. If the initial `@` is missing, they are relative to the offset parent
element and `absoute` is false.
This function is safe to call, even if the popup class was not initialized.
*/
exports.parseCoordinates = function(coordinates) {
var match = exports.popupLocationRegExp.exec(coordinates);
if(match) {
return {
absolute: (match[1] === "@"),
left: parseFloat(match[2]),
top: parseFloat(match[3]),
width: parseFloat(match[4]),
height: parseFloat(match[5])
};
} else {
return false;
}
}
/*
Builds a coordinate string from a coordinate system identifier and an object
containing the left, top, width and height values.
Use constants defined in coordinatePrefix to specify a coordinate system.
If one of the parameters is invalid for building a coordinate string `(0,0,0,0)`
will be returned.
This function is safe to call, even if the popup class was not initialized.
*/
exports.buildCoordinates = function(prefix,position) {
var coord = prefix + "(" + position.left + "," + position.top + "," + position.width + "," + position.height + ")";
if (exports.popupLocationRegExp.test(coord)) {
return coord;
} else {
return "(0,0,0,0)";
}
}
exports.Popup = Popup;
})();

View File

@ -15,10 +15,11 @@ function LinkedList() {
LinkedList.prototype.clear = function() {
// LinkedList performs the duty of both the head and tail node
this.next = Object.create(null);
this.prev = Object.create(null);
this.first = undefined;
this.last = undefined;
this.next = new LLMap();
this.prev = new LLMap();
// Linked list head initially points to itself
this.next.set(null, null);
this.prev.set(null, null);
this.length = 0;
};
@ -41,28 +42,29 @@ Push behaves like array.push and accepts multiple string arguments. But it also
accepts a single array argument too, to be consistent with its other methods.
*/
LinkedList.prototype.push = function(/* values */) {
var values = arguments;
var i, values = arguments;
if($tw.utils.isArray(values[0])) {
values = values[0];
}
for(var i = 0; i < values.length; i++) {
for(i = 0; i < values.length; i++) {
_assertString(values[i]);
}
for(var i = 0; i < values.length; i++) {
for(i = 0; i < values.length; i++) {
_linkToEnd(this,values[i]);
}
return this.length;
};
LinkedList.prototype.pushTop = function(value) {
var t;
if($tw.utils.isArray(value)) {
for (var t=0; t<value.length; t++) {
for (t=0; t<value.length; t++) {
_assertString(value[t]);
}
for(var t=0; t<value.length; t++) {
for(t=0; t<value.length; t++) {
_removeOne(this,value[t]);
}
for(var t=0; t<value.length; t++) {
for(t=0; t<value.length; t++) {
_linkToEnd(this,value[t]);
}
} else {
@ -74,11 +76,11 @@ LinkedList.prototype.pushTop = function(value) {
LinkedList.prototype.each = function(callback) {
var visits = Object.create(null),
value = this.first;
while(value !== undefined) {
value = this.next.get(null);
while(value !== null) {
callback(value);
var next = this.next[value];
if(typeof next === "object") {
var next = this.next.get(value);
if(Array.isArray(next)) {
var i = visits[value] || 0;
visits[value] = i+1;
value = next[i];
@ -105,87 +107,79 @@ LinkedList.prototype.makeTiddlerIterator = function(wiki) {
};
function _removeOne(list,value) {
var prevEntry = list.prev[value],
nextEntry = list.next[value],
var nextEntry = list.next.get(value);
if(nextEntry === undefined) {
return;
}
var prevEntry = list.prev.get(value),
prev = prevEntry,
next = nextEntry;
if(typeof nextEntry === "object") {
next = nextEntry,
ref;
if(Array.isArray(nextEntry)) {
next = nextEntry[0];
prev = prevEntry[0];
}
// Relink preceding element.
if(list.first === value) {
list.first = next
} else if(prev !== undefined) {
if(typeof list.next[prev] === "object") {
if(next === undefined) {
// Must have been last, and 'i' would be last element.
list.next[prev].pop();
} else {
var i = list.next[prev].indexOf(value);
list.next[prev][i] = next;
}
} else {
list.next[prev] = next;
}
ref = list.next.get(prev);
if(Array.isArray(ref)) {
var i = ref.indexOf(value);
ref[i] = next;
} else {
return;
list.next.set(prev,next);
}
// Now relink following element
// Check "next !== undefined" rather than "list.last === value" because
// we need to know if the FIRST value is the last in the list, not the last.
if(next !== undefined) {
if(typeof list.prev[next] === "object") {
// Nothing special needed for first since list.prev[next][0] will be 'undefined'
var i = list.prev[next].indexOf(value);
list.prev[next][i] = prev;
} else {
list.prev[next] = prev;
}
ref = list.prev.get(next);
if(Array.isArray(ref)) {
var i = ref.indexOf(value);
ref[i] = prev;
} else {
list.last = prev;
list.prev.set(next,prev);
}
// Delink actual value. If it uses arrays, just remove first entries.
if(typeof nextEntry === "object") {
if(Array.isArray(nextEntry) && nextEntry.length > 1) {
nextEntry.shift();
prevEntry.shift();
} else {
list.next[value] = undefined;
list.prev[value] = undefined;
list.next.set(value,undefined);
list.prev.set(value,undefined);
}
list.length -= 1;
};
// Sticks the given node onto the end of the list.
function _linkToEnd(list,value) {
if(list.first === undefined) {
list.first = value;
var old = list.next.get(value);
var last = list.prev.get(null);
// Does it already exists?
if(old !== undefined) {
if(!Array.isArray(old)) {
old = [old];
list.next.set(value,old);
list.prev.set(value,[list.prev.get(value)]);
}
old.push(null);
list.prev.get(value).push(last);
} else {
// Does it already exists?
if(list.first === value || list.prev[value] !== undefined) {
if(typeof list.next[value] === "string") {
list.next[value] = [list.next[value]];
list.prev[value] = [list.prev[value]];
} else if(typeof list.next[value] === "undefined") {
// list.next[value] must be undefined.
// Special case. List already has 1 value. It's at the end.
list.next[value] = [];
list.prev[value] = [list.prev[value]];
}
list.prev[value].push(list.last);
// We do NOT append a new value onto "next" list. Iteration will
// figure out it must point to End-of-List on its own.
} else {
list.prev[value] = list.last;
}
// Make the old last point to this new one.
if(typeof list.next[list.last] === "object") {
list.next[list.last].push(value);
} else {
list.next[list.last] = value;
}
list.next.set(value,null);
list.prev.set(value,last);
}
// Make the old last point to this new one.
if(value !== last) {
var array = list.next.get(last);
if(Array.isArray(array)) {
array[array.length-1] = value;
} else {
list.next.set(last,value);
}
list.prev.set(null,value);
} else {
// Edge case, the pushed value was already the last value.
// The second-to-last nextPtr for that value must point to itself now.
var array = list.next.get(last);
array[array.length-2] = value;
}
list.last = value;
list.length += 1;
};
@ -195,6 +189,20 @@ function _assertString(value) {
}
};
var LLMap = function() {
this.map = Object.create(null);
};
// Just a wrapper so our object map can also accept null.
LLMap.prototype = {
set: function(key,val) {
(key === null) ? (this.null = val) : (this.map[key] = val);
},
get: function(key) {
return (key === null) ? this.null : this.map[key];
}
};
exports.LinkedList = LinkedList;
})();

View File

@ -14,6 +14,8 @@ Action widget to trigger a popup.
var Widget = require("$:/core/modules/widgets/widget.js").widget;
var Popup = require("$:/core/modules/utils/dom/popup.js");
var ActionPopupWidget = function(parseTreeNode,options) {
this.initialise(parseTreeNode,options);
};
@ -57,20 +59,20 @@ Invoke the action associated with this widget
*/
ActionPopupWidget.prototype.invokeAction = function(triggeringWidget,event) {
// Trigger the popup
var popupLocationRegExp = /^\((-?[0-9\.E]+),(-?[0-9\.E]+),(-?[0-9\.E]+),(-?[0-9\.E]+)\)$/,
match = popupLocationRegExp.exec(this.actionCoords || "");
if(match) {
var coordinates = Popup.parseCoordinates(this.actionCoords || "");
if(coordinates) {
$tw.popup.triggerPopup({
domNode: null,
domNodeRect: {
left: parseFloat(match[1]),
top: parseFloat(match[2]),
width: parseFloat(match[3]),
height: parseFloat(match[4])
left: coordinates.left,
top: coordinates.top,
width: coordinates.width,
height: coordinates.height
},
title: this.actionState,
wiki: this.wiki,
floating: this.floating
floating: this.floating,
absolute: coordinates.absolute
});
} else {
$tw.popup.cancel(0);

View File

@ -14,6 +14,8 @@ Button widget
var Widget = require("$:/core/modules/widgets/widget.js").widget;
var Popup = require("$:/core/modules/utils/dom/popup.js");
var ButtonWidget = function(parseTreeNode,options) {
this.initialise(parseTreeNode,options);
};
@ -147,7 +149,7 @@ ButtonWidget.prototype.isSelected = function() {
ButtonWidget.prototype.isPoppedUp = function() {
var tiddler = this.popupTitle ? this.wiki.getTiddler(this.popupTitle) : this.wiki.getTiddler(this.popup);
var result = tiddler && tiddler.fields.text ? $tw.popup.readPopupState(tiddler.fields.text) : false;
var result = tiddler && tiddler.fields.text ? Popup.readPopupState(tiddler.fields.text) : false;
return result;
};
@ -173,6 +175,7 @@ ButtonWidget.prototype.triggerPopup = function(event) {
if(this.popupTitle) {
$tw.popup.triggerPopup({
domNode: this.domNodes[0],
absolute: (this.popupAbsCoords === "yes"),
title: this.popupTitle,
wiki: this.wiki,
noStateReference: true
@ -180,6 +183,7 @@ ButtonWidget.prototype.triggerPopup = function(event) {
} else {
$tw.popup.triggerPopup({
domNode: this.domNodes[0],
absolute: (this.popupAbsCoords === "yes"),
title: this.popup,
wiki: this.wiki
});
@ -223,6 +227,7 @@ ButtonWidget.prototype.execute = function() {
this.setField = this.getAttribute("setField");
this.setIndex = this.getAttribute("setIndex");
this.popupTitle = this.getAttribute("popupTitle");
this.popupAbsCoords = this.getAttribute("popupAbsCoords", "no");
this.tabIndex = this.getAttribute("tabindex");
this.isDisabled = this.getAttribute("disabled","no");
// Make child widgets
@ -252,7 +257,7 @@ Selectively refreshes the widget if needed. Returns true if the widget or any of
*/
ButtonWidget.prototype.refresh = function(changedTiddlers) {
var changedAttributes = this.computeAttributes();
if(changedAttributes.actions || changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes.selectedClass || changedAttributes.style || changedAttributes.dragFilter || changedAttributes.dragTiddler || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup]) || (this.popupTitle && changedTiddlers[this.popupTitle]) || changedAttributes.setTitle || changedAttributes.setField || changedAttributes.setIndex || changedAttributes.popupTitle || changedAttributes.disabled || changedAttributes["default"]) {
if(changedAttributes.actions || changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes.selectedClass || changedAttributes.style || changedAttributes.dragFilter || changedAttributes.dragTiddler || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup]) || (this.popupTitle && changedTiddlers[this.popupTitle]) || changedAttributes.popupAbsCoords || changedAttributes.setTitle || changedAttributes.setField || changedAttributes.setIndex || changedAttributes.popupTitle || changedAttributes.disabled || changedAttributes["default"]) {
this.refreshSelf();
return true;
} else if(changedAttributes["class"]) {

View File

@ -14,6 +14,8 @@ Reveal widget
var Widget = require("$:/core/modules/widgets/widget.js").widget;
var Popup = require("$:/core/modules/utils/dom/popup.js");
var RevealWidget = function(parseTreeNode,options) {
this.initialise(parseTreeNode,options);
};
@ -94,6 +96,13 @@ RevealWidget.prototype.positionPopup = function(domNode) {
left = Math.max(0,left);
top = Math.max(0,top);
}
if (this.popup.absolute) {
// Traverse the offsetParent chain and correct the offset to make it relative to the parent node.
for (var offsetParentDomNode = domNode.offsetParent; offsetParentDomNode; offsetParentDomNode = offsetParentDomNode.offsetParent) {
left -= offsetParentDomNode.offsetLeft;
top -= offsetParentDomNode.offsetTop;
}
}
domNode.style.left = left + "px";
domNode.style.top = top + "px";
};
@ -183,19 +192,11 @@ RevealWidget.prototype.compareStateText = function(state) {
};
RevealWidget.prototype.readPopupState = function(state) {
var popupLocationRegExp = /^\((-?[0-9\.E]+),(-?[0-9\.E]+),(-?[0-9\.E]+),(-?[0-9\.E]+)\)$/,
match = popupLocationRegExp.exec(state);
this.popup = Popup.parseCoordinates(state);
// Check if the state matches the location regexp
if(match) {
if(this.popup) {
// If so, we're open
this.isOpen = true;
// Get the location
this.popup = {
left: parseFloat(match[1]),
top: parseFloat(match[2]),
width: parseFloat(match[3]),
height: parseFloat(match[4])
};
} else {
// If not, we're closed
this.isOpen = false;

View File

@ -42,6 +42,9 @@ SelectWidget.prototype.render = function(parent,nextSibling) {
this.execute();
this.renderChildren(parent,nextSibling);
this.setSelectValue();
if(this.selectFocus == "yes") {
this.getSelectDomNode().focus();
}
$tw.utils.addEventListeners(this.getSelectDomNode(),[
{name: "change", handlerObject: this, handlerMethod: "handleChangeEvent"}
]);
@ -143,6 +146,7 @@ SelectWidget.prototype.execute = function() {
this.selectMultiple = this.getAttribute("multiple", false);
this.selectSize = this.getAttribute("size");
this.selectTooltip = this.getAttribute("tooltip");
this.selectFocus = this.getAttribute("focus");
// Make the child widgets
var selectNode = {
type: "element",

View File

@ -14,7 +14,7 @@ tags: $:/tags/AdvancedSearch/FilterButton
<$linkcatcher actions="<$action-setfield $tiddler='$:/temp/advancedsearch' text=<<navigateTo>>/><$action-setfield $tiddler='$:/temp/advancedsearch/input' text=<<navigateTo>>/><$action-setfield $tiddler='$:/temp/advancedsearch/refresh' text='yes'/><$action-sendmessage $message='tm-focus-selector' $param='.tc-advanced-search input' />">
<div class="tc-block-dropdown-wrapper">
<div class="tc-block-dropdown tc-edit-type-dropdown">
<$list filter="[all[shadows+tiddlers]tag[$:/tags/Filter]]">
<$list filter="[all[shadows+tiddlers]tag[$:/tags/Filter]!is[draft]]">
<$link to={{!!filter}}><$let tv-wikilinks="no"><$transclude field="description"/></$let></$link>
</$list>
</div>

View File

@ -0,0 +1,15 @@
title: $:/core/ui/Buttons/layout
tags: $:/tags/PageControls
caption: {{$:/core/images/layout-button}} {{$:/language/Buttons/LayoutSwitcher/Caption}}
description: {{$:/language/LayoutSwitcher/Description}}
\whitespace trim
<$button tooltip={{$:/language/Buttons/LayoutSwitcher/Hint}} aria-label={{$:/language/Buttons/LayoutSwitcher/Caption}} class=<<tv-config-toolbar-class>>>
<$action-sendmessage $message="tm-show-switcher" switch="layout"/>
<$list filter="[<tv-config-toolbar-icons>match[yes]]">
{{$:/core/images/layout-button}}
</$list>
<$list filter="[<tv-config-toolbar-text>match[yes]]">
<span class="tc-btn-text"><$text text={{$:/language/Buttons/LayoutSwitcher/Caption}}/></span>
</$list>
</$button>

View File

@ -3,6 +3,6 @@ tags: $:/tags/SideBar
caption: {{$:/language/SideBar/More/Caption}}
\whitespace trim
<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 tc-sidebar-tabs-more" explicitState="$:/state/tab/moresidebar-1850697562"/>
<div class={{{ [{$:/config/ui/SideBar/More/horizontal}match[yes]then[tc-sidebar-tabs]else[tc-more-sidebar]] }}}>
<$macrocall $name="tabs" tabsList="[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]" default={{$:/config/DefaultMoreSidebarTab}} state="$:/state/tab/moresidebar" class={{{ [{$:/config/ui/SideBar/More/horizontal}match[yes]then[tc-sidebar-tabs-more]else[tc-vertical tc-sidebar-tabs-more]] }}} explicitState="$:/state/tab/moresidebar-1850697562"/>
</div>

View File

@ -1,6 +1,7 @@
title: $:/core/ui/SwitcherModal
subtitle: <$text text={{{[<switch>lookup[$:/language/Switcher/Subtitle/]]}}}/>
class: tc-modal-centered
mask-closable: yes
<$tiddler tiddler={{{[<switch>lookup[$:/config/SwitcherTargets/]]}}}>

View File

@ -2,17 +2,21 @@ title: $:/core/ui/ViewTemplate/unfold
tags: $:/tags/ViewTemplate
\whitespace trim
<$reveal tag="div" type="nomatch" state="$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar" text="hide">
<div class="tc-reveal">
<$list filter="[{$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar}match[show]]" variable="ignore">
<$reveal tag="div" type="nomatch" stateTitle=<<folded-state>> text="hide" default="show" retain="yes" animate="yes">
<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class="tc-fold-banner">
<$action-sendmessage $message="tm-fold-tiddler" $param=<<currentTiddler>> foldedState=<<folded-state>>/>
{{$:/core/images/chevron-up}}
</$button>
</$reveal>
</$list>
<$list filter="[{$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar}match[show]] :else[<folded-state>get[text]match[hide]]" variable="ignore">
<$reveal tag="div" type="nomatch" stateTitle=<<folded-state>> text="show" default="show" retain="yes" animate="yes">
<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class="tc-unfold-banner">
<$action-sendmessage $message="tm-fold-tiddler" $param=<<currentTiddler>> foldedState=<<folded-state>>/>
{{$:/core/images/chevron-down}}
</$button>
</$reveal>
</$reveal>
</$list>
</div>

View File

@ -21,4 +21,5 @@ core/ui/Buttons/print: hide
core/ui/Buttons/storyview: hide
core/ui/Buttons/timestamp: hide
core/ui/Buttons/theme: hide
core/ui/Buttons/layout: hide
core/ui/Buttons/unfold-all: hide

View File

@ -1,2 +1,2 @@
title: $:/tags/PageControls
list: [[$:/core/ui/Buttons/home]] [[$:/core/ui/Buttons/close-all]] [[$:/core/ui/Buttons/fold-all]] [[$:/core/ui/Buttons/unfold-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/new-image]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/export-page]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/core/ui/Buttons/manager]] [[$:/core/ui/Buttons/tag-manager]] [[$:/core/ui/Buttons/language]] [[$:/core/ui/Buttons/palette]] [[$:/core/ui/Buttons/theme]] [[$:/core/ui/Buttons/storyview]] [[$:/core/ui/Buttons/encryption]] [[$:/core/ui/Buttons/timestamp]] [[$:/core/ui/Buttons/full-screen]] [[$:/core/ui/Buttons/print]] [[$:/core/ui/Buttons/save-wiki]] [[$:/core/ui/Buttons/refresh]] [[$:/core/ui/Buttons/more-page-actions]]
list: [[$:/core/ui/Buttons/home]] [[$:/core/ui/Buttons/close-all]] [[$:/core/ui/Buttons/fold-all]] [[$:/core/ui/Buttons/unfold-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/new-image]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/export-page]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/core/ui/Buttons/manager]] [[$:/core/ui/Buttons/tag-manager]] [[$:/core/ui/Buttons/language]] [[$:/core/ui/Buttons/palette]] [[$:/core/ui/Buttons/theme]] [[$:/core/ui/Buttons/layout]] [[$:/core/ui/Buttons/storyview]] [[$:/core/ui/Buttons/encryption]] [[$:/core/ui/Buttons/timestamp]] [[$:/core/ui/Buttons/full-screen]] [[$:/core/ui/Buttons/print]] [[$:/core/ui/Buttons/save-wiki]] [[$:/core/ui/Buttons/refresh]] [[$:/core/ui/Buttons/more-page-actions]]

View File

@ -13,9 +13,13 @@ type: text/vnd.tiddlywiki
url:"https://raw.githubusercontent.com/Jermolene/TiddlyWiki5/0dc30086e933cf2272cddb076a9fcbedad252735/editions/tw5.com/tiddlers/images/New%20Release%20Banner.png"
>>
! Plugin Improvements
! Major Improvements
* New [[Twitter Archivist|./editions/twitter-archivist]] plugin to imports the tweets and associated media from a Twitter Archive as individual tiddlers
New [ext[Twitter Archivist|./editions/twitter-archivist]] plugin to import the tweets and associated media from a Twitter Archive as individual tiddlers.
<<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/6961">> new GenesisWidget that allows the dynamic construction of another widget, where the name and attributes of the new widget can be dynamically determined, without needing to be known in advance
<<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/6936">> new operators for reading and formatting JSON data: [[jsonget Operator]], [[jsonindexes Operator]], [[jsontype Operator]] and [[format Operator]]
! Translation improvement
@ -32,10 +36,6 @@ Improvements to the translation features of TiddlyWiki:
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/6882">> the [[Translators Edition|Translate TiddlyWiki into your language]] to add an option to display the original English text underneath the text area
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/pull/6933">> "delete" button text in $:/AdvancedSearch so that it is translatable
! Accessibility Improvements
*
! Usability Improvements
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/d62a16ee464fb9984b766b48504829a1a3eb143b">> problem with long presses on tiddler links triggering a preview on iOS/iPadOS
@ -46,11 +46,15 @@ Improvements to the translation features of TiddlyWiki:
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/6877">> default styles for [[styled runs|Styles and Classes in WikiText]]
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/6881">> upgrade wizard to make the version number more prominent
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/7042">> parsing of tiddlers containing CSV data for greater compatibility
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/7076">> new page control button to summon the layout switcher
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/7084">> folded tiddlers to ensure that the unfold button is always visible
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/7072">> handling of [[Modals]] to optionally allow them to be dismissed by clicking on the background
! Widget Improvements
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/6961">> new GenesisWidget that allows the dynamic construction of another widget, where the name and attributes of the new widget can be dynamically determined, without needing to be known in advance
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/127f660c91020dcbb43897d954066b31af729e74">> EditTextWidget to remove the default text "Type the text for the tiddler 'foo'"
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/7081">> ''focus'' attribute to SelectWidget
* <<.link-badge-removed "https://github.com/Jermolene/TiddlyWiki5/commit/1df4c29d73073788ba3859668112e8bb46171a6c">> restriction of the LetWidget being unable to create variables whose names begin with a dollar sign
! Filter improvements
@ -61,10 +65,8 @@ Improvements to the translation features of TiddlyWiki:
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/7004">> support for nested [[macro definitions|Macro Definitions in WikiText]]
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/6976">> support for [[SystemTag: $:/tags/ClassFilters/TiddlerTemplate]] and [[SystemTag: $:/tags/ClassFilters/PageTemplate]] to assign dynamic CSS classes to both tiddler frames and the page template
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/6936">> new operators for reading and formatting JSON data: [[jsonget Operator]], [[jsonindexes Operator]], [[jsontype Operator]] and [[format Operator]]
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/commit/c5d3d4c26e8fe27f272dda004aec27d6b66c4f60">> safe mode to disable wiki store indexers
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/166a1565843878083fb1eba47c73b8e67b78400d">> safe mode to prevent globally disabling parser rules
* <<.link-badge-removed "https://github.com/Jermolene/TiddlyWiki5/commit/1df4c29d73073788ba3859668112e8bb46171a6c">> restriction of the LetWidget being unable to create variables whose names begin with a dollar sign
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/6735">> keyboard shortcut handling to allow to global shortcuts to override all other shortcuts
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/965bd090a905f5756e79124b698c894f7f72ad5b">> [[list-links Macro]] to allow the rendered field to be overriden
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/6913">> [[Table-of-Contents Macros]] to allow the default icons to be overridden
@ -72,6 +74,8 @@ Improvements to the translation features of TiddlyWiki:
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/5947">> [[timeline Macro]] to override the link template
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/7043">> support for Unix epoch timestamps in [[date format strings|DateFormat]]
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7064">> the "big green download button" to use the defined palette colour
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/7063">> new hidden setting [[to use horizontal tabs for the "more" sidebar tab|Hidden Setting: More Tabs Horizontal]]
! Bug Fixes
@ -80,13 +84,11 @@ Improvements to the translation features of TiddlyWiki:
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/7017">> issue with wikification within the advanced search filter dropdown
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7057">> the table in $:/Import to avoid creating hidden empty rows
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/7008">> advanced search keyboard shortcut not navigating correctly
! Developer Improvements
*
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/7083">> erroneous display of drafts within the advanced search filter dropdown
! Node.js Improvements
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/7073">> new CommandsCommand to enable command tokens to be dynamically generated from a filter
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/6947">> console logging to avoid spaces and `<empty string>` message
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7014">> problem with lazy loading deleting tiddler bodies under certian circumstances
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/344110e2890caf711ab8f3c4f4deaa7d86771231">> handling of ".mp4" file extension so that it defaults to video not audio
@ -98,7 +100,7 @@ Improvements to the translation features of TiddlyWiki:
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/commit/53d229592df76c6dd607e40be5bea4d5e063c48e">> performance of `wiki.getTiddler()`
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/commit/81ac9874846b3ead275f67010fcfdb49f3d2f43c">> performance of variable prototype chain handling
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/6056">> performance of list handling during filter processing
! Acknowledgements
@ -109,12 +111,15 @@ AnthonyMuscio
bestony
btheado
BramChen
carlo-columbo
EvidentlyCube
FlashSystems
flibbles
fu-sen
joebordes
hoelzro
kookma
linonetwo
Marxsal
oflg
pmario

View File

@ -59,10 +59,35 @@ describe("LinkedList class tests", function() {
return pair;
};
// This returns an array in reverse using a LinkList's prev member. Thus
// testing that prev is not corrupt. It doesn't exist in the LinkList module
// itself to avoid full support for it. Maybe that will change later.
function toReverseArray(list) {
var visits = Object.create(null),
value = list.prev.get(null),
array = [];
while(value !== null) {
array.push(value);
var prev = list.prev.get(value);
if(Array.isArray(prev)) {
var i = (visits[value] || prev.length) - 1;
visits[value] = i;
value = prev[i];
} else {
value = prev;
}
}
return array;
};
// compares an array and a linked list to make sure they match up
function compare(pair) {
expect(pair.list.toArray()).toEqual(pair.array);
var forward = pair.list.toArray();
expect(forward).toEqual(pair.array);
expect(pair.list.length).toBe(pair.array.length);
// Now we reverse the linked list and test it back to front, thus
// confirming that the list.prev isn't corrupt.
expect(toReverseArray(pair.list)).toEqual(forward.reverse());
return pair;
};
@ -115,7 +140,7 @@ describe("LinkedList class tests", function() {
// for list.last to be anything other than a string, but I
// can't figure out how to make that corruption manifest a problem.
// So I dig into its private members. Bleh...
expect(typeof pair.list.last).toBe("string");
expect(typeof pair.list.prev.get(null)).toBe("string");
});
it("can pushTop value linked to by a repeat item", function() {

View File

@ -0,0 +1,63 @@
/*\
title: test-popup.js
type: application/javascript
tags: [[$:/tags/test-spec]]
Tests some utility function of the Popup prototype.
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
describe("Popup tests", function() {
it("parseCoordinates should parse valid coordinates", function() {
var popup = require("$:/core/modules/utils/dom/popup.js");
expect(popup.parseCoordinates("(1,2,3,4)")).toEqual({absolute: false, left: 1, top: 2, width: 3, height: 4});
expect(popup.parseCoordinates("(1.5,2.6,3.7,4.8)")).toEqual({absolute: false, left: 1.5, top: 2.6, width: 3.7, height: 4.8});
expect(popup.parseCoordinates("@(1,2,3,4)")).toEqual({absolute: true, left: 1, top: 2, width: 3, height: 4});
expect(popup.parseCoordinates("@(1.5,2.6,3.7,4.8)")).toEqual({absolute: true, left: 1.5, top: 2.6, width: 3.7, height: 4.8});
});
it("parseCoordinates should not parse invalid coordinates", function() {
var popup = require("$:/core/modules/utils/dom/popup.js");
expect(popup.parseCoordinates("#(1,2,3,4)")).toEqual(false);
expect(popup.parseCoordinates("(1,2,3,4")).toEqual(false);
expect(popup.parseCoordinates("(1,2,3)")).toEqual(false);
});
it("buildCoordinates should create valid coordinates", function() {
var popup = require("$:/core/modules/utils/dom/popup.js");
var coordinates = {
left: 1.5,
top: 2.6,
width: 3.7,
height: 4.8
};
expect(popup.buildCoordinates(popup.coordinatePrefix.csOffsetParent, coordinates)).toEqual("(1.5,2.6,3.7,4.8)");
expect(popup.buildCoordinates(popup.coordinatePrefix.csAbsolute, coordinates)).toEqual("@(1.5,2.6,3.7,4.8)");
});
it("buildCoordinates should detect invalid input", function() {
var popup = require("$:/core/modules/utils/dom/popup.js");
var coordinates = {
left: "invalid",
top: 2.6,
width: 3.7,
height: 4.8
};
expect(popup.buildCoordinates(popup.coordinatePrefix.csOffsetParent, coordinates)).toEqual("(0,0,0,0)");
expect(popup.buildCoordinates("dummy", coordinates)).toEqual("(0,0,0,0)");
});
});
})();

View File

@ -13,4 +13,5 @@ core/ui/Buttons/more-page-actions: show
core/ui/Buttons/new-journal: hide
core/ui/Buttons/permaview: hide
core/ui/Buttons/storyview: hide
core/ui/Buttons/layout: hide
core/ui/Buttons/theme: hide

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1,3 @@
title: $:/_tw_shared/favicons/marketplace
type: image/png
tags: TiddlyWikiSitesMenu

View File

@ -0,0 +1,6 @@
title: $:/_tw_shared/sites/marketplace
tags: $:/tags/TiddlyWikiSites TiddlyWikiSitesMenu
caption: marketplace
description: Commercial Products and Services
url: https://talk.tiddlywiki.org/c/marketplace/22
icon: $:/_tw_shared/favicons/marketplace

View File

@ -1,3 +1,3 @@
title: $:/tags/TiddlyWikiSites
list: $:/_tw_shared/sites/tiddlywiki.com $:/_tw_shared/sites/tiddlywiki.org $:/_tw_shared/sites/talk.tiddlywiki.org $:/_tw_shared/sites/links.tiddlywiki.org $:/_tw_shared/sites/tiddlywiki.com.upgrade $:/_tw_shared/sites/tiddlywiki.com.dev $:/_tw_shared/sites/tiddlywiki.com.prerelease $:/_tw_shared/sites/classic.tiddlywiki.com
list: $:/_tw_shared/sites/tiddlywiki.com $:/_tw_shared/sites/tiddlywiki.org $:/_tw_shared/sites/talk.tiddlywiki.org $:/_tw_shared/sites/links.tiddlywiki.org $:/_tw_shared/sites/tiddlywiki.com.upgrade $:/_tw_shared/sites/tiddlywiki.com.dev $:/_tw_shared/sites/tiddlywiki.com.prerelease $:/_tw_shared/sites/classic.tiddlywiki.com $:/_tw_shared/sites/marketplace
tags: TiddlyWikiSitesMenu

View File

@ -0,0 +1,19 @@
title: Funding TiddlyWiki
tags: About HelloThere
modified: 20221204165636777
created: 20221204165636777
TiddlyWiki is more useful to everybody if it is free to use, with no financial barriers to long term adoption. It is not altruism; we believe that removing or reducing barriers to adoption will help to ensure TiddlyWiki's future by making the community larger and stronger.
Nonetheless, TiddlyWiki is a relatively big, complex machine that requires a significant amount of ongoing work to maintain and improve. Some community infrastructure also requires monthly fees to operate (notably the [[TiddlyWiki forum|Forums]]).
The people in the community that do the work have widely varying needs:
* At one end, a good proportion of the work on TiddlyWiki is performed by community members on a purely voluntary basis. For those people, the satisfaction of helping others is sufficient reward. Indeed, for many people, unpaid voluntary activities are a satisfying antidote to everyday paid work
* At the other extreme, JeremyRuston and some other contributors are trying to make a full-time living working on TiddlyWiki by offering commercial products and services around it
* In between, there are other people who would appreciate an ocassional token to reward them for their work
To support these needs in the community, we have two initiatives:
* We use [[Open Collective]] to collect donations for the infrastructure costs of the Community and to crowdfund specific developments by individuals or organisations
* The [[TiddlyWiki Marketplace]] provides a shop window for individuals and organisations offering commercial products and services

View File

@ -0,0 +1,14 @@
title: Open Collective
modified: 20221204165636777
created: 20221204165636777
tags: About HelloThere [[Open Collective]]
Open Collective is a platform for transparent fundraising and expenses for projects like TiddlyWiki. It is the official TiddlyWiki community fundraising space.
https://opencollective.com/tiddlywikidotorg
You can make a fixed one-time donation, or setup a recurring contribution.
The main goals listed for donations are to cover basic costs for community infrastructure like the Discourse forum, and a new goal for supporting the TiddlyWiki Core.
Additionally, the community can make use of the platform for special projects - to pool funds to pay for development, design, or anything else. The [[File Upload Plugin|https://opencollective.com/tiddlywikidotorg/projects/tiddlywiki-file-upload]] is the first of these, and we want to welcome others to launch projects here.

View File

@ -0,0 +1,8 @@
created: 20221204202531478
modified: 20221204202531478
tags: Commands
title: CommandsCommand
type: text/vnd.tiddlywiki
caption: commands
{{$:/language/Help/commands}}

View File

@ -1,5 +1,4 @@
created: 20171107181449175
creator: Ste Willson
modified: 20210106151027136
tags: [[Community Plugins]]
title: "JD Mobile Layout plugin" by JD

View File

@ -1,5 +1,4 @@
created: 20171111192738730
creator: MAS
modified: 20210106151027013
tags: [[Other Resources]]
title: "Dropboard" by Reid Gould

View File

@ -1,7 +1,5 @@
created: 20161226165024380
creator: Thomas Elmiger
modified: 20210106151027097
modifier: Thomas Elmiger
tags: [[Other Resources]]
title: "Hacks" by Thomas Elmiger
type: text/vnd.tiddlywiki

View File

@ -1,5 +1,4 @@
created: 20161226165024380
creator: Ste Willson
modified: 20210106151027156
tags: [[Other Resources]]
title: "MathCell" by Stephen Kimmel

View File

@ -1,5 +1,4 @@
created: 20161226165024380
creator: Matt Lauber
modified: 20211113230709926
tags: [[Other Resources]]
title: "TiddlyServer" by Matt Lauber

View File

@ -1,5 +1,4 @@
created: 20171107175718679
creator: Ste Willson
modified: 20210106151027400
tags: [[Other Resources]]
title: "X3DOM for TiddlyWiki 5" by Jamal Wills

View File

@ -0,0 +1,42 @@
created: 20220810201659784
modified: 20220810201659784
tags: Concepts
title: Coordinate Systems
type: text/vnd.tiddlywiki
TiddlyWiki (primarily the RevealWidget) supports two coordinate systems for positioning popups (see PopupMechanism to learn more about popups).
<<.from-version "5.2.4">> We introduced absolute coordinates that may not work with all extensions and plugins. For maximum backwards compatibility, use absolute coordinates only where necessary.
!! Relative coordinate system
The default coordinate system is relative to the nearest positioned ancestor element. This is either:
* an element with a non-static position, or
* a ''td'', ''th'', ''table'' in case the element itself is static positioned.
For tiddlers the nearest positioned ancestor element mostly is the body of the tiddler. Read the next chapter to learn about the exceptions.
Relative coordinates are expressed in the form ''(x,y,w,h)''. Where ''x'' and ''y'' represent the position and ''w'' and ''h'' the width and height of the element.
!! Absolute coordinate system
The relative coordinate system works flawless most of the time. Problems occure if the target element (for example, a popup) and the source element (the triggering button) do not share the same positioned ancherstor element. This is often the case if the popup is declared outside a table and the triggering button is declared within a table cell. In this case the coordiante systems have different origins and the popup will be displayed in the wrong location.
Absolute coordinates can fix this problem by using the root element of the page (the upper-left corner of the page) as the origin of the coordinate system. Absolute coordinates are expressed in the form ''@(x,y,w,h)''. Where ''x'' and ''y'' represent the position and ''w'' and ''h'' the width and height of the element. The leading ''@''-symbol marks these coordinates as absolute.
The ButtonWidget has an option (''popupAbsCoords'') to put absolute coordinates into the state tiddler. The DraggableWidget and the EventCatcherWidget provide the absolute coordinate of an event within the attribute `tv-popup-abs-coords`.
!! Example
The following example shows a popup that is triggerd from within a table cell. The table cell is the nearest positioned ancestor element. The popup was defined outside the table cell. The button using relative coordinates will open the popup in the wrong location because the button and the popup do not agree on the same coordinate system. Using absolute coordinates fixes this problem.
<<wikitext-example-without-html '<$reveal type="popup" state="$:/state/CoordinateSampleReveal">
<div class="tc-drop-down">
Popup
</div>
</$reveal>
| Table Row 1 |<$button popup="$:/state/CoordinateSampleReveal">Relative coordinates</$button>|
| Table Row 2 |<$button popup="$:/state/CoordinateSampleReveal" popupAbsCoords="yes">Absolute coordinates</$button>|'>>

View File

@ -1,9 +1,21 @@
created: 20130825154900000
modified: 20170718160846820
modified: 20221204165636777
tags: Definitions
title: Federatial
type: text/vnd.tiddlywiki
Federatial Limited is a software consultancy founded by JeremyRuston, the creator of TiddlyWiki. Federatial helps organisations explore new user interaction concepts through rapid prototyping of sophisticated web-based tools.
Federatial Limited helps organisations explore new user interaction concepts through rapid prototyping of sophisticated web-based tools. Services include:
* Consultancy advice on TiddlyWiki adoption
* Development of custom solutions based on TiddlyWiki
* Multi-user TiddlyWiki hosting no outages since 2016
* Sponsorship of TiddlyWiki core development
See https://federatial.com/ and https://twitter.com/federatial for more information.
JeremyRuston founded Federatial Limited in 2011 to support his work on TiddlyWiki for the advertised 25 years. Since then, Federatial has been privileged to have worked with a wide range of fantastic clients in very different sectors, on some very diverse projects:
* For a law firm in the Washington DC, developing a custom multi-user ~TiddlyWiki application. It replaced a Microsoft Word document hosted on ~SharePoint that had grown to 18,000 pages and 10 million words, and was increasingly unwieldy to manage. We converted the document to a non-linear TiddlyWiki structure. Startup, searching and browsing are an order of magnitude faster than using Word and ~SharePoint
* For a publishing firm in Paris, devising a new TiddlyWiki-based format for interactive electronic publications (including conversion from the established EPUB format). See https://twpub-tools.org/
* For a charity in London, maintaining a multiuser instance of TiddlyWiki running on Amazon's serverless infrastructure. It has more than 1,000 users, and over 15,000 tiddlers in 500 interlinked wikis. See https://manuals.annafreud.org/ambit

View File

@ -4,6 +4,8 @@ tags: Definitions
title: TiddlyWikiClassic
type: text/vnd.tiddlywiki
"~TiddlyWiki Classic" refers to versions prior to 5.0, before TiddlyWiki was completely rewritten from the ground up. TiddlyWiki Classic is still being maintained at:
[img[TiddlyWiki Classic.png]]
"~TiddlyWiki Classic" refers to versions prior to 5.0, before TiddlyWiki was completely rewritten. TiddlyWiki Classic is still actively maintained at:
https://classic.tiddlywiki.com/

View File

@ -13,9 +13,12 @@ The tiddler to be displayed can contain the following optional fields that are u
|subtitle|The subtitle text for a modal, displayed in a `h3` html tag|
|class|An additional class to apply to the modal wrapper|
|help|An optional external link that will be displayed at the left of the footer with the text "Help"|
|mask-closable|When set to ''yes'' or ''true'', will close the modal dialog when the mask (area outside the modal) is clicked|
Note that the footer and subtitle fields are not limited to plain text, and wiki text features such as widgets and transclusions can be used as well.
Modals are displayed with the [[WidgetMessage: tm-modal]].
<$button message="tm-modal" param="SampleWizard">Open demo modal</$button>
<<.tip """<$macrocall $name=".from-version" version="5.2.4"/> allow using "mask-closable" field""">>

View File

@ -1,34 +1,38 @@
created: 20130822170200000
list: [[A Gentle Guide to TiddlyWiki]] [[Discover TiddlyWiki]] [[Some of the things you can do with TiddlyWiki]] [[Ten reasons to switch to TiddlyWiki]] Examples [[What happened to the original TiddlyWiki?]]
modified: 20220802122551819
modified: 20221204165636777
tags: TableOfContents
title: HelloThere
type: text/vnd.tiddlywiki
''Have you ever had the feeling that your head is not quite big enough to hold everything you need to remember?''
Welcome to TiddlyWiki, a unique [[non-linear|Philosophy of Tiddlers]] notebook for [[capturing|Creating and editing tiddlers]], [[organising|Structuring TiddlyWiki]] and [[sharing|Sharing your tiddlers with others]] complex information.
!! ''Welcome to TiddlyWiki, a unique [[non-linear|Philosophy of Tiddlers]] notebook for [[capturing|Creating and editing tiddlers]], [[organising|Structuring TiddlyWiki]] and [[sharing|Sharing your tiddlers with others]] complex information''
Use it to keep your [[to-do list|TaskManagementExample]], to plan an [[essay or novel|"TiddlyWiki for Scholars" by Alberto Molina]], or to organise your wedding. Record every thought that crosses your brain, or build a flexible and responsive website.
<div style="font-size:0.7em;text-align:center;margin-top:2em;margin-bottom:2em;">
<<list-thumbnails filter:"[tag[HelloThumbnail]]" width:"168" height:"95">>
</div>
Unlike conventional online services, TiddlyWiki lets you choose where to keep your data, guaranteeing that in the decades to come you will [[still be able to use|Future Proof]] the notes you take today.
<div style="font-size:0.7em;text-align:center;margin:3em auto;">
!! ''Find Out More''
<div class="tc-cards">
<$list filter="[tag[HelloThumbnail]]">
<$macrocall $name="flex-card" captionField="caption" descriptionField="text"/>
</$list>
</div>
!! ''~TiddlyWiki Hubs''
<div class="tc-cards" style="font-size:0.7em;text-align:center;margin:3em auto;">
<a href="https://talk.tiddlywiki.org/" class="tc-btn-big-green" style="border-radius:4px;background-color:#FF8C19;" target="_blank" rel="noopener noreferrer">
{{$:/core/images/help}} ~TalkTW
</a>
<a href="https://www.youtube.com/c/JeremyRuston" class="tc-btn-big-green" style="border-radius:4px;background-color:#e52d27;" target="_blank" rel="noopener noreferrer">
{{$:/core/images/video}} ~YouTube
</a>
<a href="https://twitter.com/TiddlyWiki" class="tc-btn-big-green" style="border-radius:4px;background-color:#5E9FCA;" target="_blank" rel="noopener noreferrer">
<a href="https://twitter.com/TiddlyWiki" class="tc-btn-big-green" style="border-radius:4px;background-color:#1DA1F2;" target="_blank" rel="noopener noreferrer">
{{$:/core/images/twitter}} Twitter
</a>
<a rel="me" href="https://fosstodon.org/@TiddlyWiki" class="tc-btn-big-green" style="border-radius:4px;background-color:#2b90d9;" target="_blank" rel="noopener noreferrer">
{{$:/core/images/mastodon}} Mastodon
{{$:/core/images/globe}} Mastodon
</a>
<a href="https://github.com/Jermolene/TiddlyWiki5" class="tc-btn-big-green" style="border-radius:4px;background-color:#444;" target="_blank" rel="noopener noreferrer">
{{$:/core/images/github}} ~GitHub
@ -38,16 +42,10 @@ Unlike conventional online services, TiddlyWiki lets you choose where to keep yo
</a>
</div>
<<<.tc-big-quote
''The ~TiddlyWiki is the best software I've ever found for organising my ideas.''
!! ''Testimonials & Reviews''
It's well worth spending an hour or so playing with it to see how it can help you. This will be time well-spent and will change how you think and how you organise your ideas.
<<< [[Joe Armstrong, Co-inventor of Erlang|https://joearms.github.io/]]
<<<.tc-big-quote
''~TiddlyWiki gets a Gearhead rating of 6 out of 5 (it's that good).''
Finding code that works flawlessly after just two or three years is magical enough but after seven years?!
<<< [[Mark Gibbs, Network World|http://www.networkworld.com/article/3028098/open-source-tools/tiddlywiki-a-free-open-source-wiki-revisited.html]]
<div style="font-size:0.7em;text-align:center;margin:3em auto;">{{Product Hunt Link}}</div>
<div class="tc-cards">
<$list filter="[tag[Testimonial]]">
<$macrocall $name="flex-card" class="tc-card-quote" captionField="caption" descriptionField="text"/>
</$list>
</div>

View File

@ -1,5 +1,5 @@
created: 20150414070451144
list: [[HelloThumbnail - Introduction Video]] [[HelloThumbnail - Gentle Guide]] [[HelloThumbnail - Grok TiddlyWiki]] [[HelloThumbnail - Firefox Apocalypse]] [[HelloThumbnail - Latest Version]] [[HelloThumbnail - TiddlyWikiLinks]] [[HelloThumbnail - TiddlyMap]] [[HelloThumbnail - HelpingTiddlyWiki]] [[HelloThumbnail - Developers]] [[HelloThumbnail - Classic]]
list: [[HelloThumbnail - Introduction Video]] [[HelloThumbnail - Grok TiddlyWiki]] [[HelloThumbnail - Latest Version]] [[HelloThumbnail - TiddlyWikiLinks]] [[HelloThumbnail - Developers]] [[HelloThumbnail - Funding]] [[HelloThumbnail - Marketplace]] [[HelloThumbnail - Federatial]]
modified: 20150414070948246
title: HelloThumbnail
type: text/vnd.tiddlywiki

View File

@ -1,6 +0,0 @@
title: HelloThumbnail - Classic
tags: HelloThumbnail
color: #D5B7EA
image: TiddlyWiki Classic.png
caption: ~TiddlyWiki Classic
link: TiddlyWikiClassic

View File

@ -1,7 +0,0 @@
title: HelloThumbnail - Developers
tags: HelloThumbnail
color: #6B6E98
background-color: #EAE57D
image: Dev Thumbnail.jpg
caption: Developers
link: Developers

View File

@ -0,0 +1,10 @@
background-color: #EDB431
caption: How is ~TiddlyWiki Funded?
color: #ff0
image: Funding.png
link: Funding TiddlyWiki
tags: HelloThumbnail
title: HelloThumbnail - Funding
ribbon-text: NEW
Find out how you can help support ~TiddlyWiki financially

View File

@ -1,11 +0,0 @@
background-color: #EDB431
caption: A Gentle Guide
color: #fff
created: 20150325172634195
image: Motovun Jack.jpg
link: A Gentle Guide to TiddlyWiki
modified: 20150414071032492
tags: HelloThumbnail
title: HelloThumbnail - Gentle Guide
type: text/vnd.tiddlywiki

View File

@ -4,3 +4,5 @@ color: #D5B7EA
image: Grok TiddlyWiki Banner
caption: Grok ~TiddlyWiki
link: "Grok TiddlyWiki" by Soren Bjornstad
A guided tutorial through ~TiddlyWiki

View File

@ -1,7 +0,0 @@
title: HelloThumbnail - HelpingTiddlyWiki
tags: HelloThumbnail
color: #B7D5EA
background-color: #fff
caption: Helping ~TiddlyWiki
link: HelpingTiddlyWiki
image: Tiddler Poster.png

View File

@ -6,3 +6,5 @@ icon: {{$:/core/images/video}}
caption: Introduction to ~TiddlyWiki
link: Introduction Video
image: Introduction Video Thumbnail.jpg
Short video introducing basic ~TiddlyWiki concepts

View File

@ -1,6 +1,14 @@
title: HelloThumbnail - Latest Version
tags: HelloThumbnail
caption: What's New in <<version>>
caption: What's New in v<<version>>
link: Releases
image: New Release Banner
color: #fff
\define prerelease-regexp() [0-9]+\.[0-9]+\.[0-9]+\-prerelease
<$list filter="[<version>!regexp<prerelease-regexp>]" variable="ignore">
The latest version v<<version>> of ~TiddlyWiki (released on <$view field="released" tiddler={{{ [<version>addprefix[Release ]] }}} format="date" template="DDth MMM YYYY"/>)
</$list>
<$list filter="[<version>regexp<prerelease-regexp>]" variable="ignore">
This is a prerelease build for testing and review
</$list>

View File

@ -0,0 +1,10 @@
title: HelloThumbnail - Marketplace
tags: HelloThumbnail
color: #6B6E98
background-color: #EAE57D
image: TiddlyWiki Marketplace Banner
caption: ~TiddlyWiki Marketplace
link: TiddlyWiki Marketplace
ribbon-text: NEW
Explore commercial products and services for ~TiddlyWiki

View File

@ -1,8 +0,0 @@
title: HelloThumbnail - TWEUM2017
tags: HelloThumbnail-disabled
color: #fff
background-color: #000
icon: <span style="font-size:3.5em;font-weight:bold;text-shadow:1px 1px 3px rgba(0,0,0,1);">2017</span>
image: TWEUM Thumbnail.jpg
caption: European Meetup 2017
link: TiddlyWiki European Meetup 2017

View File

@ -1,6 +0,0 @@
title: HelloThumbnail - TiddlyMap
tags: HelloThumbnail
color: #D5B7EA
image: TiddlyMap.png
caption: ~TiddlyMap Plugin
link: TiddlyMap Plugin by Felix Küppers

View File

@ -2,5 +2,7 @@ title: HelloThumbnail - TiddlyWikiLinks
tags: HelloThumbnail
color: #D5B7EA
image: TiddlyWikiLinks
caption: links.tiddlywiki.com
caption: links.tiddlywiki.org
link: Community Links Aggregator
Links to ~TiddlyWiki-related content collected by the community

View File

@ -0,0 +1,11 @@
background-color: #EDB431
caption: Federatial
color: #ff0
image: Federatial.png
link: Federatial
tags: HelloThumbnail
title: HelloThumbnail - Federatial
type: text/vnd.tiddlywiki
ribbon-text: NEW
Support the development of ~TiddlyWiki by hiring Jeremy Ruston through Federatial Limited

View File

@ -0,0 +1,7 @@
created: 20221128092648000
modified: 20221128092903706
tags: [[Hidden Settings]]
title: Hidden Setting: More Tabs Horizontal
type: text/vnd.tiddlywiki
Set the $:/config/ui/SideBar/More/horizontal tiddler to ''yes'', to align the ''More -> Tabs'' in horizontal orientation.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

View File

@ -1,3 +0,0 @@
title: Dev Thumbnail.jpg
type: image/jpeg
tags: picture

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

View File

@ -0,0 +1,3 @@
title: Federatial.png
type: image/png
tags: picture

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

View File

@ -1,3 +1,3 @@
title: TiddlyMap.png
title: Funding.png
type: image/png
tags: picture

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

View File

@ -0,0 +1,3 @@
title: TiddlyWiki Marketplace Banner
type: image/jpeg
tags: picture

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1,18 @@
title: TiddlyWiki Marketplace
tags: Community
modified: 20221204165636777
created: 20221204165636777
<span style="float:right;">[img width=200px [TiddlyWiki Marketplace Banner]]</span>
Welcome to the TiddlyWiki Marketplace. This new forum is designed to provide a space for individuals and organizations to offer commercial products and services that are built around TiddlyWiki:
* Paid hosting services
* Custom solution development
* Training courses
* One-to-one training sessions
* "Fix my wiki" debugging sessions
<a href="https://talk.tiddlywiki.org/c/marketplace/22" class="tc-btn-big-green" style="border-radius:4px;background-color:#ff5c48;" target="_blank" rel="noopener noreferrer">
~TiddlyWiki Marketplace
</a>

View File

@ -8,6 +8,7 @@ The popup mechanism allows blocks of content to be selectively displayed and pos
* [[StateTiddlers|StateMechanism]] to record whether a popup is currently displayed or not
* The RevealWidget to selectively display the popup content
** <<.from-version "5.2.4">> For positioning the popups relative or absolute coordinates can be used. See [[Coordinate Systems]] for more information about usage and format.
** For "sticky" popups — those that don't close when clicking inside one — set the ''class'' attribute to `tc-popup-keep`
* The ButtonWidget to trigger the display of the popup by setting the state tiddler appropriately

View File

@ -10,12 +10,14 @@ type: text/vnd.tiddlywiki
|paramObject |Hashmap of variables to be provided to the modal, contains all extra parameters passed to the widget sending the message. |
|rootwindow |<<.from-version 5.1.18>> ''yes'' or ''true'' will always display a modal in the wiki-root-window |
The "currentTiddler" variable is set to the title of the modal tiddler, but can be overridden by specifying a different value in `paramObject`.
The modal message is usually generated with the ButtonWidget. The modal message is handled by the TiddlyWiki core.
[[Fields within the tiddler|Modals]] being displayed in the modal can be used to customize its appearance.
!! paramObject
The "currentTiddler" variable is set to the title of the modal tiddler, but can be overridden by specifying a different value in `paramObject`.
! Example
Here is an example of displaying a modal and passing parameters to it:

View File

@ -2,7 +2,7 @@ caption: Emergency Export
color: #7986CB
created: 20180309211328412
delivery: Saver
description: Awkward but useful emergency technique for saving tiddlers
description: Retrieve and save tiddlers when saving is broken
method: save
modified: 20200507202809334
tags: Android Chrome Firefox [[Internet Explorer]] Linux Mac Opera Safari Saving Windows Edge

View File

@ -9,6 +9,7 @@ modified: 20220223160414274
tags: Chrome Firefox [[Internet Explorer]] Linux Mac Opera Safari Saving Windows Edge
title: Saving with Polly
type: text/vnd.tiddlywiki
ribbon-text: NEW
[[Polly|https://github.com/Marxsal/polly]] is a batch file system using Windows //~PowerShell// to restore ~TiddlyWiki files from a specified download directory to their original home directory.

View File

@ -54,7 +54,7 @@ Available methods for saving changes with ~TiddlyWiki:
</div>
<!-- Page content -->
<div class="content">
<div class="tc-cards">
<$wikify text=<<alltagsfilter>> name="alltagsfilterwikified">
<$list filter=<<alltagsfilterwikified>>>
{{||$:/_tw5.com-card-template}}

View File

@ -0,0 +1,15 @@
caption: ~TiddlyBucket
color: #f48fb1
created: 20221126192148031
delivery: Protocol
description: Save to AWS or Google Storage
method: save
modified: 20221126192853897
tags: Chrome Firefox [[Internet Explorer]] Linux Mac Opera Safari Saving Windows iOS Edge
title: TiddlyBucket - Save to AWS or Google Storage
type: text/vnd.tiddlywiki
ribbon-text: NEW
~TiddlyBucket - Save to AWS or Google Storage using Go
This tool replicates the ~TiddlyWeb backend API and can read and write the tiddler files to a local directory like the canonical ~TiddlyWiki5 app. But, in addition, it can do the same with a given a Google Cloud Storage bucket or AWS S3 bucket. Written in the Go programming language

View File

@ -3,19 +3,4 @@ modified: 20220719134613555
title: $:/_tw5.com-card-template
type: text/vnd.tiddlywiki
\define tw-card-template(bordercolor:"")
\whitespace trim
<div class="tc-card" style="border-top: 5px solid $bordercolor$;">
<$link>
<$let tv-wikilinks=no>
<div class="tc-card-title"><$transclude field="caption"><$view field="title"/></$transclude></div>
<div class="tc-card-author">
<$list filter="[is[current]has[community-author]]">by&nbsp;{{!!community-author}}</$list>
</div>
<p><$view field="description"/></p>
</$let>
</$link>
</div>
\end
<$macrocall $name="tw-card-template" bordercolor={{!!color}}/>
<$macrocall $name="flex-card" bordercolor={{!!color}} captionField="caption" subtitle={{{ [{!!community-author}!is[blank]addprefix[by ]] }}}/>

View File

@ -122,62 +122,180 @@ type: text/vnd.tiddlywiki
margin-left: 10px;
}
.tc-card {
margin: 15px;
padding: 10px 20px;
border-radius: 10px;
border-top: 5px solid #45D3D3;
box-shadow: 0 8px 17px -8px #A3A5AE;
background-color: #FFF;
width: 200px;
transition: box-shadow 0.3s ease-in-out;
font-size: 13px;
line-height: 18px;
.tc-cards {
display: flex;
flex-wrap: wrap;
justify-content: space-evenly;
width: 100%;
padding: 0.5em;
background: <<colour background>>;
border-color: rgba(34,36,38,.15);
box-shadow: 0 2px 25px 0 rgb(34 36 38 / 5%) inset;
}
.tc-card:hover {
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
.tc-tiddlylink.tc-card {
font-weight: normal;
max-width: 100%;
position: relative;
display: flex;
flex-direction: column;
background: <<colour background>>;
color: <<colour foreground>>;
width: 200px;
min-height: 0;
padding: 0 0 0.5em 0;
margin: 0.5em;
border: none;
border-radius: 8px;
box-shadow: 0 1px 3px 0 #d4d4d5, 0 0 0 1px #d4d4d5;
transition: box-shadow 0.3s ease,transform .3s ease;
}
.tc-card:hover .tc-card-title {
color: #1462ff;
@media (max-width: 500px) {
.tc-cards {
padding: 0;
}
.tc-tiddlylink.tc-card {
margin: 0.25em;
width: 45%;
}
}
.tc-tiddlylink.tc-card.tc-card-quote {
width: 320px;
box-shadow: none;
background-color: #effdff;
}
.tc-card-accent {
border-top-left-radius: 8px;
border-top-right-radius: 8px;
}
.tc-tiddlylink.tc-card:hover {
color: <<colour foreground>>;
background: <<colour notification-background>>;
text-decoration: none;
cursor: pointer;
box-shadow: 0 1px 5px 0 #bcbdbd, 0 0 0 1px #d4d4d5;
transform: translateY(-3px);
}
.tc-card-ribbon-wrapper {
line-height: 0;
width: 75px;
height: 75px;
position: absolute;
right: 0;
overflow: hidden;
top: 0;
pointer-events: none;
}
.tc-card-ribbon {
transition: top 0.3s ease-in-out;
top: 15px;
right: -77px;
position: absolute;
transform: rotate(45deg);
background-color: red;
box-shadow: 0px 0px 2px 0px rgb(0 0 0 / 50%);
}
.tc-tiddlylink.tc-card:hover .tc-card-ribbon {
top: -77px;
}
.tc-card-ribbon-inner {
font-size: 10px;
line-height: 13px;
font-weight: 700;
color: white;
text-decoration: none;
text-shadow: 0 -1px rgb(0 0 0 / 50%);
width: 200px;
display: inline-block;
padding: 2px 0;
text-align: center;
}
.tc-card-image {
line-height: 0;
overflow: hidden;
}
.tc-card-image img {
border-top-left-radius: 8px;
border-top-right-radius: 8px;
width: 100%;
transition: transform 0.3s ease-in-out;
}
.tc-tiddlylink.tc-card:hover .tc-card-image img {
transform: scale(1.05);
}
.tc-card-title {
text-align: center;
font-size: 1.2em;
line-height: 1.2;
font-weight: 600;
transition: color 0.2s ease-in-out;
padding: 10px 0;
transition: color 0.3s ease-in-out;
padding: 0 10px;
margin: 0.5em 0;
}
.tc-card-subtitle,
.tc-card-author {
text-align: center;
font-size: 0.8em;
line-height: 1.2;
color: <<colour muted-foreground>>;
padding: 0 10px;
margin: 0.5em 0;
font-style: italic;
}
.tc-card p {
height: 67px;
overflow: hidden;
.tc-card-body {
font-size: 0.9em;
line-height: 1.2;
padding: 0 10px;
margin: 0;
padding: 13px 0;
}
.tc-card a {
color: #222;
.tc-card-body-wrapper {
position: relative;
}
.tc-card a:hover {
text-decoration:none;
.tc-tiddlylink.tc-card.tc-card-quote .tc-card-body:before {
font-family: Georgia, serif;
color: <<colour blockquote-bar>>;
content: open-quote;
font-size: 5em;
line-height: 1;
float: left;
}
.tc-tiddlylink.tc-card.tc-card-quote .tc-card-body:after {
font-family: Georgia, serif;
color: <<colour blockquote-bar>>;
content: close-quote;
font-size: 5em;
line-height: 1;
float: right;
}
.tc-tiddlylink.tc-card .tc-card-body-clear {
clear: both;
}
.tc-card-body > p {
margin: 0.25em 0;
}
.tc-card a:active, .tc-card a:focus, .tc-btn-download:active, .tc-btn-download:focus{
outline: none;
}
div.content {
padding: 1px 16px;
display: flex;
flex-wrap: wrap;
outline: none;
}
.tc-btn-download {

View File

@ -94,3 +94,38 @@ That renders as:
<<tw-code $tiddler$>>
\end
\define flex-card(class,bordercolor:"",imageField:"image",captionField:"caption",subtitle:"",descriptionField:"description",linkField:"link")
\whitespace trim
<$link class={{{ [<__class__>addprefix[tc-card ]] }}} to={{{ [<currentTiddler>get<__linkField__>else<currentTiddler>] }}}>
<div class="tc-card-accent" style.borderTop={{{ [<__bordercolor__>!is[blank]addprefix[5px solid ]] }}}>
<$list filter="[<currentTiddler>has[ribbon-text]]" variable="ignore">
<div class="tc-card-ribbon-wrapper">
<div class="tc-card-ribbon" style.backgroundColor={{{ [<currentTiddler>get[ribbon-color]else[red]] }}}>
<div class="tc-card-ribbon-inner">
<$text text={{!!ribbon-text}}/>
</div>
</div>
</div>
</$list>
<$list filter="[<currentTiddler>has<__imageField__>]" variable="ignore">
<div class="tc-card-image">
<$image source={{{ [<currentTiddler>get<__imageField__>] }}}/>
</div>
</$list>
<div class="tc-card-title"><$transclude field=<<__captionField__>>><$view field="title"/></$transclude></div>
<$list filter="[<__subtitle__>!is[blank]]" variable="ignore">
<div class="tc-card-subtitle">
<$text text=<<__subtitle__>>/>
</div>
</$list>
<div class="tc-card-body-wrapper">
<div class="tc-card-body">
<$transclude field=<<__descriptionField__>> mode="block"/>
</div>
<div class="tc-card-body-clear">
</div>
</div>
</div>
</$link>
\end

View File

@ -0,0 +1,8 @@
title: Testimonials - Joe Armstrong
tags: Testimonial
caption: Joe Armstrong, Co-inventor of Erlang
extlink: https://joearms.github.io/
The ~TiddlyWiki is the best software I've ever found for organising my ideas.
It's well worth spending an hour or so playing with it to see how it can help you. This will be time well-spent and will change how you think and how you organise your ideas.

View File

@ -0,0 +1,8 @@
title: Testimonials - Network World
tags: Testimonial
caption: Mark Gibbs, Network World
extlink: http://www.networkworld.com/article/3028098/open-source-tools/tiddlywiki-a-free-open-source-wiki-revisited.html
~TiddlyWiki gets a Gearhead rating of 6 out of 5 (it's that good).
Finding code that works flawlessly after just two or three years is magical enough but after seven years?!

View File

@ -0,0 +1,6 @@
title: Testimonials - Product Hunt
tags: Testimonial
caption: Product Hunt
extlink: https://www.producthunt.com/posts/tiddlywiki-2?utm_source=badge-top-post-badge&utm_medium=badge&utm_souce=badge-tiddlywiki-2
<div style="text-align:center;">{{Product Hunt Link}}</div>

View File

@ -1,6 +1,6 @@
caption: action-popup
created: 20200303114556528
modified: 20210501203451387
modified: 20220815205132124
tags: Widgets ActionWidgets
title: ActionPopupWidget
type: text/vnd.tiddlywiki
@ -15,10 +15,11 @@ The ''action-popup'' widget is invisible. Any content within it is ignored.
|!Attribute |!Description |
|$state |The title of the state tiddler for the popup |
|$coords |Optional coordinates for the handle to which popup is positioned (in the format `(x,y,w,h)`) |
|$coords |Optional coordinates for the handle to which popup is positioned (see [[Coordinate Systems]] for the supported formats) |
|$floating |<<.from-version "5.2.0">> Optional. Defaults to `no`. Set to `yes` to create a popup that must be closed explicitly. |
<<.from-version "5.1.23">> If the ''$coords'' attribute is missing or empty then all popups are cancelled.
<<.from-version "5.1.23">> If the ''$coords'' attribute is missing or empty then all popups are cancelled.<br/>
<<.from-version "5.2.4">> The ''$coords'' attribute supports absolute and relative coordinates. See [[Coordinate Systems]] for more information.
<<.tip "Delete the state tiddler for a floating popup to close it.">>

View File

@ -1,6 +1,6 @@
caption: button
created: 20131024141900000
modified: 20211009121239795
modified: 20220810192251345
tags: Widgets TriggeringWidgets
title: ButtonWidget
type: text/vnd.tiddlywiki
@ -37,6 +37,7 @@ The content of the `<$button>` widget is displayed within the button.
|default |Default value if <<.attr set>> tiddler is missing for testing against <<.attr setTo>> to determine <<.attr selectedClass>> |
|popup |Title of a state tiddler for a popup that is toggled when the button is clicked. See PopupMechanism for details |
|popupTitle |Title of a state tiddler for a popup that is toggled when the button is clicked. In difference to the <<.attr popup>> attribute, ''no'' TextReference is used. See PopupMechanism for details |
|popupAbsCoords |<<.from-version "5.2.4">> If set to ''yes'' writes absolute coordinates to the tiddler referenced by the <<.attr popup>>. If set to ''no'' (the default) uses relative coordinates. See [[Coordinate Systems]] for details |
|aria-label |Optional [[Accessibility]] label |
|tooltip |Optional tooltip |
|class |An optional CSS class name to be assigned to the HTML element|

View File

@ -41,7 +41,8 @@ The LinkWidget incorporates the functionality of the DraggableWidget via the ''d
|!Variables |!Description |
|`modifier` |The [[modifier Variable]] contains the Modifier Key held while dragging |
|`dom-*` |All DOM attributes of the node being dragged are made available as variables, with the prefix `dom-` |
|`tv-popup-coords` |A co-ordinate string that can be used with the ActionPopupWidget to trigger a popup at the DOM node that's being dragged where the event originated |
|`tv-popup-coords` |A relative co-ordinate string that can be used with the ActionPopupWidget to trigger a popup at the DOM node matching the selector where the event originated (see [[Coordinate Systems]] for more information) |
|`tv-popup-abs-coords` |<<.from-version "5.2.4">> An absolute co-ordinate string that can be used with the ActionPopupWidget to trigger a popup at the DOM node matching the selector where the event originated (see [[Coordinate Systems]] for more information) |
|`tv-selectednode-posx` |`x` offset position of the dragged DOM node |
|`tv-selectednode-posy` |`y` offset position of the dragged DOM node |
|`tv-selectednode-width` |`offsetWidth` of the dragged DOM node |

View File

@ -1,5 +1,5 @@
created: 20201123113532200
modified: 20220507184043398
modified: 20221012194222875
tags: Widgets TriggeringWidgets
title: EventCatcherWidget
type: text/vnd.tiddlywiki
@ -10,7 +10,7 @@ type: text/vnd.tiddlywiki
//This is an advanced widget intended for use by those familiar with HTML, CSS and JavaScript handling of DOM events.//
The event catcher widget traps DOM-initiated Javascript events dispatched within its child content, and allows invoking a series of ActionWidgets in response to those events.
The event catcher widget traps DOM-initiated Javascript events dispatched within its child content, and allows invoking a series of ActionWidgets in response to those events.
In order for the events to be trapped:
@ -47,7 +47,8 @@ The following variables are made available to the actions:
|`event-mousebutton` |The mouse button (if any) used to trigger the event (can be "left", "right" or "middle"). Note that not all event types support the mousebutton property |
|`event-type` |The type property of the JavaScript event |
|`event-detail-*` |Any properties in the detail attribute of the event are made available with the prefix `event-detail-` |
|`tv-popup-coords` |A co-ordinate string that can be used with the ActionPopupWidget to trigger a popup at the DOM node matching the selector where the event originated |
|`tv-popup-coords` |A relative co-ordinate string that can be used with the ActionPopupWidget to trigger a popup at the DOM node matching the selector where the event originated (see [[Coordinate Systems]] for more information) |
|`tv-popup-abs-coords` |<<.from-version "5.2.4">> An absolute co-ordinate string that can be used with the ActionPopupWidget to trigger a popup at the DOM node matching the selector where the event originated (see [[Coordinate Systems]] for more information) |
|`tv-widgetnode-width` |<<.from-version "5.2.3">> `offsetWidth` of the DOM node created by the eventcatcher widget |
|`tv-widgetnode-height` |<<.from-version "5.2.3">> `offsetHeight` of the DOM node created by the eventcatcher widget |
|`tv-selectednode-posx` |`x` offset position of the selected DOM node |

View File

@ -40,6 +40,7 @@ The content of the `<$select>` widget should be one or more HTML `<option>` or `
|multiple |If present, switches to multiple selection mode |
|size |The number of rows to display in multiple selection mode |
|actions |A string containing ActionWidgets to be triggered when the key combination is detected |
|focus |<<.from-version "5.2.4">> Optional. Set to "yes" to automatically focus the HTML select element after creation |
! Examples

View File

@ -59,6 +59,8 @@ Home/Caption: strona główna
Home/Hint: Otwórz domyślne tiddlery
Language/Caption: języki
Language/Hint: Zmień jezyk interfejsu
LayoutSwitcher/Hint: Otwórz przełacznik układu
LayoutSwitcher/Caption: układ
Manager/Caption: menedżer tiddlerów
Manager/Hint: Otwórz menedżer tiddlerów
More/Caption: więcej

View File

@ -0,0 +1,18 @@
title: $:/language/Help/commands
description: Uruchom komendy zwrócone przez filtr
Uruchamia komendy zwrócone przez filtr.
```
--commands <filter>
```
Dla przykładu:
```
--commands "[enlist{$:/build-commands-as-text}]"
```
```
--commands "[{$:/build-commands-as-json}jsonindexes[]] :map[{$:/build-commands-as-json}jsonget<currentTiddler>]"
```

View File

@ -1,11 +1,11 @@
title: $:/language/Buttons/
AdvancedSearch/Caption: 高级查找
AdvancedSearch/Hint: 高级查找
AdvancedSearch/Caption: 高级搜索
AdvancedSearch/Hint: 高级搜索
Cancel/Caption: 取消
Cancel/Hint: 放弃对此条目的更
Clone/Caption: 克隆
Clone/Hint: 克隆此条目
Cancel/Hint: 取消对此条目的修
Clone/Caption: 复制
Clone/Hint: 复制此条目
Close/Caption: 关闭
Close/Hint: 关闭此条目
CloseAll/Caption: 全部关闭
@ -34,21 +34,21 @@ ExportTiddler/Caption: 导出此条目
ExportTiddler/Hint: 导出此条目
ExportTiddlers/Caption: 导出条目
ExportTiddlers/Hint: 导出条目
SidebarSearch/Hint: 选择侧边栏的查找字段
Fold/Caption: 收合条目
Fold/Hint: 收合此条目的内容
SidebarSearch/Hint: 选择侧边栏的搜索字段
Fold/Caption: 折叠条目
Fold/Hint: 折叠此条目的内容
Unfold/Caption: 展开条目
Unfold/Hint: 展开此条目的内容
FoldOthers/Caption: 收合其他条目
FoldOthers/Hint: 收合其他已开启条目的内容
FoldAll/Caption: 收合所有条目
FoldAll/Hint: 收合所有已开启条目的内容
Fold/FoldBar/Caption: 收合
Fold/FoldBar/Hint: 可选的收合与展开条目的长条按钮
FoldOthers/Caption: 折叠其他条目
FoldOthers/Hint: 折叠其他已开启条目的内容
FoldAll/Caption: 折叠所有条目
FoldAll/Hint: 折叠所有已开启条目的内容
Fold/FoldBar/Caption: 折叠
Fold/FoldBar/Hint: 可选的折叠与展开条目的长条按钮
UnfoldAll/Caption: 展开所有条目
UnfoldAll/Hint: 展开所有已开启条目的内容
FullScreen/Caption: 全屏
FullScreen/Hint: 进入或离开全屏模式
FullScreen/Caption: 全屏
FullScreen/Hint: 进入或退出全屏模式
Help/Caption: 帮助
Help/Hint: 显示帮助面板
Home/Caption: 首页
@ -58,11 +58,13 @@ Import/Hint: 导入许多类型的文件包括文本、图像、~TiddlyWiki 或
Info/Caption: 信息
Info/Hint: 显示此条目的信息
Language/Caption: 语言
Language/Hint: 选择用户介面语言
Language/Hint: 选择用户界面语言
LayoutSwitcher/Hint: 开启布局切换器
LayoutSwitcher/Caption: 布局
Manager/Caption: 条目管理器
Manager/Hint: 开启条目管理器
More/Caption: 更多
More/Hint: 更多
More/Hint: 更多
NewHere/Caption: 添加子条目
NewHere/Hint: 创建一个标签为此条目名称的新条目
NewJournal/Caption: 添加日志
@ -91,7 +93,7 @@ Save/Caption: 确定
Save/Hint: 确定对此条目的更改
SaveWiki/Caption: 保存变更
SaveWiki/Hint: 保存变更
StoryView/Caption: 查看模式
StoryView/Caption: 视图模式
StoryView/Hint: 选择查看条目的视觉效果
HideSideBar/Caption: 隐藏侧边栏
HideSideBar/Hint: 隐藏侧边栏
@ -99,20 +101,20 @@ ShowSideBar/Caption: 显示侧边栏
ShowSideBar/Hint: 显示侧边栏
TagManager/Caption: 标签管理
TagManager/Hint: 标签管理
Timestamp/Caption: 时间戳
Timestamp/Hint: 选择修改是否更新时间戳
Timestamp/On/Caption: 时间戳开启
Timestamp/On/Hint: 条目被修改时,更新时间戳
Timestamp/Off/Caption: 时间戳关闭
Timestamp/Off/Hint: 条目被修改时,不更新时间戳
Theme/Caption: 布主题
Theme/Hint: 选择布主题
Timestamp/Caption: 时间戳
Timestamp/Hint: 选择修改是否更新时间戳
Timestamp/On/Caption: 时间戳开启
Timestamp/On/Hint: 条目被修改时,更新时间戳
Timestamp/Off/Caption: 时间戳关闭
Timestamp/Off/Hint: 条目被修改时,不更新时间戳
Theme/Caption: 布主题
Theme/Hint: 选择布主题
Bold/Caption: 粗体
Bold/Hint: 套用粗体格式于所选文本
Clear/Caption: 清除
Clear/Hint: 清除图像为纯色
EditorHeight/Caption: 编辑器高度
EditorHeight/Caption/Auto: 自动调整高度以适内容
EditorHeight/Caption/Auto: 自动调整高度以适内容
EditorHeight/Caption/Fixed: 固定高度︰
EditorHeight/Hint: 选择文本编辑器的高度
Excise/Caption: 剪切
@ -124,7 +126,7 @@ Excise/Caption/Replace/Macro: 宏
Excise/Caption/Replace/Link: 链接
Excise/Caption/Replace/Transclusion: 嵌入
Excise/Caption/Tag: 将新条目的标签设为此条目的名称
Excise/Caption/TiddlerExists: 警示:条目已经存在
Excise/Caption/TiddlerExists: 提醒:条目已经存在
Excise/Hint: 剪切所选文本到一个新条目
Heading1/Caption: 标题 1
Heading1/Hint: 套用标题级别 1 的格式于包含所选文本的列
@ -164,8 +166,8 @@ Preview/Caption: 预览
Preview/Hint: 显示预览窗格
PreviewType/Caption: 预览类型
PreviewType/Hint: 选择预览类型
Quote/Caption: 引
Quote/Hint: 套用引文本格式于包含所选文本的列
Quote/Caption: 引
Quote/Hint: 套用引文本格式于包含所选文本的列
RotateLeft/Caption: 向左旋转
RotateLeft/Hint: 图像向左旋转 90 度
Size/Caption: 图像大小
@ -177,7 +179,7 @@ Stamp/Caption: 印记
Stamp/Caption/New: 添加您自己的
Stamp/Hint: 插入一个预配置的文本片段
Stamp/New/Title: 在选单中显示的标题
Stamp/New/Text: 片段的文本。(记得在 `caption` 栏位中添加一个说明性的标题)。
Stamp/New/Text: 片段的文本。(记得在 `caption` 字段中添加一个说明性的标题)。
Strikethrough/Caption: 删除线
Strikethrough/Hint: 套用删除线格式于所选文本
Subscript/Caption: 下标

View File

@ -2,11 +2,11 @@ title: $:/language/ControlPanel/
Advanced/Caption: 高级
Advanced/Hint: 关于此 TiddlyWiki 的内部信息
Appearance/Caption: 视觉外观
Appearance/Caption: 外观
Appearance/Hint: 定制您的 TiddlyWiki 外观。
Basics/AnimDuration/Prompt: 动画持续时间
Basics/AutoFocus/Prompt: 编辑条目时的默认自动停留栏位
Basics/Caption: 基
Basics/AutoFocus/Prompt: 编辑条目时的默认自动停留字段
Basics/Caption: 基
Basics/DefaultTiddlers/BottomHint: 标题含空白时请使用 &#91;&#91;双中括弧&#93;&#93;,或者您可用 {{保留开启中的条目顺序||$:/snippets/retain-story-ordering-button}}
Basics/DefaultTiddlers/Prompt: 首页
Basics/DefaultTiddlers/TopHint: 默认开启的条目
@ -92,8 +92,8 @@ Plugins/PluginWillRequireReload: (需要重新加载)
Plugins/Plugins/Caption: 插件
Plugins/Plugins/Hint: 插件
Plugins/Reinstall/Caption: 重新安装
Plugins/Themes/Caption: 布主题
Plugins/Themes/Hint: 布主题插件
Plugins/Themes/Caption: 布主题
Plugins/Themes/Hint: 布主题插件
Plugins/Update/Caption: 更新
Plugins/Updates/Caption: 更新
Plugins/Updates/Hint: 已安装插件的可用更新
@ -165,18 +165,18 @@ Settings/LinkToBehaviour/InsideRiver/Hint: 从故事河//中//导航
Settings/LinkToBehaviour/OutsideRiver/Hint: 从故事河//外//导航
Settings/LinkToBehaviour/OpenAbove: 开启于当前条目之上
Settings/LinkToBehaviour/OpenBelow: 开启于当前条目之下
Settings/LinkToBehaviour/OpenAtTop: 开启于故事河的顶
Settings/LinkToBehaviour/OpenAtTop: 开启于故事河的顶
Settings/LinkToBehaviour/OpenAtBottom: 开启于故事河的底部
Settings/MissingLinks/Caption: 维基链接
Settings/MissingLinks/Hint: 选择是否要链接到尚未存在的条目
Settings/MissingLinks/Description: 启用链接到佚失条目
Settings/NavigationAddressBar/Caption: 网址栏导
Settings/NavigationAddressBar/Hint: 在浏览器网址栏导到条目时的行为:
Settings/NavigationAddressBar/Caption: 网址栏导
Settings/NavigationAddressBar/Hint: 在浏览器网址栏导到条目时的行为:
Settings/NavigationAddressBar/No/Description: 不更新网址栏
Settings/NavigationAddressBar/Permalink/Description: 包含目标条目
Settings/NavigationAddressBar/Permaview/Description: 包括目标条目和当前已开启的条目序列
Settings/NavigationHistory/Caption: 历史记录导
Settings/NavigationHistory/Hint: 当导到条目时,更新浏览器历史记录:
Settings/NavigationHistory/Caption: 历史记录导
Settings/NavigationHistory/Hint: 当导到条目时,更新浏览器历史记录:
Settings/NavigationHistory/No/Description: 不更新历史记录
Settings/NavigationHistory/Yes/Description: 更新历史记录
Settings/NavigationPermalinkviewMode/Caption: 引用链接/固定链接 模式
@ -201,18 +201,18 @@ Settings/TitleLinks/No/Description: 不显示条目标题为链接
Settings/TitleLinks/Yes/Description: 显示条目标题为链接
StoryTiddler/Caption: 故事条目
StoryTiddler/Hint: 此规则级联用于动态选择模板,以便在故事河中显示条目。
StoryView/Caption: 查看模式
StoryView/Prompt: 当前的查看模式:
StoryView/Caption: 视图模式
StoryView/Prompt: 当前的视图模式:
Stylesheets/Caption: 样式表
Stylesheets/Expand/Caption: 全部展开
Stylesheets/Hint: 这是当前标签为 <<tag "$:/tags/Stylesheet">> 的样式表条目呈现的 CSS
Stylesheets/Restore/Caption: 复原
Theme/Caption: 布主题
Theme/Prompt: 当前的布主题:
Theme/Caption: 布主题
Theme/Prompt: 当前的布主题:
TiddlerColour/Caption: 条目颜色
TiddlerColour/Hint: 此规则级联用于动态地为条目选择颜色 (用于图示和关联的标签丸)。
TiddlerFields/Caption: 条目栏位
TiddlerFields/Hint: 这是本维基使用中的所有条目栏位(含系统条目的栏位,但默认条目的栏位除外)。
TiddlerFields/Caption: 条目字段
TiddlerFields/Hint: 这是本维基使用中的所有条目字段(含系统条目的字段,但默认条目的字段除外)。
TiddlerIcon/Caption: 条目图示
TiddlerIcon/Hint: 此规则级联用于动态地为条目选择图示。
Toolbars/Caption: 工具栏
@ -224,7 +224,7 @@ Toolbars/PageControls/Hint: 选择将显示哪些按钮于主页面的工具栏
Toolbars/EditorToolbar/Caption: 编辑器工具栏
Toolbars/EditorToolbar/Hint: 选择将显示哪些按钮于编辑器工具栏。请注意,某些按钮只会出现在编辑某一类型的条目时。拖放可改变顺序。
Toolbars/ViewToolbar/Caption: 查看工具栏
Toolbars/ViewToolbar/Hint: 选择将显示哪些按钮于条目的查看模式工具栏。拖放可改变顺序。
Toolbars/ViewToolbar/Hint: 选择将显示哪些按钮于条目的视图模式工具栏。拖放可改变顺序。
Tools/Download/Full/Caption: 下载完整副本
ViewTemplateBody/Caption: 查看模板主体
ViewTemplateBody/Hint: 默认的查看模板使用此规则级联,动态选择模板以显示条目的主体。

View File

@ -4,5 +4,5 @@ title: $:/core/zh-Hans/readme
* JavaScript 代码模块
* 图标
* 创建 TiddlyWiki 的用户面所需的模板
* 创建 TiddlyWiki 的用户面所需的模板
* 核心所使用的可当地语系化字串的英国英语 (''en-GB'') 翻译

View File

@ -16,10 +16,10 @@ parser: 不同内容类型的解析器。
route: 定义内置 HTTP 服务器如何处理各个网址格式。
saver: 于浏览器保存文件的不同的保存处理方法。
startup: 启动时期的功能函数。
storyview: 查看模式用以自订 list 小部件的动画与行为。
storyview: 视图模式用以自订 list 小部件的动画与行为。
texteditoroperation: 一个文本编辑器工具栏操作。
tiddlerdeserializer: 转换不同内容类型至条目。
tiddlerfield: 定义个别条目栏位的行为。
tiddlerfield: 定义个别条目字段的行为。
tiddlermethod: 添加方法至 `$tw.Tiddler` 原型。
upgrader: 于升级/导入过程中,套用升级处理至条目。
utils: 添加方法至 `$tw.utils`。

View File

@ -1,11 +1,11 @@
title: $:/language/Docs/PaletteColours/
alert-background: 警示背景
alert-border: 警示边框
alert-highlight: 警示高亮度
alert-muted-foreground: 警示的低调前景
alert-background: 提醒背景
alert-border: 提醒边框
alert-highlight: 提醒高亮度
alert-muted-foreground: 提醒的低调前景
background: 一般背景
blockquote-bar: 引
blockquote-bar: 引
button-background: 默认按钮背景
button-border: 默认按钮边框
button-foreground: 默认按钮前景
@ -66,7 +66,7 @@ sidebar-tab-foreground: 侧边栏页签前景
sidebar-tiddler-link-foreground-hover: 侧边栏悬停条目链结前景
sidebar-tiddler-link-foreground: 侧边栏条目链结前景
site-title-foreground: 网站标题前景
static-alert-foreground: 静态警示前景
static-alert-foreground: 静态提醒前景
tab-background-selected: 选定的页签背景
tab-background: 页签背景
tab-border-selected: 选定的页签边框
@ -87,8 +87,8 @@ tiddler-controls-foreground: 条目控制项前景
tiddler-editor-background: 条目编辑器背景
tiddler-editor-border-image: 条目编辑器边框图片
tiddler-editor-border: 条目编辑器边框
tiddler-editor-fields-even: 条目编辑器中偶数栏位背景
tiddler-editor-fields-odd: 条目编辑器中奇数栏位背景
tiddler-editor-fields-even: 条目编辑器中偶数字段背景
tiddler-editor-fields-odd: 条目编辑器中奇数字段背景
tiddler-info-background: 条目信息面板背景
tiddler-info-border: 条目信息面板边框
tiddler-info-tab-background: 条目信息面板页签背景

View File

@ -5,21 +5,21 @@ bag: 条目的来源集的名称
caption: 显示于页签或按钮上的标题文字
code-body: 若设置为 ''yes'',视图模板将以程式码形式显示条目
color: 条目的 CSS 颜色值
component: 负责[[警示条目|AlertMechanism]]的组件名称
component: 负责[[提醒条目|AlertMechanism]]的组件名称
created: 条目的创建日期
creator: 条目的创建者
current-tiddler: 用于缓存[[浏览历史列表|HistoryMechanism]]的最上层条目
dependents: 插件的依插件列表
dependents: 插件的依插件列表
description: 插件的说明、描述
draft.of: 草稿条目,包含条目的标题、标签、栏位 ...
draft.of: 草稿条目,包含条目的标题、标签、字段 ...
draft.title: 草稿条目的标题
footer: 互动窗口的注脚
hide-body: 若设置为 ''yes'',视图模板将隐藏条目的主体
icon: 条目的标题含有与条目关联的图标
library: 若设置为 ''yes'',表示条目应该被保存为一个 JavaScript 程序库
list: 条目的列表,指定一些条目的标题清单
list-before:当前条目名称将被添加到条目排序清单中的设置条目名称之前,或若此栏位存在但是空的,则被添加于清单的前端
list-after: 当前条目名称将被添加到条目排序清单的设置条目名称之后,或若此栏位存在但是空的,则被添加于清单的尾端
list-before:当前条目名称将被添加到条目排序清单中的设置条目名称之前,或若此字段存在但是空的,则被添加于清单的前端
list-after: 当前条目名称将被添加到条目排序清单的设置条目名称之后,或若此字段存在但是空的,则被添加于清单的尾端
modified: 条目的最近修改日期与时间
modifier: 条目的最近修改者
name: 具可读性的插件条目的名称

View File

@ -9,7 +9,7 @@ Drafts: 草稿条目
Orphans: 孤立条目
SystemTiddlers: 系统条目
ShadowTiddlers: 默认条目
OverriddenShadowTiddlers: 被覆的默认条目
OverriddenShadowTiddlers: 被覆的默认条目
SessionTiddlers: 自维基加载后修改的条目
SystemTags: 系统标签
StoryList: 故事河中的条目,不含 ~$:/AdvancedSearch

View File

@ -1,9 +1,10 @@
title: GettingStarted
\define lingo-base() $:/language/ControlPanel/Basics/
欢迎使用 ~TiddlyWiki 及参与 ~TiddlyWiki 社群
开始将重要资讯存放于 ~TiddlyWiki 之前,确认您可以可靠地保存变更是很重要的。详细资讯请参阅 https://tiddlywiki.com/#GettingStarted
欢迎来到 ~TiddlyWiki 和 ~TiddlyWiki 社区
开始在 ~TiddlyWiki 中存储重要信息之前,确保能够可靠地保存更改很重要。详情见 https://tiddlywiki.com/#GettingStarted
!! 设置此 ~TiddlyWiki
@ -15,4 +16,4 @@ title: GettingStarted
|^ <$link to="$:/DefaultTiddlers"><<lingo DefaultTiddlers/Prompt>></$link><br><<lingo DefaultTiddlers/TopHint>>|<$edit tag="textarea" tiddler="$:/DefaultTiddlers"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |
</div>
请参阅[[控制台|$:/ControlPanel]]查看更多选项。
可在[[控制台|$:/ControlPanel]]查看更多选项。

View File

@ -0,0 +1,18 @@
title: $:/language/Help/commands
description: 运行从筛选器传回的命令
按顺序运行从筛选器传回的命令符记
```
--commands <filter>
```
示例
```
--commands "[enlist{$:/build-commands-as-text}]"
```
```
--commands "[{$:/build-commands-as-json}jsonindexes[]] :map[{$:/build-commands-as-json}jsonget<currentTiddler>]"
```

View File

@ -1,7 +1,7 @@
title: $:/language/Help/fetch
description: 通过网址从维基取条目
description: 通过网址从维基取条目
通过 HTTP/HTTPS 取一个或多个文件,并导入匹配筛选器的条目,可选的转换传入的名称。
通过 HTTP/HTTPS 取一个或多个文件,并导入匹配筛选器的条目,可选的转换传入的名称。
```
--fetch file <url> <import-filter> <transform-filter>
@ -10,11 +10,11 @@ description: 通过网址从维基撷取条目
--fetch raw-files <url-filter> <transform-filter>
```
"file" 和 "files" 选项取指定的文件,并尝试导入其中的条目(与将文件拖动到浏览器视窗中的处理相同)。 "raw-file" 和 "raw-files" 变选项取指定的文件,并将原始文件资料存储于条目,而不套用导入逻辑。
"file" 和 "files" 选项取指定的文件,并尝试导入其中的条目(与将文件拖动到浏览器视窗中的处理相同)。 "raw-file" 和 "raw-files" 变选项取指定的文件,并将原始文件资料存储于条目,而不套用导入逻辑。
使用 "file" and "raw-file" 选项为仅取单个文件,且第一个参数为要读取文件的网址。
使用 "file" and "raw-file" 选项为仅取单个文件,且第一个参数为要读取文件的网址。
使用 "files" 和 "raw-files" 选项为取多个文件,且第一个参数是一个产生要读取文件的网址清单的筛选器。例如,给定标签为 "remote-server" 的一组具有字段 "url" 的条目,筛选器 `[tag[remote-server]get[url]]` 将取回所有可用的网址。
使用 "files" 和 "raw-files" 选项为取多个文件,且第一个参数是一个产生要读取文件的网址清单的筛选器。例如,给定标签为 "remote-server" 的一组具有字段 "url" 的条目,筛选器 `[tag[remote-server]get[url]]` 将取回所有可用的网址。
对于 "file" 和 "files" 选项the `<import-filter>` 参数指定一个筛选器,用于确定要导入哪些条目。如果未提供,则默认为 `[all[tiddlers]]`。
@ -22,7 +22,7 @@ description: 通过网址从维基撷取条目
于 `--fetch` 之前使用 `--verbose` 命令,将在导入期间输出进度信息。
请注意TiddlyWiki 不会取一个已经加载插件的旧版本。
请注意TiddlyWiki 不会取一个已经加载插件的旧版本。
以下示例从 https://tiddlywiki.com 取回所有非系统条目,并将其保存到一个 JSON 文件:

View File

@ -19,5 +19,5 @@ tiddlywiki ./MyWikiFolder --init empty
* 其中 "edition" 默认为 ''empty''
* 若 wiki 文件夹不是空的,则初始化命令将失败
* 初始化命令会删除 'tiddlywiki.info' 文件内所有 'includeWikis' 的定义。
* 当指定多个版本时,这些版本于初始化后,将覆早期版本共用的所有文件 (故此最终的 `tiddlywiki.info` 文件将是从最近的版本复制而得)
* 当指定多个版本时,这些版本于初始化后,将覆早期版本共用的所有文件 (故此最终的 `tiddlywiki.info` 文件将是从最近的版本复制而得)
* `--editions` 传回所有可用版本的清单。

View File

@ -16,16 +16,16 @@ listen 命令使用[[命名的命令参数|NamedCommandParameters]]
* ''port'' - 侦听的埠号;非数值会被解译为一个系统环境变数,从其中提取埠号 (默认为 "8080")
* ''credentials'' - 凭证 CSV 文件的路径名(相对于维基文件夹)
* ''anon-username'' - 匿名用户的编辑署名
* ''username'' - 可选的基验证用户名称
* ''password'' - 可选的基验证密码
* ''username'' - 可选的基验证用户名称
* ''password'' - 可选的基验证密码
* ''authenticated-user-header'' - 可选的标头名称,用于受信任身份验证
* ''readers'' - 允许读取此维基,以逗号分隔的用户名称的清单
* ''writers'' - 允许写入此维基,以逗号分隔的用户名称的清单
* ''csrf-disable'' - 设置为 "yes" 以禁用 CSRF 检查 (默认为 "no")
* ''sse-enabled'' - 设置为 "yes" 以启用服务器传送的事件 (默认为 "no")
* ''root-tiddler'' - 服务的基条目 (默认为 "$:/core/save/all")
* ''root-render-type'' - 呈现的基条目的内容类型 (默认为 "text/plain")
* ''root-serve-type'' - 服务的基条目的内容类型 (默认为 "text/html")
* ''root-tiddler'' - 服务的基条目 (默认为 "$:/core/save/all")
* ''root-render-type'' - 呈现的基条目的内容类型 (默认为 "text/plain")
* ''root-serve-type'' - 服务的基条目的内容类型 (默认为 "text/html")
* ''tls-cert'' - TLS 证书文件的路径名(相对于维基文件夹)
* ''tls-key'' - TLS 密钥文件的路径名(相对于维基文件夹)
* ''debug-level'' - 可选的调试级别;设置为 "debug" 来查看请求的详细信息;(默认为 "none")

View File

@ -3,7 +3,7 @@ description: 构建升级处理所需的程式库插件
为升级处理构建 `$:/UpgradeLibrary` 条目。
升级程式库被格式化为一个插件类型为 `library` 的一般插件条目。它包含 TiddlyWiki5 存储库中所有可用的插件、布主题和语言包的副本。
升级程式库被格式化为一个插件类型为 `library` 的一般插件条目。它包含 TiddlyWiki5 存储库中所有可用的插件、布主题和语言包的副本。
此命令仅供内部使用;它只是与使用者构建一个自订的升级程序相关。

View File

@ -11,6 +11,6 @@ description: 将一群条目的原始内容保存到一个文件夹
默认情况下,路径名被解析为相对于版本文件夹的 `output` 子文件夹。 `--output` 命令可以用于将输出指定到一个不同的文件夹。
保存指定的文件之前,会先清除输出目录的现有文件。可藉由指定 ''noclean'' 旗标,禁用该删除作。
保存指定的文件之前,会先清除输出目录的现有文件。可藉由指定 ''noclean'' 旗标,禁用该删除作。
自动创建在路径中任何缺少的文件夹。

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