Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
<<importTiddlers>>
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<!--{{{-->
<div class='header' role='banner' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' role='navigation' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' role='navigation' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' role='complementary' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea' role='main'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected {color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:alpha(opacity=60);}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0; top:0;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0 3px 0 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0; padding-bottom:0;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='toolbar' role='navigation' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
You can now also escape modifiers using a double backslash {{{ \\ }}}, e.g.
{{{
*\\*Escape
}}}
The answer to the universe and all that...
If you want all tiddlers to be auto-linkified, use the corresponding [[setting|Settings]] for your [[zzConfig]] -- the function {{{linkifyTiddlers(true);}}} is now deprecated.

''Note:'' In case you have additional terms that you want to linkify, you need to create an entry in LinkifyConfig.
A European country in the biggest European mountain range, the Alps, with the international shorthand of AT.
This term has been coined for automagically turning text into tiddlyLinks without you being required to add special markup in order to turn something into an internal link. The TiddlyWiki core provides basic support for autoweaving via a formatter that recognizes CamelCase.
Using the prefix tilde {{{ ~}}} with the target tiddler, it will __not__ be linkified itself. However, any term linkifying to it will be, e.g:
{{{
~Bla Bla Bla|any text
}}}
Meaning, __ bla bla bla__ will not be linkified, whereas __ any text__ will be.
Bracketed lists are somewhat flexible definition lists for tiddlers that are most frequently used to define macro parameters. A bracketed list can contain references to tiddlers in any of the following ways...
{{{
[[Simple]]
[[Links]]

[[None]] [[One]] [[Or More]] [[Per Line]]

[[All Blanks Being Ignored]]


[[In Double Square Brackets]]		"Double Quotes"		'Or Single Quotes'


CamelCase [[And Also...]] [[Any Single Tiddler]] Name
}}}
A single word that contains (at least) two majuscules, hence visually following the outline of a camels' back. TiddlyWiki automagically turns this into an internal tiddlyLink.
A term to be linkified must start with a letter and end with one.
*In between these letters, anything is allowed, in other words this... <^°§$%&()?#+*> ;-) ...is allowed too.
A readable, commented version of LinkifyPlugin can be found on an downloaded from Github...
https://github.com/tobibeer/TiddlyWikiPlugins/blob/master/plugins/LinkifyPlugin.js
Any line in LinkifyConfig that starts with a blank or an exclamation mark {{{(!)}}} is ignored from being indexed and can be considered a comment:
{{{
!!You can use headings in LinkifyConfig 
 or lines starting with a blank space
}}}
If you want to match any of configure, configured, configuring, configuration, configurations, etc. -- use the wildcard {{{*}}} as a prefix or suffix along with the common word root, e.g.:
{{{
*Term*
}}}
The above matches all of term, terms and unterm while linking to the tiddler called [[Term]].
You have a number of options when defining a line item in your LinkifyConfig.
!The Linkified Tiddler
The __ first term__ represents both: 1) the actual tiddler being linked to and 2) a term to be linkified.
*Case sensitivity must be respected in order to link to the right tiddler.
*Otherwise, all linkified terms following the first pie {{{(|)}}} are matched in a __case-insensitive__ manner.
{{{
Configuration Details
}}}
!Linkified Terms
Individual terms linkifying to the same tiddler are separated using the pipe {{{ | }}} character.
*<<tiddler Characters>>
*If you want to linkify multiple words at once, be sure to list them before any of their single word counter-parts.
**In other words, linkify this must come before linkify in the corresponding config line in LinkifyConfig.
{{{
LinkifyPlugin|linkify this|^linkif*|^auto-link*
}}}
!Configuration Order
The order of terms __is relevant__ with respect to both: config lines and terms per line.
!Using Modifiers
<<tiddler Modifiers>>
!Linkifying All Tiddlers
<<tiddler "All Tiddlers">>
!Not Yet Existing Tiddlers
Of course, links that don't exist yet are displayed italic like other non-existing tiddlyLinks.
I like this smiley for expressing that I am confused, stumped or incredulous about something...
o.O
O.o
You can easily linkify contacts, for example...
{{{
Eric Shulmann|^"TiddlyTools"|Eric|"ES"|ELS|
}}}
...will linkify all of:
*Eric Shulmann
*Eric
*ELS or els
*ES
*TiddlyTools
...while preventing...
* es
* tiddlytools
[[Home]]
This is just a dummy to which some autolinked words linkify to.
The mastermind behind tons of TiddlyWiki plugins -- check out his site [[TiddlyTools|http://tiddlytools.com]].
To exclude text from being linkified, prefix a line in LinkifyConfig with a dash {{{(-)}}} followed by a list of tags given in the form a bracketed list whereas linkification will not be applied when rendering all tiddlers tagging to these tags and the tags themselvers.

The following tags are excluded per default...
{{{
-excludeLists systemConfig noLinkify
}}}
You can override this in your custom LinkifyConfig.

Alternatively you could write...
{{{
-excludeLists
-systemConfig
-noLinkify
}}}
...or even...
{{{
-[[excludeLists]] "systemConfig" 'noLinkify' "some title with blanks" [[My Tiddler]]
}}}
Formatters are TiddlyWiki core constructs that handle how your content is being rendered ...or - as we say - how it is "wikified".

For example, there are formatters for headers, tables and lists.

The basic idea behind linkification is that -- for each linkified term defined via LinkifyConfig -- a formatter is appended to the formatters array thus rendering these terms as tiddlyLinks without any special {{{[[markup|TiddlyLink Markup]]}}}.
These smileys express happiness...
 :)
 :-)
 :o)
&nbsp;
With {{title{LinkifyPlugin}}} you can automagically turn any text into tiddlyLinks.
For example, this word is actually written as {{{this word}}} in this tiddlers' text and not as {{{[[this word|Word]]}}}.
{{box{
<<tiddler Home##USAGE>>
}}}{{box{
<<tiddler Home##SETUP>>
}}}{{box{
<<tiddler Home##PLUGIN>>
}}}
/%
!USAGE
LinkifyPlugin can be handy for...

 » autoweaving or autolinking tiddlers
 » managing a dictionary of...
 &nbsp;&nbsp;&nbsp;» abbreviations, e.g. BBC and KIVA
 &nbsp;&nbsp;&nbsp;» contacts, e.g. Tobias
 &nbsp;&nbsp;&nbsp;» [[proper names|http://en.wikipedia.org/wiki/Proper_noun]]
 &nbsp;&nbsp;&nbsp;» even smileys...
!SETUP
''Setup:''

 » Settings
 » {{linkified{[[LinkifyConfig...]]}}}
 » Configuration
 » Exclusion
 » Styles
!PLUGIN
''~LinkifyPlugin:''

 » The Concept
 » Commented Source Code
 » Version History
 » Limitations
 » Open Topics

!END%/
input output putput
But now it's time to laugh again...
XD
8D
While no problems have been reported, LinkifyPlugin might slow down a TiddlyWiki...
* containing huge collections of tiddlers
* with collections of huge tiddlers
* when using a great number of linkification definitions
If you want a term to be matched exactly as is -- for instance zoOM but not Zoom -- you need to enclose the term in double quotes {{{ " }}}
{{{
Linkify As Is|"zoOM"
}}}
This is especially important for short abbreviations, such as AT for Austria which definetely should not linkify the word __at__.
!Exclude
-excludeLists
-noLinkify
-systemConfig
!Linkify
42
Austria*|"AT"
Autoweaving|autoweav*|automag*|autolink*
~Bla Bla Bla|any text
Bracketed List|bracketed lists
Characters|character*|this... <^°§$%&()?#+*> ;-) ...is allowed too
Code|commented source code|source code|source*|code
Comments|comment*
Common Word Roots|common word root
^LinkifyConfig...|config line*|configuration line|terms per line|line item*
Configuration|configuration detail*|config*
Contacts|contact*
Eric Shulmann|^"TiddlyTools"|Eric|"ES"|ELS|
Exclusion|exclud*
Formatter*|the concept|linkification formatter*
IO|*put*
LinkifyPlugin|linkify this|linkif*|auto-link*|addFormatter|sanitize
Linkify As Is|"zoOM"|as is|abbreviations|bbc|kiva
Modifiers|using modifiers|^modifier|prefix*|suffix*
Non-Existing|non-existing tiddlyLinks|links that don't exist yet
Non-WikiLink|non-wikilinks
RegEx*|regular expression*
saveTiddler
Styles|styl*
Term*|first term|unterm
^TiddlyWiki*
Tiddler*|tiddlers 101
TiddlyLink*
^WikiLink*
Wildcard*
Word*|multiple words|this word
!Smileys
Happy*|Happi*|([\:][\-o]{0,1}[\)])
Sad*|([\:][\-o]{0,1}[(])
Really Happy|([\:][\-]{0,1}[\D])
Confused|o.O|O.o
Laughing|Laugh*|XD|8D
LinkifyConfig allows you to define the terms to be linkified and of course the tiddlers to which they link.

Each line defines...
*above all, a tiddler title being automagically linkified
*any further terms linking to this tiddler separated via the pipe {{{ | }}} character
Here an example configuration line...
{{{
LinkifyPlugin|linkif*
}}}
Any changes to LinkifyConfig are immediately applied.

There are a number of configuration options for line items, [[see here...|Configuration]]
/***
|''Macro''|LinkifyPlugin|
|''Description''|Automatically turns text into links, optionally using aliases<br>The plugin idea is based on Clint Checketts and Paul Petterson's [[RedirectMacro|http://checkettsweb.com/styles/themes.htm#RedirectMacro]]|
|''Documentation''|http://linkify.tiddlyspot.com|
|''Author''|Tobias Beer|
|''Version''|1.1.1 (2013-10-02)|
|''CoreVersion''|2.5.2|
|''Source''|https://raw.github.com/tobibeer/TiddlyWikiPlugins/master/plugins/LinkifyPlugin.min.js|
|''Usage''|define redirects in LinkifyConfig|
/%***/
(function(e){config.shadowTiddlers.LinkifyConfig="!Exclude\n-excludeLists systemConfig noLinkify\n!Linkify\nLinkifyPlugin|^linkif\n^Tiddler";var t=config.extensions.linkify={defaults:{linkifyAllTiddlers:true,doNotLinkifyInside:"h1,h2,h3,h4,h5,h6,.header,.noLinkify",doNotLinkifySameTiddler:true},linkified:[],excluded:[],handler:function(n){var r,i,s=e(n.output).closest(t.defaults.doNotLinkifyInside).length>0,o=story.findContainingTiddler(n.output);o=o?o.getAttribute("tiddler"):"";s=s||t.defaults.doNotLinkifySameTiddler&&o==this.target;r=o.indexOf("##");if(r<0)r=o.indexOf("::");if(r>0)o=o.substr(0,r);i=n.source.substr(n.matchStart,1)==config.textPrimitives.unWikiLink;if(s||i||o&&t.excluded.contains(o)){n.outputText(n.output,n.matchStart+(i?1:0),n.nextMatch)}else{n.outputText(createTiddlyLink(createTiddlyElement(n.output,"span",null,"linkified"),this.target,false),n.matchStart,n.nextMatch)}},addFormatter:function(e,n,r,i,s){var o,u,a=0,f,l,c,h,p,d,v,m,g=config.formatters,y=e.substr(0,1);if(e.substr(e.length-1,1)=="*"){m=true;e=e.substr(0,e.length-1)}e:while(!o&&['"',"~","^","*","("].contains(y)){switch(y){case"~":if(i)return false;case"^":d=true;break;case'"':o=e.substr(e.length-1,1)=='"';if(o)e=e.substr(0,e.length-1);else break e;break;case"(":v=e.substr(e.length-1,1)==")";if(v)e=e.substr(0,e.length-1);else break e;break;case"*":p=true}e=e.substr(1);y=e.substr(0,1)}if(!v)e=e.replace(/\\/mg,"");l="linkify_"+e.replace(/([\W])/mg,function(e){return e.charCodeAt(0)});if(s){c="linkify_"+s.replace(/([\W])/mg,function(e){return e.charCodeAt(0)})}while(a<g.length){u=u||g[a].name==l;if(s&&g[a].name==c){g.splice(a,1)}else a++}if(u||r||!e)return false;h=config.textPrimitives.unWikiLink+"?"+(v?"(?:%2)":"(?:\\b%0%2%1\\b)").format([p?"[\\w]*":"",m?"[\\w]*":"",v?e:e.escapeRegExp().replace(/([a-z]|[A-Z])/img,function(e){return"["+(o?e:/[\W]/mg.exec(e)?"'"+e:e.toUpperCase()+e.toLowerCase())+"]"}).replace(/[\s]/mg,"[\\s]")]);f={name:l,match:h,target:n,handler:t.handler};if(d)g.unshift(f);else g.push(f);return true},indexConfig:function(){var e,n,r,i,s,o,u,a,f,l,c,h,p=config.formatters,d=function(e){e=e.replace(/^(\'|\*|\^|\~|\()+/mg,"");return e.replace(/(\*|\))+?/mg,"")};t.linkified=[];u=store.getTiddlerText("LinkifyConfig")||store.getShadowTiddlerText("LinkifyConfig");u=u?u.split("\n"):[];for(var v=0;v<p.length;v++){if(p[v].name.indexOf("linkify_")==0){p.splice(v,1);v--}}for(s=0;s<u.length;s++){if(!u[s]||[" ","!"].contains(u[s][0]))continue;o=u[s].split("|");l=d(o[0]);n=0;t.linkified.pushUnique(l);for(e=1;e<o.length;e++){a=d(o[e]);if(a.toLowerCase().indexOf(l.toLowerCase())==0){h=o[e];o[e]=o[n];o[n]=h;n=e}}for(e=0;e<o.length;e++)t.addFormatter(o[e],l,false,e==n)}if(t.defaults.linkifyAllTiddlers){c=store.getTiddlers();for(f=0;f<c.length;f++){l=c[f].title;t.addFormatter(l,l,t.excluded.contains(l)||t.linkified.contains(l))}}},indexExcludes:function(){var e,n="",r,i,i=store.getTiddlerText("LinkifyConfig")||store.getShadowTiddlerText("LinkifyConfig");t.excluded=[];i=i?i.split("\n"):[];for(r=0;r<i.length;r++)if(i[r].indexOf("-")==0)n+=i[r].substr(1,i[r].length-1)+" ";n=n.readBracketedList();n.map(function(e){t.excluded.pushUnique(e)});for(e=0;e<n.length;e++)store.getTaggedTiddlers(n[e]).map(function(e){t.excluded.pushUnique(e.title)})},init:function(){this.indexConfig();this.indexExcludes();formatter=new Formatter(config.formatters)}};config.extensions.linkify.init();window.linkifyTiddlers=function(){};TiddlyWiki.prototype.saveTiddlerLINKIFY=TiddlyWiki.prototype.saveTiddler;TiddlyWiki.prototype.saveTiddler=function(n,r,i,s,o,u,a,f,l,c){var h=[],p=store.saveTiddlerLINKIFY.apply(this,arguments),d=r;t.addFormatter(d,d,t.excluded.contains(d)||t.linkified.contains(d),true,d!=n?n:null);if(n=="LinkifyConfig"||r=="LinkifyConfig"){t.indexConfig()}t.indexExcludes();formatter=new Formatter(config.formatters);if(d!=n){e("[tiddler]",e("[content]")).each(function(){var t=e(this),i=t.text()||"",s=t.attr(tiddler)|"";if(i.indexOf(r)>-1||i.indexOf(n)>-1){if(s)h.pushUnique(s)}});e("a[tag], a[tiddlyLink]").each(function(){var t,i=e(this),s=i.attr("tiddlyLink");s=s?s:i.attr("tag");if(s==n||s==r){t=e(this).closest(".tiddler").attr("tiddler");if(t)h.pushUnique(t)}});h.map(function(e){story.refreshTiddler(e,null,true)})}return p};store.removeTiddler_Linkify=store.removeTiddler;store.removeTiddler=function(e){var t=store.removeTiddler_Linkify.apply(this,arguments);config.extensions.linkify.addFormatter("*",null,null,null,e);formatter=new Formatter(config.formatters);story.refreshAllTiddlers(true);return t};config.shadowTiddlers.StyleSheetLinkify="/*{{{*/\n"+".linkified .tiddlyLink{color:[[ColorPalette::PrimaryMid]];font-weight:normal;}\n"+".linkified .tiddlyLink:hover{color:[[ColorPalette::PrimaryLight]];background:transparent;}\n"+".headerShadow .linkified .tiddlyLink {color:transparent !important;}\n"+".siteSubtitle .linkified .tiddlyLink{color:[[ColorPalette::PrimaryPale]];background:transparent;}\n"+".siteSubtitle .linkified .tiddlyLink:hover{color:[[ColorPalette::Background]];background:transparent;}\n"+"dt .linkified .tiddlyLink{font-weight:bold;}\n"+"/*}}}*/";store.addNotification("StyleSheetLinkify",refreshStyles)})(jQuery)
//%/
/***
|''Name:''|LoadRemoteFileThroughProxy (previous LoadRemoteFileHijack)|
|''Description:''|When the TiddlyWiki file is located on the web (view over http) the content of [[SiteProxy]] tiddler is added in front of the file url. If [[SiteProxy]] does not exist "/proxy/" is added. |
|''Version:''|1.1.0|
|''Date:''|mar 17, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#LoadRemoteFileHijack|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
***/
//{{{
version.extensions.LoadRemoteFileThroughProxy = {
 major: 1, minor: 1, revision: 0, 
 date: new Date("mar 17, 2007"), 
 source: "http://tiddlywiki.bidix.info/#LoadRemoteFileThroughProxy"};

if (!window.bidix) window.bidix = {}; // bidix namespace
if (!bidix.core) bidix.core = {};

bidix.core.loadRemoteFile = loadRemoteFile;
loadRemoteFile = function(url,callback,params)
{
 if ((document.location.toString().substr(0,4) == "http") && (url.substr(0,4) == "http")){ 
 url = store.getTiddlerText("SiteProxy", "/proxy/") + url;
 }
 return bidix.core.loadRemoteFile(url,callback,params);
}
//}}}
[[Home]]
[[Configuration]]
[[Source Code|Code]]

[[Contact Me|http://tobibeer.tiddlyspace.com/#Contact]]
You can use the following modifiers...

''A)'' <<tiddler WikiLink>>
''B)'' <<tiddler "Bla Bla Bla">>

''C)'' <<tiddler "Linkify As Is">>

''D)'' <<tiddler "Common Word Roots">>

''E)'' <<tiddler Comments>>
''F)'' <<tiddler RegEx>>
Wikilinks are linkes created from CamelCase words or via {{{[[Some Tiddler]]}}}.
Any other word that does not constitute markup can be considered a non-wikilink.
See [[github.com/tobibeer/TiddlyWikiPlugins/...|https://github.com/tobibeer/TiddlyWikiPlugins/issues?labels=LinkifyPlugin&state=open]]
!Further plugins / dependencies / addons...
;Renaming Tiddlers
:Provide a wizard for renaming tiddlers incorporating [[RenameTagsPlugin|http://mptw.tiddlyspot.com/#RenameTagsPlugin ]] where one selects from all references / linkifications / {{{<<tiddler macro>>}}} in TW that are to be updated as well.
;Profiler
:A wikification profiler could indicate how long wikification takes for individual tiddlers so that one could eventually exclude them via a ''noLinkify'' tag in case they don't even contain linkified or are dynamically aggregated via the {{{<<tiddler>>}}} macro or fET.
/***
|''Name:''|PasswordOptionPlugin|
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Version:''|1.0.2|
|''Date:''|Apr 19, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.PasswordOptionPlugin = {
	major: 1, minor: 0, revision: 2, 
	date: new Date("Apr 19, 2007"),
	source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
	coreVersion: '2.2.0 (Beta 5)'
};

config.macros.option.passwordCheckboxLabel = "Save this password on this computer";
config.macros.option.passwordInputType = "password"; // password | text
setStylesheet(".pasOptionInput {width: 11em;}\n","passwordInputTypeStyle");

merge(config.macros.option.types, {
	'pas': {
		elementType: "input",
		valueField: "value",
		eventName: "onkeyup",
		className: "pasOptionInput",
		typeValue: config.macros.option.passwordInputType,
		create: function(place,type,opt,className,desc) {
			// password field
			config.macros.option.genericCreate(place,'pas',opt,className,desc);
			// checkbox linked with this password "save this password on this computer"
			config.macros.option.genericCreate(place,'chk','chk'+opt,className,desc);			
			// text savePasswordCheckboxLabel
			place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));
		},
		onChange: config.macros.option.genericOnChange
	}
});

merge(config.optionHandlers['chk'], {
	get: function(name) {
		// is there an option linked with this chk ?
		var opt = name.substr(3);
		if (config.options[opt]) 
			saveOptionCookie(opt);
		return config.options[name] ? "true" : "false";
	}
});

merge(config.optionHandlers, {
	'pas': {
 		get: function(name) {
			if (config.options["chk"+name]) {
				return encodeCookie(config.options[name].toString());
			} else {
				return "";
			}
		},
		set: function(name,value) {config.options[name] = decodeCookie(value);}
	}
});

// need to reload options to load passwordOptions
loadOptionsCookie();

/*
if (!config.options['pasPassword'])
	config.options['pasPassword'] = '';

merge(config.optionsDesc,{
		pasPassword: "Test password"
	});
*/
//}}}
Now this smiley tells me you're really happy...
 :-D
 :D
Be sure to know what you're doing when making use of regular expressions as terms. There's quite some potential that overuse will slow things down considerably. However, if you want to or must, you can enclose a term in parentheses {{{ (term) }}} and it will be evaluated as a regular expression. Currently, you cannot use the pipe {{{ | }}} character inside a regex term since that obviously is used to separate terms.
{{{
Really Happy|([\:][\-\o]?[\D])
}}}
This linkifies either of :-D or :D in order to express that you're really happy.
These smileys express sadness...
 :(
 :-(
 :o(
Some settings under {{{config.extensions.linkify.defaults}}} can be defined using a [[zzConfig]] (see [[TiddlyWiki.org|http://tiddlywiki.org/#%5B%5BChanging%20Default%20Options%5D%5D]])
|!Setting|!Description|!Type|!Default|h
|{{{linkifyAllTiddlers}}}|whether or not to automatically link all words that match existing tiddler titles|boolean|{{{true}}}|
|{{{doNotLinkifyInside}}}|when text matches but is to be rendered inside these css selectors, it will not be linkified|string|{{{'h1,h2,h3,h4,h5,h6,.header,.noLinkify'}}}|
|{{{doNotLinkifySameTiddler}}}|whether or not to linkify to the currently displayed tiddler|boolean|{{{true}}}|
You can set them using the merge function and your zzConfig as follows:
//{{{
merge(config.extensions.linkify.defaults,{
    linkifyAllTiddlers: true,
    doNotLinkifyInside: 'h1,h2,h3,h4,h5,h6,.header,.noLinkify,#sidebar',
    doNotLinkifySameTiddler: false
});
//}}}

Read more on configuration using [[LinkifyConfig...]]...
automagically link text to tiddlers...
[[Linkify|Home]]
<<tiddler "Really Happy">>

<<tiddler Happy>>

<<tiddler Confused>>

<<tiddler Sad>>

<<tiddler Laughing>>
/*{{{*/
#displayArea {
    margin-bottom: 3em;
}
.box{
    display:block;
    float:left;
    margin:2em 4em 0 0;
}

/*}}}*/
Any word that is turned into a tiddlyLink by LinkifyPlugin is wrapped in a css class called "linkified".
If you want to change the styles applied to linkified tiddlyLinks, modify and overwrite the [[CSS|http://www.w3schools.com/css/default.asp]] in StyleSheetLinkify to your liking.
A term is something you want to linkify. In LinkifyConfig terms are separated from the tiddler being linkified with a pipe {{{ | }}} character.
A tiddler is the basic storage unit for content in the TiddlyVerse. Think of it as a page in a book or a page in a website.
A link from one tiddler to another.
There is no answer to it other than 42.
The thing that makes this stuff tick.
http://tobibeer.tiddlyspace.com
/***
Description: Contains the stuff you need to use Tiddlyspot
Note, you also need UploadPlugin, PasswordOptionPlugin and LoadRemoteFileThroughProxy
from http://tiddlywiki.bidix.info for a complete working Tiddlyspot site.
***/
//{{{

// edit this if you are migrating sites or retrofitting an existing TW
config.tiddlyspotSiteId = 'linkify';

// make it so you can by default see edit controls via http
config.options.chkHttpReadOnly = false;
window.readOnly = false; // make sure of it (for tw 2.2)
window.showBackstage = true; // show backstage too

// disable autosave in d3
if (window.location.protocol != "file:")
	config.options.chkGTDLazyAutoSave = false;

// tweak shadow tiddlers to add upload button, password entry box etc
with (config.shadowTiddlers) {
	SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';
	SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");
	OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");
	DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[WelcomeToTiddlyspot]] ");
	MainMenu = MainMenu.replace(/^/,"[[WelcomeToTiddlyspot]] ");
}

// create some shadow tiddler content
merge(config.shadowTiddlers,{

'TspotOptions':[
 "tiddlyspot password:",
 "<<option pasUploadPassword>>",
 ""
].join("\n"),

'TspotControls':[
 "| tiddlyspot password:|<<option pasUploadPassword>>|",
 "| site management:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<br>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|",
 "| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[blog|http://tiddlyspot.blogspot.com/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|"
].join("\n"),

'WelcomeToTiddlyspot':[
 "This document is a ~TiddlyWiki from tiddlyspot.com.  A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below.  Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",
 "<<tiddler TspotControls>>",
 "See also GettingStarted.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the \"save to web\" button in the column on the right.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick.  You can make changes and save them locally without being connected to the Internet.  When you're ready to sync up again, just click \"upload\" and your ~TiddlyWiki will be saved back to tiddlyspot.com.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]].  Also visit [[TiddlyWiki.org|http://tiddlywiki.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help.  If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site.  Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions."
].join("\n"),

'TspotSidebar':[
 "<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>"
].join("\n")

});
//}}}
/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.3|
|''Date:''|Feb 24, 2008|
|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|
|''Documentation:''|http://tiddlywiki.bidix.info/#UploadPluginDoc|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
	major: 4, minor: 1, revision: 3,
	date: new Date("Feb 24, 2008"),
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0'
};

//
// Environment
//

if (!window.bidix) window.bidix = {}; // bidix namespace
bidix.debugMode = false;	// true to activate both in Plugin and UploadService
	
//
// Upload Macro
//

config.macros.upload = {
// default values
	defaultBackupDir: '',	//no backup
	defaultStoreScript: "store.php",
	defaultToFilename: "index.html",
	defaultUploadDir: ".",
	authenticateUser: true	// UploadService Authenticate User
};
	
config.macros.upload.label = {
	promptOption: "Save and Upload this TiddlyWiki with UploadOptions",
	promptParamMacro: "Save and Upload this TiddlyWiki in %0",
	saveLabel: "save to web", 
	saveToDisk: "save to disk",
	uploadLabel: "upload"	
};

config.macros.upload.messages = {
	noStoreUrl: "No store URL in parmeters or options",
	usernameOrPasswordMissing: "Username or password missing"
};

config.macros.upload.handler = function(place,macroName,params) {
	if (readOnly)
		return;
	var label;
	if (document.location.toString().substr(0,4) == "http") 
		label = this.label.saveLabel;
	else
		label = this.label.uploadLabel;
	var prompt;
	if (params[0]) {
		prompt = this.label.promptParamMacro.toString().format([this.destFile(params[0], 
			(params[1] ? params[1]:bidix.basename(window.location.toString())), params[3])]);
	} else {
		prompt = this.label.promptOption;
	}
	createTiddlyButton(place, label, prompt, function() {config.macros.upload.action(params);}, null, null, this.accessKey);
};

config.macros.upload.action = function(params)
{
		// for missing macro parameter set value from options
		if (!params) params = {};
		var storeUrl = params[0] ? params[0] : config.options.txtUploadStoreUrl;
		var toFilename = params[1] ? params[1] : config.options.txtUploadFilename;
		var backupDir = params[2] ? params[2] : config.options.txtUploadBackupDir;
		var uploadDir = params[3] ? params[3] : config.options.txtUploadDir;
		var username = params[4] ? params[4] : config.options.txtUploadUserName;
		var password = config.options.pasUploadPassword; // for security reason no password as macro parameter	
		// for still missing parameter set default value
		if ((!storeUrl) && (document.location.toString().substr(0,4) == "http")) 
			storeUrl = bidix.dirname(document.location.toString())+'/'+config.macros.upload.defaultStoreScript;
		if (storeUrl.substr(0,4) != "http")
			storeUrl = bidix.dirname(document.location.toString()) +'/'+ storeUrl;
		if (!toFilename)
			toFilename = bidix.basename(window.location.toString());
		if (!toFilename)
			toFilename = config.macros.upload.defaultToFilename;
		if (!uploadDir)
			uploadDir = config.macros.upload.defaultUploadDir;
		if (!backupDir)
			backupDir = config.macros.upload.defaultBackupDir;
		// report error if still missing
		if (!storeUrl) {
			alert(config.macros.upload.messages.noStoreUrl);
			clearMessage();
			return false;
		}
		if (config.macros.upload.authenticateUser && (!username || !password)) {
			alert(config.macros.upload.messages.usernameOrPasswordMissing);
			clearMessage();
			return false;
		}
		bidix.upload.uploadChanges(false,null,storeUrl, toFilename, uploadDir, backupDir, username, password); 
		return false; 
};

config.macros.upload.destFile = function(storeUrl, toFilename, uploadDir) 
{
	if (!storeUrl)
		return null;
		var dest = bidix.dirname(storeUrl);
		if (uploadDir && uploadDir != '.')
			dest = dest + '/' + uploadDir;
		dest = dest + '/' + toFilename;
	return dest;
};

//
// uploadOptions Macro
//

config.macros.uploadOptions = {
	handler: function(place,macroName,params) {
		var wizard = new Wizard();
		wizard.createWizard(place,this.wizardTitle);
		wizard.addStep(this.step1Title,this.step1Html);
		var markList = wizard.getElement("markList");
		var listWrapper = document.createElement("div");
		markList.parentNode.insertBefore(listWrapper,markList);
		wizard.setValue("listWrapper",listWrapper);
		this.refreshOptions(listWrapper,false);
		var uploadCaption;
		if (document.location.toString().substr(0,4) == "http") 
			uploadCaption = config.macros.upload.label.saveLabel;
		else
			uploadCaption = config.macros.upload.label.uploadLabel;
		
		wizard.setButtons([
				{caption: uploadCaption, tooltip: config.macros.upload.label.promptOption, 
					onClick: config.macros.upload.action},
				{caption: this.cancelButton, tooltip: this.cancelButtonPrompt, onClick: this.onCancel}
				
			]);
	},
	options: [
		"txtUploadUserName",
		"pasUploadPassword",
		"txtUploadStoreUrl",
		"txtUploadDir",
		"txtUploadFilename",
		"txtUploadBackupDir",
		"chkUploadLog",
		"txtUploadLogMaxLine"		
	],
	refreshOptions: function(listWrapper) {
		var opts = [];
		for(i=0; i<this.options.length; i++) {
			var opt = {};
			opts.push();
			opt.option = "";
			n = this.options[i];
			opt.name = n;
			opt.lowlight = !config.optionsDesc[n];
			opt.description = opt.lowlight ? this.unknownDescription : config.optionsDesc[n];
			opts.push(opt);
		}
		var listview = ListView.create(listWrapper,opts,this.listViewTemplate);
		for(n=0; n<opts.length; n++) {
			var type = opts[n].name.substr(0,3);
			var h = config.macros.option.types[type];
			if (h && h.create) {
				h.create(opts[n].colElements['option'],type,opts[n].name,opts[n].name,"no");
			}
		}
		
	},
	onCancel: function(e)
	{
		backstage.switchTab(null);
		return false;
	},
	
	wizardTitle: "Upload with options",
	step1Title: "These options are saved in cookies in your browser",
	step1Html: "<input type='hidden' name='markList'></input><br>",
	cancelButton: "Cancel",
	cancelButtonPrompt: "Cancel prompt",
	listViewTemplate: {
		columns: [
			{name: 'Description', field: 'description', title: "Description", type: 'WikiText'},
			{name: 'Option', field: 'option', title: "Option", type: 'String'},
			{name: 'Name', field: 'name', title: "Name", type: 'String'}
			],
		rowClasses: [
			{className: 'lowlight', field: 'lowlight'} 
			]}
};

//
// upload functions
//

if (!bidix.upload) bidix.upload = {};

if (!bidix.upload.messages) bidix.upload.messages = {
	//from saving
	invalidFileError: "The original file '%0' does not appear to be a valid TiddlyWiki",
	backupSaved: "Backup saved",
	backupFailed: "Failed to upload backup file",
	rssSaved: "RSS feed uploaded",
	rssFailed: "Failed to upload RSS feed file",
	emptySaved: "Empty template uploaded",
	emptyFailed: "Failed to upload empty template file",
	mainSaved: "Main TiddlyWiki file uploaded",
	mainFailed: "Failed to upload main TiddlyWiki file. Your changes have not been saved",
	//specific upload
	loadOriginalHttpPostError: "Can't get original file",
	aboutToSaveOnHttpPost: 'About to upload on %0 ...',
	storePhpNotFound: "The store script '%0' was not found."
};

bidix.upload.uploadChanges = function(onlyIfDirty,tiddlers,storeUrl,toFilename,uploadDir,backupDir,username,password)
{
	var callback = function(status,uploadParams,original,url,xhr) {
		if (!status) {
			displayMessage(bidix.upload.messages.loadOriginalHttpPostError);
			return;
		}
		if (bidix.debugMode) 
			alert(original.substr(0,500)+"\n...");
		// Locate the storeArea div's 
		var posDiv = locateStoreArea(original);
		if((posDiv[0] == -1) || (posDiv[1] == -1)) {
			alert(config.messages.invalidFileError.format([localPath]));
			return;
		}
		bidix.upload.uploadRss(uploadParams,original,posDiv);
	};
	
	if(onlyIfDirty && !store.isDirty())
		return;
	clearMessage();
	// save on localdisk ?
	if (document.location.toString().substr(0,4) == "file") {
		var path = document.location.toString();
		var localPath = getLocalPath(path);
		saveChanges();
	}
	// get original
	var uploadParams = new Array(storeUrl,toFilename,uploadDir,backupDir,username,password);
	var originalPath = document.location.toString();
	// If url is a directory : add index.html
	if (originalPath.charAt(originalPath.length-1) == "/")
		originalPath = originalPath + "index.html";
	var dest = config.macros.upload.destFile(storeUrl,toFilename,uploadDir);
	var log = new bidix.UploadLog();
	log.startUpload(storeUrl, dest, uploadDir,  backupDir);
	displayMessage(bidix.upload.messages.aboutToSaveOnHttpPost.format([dest]));
	if (bidix.debugMode) 
		alert("about to execute Http - GET on "+originalPath);
	var r = doHttp("GET",originalPath,null,null,username,password,callback,uploadParams,null);
	if (typeof r == "string")
		displayMessage(r);
	return r;
};

bidix.upload.uploadRss = function(uploadParams,original,posDiv) 
{
	var callback = function(status,params,responseText,url,xhr) {
		if(status) {
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.rssSaved,bidix.dirname(url)+'/'+destfile);
			bidix.upload.uploadMain(params[0],params[1],params[2]);
		} else {
			displayMessage(bidix.upload.messages.rssFailed);			
		}
	};
	// do uploadRss
	if(config.options.chkGenerateAnRssFeed) {
		var rssPath = uploadParams[1].substr(0,uploadParams[1].lastIndexOf(".")) + ".xml";
		var rssUploadParams = new Array(uploadParams[0],rssPath,uploadParams[2],'',uploadParams[4],uploadParams[5]);
		var rssString = generateRss();
		// no UnicodeToUTF8 conversion needed when location is "file" !!!
		if (document.location.toString().substr(0,4) != "file")
			rssString = convertUnicodeToUTF8(rssString);	
		bidix.upload.httpUpload(rssUploadParams,rssString,callback,Array(uploadParams,original,posDiv));
	} else {
		bidix.upload.uploadMain(uploadParams,original,posDiv);
	}
};

bidix.upload.uploadMain = function(uploadParams,original,posDiv) 
{
	var callback = function(status,params,responseText,url,xhr) {
		var log = new bidix.UploadLog();
		if(status) {
			// if backupDir specified
			if ((params[3]) && (responseText.indexOf("backupfile:") > -1))  {
				var backupfile = responseText.substring(responseText.indexOf("backupfile:")+11,responseText.indexOf("\n", responseText.indexOf("backupfile:")));
				displayMessage(bidix.upload.messages.backupSaved,bidix.dirname(url)+'/'+backupfile);
			}
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.mainSaved,bidix.dirname(url)+'/'+destfile);
			store.setDirty(false);
			log.endUpload("ok");
		} else {
			alert(bidix.upload.messages.mainFailed);
			displayMessage(bidix.upload.messages.mainFailed);
			log.endUpload("failed");			
		}
	};
	// do uploadMain
	var revised = bidix.upload.updateOriginal(original,posDiv);
	bidix.upload.httpUpload(uploadParams,revised,callback,uploadParams);
};

bidix.upload.httpUpload = function(uploadParams,data,callback,params)
{
	var localCallback = function(status,params,responseText,url,xhr) {
		url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
		if (xhr.status == 404)
			alert(bidix.upload.messages.storePhpNotFound.format([url]));
		if ((bidix.debugMode) || (responseText.indexOf("Debug mode") >= 0 )) {
			alert(responseText);
			if (responseText.indexOf("Debug mode") >= 0 )
				responseText = responseText.substring(responseText.indexOf("\n\n")+2);
		} else if (responseText.charAt(0) != '0') 
			alert(responseText);
		if (responseText.charAt(0) != '0')
			status = null;
		callback(status,params,responseText,url,xhr);
	};
	// do httpUpload
	var boundary = "---------------------------"+"AaB03x";	
	var uploadFormName = "UploadPlugin";
	// compose headers data
	var sheader = "";
	sheader += "--" + boundary + "\r\nContent-disposition: form-data; name=\"";
	sheader += uploadFormName +"\"\r\n\r\n";
	sheader += "backupDir="+uploadParams[3] +
				";user=" + uploadParams[4] +
				";password=" + uploadParams[5] +
				";uploaddir=" + uploadParams[2];
	if (bidix.debugMode)
		sheader += ";debug=1";
	sheader += ";;\r\n"; 
	sheader += "\r\n" + "--" + boundary + "\r\n";
	sheader += "Content-disposition: form-data; name=\"userfile\"; filename=\""+uploadParams[1]+"\"\r\n";
	sheader += "Content-Type: text/html;charset=UTF-8" + "\r\n";
	sheader += "Content-Length: " + data.length + "\r\n\r\n";
	// compose trailer data
	var strailer = new String();
	strailer = "\r\n--" + boundary + "--\r\n";
	data = sheader + data + strailer;
	if (bidix.debugMode) alert("about to execute Http - POST on "+uploadParams[0]+"\n with \n"+data.substr(0,500)+ " ... ");
	var r = doHttp("POST",uploadParams[0],data,"multipart/form-data; ;charset=UTF-8; boundary="+boundary,uploadParams[4],uploadParams[5],localCallback,params,null);
	if (typeof r == "string")
		displayMessage(r);
	return r;
};

// same as Saving's updateOriginal but without convertUnicodeToUTF8 calls
bidix.upload.updateOriginal = function(original, posDiv)
{
	if (!posDiv)
		posDiv = locateStoreArea(original);
	if((posDiv[0] == -1) || (posDiv[1] == -1)) {
		alert(config.messages.invalidFileError.format([localPath]));
		return;
	}
	var revised = original.substr(0,posDiv[0] + startSaveArea.length) + "\n" +
				store.allTiddlersAsHtml() + "\n" +
				original.substr(posDiv[1]);
	var newSiteTitle = getPageTitle().htmlEncode();
	revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");
	revised = updateMarkupBlock(revised,"PRE-HEAD","MarkupPreHead");
	revised = updateMarkupBlock(revised,"POST-HEAD","MarkupPostHead");
	revised = updateMarkupBlock(revised,"PRE-BODY","MarkupPreBody");
	revised = updateMarkupBlock(revised,"POST-SCRIPT","MarkupPostBody");
	return revised;
};

//
// UploadLog
// 
// config.options.chkUploadLog :
//		false : no logging
//		true : logging
// config.options.txtUploadLogMaxLine :
//		-1 : no limit
//      0 :  no Log lines but UploadLog is still in place
//		n :  the last n lines are only kept
//		NaN : no limit (-1)

bidix.UploadLog = function() {
	if (!config.options.chkUploadLog) 
		return; // this.tiddler = null
	this.tiddler = store.getTiddler("UploadLog");
	if (!this.tiddler) {
		this.tiddler = new Tiddler();
		this.tiddler.title = "UploadLog";
		this.tiddler.text = "| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |";
		this.tiddler.created = new Date();
		this.tiddler.modifier = config.options.txtUserName;
		this.tiddler.modified = new Date();
		store.addTiddler(this.tiddler);
	}
	return this;
};

bidix.UploadLog.prototype.addText = function(text) {
	if (!this.tiddler)
		return;
	// retrieve maxLine when we need it
	var maxLine = parseInt(config.options.txtUploadLogMaxLine,10);
	if (isNaN(maxLine))
		maxLine = -1;
	// add text
	if (maxLine != 0) 
		this.tiddler.text = this.tiddler.text + text;
	// Trunck to maxLine
	if (maxLine >= 0) {
		var textArray = this.tiddler.text.split('\n');
		if (textArray.length > maxLine + 1)
			textArray.splice(1,textArray.length-1-maxLine);
			this.tiddler.text = textArray.join('\n');		
	}
	// update tiddler fields
	this.tiddler.modifier = config.options.txtUserName;
	this.tiddler.modified = new Date();
	store.addTiddler(this.tiddler);
	// refresh and notifiy for immediate update
	story.refreshTiddler(this.tiddler.title);
	store.notify(this.tiddler.title, true);
};

bidix.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir,  backupDir) {
	if (!this.tiddler)
		return;
	var now = new Date();
	var text = "\n| ";
	var filename = bidix.basename(document.location.toString());
	if (!filename) filename = '/';
	text += now.formatString("0DD/0MM/YYYY 0hh:0mm:0ss") +" | ";
	text += config.options.txtUserName + " | ";
	text += "[["+filename+"|"+location + "]] |";
	text += " [[" + bidix.basename(storeUrl) + "|" + storeUrl + "]] | ";
	text += uploadDir + " | ";
	text += "[[" + bidix.basename(toFilename) + " | " +toFilename + "]] | ";
	text += backupDir + " |";
	this.addText(text);
};

bidix.UploadLog.prototype.endUpload = function(status) {
	if (!this.tiddler)
		return;
	this.addText(" "+status+" |");
};

//
// Utilities
// 

bidix.checkPlugin = function(plugin, major, minor, revision) {
	var ext = version.extensions[plugin];
	if (!
		(ext  && 
			((ext.major > major) || 
			((ext.major == major) && (ext.minor > minor))  ||
			((ext.major == major) && (ext.minor == minor) && (ext.revision >= revision))))) {
			// write error in PluginManager
			if (pluginInfo)
				pluginInfo.log.push("Requires " + plugin + " " + major + "." + minor + "." + revision);
			eval(plugin); // generate an error : "Error: ReferenceError: xxxx is not defined"
	}
};

bidix.dirname = function(filePath) {
	if (!filePath) 
		return;
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(0, lastpos);
	} else {
		return filePath.substring(0, filePath.lastIndexOf("\\"));
	}
};

bidix.basename = function(filePath) {
	if (!filePath) 
		return;
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("#")) != -1) 
		filePath = filePath.substring(0, lastpos);
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(lastpos + 1);
	} else
		return filePath.substring(filePath.lastIndexOf("\\")+1);
};

bidix.initOption = function(name,value) {
	if (!config.options[name])
		config.options[name] = value;
};

//
// Initializations
//

// require PasswordOptionPlugin 1.0.1 or better
bidix.checkPlugin("PasswordOptionPlugin", 1, 0, 1);

// styleSheet
setStylesheet('.txtUploadStoreUrl, .txtUploadBackupDir, .txtUploadDir {width: 22em;}',"uploadPluginStyles");

//optionsDesc
merge(config.optionsDesc,{
	txtUploadStoreUrl: "Url of the UploadService script (default: store.php)",
	txtUploadFilename: "Filename of the uploaded file (default: in index.html)",
	txtUploadDir: "Relative Directory where to store the file (default: . (downloadService directory))",
	txtUploadBackupDir: "Relative Directory where to backup the file. If empty no backup. (default: ''(empty))",
	txtUploadUserName: "Upload Username",
	pasUploadPassword: "Upload Password",
	chkUploadLog: "do Logging in UploadLog (default: true)",
	txtUploadLogMaxLine: "Maximum of lines in UploadLog (default: 10)"
});

// Options Initializations
bidix.initOption('txtUploadStoreUrl','');
bidix.initOption('txtUploadFilename','');
bidix.initOption('txtUploadDir','');
bidix.initOption('txtUploadBackupDir','');
bidix.initOption('txtUploadUserName','');
bidix.initOption('pasUploadPassword','');
bidix.initOption('chkUploadLog',true);
bidix.initOption('txtUploadLogMaxLine','10');


// Backstage
merge(config.tasks,{
	uploadOptions: {text: "upload", tooltip: "Change UploadOptions and Upload", content: '<<uploadOptions>>'}
});
config.backstageTasks.push("uploadOptions");


//}}}

;1.1.1 — cleanup & proper hijack of saveTiddler
:» proper hijack of store.saveTiddler
:» removed superfluous console.log and bug in readable source
;1.1.0 — fixed refresh handling
:» now only refreshes on saving any tiddler what actually needs refreshing
:» and not all tiddlers!
;1.0.5
:» added [[doNotLinkifySameTiddler|Settings]]
;1.0.4
:» the function {{{linkifyTiddlers(true)}}} is now DEPRECATED
;1.0.3
:» simplified reference to self using {{{cel}}}
;1.0.2
:» changed defaults for [[linkifyAllTiddlers|Settings]]
;1.0.1
:» added [[doNotLinkifyInside|Settings]]
;1.0
:» moved global functions into {{{config.extensions.linkify}}}
:» new setting [[linkifyAllTiddlers|Settings]] (boolean) to set if all tiddlers are to be linkified
:» now by default minified
:» code commenting
;0.9.6
:» changed as is modifier from the prefix {{{ ' }}} to enclosing double quotes, e.g. {{{"zoOM"}}} will link zoOM but not Zoom
:» all tiddlers are now properly handled, i.e. updated on new, rename or delete
:» now, not only alphanumeric characters such as tiddlers 101 are linkified, so now this... <^°§$%&()?#+*> ;-) ...is allowed too
:» although I would not recommend to do so, you can now prevent linkification by prefixing your wiki text with the tidle {{{ ~ }}} character just as you would to prevent linking for ~CamelCase, e.g. {{{~tiddler}}} no longer linkifies ...here's the proof: ''~tiddler''
:» You can now use RegEx terms as well, but they are limited :o)
;0.9.5
:» changed (prefixes to) modifiers{{x{
*{{{ 0! }}} is removed and replaced with {{{ ^ }}}, i.e. to mark a tiddler to be prepended to the formatters array, use the modifier {{{ ^ }}}
*{{{ ^ }}} is replaced with {{{ * }}} ....whereas wildcards are supported as both a prefix or a suffix to a term!
}}}
:» the sequence of modifiers (previously prefixes) is no longer of any relevance and can be freely assigned
:» you can now escape a __definition__ term via {{{\\}}} and thus interrupt modifier detection for prefixes
:» in the rare case where you also want to prevent modifier detection for suffixes in the __configuration__, use {{{ \\ }}} beginning from the end of a term
:» refactoring -> sanitize()
;0.9.4
:» fixed bug, where LinkifyPlugin would misbehave outside the story column
;0.9.3
:» fixed bug, where tiddlers containing line breaks would not linkify
;0.9.2
:» ability to match a word as is using a single quote {{{ ' }}} as a prefix
;0.9.1
:» optional auto-linkification for all tiddlers
:» refactoring ...addFormatter(), linkifyHandler()
:» performance increase with respect to excluded tiddlers -> index of excluded tiddlers now rebuilt on saveTiddler
:» by default, linkification formatters are now inserted last in formatters array
:» a new prefix {{{ 0! }}} now allows to prepend the formatter to formatters array instead of appending it
:» target tiddlers prefixed with ~ in LinkifyConfig are no longer linkified themselves
;0.9.0
:» Initial Release
If you want to linkify WikiLinks which already are in CamelCase, you need to prepend the modifier prefix {{{^}}} with respect to the term. For any term prefixed this way the created formatter is prepended to the formatters array and thus applied first -- instead of being appended which is default:
{{{
^WikiLink
}}}
In general, wildcards are understood via the star {{{ * }}} character. Currently, LinkifyConfig understands wildcards  in the form of a prefix or a suffix to a term, thus any of {{{*term}}}, {{{term*}}} and {{{*term*}}} should work. Put another way, all of term, terms and unterm work.
Well, something that supposedly auto-links to this tiddler or otherwise [[this|http://en.wikipedia.org/wiki/Word]].
Story.saveTiddler is being hijacked to update all linkification formatters as well as the list of tiddlers to be excluded form linkification. If this takes too long, the process should be interrupted to only build the index when TiddlyWiki loads.
Type the text for 'New Tiddler'
//{{{
config.options.txtUserName ="Tobias";
config.options.chkUploadLog = false;

merge(config.extensions.linkify.defaults,{
    linkifyAllTiddlers: true,
    doNotLinkifyInside: 'h1,h2,h3,h4,h5,h6,.header,.noLinkify,#sidebar',
    doNotLinkifySameTiddler: false
});

//}}}