mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-12-11 18:50:28 +00:00
Merge branch 'master' into colour-improvements
This commit is contained in:
commit
fc695e7a50
18
boot/boot.js
18
boot/boot.js
@ -1470,17 +1470,15 @@ $tw.Wiki = function(options) {
|
||||
// Unpack the currently registered plugins, creating shadow tiddlers for their constituent tiddlers
|
||||
this.unpackPluginTiddlers = function() {
|
||||
var self = this;
|
||||
// Sort the plugin titles by the `plugin-priority` field
|
||||
pluginTiddlers.sort(function(a,b) {
|
||||
if("plugin-priority" in a.fields && "plugin-priority" in b.fields) {
|
||||
return a.fields["plugin-priority"] - b.fields["plugin-priority"];
|
||||
} else if("plugin-priority" in a.fields) {
|
||||
// Sort the plugin titles by the `plugin-priority` field, if this field is missing, default to 1
|
||||
pluginTiddlers.sort(function(a, b) {
|
||||
var priorityA = "plugin-priority" in a.fields ? a.fields["plugin-priority"] : 1;
|
||||
var priorityB = "plugin-priority" in b.fields ? b.fields["plugin-priority"] : 1;
|
||||
if (priorityA !== priorityB) {
|
||||
return priorityA - priorityB;
|
||||
} else if (a.fields.title < b.fields.title) {
|
||||
return -1;
|
||||
} else if("plugin-priority" in b.fields) {
|
||||
return +1;
|
||||
} else if(a.fields.title < b.fields.title) {
|
||||
return -1;
|
||||
} else if(a.fields.title === b.fields.title) {
|
||||
} else if (a.fields.title === b.fields.title) {
|
||||
return 0;
|
||||
} else {
|
||||
return +1;
|
||||
|
@ -25,7 +25,7 @@ exports.handler = function(request,response,state) {
|
||||
response.end();
|
||||
} else {
|
||||
// Redirect to the root wiki if login worked
|
||||
var location = ($tw.syncadaptor && $tw.syncadaptor.host)? $tw.syncadaptor.host: "/";
|
||||
var location = ($tw.syncadaptor && $tw.syncadaptor.host)? $tw.syncadaptor.host: `${state.pathPrefix}/`;
|
||||
response.writeHead(302,{
|
||||
Location: location
|
||||
});
|
||||
|
@ -277,6 +277,8 @@ NavigatorWidget.prototype.makeDraftTiddler = function(targetTitle) {
|
||||
}
|
||||
// Get the current value of the tiddler we're editing
|
||||
var tiddler = this.wiki.getTiddler(targetTitle);
|
||||
var defaultType = this.wiki.getTiddlerText("$:/config/DefaultMissingType", "").trim();
|
||||
var defaultFields = { type: defaultType };
|
||||
// Save the initial value of the draft tiddler
|
||||
draftTitle = this.generateDraftTitle(targetTitle);
|
||||
var draftTiddler = new $tw.Tiddler({
|
||||
@ -288,7 +290,8 @@ NavigatorWidget.prototype.makeDraftTiddler = function(targetTitle) {
|
||||
"draft.title": targetTitle,
|
||||
"draft.of": targetTitle
|
||||
},
|
||||
this.wiki.getModificationFields()
|
||||
this.wiki.getModificationFields(),
|
||||
tiddler === null || tiddler === undefined ? defaultFields : {}
|
||||
);
|
||||
this.wiki.addTiddler(draftTiddler);
|
||||
return draftTiddler;
|
||||
|
@ -33,6 +33,7 @@ TestCaseWidget.prototype.render = function(parent,nextSibling) {
|
||||
this.execute();
|
||||
// Create container DOM node
|
||||
var domNode = this.document.createElement("div");
|
||||
domNode.setAttribute("class", "tc-test-case " + this.testcaseClass);
|
||||
this.domNodes.push(domNode);
|
||||
parent.insertBefore(domNode,nextSibling);
|
||||
// Render the children into a hidden DOM node
|
||||
@ -145,6 +146,7 @@ TestCaseWidget.prototype.execute = function() {
|
||||
this.testcaseTestActions = this.getAttribute("testActions");
|
||||
this.testcaseTestExpectedResult = this.getAttribute("testExpectedResult");
|
||||
this.testcaseHideIfPass = this.getAttribute("testHideIfPass");
|
||||
this.testcaseClass = this.getAttribute("class","");
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -21,9 +21,9 @@ diff-delete-foreground: <<colour foreground>>
|
||||
diff-equal-background:
|
||||
diff-equal-foreground: <<colour foreground>>
|
||||
diff-insert-background: #b8bb26
|
||||
diff-insert-foreground: <<colour foreground>>
|
||||
diff-invisible-background:
|
||||
diff-invisible-foreground: <<colour muted-foreground>>
|
||||
diff-insert-foreground: <<colour background>>
|
||||
diff-invisible-background: #ffff97
|
||||
diff-invisible-foreground: #444347
|
||||
dirty-indicator: #fb4934
|
||||
download-background: #b8bb26
|
||||
download-foreground: <<colour background>>
|
||||
|
@ -21,8 +21,8 @@ diff-delete-foreground: <<colour foreground>>
|
||||
diff-equal-background:
|
||||
diff-equal-foreground: <<colour foreground>>
|
||||
diff-insert-background: #A3BE8C
|
||||
diff-insert-foreground: <<colour foreground>>
|
||||
diff-invisible-background:
|
||||
diff-insert-foreground: <<colour background>>
|
||||
diff-invisible-background: #f9f3b5
|
||||
diff-invisible-foreground: <<colour muted-foreground>>
|
||||
dirty-indicator: #BF616A
|
||||
download-background: #A3BE8C
|
||||
|
@ -125,6 +125,14 @@ foreground: #657b83
|
||||
tiddler-link-foreground: <<colour primary>>
|
||||
|
||||
alert-border: #b99e2f
|
||||
diff-delete-background: <<colour red>>
|
||||
diff-delete-foreground: <<colour background>>
|
||||
diff-equal-background: inherit
|
||||
diff-equal-foreground: inherit
|
||||
diff-insert-background: <<colour green>>
|
||||
diff-insert-foreground: <<colour background>>
|
||||
diff-invisible-background: <<colour yellow>>
|
||||
diff-invisible-foreground: <<colour background>>
|
||||
dirty-indicator: #ff0000
|
||||
dropzone-background: rgba(0,200,0,0.7)
|
||||
external-link-background-hover: inherit
|
||||
|
@ -18,6 +18,14 @@ button-foreground: #93a1a1
|
||||
code-background: #073642
|
||||
code-border: #586e75
|
||||
code-foreground: #93a1a1
|
||||
diff-delete-background: #dc322f
|
||||
diff-delete-foreground: #eee8d5
|
||||
diff-equal-background: inherit
|
||||
diff-equal-foreground: inherit
|
||||
diff-insert-background: #859900
|
||||
diff-insert-foreground: #073642
|
||||
diff-invisible-background: #b58900
|
||||
diff-invisible-foreground: #eee8d5
|
||||
dirty-indicator: #dc322f
|
||||
download-background: #859900
|
||||
download-foreground: #073642
|
||||
|
@ -18,6 +18,14 @@ button-foreground: #586e75
|
||||
code-background: #eee8d5
|
||||
code-border: #93a1a1
|
||||
code-foreground: #586e75
|
||||
diff-delete-background: #dc322f
|
||||
diff-delete-foreground: #eee8d5
|
||||
diff-equal-background: inherit
|
||||
diff-equal-foreground: inherit
|
||||
diff-insert-background: #859900
|
||||
diff-insert-foreground: #eee8d5
|
||||
diff-invisible-background: #b58900
|
||||
diff-invisible-foreground: #eee8d5
|
||||
dirty-indicator: #dc322f
|
||||
download-background: #859900
|
||||
download-foreground: #eee8d5
|
||||
|
@ -19,13 +19,13 @@ code-background: rgba(0,0,0,0.03)
|
||||
code-border: rgba(0,0,0,0.08)
|
||||
code-foreground: rgb(255, 94, 94)
|
||||
diff-delete-background: #ffc9c9
|
||||
diff-delete-foreground: <<colour foreground>>
|
||||
diff-delete-foreground: <<colour background>>
|
||||
diff-equal-background:
|
||||
diff-equal-foreground: <<colour foreground>>
|
||||
diff-insert-background: #aaefad
|
||||
diff-insert-foreground: <<colour foreground>>
|
||||
diff-invisible-background:
|
||||
diff-invisible-foreground: <<colour muted-foreground>>
|
||||
diff-insert-foreground: <<colour background>>
|
||||
diff-invisible-background: #fdfcbd
|
||||
diff-invisible-foreground: <<colour background>>
|
||||
dirty-indicator: rgb(255, 94, 94)
|
||||
download-background: #19a974
|
||||
download-foreground: rgb(38, 38, 38)
|
||||
|
@ -2,6 +2,7 @@ title: $:/core/ui/ViewTemplate/body/rendered-plain-text
|
||||
code-body: yes
|
||||
|
||||
\whitespace trim
|
||||
\parameters (language:"css")
|
||||
<$wikify name="text" text={{!!text}} type={{!!type}}>
|
||||
<$codeblock code=<<text>> language="css"/>
|
||||
<$codeblock code=<<text>> language=<<language>>/>
|
||||
</$wikify>
|
4
core/ui/ViewTemplate/body/rendered-plain-text/html.tid
Normal file
4
core/ui/ViewTemplate/body/rendered-plain-text/html.tid
Normal file
@ -0,0 +1,4 @@
|
||||
title: $:/core/ui/ViewTemplate/body/rendered-plain-text/html
|
||||
code-body: yes
|
||||
|
||||
{{||$:/core/ui/ViewTemplate/body/rendered-plain-text|html}}
|
@ -3,6 +3,7 @@ tags: $:/tags/ViewTemplateBodyFilter
|
||||
|
||||
testcase: [tag[$:/tags/wiki-test-spec]type[text/vnd.tiddlywiki-multiple]] [tag[$:/tags/wiki-test-spec-failing]type[text/vnd.tiddlywiki-multiple]] :then[[$:/core/ui/TestCaseTemplate]]
|
||||
stylesheet: [tag[$:/tags/Stylesheet]then[$:/core/ui/ViewTemplate/body/rendered-plain-text]]
|
||||
html: [tag[$:/tags/RawMarkupWikified]] [tag[$:/tags/RawMarkupWikified/TopHead]] [tag[$:/tags/RawMarkupWikified/TopBody]] [tag[$:/tags/RawMarkupWikified/BottomBody]] :then[[$:/core/ui/ViewTemplate/body/rendered-plain-text/html]]
|
||||
core-ui-tags: [tag[$:/tags/PageTemplate]] [tag[$:/tags/EditTemplate]] [tag[$:/tags/ViewTemplate]] [tag[$:/tags/KeyboardShortcut]] [tag[$:/tags/ImportPreview]] [tag[$:/tags/EditPreview]] [tag[$:/tags/EditorToolbar]] [tag[$:/EditorTools]] [tag[$:/tags/Actions]] [tag[$:/tags/ToolbarButtonStyle]] :then[[$:/core/ui/ViewTemplate/body/code]]
|
||||
system: [prefix[$:/boot/]] [prefix[$:/core/macros]] [prefix[$:/core/save/]] [prefix[$:/core/templates/]] [prefix[$:/config/]] [prefix[$:/core/config/]] [prefix[$:/info/]] [prefix[$:/language/]] [prefix[$:/languages/]] [prefix[$:/snippets/]] [prefix[$:/info/]] [prefix[$:/state/]] [prefix[$:/status/]] [prefix[$:/temp/]] :and[!is[image]] :then[[$:/core/ui/ViewTemplate/body/code]]
|
||||
code-body: [field:code-body[yes]then[$:/core/ui/ViewTemplate/body/code]]
|
||||
|
@ -1,58 +1,55 @@
|
||||
title: $:/core/macros/colour-picker
|
||||
tags: $:/tags/Macro
|
||||
|
||||
\define colour-picker-update-recent()
|
||||
\procedure colour-picker-update-recent()
|
||||
<$action-listops
|
||||
$tiddler="$:/config/ColourPicker/Recent"
|
||||
$subfilter="$(colour-picker-value)$ [list[$:/config/ColourPicker/Recent]remove[$(colour-picker-value)$]] +[limit[8]]"
|
||||
$subfilter="[<colour-picker-value>] [list[$:/config/ColourPicker/Recent]remove<colour-picker-value>] +[limit[8]]"
|
||||
/>
|
||||
\end
|
||||
|
||||
\define colour-picker-inner(actions)
|
||||
<$button tag="a" tooltip="""$(colour-picker-value)$""">
|
||||
$(colour-picker-update-recent)$
|
||||
<$transclude $variable="__actions__"/>
|
||||
|
||||
<span style="display:inline-block; background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;"/>
|
||||
|
||||
\procedure colour-picker-inner(actions)
|
||||
<$button tag="a" tooltip=<<colour-picker-value>>>
|
||||
<<colour-picker-update-recent>>
|
||||
<$transclude $variable="actions"/>
|
||||
<span style.display="inline-block" style.backgroundColor=<<colour-picker-value>> style.width="100%" style.height="100%" style.borderRadius="50%"/>
|
||||
</$button>
|
||||
\end
|
||||
|
||||
\define colour-picker-recent-inner(actions)
|
||||
\whitespace trim
|
||||
<$set name="colour-picker-value" value="$(recentColour)$">
|
||||
<$macrocall $name="colour-picker-inner" actions=<<__actions__>>/>
|
||||
\procedure colour-picker-recent-inner(actions)
|
||||
<$set name="colour-picker-value" value=<<recentColour>>>
|
||||
<$transclude $variable="colour-picker-inner" actions=<<actions>>/>
|
||||
</$set>
|
||||
\end
|
||||
|
||||
\define colour-picker-recent(actions)
|
||||
\whitespace trim
|
||||
\procedure colour-picker-recent(actions)
|
||||
{{$:/language/ColourPicker/Recent}}<$list filter="[list[$:/config/ColourPicker/Recent]]" variable="recentColour">
|
||||
 
|
||||
<$macrocall $name="colour-picker-recent-inner" actions=<<__actions__>>/>
|
||||
<$transclude $variable="colour-picker-recent-inner" actions=<<actions>>/>
|
||||
</$list>
|
||||
\end
|
||||
|
||||
\define colour-picker(actions)
|
||||
\whitespace trim
|
||||
\procedure colour-picker(actions)
|
||||
<div class="tc-colour-chooser">
|
||||
|
||||
<$macrocall $name="colour-picker-recent" actions=<<__actions__>>/>
|
||||
<$transclude $variable="colour-picker-recent" actions=<<actions>>/>
|
||||
|
||||
---
|
||||
|
||||
<$list filter="LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black" variable="colour-picker-value">
|
||||
 
|
||||
<$macrocall $name="colour-picker-inner" actions=<<__actions__>>/>
|
||||
<$transclude $variable="colour-picker-inner" actions=<<actions>>/>
|
||||
</$list>
|
||||
|
||||
---
|
||||
|
||||
<$edit-text tiddler="$:/config/ColourPicker/New" tag="input" default="" placeholder=""/>
|
||||
 
|
||||
<$edit-text tiddler="$:/config/ColourPicker/New" tag="input" default="" placeholder="" class="tc-tiny-gap-right"/>
|
||||
<$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__>>/>
|
||||
<%if [{$:/config/ColourPicker/New}!is[blank]] %>
|
||||
<$transclude $variable="colour-picker-inner" actions=<<actions>>/>
|
||||
<%endif%>
|
||||
</$set>
|
||||
|
||||
</div>
|
||||
|
@ -1,7 +1,7 @@
|
||||
title: $:/core/macros/dumpvariables
|
||||
tags: $:/tags/Macro
|
||||
|
||||
\define dumpvariables()
|
||||
\procedure dumpvariables()
|
||||
\whitespace trim
|
||||
<ul>
|
||||
<$list filter="[variables[]]" variable="varname">
|
||||
|
@ -1,39 +1,36 @@
|
||||
created: 20170715180840889
|
||||
modified: 20170715180914005
|
||||
tags: $:/tags/Macro
|
||||
title: $:/core/macros/image-picker
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
\define image-picker-thumbnail(actions)
|
||||
<$button tag="a" tooltip="""$(imageTitle)$"""><$transclude $variable="__actions__"/><$transclude tiddler=<<imageTitle>>/></$button>
|
||||
\procedure image-picker-thumbnail(actions)
|
||||
<$button tag="a" tooltip=<<imageTitle>>><$transclude $variable="actions"/><$transclude tiddler=<<imageTitle>>/></$button>
|
||||
\end
|
||||
|
||||
\define image-picker-list(filter,actions)
|
||||
\procedure image-picker-list(filter,actions)
|
||||
\whitespace trim
|
||||
<$list filter="""$filter$""" variable="imageTitle">
|
||||
<$macrocall $name="image-picker-thumbnail" actions=<<__actions__>>/>
|
||||
<$list filter=<<filter>> variable="imageTitle">
|
||||
<$transclude $variable="image-picker-thumbnail" actions=<<actions>>/>
|
||||
 
|
||||
</$list>
|
||||
\end
|
||||
|
||||
\define image-picker(actions,filter:"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]",subfilter:"")
|
||||
\procedure image-picker(actions,filter:"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]",subfilter:"")
|
||||
\whitespace trim
|
||||
<div class="tc-image-chooser">
|
||||
<$vars state-system=<<qualify "$:/state/image-picker/system">>>
|
||||
<$let state-system=<<qualify "$:/state/image-picker/system">> tv-filter={{{ [<filter>search-replace[$subfilter$],<subfilter>] }}}>
|
||||
<$checkbox tiddler=<<state-system>> field="text" checked="show" unchecked="hide" default="hide">
|
||||
 
|
||||
{{$:/language/SystemTiddlers/Include/Prompt}}
|
||||
<span class="tc-tiny-gap-left">{{$:/language/SystemTiddlers/Include/Prompt}}</span>
|
||||
</$checkbox>
|
||||
<$reveal state=<<state-system>> type="match" text="hide" default="hide" tag="div">
|
||||
<$macrocall $name="image-picker-list" filter="""$filter$ +[!is[system]]""" actions=<<__actions__>>/>
|
||||
<$transclude $variable="image-picker-list" filter=`$(tv-filter)$ +[!is[system]]` actions=<<actions>>/>
|
||||
</$reveal>
|
||||
<$reveal state=<<state-system>> type="nomatch" text="hide" default="hide" tag="div">
|
||||
<$macrocall $name="image-picker-list" filter="""$filter$""" actions=<<__actions__>>/>
|
||||
<$transclude $variable="image-picker-list" filter=<<tv-filter>> actions=<<actions>>/>
|
||||
</$reveal>
|
||||
</$vars>
|
||||
</$let>
|
||||
</div>
|
||||
\end
|
||||
|
||||
\define image-picker-include-tagged-images(actions)
|
||||
<$macrocall $name="image-picker" filter="[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]" actions=<<__actions__>>/>
|
||||
\procedure image-picker-include-tagged-images(actions)
|
||||
<$transclude $variable="image-picker" filter="[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]" actions=<<actions>>/>
|
||||
\end
|
||||
|
@ -1,14 +1,18 @@
|
||||
title: $:/core/macros/list
|
||||
tags: $:/tags/Macro
|
||||
|
||||
\define list-links(filter,type:"ul",subtype:"li",class:"",emptyMessage,field:"caption")
|
||||
\procedure list-links-draggable-drop-actions()
|
||||
<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter="+[insertbefore<actionTiddler>,<currentTiddler>]"/>
|
||||
\end
|
||||
|
||||
\whitespace trim
|
||||
<$genesis $type=<<__type__>> class=<<__class__>>>
|
||||
<$list filter=<<__filter__>> emptyMessage=<<__emptyMessage__>>>
|
||||
<$genesis $type=<<__subtype__>>>
|
||||
\procedure list-links(filter,type:"ul",subtype:"li",class:"",emptyMessage,field:"caption")
|
||||
<$genesis $type=<<type>> class=<<class>>>
|
||||
<$list filter=<<filter>> emptyMessage=<<emptyMessage>>>
|
||||
<$genesis $type=<<subtype>>>
|
||||
<$link to={{!!title}}>
|
||||
<$let tv-wikilinks="no">
|
||||
<$transclude field=<<__field__>>>
|
||||
<$transclude field=<<field>>>
|
||||
<$view field="title"/>
|
||||
</$transclude>
|
||||
</$let>
|
||||
@ -18,24 +22,19 @@ tags: $:/tags/Macro
|
||||
</$genesis>
|
||||
\end
|
||||
|
||||
\define list-links-draggable-drop-actions()
|
||||
<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter="+[insertbefore<actionTiddler>,<currentTiddler>]"/>
|
||||
\end
|
||||
|
||||
\define list-links-draggable(tiddler,field:"list",emptyMessage,type:"ul",subtype:"li",class:"",itemTemplate)
|
||||
\whitespace trim
|
||||
\procedure list-links-draggable(tiddler,field:"list",emptyMessage,type:"ul",subtype:"li",class:"",itemTemplate)
|
||||
<span class="tc-links-draggable-list">
|
||||
<$vars targetTiddler="""$tiddler$""" targetField="""$field$""">
|
||||
<$genesis $type=<<__type__>> class="$class$">
|
||||
<$list filter="[list[$tiddler$!!$field$]]" emptyMessage=<<__emptyMessage__>>>
|
||||
<$let targetTiddler=<<tiddler>> targetField=<<field>>>
|
||||
<$genesis $type=<<type>> class=<<class>>>
|
||||
<$list filter="[<tiddler>get<field>enlist-input[]]" emptyMessage=<<emptyMessage>>>
|
||||
<$droppable
|
||||
actions=<<list-links-draggable-drop-actions>>
|
||||
tag="""$subtype$"""
|
||||
tag=<<subtype>>
|
||||
enable=<<tv-enable-drag-and-drop>>
|
||||
>
|
||||
<div class="tc-droppable-placeholder"/>
|
||||
<div>
|
||||
<$transclude tiddler="""$itemTemplate$""">
|
||||
<$transclude tiddler=<<itemTemplate>>>
|
||||
<$link to={{!!title}}>
|
||||
<$let tv-wikilinks="no">
|
||||
<$transclude field="caption">
|
||||
@ -60,50 +59,48 @@ tags: $:/tags/Macro
|
||||
</$droppable>
|
||||
</$tiddler>
|
||||
</$genesis>
|
||||
</$vars>
|
||||
</$let>
|
||||
</span>
|
||||
\end
|
||||
|
||||
\define list-tagged-draggable-drop-actions(tag)
|
||||
\whitespace trim
|
||||
\procedure list-tagged-draggable-drop-actions(tag)
|
||||
<!-- Save the current ordering of the tiddlers with this tag -->
|
||||
<$set name="order" filter="[<__tag__>tagging[]]">
|
||||
<$set name="order" filter="[<tag>tagging[]]">
|
||||
<!-- Remove any list-after or list-before fields from the tiddlers with this tag -->
|
||||
<$list filter="[<__tag__>tagging[]]">
|
||||
<$list filter="[<tag>tagging[]]">
|
||||
<$action-deletefield $field="list-before"/>
|
||||
<$action-deletefield $field="list-after"/>
|
||||
</$list>
|
||||
<!-- Save the new order to the Tag Tiddler -->
|
||||
<$action-listops $tiddler=<<__tag__>> $field="list" $filter="+[enlist<order>] +[insertbefore<actionTiddler>,<currentTiddler>]"/>
|
||||
<$action-listops $tiddler=<<tag>> $field="list" $filter="+[enlist<order>] +[insertbefore<actionTiddler>,<currentTiddler>]"/>
|
||||
<!-- Make sure the newly added item has the right tag -->
|
||||
<!-- Removing this line makes dragging tags within the dropdown work as intended -->
|
||||
<!--<$action-listops $tiddler=<<actionTiddler>> $tags=<<__tag__>>/>-->
|
||||
<!--<$action-listops $tiddler=<<actionTiddler>> $tags=<<tag>>/>-->
|
||||
<!-- Using the following 5 lines as replacement makes dragging titles from outside into the dropdown apply the tag -->
|
||||
<$list filter="[<actionTiddler>!contains:tags<__tag__>]">
|
||||
<$list filter="[<actionTiddler>!contains:tags<tag>]">
|
||||
<$fieldmangler tiddler=<<actionTiddler>>>
|
||||
<$action-sendmessage $message="tm-add-tag" $param=<<__tag__>>/>
|
||||
<$action-sendmessage $message="tm-add-tag" $param=<<tag>>/>
|
||||
</$fieldmangler>
|
||||
</$list>
|
||||
</$set>
|
||||
\end
|
||||
|
||||
\define list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:"div",storyview:"")
|
||||
\whitespace trim
|
||||
\procedure list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:"div",storyview:"")
|
||||
<span class="tc-tagged-draggable-list">
|
||||
<$set name="tag" value=<<__tag__>>>
|
||||
<$set name="tag" value=<<tag>>>
|
||||
<$list
|
||||
filter="[<__tag__>tagging[]$subFilter$]"
|
||||
emptyMessage=<<__emptyMessage__>>
|
||||
storyview=<<__storyview__>>
|
||||
filter=`[<tag>tagging[]$(subFilter)$]`
|
||||
emptyMessage=<<emptyMessage>>
|
||||
storyview=<<storyview>>
|
||||
>
|
||||
<$genesis $type=<<__elementTag__>> class="tc-menu-list-item">
|
||||
<$genesis $type=<<elementTag>> class="tc-menu-list-item">
|
||||
<$droppable
|
||||
actions="""<$macrocall $name="list-tagged-draggable-drop-actions" tag=<<__tag__>>/>"""
|
||||
actions="""<$macrocall $name="list-tagged-draggable-drop-actions" tag=<<tag>>/>"""
|
||||
enable=<<tv-enable-drag-and-drop>>
|
||||
>
|
||||
<$genesis $type=<<__elementTag__>> class="tc-droppable-placeholder"/>
|
||||
<$genesis $type=<<__elementTag__>>>
|
||||
<$transclude tiddler="""$itemTemplate$""">
|
||||
<$genesis $type=<<elementTag>> class="tc-droppable-placeholder"/>
|
||||
<$genesis $type=<<elementTag>>>
|
||||
<$transclude tiddler=<<itemTemplate>>>
|
||||
<$link to={{!!title}}>
|
||||
<$view field="title"/>
|
||||
</$link>
|
||||
@ -114,11 +111,11 @@ tags: $:/tags/Macro
|
||||
</$list>
|
||||
<$tiddler tiddler="">
|
||||
<$droppable
|
||||
actions="""<$macrocall $name="list-tagged-draggable-drop-actions" tag=<<__tag__>>/>"""
|
||||
actions="""<$macrocall $name="list-tagged-draggable-drop-actions" tag=<<tag>>/>"""
|
||||
enable=<<tv-enable-drag-and-drop>>
|
||||
>
|
||||
<$genesis $type=<<__elementTag__>> class="tc-droppable-placeholder"/>
|
||||
<$genesis $type=<<__elementTag__>> style="height:0.5em;"/>
|
||||
<$genesis $type=<<elementTag>> class="tc-droppable-placeholder"/>
|
||||
<$genesis $type=<<elementTag>> style="height:0.5em;"/>
|
||||
</$droppable>
|
||||
</$tiddler>
|
||||
</$set>
|
||||
|
@ -1,28 +1,28 @@
|
||||
title: $:/core/macros/translink
|
||||
tags: $:/tags/Macro
|
||||
|
||||
\define translink(title,mode:"block")
|
||||
\procedure translink(title,mode:"block")
|
||||
\whitespace trim
|
||||
<$list filter="[<__mode__>match[block]]">
|
||||
<%if [<mode>match[block]] %>
|
||||
<div class="tc-translink">
|
||||
<div>
|
||||
<$link to="""$title$""">
|
||||
<h1><$text text="""$title$"""/></h1>
|
||||
<$link to=<<title>>>
|
||||
<h1><$text text=<<title>>/></h1>
|
||||
</$link>
|
||||
<$transclude tiddler="""$title$""" mode="block">
|
||||
<$set name="currentTiddler" value="""$title$"""><$transclude tiddler="$:/language/MissingTiddler/Hint"/></$set>
|
||||
<$transclude tiddler=<<title>> mode="block">
|
||||
<$set name="currentTiddler" value=<<title>>><$transclude tiddler="$:/language/MissingTiddler/Hint"/></$set>
|
||||
</$transclude>
|
||||
</div>
|
||||
</div>
|
||||
</$list>
|
||||
<$list filter="[<__mode__>match[inline]]">
|
||||
<%endif%>
|
||||
<%if [<mode>match[inline]] %>
|
||||
<span class="tc-translink">
|
||||
<$link to="""$title$""">
|
||||
<$text text="""$title$"""/>
|
||||
<$link to=<<title>> class="tc-tiny-gap-right">
|
||||
<$text text=<<title>>/>
|
||||
</$link>
|
||||
 (<$transclude tiddler="""$title$""" mode="inline">
|
||||
<$set name="currentTiddler" value="""$title$"""><$transclude tiddler="$:/language/MissingTiddler/Hint"/></$set>
|
||||
(<$transclude tiddler=<<title>> mode="inline">
|
||||
<$set name="currentTiddler" value=<<title>>><$transclude tiddler="$:/language/MissingTiddler/Hint"/></$set>
|
||||
</$transclude>)
|
||||
</span>
|
||||
</$list>
|
||||
<%endif%>
|
||||
\end
|
||||
|
@ -1,62 +1,58 @@
|
||||
title: $:/core/macros/tree
|
||||
tags: $:/tags/Macro
|
||||
|
||||
\define leaf-link(full-title,chunk,separator: "/")
|
||||
<$link to=<<__full-title__>>><$text text=<<__chunk__>>/></$link>
|
||||
\procedure leaf-link(full-title,chunk,separator: "/")
|
||||
<$link to=<<full-title>>><$text text=<<chunk>>/></$link>
|
||||
\end
|
||||
|
||||
\define leaf-node(prefix,chunk)
|
||||
\whitespace trim
|
||||
\procedure leaf-node(prefix,chunk)
|
||||
<li>
|
||||
<$list filter="[<__prefix__>addsuffix<__chunk__>is[shadow]] [<__prefix__>addsuffix<__chunk__>is[tiddler]]" variable="full-title">
|
||||
<$list filter="[<full-title>removeprefix<__prefix__>]" variable="chunk">
|
||||
<span>{{$:/core/images/file}}</span> <$macrocall $name="leaf-link" full-title=<<full-title>> chunk=<<chunk>>/>
|
||||
<$list filter="[<prefix>addsuffix<chunk>is[shadow]] [<prefix>addsuffix<chunk>is[tiddler]]" variable="full-title">
|
||||
<$list filter="[<full-title>removeprefix<prefix>]" variable="chunk">
|
||||
<span class="tc-tiny-gap-right">{{$:/core/images/file}}</span><$transclude $variable="leaf-link" full-title=<<full-title>> chunk=<<chunk>>/>
|
||||
</$list>
|
||||
</$list>
|
||||
</li>
|
||||
\end
|
||||
|
||||
\define branch-node(prefix,chunk,separator: "/")
|
||||
\whitespace trim
|
||||
\procedure branch-node(prefix,chunk,separator: "/")
|
||||
<li>
|
||||
<$set name="reveal-state" value={{{ [[$:/state/tree/]addsuffix<__prefix__>addsuffix<__chunk__>] }}}>
|
||||
<$set name="reveal-state" value={{{ [[$:/state/tree/]addsuffix<prefix>addsuffix<chunk>] }}}>
|
||||
<$reveal type="nomatch" stateTitle=<<reveal-state>> text="show">
|
||||
<$button setTitle=<<reveal-state>> setTo="show" class="tc-btn-invisible">
|
||||
{{$:/core/images/folder}} <$text text=<<__chunk__>>/>
|
||||
{{$:/core/images/folder}} <$text text=<<chunk>>/>
|
||||
</$button>
|
||||
</$reveal>
|
||||
<$reveal type="match" stateTitle=<<reveal-state>> text="show">
|
||||
<$button setTitle=<<reveal-state>> setTo="hide" class="tc-btn-invisible">
|
||||
{{$:/core/images/folder}} <$text text=<<__chunk__>>/>
|
||||
{{$:/core/images/folder}} <$text text=<<chunk>>/>
|
||||
</$button>
|
||||
</$reveal>
|
||||
 
|
||||
<span>(<$count filter="[all[shadows+tiddlers]removeprefix<__prefix__>removeprefix<__chunk__>] -[<__prefix__>addsuffix<__chunk__>]"/>)</span>
|
||||
<span class="tc-tiny-gap-left">(<$count filter="[all[shadows+tiddlers]removeprefix<prefix>removeprefix<chunk>] -[<prefix>addsuffix<chunk>]"/>)</span>
|
||||
<$reveal type="match" stateTitle=<<reveal-state>> text="show">
|
||||
<$macrocall $name="tree-node" prefix={{{ [<__prefix__>addsuffix<__chunk__>] }}} separator=<<__separator__>>/>
|
||||
<$transclude $variable="tree-node" prefix={{{ [<prefix>addsuffix<chunk>] }}} separator=<<separator>>/>
|
||||
</$reveal>
|
||||
</$set>
|
||||
</li>
|
||||
\end
|
||||
|
||||
\define tree-node(prefix,separator: "/")
|
||||
\whitespace trim
|
||||
\procedure tree-node(prefix,separator: "/")
|
||||
<ol>
|
||||
<$list filter="[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]!suffix<__separator__>]" variable="chunk">
|
||||
<$macrocall $name="leaf-node" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>
|
||||
<$list filter="[all[shadows+tiddlers]removeprefix<prefix>splitbefore<separator>sort[]!suffix<separator>]" variable="chunk">
|
||||
<$transclude $variable="leaf-node" prefix=<<prefix>> chunk=<<chunk>> separator=<<separator>>/>
|
||||
</$list>
|
||||
<$list filter="[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]suffix<__separator__>]" variable="chunk">
|
||||
<$macrocall $name="branch-node" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>
|
||||
<$list filter="[all[shadows+tiddlers]removeprefix<prefix>splitbefore<separator>sort[]suffix<separator>]" variable="chunk">
|
||||
<$transclude $variable="branch-node" prefix=<<prefix>> chunk=<<chunk>> separator=<<separator>>/>
|
||||
</$list>
|
||||
</ol>
|
||||
\end
|
||||
|
||||
\define tree(prefix: "$:/",separator: "/")
|
||||
\whitespace trim
|
||||
\procedure tree(prefix: "$:/",separator: "/")
|
||||
<div class="tc-tree">
|
||||
<span><$text text=<<__prefix__>>/></span>
|
||||
<span><$text text=<<prefix>>/></span>
|
||||
<div>
|
||||
<$macrocall $name="tree-node" prefix=<<__prefix__>> separator=<<__separator__>>/>
|
||||
<$transclude $variable="tree-node" prefix=<<prefix>> separator=<<separator>>/>
|
||||
</div>
|
||||
</div>
|
||||
\end
|
||||
|
@ -1,2 +1,2 @@
|
||||
title: $:/tags/ViewTemplateBodyFilter
|
||||
list: $:/config/ViewTemplateBodyFilters/testcase $:/config/ViewTemplateBodyFilters/hide-body $:/config/ViewTemplateBodyFilters/code-body $:/config/ViewTemplateBodyFilters/stylesheet $:/config/ViewTemplateBodyFilters/core-ui-advanced-search $:/config/ViewTemplateBodyFilters/core-ui-tags $:/config/ViewTemplateBodyFilters/import $:/config/ViewTemplateBodyFilters/plugin $:/config/ViewTemplateBodyFilters/system $:/config/ViewTemplateBodyFilters/default
|
||||
list: $:/config/ViewTemplateBodyFilters/testcase $:/config/ViewTemplateBodyFilters/hide-body $:/config/ViewTemplateBodyFilters/code-body $:/config/ViewTemplateBodyFilters/stylesheet $:/config/ViewTemplateBodyFilters/core-ui-advanced-search $:/config/ViewTemplateBodyFilters/core-ui-tags $:/config/ViewTemplateBodyFilters/import $:/config/ViewTemplateBodyFilters/plugin $:/config/ViewTemplateBodyFilters/html $:/config/ViewTemplateBodyFilters/system $:/config/ViewTemplateBodyFilters/default
|
||||
|
3
editions/markdowndemo/tiddlers/DefaultMissingType.tid
Normal file
3
editions/markdowndemo/tiddlers/DefaultMissingType.tid
Normal file
@ -0,0 +1,3 @@
|
||||
title: $:/config/DefaultMissingType
|
||||
|
||||
text/markdown
|
@ -6,4 +6,10 @@ This is a demo of TiddlyWiki5 incorporating a plugin for parsing tiddlers writte
|
||||
|
||||
To add the plugin to your own TiddlyWiki5, just drag this link to the browser window:
|
||||
|
||||
[[$:/plugins/tiddlywiki/markdown]]
|
||||
[[$:/plugins/tiddlywiki/markdown]]
|
||||
|
||||
! Overridden Defaults
|
||||
|
||||
This demo overrides the default value for tiddlers created from missing tiddler
|
||||
links so that Markdown is the default rather than WikiText. See
|
||||
the [[$:/config/DefaultMissingType]] tiddler for the modification.
|
||||
|
@ -24,4 +24,4 @@ This is a payload tiddler from a compound tiddler
|
||||
+
|
||||
title: ExpectedResult
|
||||
|
||||
<p><div><div>[{"title":"Payload Tiddler","tags":"Alpha Beta Gamma","text":"This is a payload tiddler from a compound tiddler","custom":"Alpha"}]</div></div></p>
|
||||
<p><div class="tc-test-case "><div>[{"title":"Payload Tiddler","tags":"Alpha Beta Gamma","text":"This is a payload tiddler from a compound tiddler","custom":"Alpha"}]</div></div></p>
|
@ -20,4 +20,4 @@ This is the tiddler HelloThere
|
||||
+
|
||||
title: ExpectedResult
|
||||
|
||||
<p><div><div>[{"title":"RealTitle","tags":"Definitions","text":"This is the tiddler HelloThere"}]</div></div></p>
|
||||
<p><div class="tc-test-case "><div>[{"title":"RealTitle","tags":"Definitions","text":"This is the tiddler HelloThere"}]</div></div></p>
|
@ -25,4 +25,4 @@ This is the tiddler AnotherDefinition
|
||||
+
|
||||
title: ExpectedResult
|
||||
|
||||
<p><div><div>[{"title":"AnotherDefinition","tags":"Definitions","text":"This is the tiddler AnotherDefinition","custom":"Alpha"},{"title":"HelloThere","tags":"Definitions","text":"This is the tiddler HelloThere","custom":"Alpha"}]</div></div></p>
|
||||
<p><div class="tc-test-case "><div>[{"title":"AnotherDefinition","tags":"Definitions","text":"This is the tiddler AnotherDefinition","custom":"Alpha"},{"title":"HelloThere","tags":"Definitions","text":"This is the tiddler HelloThere","custom":"Alpha"}]</div></div></p>
|
@ -20,4 +20,4 @@ This is the tiddler HelloThere
|
||||
+
|
||||
title: ExpectedResult
|
||||
|
||||
<p><div><div>[{"title":"HelloThere","tags":"Definitions","text":"This is the tiddler HelloThere","custom":"Alpha"}]</div></div></p>
|
||||
<p><div class="tc-test-case "><div>[{"title":"HelloThere","tags":"Definitions","text":"This is the tiddler HelloThere","custom":"Alpha"}]</div></div></p>
|
@ -9,10 +9,10 @@ text: Standalone data widget to create individual tiddlers
|
||||
title: Output
|
||||
|
||||
\whitespace trim
|
||||
<$testcase template="$:/core/ui/testcases/RawJSONTemplate">
|
||||
<$testcase template="$:/core/ui/testcases/RawJSONTemplate" class="my-class an-other-class">
|
||||
<$data title="Epsilon" text="Theta"/>
|
||||
</$testcase>
|
||||
+
|
||||
title: ExpectedResult
|
||||
|
||||
<p><div><div>[{"title":"Epsilon","text":"Theta"}]</div></div></p>
|
||||
<p><div class="tc-test-case my-class an-other-class"><div>[{"title":"Epsilon","text":"Theta"}]</div></div></p>
|
@ -0,0 +1,7 @@
|
||||
tags: [[Hidden Settings]]
|
||||
title: Hidden Setting: Default Type for Missing Tiddlers
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
By default new tiddlers are created with a blank content type.
|
||||
|
||||
The hidden setting in $:/config/DefaultMissingType can be set to another content type which is used by default for new tiddlers created by clicking on a missing link (for example, `text/markdown` to default to Markdown for missing tiddlers). If no value is provided, the content type will be blank and WikiText will be used.
|
@ -3,8 +3,8 @@ tags: Definitions
|
||||
modified: 20241105133737778
|
||||
created: 20241105133737778
|
||||
|
||||
<span class="tc-float-right">[img width=200 [MWS Banner.png]]</span>
|
||||
~MultiWikiServer is a new development that drastically improves ~TiddlyWiki's capabilities when running as server under Node.js. It brings ~TiddlyWiki up to par with common web-based tools like ~WordPress or ~MediaWiki by supporting multiple wikis and multiple users at the same time.
|
||||
<span class="tc-float-right tc-bordered-image">[img width=200 [MWS Banner.png]]</span>
|
||||
~MultiWikiServer is a new development that drastically improves ~TiddlyWiki's capabilities when running as a server under Node.js. It brings ~TiddlyWiki up to par with common web-based tools like ~WordPress or ~MediaWiki by supporting multiple wikis and multiple users at the same time.
|
||||
|
||||
Planned features include:
|
||||
|
||||
|
@ -130,6 +130,25 @@ type: text/vnd.tiddlywiki
|
||||
}
|
||||
}
|
||||
|
||||
.tc-grid-columns {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(25em, 1fr));
|
||||
gap: 1em;
|
||||
width: 100%; /* Ensures container stretches fully */
|
||||
}
|
||||
|
||||
.tc-grid-columns.tc-grid-columns-2 > div {
|
||||
border-radius: 1em;
|
||||
padding: 1em;
|
||||
background-color: <<colour alert-background>>;
|
||||
}
|
||||
|
||||
.tc-grid-columns.tc-grid-columns-2 > div:nth-child(odd) {
|
||||
color: <<colour diff-delete-foreground>>;
|
||||
background-color: <<colour diff-delete-background>>;
|
||||
}
|
||||
|
||||
|
||||
.tc-saving-sidebar-category { margin-bottom:10px; }
|
||||
.tc-saving-sidebar-category-title { margin-bottom:5px; font-weight:bold; }
|
||||
.tc-saving-sidebar-category-item { margin-left:10px; white-space:nowrap; }
|
||||
|
@ -1,6 +1,6 @@
|
||||
caption: testcase
|
||||
created: 20240507221902644
|
||||
modified: 20240507221902644
|
||||
modified: 20241113203728572
|
||||
tags: Widgets
|
||||
title: TestCaseWidget
|
||||
type: text/vnd.tiddlywiki
|
||||
@ -55,6 +55,7 @@ The content of the `<$testcase>` widget is not displayed but instead is scanned
|
||||
|<<.attr testExpectedResult>> |Optional title of the tiddler whose content is the expected result of rendering the output tiddler (note that both <<.attr testOutput>> and <<.attr testExpectedResult>> must be provided in order for testing to occur) |
|
||||
|<<.attr testActions>> |Optional title of the tiddler containing actions that should be executed before the test occurs |
|
||||
|<<.attr testHideIfPass>> |If set to "yes", hides the <<.wid testcase>> widget if the test passes |
|
||||
|<<.attr class>> |<<.from-version "5.3.7">> Optional CSS classes in addition to the default `tc-test-case` class |
|
||||
|
||||
! Payload Tiddlers
|
||||
|
||||
|
@ -0,0 +1,11 @@
|
||||
title: TiddlyWiki Node.js Privacy and Security
|
||||
tags: [[TiddlyWiki Privacy and Security]]
|
||||
|
||||
!!! Node.js Configuration
|
||||
|
||||
Using ~TiddlyWiki in the Node.js configuration requires more technical knowledge than the single file configuration. There are several important areas with respect to security and privacy.
|
||||
|
||||
* Most obviously, there is the matter of how user data is stored on disc as individual `.tid` files. Just as with the single file configuration, these are just ordinary files, and so can be used with third party tools that provide encryption.
|
||||
* Consideration must also be given to how data is transmitted across the network. By default, the Node.js configuration does not use SSL and so network traffic can be observed by others.
|
||||
** The impact of this is mitigated by the fact that, by default, only users on the same machine can connect to the server.
|
||||
** ~TiddlyWiki itself does offer the option of setting up an SSL connection. However, it is generally advised to use an external proxy server to provide SSL services. nginx is popular for this purpose.
|
@ -1,48 +1,55 @@
|
||||
title: TiddlyWiki Privacy and Security
|
||||
created: 20241106165307259
|
||||
modified: 20241106165307259
|
||||
modified: 20241117170845666
|
||||
title: TiddlyWiki Privacy and Security
|
||||
|
||||
<span class="tc-float-right">[img width=200 [TiddlyWiki Privacy Badge.png]]</span>
|
||||
TiddlyWiki is unique in that ordinary people without special training can use it securely and privately. It is easy to apply the advice from the EFF to ~TiddlyWiki. The key is that ~TiddlyWiki is just a file, and so everything that users may have already learned about how to keep documents and images private can be applied to ~TiddlyWiki.
|
||||
<span class="tc-float-right tc-bordered-image">[img width=200 [TiddlyWiki Privacy Badge.png]]</span>
|
||||
''TiddlyWiki is unique in that ordinary people can use it securely and privately without any special training.'' The key is that ~TiddlyWiki is just a text file, or a folder of files, so everything that you may already know about how to keep your documents and images private can be applied to ~TiddlyWiki. Also, because your ~TiddlyWiki data is stored in simple text files, you can be confident that it will still be securely accessible in the decades to come.
|
||||
|
||||
Because data is stored in simple text files, people choosing to use ~TiddlyWiki today can be confident that their data will still be accessible in the decades to come.
|
||||
!! ~TiddlyWiki Configurations
|
||||
|
||||
! Verifiable Trust
|
||||
~TiddlyWiki can be used in two main configurations:
|
||||
|
||||
An important aspect of ~TiddlyWiki's claims in the area of security and privacy is that these claims can be readily verified by anyone with basic technical skills. For example, the network monitoring tools built into browsers allow users to verify that ~TiddlyWiki doesn't send any data to other servers. Similarly anyone can open a ~TiddlyWiki HTML file in an editor and verify that their data is readily accessible.
|
||||
* As a single HTML file that contains all the data and code. This is the easiest setup, and the most widely supported.
|
||||
** Popular services like [[Tiddlyhost]] are based on the single file configuration
|
||||
** See [[Saving]] for a listing of all the different ways to save a single file ~TiddlyWiki
|
||||
* As a Node.js application that runs a web server. This configuration is more powerful, but requires more technical knowledge to set up and maintain. See:
|
||||
** [[Installing TiddlyWiki on Node.js]]
|
||||
** [[Using TiddlyWiki on Node.js]]
|
||||
|
||||
! Single File Configuration
|
||||
The security and privacy implications of the two configurations are different:
|
||||
|
||||
As a practical matter, using ~TiddlyWiki securely and privately in the single file configuration depends upon keeping that single file securely and privately.
|
||||
<div class="tc-grid-columns tc-grid-columns-2">
|
||||
|
||||
Users can employ the same tools that they use to keep any document and photograph secure. So, for many users, the simplest solution will be to use an existing file storage service such as Google Drive, Apple's iCloud, or Dropbox. Many users will already be relying on the privacy and security of these services.
|
||||
<div>
|
||||
|
||||
There are also open source alternatives such as [[Syncthing|https://syncthing.net/]] that allow users to synchronise files between their devices without using a third party service.
|
||||
{{TiddlyWiki Single File Privacy and Security}}
|
||||
|
||||
Users may wish to use additional layers of security. ~TiddlyWiki in the single file configuration itself offers built-in encryption. It uses an industry standard encryption library to offer AES 128 bit encryption in CCM mode. All the data within the file is encrypted, and cannot be accessed without entering the correct password. The password is never stored in the file, and so if it is lost, the data is lost. Instructions can be found in [[Encryption]].
|
||||
</div>
|
||||
|
||||
It is important to understand that ~TiddlyWiki's built in encryption is our best endeavour to offer privacy and usability. However, the encryption feature has not been subject to the kind of rigorous third party testing that characterises secure services like Signal or Syncthing.
|
||||
<div>
|
||||
|
||||
So, cautious users may wish to use ~TiddlyWiki's built in encryption as an extra layer of security, but should take care not to rely on it as one would rely on industry standard encryption solutions that have been rigorously tested in a variety of situations.
|
||||
{{TiddlyWiki Node.js Privacy and Security}}
|
||||
|
||||
! Node.js Configuration
|
||||
</div>
|
||||
|
||||
Using ~TiddlyWiki in the Node.js configuration requires more technical knowledge than the single file edition. There are several important areas with respect to security and privacy.
|
||||
</div>
|
||||
|
||||
Firstly, and most obviously, there is the matter of how user data is stored on disc as individual `.tid` files. Just as with the single file configuration, these are just ordinary files, and so can be used with third party tools that provide encryption.
|
||||
!! Verifiable Trust
|
||||
|
||||
Secondly, consideration must be given to how data is transmitted across the network. By default, the Node.js configuration does not use SSL and so traffic can be observed by others (the impact is mitigated by the fact that by default only users on the same machine can connect to the server). While ~TiddlyWiki itself does offer the option of setting up an SSL connection it is generally advised to use an external proxy server to provide SSL services. nginx is popular for this purpose.
|
||||
An important aspect of ~TiddlyWiki's security and privacy claims is that they can be readily confirmed by anyone with basic technical skills. For example, the network monitoring tools built into most browsers allow you to verify that ~TiddlyWiki doesn't send any data to other servers. Similarly, you can open a ~TiddlyWiki HTML file in an editor and verify that your data is readily accessible.
|
||||
|
||||
! Community Tools
|
||||
!! Community Tools
|
||||
|
||||
There are also third party tools from the community that extend ~TiddlyWiki's built in encryption:
|
||||
|
||||
* [["Encrypt single tiddler plugin" by Danielo Rodriguez]] allows individual tiddlers to be encrypted
|
||||
* [[TW5-CSEncryption|https://wiki.fspark.me/TW5-CSEncryption/]] offers client-side encryption for ~TiddlyWiki on Node.js
|
||||
|
||||
! Further Information
|
||||
!! Further Information
|
||||
|
||||
If security and privacy are important to you then you need to take the best available advice, and the best place for that is specialist organisations that focus on this area. The Electronic Frontier Foundation in the US is well respected, and their advice would be a good place to start. It emphasises basics such as dealing with passwords and two factor authentication, but also explains more advanced topics such as making a security plan, and how to set up a device securely.
|
||||
If security and privacy are important to you then you need to take the best available advice, and the best place for that is specialist organisations that focus on this area.
|
||||
|
||||
https://ssd.eff.org/module-categories/basics
|
||||
The [[Electronic Frontier Foundation (EFF)|https://eff.org]] in the US is well respected, and their advice would be a good place to start. It emphasises basics such as dealing with passwords and two factor authentication, but also explains more advanced topics such as making a security plan, and how to set up a device securely.
|
||||
|
||||
* https://ssd.eff.org/module-categories/basics
|
||||
* //Please suggest other useful privacy and security resources//
|
@ -0,0 +1,10 @@
|
||||
title: TiddlyWiki Single File Privacy and Security
|
||||
tags: [[TiddlyWiki Privacy and Security]]
|
||||
|
||||
!!! Single File Configuration
|
||||
|
||||
As a practical matter, using ~TiddlyWiki in the single file configuration depends upon keeping that file secure and private. You can employ the same tools that you use to keep your other documents and images secure. In most cases, the simplest solution will be to use an existing file storage service such as [[Google Drive|https://drive.google.com]], [[Apple's iCloud|https://www.icloud.com]], or [[Dropbox|https://www.dropbox.com]]. Many people already rely on the privacy and security of these services. There are also open source alternatives such as [[Syncthing|https://syncthing.net/]] that can allow you to synchronise files between your devices without using a third party service.
|
||||
|
||||
You may also wish to use additional layers of security. ~TiddlyWiki in the single file configuration offers built-in encryption using an industry standard encryption library to provide AES 128-bit encryption in CCM mode. All the data within the file is encrypted and cannot be accessed without entering the correct password. Your password is never stored in the file: if it is lost or forgotten, your data cannot be decrypted. Instructions can be found in [[Encryption]].
|
||||
|
||||
It is important to understand that ~TiddlyWiki's built in encryption is our best endeavour to offer privacy and usability. However, the encryption feature has not been subject to the kind of rigorous third party testing that characterises secure services like Signal or Syncthing. Cautious users may wish to use ~TiddlyWiki's built in encryption as an extra layer of security, but should take care not to rely on it as one would rely on industry standard encryption solutions that have been rigorously tested in a variety of situations.
|
@ -133,6 +133,7 @@ Excise/Caption/Replace/Transclusion: Transklusion
|
||||
Excise/Caption/Tag: Tagge den neuen Tiddler mit dem Titel des aktuellen Tiddlers
|
||||
Excise/Caption/TiddlerExists: Warnung: Tiddler existiert bereits!
|
||||
Excise/Hint: Verschiebe den ausgewählten Text in einen neuen Tiddler
|
||||
Excise/DefaultTitle: Neuen "Text Verschieben"
|
||||
Heading1/Caption: Überschrift 1
|
||||
Heading1/Hint: Überschrift 1 auf die Zeilen anwenden, die eine Auswahl enthalten
|
||||
Heading2/Caption: Überschrift 2
|
||||
|
@ -98,6 +98,10 @@ Plugins/Plugins/Hint: Erweiterungen
|
||||
Plugins/Reinstall/Caption: erneut installieren
|
||||
Plugins/Themes/Caption: Themes
|
||||
Plugins/Themes/Hint: Theme Erweiterungen
|
||||
Plugins/Stability/Deprecated: ABGEKÜNDIGT
|
||||
Plugins/Stability/Experimental: EXPERIMENTELL
|
||||
Plugins/Stability/Legacy: VERALTET
|
||||
Plugins/Stability/Stable: STABIL
|
||||
Plugins/Update/Caption: aktualisieren
|
||||
Plugins/Updates/Caption: Aktualisieren
|
||||
Plugins/Updates/Hint: Verfügbare Erweiterungen zu bereits installierten "Plugins"
|
||||
@ -171,6 +175,8 @@ Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description: Adressleiste
|
||||
Settings/PerformanceInstrumentation/Caption: Performance Messung
|
||||
Settings/PerformanceInstrumentation/Hint: Anzeige der Performance Statistik in der Browser Entwickler Konsole. ''Wichtig:'' Seite neu laden um die Einstellung zu aktivieren!
|
||||
Settings/PerformanceInstrumentation/Description: Aktiviere Performance Messung
|
||||
Settings/RecentLimit/Caption: Zuletzt Limit
|
||||
Settings/RecentLimit/Hint: Maximale Anzahl von angezeigten "Tiddlern" im "Zuletzt" Reiter
|
||||
Settings/ToolbarButtonStyle/Caption: Toolbar Button Stil
|
||||
Settings/ToolbarButtonStyle/Hint: Wählen Sie einen Stil:
|
||||
Settings/ToolbarButtonStyle/Styles/Borderless: Ohne Rand
|
||||
@ -198,6 +204,12 @@ Settings/TitleLinks/Yes/Description: Tiddler Titel als Link anzeigen.
|
||||
Settings/MissingLinks/Caption: Wiki-Links
|
||||
Settings/MissingLinks/Hint: Aktiviere Links zu fehlenden Tiddlern. zB: FehlenderTiddler [[Einführung]]
|
||||
Settings/MissingLinks/Description: Aktiviere Links zu fehlenden Tiddlern.
|
||||
SocialCard/Caption: Social Media Karte
|
||||
SocialCard/Domain/Prompt: Domain Name für Link Anzeige. Zb: ''tiddlywiki.com''
|
||||
SocialCard/Hint: Diese Information wird verwendet, wenn eine "Voransicht" eines Links angezeigt werden soll
|
||||
SocialCard/PreviewUrl/Prompt: Vollständige URL für die Media-Vorschau für dieses ~TiddlyWiki
|
||||
SocialCard/PreviewUrl/Preview: Vorschau Bild:
|
||||
SocialCard/Url/Prompt: Vollständige URL für dieses ~TiddlyWiki
|
||||
StoryTiddler/Caption: Story Tiddler
|
||||
StoryTiddler/Hint: Diese Filter-Kaskade wird verwendet, um die Vorlage für den Tiddler im "Story River" auszuwählen.
|
||||
StoryView/Caption: Anzeige
|
||||
|
@ -26,6 +26,8 @@ Tags/ClearInput/Caption: lösche Eingabefeld
|
||||
Tags/ClearInput/Hint: Lösche Tag Eingabefeld
|
||||
Tags/Dropdown/Caption: Tag Liste
|
||||
Tags/Dropdown/Hint: Tag Liste anzeigen
|
||||
Tags/EmptyMessage: Kein Tag gefunden
|
||||
Tags/EmptyMessage/System: Kein System Tag gefunden
|
||||
Title/BadCharacterWarning: Warnung: Folgende Zeichen im Titel können zu Problemen führen: <<bad-chars>>
|
||||
Title/Exists/Prompt: Tiddler Name existiert bereits
|
||||
Title/Relink/Prompt: Ändere ''<$text text=<<fromTitle>>/>'' -> ''<$text text=<<toTitle>>/>'' in //tags// und //list// Feld aller anderen Tiddler
|
||||
|
@ -6,6 +6,8 @@ Filter/Hint: Suche mit [["filter expression"|https://tiddlywiki.com/static/Filte
|
||||
Filter/Matches: //<small><<resultCount>> Treffer</small>//
|
||||
Matches: //<small><<resultCount>> Treffer</small>//
|
||||
Matches/All: Alle Treffer:
|
||||
Matches/NoMatch: //Kein Treffer//
|
||||
Matches/NoResult: //Kein Suchergebnis//
|
||||
Matches/Title: Titel Treffer:
|
||||
Search: Suchen
|
||||
Search/TooShort: Suchtext ist zu kurz
|
||||
@ -14,7 +16,7 @@ Shadows/Hint: Suche in Schatten-Tiddlern.
|
||||
Shadows/Matches: //<small><<resultCount>> Treffer</small>//
|
||||
Standard/Caption: Standard
|
||||
Standard/Hint: Suche in Standard-Tiddlern.
|
||||
Standard/Matches: //<small><<resultCount>> matches</small>//
|
||||
Standard/Matches: //<small><<resultCount>> Treffer</small>//
|
||||
System/Caption: System
|
||||
System/Hint: Suche in System-Tiddlern.
|
||||
System/Matches: //<small><<resultCount>> Treffer</small>//
|
@ -98,4 +98,22 @@ When [[typographer|$:/config/markdown/typographer]] is enabled, markdown-it will
|
||||
,, → ,
|
||||
-- → –
|
||||
--- → —
|
||||
```
|
||||
```
|
||||
|
||||
! Making Markdown the Default in TiddlyWiki
|
||||
|
||||
!! Modifying Existing Actions
|
||||
|
||||
Adding `type="text/markdown"` to the actions of the following buttons will
|
||||
override the default behavior.
|
||||
|
||||
* New Journal - $:/core/ui/Actions/new-journal
|
||||
* New Tiddler Here - $:/core/ui/Buttons/new-here
|
||||
* New Tiddler - $:/core/ui/Actions/new-tiddler
|
||||
|
||||
!! Using Markdown for Missing Links
|
||||
|
||||
By default, missing tiddlers are created with a blank content type, which
|
||||
implies WikiText. Setting [[$:/config/DefaultMissingType]] to `text/markdown`
|
||||
will make it so that tiddlers created from a missing tiddler link will be in
|
||||
Markdown rather than in WikiText.
|
||||
|
Loading…
Reference in New Issue
Block a user