<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
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
/*{{{*/
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]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.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]];}

#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:0px; top:0px;}

.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:0px 3px 0px 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:0px; padding-bottom:0px;}

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

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.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='header' 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' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' 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>
<!--}}}-->
<!--{{{-->
<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>>
<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
text/plain
.txt .text .js .vbs .asp .cgi .pl
----
text/html
.htm .html .hta .htx .mht
----
text/comma-separated-values
.csv
----
text/javascript
.js
----
text/css
.css
----
text/xml
.xml .xsl .xslt
----
image/gif
.gif
----
image/jpeg
.jpg .jpe .jpeg
----
image/png
.png
----
image/bmp
.bmp
----
image/tiff
.tif .tiff
----
audio/basic
.au .snd
----
audio/wav
.wav
----
audio/x-pn-realaudio
.ra .rm .ram
----
audio/x-midi
.mid .midi
----
audio/mp3
.mp3
----
audio/m3u
.m3u
----
video/x-ms-asf
.asf
----
video/avi
.avi
----
video/mpeg
.mpg .mpeg
----
video/quicktime
.qt .mov .qtvr
----
application/pdf
.pdf
----
application/rtf
.rtf
----
application/postscript
.ai .eps .ps
----
application/wordperfect
.wpd
----
application/mswrite
.wri
----
application/msexcel
.xls .xls3 .xls4 .xls5 .xlw
----
application/msword
.doc
----
application/mspowerpoint
.ppt .pps
----
application/x-director
.swa
----
application/x-shockwave-flash
.swf
----
application/x-zip-compressed
.zip
----
application/x-gzip
.gz
----
application/x-rar-compressed
.rar
----
application/octet-stream
.com .exe .dll .ocx
----
application/java-archive
.jar
[[AttachFilePlugin]] reads binary data from locally-stored files (e.g., images, PDFs, mp3's, etc.) and converts it to base64-encoded text that is stored in tiddlers tagged with<<tag attachment>>. [[AttachFilePluginFormatters]] allows you to use those tiddlers in place of the external path/file references that are normally part of the image and external links wiki syntax.

[[FileDropPlugin]] and [[FileDropPluginConfig]] allow you to quickly create attachment tiddlers simply by dragging files directly from your system's desktop folder display and dropping it onto an open TiddlyWiki document.  Text files are automatically created as simple tiddlers, while binary files are automatically encoded and attached.
/***
|Name|AttachFilePlugin|
|Source|http://www.TiddlyTools.com/#AttachFilePlugin|
|Documentation|http://www.TiddlyTools.com/#AttachFilePluginInfo|
|Version|4.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|AttachFilePluginFormatters, AttachFileMIMETypes|
|Description|Store binary files as base64-encoded tiddlers with fallback links for separate local and/or remote file storage|
Store or link binary files (such as jpg, gif, pdf or even mp3) within your TiddlyWiki document and then use them as images or links from within your tiddler content.
> Important note: As of version 3.6.0, in order to //render// images and other binary attachments created with this plugin, you must also install [[AttachFilePluginFormatters]], which extends the behavior of the TiddlyWiki core formatters for embedded images ({{{[img[tooltip|image]]}}}), linked embedded images ({{{[img[tooltip|image][link]]}}}), and external/"pretty" links ({{{[[label|link]]}}}), so that these formatter will process references to attachment tiddlers as if a normal file reference had been provided. |
!!!!!Documentation
>see [[AttachFilePluginInfo]]
!!!!!Inline interface (live)
>see [[AttachFile]] (shadow tiddler)
><<tiddler AttachFile>>
!!!!!Revisions
<<<
2009.06.04 [4.0.0] changed attachment storage format to use //sections// instead of embedded substring markers.
|please see [[AttachFilePluginInfo]] for additional revision details|
2005.07.20 [1.0.0] Initial Release
<<<
!!!!!Code
***/
// // version
//{{{
version.extensions.AttachFilePlugin= {major: 4, minor: 0, revision: 0, date: new Date(2009,6,4)};

// shadow tiddler
config.shadowTiddlers.AttachFile="<<attach inline>>";

// add 'attach' backstage task (insert before built-in 'importTask')
if (config.tasks) { // for TW2.2b or above
	config.tasks.attachTask = {
		text: "attach",
		tooltip: "Attach a binary file as a tiddler",
		content: "<<attach inline>>"
	}
	config.backstageTasks.splice(config.backstageTasks.indexOf("importTask"),0,"attachTask");
}

config.macros.attach = {
// // lingo
//{{{
	label: "attach file",
	tooltip: "Attach a file to this document",
	linkTooltip: "Attachment: ",

	typeList: "AttachFileMIMETypes",

	titlePrompt: " enter tiddler title...",
	MIMEPrompt: "<option value=''>select MIME type...</option><option value='editlist'>[edit list...]</option>",
	localPrompt: " enter local path/filename...",
	URLPrompt: " enter remote URL...",

	tiddlerErr: "Please enter a tiddler title",
	sourceErr: "Please enter a source path/filename",
	storageErr: "Please select a storage method: embedded, local or remote",
	MIMEErr: "Unrecognized file format.  Please select a MIME type",
	localErr: "Please enter a local path/filename",
	URLErr: "Please enter a remote URL",
	fileErr: "Invalid path/file or file not found",

	tiddlerFormat: '!usage\n{{{%0}}}\n%0\n!notes\n%1\n!type\n%2\n!file\n%3\n!url\n%4\n!data\n%5\n',

//}}}
// // macro definition
//{{{
	handler:
	function(place,macroName,params) {
		if (params && !params[0])
			{ createTiddlyButton(place,this.label,this.tooltip,this.toggleAttachPanel); return; }
		var id=params.shift();
		this.createAttachPanel(place,id+"_attachPanel",params);
		document.getElementById(id+"_attachPanel").style.position="static";
		document.getElementById(id+"_attachPanel").style.display="block";
	},
//}}}
//{{{
	createAttachPanel:
	function(place,panel_id,params) {
		if (!panel_id || !panel_id.length) var panel_id="_attachPanel";
		// remove existing panel (if any)
		var panel=document.getElementById(panel_id); if (panel) panel.parentNode.removeChild(panel);
		// set styles for this panel
		setStylesheet(this.css,"attachPanel");
		// create new panel
		var title=""; if (params && params[0]) title=params.shift();
		var types=this.MIMEPrompt+this.formatListOptions(store.getTiddlerText(this.typeList)); // get MIME types
		panel=createTiddlyElement(place,"span",panel_id,"attachPanel",null);
		var html=this.html.replace(/%id%/g,panel_id);
		html=html.replace(/%title%/g,title);
		html=html.replace(/%disabled%/g,title.length?"disabled":"");
		html=html.replace(/%IEdisabled%/g,config.browser.isIE?"disabled":"");
		html=html.replace(/%types%/g,types);
		panel.innerHTML=html;
		if (config.browser.isGecko) { // FF3 FIXUP
			document.getElementById("attachSource").style.display="none";
			document.getElementById("attachFixPanel").style.display="block";
		}
		return panel;
	},
//}}}
//{{{
	toggleAttachPanel:
	function (e) {
		if (!e) var e = window.event;
		var parent=resolveTarget(e).parentNode;
		var panel = document.getElementById("_attachPanel");
		if (panel==undefined || panel.parentNode!=parent)
			panel=config.macros.attach.createAttachPanel(parent,"_attachPanel");
		var isOpen = panel.style.display=="block";
		if(config.options.chkAnimate)
			anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,"none"));
		else
			panel.style.display = isOpen ? "none" : "block" ;
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
		return(false);
	},
//}}}
//{{{
	formatListOptions:
	function(text) {
		if (!text || !text.trim().length) return "";
		// get MIME list content from text
		var parts=text.split("\n----\n");
		var out="";
		for (var p=0; p<parts.length; p++) {
			var lines=parts[p].split("\n");
			var label=lines.shift(); // 1st line=display text
			var value=lines.shift(); // 2nd line=item value
			out +='<option value="%1">%0</option>'.format([label,value]);
		}
		return out;
	},
//}}}
// // interface definition
//{{{
	css:
	".attachPanel { display: none; position:absolute; z-index:10; width:35em; right:105%; top:0em;\
		background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\
		border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\
		padding: 0.5em; margin:0em; -moz-border-radius:1em;-webkit-border-radius:1em; text-align:left }\
	.attachPanel form { display:inline;border:0;padding:0;margin:0; }\
	.attachPanel select { width:99%;margin:0px;font-size:8pt;line-height:110%;}\
	.attachPanel input  { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%}\
	.attachPanel textarea { width:98%;margin:0px;height:2em;font-size:8pt;line-height:110%}\
	.attachPanel table { width:100%;border:0;margin:0;padding:0;color:inherit; }\
	.attachPanel tbody, .attachPanel tr, .attachPanel td { border:0;margin:0;padding:0;color:#000; }\
	.attachPanel .box { border:1px solid black; padding:.3em; margin:.3em 0px; background:#f8f8f8; \
		-moz-border-radius:5px;-webkit-border-radius:5px; }\
	.attachPanel .chk { width:auto;border:0; }\
	.attachPanel .btn { width:auto; }\
	.attachPanel .btn2 { width:49%; }\
	",
//}}}
//{{{
	html:
	'<form>\
		attach from source file\
		<input type="file" id="attachSource" name="source" size="56"\
			onChange="config.macros.attach.onChangeSource(this)">\
		<div id="attachFixPanel" style="display:none"><!-- FF3 FIXUP -->\
			<input type="text" id="attachFixSource" style="width:90%"\
				title="Enter a path/file to attach"\
				onChange="config.macros.attach.onChangeSource(this);">\
			<input type="button" style="width:7%" value="..."\
				title="Enter a path/file to attach"\
				onClick="config.macros.attach.askForFilename(document.getElementById(\'attachFixSource\'));">\
		</div><!--end FF3 FIXUP-->\
		<div class="box">\
		<table style="border:0"><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			embed data <input type=checkbox class=chk name="useData" %IEdisabled% \
				onclick="if (!this.form.MIMEType.value.length)\
					this.form.MIMEType.selectedIndex=this.checked?1:0; ">&nbsp;\
		</td><td style="border:0">\
			<select size=1 name="MIMEType" \
				onchange="this.title=this.value; if (this.value==\'editlist\')\
					{ this.selectedIndex=this.form.useData.checked?1:0; story.displayTiddler(null,config.macros.attach.typeList,2); return; }">\
				<option value=""></option>\
				%types%\
			</select>\
		</td></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			local link <input type=checkbox class=chk name="useLocal"\
				onclick="this.form.local.value=this.form.local.defaultValue=this.checked?config.macros.attach.localPrompt:\'\';">&nbsp;\
		</td><td style="border:0">\
			<input type=text name="local" size=15 autocomplete=off value=""\
				onchange="this.form.useLocal.checked=this.value.length" \
				onkeyup="this.form.useLocal.checked=this.value.length" \
				onfocus="if (!this.value.length) this.value=config.macros.attach.localPrompt; this.select()">\
		</td></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			remote link <input type=checkbox class=chk name="useURL"\
				onclick="this.form.URL.value=this.form.URL.defaultValue=this.checked?config.macros.attach.URLPrompt:\'\';\">&nbsp;\
		</td><td style="border:0">\
			<input type=text name="URL" size=15 autocomplete=off value=""\
				onfocus="if (!this.value.length) this.value=config.macros.attach.URLPrompt; this.select()"\
				onchange="this.form.useURL.checked=this.value.length;"\
				onkeyup="this.form.useURL.checked=this.value.length;">\
		</td></tr></table>\
		</div>\
		<table style="border:0"><tr style="border:0"><td style="border:0;text-align:right;vertical-align:top;width:1%;white-space:nowrap">\
			notes&nbsp;\
		</td><td style="border:0" colspan=2>\
			<textarea name="notes" style="width:98%;height:3.5em;margin-bottom:2px"></textarea>\
		</td><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			attach as&nbsp;\
		</td><td style="border:0" colspan=2>\
			<input type=text name="tiddlertitle" size=15 autocomplete=off value="%title%"\
				onkeyup="if (!this.value.length) { this.value=config.macros.attach.titlePrompt; this.select(); }"\
				onfocus="if (!this.value.length) this.value=config.macros.attach.titlePrompt; this.select()" %disabled%>\
		</td></tr></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			add tags&nbsp;\
		</td><td style="border:0">\
			<input type=text name="tags" size=15 autocomplete=off value="" onfocus="this.select()">\
		</td><td style="width:40%;text-align:right;border:0">\
			<input type=button class=btn2 value="attach"\
				onclick="config.macros.attach.onClickAttach(this)"><!--\
			--><input type=button class=btn2 value="close"\
				onclick="var panel=document.getElementById(\'%id%\'); if (panel) panel.parentNode.removeChild(panel);">\
		</td></tr></table>\
	</form>',
//}}}
// // control processing
//{{{
	onChangeSource:
	function(here) {
		var form=here.form;
		var list=form.MIMEType;
		var theFilename  = here.value;
		var theExtension = theFilename.substr(theFilename.lastIndexOf('.')).toLowerCase();
		// if theFilename is in current document folder, remove path prefix and use relative reference
		var h=document.location.href; folder=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf("/")+1)));
		if (theFilename.substr(0,folder.length)==folder) theFilename='./'+theFilename.substr(folder.length);
		else theFilename='file:///'+theFilename; // otherwise, use absolute reference
		theFilename=theFilename.replace(/\\/g,"/"); // fixup: change \ to /
		form.useLocal.checked = true;
		form.local.value = theFilename;
		form.useData.checked = !form.useData.disabled;
		list.selectedIndex=1;
		for (var i=0; i<list.options.length; i++) // find matching MIME type
			if (list.options[i].value.indexOf(theExtension)!=-1) { list.selectedIndex = i; break; }
		if (!form.tiddlertitle.disabled)
			form.tiddlertitle.value=theFilename.substr(theFilename.lastIndexOf('/')+1); // get tiddlername from filename
	},
//}}}
//{{{
	onClickAttach:
	function (here) {
		clearMessage();
		// get input values
		var form=here.form;
		var src=form.source; if (config.browser.isGecko) src=document.getElementById("attachFixSource");
		src=src.value!=src.defaultValue?src.value:"";
		var when=(new Date()).formatString(config.macros.timeline.dateFormat);
		var title=form.tiddlertitle.value;
		var local = form.local.value!=form.local.defaultValue?form.local.value:"";
		var url = form.URL.value!=form.URL.defaultValue?form.URL.value:"";
		var notes = form.notes.value;
		var tags = "attachment excludeMissing "+form.tags.value;
		var useData=form.useData.checked;
		var useLocal=form.useLocal.checked;
		var useURL=form.useURL.checked;
		var mimetype = form.MIMEType.value.length?form.MIMEType.options[form.MIMEType.selectedIndex].text:"";
		// validate checkboxes and get filename
		if (useData) {
			if (src.length) { if (!theLocation) var theLocation=src; }
			else { alert(this.sourceErr); src.focus(); return false; }
		}
		if (useLocal) {
			if (local.length) { if (!theLocation) var theLocation = local; }
			else { alert(this.localErr); form.local.focus(); return false; }
		}
		if (useURL) {
			if (url.length) { if (!theLocation) var theLocation = url; }
			else { alert(this.URLErr); form.URL.focus(); return false; }
		}
		if (!(useData||useLocal||useURL))
			{ form.useData.focus(); alert(this.storageErr); return false; }
		if (!theLocation)
			{ src.focus(); alert(this.sourceErr); return false; }
		if (!title || !title.trim().length || title==this.titlePrompt)
			{ form.tiddlertitle.focus(); alert(this.tiddlerErr); return false; }
		// if not already selected, determine MIME type based on filename extension (if any)
		if (useData && !mimetype.length && theLocation.lastIndexOf('.')!=-1) {
			var theExt = theLocation.substr(theLocation.lastIndexOf('.')).toLowerCase();
			var theList=form.MIMEType;
			for (var i=0; i<theList.options.length; i++)
				if (theList.options[i].value.indexOf(theExt)!=-1)
					{ var mimetype=theList.options[i].text; theList.selectedIndex=i; break; }
		}
		// attach the file
		return this.createAttachmentTiddler(src, when, notes, tags, title,
			useData, useLocal, useURL, local, url, mimetype);
	},
	getMIMEType:
	function(src,def) {
		var ext = src.substr(src.lastIndexOf('.')).toLowerCase();
		var list=store.getTiddlerText(this.typeList);
		if (!list || !list.trim().length) return def;
		// get MIME list content from tiddler
		var parts=list.split("\n----\n");
		for (var p=0; p<parts.length; p++) {
			var lines=parts[p].split("\n");
			var mime=lines.shift(); // 1st line=MIME type
			var match=lines.shift(); // 2nd line=matching extensions
			if (match.indexOf(ext)!=-1) return mime;
		}
		return def;
	},
	createAttachmentTiddler:
	function (src, when, notes, tags, title, useData, useLocal, useURL, local, url, mimetype, noshow) {
		if (useData) { // encode the data
			if (!mimetype.length) {
				alert(this.MIMEErr);
				form.MIMEType.selectedIndex=1; form.MIMEType.focus();
				return false;
			}
			var d = this.readFile(src); if (!d) { return false; }
			displayMessage('encoding '+src);
			var encoded = this.encodeBase64(d);
			displayMessage('file size='+d.length+' bytes, encoded size='+encoded.length+' bytes');
		}
		var usage=(mimetype.substr(0,5)=="image"?'[img[%0]]':'[[%0|%0]]').format([title]);
		var theText=this.tiddlerFormat.format([
			usage, notes.length?notes:'//none//', mimetype,
			useLocal?local.replace(/\\/g,'/'):'', useURL?url:'',
			useData?('data:'+mimetype+';base64,'+encoded):'' ]);
		store.saveTiddler(title,title,theText,config.options.txtUserName,new Date(),tags);
		var panel=document.getElementById("attachPanel"); if (panel) panel.style.display="none";
		if (!noshow) { story.displayTiddler(null,title); story.refreshTiddler(title,null,true); }
		displayMessage('attached "'+title+'"');
		return true;
	},
//}}}
// // base64 conversion
//{{{
	encodeBase64:
	function (d) {
		if (!d) return null;
		// encode as base64
		var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
		var out="";
		var chr1,chr2,chr3="";
		var enc1,enc2,enc3,enc4="";
		for (var count=0,i=0; i<d.length; ) {
			chr1=d.charCodeAt(i++);
			chr2=d.charCodeAt(i++);
			chr3=d.charCodeAt(i++);
			enc1=chr1 >> 2;
			enc2=((chr1 & 3) << 4) | (chr2 >> 4);
			enc3=((chr2 & 15) << 2) | (chr3 >> 6);
			enc4=chr3 & 63;
			if (isNaN(chr2)) enc3=enc4=64;
			else if (isNaN(chr3)) enc4=64;
			out+=keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4);
			chr1=chr2=chr3=enc1=enc2=enc3=enc4="";
		}
		return out;
	},
	decodeBase64: function(input) {
		var out="";
		var chr1,chr2,chr3;
		var enc1,enc2,enc3,enc4;
		var i = 0;
		// remove all characters that are not A-Z, a-z, 0-9, +, /, or =
		input=input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
		do {
			enc1=keyStr.indexOf(input.charAt(i++));
			enc2=keyStr.indexOf(input.charAt(i++));
			enc3=keyStr.indexOf(input.charAt(i++));
			enc4=keyStr.indexOf(input.charAt(i++));
			chr1=(enc1 << 2) | (enc2 >> 4);
			chr2=((enc2 & 15) << 4) | (enc3 >> 2);
			chr3=((enc3 & 3) << 6) | enc4;
			out=out+String.fromCharCode(chr1);
			if (enc3!=64) out=out+String.fromCharCode(chr2);
			if (enc4!=64) out=out+String.fromCharCode(chr3);
		} while (i<input.length);
		return out;
	},
//}}}
// // I/O functions
//{{{
	readFile: // read local BINARY file data
	function(filePath) {
		if(!window.Components) { return null; }
		try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
		catch(e) { alert("access denied: "+filePath); return null; }
		var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
		try { file.initWithPath(filePath); } catch(e) { alert("cannot read file - invalid path: "+filePath); return null; }
		if (!file.exists()) { alert("cannot read file - not found: "+filePath); return null; }
		var inputStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
		inputStream.init(file, 0x01, 00004, null);
		var bInputStream = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);
		bInputStream.setInputStream(inputStream);
		return(bInputStream.readBytes(inputStream.available()));
	},
//}}}
//{{{
	writeFile:
	function(filepath,data) {
		// TBD: decode base64 and write BINARY data to specified local path/filename
		return(false);
	},
//}}}
//{{{
	askForFilename: // for FF3 fixup
	function(target) {
		var msg=config.messages.selectFile;
		if (target && target.title) msg=target.title; // use target field tooltip (if any) as dialog prompt text
		// get local path for current document
		var path=getLocalPath(document.location.href);
		var p=path.lastIndexOf("/"); if (p==-1) p=path.lastIndexOf("\\"); // Unix or Windows
		if (p!=-1) path=path.substr(0,p+1); // remove filename, leave trailing slash
		var file=""
		var result=window.mozAskForFilename(msg,path,file,true); // FF3 FIXUP ONLY
		if (target && result.length) // set target field and trigger handling
			{ target.value=result; target.onchange(); }
		return result; 
	}
};
//}}}
//{{{
if (window.mozAskForFilename===undefined) { // also defined by CoreTweaks (for ticket #604)
	window.mozAskForFilename=function(msg,path,file,mustExist) {
		if(!window.Components) return false;
		try {
			netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
			var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
			var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
			picker.init(window, msg, mustExist?nsIFilePicker.modeOpen:nsIFilePicker.modeSave);
			var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
			thispath.initWithPath(path);
			picker.displayDirectory=thispath;
			picker.defaultExtension='';
			picker.defaultString=file;
			picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
			if (picker.show()!=nsIFilePicker.returnCancel)
				var result=picker.file.persistentDescriptor;
		}
		catch(ex) { displayMessage(ex.toString()); }
		return result;
	}
}
//}}}
/***
|Name|AttachFilePluginFormatters|
|Source|http://www.TiddlyTools.com/#AttachFilePluginFormatters|
|Version|4.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1.3|
|Type|plugin|
|Requires||
|Description|run-time library for displaying attachment tiddlers|

This plugin provides "stand-alone" processing for //rendering// attachment tiddlers created by [[AttachFilePlugin]].   Attachment tiddlers are tagged with<<tag attachment>>and contain binary file content (e.g., jpg, gif, pdf, mp3, etc.) that has been stored directly as base64 text-encoded data or can be loaded from external files stored on a local filesystem or remote web server.

NOTE: This plugin does not include the "control panel" and supporting functions needed to //create// new attachment tiddlers.  Those features are provided by [[AttachFilePlugin]], which can be installed while building your document, and then safely omitted to reduce the overall file size when you publish your finished document (assuming you don't intend to create any additional attachment tiddlers in that document)
!!!!!Formatters
<<<
This plugin extends the behavior of the following TiddlyWiki core "wikify()" formatters:
* embedded images: {{{[img[tooltip|image]]}}}
* linked embedded images: {{{[img[tooltip|image][link]]}}}
* external/"pretty" links: {{{[[label|link]]}}}
''Please refer to AttachFilePlugin (source: http://www.TiddlyTools.com/#AttachFilePlugin) for additional information.''
<<<
!!!!!Revisions
<<<
2009.06.04 [4.0.0] changed attachment storage format to use //sections// instead of embedded substring markers.
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info
2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
2007.10.29 [3.7.0] more code reduction: removed upload handling from AttachFilePlugin (saves ~7K!)
2007.10.28 [3.6.0] removed duplicate formatter code from AttachFilePlugin (saves ~10K!) and updated documentation accordingly.  This plugin ([[AttachFilePluginFormatters]]) is now //''required''// in order to display attached images/binary files within tiddler content.
2006.05.20 [3.4.0] through 2007.03.01 [3.5.3] sync with AttachFilePlugin
2006.05.13 [3.2.0] created from AttachFilePlugin v3.2.0
<<<
!!!!!Code
***/
// // version
//{{{
version.extensions.AttachFilePluginFormatters= {major: 4, minor: 0, revision: 0, date: new Date(2009,6,4)};
//}}}

//{{{
if (config.macros.attach==undefined) config.macros.attach= { };
//}}}
//{{{
if (config.macros.attach.isAttachment==undefined) config.macros.attach.isAttachment=function (title) {
	var tiddler = store.getTiddler(title);
	if (tiddler==undefined || tiddler.tags==undefined) return false;
	return (tiddler.tags.indexOf("attachment")!=-1);
}
//}}}

//{{{
// test for local file existence - returns true/false without visible error display
if (config.macros.attach.fileExists==undefined) config.macros.attach.fileExists=function(f) {
	if(window.Components) { // MOZ
		try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
		catch(e) { return false; } // security access denied
		var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
		try { file.initWithPath(f); }
		catch(e) { return false; } // invalid directory
		return file.exists();
	}
	else { // IE
		var fso = new ActiveXObject("Scripting.FileSystemObject");
		return fso.FileExists(f);
	}
}
//}}}

//{{{
if (config.macros.attach.getAttachment==undefined) config.macros.attach.getAttachment=function(title) {

	// extract embedded data, local and remote links (if any)
	var text=store.getTiddlerText(title,'');
	var embedded=store.getTiddlerText(title+'##data','').trim();
	var locallink=store.getTiddlerText(title+'##file','').trim();
	var remotelink=store.getTiddlerText(title+'##url','').trim();

	// backward-compatibility for older attachments (pre 4.0.0)
	var startmarker="---BEGIN_DATA---\n";
	var endmarker="\n---END_DATA---";
	var pos=0; var endpos=0;
	if ((pos=text.indexOf(startmarker))!=-1 && (endpos=text.indexOf(endmarker))!=-1)
		embedded="data:"+(text.substring(pos+startmarker.length,endpos)).replace(/\n/g,'');
	if ((pos=text.indexOf("/%LOCAL_LINK%/"))!=-1)
		locallink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));
	if ((pos=text.indexOf("/%REMOTE_LINK%/"))!=-1)
		remotelink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));

	// if there is a data: URI defined (not supported by IE)
	if (embedded.length && !config.browser.isIE) return embedded;

	// document is being served remotely... use remote URL (if any)  (avoids security alert)
	if (remotelink.length && document.location.protocol!="file:")
		return remotelink;  

	// local link only... return link without checking file existence (avoids security alert)
	if (locallink.length && !remotelink.length) 
		return locallink; 

	// local link, check for file exist... use local link if found
	if (locallink.length) { 
		locallink=locallink.replace(/^\.[\/\\]/,''); // strip leading './' or '.\' (if any)
		if (this.fileExists(getLocalPath(locallink))) return locallink;
		// maybe local link is relative... add path from current document and try again
		var pathPrefix=document.location.href;  // get current document path and trim off filename
		var slashpos=pathPrefix.lastIndexOf("/"); if (slashpos==-1) slashpos=pathPrefix.lastIndexOf("\\"); 
		if (slashpos!=-1 && slashpos!=pathPrefix.length-1) pathPrefix=pathPrefix.substr(0,slashpos+1);
		if (this.fileExists(getLocalPath(pathPrefix+locallink))) return locallink;
	}

	// no embedded data, no local (or not found), fallback to remote URL (if any)
	if (remotelink.length) return remotelink;

	// attachment URL doesn't resolve, just return input as is
	return title;
}
//}}}
//{{{
if (config.macros.attach.init_formatters==undefined) config.macros.attach.init_formatters=function() {
	if (this.initialized) return;

	// find the formatter for "image" and replace the handler
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="image"; i++);
	if (i<config.formatters.length)	config.formatters[i].handler=function(w) {
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) // Simple bracketted link
			{
			var e = w.output;
			if(lookaheadMatch[5])
				{
				var link = lookaheadMatch[5];
				// ELS -------------
				var external=config.formatterHelpers.isExternalLink(link);
				if (external)
					{
					if (config.macros.attach.isAttachment(link))
						{
						e = createExternalLink(w.output,link);
						e.href=config.macros.attach.getAttachment(link);
						e.title = config.macros.attach.linkTooltip + link;
						}
					else
						e = createExternalLink(w.output,link);
					}
				else 
					e = createTiddlyLink(w.output,link,false,null,w.isStatic);
				// ELS -------------
				addClass(e,"imageLink");
				}
			var img = createTiddlyElement(e,"img");
			if(lookaheadMatch[1])
				img.align = "left";
			else if(lookaheadMatch[2])
				img.align = "right";
			if(lookaheadMatch[3])
				img.title = lookaheadMatch[3];
			img.src = lookaheadMatch[4];
			// ELS -------------
			if (config.macros.attach.isAttachment(lookaheadMatch[4]))
				img.src=config.macros.attach.getAttachment(lookaheadMatch[4]);
			// ELS -------------
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
//}}}
//{{{
	// find the formatter for "prettyLink" and replace the handler
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="prettyLink"; i++);
	if (i<config.formatters.length)	{
		config.formatters[i].handler=function(w) {
			this.lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
				var e;
				var text = lookaheadMatch[1];
				if(lookaheadMatch[3]) {
					// Pretty bracketted link
					var link = lookaheadMatch[3];
					if (config.macros.attach.isAttachment(link)) {
						e = createExternalLink(w.output,link);
						e.href=config.macros.attach.getAttachment(link);
						e.title=config.macros.attach.linkTooltip+link;
					}
					else e = (!lookaheadMatch[2] && config.formatterHelpers.isExternalLink(link))
						? createExternalLink(w.output,link)
						: createTiddlyLink(w.output,link,false,null,w.isStatic);
				} else {
					e = createTiddlyLink(w.output,text,false,null,w.isStatic);
				}
				createTiddlyText(e,text);
				w.nextMatch = this.lookaheadRegExp.lastIndex;
			}
		}
	} // if "prettyLink" formatter found
	this.initialized=true;
}
//}}}
//{{{
config.macros.attach.init_formatters(); // load time init
//}}}
//{{{
if (TiddlyWiki.prototype.coreGetRecursiveTiddlerText==undefined) {
	TiddlyWiki.prototype.coreGetRecursiveTiddlerText = TiddlyWiki.prototype.getRecursiveTiddlerText;
	TiddlyWiki.prototype.getRecursiveTiddlerText = function(title,defaultText,depth) {
		return config.macros.attach.isAttachment(title)?
			config.macros.attach.getAttachment(title):this.coreGetRecursiveTiddlerText.apply(this,arguments);
	}
}
//}}}
For at tilføje artikler til Udvalgte artikler listen, tilføj tagget ''Udvalgt'' til artiklen.
for at fjerne den fra listen igen, fjernes tagget ''Udvalgt'' fra artiklen.
For at skjule en artikel fra indeks, tilføj tagget ''sysfile'' til artiklen.
!!Nb: Begge dele kan gøres direkte fra værktøjslinien fra "@@color:#C03;vælg status:@@"
|borderless|k
|alle artikler<<tiddlerList>>|sysfile<<tiddlerList tags:sysfile>>systemConfig:<<tiddlerList tags:systemConfig>>"""MiniPediaTheme"""<<tiddlerList tags:MiniPediaTheme>>|<<tabs txtMainTab "Tidslinie" "Tidslinie" TabTimeline "Alle" "Alle tiddlere" TabAll "Tags" "Alle tags" TabTags "Flere" "Flere lister" TabMore>>|
|>|>|<<options>>|
/***
|Name|CheckboxPlugin|
|Source|http://www.TiddlyTools.com/#CheckboxPlugin|
|Documentation|http://www.TiddlyTools.com/#CheckboxPluginInfo|
|Version|2.4.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Add checkboxes to your tiddler content|
This plugin extends the TiddlyWiki syntax to allow definition of checkboxes that can be embedded directly in tiddler content.  Checkbox states are preserved by:
* by setting/removing tags on specified tiddlers,
* or, by setting custom field values on specified tiddlers,
* or, by saving to a locally-stored cookie ID,
* or, automatically modifying the tiddler content (deprecated)
When an ID is assigned to the checkbox, it enables direct programmatic access to the checkbox DOM element, as well as creating an entry in TiddlyWiki's config.options[ID] internal data.  In addition to tracking the checkbox state, you can also specify custom javascript for programmatic initialization and onClick event handling for any checkbox, so you can provide specialized side-effects in response to state changes.
!!!!!Documentation
>see [[CheckboxPluginInfo]]
!!!!!Revisions
<<<
2008.01.08 [*.*.*] plugin size reduction: documentation moved to [[CheckboxPluginInfo]]
2008.01.05 [2.4.0] set global "window.place" to current checkbox element when processing checkbox clicks.  This allows init/beforeClick/afterClick handlers to reference RELATIVE elements, including using "story.findContainingTiddler(place)".  Also, wrap handlers in "function()" so "return" can be used within handler code.
|please see [[CheckboxPluginInfo]] for additional revision details|
2005.12.07 [0.9.0] initial BETA release
<<<
!!!!!Code
***/
//{{{
version.extensions.CheckboxPlugin = {major: 2, minor: 4, revision:0 , date: new Date(2008,1,5)};
//}}}
//{{{
config.checkbox = { refresh: { tagged:true, tagging:true, container:true } };
config.formatters.push( {
	name: "checkbox",
	match: "\\[[xX_ ][\\]\\=\\(\\{]",
	lookahead: "\\[([xX_ ])(=[^\\s\\(\\]{]+)?(\\([^\\)]*\\))?({[^}]*})?({[^}]*})?({[^}]*})?\\]",
	handler: function(w) {
		var lookaheadRegExp = new RegExp(this.lookahead,"mg");
		lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			// get params
			var checked=(lookaheadMatch[1].toUpperCase()=="X");
			var id=lookaheadMatch[2];
			var target=lookaheadMatch[3];
			if (target) target=target.substr(1,target.length-2).trim(); // trim off parentheses
			var fn_init=lookaheadMatch[4];
			var fn_clickBefore=lookaheadMatch[5];
			var fn_clickAfter=lookaheadMatch[6];
			var tid=story.findContainingTiddler(w.output);  if (tid) tid=tid.getAttribute("tiddler");
			var srctid=w.tiddler?w.tiddler.title:null;
			config.macros.checkbox.create(w.output,tid,srctid,w.matchStart+1,checked,id,target,config.checkbox.refresh,fn_init,fn_clickBefore,fn_clickAfter);
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
	}
} );
config.macros.checkbox = {
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		if(!(tiddler instanceof Tiddler)) { // if no tiddler passed in try to find one
			var here=story.findContainingTiddler(place);
			if (here) tiddler=store.getTiddler(here.getAttribute("tiddler"))
		}
		var srcpos=0; // "inline X" not applicable to macro syntax
		var target=params.shift(); if (!target) target="";
		var defaultState=params[0]=="checked"; if (defaultState) params.shift();
		var id=params.shift(); if (id && !id.length) id=null;
		var fn_init=params.shift(); if (fn_init && !fn_init.length) fn_init=null;
		var fn_clickBefore=params.shift();
		if (fn_clickBefore && !fn_clickBefore.length) fn_clickBefore=null;
		var fn_clickAfter=params.shift();
		if (fn_clickAfter && !fn_clickAfter.length) fn_clickAfter=null;
		var refresh={ tagged:true, tagging:true, container:false };
		this.create(place,tiddler.title,tiddler.title,0,defaultState,id,target,refresh,fn_init,fn_clickBefore,fn_clickAfter);
	},
	create: function(place,tid,srctid,srcpos,defaultState,id,target,refresh,fn_init,fn_clickBefore,fn_clickAfter) {
		// create checkbox element
		var c = document.createElement("input");
		c.setAttribute("type","checkbox");
		c.onclick=this.onClickCheckbox;
		c.srctid=srctid; // remember source tiddler
		c.srcpos=srcpos; // remember location of "X"
		c.container=tid; // containing tiddler (may be null if not in a tiddler)
		c.tiddler=tid; // default target tiddler 
		c.refresh = {};
		c.refresh.container = refresh.container;
		c.refresh.tagged = refresh.tagged;
		c.refresh.tagging = refresh.tagging;
		place.appendChild(c);
		// set default state
		c.checked=defaultState;
		// track state in config.options.ID
		if (id) {
			c.id=id.substr(1); // trim off leading "="
			if (config.options[c.id]!=undefined)
				c.checked=config.options[c.id];
			else
				config.options[c.id]=c.checked;
		}
		// track state in (tiddlername|tagname) or (fieldname@tiddlername)
		if (target) {
			var pos=target.indexOf("@");
			if (pos!=-1) {
				c.field=pos?target.substr(0,pos):"checked"; // get fieldname (or use default "checked")
				c.tiddler=target.substr(pos+1); // get specified tiddler name (if any)
				if (!c.tiddler || !c.tiddler.length) c.tiddler=tid; // if tiddler not specified, default == container
				if (store.getValue(c.tiddler,c.field)!=undefined)
					c.checked=(store.getValue(c.tiddler,c.field)=="true"); // set checkbox from saved state
			} else {
				var pos=target.indexOf("|"); if (pos==-1) var pos=target.indexOf(":");
				c.tag=target;
				if (pos==0) c.tag=target.substr(1); // trim leading "|" or ":"
				if (pos>0) { c.tiddler=target.substr(0,pos); c.tag=target.substr(pos+1); }
				if (!c.tag.length) c.tag="checked";
				var t=store.getTiddler(c.tiddler);
				if (t && t.tags)
					c.checked=t.isTagged(c.tag); // set checkbox from saved state
			}
		}
		// trim off surrounding { and } delimiters from init/click handlers
		if (fn_init) c.fn_init="(function(){"+fn_init.trim().substr(1,fn_init.length-2)+"})()";
		if (fn_clickBefore) c.fn_clickBefore="(function(){"+fn_clickBefore.trim().substr(1,fn_clickBefore.length-2)+"})()";
		if (fn_clickAfter) c.fn_clickAfter="(function(){"+fn_clickAfter.trim().substr(1,fn_clickAfter.length-2)+"})()";
		c.init=true; c.onclick(); c.init=false; // compute initial state and save in tiddler/config/cookie
	},
	onClickCheckbox: function(event) {
		window.place=this;
		if (this.init && this.fn_init) // custom function hook to set initial state (run only once)
			{ try { eval(this.fn_init); } catch(e) { displayMessage("Checkbox init error: "+e.toString()); } }
		if (!this.init && this.fn_clickBefore) // custom function hook to override changes in checkbox state
			{ try { eval(this.fn_clickBefore) } catch(e) { displayMessage("Checkbox onClickBefore error: "+e.toString()); } }
		if (this.id)
			// save state in config AND cookie (only when ID starts with 'chk')
			{ config.options[this.id]=this.checked; if (this.id.substr(0,3)=="chk") saveOptionCookie(this.id); }
		if (this.srctid && this.srcpos>0 && (!this.id || this.id.substr(0,3)!="chk") && !this.tag && !this.field) {
			// save state in tiddler content only if not using cookie, tag or field tracking
			var t=store.getTiddler(this.srctid); // put X in original source tiddler (if any)
			if (t && this.checked!=(t.text.substr(this.srcpos,1).toUpperCase()=="X")) { // if changed
				t.set(null,t.text.substr(0,this.srcpos)+(this.checked?"X":"_")+t.text.substr(this.srcpos+1),null,null,t.tags);
				if (!story.isDirty(t.title)) story.refreshTiddler(t.title,null,true);
				store.setDirty(true);
			}
		}
		if (this.field) {
			if (this.checked && !store.tiddlerExists(this.tiddler))
				store.saveTiddler(this.tiddler,this.tiddler,"",config.options.txtUserName,new Date());
			// set the field value in the target tiddler
			store.setValue(this.tiddler,this.field,this.checked?"true":"false");
			// DEBUG: displayMessage(this.field+"@"+this.tiddler+" is "+this.checked);
		}
		if (this.tag) {
			if (this.checked && !store.tiddlerExists(this.tiddler))
				store.saveTiddler(this.tiddler,this.tiddler,"",config.options.txtUserName,new Date());
			var t=store.getTiddler(this.tiddler);
			if (t) {
				var tagged=(t.tags && t.tags.indexOf(this.tag)!=-1);
				if (this.checked && !tagged) { t.tags.push(this.tag); store.setDirty(true); }
				if (!this.checked && tagged) { t.tags.splice(t.tags.indexOf(this.tag),1); store.setDirty(true); }
			}
			// if tag state has been changed, update display of corresponding tiddlers (unless they are in edit mode...)
			if (this.checked!=tagged) {
				if (this.refresh.tagged) {
					if (!story.isDirty(this.tiddler)) // the TAGGED tiddler in view mode
						story.refreshTiddler(this.tiddler,null,true); 
					else // the TAGGED tiddler in edit mode (with tags field)
						config.macros.checkbox.refreshEditorTagField(this.tiddler,this.tag,this.checked);
				}
				if (this.refresh.tagging)
					if (!story.isDirty(this.tag)) story.refreshTiddler(this.tag,null,true); // the TAGGING tiddler
			}
		}
		if (!this.init && this.fn_clickAfter) // custom function hook to react to changes in checkbox state
			{ try { eval(this.fn_clickAfter) } catch(e) { displayMessage("Checkbox onClickAfter error: "+e.toString()); } }
		// refresh containing tiddler (but not during initial rendering, or we get an infinite loop!) (and not when editing container)
		if (!this.init && this.refresh.container && this.container!=this.tiddler)
			if (!story.isDirty(this.container)) story.refreshTiddler(this.container,null,true); // the tiddler CONTAINING the checkbox
		return true;
	},
	refreshEditorTagField: function(title,tag,set) {
		var tagfield=story.getTiddlerField(title,"tags");
		if (!tagfield||tagfield.getAttribute("edit")!="tags") return; // if no tags field in editor (i.e., custom template)
		var tags=tagfield.value.readBracketedList();
		if (tags.contains(tag)==set) return; // if no change needed
		if (set) tags.push(tag); // add tag
		else tags.splice(tags.indexOf(tag),1); // remove tag
		for (var t=0;t<tags.length;t++) tags[t]=String.encodeTiddlyLink(tags[t]);
		tagfield.value=tags.join(" "); // reassemble tag string (with brackets as needed)
		return;
	}
}
//}}}
/***
|''Navn:''|DanishTranslationPlugin|
|''Beskrivelse:''|Translation of TiddlyWiki into Danish|
|''Forfatter:''|MartinBudden (mjbudden (at) gmail (dot) com)|
|''Kilde:''|www.example.com |
|''CodeRepository:''|http://svn.tiddlywiki.org/Trunk/association/locales/core/en/locale.en.js |
|''Version:''|0.3.7|
|''Dato:''|Jul 6, 2007|
|''Kommentarer:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev |
|''Licens:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.4|
***/

//{{{
//--
//-- Translateable strings
//--

// Strings in "double quotes" should be translated; strings in 'single quotes' should be left alone

config.locale = "da"; // W3C language tag

if (config.options.txtUserName == 'YourName') // do not translate this line, but do translate the next line
	merge(config.options,{txtUserName: "DitNavn"});

merge(config.tasks,{
	save: {text: "gem", tooltip: "Gem dine ændringer til denne TiddlyWiki", action: saveChanges},
	sync: {text: "synk", tooltip: "Synkronisér ændringer med andre TiddlyWiki filer og servere", content: '<<sync>>'},
	importTask: {text: "importér", tooltip: "Importér tiddlers og plugins fra andre TiddlyWiki filer og servere", content: '<<importTiddlers>>'},
	tweak: {text: "Tilpas", tooltip: "Tilpas TiddlyWikis udseende og opførsel", content: '<<options>>'},
	upgrade: {text: "upgradér", tooltip: "Upgrader TiddlyWikis kerne kode", content: '<<upgrade>>'},
	plugins: {text: "udvidelser", tooltip: "Administrér installerede udvidelser", content: '<<plugins>>'}
});

// Options that can be set in the options panel and/or cookies
merge(config.optionsDesc,{
	txtUserName: "Brugernavn til signering af dine ændringer",
	chkRegExpSearch: "Avend almindelige udtryk til søgninger",
	chkCaseSensitiveSearch: "Forskel på store og små bogstaver",
	chkIncrementalSearch: "Bogstav for bogstav-søgning",
	chkAnimate: "Anvend animationer",
	chkSaveBackups: "Gem en backupfil når der gemmes ændringer",
	chkAutoSave: "Gem automatisk ændringer",
	chkGenerateAnRssFeed: "Lav et RSS feed når der gemmes ændringer",
	chkSaveEmptyTemplate: "Lav en tom skabelon når der gemmes ændringer",
	chkOpenInNewWindow: "Åben internet links i et nyt vindue",
	chkToggleLinks: "Når man klikker på et link i åbne tiddlers lukkes de",
	chkHttpReadOnly: "Skjul redigeringsværktøjer når den vises over HTTP",
	chkForceMinorUpdate: "Opdatér ikke brugernavn og dato når tiddlers bliver ændrede",
	chkConfirmDelete: "Bed om bekræftelse før tiddlers slettes",
	chkInsertTabs: "Brug tab tasten til at indsætte tab tegn istedet for at hoppe imellem felter",
	txtBackupFolder: "Navn på mappe til brug for backups",
	txtMaxEditRows: "Maximum antal af rækker i edit bokse",
	txtFileSystemCharSet: "Default tegnsæt til at gemme ændringer (Kun i Firefox/Mozilla)"});

merge(config.messages,{
	customConfigError: "Der opstod problemer ved loading af udvidelser. Se PluginManager for detaljer",
	pluginError: "Fejl: %0",
	pluginDisabled: "Ikke udført fordi det er slået fra via 'systemConfigDisable' tag",
	pluginForced: "Udført fordi det er tvunget via 'systemConfigForce' tag",
	pluginVersionError: "Ikke udført fordi denne udvidelse kræver en nyere udgave af TiddlyWiki",
	nothingSelected: "Intet er valgt. Du er nødt til at vælge en eller flere ting først",
	savedSnapshotError: "Det ser ud som om denne TiddlyWiki er blevet gemt forkert. Se venligst http://www.tiddlywiki.com/#DownloadSoftware for details",
	subtitleUnknown: "(ukendt)",
	undefinedTiddlerToolTip: "Tiddleren '%0' findes ikke endnu",
	shadowedTiddlerToolTip: "Tiddleren '%0' findes ikke endnu, men har en foruddefineret skygge værdi",
	tiddlerLinkTooltip: "%0 - %1, %2",
	externalLinkTooltip: "Internet link til %0",
	noTags: "Der er ingen taggede tiddlere",
	notFileUrlError: "Du er nødt til at gemme denne TiddlyWiki til en fil før du kan gemme ændringer",
	cantSaveError: "Det er ikke muligt at gemme ændringer. Mulige grunde indbefatter:\n- din browser understøtter det ikke (Firefox, Internet Explorer, Safari og Opera virker alle fint hvis de er konfigurerede korrekt)\n- stien til din TiddlyWiki fil indeholder ulovlige tegn\n- TiddlyWiki HTML filen er blevet flyttet eller omdøbt",
	invalidFileError: "Den originale fil '%0' lader ikke til at være en rigtig TiddlyWiki",
	backupSaved: "Backup gemt",
	backupFailed: "Det lykkedes IKKE at gemme en backup fil",
	rssSaved: "RSS feed gemt",
	rssFailed: "Det lykkedes IKKE at gemme et RSS feed",
	emptySaved: "Tom skabelon gemt",
	emptyFailed: "Det lykkedes IKKE at gemme en tom skabelon",
	mainSaved: "Hoved TiddlyWiki fil gemt",
	mainFailed: "Det lykkedes IKKE at gemme hoved TiddlyWiki filen. Dine ændringer er IKKE blevet gemt",
	macroError: "Fejl i makro <<\%0>>",
	macroErrorDetails: "Fejl ved udførsel af makro <<\%0>>:\n%1",
	missingMacro: "Ingen sådan makro",
	overwriteWarning: "En tiddler med navnet '%0' findes allerede. Vælg OK for at overskrive den",
	unsavedChangesWarning: "ADVARSEL! Der er ugemte æmdringer i TiddlyWikien\n\nVælg OK for at gemme\nVælg FORTRYD for at afvise",
	confirmExit: "--------------------------------\n\nDer er ugemte ændringer i TiddlyWikien. Hvis du fortsætter vil du miste disse ændringer\n\n--------------------------------",
	saveInstructions: "GemÆndringer",
	unsupportedTWFormat: "Ikke understøttet TiddlyWiki format '%0'",
	tiddlerSaveError: "Fejl ved forsøg på at gemme tiddler '%0'",
	tiddlerLoadError: "Fejl ved load af tiddler '%0'",
	wrongSaveFormat: "Kan ikke gemme med formatet '%0'. Bruger standard format til at gemme.",
	invalidFieldName: "Ikke tilladt feltnavn %0",
	fieldCannotBeChanged: "Felt '%0' kan ikke ændres",
	loadingMissingTiddler: "Forsøger at hente tiddleren '%0' fra '%1' serveren ved:\n\n'%2' i arbejdsområdet '%3'",
	upgradeDone: "Opgradering til version %0 er nu fuldført\n\nKlik 'OK' for at genopfriske den nyligt opgraderede TiddlyWiki"});

merge(config.messages.messageClose,{
	text: "luk",
	tooltip: "luk dette meddelelsesområde"});

config.messages.backstage = {
	open: {text: "bagscenen", tooltip: "Åben bagsceneområdet for at ændre på nogle grundlæggende indstillinger"},
	close: {text: "luk", tooltip: "Luk bagsceneområdet"},
	prompt: "bagscenen: ",
	decal: {
		edit: {text: "edit", tooltip: "Redigér tiddleren '%0'"}
	}
};

config.messages.listView = {
	tiddlerTooltip: "Klik for at se hele denne tiddlers tekst",
	previewUnavailable: "(forhåndsvisning er ikke tilgængelig)"
};

config.messages.dates.months = ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November","December"];
config.messages.dates.days = ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"];
config.messages.dates.shortMonths = ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"];
config.messages.dates.shortDays = ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"];
// suffixes for dates, eg "1ste","2den","3die"..."30te","31te"
config.messages.dates.daySuffixes = ["ste","den","die","te","te","te","te","te","te","te",
		"te","te","te","te","te","te","te","te","te","te",
		"ste","den","die","te","te","te","te","te","te","te",
		"te"];
config.messages.dates.am = "formiddag";
config.messages.dates.pm = "eftermiddag";

merge(config.messages.tiddlerPopup,{
	});

merge(config.views.wikified.tag,{
	labelNoTags: "ingen tags",
	labelTags: "tags: ",
	openTag: "Åben tag '%0'",
	tooltip: "Vis tiddlere der er taggede med '%0'",
	openAllText: "Åben alle",
	openAllTooltip: "Åben alle disse tiddlere",
	popupNone: "Ingen andre tiddlere er taggede med '%0'"});

merge(config.views.wikified,{
	defaultText: "Tiddleren '%0' findes ikke endnu. Dobbelt-klik for at lave den",
	defaultModifier: "(mangler)",
	shadowModifier: "(indbygget skygge tiddler)",
	dateFormat: "DD MMM YYYY", // use this to change the date format for your locale, eg "YYYY MMM DD", do not translate the Y, M or D
	createdPrompt: "lavet"});

merge(config.views.editor,{
	tagPrompt: "Skriv tags delt med mellemrum, [[brug 2 dobbelte firkantede klammer]] om nødvendigt, eller tilføj allerede eksisterende",
	defaultText: "Skriv teksten til '%0'"});

merge(config.views.editor.tagChooser,{
	text: "tags",
	tooltip: "Vælg eksisterende tags som tilføjelse til denne tiddler",
	popupNone: "Der er ikke defineret nogen tags",
	tagTooltip: "Tilføj tagget '%0'"});

merge(config.messages,{
	sizeTemplates:
		[
		{unit: 1024*1024*1024, template: "%0\u00a0GB"},
		{unit: 1024*1024, template: "%0\u00a0MB"},
		{unit: 1024, template: "%0\u00a0KB"},
		{unit: 1, template: "%0\u00a0B"}
		]});

merge(config.macros.search,{
	label: "søg",
	prompt: "Søg i denne TiddlyWiki",
	accessKey: "F",
	successMsg: "Der er fundet %0 tiddlere som matcher %1",
	failureMsg: "Der er ikke fundet nogen tiddlere som matcher %0"});

merge(config.macros.tagging,{
	label: "tagger: ",
	labelNotTag: "tagger ikke",
	tooltip: "Liste over tiddlere der er taggede med '%0'"});

merge(config.macros.timeline,{
	dateFormat: "DD MMM YYYY"});// use this to change the date format for your locale, eg "YYYY MMM DD", do not translate the Y, M or D

merge(config.macros.allTags,{
	tooltip: "Vis tiddlere der er taggede med '%0'",
	noTags: "Der er ingen taggede tiddlere"});

config.macros.list.all.prompt = "Alle tiddlere i alfabetisk orden";
config.macros.list.missing.prompt = "Tiddlere der linkes til men som ikke er definerede";
config.macros.list.orphans.prompt = "Tiddlere som der ikke linkes til fra nogen andre tiddlere";
config.macros.list.shadowed.prompt = "Tiddlere som er skyggede med grundlæggende indhold";
config.macros.list.touched.prompt = "Tiddlere som er blevet ændret lokalt ";

merge(config.macros.closeAll,{
	label: "luk alle",
	prompt: "Luk alle viste tiddlere (untaget dem som er ved at blive redigerede)"});

merge(config.macros.permaview,{
	label: "vis link",
	prompt: "Lav et link til en URL som henter alle de netop nu synlige tiddlere"});

merge(config.macros.saveChanges,{
	label: "gem ændringer",
	prompt: "Gem alle tiddlere for at lave en ny TiddlyWiki",
	accessKey: "S"});

merge(config.macros.newTiddler,{
	label: "ny tiddler",
	prompt: "Lav en ny tiddler",
	title: "Ny Tiddler",
	accessKey: "N"});

merge(config.macros.newJournal,{
	label: "ny journal",
	prompt: "Lav en ny tiddler ud fra nuværende dato og tid",
	accessKey: "J"});

merge(config.macros.options,{
	wizardTitle: "Tilpas avancerede muligheder",
	step1Title: "Disse muligheder gemmes i cookies i din browser",
	step1Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='false' name='chkUnknown'>Show unknown options</input>",
	unknownDescription: "//(ukendt)//",
	listViewTemplate: {
		columns: [
			{name: 'Option', field: 'option', title: "Option", type: 'String'},
			{name: 'Description', field: 'description', title: "Description", type: 'WikiText'},
			{name: 'Name', field: 'name', title: "Name", type: 'String'}
			],
		rowClasses: [
			{className: 'lowlight', field: 'lowlight'}
			]}
	});

merge(config.macros.plugins,{
	wizardTitle: "Administrer udvidelser",
	step1Title: "Aktive udvidelser",
	step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
	skippedText: "(Denne udvidelse er ikke blevet aktiveret fordi den først er blevet tilføjet efter start)",
	noPluginText: "Der er ikke installeret nogen udvidelser",
	confirmDeleteText: "Er du sikker på at du vil slette disse udvidelser:\n\n%0",
	removeLabel: "Fjern systemConfig tag",
	removePrompt: "Fjern systemConfig tag",
	deleteLabel: "slet",
	deletePrompt: "Slet disse tiddlere permanent",
	listViewTemplate: {
		columns: [
			{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "Tiddler", type: 'Tiddler'},
			{name: 'Size', field: 'size', tiddlerLink: 'size', title: "Size", type: 'Size'},
			{name: 'Forced', field: 'forced', title: "Forced", tag: 'systemConfigForce', type: 'TagCheckbox'},
			{name: 'Disabled', field: 'disabled', title: "Disabled", tag: 'systemConfigDisable', type: 'TagCheckbox'},
			{name: 'Executed', field: 'executed', title: "Loaded", type: 'Boolean', trueText: "Yes", falseText: "No"},
			{name: 'Startup Time', field: 'startupTime', title: "Startup Time", type: 'String'},
			{name: 'Error', field: 'error', title: "Status", type: 'Boolean', trueText: "Error", falseText: "OK"},
			{name: 'Log', field: 'log', title: "Log", type: 'StringList'}
			],
		rowClasses: [
			{className: 'error', field: 'error'},
			{className: 'warning', field: 'warning'}
			]}
	});

merge(config.macros.toolbar,{
	moreLabel: "mere",
	morePrompt: "Vis flere muligheder"
	});

merge(config.macros.refreshDisplay,{
	label: "genopfrisk",
	prompt: "Genopfrisk hele TiddlyWikiens udseende"
	});

merge(config.macros.importTiddlers,{
	readOnlyWarning: "Du kan ikke importere til en låst TiddlyWiki fil. Prøv at åbne den fra en fil:// URL",
	wizardTitle: "Importer tiddlere fra en anden fil eller server",
	step1Title: "Trin 1: Find serveren eller TiddlyWiki filen",
	step1Html: "Vælg servertypen: <select name='selTypes'><option value=''>Choose...</option></select><br>Indskriv webadresse eller sti her: <input type='text' size=50 name='txtPath'><br>...eller søg efter en fil: <input type='file' size=50 name='txtBrowse'><br><hr>...eller vælg et forudbestemt feed: <select name='selFeeds'><option value=''>Vælg...</option></select>",
	openLabel: "åbn",
	openPrompt: "Åbn forbindelsen til denne fil eller server",
	openError: "Der var problemer med at hente tiddlywiki filen",
	statusOpenHost: "Forbinder til hosten",
	statusGetWorkspaceList: "Henter en liste over tilgængelige arbejdsområder",
	step2Title: "Trin 2: Vælg arbejdsområde",
	step2Html: "Indskriv et navn på arbejdsområdet: <input type='text' size=50 name='txtWorkspace'><br>...eller vælg et der allerede er der: <select name='selWorkspace'><option value=''>Choose...</option></select>",
	cancelLabel: "fortryd",
	cancelPrompt: "Fortryd denne import",
	statusOpenWorkspace: "Åben arbejdsområdet",
	statusGetTiddlerList: "Henter listen over tilgængelige tiddlere",
	errorGettingTiddlerList: "Fejl ved hentning af liste over tiddlere, klik Fortryd for at prøve igen",
	step3Title: "Trin 3: Vælg hvilke tiddlere der skal importeres",
	step3Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='true' name='chkSync'>Keep these tiddlers linked to this server so that you can synchronise subsequent changes</input><br><input type='checkbox' name='chkSave'>Save the details of this server in a 'systemServer' tiddler called:</input> <input type='text' size=25 name='txtSaveTiddler'>",
	importLabel: "importer",
	importPrompt: "Importer disse tiddlere",
	confirmOverwriteText: "Er du sikker på at du vil overskrive disse tiddlere:\n\n%0",
	step4Title: "Trin 4: Importerer %0 tiddler(e)",
	step4Html: "<input type='hidden' name='markReport'></input>", // DO NOT TRANSLATE
	doneLabel: "udført",
	donePrompt: "Luk denne wizard",
	statusDoingImport: "Importerer tiddlere",
	statusDoneImport: "Alle tiddlere er importede",
	systemServerNamePattern: "%2 on %1",
	systemServerNamePatternNoWorkspace: "%1",
	confirmOverwriteSaveTiddler: "Tiddleren '%0' findes allerede. Klik 'OK' for at overskrive den med detaljerne fra denne server, eller 'Fortryd' for at efterlade uændret",
	serverSaveTemplate: "|''Type:''|%0|\n|''URL:''|%1|\n|''Workspace:''|%2|\n\nDenne tiddler blev lavet automatisk for at skrive denne servers detaljer",
	serverSaveModifier: "(System)",
	listViewTemplate: {
		columns: [
			{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "Tiddler", type: 'Tiddler'},
			{name: 'Size', field: 'size', tiddlerLink: 'size', title: "Size", type: 'Size'},
			{name: 'Tags', field: 'tags', title: "Tags", type: 'Tags'}
			],
		rowClasses: [
			]}
	});

merge(config.macros.upgrade,{
	wizardTitle: "Opgrader TiddlyWikis kerne kode",
	step1Title: "Opdater eller reparer denne TiddlyWiki til sidste nye udgivelse",
	step1Html: "Du er ved at opgradere til sidste nye udgave af TiddlyWikis kerne kode (from <a href='%0' class='externalLink' target='_blank'>%1</a>). Dit indhold vil blive bibeholdt under opgraderinen.<br><br>Bemærk at opgraderinger kan konfikte med gamle udvidelser. Hvis du får problemer med den opgraderede fil se her <a href='http://www.tiddlywiki.org/wiki/CoreUpgrades' class='externalLink' target='_blank'>http://www.tiddlywiki.org/wiki/CoreUpgrades</a>",
	errorCantUpgrade: "Kan ikke opgradere denne TiddlyWiki. Du kan kun opgradere en TiddlyWiki fil som er gemt lokalt på en pc",
	errorNotSaved: "Du skal gemme ændringer før du kan gennemføre en opgradering",
	step2Title: "Bekræft opgraderingsdetaljer",
	step2Html_downgrade: "Du er ved at nedgradere til TiddlyWiki version %0 fra %1.<br><br>Nedgradering til en ældre udgave af kerne koden er IKKE tilrådeligt",
	step2Html_restore: "Denne tiddlyWike bruger allerede den sidste nye kerne kode (%0).<br><br>Du kan fortsætte med opgraderingen for at sikre dig at koden ikke er blevet ødelagt",
	step2Html_upgrade: "Du er ved at opgradere til TiddlyWiki version %0 fra %1",
	upgradeLabel: "opgrader",
	upgradePrompt: "Forbered opgraderingsprocessen",
	statusPreparingBackup: "Forbereder backup",
	statusSavingBackup: "Gemmer backup fil",
	errorSavingBackup: "Der var problemer med at gemme backup filen",
	statusLoadingCore: "Loader kernekoden",
	errorLoadingCore: "Fejl ved load af kernekoden",
	errorCoreFormat: "Fejl ved den nye kernekode",
	statusSavingCore: "Gemmer den nye kernekode",
	statusReloadingCore: "Genloader den nye kernekode",
	startLabel: "start",
	startPrompt: "Start opgraderingsprocessen",
	cancelLabel: "fortryd",
	cancelPrompt: "Fortryd opgraderingsprocessen",
	step3Title: "Opgradering afbrudt",
	step3Html: "Du har afbrudt opgraderingsprocessen"
	});

merge(config.macros.sync,{
	listViewTemplate: {
		columns: [
			{name: 'Selected', field: 'selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "Tiddler", type: 'Tiddler'},
			{name: 'Server Type', field: 'serverType', title: "Server type", type: 'String'},
			{name: 'Server Host', field: 'serverHost', title: "Server host", type: 'String'},
			{name: 'Server Workspace', field: 'serverWorkspace', title: "Server workspace", type: 'String'},
			{name: 'Status', field: 'status', title: "Synchronisation status", type: 'String'},
			{name: 'Server URL', field: 'serverUrl', title: "Server URL", text: "View", type: 'Link'}
			],
		rowClasses: [
			],
		buttons: [
			{caption: "Synkronisér disse tiddlere", name: 'sync'}
			]},
	wizardTitle: "Synkroniser med internet servere og filer",
	step1Title: "Vælg hvilke tiddlere du vil synkronisere",
	step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
	syncLabel: "synk",
	syncPrompt: "Synkronisér disse tiddlere",
	hasChanged: "Ændret imens den var koblet fra",
	hasNotChanged: "Uændret imens den var koblet fra",
	syncStatusList: {
		none: {text: "...", color: "gennemsigtig", display:null},
		changedServer: {text: "Ændret på serveren", color: '#8080ff', display:null},
		changedLocally: {text: "Ændret imens den var koblet fra", color: '#80ff80', display:null},
		changedBoth: {text: "ændret imens den var koblet fra også på serveren", color: '#ff8080', display:null},
		notFound: {text: "Ikke fundet på serveren", color: '#ffff80', display:null},
		putToServer: {text: "Gemt update på serveren", color: '#ff80ff', display:null},
		gotFromServer: {text: "Hentet update fra serveren", color: '#80ffff', display:null}
		}
	});

merge(config.commands.closeTiddler,{
	text: "luk",
	tooltip: "Luk denne tiddler"});

merge(config.commands.closeOthers,{
	text: "luk andre",
	tooltip: "Luk alle andre tiddlere"});

merge(config.commands.editTiddler,{
	text: "redigér",
	tooltip: "Redigér denne tiddler",
	readOnlyText: "se",
	readOnlyTooltip: "Se denne tiddlers kilde"});

merge(config.commands.saveTiddler,{
	text: "færdig",
	tooltip: "Gem ændringer til denne tiddler"});

merge(config.commands.cancelTiddler,{
	text: "fortryd",
	tooltip: "Fortryd ændringer til denne tiddler",
	warning: "Er du sikker på at du vil fortryde dine ændringer til  '%0'?",
	readOnlyText: "færdig",
	readOnlyTooltip: "Se tiddlere normalt"});

merge(config.commands.deleteTiddler,{
	text: "slet",
	tooltip: "Slet denne tiddler",
	warning: "Er du sikker på at du vil slette '%0'?"});

merge(config.commands.permalink,{
	text: "link",
	tooltip: "Link til denne tiddler"});

merge(config.commands.references,{
	text: "referencer",
	tooltip: "Vis tiddlere som linker til denne tiddler",
	popupNone: "Ingen referencer"});

merge(config.commands.jump,{
	text: "spring",
	tooltip: "Spring til en anden tiddler"});

merge(config.commands.syncing,{
	text: "synkroniserer",
	tooltip: "Kontroller synkronisering af denne tiddler med en server eller en fil",
	currentlySyncing: "<div>Currently syncing via <span class='popupHighlight'>'%0'</span> to:</"+"div><div>host: <span class='popupHighlight'>%1</span></"+"div><div>workspace: <span class='popupHighlight'>%2</span></"+"div>", // Note escaping of closing <div> tag
	notCurrentlySyncing: "Sykroniserer ikke lige nu",
	captionUnSync: "Stop synkronisering af denne tiddler",
	chooseServer: "Synkronisér denne tiddler med en anden server:",
	currServerMarker: "\u25cf ",
	notCurrServerMarker: "  "});

merge(config.commands.fields,{
	text: "felter",
	tooltip: "Vis denne tiddlers udvidede felter",
	emptyText: "Der er ingen udvidede felter til rådighed for denne tiddler",
	listViewTemplate: {
		columns: [
			{name: 'Field', field: 'field', title: "Field", type: 'String'},
			{name: 'Value', field: 'value', title: "Value", type: 'String'}
			],
		rowClasses: [
			],
		buttons: [
			]}});

merge(config.shadowTiddlers,{
	DefaultTiddlers: "[[TranslatedGettingStarted]]",
	MainMenu: "[[TranslatedGettingStarted]]\n\n\n^^~TiddlyWiki version <<version>>\n© 2007 [[UnaMesa|http://www.unamesa.org/]]^^",
	TranslatedGettingStarted: "For at komme i gang med denne tomme tiddlywiki, skal du ændre på de følgende tiddlere:\n* SiteTitle & SiteSubtitle: Sidens titel og undertitel, som vist øverst (efter de er gemt, vil de også vise sig i browserens titelmenu)\n* MainMenu: er hovedmenuen (er oftest placeret til venstre)\n* DefaultTiddlers: Indeholder navnene på de tiddlere du vilhave skal starte op når du åbner TiddlyWiki\nDu skal også skrive dit brugernavn for at signere dine redigeringer: <<option txtUserName>>",
	SiteTitle: "Min TiddlyWiki",
	SiteSubtitle: "en genbrugelig ikke-liniær personlig web notesbog",
	SiteUrl: "http://www.tiddlywiki.com/",
	OptionsPanel: "Disse muligheder for at ændre på TiddlyWiki bliver gemt i din browser\n\nDit brugernavn til at signere dine ændringer. Skriv det som et WikiOrd (f.eks. PerPoulsen)\n<<option txtUserName>>\n\n<<option chkSaveBackups>> Save backups\n<<option chkAutoSave>> Auto save\n<<option chkRegExpSearch>> Regexp search\n<<option chkCaseSensitiveSearch>> Case sensitive search\n<<option chkAnimate>> Enable animations\n\n----\nAlso see [[TranslatedAdvancedOptions|AdvancedOptions]]",
	SideBarOptions: '<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "muligheder \u00bb" "Ændre på TiddlyWikis avancerede muligheder">>',
	SideBarTabs: '<<tabs txtMainTab "Tidslinie" "Tidslinie" TabTimeline "Alle" "Alle tiddlere" TabAll "Tags" "Alle tags" TabTags "Flere" "Flere lister" TabMore>>',
	TabMore: '<<tabs txtMoreTab "Manglende" "Manglende tiddlere" TabMoreMissing "Uden tilknytning" "Tiddlere" TabMoreOrphans "Skyggede" "Skyggede tiddlere" TabMoreShadowed>>'
	});

merge(config.annotations,{
	AdvancedOptions: "Denne skygge tiddler giver adgang til flere avancerede muligheder",
	ColorPalette: "Disse værdier i denne skyggetiddler bestemmer hvilket farveskema, der bliver brugt til ~TiddlyWikis brugerflade",
	DefaultTiddlers: "Tiddlere som er listede i denne skyggetiddler vil automatisk blive vist når ~TiddlyWiki starter op",
	EditTemplate: "HTML skabelonen i denne skyggetiddler bestemmer hvordan tiddlere ser ud når de bliver redigerede",
	GettingStarted: "Denne skyggetiddler giver instruktioner om grundlæggende anvendelse",
	ImportTiddlers: "Denne skyggetiddler giver mulighed for at importere tiddlere",
	MainMenu: "Denne tiddler bliver brugt til at definere indholdet af hoved menuen i venstre side af skærmen",
	MarkupPreHead: "Denne tiddler bliver indsat i toppen af <head> sektionen på TiddlyWiki HTML filen",
	MarkupPostHead: "Denne tiddler bliver indsat i bunden af <head> sektionen på TiddlyWiki HTML filen",
	MarkupPreBody: "Denne tiddler bliver indsat i toppen af<body> sektionen på TiddlyWiki HTML filen",
	MarkupPostBody: "Denne tiddler bliver indsat i slutningen af  <body> sektionen på TiddlyWiki HTML filen umiddelbart efter script blokken",
	OptionsPanel: "Denne skyggetiddler bliver brugt til indholdet af muligheder skydepanelet i højre side",
	PageTemplate: "HTML skabelonen i denne skyggetiddler bestemmer det overordnede ~TiddlyWiki layout",
	PluginManager: "Denne skyggetiddler giver adgang til udvidelsesadministrationen",
	SideBarOptions: "Denne skyggetiddler bruges til indholdet af muligheder panelet i højre sidemenu",
	SideBarTabs: "Denne skyggetiddler bruges til indholdet af fanebladspanelet i højre sidemenu",
	SiteSubtitle: "Denne skyggetiddler bruges som anden del af sidens titel",
	SiteTitle: "Denne skyggetiddler bruges som første del af sidens titel",
	SiteUrl: "Denne skyggetiddler bør sættes til den fulde mål-URL til publikation",
	StyleSheetColors: "Denne skyggetiddler indeholder CSS definitionerne der bestemmer farverne på side elementerne. ''REDIGÉR IKKE DENNE TIDDLER'', lav i stedet dine ændringer i StyleSheet skyggetiddleren",
	StyleSheet: "Denne tiddler kan indeholde specialle CSS definitioner",
	StyleSheetLayout: "Denne skyggetiddler indeholder CSS definitioner der bestemmer layoutet på side elementer. ''REDIGÉR IKKE DENNE TIDDLER'', lav i stedet dine ændringer i StyleSheet skyggetiddleren",
	StyleSheetLocale: "Denne skyggetiddler indeholder CSS definitioner relateret til lokale oversættelser",
	StyleSheetPrint: "Denne skyggetiddler indeholder CSS definitioner til print",
	TabAll: "Denne skyggetiddler indeholder hvad der er i 'Alle' fanen i højre sidemenu",
	TabMore: "Denne skyggetiddler indeholder  hvad der er i 'Flere' fanen i højre sidemenu",
	TabMoreMissing: "Denne skyggetiddler indeholder  hvad der er i 'Mangler' fanen i højre sidemenu",
	TabMoreOrphans: "Denne skyggetiddler indeholder  hvad der er i  'Mangler tilknytning' fanen i højre sidemenu",
	TabMoreShadowed: "Denne skyggetiddler indeholder  hvad der er i 'Skyggede' fanen i højre sidemenu",
	TabTags: "Denne skyggetiddler indeholder  hvad der er i 'Tags' fanen i højre sidemenu",
	TabTimeline: "Denne skyggetiddler indeholder hvad der er i 'Tidslinie' fanen i højre sidemenu",
	ToolbarCommands: "Denne skyggetiddler bestemmer hvilke værktøjer der vises i tiddleres værktøjslinier",
	ViewTemplate: "HTML skabelonen i denne skyggetiddler bestemmer hvordan tiddlere ser ud"
	});

//}}}
[[Hjem]]
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='editor' macro='edit title'></div><div macro='tiddler QuickEditToolbar'></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'></span><br><span>To add items to the featured articles list on the left, add the <strong>Featured</strong> tag to the entry.<br>To remove from the featured articles list on the left, remove the tag <strong>Featured</strong> tag from the entry.<br>To hide the article from the index, add the <strong>sysfile</strong> tag to the entry.</span></div>
<!--}}}-->
Dette er et eksempel på en udvalgt artikel. Du kan udvælge artikler ved at tilføje "Udvalgt" tagget til dem. 
*I værktøjslinien øverst i hver artikel (ud for "status:") kan du klikke på ''udvalgt'' og arktiklens titel kommer automatisk til syne i [[hovedmenuen|MainMenu]] til venstre. 
*Når en artikel er tagget med ''Udvalgt'' vises et lille minus (-) (ud for "status:") og du kan fjerne tagget ved at klikke på det. 
*Når en artikel er tagget med ''Udvalgt'' står der ''sysfile'' (ud for "status:") i værktøjslinien. Klikker du på ''sysfile'', fjernes tagget ''Udvalgt'' og artiklen tagges med ''sysfile'' i stedet. 
*Når en artikel er tagget med ''sysfile'' skjules den fra [[den alfabetiske liste over alle artikler|artikler A-Å]]. 
*Klikker du derimod på minus (-) fjernes ''sysfile'' eller ''Udvalgt'' tagget - og artiklen kommer med i listen.
*Husk at læse [[Wiki Syntaks]] for at kunne udnytte denne wiki optimalt.
/***
|Name|FileDropPlugin|
|Source|http://www.TiddlyTools.com/#FileDropPlugin|
|Version|2.1.3|
|Author|BradleyMeck and Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|drag-and-drop files/directories to create tiddlers|
''requires FireFox or another Mozilla-compatible browser.''
!!!!!Usage
<<<
This plugin automatically creates tiddlers from files that are dropped onto an open TiddlyWiki document.  You can drop multiple selected files and/or folders to create many tiddlers at once.  New tiddler titles are created using the filename of each dropped file (i.e., omitting the path).  If a title is already in use, you are prompted to enter a new title for that file.  If you drop a folder, you will be asked if you want to create a simple 'directory list' of files in a single tiddler or create one tiddler for each file in that folder.  

By default, it is assumed that all dropped files contain text.  However, if [[AttachFilePlugin]], [[AttachFilePluginFormatters]] and [[AttachFileMIMETypes]] are installed, then you can drop ''//binary data files//'' as well as text files.  If the MIME type of a dropped file is not "text/plain", then AttachFilePlugin is used to create an 'attachment' tiddler, rather than creating a simple text tiddler.

When creating text tiddlers, you can embed a //link// to the original external file at the top of the new tiddler, in addition to (or instead of) the text content itself.  The format for this link (see Configuration, below) uses embedded ''//replacement markers//'' that allow you to generate a variety of wiki-formatted output, where:
*%0 = filename (without path)
*%1 = local """file://...""" URL
*%2 = local path and filename (OS-native format)
*%3 = relative path (if subdirectory of current document directory)
*%4 = file size
*%5 = file date
*%6 = current date
*%7 = current ~TiddlyWiki username
*\n = newline
By default, the link format uses the filename (%0) and local URL (%1), enclosed within a //hidden section// syntax, like this:
{{{
/%
!link
[[%0|%1]]
!end
%/
}}}
This permits the link to be embedded along with the text content, without changing the appearance of that content when the tiddler is viewed.  To display the link in your tiddler content, use:
{{{
<<tiddler TiddlerName##link>>
}}}
<<<
!!!!!Configuration
<<<
__FileDropPlugin options:__
<<option chkFileDropContent>>Copy file content into tiddlers if smaller than: <<option txtFileDropDataLimit>> bytes
&nbsp; //(note: excess text content will be truncated, oversized binary files will skipped, 0=no limit)//
<<option chkFileDropLink>>Generate external links to files, using this format:{{editor{<html><nowiki><textarea rows="4" onchange="
config.macros.option.propagateOption('txtFileDropLinkFormat','value',this.value.escapeLineBreaks(),'input');
"></textarea></html><<tiddler {{
	var ta=place.lastChild.getElementsByTagName('textarea')[0];
	var v=config.options.txtFileDropLinkFormat.unescapeLineBreaks();
	ta.value=v;
"";}}>>}}}<<option chkFileDropTrimFilename>>Omit file extensions from tiddler titles
<<option chkFileDropDisplay>>Automatically display newly created tiddlers
Tag newly created tiddlers with: <<option txtFileDropTags>>

__FileDropPlugin+AttachFilePlugin options:__ //(binary file data as encoded 'base64' text)//
<<option chkFileDropAttachLocalLink>> attachment includes reference to local path/filename
>Note: if the plugin does not seem to work, enter ''about:config'' in the Firefox address bar, and make sure that {{{signed.applets.codebase_principal_support}}} is set to ''true''
<<<
!!!!!Examples (custom handler functions)
<<<
Adds a single file with confirmation and prompting for title:
{{{
config.macros.fileDrop.addEventListener('application/x-moz-file',
	function(nsiFile) {
		var msg='You have dropped the file:\n'
			+nsiFile.path+'\n'
			+'onto the page, it will be imported as a tiddler. Is that ok?'
		if(confirm(msg)) {
			var newDate = new Date();
			var title = prompt('what would you like to name the tiddler?');
			store.saveTiddler(title,title,loadFile(nsiFile.path),config.options.txtUserName,newDate,[]);
		}
		return true;
	});
}}}
Adds a single file without confirmation, using path/filename as tiddler title:
{{{
config.macros.fileDrop.addEventListener('application/x-moz-file',
	function(nsiFile) {
		var newDate = new Date();
		store.saveTiddler(nsiFile.path,nsiFile.path,loadFile(nsiFile.path),config.options.txtUserName,newDate,[]);
		story.displayTiddler(null,nsiFile.path)
		return true;
	});
}}}
<<<
!!!!!Revisions
<<<
2009.10.10 2.1.3 ELS fixed IE code error
2009.10.08 2.1.2 ELS fixed chkFileDropContent bypass handling for binary attachments
2009.10.07 2.1.0 ELS added chkFileDropContent and chkFileDropLink/txtFileDropLinkFormat
2009.08.19 2.0.0 ELS fixed event listener registration for FireFox 3.5+.  Also, merged with FileDropPluginConfig, with code cleanup/reduction
2008.08.11 1.5.1 ELS added chkFileDropAttachLocalLink option to allow suppression of local path/file link
2007.xx.xx *.*.* ELS add suspend/resume of notifications to improve performance when multiple files are handled
2007.01.01 0.9.9 ELS extensions for AttachFilePlugin
2006.11.04 0.1.1 initial release by Bradley Meck
<<<
!!!!!Code
***/
//{{{
version.extensions.FileDropPlugin={major:2, minor:1, revision:3, date: new Date(2009,10,10)};

config.macros.fileDrop = {
	customDropHandlers: [],
	addEventListener: function(paramflavor,func,inFront) {
		var obj={}; obj.flavor=paramflavor; obj.handler=func;
		if (!inFront) this.customDropHandlers.push(obj);
		else this.customDropHandlers.shift(obj);
	},
	dragDropHandler: function(evt) {
		netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
		var dragService = Components.classes['@mozilla.org/widget/dragservice;1'].getService(Components.interfaces.nsIDragService);
		var dragSession = dragService.getCurrentSession();
		var transferObject = Components.classes['@mozilla.org/widget/transferable;1'].createInstance();
		transferObject = transferObject.QueryInterface(Components.interfaces.nsITransferable);
		transferObject.addDataFlavor('application/x-moz-file');
		var numItems = dragSession.numDropItems;
		if (numItems>1) {
			clearMessage();
			displayMessage('Reading '+numItems+' files...');
			store.suspendNotifications();
		}
		for (var i = 0; i < numItems; i++) {
			dragSession.getData(transferObject, i);
			var dataObj = {};
			var dropSizeObj = {};
			for(var ind=0; ind<config.macros.fileDrop.customDropHandlers.length; ind++) {
				var item = config.macros.fileDrop.customDropHandlers[ind];
				if(dragSession.isDataFlavorSupported(item.flavor)) {
					transferObject.getTransferData(item.flavor, dataObj, dropSizeObj);
					var droppedFile = dataObj.value.QueryInterface(Components.interfaces.nsIFile);
					var result = item.handler.call(item,droppedFile);
					evt.stopPropagation();
					evt.preventDefault();
					if (result) break;
				}
			}
		}
		if (numItems>1) {
			store.resumeNotifications();
			store.notifyAll();
			displayMessage(numItems+' files have been processed');
		}
	}
}
//}}}
/***
!!!!!window event handlers
***/
//{{{
if(!window.event) {
	window.addEventListener('dragdrop', config.macros.fileDrop.dragDropHandler, true); // FireFox3.1-
	window.addEventListener('drop', config.macros.fileDrop.dragDropHandler, true); // FireFox3.5+
}
//}}}
/***
!!!!!handler for files, directories and binary attachments (see [[AttachFilePlugin]])
***/
//{{{
var defaults={
	chkFileDropDisplay:		true,
	chkFileDropTrimFilename:	false,
	chkFileDropContent:		true,
	chkFileDropLink:		true,
	txtFileDropLinkFormat:		'/%\\n!link\\n[[%0|%1]]\\n!end\\n%/',
	txtFileDropDataLimit:		'32768',
	chkFileDropAttachLocalLink:	true,
	txtFileDropTags:		''
};
for (var id in defaults) if (config.options[id]===undefined)
	config.options[id]=defaults[id];

config.macros.fileDrop.addEventListener('application/x-moz-file',function(nsiFile) {
	var co=config.options; // abbrev
	var header='Index of %0\n^^(as of %1)^^\n|!filename| !size | !modified |\n';
	var item='|[[%0|%1]]| %2|%3|\n';
	var footer='Total of %0 bytes in %1 files\n';
	var now=new Date();
	var files=[nsiFile];
	if (nsiFile.isDirectory()) {
		var folder=nsiFile.directoryEntries;
		var files=[];
		while (folder.hasMoreElements()) {
			var f=folder.getNext().QueryInterface(Components.interfaces.nsILocalFile);
			if (f instanceof Components.interfaces.nsILocalFile && !f.isDirectory()) files.push(f);
		}
		var msg=nsiFile.path.replace(/\\/g,'/')+'\n\n';
		msg+='contains '+files.length+' files... ';
		msg+='select OK to attach all files or CANCEL to create a list...';
		if (!confirm(msg)) { // create a list in a tiddler
			var title=nsiFile.leafName; // tiddler name is last directory name in path
			while (title && title.length && store.tiddlerExists(title)) {
				if (confirm(config.messages.overwriteWarning.format([title]))) break;
				title=prompt('Enter a new tiddler title',nsiFile.path.replace(/\\/g,'/'));
			}
			if (!title || !title.length) return true; // cancelled
			var text=header.format([nsiFile.path.replace(/\\/g,'/'),now.toLocaleString()]);
			var total=0;
			for (var i=0; i<files.length; i++) { var f=files[i];
				var name=f.leafName;
				if (co.chkFileDropTrimFilename)
					{ var p=name.split('.'); if (p.length>1) p.pop(); name=p.join('.'); }
				var path='file:///'+f.path.replace(/\\/g,'/');
				var size=f.fileSize; total+=size;
				var when=new Date(f.lastModifiedTime).formatString('YYYY.0MM.0DD 0hh:0mm:0ss');
				text+=item.format([name,path,size,when]);
			}
			text+=footer.format([total,files.length]);
			var newtags=co.txtFileDropTags?co.txtFileDropTags.readBracketedList():[];
			store.saveTiddler(null,title,text,co.txtUserName,now,newtags);
			if (co.chkFileDropDisplay) story.displayTiddler(null,title);
			return true;
		}
	}
	if (files.length>1) store.suspendNotifications();
	for (i=0; i<files.length; i++) {
		var file=files[i];
		if (file.isDirectory()) continue; // skip over nested directories
		var type='text/plain';
		var title=file.leafName; // tiddler name is file name
		if (co.chkFileDropTrimFilename)
			{ var p=title.split('.'); if (p.length>1) p.pop(); title=p.join('.'); }
		var name=file.leafName;
		var path=file.path;
		var url='file:///'+path.replace(/\\/g,'/');
		var size=file.fileSize;
		var when=new Date(file.lastModifiedTime);
		var now=new Date();
		var who=config.options.txtUserName;
		var h=document.location.href;
		var cwd=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf('/')+1)));
		var relpath=path.startsWith(cwd)?'./'+path.substr(cwd.length):path;
		while (title && title.length && store.tiddlerExists(title)) {
			if (confirm(config.messages.overwriteWarning.format([title]))) break;
			title=prompt('Enter a new tiddler title',path.replace(/\\/g,'/'));
		}
		if (!title || !title.length) continue; // cancelled
		if (config.macros.attach) {
			type=config.macros.attach.getMIMEType(name,'');
			if (!type.length)
				type=prompt('Unknown file type.  Enter a MIME type','text/plain');
			if (!type||!type.length) continue; // cancelled
		}
		var newtags=co.txtFileDropTags?co.txtFileDropTags.readBracketedList():[];
		if (type=='text/plain' || !co.chkFileDropContent) {
			var txt=''; var fmt=co.txtFileDropLinkFormat.unescapeLineBreaks();
			if (co.chkFileDropLink) txt+=fmt.format([name,url,path,relpath,size,when,now,who]);
			if (co.chkFileDropContent) {
				var out=loadFile(path); var lim=co.txtFileDropDataLimit;
				txt+=co.txtFileDropDataLimit?out.substr(0,lim):out;
				if (size>lim) txt+='\n----\nfilesize ('+size+')'
					+' is larger than FileDrop limit ('+lim+')...\n'
					+'additional content has been omitted';
			}
			store.saveTiddler(null,title,txt,co.txtUserName,now,newtags);
		} else {
			var embed=co.chkFileDropContent
				&& (!co.txtFileDropDataLimit||size<co.txtFileDropDataLimit);
			newtags.push('attachment'); newtags.push('excludeMissing');
			config.macros.attach.createAttachmentTiddler(path,
				now.formatString(config.macros.timeline.dateFormat),
				'attached by FileDropPlugin', newtags, title,
				embed, co.chkFileDropAttachLocalLink, false,
				relpath, '', type,!co.chkFileDropDisplay);
		}
		if (co.chkFileDropDisplay) story.displayTiddler(null,title);
	}
	if (files.length>1) { store.resumeNotifications(); store.notifyAll(); }
	return true;
})
//}}}
Denne artikel genererer automatisk en liste over alle tiddlere, der er tagget med ''frugt''.
Check indholdet af denne artikel for at finde ud af hvordan du selv opretter nye lister. 
For mere information om hvordan du opretter dine egne lister over artikler, se artiklen om [[wiki syntaks|Wiki Syntaks]]
<<tiddlerList group:"tiddler.title.substr(0,1)" groupTemplate:'!%group\n' tags:frugt,-sysfile>>
!Velkommen!
Velkommen til ~MiniPedia! Det er en wiki ligesom [[WikiPedia|http://www.wikipedia.org/]], blot meget lettere at tage med sig. Du kan ændre denne tekst til lige hvad du selv ønsker - nu!
+++[Se indholdsoversigt]...<<showtoc Om>>===<br>Artiklerne i denne wiki indekseres alfabetisk og automatisk i [[artikler A-Å]] (som vist herunder) - efterhånden som du opretter eller sletter dem.
{{bordertop left groupbox{
@@display:block;height:20em;overflow:auto;
<<tiddler [[artikler A-Å]]>>@@@@display:block;text-align:right;^^rul ned for mere...^^@@}}}
/***
|Name|ImageSizePlugin|
|Source|http://www.TiddlyTools.com/#ImageSizePlugin|
|Version|1.2.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|adds support for resizing images|
This plugin adds optional syntax to scale an image to a specified width and height and/or interactively resize the image with the mouse.
!!!!!Usage
<<<
The extended image syntax is:
{{{
[img(w+,h+)[...][...]]
}}}
where ''(w,h)'' indicates the desired width and height (in CSS units, e.g., px, em, cm, in, or %). Use ''auto'' (or a blank value) for either dimension to scale that dimension proportionally (i.e., maintain the aspect ratio). You can also calculate a CSS value 'on-the-fly' by using a //javascript expression// enclosed between """{{""" and """}}""". Appending a plus sign (+) to a dimension enables interactive resizing in that dimension (by dragging the mouse inside the image). Use ~SHIFT-click to show the full-sized (un-scaled) image. Use ~CTRL-click to restore the starting size (either scaled or full-sized).
<<<
!!!!!Examples
<<<
{{{
[img(100px+,75px+)[images/meow2.jpg]]
}}}
[img(100px+,75px+)[images/meow2.jpg]]
{{{
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
}}}
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
{{tagClear{
}}}
<<<
!!!!!Revisions
<<<
2009.02.24 [1.2.1] cleanup width/height regexp, use '+' suffix for resizing
2009.02.22 [1.2.0] added stretchable images
2008.01.19 [1.1.0] added evaluated width/height values
2008.01.18 [1.0.1] regexp for "(width,height)" now passes all CSS values to browser for validation
2008.01.17 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.ImageSizePlugin= {major: 1, minor: 2, revision: 1, date: new Date(2009,2,24)};
//}}}
//{{{
var f=config.formatters[config.formatters.findByField("name","image")];
f.match="\\[[<>]?[Ii][Mm][Gg](?:\\([^,]*,[^\\)]*\\))?\\[";
f.lookaheadRegExp=/\[([<]?)(>?)[Ii][Mm][Gg](?:\(([^,]*),([^\)]*)\))?\[(?:([^\|\]]+)\|)?([^\[\]\|]+)\](?:\[([^\]]*)\])?\]/mg;
f.handler=function(w) {
	this.lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var floatLeft=lookaheadMatch[1];
		var floatRight=lookaheadMatch[2];
		var width=lookaheadMatch[3];
		var height=lookaheadMatch[4];
		var tooltip=lookaheadMatch[5];
		var src=lookaheadMatch[6];
		var link=lookaheadMatch[7];

		// Simple bracketted link
		var e = w.output;
		if(link) { // LINKED IMAGE
			if (config.formatterHelpers.isExternalLink(link)) {
				if (config.macros.attach && config.macros.attach.isAttachment(link)) {
					// see [[AttachFilePluginFormatters]]
					e = createExternalLink(w.output,link);
					e.href=config.macros.attach.getAttachment(link);
					e.title = config.macros.attach.linkTooltip + link;
				} else
					e = createExternalLink(w.output,link);
			} else 
				e = createTiddlyLink(w.output,link,false,null,w.isStatic);
			addClass(e,"imageLink");
		}

		var img = createTiddlyElement(e,"img");
		if(floatLeft) img.align="left"; else if(floatRight) img.align="right";
		if(width||height) {
			var x=width.trim(); var y=height.trim();
			var stretchW=(x.substr(x.length-1,1)=='+'); if (stretchW) x=x.substr(0,x.length-1);
			var stretchH=(y.substr(y.length-1,1)=='+'); if (stretchH) y=y.substr(0,y.length-1);
			if (x.substr(0,2)=="{{")
				{ try{x=eval(x.substr(2,x.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			if (y.substr(0,2)=="{{")
				{ try{y=eval(y.substr(2,y.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			img.style.width=x.trim(); img.style.height=y.trim();
			config.formatterHelpers.addStretchHandlers(img,stretchW,stretchH);
		}
		if(tooltip) img.title = tooltip;

		// GET IMAGE SOURCE
		if (config.macros.attach && config.macros.attach.isAttachment(src))
			src=config.macros.attach.getAttachment(src); // see [[AttachFilePluginFormatters]]
		else if (config.formatterHelpers.resolvePath) { // see [[ImagePathPlugin]]
			if (config.browser.isIE || config.browser.isSafari) {
				img.onerror=(function(){
					this.src=config.formatterHelpers.resolvePath(this.src,false);
					return false;
				});
			} else
				src=config.formatterHelpers.resolvePath(src,true);
		}
		img.src=src;
		w.nextMatch = this.lookaheadRegExp.lastIndex;
	}
}

config.formatterHelpers.addStretchHandlers=function(e,stretchW,stretchH) {
	e.title=((stretchW||stretchH)?'DRAG=stretch/shrink, ':'')
		+'SHIFT-CLICK=show full size, CTRL-CLICK=restore initial size';
	e.statusMsg='width=%0, height=%1';
	e.style.cursor='move';
	e.originalW=e.style.width;
	e.originalH=e.style.height;
	e.minW=Math.max(e.offsetWidth/20,10);
	e.minH=Math.max(e.offsetHeight/20,10);
	e.stretchW=stretchW;
	e.stretchH=stretchH;
	e.onmousedown=function(ev) { var ev=ev||window.event;
		this.sizing=true;
		this.startX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
		this.startY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
		this.startW=this.offsetWidth;
		this.startH=this.offsetHeight;
		return false;
	};
	e.onmousemove=function(ev) { var ev=ev||window.event;
		if (this.sizing) {
			var s=this.style;
			var currX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
			var currY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
			var newW=(currX-this.offsetLeft)/(this.startX-this.offsetLeft)*this.startW;
			var newH=(currY-this.offsetTop )/(this.startY-this.offsetTop )*this.startH;
			if (this.stretchW) s.width =Math.floor(Math.max(newW,this.minW))+'px';
			if (this.stretchH) s.height=Math.floor(Math.max(newH,this.minH))+'px';
			clearMessage(); displayMessage(this.statusMsg.format([s.width,s.height]));
		}
		return false;
	};
	e.onmouseup=function(ev) { var ev=ev||window.event;
		if (ev.shiftKey) { this.style.width=this.style.height=''; }
		if (ev.ctrlKey)  { this.style.width=this.originalW; this.style.height=this.originalH; }
		this.sizing=false;
		clearMessage();
		return false;
	};
	e.onmouseout=function(ev) { var ev=ev||window.event;
		this.sizing=false;
		clearMessage();
		return false;
	};
}
//}}}
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2009.04.11 [1.9.5] pass current tiddler object into wrapper code so it can be referenced from within 'onclick' scripts
2009.02.26 [1.9.4] in $(), handle leading '#' on ID for compatibility with JQuery syntax
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 5, date: new Date(2009,4,11)};

config.formatters.push( {
	name: "inlineJavascript",
	match: "\\<script",
	lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\n)*?)\\\")?(?: key=\\\"((?:.|\\n)*?)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",

	handler: function(w) {
		var lookaheadRegExp = new RegExp(this.lookahead,"mg");
		lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var src=lookaheadMatch[1];
			var label=lookaheadMatch[2];
			var tip=lookaheadMatch[3];
			var key=lookaheadMatch[4];
			var show=lookaheadMatch[5];
			var code=lookaheadMatch[6];
			if (src) { // external script library
				var script = document.createElement("script"); script.src = src;
				document.body.appendChild(script); document.body.removeChild(script);
			}
			if (code) { // inline code
				if (show) // display source in tiddler
					wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
				if (label) { // create 'onclick' command link
					var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",wikifyPlainText(label));
					var fixup=code.replace(/document.write\s*\(/gi,'place.bufferedHTML+=(');
					link.code="function _out(place,tiddler){"+fixup+"\n};_out(this,this.tiddler);"
					link.tiddler=w.tiddler;
					link.onclick=function(){
						this.bufferedHTML="";
						try{ var r=eval(this.code);
							if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)
								var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);
							if(this.bufferedHTML.length)
								s.innerHTML=this.bufferedHTML;
							if((typeof(r)==="string")&&r.length) {
								wikify(r,s,null,this.tiddler);
								return false;
							} else return r!==undefined?r:false;
						} catch(e){alert(e.description||e.toString());return false;}
					};
					link.setAttribute("title",tip||"");
					var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
					URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
					URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
					link.setAttribute("href",URIcode);
					link.style.cursor="pointer";
					if (key) link.accessKey=key.substr(0,1); // single character only
				}
				else { // run script immediately
					var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
					var c="function _out(place,tiddler){"+fixup+"\n};_out(w.output,w.tiddler);";
					try	 { var out=eval(c); }
					catch(e) { out=e.description?e.description:e.toString(); }
					if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
				}
			}
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
	}
} )
//}}}

// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
	if(limit > 0) text = text.substr(0,limit);
	var wikifier = new Wikifier(text,formatter,null,tiddler);
	return wikifier.wikifyPlain();
}
//}}}

// // GLOBAL FUNCTION: $(...) -- 'shorthand' convenience syntax for document.getElementById()
//{{{
if (typeof($)=='undefined') { function $(id) { return document.getElementById(id.replace(/^#/,'')); } }
//}}}
For at komme i gang med denne TiddlyWiki, kan du ændre på de følgende tiddlere:
* [[SideTitel|SiteTitle]] & [[SideUnderTitel|SiteSubtitle]]: - efter de er gemt, vil de også vise sig i browserens titelmenu.
* [[HovedMenu|MainMenu]]: - oftest placeret til venstre.
* [[OpstartsTiddlere|DefaultTiddlers]]: Indeholder navnene på de tiddlere du vil have skal starte op når du åbner ~TiddlyWiki.<br>Hvis du tagger en tiddler med <<tag opstart>> åbnes de automatisk ved opstart.
Du skal også skrive dit brugernavn for at signere dine redigeringer: <<option txtUserName>>
<<showtoc>>
!Senectus et netus
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis sed velit ut odio euismod porta at in lacus. Morbi in nibh vel massa iaculis pellentesque. Duis malesuada laoreet odio pellentesque lacinia. Cras dignissim eros dui. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec gravida varius consectetur. Sed tincidunt eleifend ligula, vitae pretium diam laoreet suscipit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas lobortis, tellus a mattis euismod, felis turpis venenatis quam, sit amet adipiscing nunc ipsum eget nulla. Etiam tempor erat non urna pulvinar vulputate. Nam sit amet nunc orci, ut tincidunt mi. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum hendrerit blandit sem, sed accumsan mauris pellentesque vel. Donec malesuada quam ac lectus pretium quis posuere erat rutrum.
!!Aenean dolor lorem
Aenean dolor lorem, lacinia nec laoreet eu, sagittis vitae nibh. Maecenas aliquet orci sed neque cursus interdum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc rutrum sem a felis imperdiet eget rutrum nisl aliquam. Aliquam erat volutpat. Praesent id enim ac enim scelerisque mollis. Sed mattis porttitor orci eget pharetra. Vestibulum elit est, varius sit amet commodo nec, pretium sit amet sem. Etiam vitae orci est, id volutpat erat. Praesent viverra, erat et sagittis gravida, nunc nibh varius erat, ac mattis dui sapien ac ligula. Vivamus vehicula commodo metus, tincidunt mollis eros varius posuere. Nullam et sapien sapien. Vivamus commodo tellus ac nulla hendrerit egestas. Nam accumsan eleifend leo. Praesent nulla nibh, tincidunt non gravida eget, volutpat id odio. Ut odio arcu, euismod tincidunt vestibulum at, aliquet in nisl.
!!Duis vel tempor urna
Phasellus eu libero turpis, id semper diam. Aliquam dictum, diam eu condimentum facilisis, lorem mi suscipit massa, eget tempor neque orci sit amet odio. Sed pulvinar mattis ligula. Quisque eu justo orci, ut egestas urna. In tristique pharetra gravida. Nam ullamcorper, elit in aliquam lacinia, nunc elit convallis lacus, et sagittis urna orci eu eros. Morbi ornare feugiat lectus in molestie. In nec magna ut est consectetur placerat ac sed ante. Pellentesque eget arcu nulla, luctus sodales erat. Morbi dolor neque, convallis vitae dictum ac, rutrum in metus. Maecenas neque sem, pretium ac iaculis id, malesuada et nunc. Morbi tristique ultrices molestie. Vestibulum elementum pulvinar neque, in aliquet ipsum suscipit quis. Quisque tincidunt odio at mauris fermentum tempus. Nulla vitae ipsum eleifend enim vehicula dapibus. Suspendisse orci diam, suscipit sit amet vulputate nec, consectetur quis augue. Nulla elementum massa vel diam sollicitudin aliquet ac ac leo. Mauris suscipit sollicitudin nisi vel blandit. Donec feugiat, lacus ut rutrum dapibus, nulla magna iaculis neque, aliquet cursus quam quam id diam.

!Aliquam lectus urna
Sollicitudin eu blandit quis, feugiat et sapien. Sed justo odio, ultricies vel ultrices vel, dapibus et mi. Sed felis ligula, dignissim nec faucibus nec, porta gravida sapien. Sed at lacus ac mi dictum malesuada sed eu dui. Sed imperdiet metus non turpis aliquet tincidunt fringilla ipsum dapibus. Sed eleifend pellentesque lorem, dignissim suscipit elit tristique at. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vitae ipsum vitae metus pellentesque fringilla. Ut sit amet nibh nec odio ultrices laoreet. Curabitur vitae imperdiet lectus. Duis rhoncus libero eget nulla laoreet id euismod tellus porttitor. Fusce cursus consequat lectus ac interdum. Vestibulum pulvinar felis eu dui rhoncus in laoreet augue blandit. In metus dui, vehicula ac porta vitae, facilisis bibendum tortor. Maecenas lacinia sodales enim, quis scelerisque velit pretium ut. Etiam leo ligula, sollicitudin vel cursus sed, egestas sed odio. Vestibulum nulla nulla, rutrum eget vestibulum sed, auctor ullamcorper enim.

Aenean odio nisl, convallis ut posuere quis, commodo nec libero. Aenean dapibus nunc at est cursus dignissim. Fusce semper odio ut est rhoncus a vehicula purus fermentum. Maecenas accumsan, tellus sed hendrerit convallis, massa tortor commodo libero, nec condimentum nibh sem ac eros. Praesent porta bibendum nisl, nec tempor mi venenatis venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse id congue sapien. Pellentesque dignissim, dolor sed ultricies ornare, leo nunc cursus nisl, ac laoreet sem neque id neque. Aliquam ac nunc quis lacus varius rhoncus a eu purus. Vestibulum a elit eget justo eleifend aliquam. Nunc tincidunt risus a urna varius at malesuada orci commodo. Duis congue enim et elit egestas porttitor. Ut hendrerit, nibh ut congue bibendum, tellus arcu convallis magna, ut hendrerit leo augue id turpis. In hac habitasse platea dictumst. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras volutpat, elit vel convallis rhoncus, orci nulla iaculis lectus, non dignissim diam purus in purus. Cras bibendum scelerisque libero at elementum.

!!Nam hendrerit consequat faucibus
Suspendisse in libero dui. Aenean non justo leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam erat volutpat. In porttitor erat sit amet nulla vestibulum luctus. Pellentesque ligula lacus, euismod eu pellentesque a, viverra ac magna. Nulla euismod ullamcorper varius. Sed risus nibh, tristique in adipiscing eleifend, lacinia ut lectus. Sed congue massa quis leo porttitor mollis. In hac habitasse platea dictumst. Integer eu tellus et augue interdum adipiscing. Praesent ut varius lectus. Quisque quis tellus orci.

Fusce mattis mauris vel metus scelerisque pellentesque vel in justo. Pellentesque scelerisque velit ut risus consectetur id consequat mauris placerat. Sed quam orci, ultricies faucibus auctor id, varius sit amet mi. Aliquam cursus diam ac ante mattis tincidunt. Aliquam ac sollicitudin quam. Sed scelerisque, dolor sed tristique auctor, libero urna consectetur erat, ac vestibulum justo lacus eu lectus. Maecenas vel nisl diam. Mauris gravida orci quis augue sodales pellentesque. Sed mi sem, lobortis non dapibus vitae, ornare at felis. Phasellus quis nibh in ante consequat vulputate. Quisque posuere metus at enim vehicula posuere. Nunc elementum rutrum enim in eleifend. In felis nibh, pellentesque sed sodales nec, dignissim sollicitudin purus. Sed euismod ipsum in augue sagittis tempus.

Curabitur fringilla mollis ligula eget fringilla. Donec placerat, leo vel elementum sollicitudin, urna nisl sodales urna, sed molestie erat libero vitae neque. Cras sed est quam, a condimentum sapien. Sed mauris metus, fermentum id vehicula sed, gravida non turpis. Curabitur volutpat egestas porta. Etiam luctus commodo sem eget consequat. Vivamus ullamcorper bibendum sapien quis dapibus. Proin egestas dui at mauris venenatis sodales. Sed vitae diam et massa aliquet tempus sit amet nec dui. Duis id enim quis dui ultricies laoreet vitae quis nisi. Nulla sed nibh nibh. Donec elit neque, dapibus ac aliquam vitae, pretium at risus. Donec at tincidunt mi. Etiam venenatis augue ac leo tincidunt a pulvinar mauris ultricies.

!Suspendisse potenti
Suspendisse et sapien sem. Quisque augue magna, iaculis nec tristique nec, lacinia luctus urna. Pellentesque vehicula arcu sed dolor porttitor consectetur. Ut eu nulla et urna malesuada sollicitudin auctor quis augue. Donec eros quam, elementum in vulputate sit amet, sagittis vel mauris. Fusce blandit aliquet ornare. Morbi ultricies ultrices pharetra. Proin a orci odio, sit amet imperdiet eros. Mauris id mattis magna. Aenean id augue mauris. Praesent purus risus, luctus aliquet condimentum vitae, fringilla a orci. In hac habitasse platea dictumst. Nam in quam nisi, cursus ornare odio. Nullam est diam, sagittis ut pharetra vel, porttitor eu nunc. Integer tempor mauris nec neque pellentesque scelerisque.

!!Phasellus dictum dapibus rutrum
Phasellus auctor lacus ut metus vulputate euismod. Donec urna eros, tincidunt sed ultrices posuere, molestie a tellus. Fusce et odio orci. In dictum vehicula orci euismod congue. Pellentesque vehicula, arcu in tincidunt semper, urna nunc blandit nibh, non viverra elit mi ut lectus. Mauris vitae eros mauris, sed dapibus dui. In varius congue tempus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus in libero urna, fermentum ullamcorper ante. Donec vitae ullamcorper ligula. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus iaculis ipsum eu lacus sollicitudin quis commodo arcu scelerisque. Pellentesque pharetra sodales odio, egestas commodo nisl mattis imperdiet. Sed tincidunt condimentum libero, ac consectetur leo ullamcorper ut. Quisque ut nisi nibh. Sed purus dui, eleifend posuere feugiat vel, rutrum eleifend enim. Donec id justo in enim fringilla porta sit amet sed arcu. Suspendisse vel lorem nisl. Nullam at magna odio.

!!!Praesent sed suscipit eros.
Morbi molestie orci vel risus tristique et tempus quam pellentesque. Vivamus lacinia fringilla ornare. Ut leo urna, tempus ut iaculis vitae, dictum ut odio. Vestibulum auctor lorem eu erat blandit viverra vitae id neque. Fusce nec turpis vel neque tempor euismod at vel velit. Nullam eget leo sapien, vel malesuada dui. Nulla velit risus, pellentesque quis ultricies sit amet, pulvinar in tortor. Suspendisse mollis interdum tellus, vel placerat tellus semper in. Pellentesque sed libero vel sem malesuada adipiscing. Integer quis leo eu tortor feugiat scelerisque. Phasellus vel nisi lacus, non iaculis turpis. Maecenas ut varius elit. Aliquam velit justo, accumsan sollicitudin tempor ut, rutrum at orci. Aenean tincidunt, massa non pulvinar varius, nisi mauris venenatis massa, et congue turpis mi vel enim. Suspendisse sit amet felis vel leo congue varius non a nibh. Cras purus lorem, convallis ac porta quis, tincidunt et diam.

!!!Cras nec fringilla nisi
Aenean placerat, odio a lobortis hendrerit, neque risus tempor neque, non rutrum risus arcu at velit. Ut dolor augue, cursus ut euismod eget, tempus pharetra odio. Vivamus sagittis venenatis dui, vel aliquam odio convallis vel. Aenean sit amet augue libero, sit amet facilisis arcu. Ut libero metus, fringilla tempor tincidunt pretium, viverra eu ipsum. Integer volutpat felis quis tortor volutpat a congue ante mollis. Nulla vitae elit ut urna condimentum tincidunt ut ac orci. Maecenas eu dolor arcu, a aliquam orci. Fusce aliquam lacus in neque ultricies non luctus tortor faucibus.

!!Nullam euismod hendrerit urna vel ornare
Nullam lorem diam, imperdiet venenatis vulputate id, gravida in turpis. Quisque aliquam hendrerit nisi, ac condimentum magna ultrices interdum. Duis dapibus, metus a molestie faucibus, sem dolor vulputate nisi, vitae porta massa leo non orci. Curabitur pellentesque, dui eget suscipit rhoncus, mi lorem iaculis arcu, id cursus nulla est et orci. Etiam consequat auctor iaculis. Donec fermentum semper eros, sed convallis turpis tempor rhoncus. Nam vel nisi orci. Curabitur nec sapien neque, nec ornare turpis. Cras id magna nec urna laoreet porta sed sit amet tortor.

!!!Duis a vestibulum ipsum 
Maecenas tortor tortor, posuere non volutpat in, lacinia id dolor. Donec a quam vel libero aliquam ultrices id quis ipsum. Mauris nisi turpis, vestibulum eget facilisis sit amet, cursus non felis.Aliquam interdum laoreet justo a pretium. Sed leo dui, pretium at pretium non, sagittis at dui. Donec eget risus lacus, quis sodales nunc. Sed convallis, metus eu facilisis blandit, velit arcu facilisis magna, eget ullamcorper orci enim eget velit. Curabitur quam risus, imperdiet suscipit lacinia ut, pulvinar vel est. Vestibulum sapien mauris, fringilla id pharetra eget, scelerisque sit amet metus. Phasellus gravida turpis turpis, ut elementum elit. Vivamus in magna id lectus suscipit condimentum.

!!!Maecenas quis neque eros
Mauris sollicitudin enim vel felis venenatis feugiat. Integer eu est sed quam mattis gravida eget eget felis. In hac habitasse platea dictumst. Integer tincidunt lorem sagittis dolor varius egestas. Etiam purus sapien, egestas nec posuere quis, euismod a mauris. Aliquam consectetur urna elit, in ullamcorper nunc. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam sollicitudin tincidunt sem, hendrerit bibendum enim mollis ac. Ut scelerisque mollis velit. Aliquam imperdiet erat urna. 
<<search>><<openTiddlers text:Hjem tiddlers:{{store.getTiddlerText("DefaultTiddlers")}} closeAll:true>>[[Om]][[Wiki Syntaks]][[artikler A-Å]]<<newTiddler label:"ny artikel">><<newTiddler title:"Udvalgt artikel" label:"ny udvalgt" tag:"Udvalgt" text:"Dette er en udvalgt artikel, den vil vises i listen over udvalgte artikler til venstre. For at fjerne den fra listen, fjern Udvalgt tagget fra den.">><<newJournal "DD MMM YYYY" "journal" label:"ny journal">><<saveChanges "gem ændringer">><<slider chkSliderOptionsPanel OptionsPanel "muligheder »" "Lav ændringer til TiddlyWikis avancerede muligheder">>
<<tiddler Om>>
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
<<option chkFloatingSlidersAnimate>> allow floating sliders to animate when opening/closing
>Note: This setting can cause 'clipping' problems in some versions of InternetExplorer.
>In addition, for floating slider animation to occur you must also allow animation in general (see [[AdvancedOptions]]).
<<<
!!!!!Revisions
<<<
2008.11.15 - 2.4.9 in adjustNestedSlider(), don't make adjustments if panel is marked as 'undocked' (CSS class).  In onClickNestedSlider(), SHIFT-CLICK docks panel (see [[MoveablePanelPlugin]])
|please see [[NestedSlidersPluginInfo]] for additional revision details|
2005.11.03 - 1.0.0 initial public release.  Thanks to RodneyGomes, GeoffSlocock, and PaulPetterson for suggestions and experiments.
<<<
!!!!!Code
***/
//{{{
version.extensions.NestedSlidersPlugin= {major: 2, minor: 4, revision: 9, date: new Date(2008,11,15)};

// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkFloatingSlidersAnimate===undefined)
	config.options.chkFloatingSlidersAnimate=false; // avoid clipping problems in IE

// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
	background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");

// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

config.formatters.push( {
	name: "nestedSliders",
	match: "\\n?\\+{3}",
	terminator: "\\s*\\={3}\\n?",
	lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\@\\[\\>]*\\^)?)?(\\*)?(\\@)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
	handler: function(w)
		{
			lookaheadRegExp = new RegExp(this.lookahead,"mg");
			lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = lookaheadRegExp.exec(w.source)
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
			{
				var defopen=lookaheadMatch[1];
				var cookiename=lookaheadMatch[2];
				var header=lookaheadMatch[3];
				var panelwidth=lookaheadMatch[4];
				var transient=lookaheadMatch[5];
				var hover=lookaheadMatch[6];
				var buttonClass=lookaheadMatch[7];
				var label=lookaheadMatch[8];
				var openlabel=lookaheadMatch[9];
				var panelID=lookaheadMatch[10];
				var blockquote=lookaheadMatch[11];
				var deferred=lookaheadMatch[12];

				// location for rendering button and panel
				var place=w.output;

				// default to closed, no cookie, no accesskey, no alternate text/tip
				var show="none"; var cookie=""; var key="";
				var closedtext=">"; var closedtip="";
				var openedtext="<"; var openedtip="";

				// extra "+", default to open
				if (defopen) show="block";

				// cookie, use saved open/closed state
				if (cookiename) {
					cookie=cookiename.trim().slice(1,-1);
					cookie="chkSlider"+cookie;
					if (config.options[cookie]==undefined)
						{ config.options[cookie] = (show=="block") }
					show=config.options[cookie]?"block":"none";
				}

				// parse label/tooltip/accesskey: [label=X|tooltip]
				if (label) {
					var parts=label.trim().slice(1,-1).split("|");
					closedtext=parts.shift();
					if (closedtext.substr(closedtext.length-2,1)=="=")	
						{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
					openedtext=closedtext;
					if (parts.length) closedtip=openedtip=parts.join("|");
					else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
				}

				// parse alternate label/tooltip: [label|tooltip]
				if (openlabel) {
					var parts=openlabel.trim().slice(1,-1).split("|");
					openedtext=parts.shift();
					if (parts.length) openedtip=parts.join("|");
					else openedtip="hide "+openedtext;
				}

				var title=show=='block'?openedtext:closedtext;
				var tooltip=show=='block'?openedtip:closedtip;

				// create the button
				if (header) { // use "Hn" header format instead of button/link
					var lvl=(header.length>5)?5:header.length;
					var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,buttonClass,title);
					btn.onclick=onClickNestedSlider;
					btn.setAttribute("href","javascript:;");
					btn.setAttribute("title",tooltip);
				}
				else
					var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,buttonClass);
				btn.innerHTML=title; // enables use of HTML entities in label

				// set extra button attributes
				btn.setAttribute("closedtext",closedtext);
				btn.setAttribute("closedtip",closedtip);
				btn.setAttribute("openedtext",openedtext);
				btn.setAttribute("openedtip",openedtip);
				btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
				btn.defOpen=defopen!=null; // save default open/closed state (boolean)
				btn.keyparam=key; // save the access key letter ("" if none)
				if (key.length) {
					btn.setAttribute("accessKey",key); // init access key
					btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
				}
				btn.setAttribute("hover",hover?"true":"false");
				btn.onmouseover=function(ev) {
					// optional 'open on hover' handling
					if (this.getAttribute("hover")=="true" && this.sliderPanel.style.display=='none') {
						document.onclick.call(document,ev); // close transients
						onClickNestedSlider(ev); // open this slider
					}
					// mouseover on button aligns floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel);
				}

				// create slider panel
				var panelClass=panelwidth?"floatingPanel":"sliderPanel";
				if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
				var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
				panel.button = btn; // so the slider panel know which button it belongs to
				btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
				panel.defaultPanelWidth=(panelwidth && panelwidth.length>2)?panelwidth.slice(1,-1):"";
				panel.setAttribute("transient",transient=="*"?"true":"false");
				panel.style.display = show;
				panel.style.width=panel.defaultPanelWidth;
				panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
					{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this); }

				// render slider (or defer until shown) 
				w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
				if ((show=="block")||!deferred) {
					// render now if panel is supposed to be shown or NOT deferred rendering
					w.subWikify(blockquote?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
					// align floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel);
				}
				else {
					var src = w.source.substr(w.nextMatch);
					var endpos=findMatchingDelimiter(src,"+++","===");
					panel.setAttribute("raw",src.substr(0,endpos));
					panel.setAttribute("blockquote",blockquote?"true":"false");
					panel.setAttribute("rendered","false");
					w.nextMatch += endpos+3;
					if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
				}
			}
		}
	}
)

function findMatchingDelimiter(src,starttext,endtext) {
	var startpos = 0;
	var endpos = src.indexOf(endtext);
	// check for nested delimiters
	while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
		// count number of nested 'starts'
		var startcount=0;
		var temp = src.substring(startpos,endpos-1);
		var pos=temp.indexOf(starttext);
		while (pos!=-1)  { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
		// set up to check for additional 'starts' after adjusting endpos
		startpos=endpos+endtext.length;
		// find endpos for corresponding number of matching 'ends'
		while (startcount && endpos!=-1) {
			endpos = src.indexOf(endtext,endpos+endtext.length);
			startcount--;
		}
	}
	return (endpos==-1)?src.length:endpos;
}
//}}}
//{{{
window.onClickNestedSlider=function(e)
{
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);
	while (theTarget && theTarget.sliderPanel==undefined) theTarget=theTarget.parentNode;
	if (!theTarget) return false;
	var theSlider = theTarget.sliderPanel;
	var isOpen = theSlider.style.display!="none";

	// if SHIFT-CLICK, dock panel first (see [[MoveablePanelPlugin]])
	if (e.shiftKey && config.macros.moveablePanel) config.macros.moveablePanel.dock(theSlider,e);

	// toggle label
	theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
	// toggle tooltip
	theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));

	// deferred rendering (if needed)
	if (theSlider.getAttribute("rendered")=="false") {
		var place=theSlider;
		if (theSlider.getAttribute("blockquote")=="true")
			place=createTiddlyElement(place,"blockquote");
		wikify(theSlider.getAttribute("raw"),place);
		theSlider.setAttribute("rendered","true");
	}

	// show/hide the slider
	if(config.options.chkAnimate && (!hasClass(theSlider,'floatingPanel') || config.options.chkFloatingSlidersAnimate))
		anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
	else
		theSlider.style.display = isOpen ? "none" : "block";

	// reset to default width (might have been changed via plugin code)
	theSlider.style.width=theSlider.defaultPanelWidth;

	// align floater panel position with target button
	if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider);

	// if showing panel, set focus to first 'focus-able' element in panel
	if (theSlider.style.display!="none") {
		var ctrls=theSlider.getElementsByTagName("*");
		for (var c=0; c<ctrls.length; c++) {
			var t=ctrls[c].tagName.toLowerCase();
			if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
				{ try{ ctrls[c].focus(); } catch(err){;} break; }
		}
	}
	var cookie=theTarget.sliderCookie;
	if (cookie && cookie.length) {
		config.options[cookie]=!isOpen;
		if (config.options[cookie]!=theTarget.defOpen) window.saveOptionCookie(cookie);
		else window.removeCookie(cookie); // remove cookie if slider is in default display state
	}

	// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
	// prevent clicks *within* a slider button from being processed by browser
	// but allow plain click to bubble up to page background (to close transients, if any)
	if (e.shiftKey || theTarget!=resolveTarget(e))
		{ e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
	Popup.remove(); // close open popup (if any)
	return false;
}
//}}}
//{{{
// click in document background closes transient panels 
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);

	if (document.nestedSliders_savedOnClick)
		var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
	// if click was inside a popup... leave transient panels alone
	var p=target; while (p) if (hasClass(p,"popup")) break; else p=p.parentNode;
	if (p) return retval;
	// if click was inside transient panel (or something contained by a transient panel), leave it alone
	var p=target; while (p) {
		if ((hasClass(p,"floatingPanel")||hasClass(p,"sliderPanel"))&&p.getAttribute("transient")=="true") break;
		p=p.parentNode;
	}
	if (p) return retval;
	// otherwise, find and close all transient panels...
	var all=document.all?document.all:document.getElementsByTagName("DIV");
	for (var i=0; i<all.length; i++) {
		 // if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
		if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
		// otherwise, if the panel is currently visible, close it by clicking it's button
		if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button})
		if (!hasClass(all[i],"floatingPanel")&&!hasClass(all[i],"sliderPanel")) all[i].style.display="none";
	}
	return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
	if (hasClass(panel,"floatingPanel") && !hasClass(panel,"undocked")) {
		// see [[MoveablePanelPlugin]] for use of 'undocked'
		var rightEdge=document.body.offsetWidth-1;
		var panelWidth=panel.offsetWidth;
		var left=0;
		var top=btn.offsetHeight; 
		if (place.style.position=="relative" && findPosX(btn)+panelWidth>rightEdge) {
			left-=findPosX(btn)+panelWidth-rightEdge; // shift panel relative to button
			if (findPosX(btn)+left<0) left=-findPosX(btn); // stay within left edge
		}
		if (place.style.position!="relative") {
			var left=findPosX(btn);
			var top=findPosY(btn)+btn.offsetHeight;
			var p=place; while (p && !hasClass(p,'floatingPanel')) p=p.parentNode;
			if (p) { left-=findPosX(p); top-=findPosY(p); }
			if (left+panelWidth>rightEdge) left=rightEdge-panelWidth;
			if (left<0) left=0;
		}
		panel.style.left=left+"px"; panel.style.top=top+"px";
	}
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider stop handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
	{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }

// TW2.2+
// hijack Morpher stop handler so sliderPanel/floatingPanel overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
	Morpher.prototype.coreStop = Morpher.prototype.stop;
	Morpher.prototype.stop = function() {
		this.coreStop.apply(this,arguments);
		var e=this.element;
		if (hasClass(e,"sliderPanel")||hasClass(e,"floatingPanel")) {
			// adjust panel overflow and position after animation
			e.style.overflow = "visible";
			if (window.adjustSliderPos) window.adjustSliderPos(e.parentNode,e.button,e);
		}
	};
}
//}}}
!MiniPedia 
Velkommen til den Danske udgave af ~MiniPedia! Den nyeste (originale Engelske) version og mere information kan findes på forfatterens hjemmeside: http://flx.me 
+++[Se indholdsoversigt]...<<showtoc Om>>===
!!Hvad er MiniPedia?
~MiniPedia er en ændret version af  ~TiddlyWiki, som prøver på at ligne ~MediaWiki så meget som muligt. ~TiddlyWiki er en enkelt fil, en fuldstændig wiki til brug for mikro-indhold, skrevet i ~JavaScript. Det betyder:
!!!Det er en enkelt fil
En fuldstændig ~MiniPedia wiki gemmes i en enkelt fil på din computer. Det gør det supernemt at tage ~MiniPedia med dig f.eks. på en USB pen eller ved at emaile den til dig selv eller andre.
!!!Den er fuldstændig
Den fil som er ~MiniPedia indeholder ikke blot alle dine data, men også alle de værktøjer du har brug for for at kunne redigere. Alt du har brug for er en moderne internet browser, som Mozilla Firefox, Microsoft Internet Explorer, Google Chrome eller Opera. Du har ikke brug for andre programmer, og du har heller ikke brug for internetforbindelse.

Samme ~MiniPedia fil vil fungere på enhver computer: Windows PC'er, Apple Macs, Linux and BSD maskiner..
!!!Det er en wiki
En wiki er en samling af hjemmesider, lige som en normal hjemmeside, bortset fra at hver eneste side kan redigeres, nemt og med det samme.  Wiki systemer bruges ofte til at samarbejde om dokumentation af store projekters, andre gange blot af en enkelt person som en slags personlig notesbog.
!!!Til brug for mikroindhold
De fleste hjemmesider og wikier bestyrer information som sider.  ~MiniPedia er anderledes -- den gemmer dit indhold i mindre bidder (hver enkelt bid kaldes en 'tiddler' eller en 'artikel').  Information der deles op i mindre bidder, som her, kaldes 'mikroindhold'. Når du først er kommet i gang med at bruge ~MiniPedia, vil du opdage at mikroindhold er en fuldstændig naturlig måde at holde styr på alt du beskæftiger dig med normalt.

!Hvordan gemmer man ændringer?
!!Internet Explorer
# I IE, vælg Værktøjer > Internet Muligheder.
# Gå til Sikkerhedsfanen og vælg "Lokal Intranet" Zone.
# Klik Default Niveau (for at slette Custom Level settings).
# Sæt Sikkerhedsniveauet til Lav.
# Luk alle åbne browsere.
# Nu kan du redigere din wiki og gemme ændringer.

!!!Prøv også:
Hvis ~MiniPedia er blevet downloadet med Internet Explorer på Windows XP med Service Pack 2 og gemt på en ~NTFS-formateret disk, vil du sandsynligvis få følgende fejlmeddelelse: 
Det er ikke muligt at gemme ændringer. Mulige grunde er: 
* din browser understøtter ikke at gemme ændringer (Firefox, Internet Explorer, Safari and Opera virker alle, hvis de er opsat korrekt) 
* stien til din ~MiniPedia fil indeholder ulovlige tegn. 
*~MiniPedia HTML filen er blevet flyttet eller omdøbt. 
Løsningen er at højreklikke på ~MiniPedia HTML filen og vælge Egenskaber. Hvis filen er blokeret, vil der være en "fjern blokering"s knap som vil fjerne blokeringen tillade at filen kan gemmes fremover. Se et eksempel her: http://tiddlywiki.org/wiki/Image:WinXP_SP2_unblock.png
!!Mozilla Firefox
Når du gemmer for første gang vil du blive spurgt om du vil tillade at filen opdateres. Klik ja for at tillade den at gemme ændringer.
!!Andre browsere (Safari, Opera, Google Chrome, etc)
For at kunne gemme ændringer i andre browsere skal du bruge en særlig jar fil for at ændre på javascript fileskrivnings politikerne. Download [[TiddlySaver.jar|http://www.tiddlywiki.com/TiddlySaver.jar]] og gem den i samme bibliotek som ~MiniPedia. Genopfrisk ~MiniPedia og prøv at gemme ændringer.

Mere detaljeret information/hjælp til andre browsere eller operativsystemer kan findes her: [[How To/Configure your browser to allow saves to disk|http://tiddlywiki.org/wiki/Configuring_your_browser_to_allow_saves_to_disk]]

!Foretag ændringer
Eftersom ~MiniPedia er baseret på ~TiddlyWiki, kan de fleste (hvis ikke alle) plugins, som er lavet til ~TiddlyWiki version 2.5.3 bruges med ~MiniPedia. Du kan finde mange plugins her: [[TiddlyVault|http://tiddlyvault.tiddlyspot.com]]
Bemærk venligst at jeg ikke kan hjælpe dig synderligt, hvis du laver rod i den.Lav ALTID backups!
!!Titel og undertitel
Du kan ændre på sidens [[titel|SiteTitle]] og [[undertitel|SiteSubtitle]] ved at redigere inholdet af tiddlerne SiteTitle og SiteSubtitle.

!!Opstartstiddlere
I [[Opstartstiddler|DefaultTiddlers]] artiklen kan du vælge hvilke tiddlere der skal åbnes når siden indlæses. Lige nu er det kun [[Hjem]] der er valgt. Hvis du vil have flere skal du blot indskrive dem på hver sin ny linie (Enter tasten).

!!Udseendet
Designet kan ændres ved at redigere i de følgende artikler:

<<tiddlerList tags:MiniPediaTheme>>
!Tak til
''De fleste plugins og noget af kernekoden er blevet ændret, søg venligst __IKKE__ hjælp fra disse forfattere andgående ~MiniPedia.''

Jeremy Ruston, Michael Mahemoff og mange andre - [[TiddlyWiki|http://www.tiddlywiki.com]]
Clint Checketts - [[Det oprindelige ~TiddlyPedia tema|http://tiddlythemes.com/#TiddlyPedia]]
Pascal Collin - [[TiddlersBarPlugin|http://visualtw.ouvaton.org/VisualTW.html]]
Doug Compton (og mange andre) - [[TableOfContentsPlugin|http://devpad.tiddlyspot.com/#DcTableOfContentsPlugin]]
Jack Parke - [[TiddlerListMacro|http://jackparke.googlepages.com/jtw.html#TiddlerListMacro]]
Eric Shulman - [[CheckboxPlugin|http://www.tiddlytools.com/#CheckboxPlugin]]
Saq Imtiaz (lewcid) - [[OpenTiddlersMacro|http://tw.lewcid.org/#OpenTiddlersMacro]]
Michael Mahemoff - [[SimpleMessagePlugin|http://tiddlywiki.mahemoff.com/SimpleMessagePlugin.html]]

!!Flere ændringer af MM
Måns Mårtensson (http://måns.dk) har oversat ~MiniPedia til Dansk og foretaget flere ændringer af Dennis' ([[flx's|http://flx.me]]) "oprindelige" ~MiniPedia.
Bl.a.
*Tobias Beer's [[cycleTags]] for at kunne vælge status i værktøjslinien.
*Eric Shulmans StyleSheetShortcuts, for flere designmuligheder via wikisyntaks..
*Eric Shulmans ImageSizePlugin, for at kunne ændre på billeders størrelse.
*Eric Shulmans AttachFilePackage, for at kunne "embedde" billeder og andre filer direkte i ~MiniPedia.
*Eric Shulmans NestedSlidersPlugin, for at kunne lave slidere.
*Eric Shulmans QuickEditPackage, for at få indbygget en wikiteksteditor
*Eric Shulmans UnsavedChangesPlugin, for at kunne se hvornår der skal gemmes. (kommer til syne i [[hovedmenuen|MainMenu]])
*Simon Bairds RenameTagsPlugin, for at holde styr på ændringer af tags.
*~BidiXs UploadPlugin og PasswordOptionPlugin for at kunne gemme ~MiniPedia online.

Mange af de ovennævnte plugins er helt eller delvist ændrede eller oversat til Dansk af mig. 
Søg derfor __IKKE__ hjælp til ~MiniPedia hos de nævnte forfattere.
<script label="$1" title="Tillader redigering og bagscene funktionalitet, og slår animationer fra">if(window.version&&window.version.title=='TiddlyWiki')
{readOnly=false;if(window.backstage){if(!backstage.button)backstage.init();backstage.show();}config.options.chkAnimate=false;refreshDisplay();}</script>
/***
|''Name:''|OpenTiddlersMacro|
|''Description:''|Create links that open multiple tiddlers. Optionally close all other tiddlers first.|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#OpenTiddlersMacro|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.0|
|''Date:''||
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.3|
!!Usage:
* {{{<<openTiddlers text:"click" tiddlers:[[TiddlerOne TiddlerTwo "Tiddler Three"]]>>}}}
** text: text for the link.
** tiddlers: titles of tiddlers to open, as a bracketed list.
* Additional optional parameters:
** {{{<<openTiddlers text:"click" tiddlers:[[TiddlerOne TiddlerTwo "Tiddler Three"]] closeAll:true keepMe:false>>}}}
*** closeAll: close all other tiddlers first
*** keepMe : close all other tiddlers, except the one containing the macro
!!Tip:
* You can use evaluated parameters to get a list of tiddlers to open from a tiddler.
** For example to open the DefaultTiddlers for a  "Home" button: <br> {{{<<openTiddlers text:"Home" tiddlers:{{store.getTiddlerText("DefaultTiddlers")}} closeAll:true>>}}} <br>  <<openTiddlers text:"Home" tiddlers:{{store.getTiddlerText("DefaultTiddlers")}} closeAll:true>>

***/
// /%
//!BEGIN-PLUGIN-CODE
config.macros.openTiddlers = 
{
	handler : function(place,macroName,params,wikifier,paramString,tiddler)
	{
		var np = paramString.parseParams("anon",null,true,false,false);
		var text = getParam(np,"text","");
		var tiddlers = getParam(np,"tiddlers","");
		if (tiddlers == ''){
			return false;
		}
		if (typeof tiddlers == 'string' ){
			tiddlers = tiddlers.readBracketedList();
		}
		var closeAll = getParam(np,"closeAll","false");
		var keepMe = getParam(np,"keepMe","false");
		var btn= createTiddlyButton(place,text,null,this.onClick,"tiddlyLinkExisting");
		btn.tiddlers = tiddlers;
		btn.tiddler = tiddler? tiddler.title: undefined;
		btn.closeAll = closeAll;
		btn.keepMe = keepMe;
	},
	onClick: function(e)
	{
		var exclude = (this.keepMe == "true")? this.tiddler : undefined;
		var tiddlers = this.tiddlers;
		if(this.closeAll == 'true'){
			story.closeAllTiddlers(exclude);
			tiddlers = (this.keepMe == "true")? tiddlers: tiddlers.reverse();
		}
		story.displayTiddlers(this,this.tiddlers);
		return(false);
	}
};
//!END-PLUGIN-CODE
// %/
Disse muligheder for at ændre på TiddlyWiki bliver gemt i din browser

Dit brugernavn til at signere dine ændringer. Skriv det som et WikiOrd (f.eks. PerPoulsen)
<<option txtUserName>>
<<tiddler OnlineRedigering with: "Tillad redigering online">>
<<option chkSaveBackups>> Gem backups
<<option chkAutoSave>> Gem automatisk
<<option chkRegExpSearch>> Regexp søg
<<option chkCaseSensitiveSearch>> Forskel på store og små bogstaver
<<option chkAnimate>> Tillad animationer
----
Se også [[AvanceredeMuligheder]]
[[Link|http://voicethread.com/share/915151/]]
<html><img style="visibility:hidden;width:0px;height:0px;" border=0 width=0 height=0 src="http://counters.gigya.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEyNjYzOTMyMDg*MTcmcHQ9MTI2NjM5MzIxMTQ2NCZwPTIwNjQyMSZkPWI5MTUxNTEmZz*yJm89ZjBkNjFlNzc*ZmJm/NGYwN2ExYTlkMjE4M2Q*NThhYmQmb2Y9MA==.gif" /><object width="480" height="360"><param name="movie" value="http://voicethread.com/book.swf?b=915151"></param><param name="wmode" value="transparent"></param><embed src="http://voicethread.com/book.swf?b=915151" type="application/x-shockwave-flash" wmode="transparent" width="480" height="360"></embed></object></html>
<!--{{{-->
<div id='header'>
</div>
<div id='sidebar'>
<div id='titleLine'></div>
<p class='sidetext'>Navigation</p>
<div id='sidebarOptions' refresh='content' tiddler='MainMenu'></div>
<p class='sidetext'>Udvalgte Artikler</p>
<div id='menuEntries' refresh='content' force='true' tiddler='UdvalgteArtikler'></div>
<div id='MenuLink' refresh='content' force='true' tiddler='Ugemt'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>
<div id='tiddlerDisplay'></div>
</div>

<!--}}}-->
/***
|''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"
	});
*/
//}}}
/***
|''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"
	});
*/
//}}}
This package provides a toolbar of interactive 'power tools' that you can use while editing a tiddler to quickly insert TiddlyWiki tiddler links, images, macros, etc. or common formatting sequences directly into tiddler content, as well as perform other functions (such as find/replace, sort, split, convert, etc.) that can be used to modify the current tiddler's source content in a variety of ways.

<<tiddler QuickEditToolbar with: show>>
!!!!!Installation:
<<<
Individual ~QuickEdit buttons are defined in separate tiddlers (e.g., [[QuickEdit_replace]]) that have also been //transcluded// into a single toolbar definition named [[QuickEditToolbar]].  You can edit this definition to add, remove, or rearrange the toolbar buttons to best suit your needs, and then embed the [[QuickEditToolbar]] tiddler into your document's [[EditTemplate]], like this:
{{{
<div macro='tiddler QuickEditToolbar'></div>
}}}
Next, in order to support some of the formatting 'shortcuts' provided by the toolbar, add a reference to the shortcuts CSS class definitions in your [[StyleSheet]]:
{{{
[[StyleSheetShortcuts]]
}}}
By default, the QuickEdit toolbar is hidden until you enable it by using the ''toggleQuickEdit'' command, which you can add to the ~EditToolbar definition in [[ToolbarCommands]]:
{{{
|EditToolbar|... toggleQuickEdit ...|
}}}
You can also toggle the ~QuickEdit toolbar display via a single checkbox option that can be added to [[SideBarOptions]] (or any other desired location):
{{{
<<option chkShowQuickEdit>> show QuickEdit toolbar
}}}
Note: You can 'hard-code' the ''chkShowQuickEdit'' setting, so that the toolbar will be //initially// displayed, by creating a tiddler (e.g., ConfigTweaks), tagged with <<tag systemConfig>>, containing:
{{{
config.options.chkShowQuickEdit=true;
}}}
Alternatively, if you want the toolbar to //always// be displayed, regardless of the option setting, you can add a special keyword, ''show'', to the [[EditTemplate]] syntax, like this:
{{{
<div macro='tiddler QuickEditToolbar with: show'></div>
}}}
<<<
/***
|Name|QuickEditPlugin|
|Source|http://www.TiddlyTools.com/#QuickEditPlugin|
|Documentation|http://www.TiddlyTools.com/#QuickEditPlugin|
|Version|2.4.3|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Description|Support functions for ~QuickEdit package: styles, utility functions, and 'toggleQuickEdit' command|
!!!!!Revisions
<<<
2009.06.11 [2.4.3] added keyup() function to abbreviate listbox handling for CR and ESC
2009.05.07 [2.4.2] added processed() function to abbreviate event handler code
2008.09.07 [2.4.1] added removeCookie() function for compatibility with [[CookieManagerPlugin]]
2008.05.17 [2.4.0] copied code from StickyPopupPlugin to remove dependency
2008.05.12 [2.3.0] added "toggleQuickEdit" command handler (replaces inline script command)
2008.01.11 [2.2.0] converted from inline script
2007.03.29 [1.0.0] initial release (as inline script)
<<<
!!!!!Code
***/
//{{{
version.extensions.QuickEditPlugin= {major: 2, minor: 4, revision: 3, date: new Date(2009,6,11)};

// SET STYLESHEET
setStylesheet("\
.quickEdit a { border:2px outset ButtonFace; padding:0px 3px !important; \
	-moz-border-radius:.5em; -webkit-border-radius:.5em; \
	-moz-appearance:button !important; -webkit-appearance:push-button !important; \
	background-color:ButtonFace; color:ButtonText !important;  \
	line-height:200%; font-weight:normal; } \
.quickEdit a:hover { border: 2px inset ButtonFace; background-color:ButtonFace; }\
", "quickEditStyles");

// REMOVE COOKIE
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

// UTILITY FUNCTIONS
config.quickEdit = {
	processed: function(ev) { ev=ev||window.event;
		ev.cancelBubble=true;
		if(ev.stopPropagation) ev.stopPropagation();
		return false;
	},
	keyup: function(ev){ var k=(ev||window.event).keyCode;
		if (k==13) this.onclick();
		if (k==27) Popup.remove();
	},
	getField: function(where) {
		var here=story.findContainingTiddler(where); if (!here) return null;
		var e=story.getTiddlerField(here.getAttribute("tiddler"),"text");
		if (e&&e.getAttribute("edit")=="text") return e;
		return null;
	},
	setSelection: function(where,newtext) {
		var e=this.getField(where); if (!e) return false;
		e.focus(); replaceSelection(e,newtext);
		return false;
	},
	wrapSelection: function(where,before,after) {
		var e=this.getField(where); if (!e) return false;
		e.focus(); replaceSelection(e,before+config.quickEdit.getSelection(e)+after);
		return false;
	},
	getSelection: function(e) {
		var seltext="";
		if (e&&e.setSelectionRange)
			seltext=e.value.substr(e.selectionStart,e.selectionEnd-e.selectionStart);
		else if (document.selection) {
			var range = document.selection.createRange();
			if (range.parentElement()==e) seltext=range.text
		}
		return seltext;
	},
	promptForFilename: function(msg,path,file) {
		if(window.Components) { // moz
			try {
				netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
				var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
				var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
				picker.init(window, msg, nsIFilePicker.modeOpen);
				var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
				thispath.initWithPath(path);
				picker.displayDirectory=thispath;
				picker.defaultExtension='jpg';
				picker.defaultString=file;
				picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterImages);
				if (picker.show()!=nsIFilePicker.returnCancel)
					var result="file:///"+picker.file.persistentDescriptor.replace(/\\/g,'/');
			}
			catch(e) { alert('error during local file access: '+e.toString()) }
		}
		else { // IE
			try { // XP only
				var s = new ActiveXObject('UserAccounts.CommonDialog');
				s.Filter='All files|*.*|JPG files|*.jpg|GIF files|*.gif|PNG files|*.png|';
				s.FilterIndex=1; // default to JPG
				s.InitialDir=path;
				s.FileName=file;
				if (s.showOpen()) var result=s.FileName;
			}
			catch(e) { var result=prompt(msg,path+file); } // fallback for non-XP IE
		}
		return result;
	}
}
//}}}

//{{{
if (config.options.chkShowQuickEdit===undefined) config.options.chkShowQuickEdit=false;
config.commands.toggleQuickEdit = {
	hideReadOnly: true,
	getText: function() { return config.options.chkShowQuickEdit?'\u221Aquickedit':'quickedit'; },

	tooltip: 'show QuickEdit toolbar buttons',
	handler: function(event,src,title) {
		var opt='chkShowQuickEdit';
		config.options[opt]=!config.options[opt];
		config.macros.option.propagateOption(opt,"checked", config.options[opt],"input");
		if (config.options[opt]) saveOptionCookie(opt);	else removeCookie(opt);
		src.innerHTML=config.commands.toggleQuickEdit.getText();
		story.forEachTiddler(function(t,e){if (story.isDirty(t)) refreshElements(e);});
		return false;
	}
};
//}}}

// // COPIED FROM [[StickyPopupPlugin]] TO ELIMINATE PLUGIN DEPENDENCY
//{{{
if (config.options.chkStickyPopups==undefined) config.options.chkStickyPopups=false;
Popup.stickyPopup_onDocumentClick = function(ev)
{
	// if click is in a sticky popup, ignore it so popup will remain visible
	var e = ev ? ev : window.event; var target = resolveTarget(e);
	var p=target; while (p) {
		if (hasClass(p,"popup") && (hasClass(p,"sticky")||config.options.chkStickyPopups)) break;
		else p=p.parentNode;
	}
	if (!p) // not in sticky popup (or sticky popups disabled)... use normal click handling
		Popup.onDocumentClick(ev);
	return true;
};
try{removeEvent(document,"click",Popup.onDocumentClick);}catch(e){};
try{addEvent(document,"click",Popup.stickyPopup_onDocumentClick);}catch(e){};
//}}}
/%
|Name|QuickEditToolbar|
|Source|http://www.TiddlyTools.com/#QuickEditToolbar|
|Version|2.4.3|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.2|
|Type|transclusion|
|Requires|QuickEditPlugin|
|Optional|QuickEdit_*|
|Description|format/insert TiddlyWiki content using toolbar buttons|

Usage:
* install [[QuickEditPlugin]] (runtime support functions)

* add the toolbar to [[EditTemplate]]:
	<div macro='tiddler QuickEditToolbar with: show'></div>

* 'show' (optional) forces the toolbar to always be displayed or,
  omit keyword and use <<option chkShowQuickEdit>> setting

* selected QuickEdit buttons can also be added individually to the
  regular tiddler toolbar by adding references directly in [[EditTemplate]]:
	<span class='toolbar' macro='tiddler QuickEdit_...'></span>

* see [[QuickEditPackage]] for additional installation options

%/{{hidden fine center quickEdit{
<<tiddler {{ // show/hide toolbar
	var here=story.findContainingTiddler(place); if (here) var tid=here.getAttribute('tiddler');
	var show='$1'!='$'+'1'||config.options.chkShowQuickEdit||tid=='QuickEditToolbar'; 
	place.style.display=show?'block':'none';
'';}}>>/%

TOOLBAR DEFINITION - add, remove, or re-order items as desired:
= = = = = = = = = =
%/<<tiddler QuickEdit_replace>>/%
%/<<tiddler QuickEdit_split>>/%
%/<<tiddler QuickEdit_sort>>/%
%/<<tiddler QuickEdit_convert>>/%
%/ &nbsp;/% (SPACER)
%/<<tiddler QuickEdit_link>>/%
%/<<tiddler QuickEdit_insert>>/%
%/<<tiddler QuickEdit_macro>>/%
%/<<tiddler QuickEdit_image>>/%
%/ &nbsp;/% (SPACER)
%/<<tiddler QuickEdit_format>>/%
%/<<tiddler QuickEdit_align>>/%
%/<<tiddler QuickEdit_color>>/%
%/<<tiddler QuickEdit_font>>/%
%/ &nbsp;/% (SPACER)
%/<<tiddler QuickEdit_custom>>/%
%/}}}
/%
|Name|QuickEdit_align|
|Source|http://www.TiddlyTools.com/#QuickEdit_align|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - text alignment|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="align text"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select text alignment...','');
	s.options[s.length]=new Option('left','left');
	s.options[s.length-1].title='{{left{...}}}';
	s.options[s.length]=new Option('center','center');
	s.options[s.length-1].title='{{center{...}}}';
	s.options[s.length]=new Option('right','right');
	s.options[s.length-1].title='{{right{...}}}';
	s.options[s.length]=new Option('justify','justify');
	s.options[s.length-1].title='{{justify{...}}}';
	s.options[s.length]=new Option('float left','floatleft');
	s.options[s.length-1].title='{{floatleft{...}}}';
	s.options[s.length]=new Option('float right','floatright');
	s.options[s.length-1].title='{{floatright{...}}}';
	s.size=s.length;
	s.onclick=function(){ if (!this.value.length) return;
		config.quickEdit.wrapSelection(this.button,'{{'+this.value+'{','}}}');
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>align</a></html>
/%
|Name|QuickEdit_color|
|Source|http://www.TiddlyTools.com/#QuickEdit_color|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - text/background color|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="text/background color - @@color:#RGB;background-color:#RGB;...@@"
onclick="var p=Popup.create(this,null,'popup sticky smallform'); if (!p) return false;
 	p.style.padding='2px';
	function hex(d) { return '0123456789ABCDEF'.substr(d,1); }
	var fg=createTiddlyElement(p,'select'); fg.button=this;
	fg.style.width='12em';
	fg.options[0]=new Option('text color...','');
	fg.options[1]=new Option('\xa0 or enter a value','_ask');
	fg.options[2]=new Option('\xa0 or use default color','');
	for (var r=0;r<16;r+=3) for (var g=0;g<16;g+=3) for (var b=0;b<16;b+=3) {
		var label=hex(r)+hex(g)+hex(b);
		fg.options[fg.length]=new Option(label,'#'+label);
		fg.options[fg.length-1].style.color='#'+label;
	}
	fg.onchange=function(){ var val=this.value;
		if (val=='_ask') { val=prompt('Enter a CSS color value');
		if (!val||!val.length) return false; }
		this.options[0].value=val; this.options[0].text=val.length?'text: '+val:'text color...';
		var bg=this.nextSibling;
		for (var i=3;i<bg.options.length;i++) bg.options[i].style.color=val;
		var preview=this.nextSibling.nextSibling.nextSibling;
		var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
		if (!t.length) t='~AaBbCcDdEeFfGgHhIiJj 1234567890';
		var fg=this.value; if (fg.length) fg='color:'+fg+';';
		var bg=this.nextSibling.value; if (bg.length) bg='background-color:'+bg+';';
		if (fg.length||bg.length) t='@@'+fg+bg+t+'@@';
		removeChildren(preview); wikify(t,preview);
		this.selectedIndex=0; return false;
	};
	var bg=createTiddlyElement(p,'select'); bg.button=this;
	bg.style.width='12em';
	bg.options[0]=new Option('background color...','');
	bg.options[1]=new Option('\xa0 or enter a value','_ask');
	bg.options[2]=new Option('\xa0 or use default color','');
	for (var r=0;r<16;r+=3) for (var g=0;g<16;g+=3) for (var b=0;b<16;b+=3) {
		var label=hex(15-r)+hex(15-g)+hex(15-b);
		bg.options[bg.length]=new Option(label,'#'+label);
		bg.options[bg.length-1].style.backgroundColor='#'+label;
	}
	bg.onchange=function(){ var val=this.value;
		if (val=='_ask') { val=prompt('Enter a CSS color value');
		if (!val||!val.length) return false; }
		this.options[0].value=val;
		this.options[0].text=val.length?'background: '+val:'background color...';
		var fg=this.previousSibling;
		for (var i=3;i<fg.options.length;i++) fg.options[i].style.backgroundColor=val;
		var preview=this.nextSibling.nextSibling;
		var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
		if (!t.length) t='~AaBbCcDdEeFfGgHhIiJj 1234567890';
		var fg=this.previousSibling.value; if (fg.length) fg='color:'+fg+';';
		var bg=this.value; if (bg.length) bg='background-color:'+bg+';';
		if (fg.length||bg.length) t='@@'+fg+bg+t+'@@';
		removeChildren(preview); wikify(t,preview);
		this.selectedIndex=0; return false;
	};
	var b=createTiddlyElement(p,'input',null,null,null,{type:'button'}); b.button=this;
	b.value='ok'; b.style.width='4em';
	b.onclick=function() {
		var fg=this.previousSibling.previousSibling.value; if (fg.length) fg='color:'+fg+';';
		var bg=this.previousSibling.value; if (bg.length) bg='background-color:'+bg+';';
		var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
		if (fg.length||bg.length) config.quickEdit.setSelection(this.button,'@@'+fg+bg+t+'@@');
		Popup.remove(); return false;
	};
	var preview=createTiddlyElement(p,'div',null,'viewer'); var s=preview.style;
	s.border='1px solid'; s.margin='2px'; s.width='24em'; s.padding='3px'; s.MozBorderRadius='3px';
	s.overflow='hidden'; s.textAlign='center'; s.whiteSpace='normal';
	var t=config.quickEdit.getSelection(config.quickEdit.getField(this));
	wikify(t.length?t:'~AaBbCcDdEeFfGgHhIiJj 1234567890',preview);
	Popup.show();
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>color</a></html>
/%
|Name|QuickEdit_convert|
|Source|http://www.TiddlyTools.com/#QuickEdit_convert|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - convert between comma/tab-separated and TW table format|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="convert between comma/tab-separated and TW table format"
onclick="var e=config.quickEdit.getField(this);
	if (e) e.focus(); var txt=config.quickEdit.getSelection(e);
	if (txt.indexOf(',')+txt.indexOf('\t')+txt.indexOf('|')==-3) {
		alert('Please select text containing tabs, commas, or TiddlyWiki table syntax.');
		return false;
	}
	var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select a converter...','');
	if (txt.indexOf(',')!=-1) {
		s.options[s.length]=new Option('commas -> table','commasToTable');
		s.options[s.length]=new Option('commas -> tabs','commasToTabs');
	}
	if (txt.indexOf('\t')!=-1) {
		s.options[s.length]=new Option('tabs -> table','tabsToTable');
		s.options[s.length]=new Option('tabs -> commas','tabsToCommas');
	}
	if (txt.indexOf('|')!=-1) {
		s.options[s.length]=new Option('table -> tabs','tableToTabs');
		s.options[s.length]=new Option('table -> commas','tableToCommas');
	}
	s.size=s.length;
	s.onclick=function(){ if (!this.value.length) return;
	        var e=config.quickEdit.getField(this.button); if (!e) return false;
		e.focus(); var txt=config.quickEdit.getSelection(e);
		switch(this.value) {
			case 'tabsToTable':
				txt=txt.replace(/\t/g,'|').replace(/^|$/g,'|');
				txt=txt.replace(/\n/g,'|\n|').replace(/^\|$/g,'');
				break;
			case 'tableToTabs':
				txt=txt.replace(/\t/g,' ').replace(/\|/g,'\t');
				txt=txt.replace(/^\t/g,'').replace(/\t$/g,'');
				txt=txt.replace(/\n\t/g,'\n').replace(/\t\n/g,'\n');
				break;
			case 'commasToTable':
				txt=txt.replace(/,/g,'|').replace(/^|$/g,'|');
				txt=txt.replace(/\n/g,'|\n|').replace(/^\|$/g,''); 
				break;
			case 'tableToCommas':
				txt=txt.replace(/,/g,' ').replace(/\|/g,',');
				txt=txt.replace(/^,/g,'').replace(/,$/g,''); 
				txt=txt.replace(/\n,/g,'\n').replace(/,\n/g,'\n'); 
				break;
			case 'tabsToCommas':
				txt=txt.replace(/\t/g,',');
				break;
			case 'commasToTabs':
				txt=txt.replace(/,/g,'\t');
				break;
		}
		replaceSelection(e,txt);
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>convert</a></html>
/%
|Name|QuickEdit_custom|
|Source|http://www.TiddlyTools.com/#QuickEdit_custom|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - custom defined formats|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

!help
Reminders:

Custom formats are stored as an "HR-separated list" in [[QuickEdit_customList]], where the first line of each list item is the text 'label' to show in the droplist, followed by one or more lines of wiki content to be inserted into the tiddler source.

Substitution markers can be used to dynamically insert values into the formatted output: $1 inserts the tiddler editor's current selected text. $[[message|default value]] interactively prompts for a value to be inserted. $[[message|$1]] uses the selected text as the default value. $[[message|{{javascript}}]] calculates the default value using javascript code.
!end help

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="custom defined formats"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select a custom format...','');
	var items=store.getTiddlerText('QuickEdit_customList','').split('\n----\n');
	for (var i=0; i<items.length; i++) {
		if (!items[i].length) continue; var lines=items[i].split('\n');
		var label=lines.shift(); var val=lines.join('\n');
		s.options[s.length]=new Option(label,val); s.options[s.length-1].title=val;
	}
	s.options[s.length]=new Option('[Edit custom formats...]','_edit');
	s.options[s.length-1].title='add/change custom format definitions...';
	s.size=Math.min(s.length,15);
	s.onclick=function(){ if (!this.value.length) return;
		if (this.value=='_edit') {
			alert(store.getTiddlerText('QuickEdit_custom##help'));
			story.displayTiddler(story.findContainingTiddler(this.button),
				'QuickEdit_customList',DEFAULT_EDIT_TEMPLATE);
		} else {
		        var e=config.quickEdit.getField(this.button); if (!e) return false;
			e.focus(); var txt=config.quickEdit.getSelection(e);
			replaceSelection(e, this.value.replace(/\$\x31/g,txt)
				.replace(/\$\[\[[^\]]+\]\]/g, function(t){
					x=t.substr(3,t.length-5).split('|');
					var msg=x[0]; var def=x[1]||'';
					if (def.startsWith('{{')) {
						try{def=eval(def.substr(2,def.length-4))} catch(ex){showException(ex)}
					}
					return prompt(msg,def)||'';
				})
			);
		}
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>custom</a></html>
timestamp
$[[enter a date|{{new Date().formatString('DDD, MMM DDth, YYYY hh12:0mm:0ssam')}}]]
----
scrollbox
@@display:block;height:10em;overflow:auto;$1@@@@display:block;text-align:right;^^rul ned for mere...^^@@
----
nested slider
+++[$1]<<tiddler $1>>===
----
big red
@@font-size:36pt;color:red;$1@@
----
wikilink
[[$1]]
----
iframe + menubox
<html><div <span class='menubox' style='float:center;margin:0em'<div align="center"><iframe src="$1" frameborder="0" width="100%" height="800"></iframe></div></html>
----
iframe
<html><div align="center"><iframe src="$1" frameborder="0" width="100%" height="600"></iframe></div></html>
----
Hurtig fET tabel
<<forEachTiddler where 'tiddler.tags.contains("$1")'
sortBy 'tiddler.title'
write 
 '(index < 600)? "|!"+(index+1)+"|[["+tiddler.title+"]] |\n" : ""'
              begin '"|sortable|k\n" 
+"| !antal | !<<tag $1\>\> |h\n"' 
end 'count+" tiddlere tagget med $1\n"' none '"ingen tiddlere tagget med $1 \n"'>>
----
fET TagTilTabs
<<forEachTiddler
    where
       'tiddler.tags.contains("$1")'

    sortBy
       'tiddler.title.toUpperCase()'

    write '" [["+tiddler.title+" ]] \"view ["+tiddler.title+"]\" [["+tiddler.title+"]] "'

        begin '"<<tabs txtMyAutoTab "'

        end '">"+">"'

        none '"//Ingen tiddlere er tagget med \"$1\"//"'
>>
----
Tiddlermakro
<<tiddler $1>>
----
Billede
[img(100%+,auto)[$1]]
----
ShowPopup
<<tiddler ShowPopup with: $1[[Klik]][[Se i popup her]] button>>
----
Ryk ned og gør til overskrift

$1h
/%
|Name|QuickEdit_font|
|Source|http://www.TiddlyTools.com/#QuickEdit_font|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - select font family|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="set font-family CSS attribute - @@font-family:facename;...@@"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('vælg en font familie...','');
	var fonts=store.getTiddlerText('QuickEdit_fontList','').split('\n');
	for (var i=0; i<fonts.length; i++) {
		if (!fonts[i].length) continue;
		s.options[s.length]=new Option(fonts[i],fonts[i]);
		s.options[s.length-1].style.fontFamily=fonts[i];
	}
	s.options[s.length]=new Option('[Redigér fontlisten...]','_edit');
	s.options[s.length-1].title='skriv fontnavne, en pr linie...';
	s.size=Math.min(s.length,15);
	s.onclick=function(){
		if (this.value=='_edit')
			story.displayTiddler(story.findContainingTiddler(this.button),'QuickEdit_fontList',DEFAULT_EDIT_TEMPLATE);			
		else
			config.quickEdit.wrapSelection(this.button,'@@font-family:\x22'+this.value+'\x22;','@@');
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>font</a></html>
Arial,helvetica,sans-serif
Times New Roman,times,serif
Courier,monospaced
Comic Sans MS
/%
|Name|QuickEdit_format|
|Source|http://www.TiddlyTools.com/#QuickEdit_format|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - basic text formats, headings, blockquotes, etc.|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="plain text (remove ALL formatting)" accesskey="P" 
onclick="var e=config.quickEdit.getField(this); if (e) e.focus(); var txt=config.quickEdit.getSelection(e);
	config.quickEdit.setSelection(e,wikifyPlainText(txt)); return false;"
>&nbsp;~&nbsp;</a></html>/%

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="''bold''" accesskey="B"
onclick="config.quickEdit.wrapSelection(this,'\x27\x27','\x27\x27'); return false;"
>&nbsp;B&nbsp;</a></html>/%

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="//italics//" accesskey="I" 
onclick="config.quickEdit.wrapSelection(this,'//','//'); return false;"
>&nbsp;I&nbsp;</a></html>/%

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="__underline__" accesskey="U" 
onclick="config.quickEdit.wrapSelection(this,'__','__'); return false;"
>&nbsp;U&nbsp;</a></html>/%

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="--strikethrough--" accesskey="S" 
onclick="config.quickEdit.wrapSelection(this,'--','--'); return false;"
>&nbsp;S&nbsp;</a></html>/%

%/ &nbsp;/%  SPACER

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="format text"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select text format...','');
	s.options[s.length]=new Option('CSS class wrapper','{{$1{,}}},Enter a CSS classname');
	s.options[s.length-1].title='CSS class wrapper - {{classname classname etc{...}}}';
	s.options[s.length]=new Option('inline CSS styles','@@$1,@@,Enter CSS (attribute:value;attribute:value;...;)');
	s.options[s.length-1].title='inline CSS styles - @@attr:value;attr:value;...@@';
	s.options[s.length]=new Option('heading 1','\n!,\n');
	s.options[s.length-1].title='H1 heading - !';
	s.options[s.length]=new Option('heading 2','\n!!,\n');
	s.options[s.length-1].title='H2 heading - !!';
	s.options[s.length]=new Option('heading 3','\n!!!,\n');
	s.options[s.length-1].title='H3 heading - !!!';
	s.options[s.length]=new Option('heading 4','\n!!!!,\n');
	s.options[s.length-1].title='H4 heading - !!!!';
	s.options[s.length]=new Option('heading 5','\n!!!!!,\n');
	s.options[s.length-1].title='H5 heading - !!!!!';
	s.options[s.length]=new Option('blockquote','\n\<\<\<\n,\n\<\<\<\n');
	s.options[s.length-1].title='indented blockquote - \<\<\<';
	s.options[s.length]=new Option('monospaced','{{{,}}}');
	s.options[s.length-1].title='inline monospaced text - {{{...}}}';
	s.options[s.length]=new Option('plain text','\n{{{\n,\n}}}\n');
	s.options[s.length-1].title='multi-line monospaced text box - {{{...}}}';
	s.options[s.length]=new Option('superscript','^^,^^');
	s.options[s.length-1].title='^^superscript^^';
	s.options[s.length]=new Option('subscript','~~,~~');
	s.options[s.length-1].title='~~subscript~~';
	s.options[s.length]=new Option('HTML','<html>,<\x2fhtml>');
	s.options[s.length-1].title='HTML syntax - <html>...<\x2fhtml>';
	s.options[s.length]=new Option('comment','/%,%/');
	s.options[s.length-1].title='comment (hidden content) - /%...%/';
	s.size=s.length;
	s.onclick=function(){ if (!this.value.length) return;
		var parts=this.value.split(',');
		var prefix=parts[0]; var suffix=parts[1]; var ask=parts[2];
		if (ask) {
			var val=prompt(ask); if (!val) { Popup.remove(); return false; }
			prefix=prefix.replace(/\$1/g,val); suffix=suffix.replace(/\$1/g,val);
		}
		config.quickEdit.wrapSelection(this.button,prefix,suffix);
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>format</a></html>
/%
|Name|QuickEdit_image|
|Source|http://www.TiddlyTools.com/#QuickEdit_image|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - embed an image|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
	title="embed an image (jpg/gif/png) - [img[tooltip|URL]] or [img[tooltip|path/to/file.ext]]"
	onclick="var fn=config.quickEdit.promptForFilename(
		'Enter/select an image file',getLocalPath(document.location.href),'');
	if (!fn) return false;  /* cancelled by user */
	var h=document.location.href; var p=decodeURIComponent(h.substr(0,h.lastIndexOf('/')+1));
	if (fn.startsWith(p)) fn=fn.substr(p.length); /* use RELATIVE path/filename.ext */
	var tip=prompt('Enter a tooltip for this image',''); if (!tip) tip=''; else tip+='|';
	return config.quickEdit.setSelection(this,'[img['+tip+fn+']]');"
>image</a></html>
/%
|Name|QuickEdit_insert|
|Source|http://www.TiddlyTools.com/#QuickEdit_insert|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - insert content from another tiddler or external file|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="insert content from another tiddler or external file"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';

	var s2=createTiddlyElement(p,'select'); s2.title='filter by tag';
	s2.options[0]=new Option('filter by tag...','');
	s2.options[s2.length]=new Option('[all tiddlers]','');
	var tags=store.getTags();
	for (var t=0; t<tags.length; t++) s2.options[s2.length]=new Option(tags[t][0],tags[t][0]);
	s2.onchange=function(){
		var tag=this.value;
		var tids=tag.length?store.reverseLookup('tags',tag,true):store.reverseLookup('tags','excludeLists');
		var list=this.nextSibling.nextSibling;
		while (list.length) list.options[0]=null;
		var prompt='select a tiddler or file...';
		if (tag.length) prompt='select a tagged tiddler ['+tids.length+' matches]...';
		list.options[0]=new Option(prompt,'');
		if (!tag.length) list.options[list.length]=new Option('[browse for file...]','_file');
		for (var t=0; t<tids.length; t++) {
			list.options[list.length]=new Option(tids[t].title,tids[t].title);
			list.options[list.length-1].title=tids[t].getSubtitle();
		}
		list.size=Math.min(list.length,10);
		list.selectedIndex=0; list.focus();
		this.style.width=list.offsetWidth+'px';
		if (!tag.length) this.selectedIndex=0;
	};
	createTiddlyElement(p,'br');

	var s=createTiddlyElement(p,'select'); s.button=this;
	s.title='select a tiddler or file';
	s.options[0]=new Option('select a tiddler or file...','');
	s.options[s.length]=new Option('[browse for file...]','_file');
	var tids=store.reverseLookup('tags','excludeLists');
	for (var t=0; t<tids.length; t++) {
		s.options[s.length]=new Option(tids[t].title,tids[t].title);
		s.options[s.length-1].title=tids[t].getSubtitle();
	}
	s.size=Math.min(s.length,10);
	s.onclick=function(){ if (!this.value.length) return false;
		if (this.value=='_file') {
			var fn=config.quickEdit.promptForFilename(
				'Enter/select a text file',getLocalPath(document.location.href),'');
			if (!fn) return false; /* cancelled by user */
			var txt=loadFile(getLocalPath(fn));
			if (!txt) { alert('Error: unable to read contents from \0027'+fn+'\0027'); return; }
		}
		else var txt=store.getTiddlerText(this.value);
		if (!txt) {
			displayMessage(this.value+' not found');
			this.selectedIndex=0; this.focus();
			return false;
		}
		config.quickEdit.setSelection(this.button,txt);
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s2.style.width=s.offsetWidth+'px';
	s.focus();
	return config.quickEdit.processed(event);"
>insert</a></html>
/%
|Name|QuickEdit_link|
|Source|http://www.TiddlyTools.com/#QuickEdit_link|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - link to tiddler or external file|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="add a link to a tiddler or external file - [[link text|TiddlerName]]"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';

	var s2=createTiddlyElement(p,'select'); s2.title='filter by tag';
	s2.options[0]=new Option('filter by tag...','');
	s2.options[s2.length]=new Option('[all tiddlers]','');
	var tags=store.getTags();
	for (var t=0; t<tags.length; t++) s2.options[s2.length]=new Option(tags[t][0],tags[t][0]);
	s2.onchange=function(){
		var tag=this.value;
		var tids=tag.length?store.reverseLookup('tags',tag,true):store.reverseLookup('tags','excludeLists');
		var list=this.nextSibling.nextSibling;
		while (list.length) list.options[0]=null;
		var prompt='select a tiddler or file...';
		if (tag.length) prompt='select a tagged tiddler ['+tids.length+' matches]...';
		list.options[0]=new Option(prompt,'');
		if (!tag.length) list.options[list.length]=new Option('[browse for file...]','_file');
		for (var t=0; t<tids.length; t++) {
			list.options[list.length]=new Option(tids[t].title,tids[t].title);
			list.options[list.length-1].title=tids[t].getSubtitle();
		}
		list.size=Math.min(list.length,10);
		list.selectedIndex=0; list.focus();
		this.style.width=list.offsetWidth+'px';
		if (!tag.length) this.selectedIndex=0;
	};
	createTiddlyElement(p,'br');

	var s=createTiddlyElement(p,'select'); s.button=this;
	s.title='select a tiddler or file';
	s.options[0]=new Option('select a tiddler or file...','');
	s.options[s.length]=new Option('[browse for file...]','_file');
	var tids=store.reverseLookup('tags','excludeLists');
	for (var t=0; t<tids.length; t++) {
		s.options[s.length]=new Option(tids[t].title,tids[t].title);
		s.options[s.length-1].title=tids[t].getSubtitle();
	}
	s.size=Math.min(s.length,10);
	s.onclick=function(){ if (!this.value.length) return false;
		var title=this.value; var txt=title;
		if (title=='_file') {
			title=config.quickEdit.promptForFilename('Select a file',
				getLocalPath(document.location.href),'');
			if (!title) { this.selectedIndex=0; this.focus(); return false; }
			var txt=title.substr(title.lastIndexOf('/')+1);
		}
		var txt=prompt('Enter the text to display for this link',txt);
		if (!txt) { this.selectedIndex=0; this.focus(); return false; }
		config.quickEdit.setSelection(this.button,'[['+txt+'|'+title+']]');
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s2.style.width=s.offsetWidth+'px';
	s.focus();
	return config.quickEdit.processed(event);"
>link</a></html>
/%
|Name|QuickEdit_macro|
|Source|http://www.TiddlyTools.com/#QuickEdit_macro|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - embed a macro with 'guide text'|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

Note:
Optional 'guideText' can be used to add suggested defaults/placeholders for specific macro parameters.
Add guideText to your own plugin-defined macros using:
	config.macros.macroName.guideText='guide text goes here';

%/<<tiddler {{
	/* define guide text for a few common TW core macros */
	config.macros.edit.guideText='fieldname #rows';
	config.macros.view.guideText='fieldname (link,wikified,date) format';
	config.macros.slider.guideText='cookie TiddlerName label tooltip';
	config.macros.option.guideText='(txtCookieName,chkCookieName)';
	config.macros.tiddler.guideText='TiddlerName with: params...';
	''; /* must return blank to suppress output */ }}>>/%

%/<html><hide linebreaks><a href='javascript:;' class='tiddlyLink' tabindex='-1' 
title='add a macro - \<\<macroName ...\>\>'
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select a macro...','');
	var macros=[]; for (var m in config.macros) if (config.macros[m].handler) macros.push(m); macros.sort();
	for (var i=0; i<macros.length; i++) { var m=macros[i];
		var help=config.macros[m].guideText; if (!help) help=''; else help=' '+help;
		s.options[s.length]=new Option(m,m+help);
		s.options[s.length-1].title='\<\<'+m+help+'\>\>';
	}
	s.size=Math.min(s.length,15);
	s.onclick=function(){ if (!this.value.length) return;
		config.quickEdit.setSelection(this.button,'\<\<'+this.value+'\>\>');
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>macro</a></html>
/%
|Name|QuickEdit_replace|
|Source|http://www.TiddlyTools.com/#QuickEdit_replace|
|Version|2.4.4|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - find/replace selected text with replacement text|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="find/udskift valgt tekst med ny tekst"
onclick="var here=story.findContainingTiddler(this); if (!here) return false;
	var e=config.quickEdit.getField(here);
	var s=config.quickEdit.getSelection(e); 
	var p=Popup.create(this,null,'popup sticky smallform'); if (!p) return false;
	var t=createTiddlyElement(p,'input'); t.onfocus=function(){this.select()};
	t.value=s.length?s:'skriv måltekst';
	var r=createTiddlyElement(p,'input'); r.onfocus=function(){this.select()};
	r.value='skriv erstatningstekst';
	var tid=here.getAttribute('tiddler');
	var b=createTiddlyElement(p,'button',null,null,'?',{tid:tid});
	b.style.width='2em';
	b.title='FIND/FIND Næste måltekst';
	b.onclick=function(ev) { /* FIND */
		var e=story.getTiddlerField(this.getAttribute('tid'),'text');
		if (!e||e.getAttribute('edit')!='text') return;
		var t=this.previousSibling.previousSibling;
		var tv=t.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
		e.focus();
		if (e.setSelectionRange) { /* MOZ */
			var newstart=e.value.indexOf(tv,e.selectionStart+1);
			if (newstart==-1) newstart=e.value.indexOf(tv); /* wrap around */
			if (newstart==-1) { alert('\u0022'+t.value+'\u0022 not found'); t.focus(); return; }
			e.setSelectionRange(newstart,newstart+tv.length);
			var linecount=e.value.split('\n').length;
			var thisline=e.value.substr(0,e.selectionStart).split('\n').length;
			e.scrollTop=Math.floor((thisline-1-e.rows/2)*e.scrollHeight/linecount);
		} else if (document.selection) { /* IE */
			var range=document.selection.createRange();
			if(range.parentElement()==e) {
				range.collapse(false);
				var found=false; try{found=range.findText(v,e.value.length,4)}catch(e){}
				if (found) range.select();
				else { alert('\u0022'+t.value+'\u0022 not found'); t.focus(); }
			}
		}
	};
	b=createTiddlyElement(p,'button',null,null,'=',{tid:tid});
	b.style.width='2em';
	b.title='ERSTAT valgt tekst';
	b.onclick=function(ev) { /* REPLACE */
		var e=story.getTiddlerField(this.getAttribute('tid'),'text');
		if (!e||e.getAttribute('edit')!='text') return;
		var t=this.previousSibling.previousSibling.previousSibling;
		var r=this.previousSibling.previousSibling;
		var rv=r.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
		if (   (e.selectionStart!==undefined && e.selectionEnd==e.selectionStart)
		    || (document.selection && document.selection.createRange().text==''))
			this.previousSibling.click(); /* no selection... do FIND first */
		if (   (e.selectionStart!==undefined && e.selectionEnd==e.selectionStart)
		    || (document.selection && document.selection.createRange().text==''))
			{ t.focus(); return; } /* still no selection... goto target input */
		e.focus(); replaceSelection(e,rv);
	};
	b=createTiddlyElement(p,'button',null,null,'+',{tid:tid});
	b.style.width='2em';
	b.title='ERSTAT valgt tekst OG FIND NÆSTE måltekst';
	b.onclick=function(ev) { /* REPLACE and FIND NEXT */
		this.previousSibling.click();
		this.previousSibling.previousSibling.click();
	};
	b=createTiddlyElement(p,'button',null,null,'!',{tid:tid});
	b.style.width='2em';
	b.title='ERSTAT ALLE forekomster af måltekst';
	b.onclick=function(ev) { /* REPLACE ALL */
		var e=story.getTiddlerField(this.getAttribute('tid'),'text');
		if (!e||e.getAttribute('edit')!='text') return;
		var t=this.previousSibling.previousSibling.previousSibling.previousSibling.previousSibling;
		var r=this.previousSibling.previousSibling.previousSibling.previousSibling;
		var tv=t.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
		var rv=r.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
		if (!tv.length) { alert('Please enter the target text'); t.focus(); return; }
		var m='This will replace all occurrences of:\n\n'+tv+'\n\nwith:\n\n'+rv+'\n\nAre you sure?';
		if (!confirm(m)) { r.focus(); r.select(); return; }
		e.value=e.value.replace(new RegExp(tv.escapeRegExp(),'gm'),rv);
		e.focus(); e.select(); Popup.remove();
	};
	Popup.show();
	if (!s.length) {t.focus();t.select()} else {r.focus();r.select()}
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>erstat</a></html>
/%
|Name|QuickEdit_sort|
|Source|http://www.TiddlyTools.com/#QuickEdit_sort|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - sort lines of text|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="sort lines of text"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select sort order...','');
	s.options[s.length]=new Option('ascending','A');
	s.options[s.length-1].title='ascending';
	s.options[s.length]=new Option('descending','D');
	s.options[s.length-1].title='descending';
	s.size=s.length;
	s.onclick=function(){ if (!this.value.length) return;
		var e=config.quickEdit.getField(this.button); if (!e) return false;
		var lines=config.quickEdit.getSelection(e).split('\n').sort();
		if (this.value=='D') lines=lines.reverse();
		replaceSelection(e,lines.join('\n'));
		e.focus();
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>sortér</a></html>
/%
|Name|QuickEdit_split|
|Source|http://www.TiddlyTools.com/#QuickEdit_split|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - move selection to new tiddler and insert link, embedded tiddler, or slider|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

Based on ideas originally developed by YannPerrin
(http://yann.perrin.googlepages.com/twkd.html#easySlicer)

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="move selection to new tiddler and insert link, embedded tiddler, or slider"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	p.style.whiteSpace='nowrap';
	var i=createTiddlyElement(p,'input');
	i.defaultValue='Enter a new tiddler title';
	i.onfocus=function(){this.select()};
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select type...','');
	s.options[0].title='select split type';
	s.options[1]=new Option('link','link');
	s.options[1].title='replace with [[TiddlerName]]';
	s.options[2]=new Option('embed','embed');
	s.options[2].title='replace with \<\<tiddler TiddlerName\>\>';
	s.options[3]=new Option('slider','slider');
	s.options[3].title='replace with \<\<slider \u0022\u0022 [[TiddlerName]] [[label]] [[tooltip]]\>\>';
	s.onchange=function(){
		if (s.previousSibling.value==s.previousSibling.defaultValue)
			{ alert('A tiddler title is required'); s.selectedIndex=0; s.previousSibling.focus(); return false; }
		var tid=s.previousSibling.value;
		if (store.tiddlerExists(tid) && !confirm(config.messages.overwriteWarning.format([tid])))
			{ s.previousSibling.focus(); return false; }
		switch(s.value) {
			case 'link':
				var newtxt='[['+tid+']]';
				break;
			case 'embed':
				var newtxt='\<\<tiddler [['+tid+']]\>\>';
				break;
			case 'slider':
				var label=prompt('Enter a slider label',tid);
				if (!label) { Popup.remove(); return false; }
				var tip=prompt('Enter a slider tooltip',label);
				if (!tip) { Popup.remove(); return false; }
				var newtxt='\<\<slider \u0022\u0022 [['+tid+']] [['+label+']] [['+tip+']]\>\>';
				break;
		}
		var txt=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		store.saveTiddler(tid,tid,txt,config.options.txtUserName,new Date(),[],{});
		story.displayTiddler(story.findContainingTiddler(this.button),tid);
		config.quickEdit.setSelection(this.button,newtxt);
		Popup.remove(); return false;
	};
	Popup.show();
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>split</a></html>
/***
|Name:|RenameTagsPlugin|
|Description:|Allows you to easily rename or delete tags across multiple tiddlers|
|Version:|3.0 ($Rev: 5501 $)|
|Date:|$Date: 2008-06-10 23:11:55 +1000 (Tue, 10 Jun 2008) $|
|Source:|http://mptw.tiddlyspot.com/#RenameTagsPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
Rename a tag and you will be prompted to rename it in all its tagged tiddlers.
***/
//{{{
config.renameTags = {

	prompts: {
		rename: "Rename the tag '%0' to '%1' in %2 tidder%3?",
		remove: "Remove the tag '%0' from %1 tidder%2?"
	},

	removeTag: function(tag,tiddlers) {
		store.suspendNotifications();
		for (var i=0;i<tiddlers.length;i++) {
			store.setTiddlerTag(tiddlers[i].title,false,tag);
		}
		store.resumeNotifications();
		store.notifyAll();
	},

	renameTag: function(oldTag,newTag,tiddlers) {
		store.suspendNotifications();
		for (var i=0;i<tiddlers.length;i++) {
			store.setTiddlerTag(tiddlers[i].title,false,oldTag); // remove old
			store.setTiddlerTag(tiddlers[i].title,true,newTag);  // add new
		}
		store.resumeNotifications();
		store.notifyAll();
	},

	storeMethods: {

		saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,

		saveTiddler: function(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created) {
			if (title != newTitle) {
				var tagged = this.getTaggedTiddlers(title);
				if (tagged.length > 0) {
					// then we are renaming a tag
					if (confirm(config.renameTags.prompts.rename.format([title,newTitle,tagged.length,tagged.length>1?"s":""])))
						config.renameTags.renameTag(title,newTitle,tagged);

					if (!this.tiddlerExists(title) && newBody == "")
						// dont create unwanted tiddler
						return null;
				}
			}
			return this.saveTiddler_orig_renameTags(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created);
		},

		removeTiddler_orig_renameTags: TiddlyWiki.prototype.removeTiddler,

		removeTiddler: function(title) {
			var tagged = this.getTaggedTiddlers(title);
			if (tagged.length > 0)
				if (confirm(config.renameTags.prompts.remove.format([title,tagged.length,tagged.length>1?"s":""])))
					config.renameTags.removeTag(title,tagged);
			return this.removeTiddler_orig_renameTags(title);
		}

	},

	init: function() {
		merge(TiddlyWiki.prototype,this.storeMethods);
	}
}

config.renameTags.init();

//}}}
''<<openTiddlers text:Home tiddlers:{{store.getTiddlerText("DefaultTiddlers")}} closeAll:true>>
[[Wiki Markup]]
[[Articles A-Z]]
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>
/***
|Name|SimpleMessagePlugin|
|Version|0.1|
|Author|Michael Mahemoff, Osmosoft|
|''License:''|[[BSD open source license]]|
|~CoreVersion|2.2|
***/

/*{{{*/
(function() {
if(!version.extensions.SimpleMessagePlugin) {

  version.extensions.SimpleMessagePlugin = {installed:true};
  version.extensions.SimpleMessagePlugin.delay = 10000;
  
  var timer;

  var _displayMessage = displayMessage;
  displayMessage = function() {
    if (timer) {
      timer=null;
      clearTimeout(timer);
    }
    timer = setTimeout(clearMessage, version.extensions.SimpleMessagePlugin.delay);
    _displayMessage.apply(this, arguments);
  }

  var _clearMessage = clearMessage;
  clearMessage = function() {
    clearTimeout(timer);
    return _clearMessage.apply(this, arguments);
  }

} // end of 'install only once'
})();
/*}}}*/
den mobile wiki!
MiniPedia
/***
http://tiddlystyles.com/#theme:TiddlyPedia
Modifications by Dennis: http://flx.me
***/
[[StyleSheetShortcuts]]
/*{{{*/
#MenuLink a.externalLink{
 text-decoration: none;
 color:#002bb8;
 padding-right: 1em;
 background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAFVBMVEVmmcwzmcyZzP8AZswAZv////////9E6giVAAAAB3RSTlP///////8AGksDRgAAADhJREFUGFcly0ESAEAEA0Ei6/9P3sEcVB8kmrwFyni0bOeyyDpy9JTLEaOhQq7Ongf5FeMhHS/4AVnsAZubxDVmAAAAAElFTkSuQmCC) 100% 50% no-repeat;
}

#MenuLink a.externalLink:hover{
 text-decoration: underline;
}

body{
 background: #f9f9f9 url(data:image/jpeg;base64,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) no-repeat top left;
}

#titleLine{
 display: block;
 background: transparent url(data:image/png;base64,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) no-repeat 18px -7px;
 _background: transparent;
 height: 120px;
 _height: 135px;
 width: 150px;
 color: #000;
 border: 1px;
 padding: 0;
 margin: 0;
}

* html #titleLine{
 filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='data:image/png;base64,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',sizingMethod='scale');
}

#contentWrapper #siteTitle a{
 display: inline;
 font-weight: bold;
 color: #000;
 font-size: 13px;
}

#siteSubtitle{
 padding: 0;
}

#siteTitle, #mainMenu{
 position: static;
}

#contentWrapper #sidebar{
 top: 0;
 left: 0;
}

#displayArea {
 margin: 0 0 0 15em;
}

a.button#backstageShow {
 background: #000;
}

#messageArea{
 position: fixed;
 padding-top: 3px;
 height: 10px;
 top: -5px;
 right: 80px;
 font-size: 10px;
 border: 1px solid #FFF;
 background: #FFEE88;
 z-index: 25;
 color: #000;
 text-decoration: none;
}

#messageArea a:link{
 text-decoration: none;
}

#messageArea a:hover{
 text-decoration: none;
}

.viewer{
 background: #fff;
 border: 1px solid #aaa;
 padding: 1em;
margin: 0;
}

.body{
 padding: 1px;
}

.title{
 background: #fff;
 border: 1px solid #aaa;
 display: inline;
 margin-left: .5em;
 padding: 2px .5em;
 border-bottom: 0;
 font-weight: bold;
 color: #000;
 font-size: 1.2em;
}

.toolbar{
 visibility: visible;
 display: inline;
 padding: 0;
 font-family: sans-serif;
}

.toolbar a.button:link,.toolbar a.button:visited{
 background: #fff;
 border: 1px solid #aaa;
 color:#002bb8;
 font-size: 11px;
 padding-bottom: 0;
 margin-right: .25em;
}

/* TiddlyPedia was Created by Clinton Checketts based on the Monobook skin of Wikipedia */

#contentWrapper .toolbar .button:hover{
 border-bottom: 1px solid #fff;
 background: #fff;
 color:#002bb8;
}

.toolbar a.button:hover{
 border-bottom: 1px solid #fff;
 background: #fff;
 color:#000;
}

#displayArea .viewer a,a.button:link,a.button:visited,
a.tiddlyLink:link,a.tiddlyLink:visited,
#sidebarOptions .sliderPanel a{
 color:#002bb8;
 background: transparent;
 border: 0;
}

.viewer a:hover,a.button:hover,a.button:active,
a.tiddlyLink:hover,a.tiddlyLink:active,
.viewer a.button:hover,
#sidebarOptions .sliderPanel a:hover{
 color:#002bb8;
 background: transparent;
 text-decoration: underline;
}

#mainMenu{
 font-family: sans-serif;
 text-align: left;
 font-size: x-small;
 width: 100%;
 margin: 0;
 padding: 0;
}

#mainMenu h1{
 font-size: 11px;
 font-weight: normal;
 padding: 0;
 margin: 0;
 background: transparent;
}

#mainMenu ul{
 font-size: 11px;
 border: 1px solid #aaa;
 padding: .25em 0;
 margin: 0;
 list-style-type: square;
 list-style-image: url(bullet.gif);
 background: #fff;
 width: 100%;
}

#mainMenu li{
 margin: 0 0 0 2em;
 padding: 0;
}

#contentWrapper #mainMenu a:link,#contentWrapper #mainMenu a:visited{
 color:#002bb8;
 padding: 0;
 margin: 0;
 background: transparent;
}

#mainMenu .externalLink {
 text-decoration: none;
}

#mainMenu .externalLink:hover {
 text-decoration: underline;
}

#sidebar{
 padding: .5em;
 font-family: sans-serif;
}

#sidebarOptions{
 border: 1px solid #aaa;
 background: #fff;
 padding-top: 8px;
 padding-bottom: 4px;
 width: 100%;
}

#menuEntries{
 border: 1px solid #aaa;
 background: #fff;
 padding-top: 6px;
 padding-bottom: 12px;
 padding-left: 13px;
 width: 160px;
}

p.sidetext{
 margin: 6px 0 0 0;
 padding-left: 13px;
}

#menuEntries ul{
 list-style-type: none;
 padding-left: 0px;
 margin-top: 0px;
 margin-bottom: -5px;
}

#menuEntries li{
 margin-top: 2px;
}

#contentWrapper #menuEntries a,#contentWrapper #menuEntries a:hover{
 color:#002bb8;
 padding: .1em 0 .1em 2em;
 margin-left: -10px;
 font-weight:normal;
 background: transparent url(data:image/gif;base64,R0lGODlhBQANAIAAAGOMnP///yH5BAEAAAEALAAAAAAFAA0AAAIJjI+pu+APo4SpADs%3D) 10px -2px no-repeat;
}

#contentWrapper #sidebarOptions a,#contentWrapper #sidebarOptions a:hover{
 color:#002bb8;
 font-weight:normal;
 padding: .1em 0 .1em 2em;
 background: transparent url(data:image/gif;base64,R0lGODlhBQANAIAAAGOMnP///yH5BAEAAAEALAAAAAAFAA0AAAIJjI+pu+APo4SpADs%3D) 10px -2px no-repeat;
}

#sidebar .sliderPanel{
 margin: 0;
}

#contentWrapper #sidebarOptions .button,#contentWrapper #sidebarOptions .button:hover{
 color:#002bb8;
 padding: .1em 0 .1em 2em;
 background: transparent url(data:image/gif;base64,R0lGODlhBQANAIAAAGOMnP///yH5BAEAAAEALAAAAAAFAA0AAAIJjI+pu+APo4SpADs%3D) 10px -2px no-repeat;
}

#sidebarOptions input{
 width: 89%;
 margin: 0 .5em;
 margin-bottom: 5px;
 padding-left: 3px;
}

#contentWrapper #sidebarTabs .tiddlyLink,#contentWrapper #sidebarTabs .button,
#contentWrapper #sidebarTabs a.tiddlyLink:hover,#contentWrapper #sidebarTabs a.button:hover{
 background: transparent;
 color: #002bb8;
}

.footer{
 margin: -1em 0 1em 0; 
}

.footer .button:hover,.editorFooter .button:hover{
background: transparent;
 color: #002bb8;
 border-bottom: 1px solid #002bb8;
}

#popup{
 background: #e9e9e9;
 color: #000;
}

#popup hr{
 border-color: #aaa;
 background-color: #aaa;
}

#popup a{
 color: #000;
}

#popup a:hover,#contentWrapper #sidebarTabs #popup a:hover{
 background: #666;
 color: #fff;
 text-decoration: none;
}

.tabset{
 background: #aaa;
 border: 1px solid #aaa;
 border-bottom: 0;
 padding: 2px 0 2px 3px;
 cursor: default;
 color: #000;
}

#tabset .tabSelected {
 background: #FFF;
 border: 1px solid #aaa;
 border-bottom: 0;
 cursor: default;
 padding-bottom: 3px;
 color: #000;
}

#displayArea .tiddler a.tiddlyLinkNonExisting{
 color: #ba0000;
}

#displayArea .tiddler a.externalLink{
 text-decoration: none;
 color:#002bb8;
 padding-right: 1em;
 background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAFVBMVEVmmcwzmcyZzP8AZswAZv////////9E6giVAAAAB3RSTlP///////8AGksDRgAAADhJREFUGFcly0ESAEAEA0Ei6/9P3sEcVB8kmrwFyni0bOeyyDpy9JTLEaOhQq7Ongf5FeMhHS/4AVnsAZubxDVmAAAAAElFTkSuQmCC) 100% 50% no-repeat;
}

#displayArea .tiddler a.externalLink:hover{
 text-decoration: underline;
}

.viewer pre{
 background: #e9e9e9;
 border: 1px solid #666;
}

.viewer h1{
 background: transparent;
 font-size: 19pt;
 padding-bottom: 7px;
 border-bottom: 1px solid #aaa;
}

.viewer h2, .viewer h3, .viewer h4, .viewer h5, .viewer h6{
 background: transparent;
 border-style: none;
 margin-bottom: 0px;
}

#sidebar .sliderPanel{
 background: #e9e9e9;
}

#sidebar .sliderPanel input{width: auto;}

.tagged, .tagging, .listTitle{
 float: none;
 display: inline;
}

.tagged li, .tagging li,
.tagged ul, .tagging ul{
 display: inline;
}

.dcTOC ul {
    padding-top: 0px;
	color:black;
	list-style-type: disc;
}

.dcTOC ul ul {
	color:black;
	list-style-type: circle;
}

.dcTOC ul ul ul {
	color:black;
	list-style-type: disc;
}

.dcTOC a {
	color: #1d65bc;
}

.dcTOCTop {
	font-size: 2em;
	color: green;
}

.dcTOCTop a{
	font-size: 2em;
	color: #EEE;
}

.dcTOCToc {
	padding: 3px 0 0 50px;
    font-size: 13px;
	font-weight: bold; 
	color: black;
}

.dcTOC {
	width: 20%;
	padding-left: 15px;
	border: 1px solid #CCCCCC;
	background-color: #EEE;
}

.dcTOC ol {
	margin: 0 1em;
}

#sidebarTabs{
 background: #fff;
 margin-top: .5em;
 width: 100%;
}

#sidebarTabs .tabContents,#sidebarTabs .tabContents .tabContents{
 border: 1px solid #aaa;
 background: #fff;
}

#sidebarTabs .tabSelected,#sidebarTabs .tabcontents .tabSelected {
 background: #fff;
 border: 1px solid #aaa;
 border-bottom: 0;
 cursor: default;
 padding-bottom: 3px;
 color: #000;
}

#sidebarTabs .tabUnselected,#sidebarTabs .tabContents .tabUnselected{
 background: #aaa;
 padding-bottom: 0;
 color: #000; 
}

#tiddlersBar {margin:1em 0 0 1em;z-index:10;}
#tiddlerDisplay{margin-top:-1.1em;z-index:0;}
.toolbar {clear:both; float:right;margin-top:0.8em;}
.toolbar a.button{border:1px solid transparent !important;}
.toolbar a.button:hover {border:1px solid #EEEEEE;}
a#backstageShow.button {background:#000;}
a#backstageShow.button:hover {color:#666;}
.tagging, .tagged {background:none;border:0;}
.selected .tagging, .selected .tagged {background:none;border:0;}
#contentWrapper .toolbar .tagged .button {background-color:transparent;}
.fieldsetFix {width:100%;}
.editor textarea,.editor input {width:80%;}

#tab .tabUnselected{
background: #fff;
}

/*}}}*/
/***
|Name|StyleSheetShortcuts|
|Source|http://www.TiddlyTools.com/#StyleSheetShortcuts|
|Version||
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|CSS|
|Requires||
|Description|'convenience' classes for common formatting, alignment, boxes, tables, etc.|

These 'style tweaks' can be easily included in other stylesheet tiddler so they can share a baseline look-and-feel that can then be customized to create a wide variety of 'flavors'.
***/
/*{{{*/

/* text alignments */
.left
	{ display:block;text-align:left; }
.center
	{ display:block;text-align:center; }
.center table
	{ margin:auto !important; }
.right	
	{ display:block;text-align:right; }
.justify
	{ display:block;text-align:justify; }
.indent
	{ display:block;margin:0;padding:0;border:0;margin-left:2em; }
.floatleft
	{ float:left; }
.floatright
	{ float:right; }
.valignTop, .valignTop table, .valignTop tbody, .valignTop th, .valignTop tr, .valignTop td
	{ vertical-align:top; }
.valignBottom, .valignBottom table, .valignBottom tbody, .valignBottom th, .valignBottom tr, .valignBottom td
	{ vertical-align:bottom; }
.clear
	{ clear:both; }
.wrap
	{ white-space:normal; }
.nowrap
	{ white-space:nowrap; }
.hidden
	{ display:none; }
.show
	{ display:inline !important; }
.span
	{ display:span; }
.block
	{ display:block; }
.relative
	{ position:relative; }
.absolute
	{ position:absolute; }

/* font sizes */
.big
	{ font-size:14pt;line-height:120% }
.medium
	{ font-size:12pt;line-height:120% }
.normal
	{ font-size:9pt;line-height:120% }
.small
	{ font-size:8pt;line-height:120% }
.fine
	{ font-size:7pt;line-height:120% }
.tiny
	{ font-size:6pt;line-height:120% }
.larger
	{ font-size:120%; }
.smaller
	{ font-size:80%; }

/* font styles */
.bold
	{ font-weight:bold; }
.italic
	{ font-style:italic; }
.underline
	{ text-decoration:underline; }

/* plain list items (no bullets or indent) */
.nobullets li { list-style-type: none; margin-left:-2em; }

/* multi-column tiddler content (not supported in Internet Explorer) */
.twocolumns { display:block;
	-moz-column-count:2; -moz-column-gap:1em; -moz-column-width:50%; /* FireFox */
	-webkit-column-count:2; -webkit-column-gap:1em; -webkit-column-width:50%; /* Safari */
	column-count:2; column-gap:1em; column-width:50%; /* Opera */
}
.threecolumns { display:block;
	-moz-column-count:3; -moz-column-gap:1em; -moz-column-width:33%; /* FireFox */
	-webkit-column-count:3; -webkit-column-gap:1em; -webkit-column-width:33%; /* Safari */
	column-count:3; column-gap:1em; column-width:33%; /* Opera */
}
.fourcolumns { display:block;
	-moz-column-count:4; -moz-column-gap:1em; -moz-column-width:25%; /* FireFox */
	-webkit-column-count:4; -webkit-column-gap:1em; -webkit-column-width:25%; /* Safari */
	column-count:4; column-gap:1em; column-width:25%; /* Opera */
}

/* page breaks */
.breakbefore { page-break-before:always; }
.breakafter { page-break-before:always; } 

/* show/hide browser-specific content for InternetExplorer vs. non-IE ("moz") browsers */
*[class="ieOnly"]
	{ display:none; } /* hide in moz (uses CSS selector) */
* html .mozOnly, *:first-child+html .mozOnly
	{ display: none; } /* hide in IE (uses IE6/IE7 CSS hacks) */

/* borderless tables */
.borderless, .borderless table, .borderless td, .borderless tr, .borderless th, .borderless tbody
	{ border:0 !important; margin:0 !important; padding:0 !important; }
.widetable, .widetable table
	{ width:100%; }

/* thumbnail images (fixed-sized scaled images) */
.thumbnail img { height:5em !important; }

/* stretchable images (auto-size to fit tiddler) */
.stretch img { width:95%; }

/* grouped content */
.outline
	{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; }
.menubox
	{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; background:#fff; color:#000; }
.menubox .button, .menubox .tiddlyLinkExisting, .menubox .tiddlyLinkNonExisting
	{ color:#009 !important; }
.groupbox
	{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; background:#ffe; color:#000; }
.groupbox a, .groupbox .button, .groupbox .tiddlyLinkExisting, .groupbox .tiddlyLinkNonExisting
	{ color:#009 !important; }
.groupbox code
	{ color:#333 !important; }
.borderleft
	{ margin:0;padding:0;border:0;margin-left:1em; border-left:1px dotted; padding-left:.5em; }
.borderright
	{ margin:0;padding:0;border:0;margin-right:1em; border-right:1px dotted; padding-right:.5em; }
.borderbottom
	{ margin:0;padding:1px 0;border:0;border-bottom:1px dotted; margin-bottom:1px; padding-bottom:1px; }
.bordertop
	{ margin:0;padding:0;border:0;border-top:1px dotted; margin-top:1px; padding-top:1px; }

/* scrolled content */
.scrollbars { overflow:auto; }
.height10em { height:10em; }
.height15em { height:15em; }
.height20em { height:20em; }
.height25em { height:25em; }
.height30em { height:30em; }
.height35em { height:35em; }
.height40em { height:40em; }

/* compact form */
.smallform
	{ white-space:nowrap; }
.smallform input, .smallform textarea, .smallform button, .smallform checkbox, .smallform radio, .smallform select
	{ font-size:8pt; }

/* stretchable edit fields and textareas (auto-size to fit tiddler) */
.stretch input { width:99%; }
.stretch textarea { width:99%; }

/* compact input fields (limited to a few characters for entering percentages and other small values) */
.onechar input   { width:1em; }
.twochar input   { width:2em; }
.threechar input { width:3em; }
.fourchar input  { width:4em; }
.fivechar input  { width:5em; }

/* text colors */
.white { color:#fff !important }
.gray  { color:#999 !important }
.black { color:#000 !important }
.red   { color:#f66 !important }
.green { color:#0c0 !important }
.blue  { color:#99f !important }

/* rollover highlighting */
.mouseover 
	{color:[[ColorPalette::TertiaryLight]] !important;}
.mouseover a
	{color:[[ColorPalette::TertiaryLight]] !important;}
.selected .mouseover
	{color:[[ColorPalette::Foreground]] !important;}
.selected .mouseover .button, .selected .mouseover a
	{color:[[ColorPalette::PrimaryDark]] !important;}

/* rollover zoom text */
.zoomover
	{ font-size:80% !important; }
.selected .zoomover
	{ font-size:100% !important; }

/* [[ColorPalette]] text colors */
.Background	{ color:[[ColorPalette::Background]];	 }
.Foreground	{ color:[[ColorPalette::Foreground]];	 }
.PrimaryPale	{ color:[[ColorPalette::PrimaryPale]];	 }
.PrimaryLight	{ color:[[ColorPalette::PrimaryLight]];	 }
.PrimaryMid	{ color:[[ColorPalette::PrimaryMid]];	 }
.PrimaryDark	{ color:[[ColorPalette::PrimaryDark]];	 }
.SecondaryPale	{ color:[[ColorPalette::SecondaryPale]]; }
.SecondaryLight	{ color:[[ColorPalette::SecondaryLight]];}
.SecondaryMid	{ color:[[ColorPalette::SecondaryMid]];	 }
.SecondaryDark	{ color:[[ColorPalette::SecondaryDark]]; }
.TertiaryPale	{ color:[[ColorPalette::TertiaryPale]];	 }
.TertiaryLight	{ color:[[ColorPalette::TertiaryLight]]; }
.TertiaryMid	{ color:[[ColorPalette::TertiaryMid]];	 }
.TertiaryDark	{ color:[[ColorPalette::TertiaryDark]];	 }
.Error		{ color:[[ColorPalette::Error]];	 }

/* [[ColorPalette]] background colors */
.BGBackground	  { background-color:[[ColorPalette::Background]];	}
.BGForeground	  { background-color:[[ColorPalette::Foreground]];	}
.BGPrimaryPale	  { background-color:[[ColorPalette::PrimaryPale]];	}
.BGPrimaryLight	  { background-color:[[ColorPalette::PrimaryLight]];	}
.BGPrimaryMid	  { background-color:[[ColorPalette::PrimaryMid]];	}
.BGPrimaryDark	  { background-color:[[ColorPalette::PrimaryDark]];	}
.BGSecondaryPale  { background-color:[[ColorPalette::SecondaryPale]]; 	}
.BGSecondaryLight { background-color:[[ColorPalette::SecondaryLight]];	}
.BGSecondaryMid	  { background-color:[[ColorPalette::SecondaryMid]];	}
.BGSecondaryDark  { background-color:[[ColorPalette::SecondaryDark]]; 	}
.BGTertiaryPale	  { background-color:[[ColorPalette::TertiaryPale]];	}
.BGTertiaryLight  { background-color:[[ColorPalette::TertiaryLight]]; 	}
.BGTertiaryMid	  { background-color:[[ColorPalette::TertiaryMid]];	}
.BGTertiaryDark	  { background-color:[[ColorPalette::TertiaryDark]];	}
.BGError	  { background-color:[[ColorPalette::Error]];	 	}
/*}}}*/
/*{{{*/
#tiddlersBar .button {border:0}
#tiddlersBar .tab {white-space:nowrap}
#tiddlersBar {padding : 1em 0.5em 2px 0.5em}
.tabUnselected .tabButton, .tabSelected .tabButton {padding : 0 2px 0 2px; margin: 0 0 0 4px;}
.tabUnselected{background: #EEE; border: 1px solid #CCC; border-bottom: 0;}
.tabSelected{background: #FFF; border: 1px solid #CCC; border-bottom: 0;}
.tiddler, .tabContents {border: 0;}
/*}}}*/
/***
|Name|TableOfContentsPlugin-mod|
|Author|[[Doug Compton|http://www.zagware.com/tw/plugins.html#DcTableOfContentsPlugin]]|
|Contributors|[[Lewcid|http://lewcid.org]], [[FND|http://devpad.tiddlyspot.com]], [[ELS|http://www.tiddlytools.com]], [[FLX|http://flx.me]]|
|Source|[[FND's DevPad|http://devpad.tiddlyspot.com#DcTableOfContentsPlugin]]|
|Version|0.0.1|
|~CoreVersion|2.2|
<<showtoc>>
!Description
This macro will insert a table of contents reflecting the headings that are used in a tiddler and will be automatically updated when you make changes.  Each item in the table of contents can be clicked on to jump to that heading.  It can be used either inside of select tiddlers or inside a system wide template.

A parameter can be used to show the table of contents of a seperate tiddler, &lt;<showtoc tiddlerTitle>&gt;

It will also place a link beside each header which will jump the screen to the top of the current tiddler.  This will only be displayed if the current tiddler is using the &lt;<showtoc>&gt; macro.

The appearance of the table of contents and the link to jump to the top can be modified using CSS.  An example of this is given below.

!Usage
!!Only in select tiddlers
The table of contents above is an example of how to use this macro in a tiddler.  Just insert &lt;<showtoc>&gt; in a tiddler on a line by itself.

It can also display the table of contents of another tiddler by using the macro with a parameter, &lt;<showtoc tiddlerTitle>&gt;
!!On every tiddler
It can also be used in a template to have it show on every tiddler.  An example ViewTemplate is shown below.

//{{{
<div class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'>Created <span macro='view created date DD-MM-YY'></span>, updated <span macro='view modified date DD-MM-YY'></span></div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class="toc" macro='showtoc'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
//}}}

!Examples
If you had a tiddler with the following headings:
{{{
!Heading1a
!!Heading2a
!!Heading2b
!!!Heading3
!Heading1b
}}}
this table of contents would be automatically generated:
* Heading1a
** Heading2a
** Heading2b
*** Heading3
* Heading1b
!Changing how it looks
To modifiy the appearance, you can use CSS similiar to the below.
//{{{
.dcTOC ul {
	color: red;
	list-style-type: lower-roman;
}
.dcTOC a {
	color: green;
	border: none;
}

.dcTOC a:hover {
	background: white;
	border: solid 1px;
}
.dcTOCTop {
	font-size: 2em;
	color: green;
}
//}}}

!Revision History
!!v0.1.0 (2006-04-07)
* initial release
!!v0.2.0 (2006-04-10)
* added the [top] link on headings to jump to the top of the current tiddler
* appearance can now be customized using CSS
* all event handlers now return false
!!v0.3.0 (2006-04-12)
* added the ability to show the table of contents of a seperate tiddler
* fixed an error when a heading had a ~WikiLink in it
!!v0.3.5 (2007-10-16)
* updated formatter object for compatibility with TiddlyWiki v2.2 (by Lewcid)
!!v0.4.0 (2007-11-14)
* added toggle button for collapsing/expanding table of contents element
* refactored documentation
!To Do
* code sanitizing/rewrite
* documentation refactoring
* use shadow tiddler for styles
!Code
***/
//{{{

version.extensions.DcTableOfContentsPlugin= {
	major: 0, minor: 4, revision: 0,
	type: "macro",
	source: "http://devpad.tiddlyspot.com#DcTableOfContentsPlugin"
};

// Replace heading formatter with our own
for (var n=0; n<config.formatters.length; n++) {
	var format = config.formatters[n];
	if (format.name == 'heading') {
		format.handler = function(w) {
			// following two lines is the default handler
			var e = createTiddlyElement(w.output, "h" + w.matchLength);
			w.subWikifyTerm(e, this.termRegExp); //updated for TW 2.2+

			// Only show [top] if current tiddler is using showtoc
			if (w.tiddler && w.tiddler.isTOCInTiddler == 1) {
				// Create a container for the default CSS values
				var c = createTiddlyElement(e, "div");
				c.setAttribute("style", "font-size: 0.5em; display: none;");
				// Create the link to jump to the top
				createTiddlyButton(c, " [top]", "Go to top of tiddler", window.scrollToTop, "dcTOCTop", null, null);
			}
		}
		break;
	}
}

config.macros.showtoc = {
	handler: function(place, macroName, params, wikifier, paramString, tiddler) {
		var text = "";
		var title = "";
		var myTiddler = null;

		// Did they pass in a tiddler?
		if (params.length) {
			title = params[0];
			myTiddler = store.getTiddler(title);
		} else {
			myTiddler = tiddler;
		}

		if (myTiddler == null) {
			wikify("ERROR: Could not find " + title, place);
			return;
		}

		var lines = myTiddler .text.split("\n");
		myTiddler.isTOCInTiddler = 1;

		// Create a parent container so the TOC can be customized using CSS
		var r = createTiddlyElement(place, "div", null, "dcTOC");
		// create toggle button
		//createTiddlyButton(r, "toggle", "show/collapse table of contents",
		//	function() { config.macros.showtoc.toggleElement(this.nextSibling); },
		//	"toggleButton")
		// Create a container so the TOC can be customized using CSS
		var c = createTiddlyElement(r, "div");
                createTiddlyElement(c, "div", null, "dcTOCToc", "Indhold");



		if (lines != null) {
			for (var x=0; x<lines.length; x++) {
				var line = lines[x];
				if (line.substr(0,1) == "!") {
					// Find first non ! char
					for (var i=0; i<line.length; i++) {
						if (line.substr(i, 1) != "!") {
							break;
						}
					}
					var desc = line.substring(i);
					// Remove WikiLinks
					desc = desc.replace(/\[\[/g, "");
					desc = desc.replace(/\]\]/g, "");

					text += line.substr(0, i).replace(/[!]/g, '*');
					text += '<html><a href="javascript:;" onClick="window.scrollToHeading(\'' + title + '\', \'' + desc+ '\', event)">' + desc+ '</a></html>\n';
				}
			}
		}
		wikify(text, c);
	}
}

config.macros.showtoc.toggleElement = function(e) {
	if(e) {
		if(e.style.display != "none") {
			e.style.display = "none";
		} else {
			e.style.display = "";
		}
	}
};

window.scrollToTop = function(evt) {
	if (! evt)
		var evt = window.event;

	var target = resolveTarget(evt);
	var tiddler = story.findContainingTiddler(target);

	if (! tiddler)
		return false;

	window.scrollTo(0, ensureVisible(tiddler));

	return false;
};

window.scrollToHeading = function(title, anchorName, evt) {
	var tiddler = null;

	if (! evt)
		var evt = window.event;

	if (title) {
		story.displayTiddler(store.getTiddler(title), title, null, false);
		tiddler = document.getElementById(story.idPrefix + title);
	} else {
		var target = resolveTarget(evt);
		tiddler = story.findContainingTiddler(target);
	}

	if (tiddler == null)
		return false;
	
	var children1 = tiddler.getElementsByTagName("h1");
	var children2 = tiddler.getElementsByTagName("h2");
	var children3 = tiddler.getElementsByTagName("h3");
	var children4 = tiddler.getElementsByTagName("h4");
	var children5 = tiddler.getElementsByTagName("h5");

	var children = new Array();
	children = children.concat(children1, children2, children3, children4, children5);

	for (var i = 0; i < children.length; i++) {
		for (var j = 0; j < children[i].length; j++) {
			var heading = children[i][j].innerHTML;

			// Remove all HTML tags
			while (heading.indexOf("<") >= 0) {
				heading = heading.substring(0, heading.indexOf("<")) + heading.substring(heading.indexOf(">") + 1);
			}

			// Cut off the code added in showtoc for TOP
			heading = heading.substr(0, heading.length-6);

			if (heading == anchorName) {
				var y = findPosY(children[i][j]);
				window.scrollTo(0,y);
				return false;
			}
		}
	}
	return false
};
//}}}
Udvalgt###udvalgt###sæt status til udvalgt######-
sysfile###sysfile###skjul tiddleren fra lister######-
/***
|''Name:''|TiddlerListMacro|
|''Version:''|2.3 (8-Jan-2008)|
|''Source''|http://jackparke.googlepages.com/jtw.html#TiddlerListMacro ([[del.icio.us|http://del.icio.us/post?url=http://jackparke.googlepages.com/jtw.html%23TiddlerListMacro]])|
|''Author:''|[[Jack]]|
|''Type:''|Macro|
|''Documentation:''|[[TiddlerListMacroDocumentation]]|
!Usage
{{{<<tiddlerList parameter1:"value1" parameter2:"value2" ...>>}}}
See TiddlerListMacroDocumentation and TiddlerListMacroExamples

!Description
The TiddlerListMacro lists tiddlers with ~SQL-Like features:
* List tiddlers containing a word in the title or text (case-sensitive)
* List tiddlers tagged with given tags or exclude certain tags
* Ascending and descending sorting of single fields
* Limit number of tiddlers displayed
* Specify different HTML formats for the lists
* Grouping of items in a list
* Customizable wiki templates
* Numbering and totals
!Revision History
* Original by [[Jack]] 17-Apr-2006
* Added formatting (v2.0.1 18-Apr-2006)
* Added grouping (v2.0.2 18-Apr-2006)
* Added flexible filtering (v2.0.3 19-Apr-2006)
* Added custom item templates (v2.0.4 20-Apr-2006)
* Added custom templates (v2.0.5 21-Apr-2006)
* Allow evalled parameters (v2.0.7 23-Apr-2006)
* Allow groupFooterTemplate (v2.0.9 30-Apr-2006)
* Added the customParameter (v2.0.10 2-May-2006)
!To Do
* Case-insensitive searching
* Sorting on multiple fields
!Usage
{{{<<tiddlerList parameter1:"value1" parameter2:"value2" ...>>}}}
!Examples ([[TiddlerListMacroExamples]])
List all tiddlers tagged with "Plugin"
{{{<<tiddlerList tags:Plugin>>}}}
List newest 3 plugins which are not templates:
{{{<<tiddlerList tags:"Plugin,-Template" top:3 order:"-created">>}}}
List all tiddlers containing "Jack" in their title or text (last modified first):
{{{<<tiddlerList search:"Jack" order:"-modified">>}}}
List all tiddlers starting with "T" in a table:
{{{<<tiddlerList title:"^T" format:"table" header:"Tiddlers beginning with T" footer:"%count items listed">>}}}
Group tiddlers by first letter
{{{<<tiddlerList top:"15" group:"tiddler.title.substr(0,1)" groupTemplate:"''%group''">>}}}
Show a list of all tiddlers with creation date (overrides default item template)
{{{<<tiddlerList itemTemplate:"* %link (%created)\n">>}}}
Show all tiddlers that have the host's tiddler title in their tag list
{{{<<tiddlerList filter:"tiddler.tags.contains(currentTiddler.title)">>}}}
!Parameters
|!Parameter|!Type|!Meaning|!Example|
|top|Integer|Number of tiddlers to display|"10"|
|tags|String|List tiddlers with matching tags (AND Logic). Leading - to exclude.|"~ToDo,Urgent,-Done"|
|title|~RegEx|List tiddlers with matching title|"^[Pp]"|
|text|~RegEx|List tiddlers with matching text|"Searchtext"|
|search|~RegEx|List tiddlers with matching title OR text|"Problem"|
|filter*|~JavaScript|List tiddlers according to boolean expression)|"tiddler.title.length<4 && tiddler.tags.contains('Idea')"|
|format|String (fixed list)|HTML formatting of list. list (ul, default), nlist (ol), span, stack (div), csv, table.|"list"|
|order|String|Sort order of tiddlers. - is descending, + ascending|"-created"|
|group*|~JavaScript|Grouping field|tiddler.title.substr(0,1)|
|customParameter*|~JavaScript|Custom parameter to be evalled for use in the itemTemplate|tiddler.text.match(/Version: (.*)/)[1]|
|header|String|Top caption|"Tiddlers beginning with T"|
|footer|String|Bottom caption|"End of list"|
|itemTemplate|~WikiTemplate|~WikiText with %placeholders|"%link\n%abstract\n%modified"|
|groupTemplate|~WikiTemplate|~WikiText with %placeholders for the start of each group|"!!%group"|
|groupFooterTemplate|~WikiTemplate|~WikiText with %placeholders for the end of each group|"----\n"|
|dateFormat|String|Date formatting string when displaying dates|~YYYY-MM-DD|
|separator|String|Define a string or character to be inserted between items listed|" "|
|debug|Boolean|Set to 1 or true for debug mode where only wikitext will be output|debug:1|
{{{*}}} Parameter will be evalled (do not pass with {{{{{ }} }}} unless you want it evalled twice!)
!Template Placeholders
Placeholder values for itemTemplate parameter
|!Placeholder|!Field|
|%item|List item number|
|%link|Link to Tiddler {{{[[MyTiddler]]}}}|
|%title|Tiddler Name {{{MyTiddler}}}|
|%nolink|Unlinked Tiddler Title {{{~MyTiddler}}}|
|%abstract|First 300 chars of tiddler text|
|%text|All tiddler text|
|%tags|Tags separated by space|
|%created|Creation date|
|%modified|Modified date|
|%modifier|Last modifier|
|%group|Name of group field|
|%custom|The result of your evalled customParameter|
|%count|Number of items listed (footer only)|
!Variables
{{{{{currentTiddler}} }}}refers to the current (host) tiddler in function scope (i.e. within the filter or group parameters)
{{{{{gCurrentTiddler}} }}}refers to the current (host) tiddler in global scope (i.e. within{{{ {{}} }}}evalled parameters. Example:
{{{<<tiddlerList tags:{{gCurrentTiddler.title}}>>}}}
!Style
No styles are pre-assigned to the lists. Use {{{@@}}} notation to define custom styles in the header, footer, groupTemplate and itemTemplate parameters.


!Code
***/
//{{{
version.extensions.tiddlerList = {major: 2, minor: 3, revision: 0, date: new Date("Jan 08, 2008")};
// template = [header, item, separator, group, footer]
config.macros.tiddlerList={
 formats : {list:true, nlist:true, span:true, stack:true, csv:true, table:true},
 templates : {
 list : [ "%0\n", "* %0\n", "", "%group\n", "%0\n"],
 nlist : [ "%0", "# %0\n", "", "%group\n", "%0\n"],
 span : [ "%0", "%0", " ", "%group", "%0"],
 stack : [ "%0", "%0", "\n", "%group", "%0"],
 csv : [ "%0", "%0", ", ", "%0", "%0\n"],
 table : ["|!%0|\n", "|%0|\n", "", "|%group|\n", "|%0|\n"]
 },
 dateFormat : "DD MMM YYYY"
}

if (typeof gCurrentTiddler == 'undefined')
 var gCurrentTiddler;

config.macros.tiddlerList.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
 // Some globals
 var count=0, groupCount=0, theGroup="", lastGroup="", firstInGroup = false;
 var currentTiddler = tiddler;
 gCurrentTiddler = tiddler;
 var listWikiText="";
 var formats = this.formats;
 
 // SQL-Like parameters
 var parameters = paramString.parseParams("name",null,true);
 var pTags = parameters[0]["tags"]?parameters[0]["tags"][0].split(","):[];
 var pOrder = parameters[0]["order"]?parameters[0]["order"][0]:"title";
 var pTop = parameters[0]["top"]?parameters[0]["top"][0]:-1;
 var pText = parameters[0]["text"]?parameters[0]["text"][0]:"";
 var pTitle = parameters[0]["title"]?parameters[0]["title"][0]:"";
 var pSearch = parameters[0]["search"]?parameters[0]["search"][0]:"";
 var pFilter = parameters[0]["filter"]?parameters[0]["filter"][0]:"";
 var pHeader = parameters[0]["header"]?paramFormat(parameters[0]["header"][0]):"";
 var pFooter = parameters[0]["footer"]?paramFormat(parameters[0]["footer"][0]):"";
 var pGroup = parameters[0]["group"]?parameters[0]["group"][0]:"";
 var pDateFormat = parameters[0]["dateFormat"]?parameters[0]["dateFormat"][0]:this.dateFormat;
 var pCustomParameter = parameters[0]["customParameter"]?parameters[0]["customParameter"][0]:"";
 var pFormat = parameters[0]["format"]?parameters[0]["format"][0]:"list";
 pFormat = formats[pFormat]?pFormat:"list"
 
 // Separator
 var pSeparator = parameters[0]["separator"]?paramFormat(parameters[0]["separator"][0]):(parameters[0]["seperator"]?paramFormat(parameters[0]["seperator"][0]):this.templates[pFormat][2])

 // Template for group
 var pGroupTemplate = this.templates[pFormat][3];
 if (parameters[0]["groupTemplate"])
 pGroupTemplate = paramFormat(parameters[0]["groupTemplate"][0])
 pGroupTemplate = pGroupTemplate.replace("$))", ">>")
 
 // Template for group footer
 var pGroupFooterTemplate = "";
 if (parameters[0]["groupFooterTemplate"])
 pGroupFooterTemplate = paramFormat(parameters[0]["groupFooterTemplate"][0])
 pGroupFooterTemplate = pGroupFooterTemplate.replace("$))", ">>")
 
 // Template for item
 var pItemTemplate = this.templates[pFormat][1];
 if (parameters[0]["itemTemplate"])
 pItemTemplate = paramFormat(parameters[0]["itemTemplate"][0])
 pItemTemplate = pItemTemplate.replace("$))", ">>").replace("%link", "%0").replace("%item", "%1").replace("%abstract", "%2").replace("%text", "%3").replace("%created", "%4").replace("%modified", "%5").replace("%modifier", "%6").replace("%group", "%7").replace("%title", "%8").replace("%tags", "%9").replace("%nolink", "%10").replace("%custom", "%11")
 // Template for footer
 var pFooterTemplate = this.templates[pFormat][4].replace("%count", "%1")

 // Get all tiddlers
 var tiddlers = store.reverseLookup("tags","excludeLists",false);

 // Sorting
 if(!pOrder)
 pOrder = "title";
 if (pOrder.match(/^\-/i)) {
 pOrder = pOrder.substr(1)
 var sortDesc = true;
 }
 // Sorting on a standard field
 if (pOrder.match(/(title)|(text)|(modifier)|(modified)|(created)|(tags)/))
  if (sortDesc)
   tiddlers.sort(function (a,b) {if(a[pOrder] == b[pOrder]) return(0); else return (a[pOrder] > b[pOrder]) ? -1 : +1; });
  else
  tiddlers.sort(function (a,b) {if(a[pOrder] == b[pOrder]) return(0); else return (a[pOrder] < b[pOrder]) ? -1 : +1; });
 else
  if (sortDesc)
   tiddlers.sort(function (a,b) {if(a.fields[pOrder] == b.fields[pOrder]) return(0); else return (a.fields[pOrder] > b.fields[pOrder]) ? -1 : +1; });
  else
   tiddlers.sort(function (a,b) {if(a.fields[pOrder] == b.fields[pOrder]) return(0); else return (a.fields[pOrder] < b.fields[pOrder]) ? -1 : +1; });

 // Header
 if (pHeader)
 listWikiText += formatItem(this.templates[pFormat][0], [pHeader], pFormat)
 
 for(var t=0; t<tiddlers.length; t++) {
 tiddler = tiddlers[t];
 if (pText!="" && tiddler.text=="") tiddler.text=store.getValue(tiddler, 'text')
 if (pTop==-1 || count<pTop) {
 if (pText=="" || tiddler.text.match(pText)) {
 if (pTitle=="" || tiddler.title.match(pTitle)) {
 if (pSearch=="" || (tiddler.title.match(pSearch) || tiddler.text.match(pSearch))) {
 if (pFilter=="" || eval(pFilter)) {
 if (pTags.length==0 || compareArrays(tiddler.tags, pTags, "all")) {
 count++;
 if (tiddler.text=="") tiddler.text=store.getValue(tiddler, 'text')
 // Grouping
 if (pGroup) {
 theGroup = eval(pGroup);
 if(theGroup != lastGroup) {
 groupCount++;firstInGroup = true;
 if (pGroupFooterTemplate && groupCount>1)
 listWikiText += pGroupFooterTemplate.replace("%group", theGroup)
 listWikiText += pGroupTemplate.replace("%group", theGroup)
 lastGroup = theGroup;
 } else
  firstInGroup = false;
 }
 // Separators
 if (count>1 && !firstInGroup) listWikiText += pSeparator;
 //Plaintext title
 var noLink = tiddler.title.match(config.textPrimitives.wikiLink)?"~" + tiddler.title:tiddler.title;
 // Custom parameter
 if (pCustomParameter)
 var custom="";
 try {
 custom = eval(pCustomParameter)
 } catch (e) {}
 // List individual tiddler
 var strItem = formatItem(pItemTemplate,["[[" + tiddler.title + "]]",count,tiddler.text.substr(0,300),tiddler.text,tiddler.created.formatString(pDateFormat),tiddler.modified.formatString(pDateFormat),tiddler.modifier,theGroup,tiddler.title,tiddler.tags.join(" "),noLink,custom], pFormat)
 for (var fld in tiddler.fields) strItem = strItem.replace('%field.' + fld, tiddler.fields[fld]);
 listWikiText += strItem
 }
 }
 }
 }
 }
 }
 }
 
 // Last group footer
 if (pGroup && pGroupFooterTemplate && count>0)
 listWikiText += pGroupFooterTemplate.replace("%group", theGroup)

 // Footer
 if (pFooter) {
 pFooter = pFooter.replace("%count", count)
 listWikiText += formatItem(pFooterTemplate, [pFooter], pFormat)
 }
 
 // Render result
 if (!parameters[0]["debug"])
 wikify(listWikiText,place, null, currentTiddler)
 else
 place.innerHTML = "<textarea style=\"width:100%;\" rows=30>" + listWikiText + "</textarea>"
 
 
 // Local functions
 
 function paramFormat(param) {
 // Allow "\n" in non evalled parameters
 return param.replace(/\\n/g, "\n");
 }
 
 function formatItem(template, values, format) {
 // Fill template with values (depending on list format)
 if (format.match(/table/) && values[0].match(/\|/))
 return ("%0\n").format(values)
 else
 return template.format(values)
 }
 
 function compareArrays(array, values, logic) {
 // Compare items in array with AND("all") or OR("any") logic
 var matches=0;
 for(var v=0; v<values.length; v++) 
 if(values[v].replace(/^\s+|\s+$/g,"").match(/^\-/) && !array.contains(values[v].replace(/^\s+|\s+$/g,"").substr(1)))
 matches++;
 else if (array.contains(values[v]))
 matches++;
 return ((logic=="all" && matches==values.length) || (logic!="all" && matches>0))
 }
 
}

String.prototype.prettyTrim = function(len,prefix,postfix) {
 var result = this.trim().replace(/\r\n/g,' ').replace(/\n/g,' ');
 if (!prefix) prefix = '';
 if (!postfix) postfix = '';
 if (result.length > len - 3)
 return prefix + result.substr(0,len) + '...' + postfix;
 else if (result.length > 0)
 return prefix + result + postfix;
 else
 return result;
}

//}}}
/***
|''Name:''|TiddlersBarPlugin|
|''Description:''|A bar to switch between tiddlers through tabs (like browser tabs bar).|
|''Version:''|1.2.5|
|''Date:''|Jan 18,2008|
|''Source:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Author:''|Pascal Collin|
|''License:''|[[BSD open source license|License]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 2.0; InternetExplorer 6.0, others|
!Demos
On [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], open several tiddlers to use the tabs bar.
!Installation
#import this tiddler from [[homepage|http://visualtw.ouvaton.org/VisualTW.html]] (tagged as systemConfig)
#save and reload
#''if you're using a custom [[PageTemplate]]'', add {{{<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>}}} before {{{<div id='tiddlerDisplay'></div>}}}
#optionally, adjust StyleSheetTiddlersBar
!Tips
*Doubleclick on the tiddlers bar (where there is no tab) create a new tiddler.
*Tabs include a button to close {{{x}}} or save {{{!}}} their tiddler.
*By default, click on the current tab close all others tiddlers.
!Configuration options 
<<option chkDisableTabsBar>> Disable the tabs bar (to print, by example).
<<option chkHideTabsBarWhenSingleTab >> Automatically hide the tabs bar when only one tiddler is displayed. 
<<option txtSelectedTiddlerTabButton>> ''selected'' tab command button.
<<option txtPreviousTabKey>> previous tab access key.
<<option txtNextTabKey>> next tab access key.
!Code
***/
//{{{
config.options.chkDisableTabsBar = config.options.chkDisableTabsBar ? config.options.chkDisableTabsBar : false;
config.options.chkHideTabsBarWhenSingleTab  = config.options.chkHideTabsBarWhenSingleTab  ? config.options.chkHideTabsBarWhenSingleTab  : false;
config.options.txtSelectedTiddlerTabButton = config.options.txtSelectedTiddlerTabButton ? config.options.txtSelectedTiddlerTabButton : "closeOthers";
config.options.txtPreviousTabKey = config.options.txtPreviousTabKey ? config.options.txtPreviousTabKey : "";
config.options.txtNextTabKey = config.options.txtNextTabKey ? config.options.txtNextTabKey : "";
config.macros.tiddlersBar = {
	tooltip : "see ",
	tooltipClose : "click here to close this tab",
	tooltipSave : "click here to save this tab",
	promptRename : "Enter tiddler new name",
	currentTiddler : "",
	previousState : false,
	previousKey : config.options.txtPreviousTabKey,
	nextKey : config.options.txtNextTabKey,	
	tabsAnimationSource : null, //use document.getElementById("tiddlerDisplay") if you need animation on tab switching.
	handler: function(place,macroName,params) {
		var previous = null;
		if (config.macros.tiddlersBar.isShown())
			story.forEachTiddler(function(title,e){
				if (title==config.macros.tiddlersBar.currentTiddler){
					var d = createTiddlyElement(null,"span",null,"tab tabSelected");
					config.macros.tiddlersBar.createActiveTabButton(d,title);
					if (previous && config.macros.tiddlersBar.previousKey) previous.setAttribute("accessKey",config.macros.tiddlersBar.nextKey);
					previous = "active";
				}
				else {
					var d = createTiddlyElement(place,"span",null,"tab tabUnselected");
					var btn = createTiddlyButton(d,title,config.macros.tiddlersBar.tooltip + title,config.macros.tiddlersBar.onSelectTab);
					btn.setAttribute("tiddler", title);
					if (previous=="active" && config.macros.tiddlersBar.nextKey) btn.setAttribute("accessKey",config.macros.tiddlersBar.previousKey);
					previous=btn;
				}
				var isDirty =story.isDirty(title);
				var c = createTiddlyButton(d,isDirty ?"!":"x",isDirty?config.macros.tiddlersBar.tooltipSave:config.macros.tiddlersBar.tooltipClose, isDirty ? config.macros.tiddlersBar.onTabSave : config.macros.tiddlersBar.onTabClose,"tabButton");
				c.setAttribute("tiddler", title);
				if (place.childNodes) {
					place.insertBefore(document.createTextNode(" "),place.firstChild); // to allow break line here when many tiddlers are open
					place.insertBefore(d,place.firstChild); 
				}
				else place.appendChild(d);
			})
	}, 
	refresh: function(place,params){
		removeChildren(place);
		config.macros.tiddlersBar.handler(place,"tiddlersBar",params);
		if (config.macros.tiddlersBar.previousState!=config.macros.tiddlersBar.isShown()) {
			story.refreshAllTiddlers();
			if (config.macros.tiddlersBar.previousState) story.forEachTiddler(function(t,e){e.style.display="";});
			config.macros.tiddlersBar.previousState = !config.macros.tiddlersBar.previousState;
		}
	},
	isShown : function(){
		if (config.options.chkDisableTabsBar) return false;
		if (!config.options.chkHideTabsBarWhenSingleTab) return true;
		var cpt=0;
		story.forEachTiddler(function(){cpt++});
		return (cpt>1);
	},
	selectNextTab : function(){  //used when the current tab is closed (to select another tab)
		var previous="";
		story.forEachTiddler(function(title){
			if (!config.macros.tiddlersBar.currentTiddler) {
				story.displayTiddler(null,title);
				return;
			}
			if (title==config.macros.tiddlersBar.currentTiddler) {
				if (previous) {
					story.displayTiddler(null,previous);
					return;
				}
				else config.macros.tiddlersBar.currentTiddler=""; 	// so next tab will be selected
			}
			else previous=title;
			});		
	},
	onSelectTab : function(e){
		var t = this.getAttribute("tiddler");
		if (t) story.displayTiddler(null,t);
		return false;
	},
	onTabClose : function(e){
		var t = this.getAttribute("tiddler");
		if (t) {
			if(story.hasChanges(t) && !readOnly) {
				if(!confirm(config.commands.cancelTiddler.warning.format([t])))
				return false;
			}
			story.closeTiddler(t);
		}
		return false;
	},
	onTabSave : function(e) {
		var t = this.getAttribute("tiddler");
		if (!e) e=window.event;
		if (t) config.commands.saveTiddler.handler(e,null,t);
		return false;
	},
	onSelectedTabButtonClick : function(event,src,title) {
		var t = this.getAttribute("tiddler");
		if (!event) event=window.event;
		if (t && config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton])
			config.commands[config.options.txtSelectedTiddlerTabButton].handler(event, src, t);
		return false;
	},
	onTiddlersBarAction: function(event) {
		var source = event.target ? event.target.id : event.srcElement.id; // FF uses target and IE uses srcElement;
		if (source=="tiddlersBar") story.displayTiddler(null,'New Tiddler',DEFAULT_EDIT_TEMPLATE,false,null,null);
	},
	createActiveTabButton : function(place,title) {
		if (config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton]) {
			var btn = createTiddlyButton(place, title, config.commands[config.options.txtSelectedTiddlerTabButton].tooltip ,config.macros.tiddlersBar.onSelectedTabButtonClick);
			btn.setAttribute("tiddler", title);
		}
		else
			createTiddlyText(place,title);
	}
}

story.coreCloseTiddler = story.coreCloseTiddler? story.coreCloseTiddler : story.closeTiddler;
story.coreDisplayTiddler = story.coreDisplayTiddler ? story.coreDisplayTiddler : story.displayTiddler;

story.closeTiddler = function(title,animate,unused) {
	if (title==config.macros.tiddlersBar.currentTiddler)
		config.macros.tiddlersBar.selectNextTab();
	story.coreCloseTiddler(title,false,unused); //disable animation to get it closed before calling tiddlersBar.refresh
	var e=document.getElementById("tiddlersBar");
	if (e) config.macros.tiddlersBar.refresh(e,null);
}

story.displayTiddler = function(srcElement,tiddler,template,animate,unused,customFields,toggle){
	story.coreDisplayTiddler(config.macros.tiddlersBar.tabsAnimationSource,tiddler,template,animate,unused,customFields,toggle);
	var title = (tiddler instanceof Tiddler)? tiddler.title : tiddler;  
	if (config.macros.tiddlersBar.isShown()) {
		story.forEachTiddler(function(t,e){
			if (t!=title) e.style.display="none";
			else e.style.display="";
		})
		config.macros.tiddlersBar.currentTiddler=title;
	}
	var e=document.getElementById("tiddlersBar");
	if (e) config.macros.tiddlersBar.refresh(e,null);
}

var coreRefreshPageTemplate = coreRefreshPageTemplate ? coreRefreshPageTemplate : refreshPageTemplate;
refreshPageTemplate = function(title) {
	coreRefreshPageTemplate(title);
	if (config.macros.tiddlersBar) config.macros.tiddlersBar.refresh(document.getElementById("tiddlersBar"));
}

ensureVisible=function (e) {return 0} //disable bottom scrolling (not useful now)

config.shadowTiddlers.StyleSheetTiddlersBar = "/*{{{*/\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .button {border:0}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .tab {white-space:nowrap}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar {padding : 1em 0.5em 2px 0.5em}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tabUnselected .tabButton, .tabSelected .tabButton {padding : 0 2px 0 2px; margin: 0 0 0 4px;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tiddler, .tabContents {border: 0;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar +="/*}}}*/";
store.addNotification("StyleSheetTiddlersBar", refreshStyles);

config.refreshers.none = function(){return true;}
config.shadowTiddlers.PageTemplate=config.shadowTiddlers.PageTemplate.replace(/<div id='tiddlerDisplay'><\/div>/m,"<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>\n<div id='tiddlerDisplay'></div>");

//}}}
Shortly
[ ] Remember milk
[_] Feed the dog

Soon
[ ] See the world
[ ] Ride a motorcycle

Someday
[ ] Have kids
[ ] Grow old
|~ViewToolbar|closeTiddler closeOthers +editTiddler > fields syncing permalink references jump|
|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddler toggleQuickEdit|
<<tiddlerList tags:Udvalgt>>
<br>{{center {<<unsavedChanges command>>
[[download en kopi|http://mmpedia.tiddlyspot.com/download]]}}}
/***
|Name|UnsavedChangesPlugin|
|Source|http://www.TiddlyTools.com/#UnsavedChangesPlugin|
|Version|3.3.3|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|TiddlyWiki.prototype.setDirty,store.saveTiddler,store.removeTiddler|
|Description|show droplist of tiddlers that have changed since the last time the document was saved|
Display a list of tiddlers that have been changed since the last time the document was saved.  The list includes all new/modified tiddlers as well as those changed with "minor edits" enabled and any tiddlers that you import during the session, regardless of their modification date.
!!!!!Usage
<<<
{{{
<<unsavedChanges panel>> or <<unsavedChanges>>
}}}
{{indent{
the ''panel'' keyword displays a 'control panel' interface containing a droplist of unsaved tiddlers and a 'goto' button, along with a command link to 'save changes'.  Depending upon what other plugins are installed, several additional elements will also be displayed: When [[NestedSlidersPlugin]] is installed, the entire control panel is contained within a ''SLIDER''.  When [[LoadTiddlersPlugin]] is installed, a ''REVERT'' button is added.  When [[SaveAsPlugin]] is installed, a ''SAVE AS'' link is added.  When [[UploadPlugin]] is installed, an ''UPLOAD'' (or ''save to web'') link is added.  When [[TrashPlugin]] is installed and there are tiddlers tagged with<<tag Trash>>, an ''EMPTY TRASH'' link is added.
}}}
{{{
<<unsavedChanges list separator>>
}}}
{{indent{
the ''list'' keyword displays a simple space-separated list of unsaved tiddlers without any other command links.  You can specify an optional ''separator'' value that can be used in place of the default space character.  For example, you can specify {{{"<br>"}}} as the separator in order to display each link, one per line.
}}}
{{{
<<unsavedChanges command label tip>>
}}}
{{indent{
the ''command'' keyword displays a single 'command link' that, when clicked, displays a ~TiddlyWiki popup containing the list of unsaved tiddlers, the 'save changes' command and, depending upon what other plugins are installed, additional commands for 'save as', 'upload', and 'empty trash' (similar to the panel display described above).

You can specify optional ''label'' and ''tip'' parameters in the macro to customize the command link text and tooltip.  The default label for the command link is: "There %1 %0 unsaved tiddler%2...", where:
* %0 is automatically replaced with the number of unsaved changes
* %1 is either "er" (if changes=1) or "er" (if changes>1)
* %2 is either blank (if changes=1) or "e" (if changes>1)
resulting in the text: //"There is 1 unsaved tiddler...", "There are 2 unsaved tiddlers...", etc.//
}}}
<<<
!!!!!Examples
<<<
^^//note: the following examples will not display any output unless you have already created/modified tiddlers in the current document.//^^
{{{<<unsavedChanges>>}}}
<<unsavedChanges>>
----
{{{<<unsavedChanges command>>}}}
<<unsavedChanges command>>
----
{{{<<unsavedChanges list>>}}}
<<unsavedChanges list>>
----
{{{<<unsavedChanges list "<br>">>}}}
<<unsavedChanges list "<br>">>
<<<
!!!!!Revisions
<<<
2009.03.02 [3.3.3] fix handling for titles that contain HTML special chars (lt,gt,quot,amp)
2008.09.02 [3.3.2] cleanup popup list output generation and added timestamps/sizes to popup display
2008.08.23 [3.3.1] added optional custom 'label' and 'tip' params to 'command' mode and defined default values for mode, label, tip, and separator as object properties for I18N/L10N-readiness.
2008.08.21 [3.3.0] complete re-write of rendering and refresh processing to support multiple instances and automatic self-refresh (no longer depends upon core refresh notifications)
2008.08.21 [3.2.0] added 'command' option for link+popup as alternative to 'control panel' interface
2008.04.22 [3.1.2] use SaveAsPlugin instead of obsolete NewDocumentPlugin to add "save as" link
2007.12.22 [3.1.1] hijack removeTiddler() instead of low-level deleteTiddler() to correct tracking and refresh handling issues.  in saveTiddler(), check for 'tiddler rename' (title!=newtitle) and adjust list accordingly.
2007.12.21 [3.1.0] added support for {{{<<unsavedChanges list separator>>}}} usage to unsaved tiddlers as a simple list of links, embedded in tiddler content (e.g., [[MainMenu]])
2007.12.20 [3.0.0] rewrite to track ALL changed tiddlers, including imports and minor edits, regardless of saved modification dates.  Also, rewrote display logic to directly refresh macro output instead of triggering a page refresh.  The entire process is MUCH more efficient now.
2007.08.02 [2.0.0] converted from inline script
2007.01.01 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.UnsavedChangesPlugin= {major: 3, minor: 3, revision: 3, date: new Date(2009,3,2)};

config.macros.unsavedChanges = {
	changed: [], // list of currently unsaved tiddler titles
	defMode: "panel",
	defSep: " ",
	defLabel: "Der %1 %0 ugemt%2 tiddler%2...",
	defTip: "se en liste over ugemte tiddler ændringer",
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var wrapper=createTiddlyElement(place,"span",null,"unsavedChanges");
		wrapper.setAttribute("mode",params[0]||this.defMode);
		wrapper.setAttribute("sep",params[1]||this.defSep); // for 'list' mode
		wrapper.setAttribute("label",params[1]||this.defLabel); // for 'command' mode
		wrapper.setAttribute("tip",params[2]||this.defTip); // for 'command' mode
		this.render(wrapper);
	},
	render: function(wrapper) {
		removeChildren(wrapper); // make sure its empty
		if (!this.changed.length) return; // no changes = no output
		switch (wrapper.getAttribute("mode")) {
			case "command": this.command(wrapper); break;
			case "list": this.list(wrapper); break;
			case "panel": default: this.panel(wrapper); break;
		}
	},
	refresh: function() {
		var wrappers=document.getElementsByTagName("span");
		for (var w=0; w<wrappers.length; w++)
			if (hasClass(wrappers[w],"unsavedChanges"))
				this.render(wrappers[w]);
	},
	list: function(place) { // show simple list of unsaved tiddlers
		wikify("[["+this.changed.join("]]"+place.getAttribute("sep")+"[[")+"]]",place);
	},
	command: function(place) { // show command link with popup list
		var c=this.changed.length;
		var txt=place.getAttribute("label").format([c,c==1?'er':'er',c==1?'':'e']);
		var tip=place.getAttribute("tip");
		var action=function(ev) { if (!ev) var ev=window.event;
			var p=Popup.create(this); if (!p) return false;
			var d=createTiddlyElement(p,"div");
			d.style.whiteSpace="normal"; d.style.width="auto"; d.style.padding="2px";
			// gather pretty links for changed tiddlers
			var list=[]; var item=" &nbsp;[[%1 - %0 (%2 bytes)|%0]]&nbsp; ";
			for (var i=config.macros.unsavedChanges.changed.length-1; i>=0; i--) {
				var tid=store.getTiddler(config.macros.unsavedChanges.changed[i]);
				if (!tid) continue;
				var when=tid.modified.formatString('YYYY.0MM.0DD 0hh:0mm:0ss');
				list.push(item.format([tid.title,when,tid.text.length]));
			}
			wikify("@@white-space:nowrap;"+list.join("<br>")+"@@",d);
			if (!readOnly) {
				var t="\n----\n";
				t+="@@white-space:nowrap;display:block;text-align:center; &nbsp;";
				t+="<<saveChanges>>";
				t+=config.macros.saveAs?" | <<saveAs>>":"";
				t+=config.macros.upload?" | <<upload>>":"";
				t+=(config.macros.emptyTrash&&store.getTaggedTiddlers("Trash").length)?" | <<emptyTrash>>":"";
				t+="&nbsp; @@";
				wikify(t,d);
			}
			Popup.show(p,false);
			ev.cancelBubble=true; if(ev.stopPropagation)ev.stopPropagation();
			return(false);
		}
		createTiddlyButton(place,txt,tip,action,"button");
	},
	panel: function(place) { // show composite droplist+buttons+commands
		// gather changed tiddlers (in reverse order by date - most recent first)
		var tids=[]; for (var i=this.changed.length-1; i>=0; i--)
			{ var t=store.getTiddler(this.changed[i]); if (t) tids.push(t); }
		tids.sort(function(a,b){return a.modified<b.modified?-1:(a.modified==b.modified?0:1);});
		// generate droplist items
 		var list=[]; var item='<option value="%0">%1 - %0 (%2 bytes)</option>';
		for (var i=tids.length-1; i>=0; i--) {
			var when=tids[i].modified.formatString('YYYY.0MM.0DD 0hh:0mm:0ss');
			list.push(item.format([tids[i].title.htmlEncode(),when,tids[i].text.length]));
		}
		// display droplist, buttons, and command links
		var out=''; var c=this.changed.length;
		var NSP=config.formatters.findByField("name","nestedSliders");
		var summary=this.defLabel.format([c,c==1?'er':'er',c==1?'':'e'])
		out+=NSP?'+++(unsaved)['+summary+'|'+this.defTip+']...':(summary+"\n");
		out+='<html><form style="display:inline"><!--\
			--><select size="1" name="list" \
				title="select a tiddler to view" \
				onchange="var v=this.value; if (v.length) story.displayTiddler(null,v);"><!--\
			-->'+list.join('')+'<!--\
			--></select><!--\
			--><input type="button" value="gå til" onclick="this.form.list.onchange();">';
		if (config.macros.loadTiddlers)  {
			out+='<input type="button" value="gendan" \
				title="import the last saved version of this tiddler" \
				onclick="var v=this.form.list.value; if (!v.length) return; \
					var t=\'<\'+\'<loadTiddlers [[tiddler:\'+v+\']] \'; \
					t+=document.location.href; \
					t+=\' confirm force noreport>\'+\'>\'; \
					var e=document.getElementById(\'executeRevert\'); \
					if (e) e.parentNode.removeChild(e); \
					e=document.createElement(\'span\'); \
					e.id=\'executeRevert\'; \
					wikify(t,e);">';
		}
		out+='</form></html>';
		if (!readOnly) {
			out+='\n{{small nowrap{';
			out+="<<saveChanges>>";
			out+=config.macros.saveAs?" | <<saveAs>>":"";
			out+=config.macros.upload?" | <<upload>>":"";
			out+=(config.macros.emptyTrash&&store.getTaggedTiddlers("Trash").length)?" | <<emptyTrash>>":"";
			out+='}}}';
		}
		out+=NSP?'===':'';
		wikify(out,place);
	}
};

// hijack store.saveTiddler() to track changes to tiddlers
if (store.showUnsaved_saveTiddler==undefined) {
	store.showUnsaved_saveTiddler=store.saveTiddler;
	store.saveTiddler=function(title,newtitle) {
		if (title!=newtitle) {
			var i=config.macros.unsavedChanges.changed.indexOf(title);
			if (i!=-1) config.macros.unsavedChanges.changed.splice(i,1); // remove old from list
		} 
		var i=config.macros.unsavedChanges.changed.indexOf(newtitle);
		if (i!=-1) config.macros.unsavedChanges.changed.splice(i,1); // remove new title from list
		config.macros.unsavedChanges.changed.push(newtitle); // add new title to END of list
		var t=this.showUnsaved_saveTiddler.apply(this,arguments);
		if (!this.notificationLevel) config.macros.unsavedChanges.refresh();
		return t;
	}
}

// hijack store.removeTiddler() to track changes to tiddlers
if (store.showUnsaved_removeTiddler==undefined) {
	store.showUnsaved_removeTiddler=store.removeTiddler;
	store.removeTiddler=function(title) {
		var i=config.macros.unsavedChanges.changed.indexOf(title);
		if (i!=-1) config.macros.unsavedChanges.changed.splice(i,1); // remove from list
		this.showUnsaved_removeTiddler.apply(this,arguments);
		if (!this.notificationLevel) config.macros.unsavedChanges.refresh();
	}
}

// hijack store.setDirty() function to reset change list after file save
// note: do NOT hijack the prototype function.  This hijack should only be applied to
// the main 'store' instance only (i.e., don't refresh when loading temporary store
// as part of ImportTiddlers processing)
if (store.showUnsaved_setDirty==undefined) {
	store.showUnsaved_setDirty=store.setDirty;
	store.setDirty = function(flag) {
		var refresh=this.isDirty() && !flag; // 'dirty' to 'clean', force a refresh...
		this.showUnsaved_setDirty.apply(this,arguments); // but change the flag first.
		if (refresh) {
			config.macros.unsavedChanges.changed=[]; // clear changed list
			config.macros.unsavedChanges.refresh();
		}
	}
}
//}}}
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 15/02/2010 08:06:14 | MiniPedia | [[/|http://mmpedia.tiddlyspot.com/]] | [[store.cgi|http://mmpedia.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mmpedia.tiddlyspot.com/index.html]] | backup | ok |
| 15/02/2010 08:08:50 | MiniPedia | [[/|http://mmpedia.tiddlyspot.com/]] | [[store.cgi|http://mmpedia.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mmpedia.tiddlyspot.com/index.html]] | backup |
| 15/02/2010 08:11:08 | MiniPedia | [[/|http://mmpedia.tiddlyspot.com/]] | [[store.cgi|http://mmpedia.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mmpedia.tiddlyspot.com/index.html]] | backup | ok |
| 15/02/2010 08:16:59 | MiniPedia | [[/|http://mmpedia.tiddlyspot.com/]] | [[store.cgi|http://mmpedia.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mmpedia.tiddlyspot.com/index.html]] | backup |
| 15/02/2010 21:48:09 | MiniPedia | [[/|http://mmpedia.tiddlyspot.com/]] | [[store.cgi|http://mmpedia.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mmpedia.tiddlyspot.com/index.html]] | backup |
| 15/02/2010 23:37:07 | MiniPedia | [[/|http://mmpedia.tiddlyspot.com/]] | [[store.cgi|http://mmpedia.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mmpedia.tiddlyspot.com/index.html]] | backup |
| 17/02/2010 08:54:44 | MiniPedia | [[/|http://mmpedia.tiddlyspot.com/]] | [[store.cgi|http://mmpedia.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mmpedia.tiddlyspot.com/index.html]] | backup |
| 18/02/2010 15:29:10 | MiniPedia | [[/|http://mmpedia.tiddlyspot.com/]] | [[store.cgi|http://mmpedia.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mmpedia.tiddlyspot.com/index.html]] | backup |
| 14/03/2010 21:00:53 | MiniPedia | [[/|http://mmpedia.tiddlyspot.com/]] | [[store.cgi|http://mmpedia.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mmpedia.tiddlyspot.com/index.html]] | backup |
| 14/03/2010 21:00:57 | MiniPedia | [[/|http://mmpedia.tiddlyspot.com/]] | [[store.cgi|http://mmpedia.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mmpedia.tiddlyspot.com/index.html]] | backup |
/***
|''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: "Gem og Upload denne TiddlyWiki med UploadMuligheder",
	promptParamMacro: "Gem og upload denneTiddlyWiki til %0",
	saveLabel: "gem til nettet", 
	saveToDisk: "gem til disk",
	uploadLabel: "upload"	
};

config.macros.upload.messages = {
	noStoreUrl: "Ingen lagrings URL in parmetre eller muligheder",
	usernameOrPasswordMissing: "Brugernavn eller password mangler"
};

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 med muligheder",
	step1Title: "Disse muligheder gemmes som cookies i din browser",
	step1Html: "<input type='hidden' name='markList'></input><br>",
	cancelButton: "Fortryd",
	cancelButtonPrompt: "Fortryd prompt",
	listViewTemplate: {
		columns: [
			{name: 'Description', field: 'description', title: "Beskrivelse", type: 'WikiText'},
			{name: 'Option', field: 'option', title: "Muligheder", type: 'String'},
			{name: 'Name', field: 'name', title: "Navn", type: 'String'}
			],
		rowClasses: [
			{className: 'lowlight', field: 'lowlight'} 
			]}
};

//
// upload functions
//

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

if (!bidix.upload.messages) bidix.upload.messages = {
	//from saving
	invalidFileError: "Den originale fil '%0' ser ikke ud til at være en ægte TiddlyWiki",
	backupSaved: "Backup gemt",
	backupFailed: "Det lykkedes IKKE at uploade en backup fil",
	rssSaved: "RSS feed er blevet uploadet",
	rssFailed: "Det mislykkedes at uploade et RSS feed",
	emptySaved: "Et tomt template er blevet uploadet",
	emptyFailed: "Det mislykkedes at uploade en tom template fil",
	mainSaved: "Hoved TiddlyWiki fil uploadet",
	mainFailed: "Det mislykkedes at uploade hoved TiddlyWiki filen. Dine ændringer er IKKE blevet gemt",
	//specific upload
	loadOriginalHttpPostError: "Kan ikke hente den originale fil",
	aboutToSaveOnHttpPost: 'I gang med at uploade til %0 ...',
	storePhpNotFound: "Lagrings scriptet '%0' blev ikke fundet."
};

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");


//}}}

!usage
{{{[img[VedhæftFilEksempel]]}}}
[img[VedhæftFilEksempel]]
!notes
example of encoded data attachment
!type
image/gif
!file
./images/meow.gif
!url
http://www.TiddlyTools.com/images/meow.gif
!data
data:image/gif;base64,R0lGODlhOABQAPcAAAAACAAAEAAICAgICAgLDBAQCAQQGRAIEBgICBAQEBAQGBAYFBoOEhwUFCEYEBgYGA4cIBkgGyEcHCEhISkYGCkcHCEpHCklIRAgMRkmNSElKSEpNikeKykpKSExQiE5QjEhJTEpITEpKSkpMSkxISk1KTExITExKSktNTEpMTEpOTExMSk5MSkxOSkxQik5PTkrKTkxMTE8KTFCMTExOTExQjE5PTFCPTk3MzlCMTkxQjk5QkI0MzlGPUg9M01JNi88TTlEUkI8REJCSkZDRFBDQkY/UFA/TjNMUkNOS1JKSkpWRj1KWEpKWj9OXEVZZlhMRlVLVVpSUlReUFdSYFVhX1JSa1VfbmBbU11ia2dcV3FjXVpldWVkb2tnb3tnbGZ1ZHV6aWVwe3d5c2N4iXN3gntzgHeBiYd2dYWHeoh/jIKLkJWEfZmUh5CNlJ+VkICPn46XpZiSo5WfoJycnKaemaGcqKWlpZWnraWtqa2qoq2lrZavvKW4xK2lta2ws/8A/7WcjLWllLWlpbWlrb2tnMatnLWtpbWtrb2trbWttb2ttbWtvbW1pca1pbW1ra21va21xrW1tbW1vbW1xrW9tb21rb21tb21vb21xr29rb29tca9sca1vc69rda9ra29wa3GxrW9vbW9xq29zrHGyrPB0rXG1r29vb29xr29zr3Gvb3Gxr3Gzr3G1sa9vcbGtc7GtdbGtcbGvc7GvdbGvd7Gvca9xsa9zsbGxsbGzsbG1s7DyNbGxtbGzs7G1rjQ2MbO0sbO3sbW1s7Owc7OzsbW3sbe3s7O1s7W0tbQx+HUzNDQ29bW1tvb1ufa1sPW6dDW4dbW3trY4sni7dbk797e3tbx9N7n3ufe3t7e597n597i7+fe597s9N73++fn3ufn5+fn7+fv5+fv7+/e5+/r4vfr4ufn9+fv9+fv/+/n7+/v8/Pz7/fv9+/v/+f3++f//+/39+/3/+//9+////f37/f39/f3//f/9/f////37//39//3////9////yH5BAEAAIAALAAAAAA4AFAAQAj+AAEJHEiwoMGDCBMqXIiwiA8tXbxIgXHhgY+FICSIiCFFihIeXRgm9OKlDJMqYs506UIDRIUKD7w8kLCiAw0q0ao8WCFhwgQqDx7E+EJHm0gpUaI0ibKDBo0dXeakazEkxYUOGjRMSQOmQw874eR9IHNPXrFba5Y8CLNDyYULGlZQRVjtzJCmTnew2AGp2j19gAGTC6ctnLvDZfWR07AjCJAd4fTduxctFapbiDKTQ7gjSZcsT6PQqLmCxhA78v4GnuxOHuGzeei8kVLkh5I1b9y80XPp0q1s+lK7E3eQjSIvbqJAEiPGjR0/c9REqyavtTx9rVtn09asmJsvbMb+uLlcrFn3YsqsiRM33M3CDlkUsWMnT978cM206Y/WjH+187cEGOArqKCiCCJ00DEHHXXkIdJBEgQVlEsS1iThAwlg+EAXcNgBySiQQILKJWOM8YYy2Tyo4oqA5HELMtxxVwyLNA5UxAUxxPBWjTjGIIIWNSKUhhddUFFFU0O89BZjQ9DQwYUPVKABCEJg8cYZK5aRxRNM0JDCCimkQMUONXUAwlVOKbGDGHhAMEczgemjTV2jXeCTBqZFoZASVDDRxGildTbHX3zUgJeTZ0Cimj5kBLHDEEM0IU59cd6TDmHm7WFQNHDAwcVoT5m2Qg2tAJPYau6wY01/2ohTjDb+Z91hhiK3FMiILnkcWIw1iLlz0BuPquHEFaDWtEMVclyXWpz1pUNONdKkkkoWyEGSqyKXvYJeNtmEo6pRCEkyaX3ykMPOYOWSw41+2rDTGjndNoMMMsXoUkw05SFzXnlnFaiIikpOIIEUbrzaSit+RPFWByK4ocoordzC74iKKHLGFmm4kQciQSIkgQQIIEAAAQ+Q/IDIIieQAAFROPcHI9heUodh2ujT8c0CzcEdt8Ph7DONGgwxxs+A7BADEUT4SOMEMWyBBRYiEA2ID16oYYYZDsXwQGNOMHGFFUz4ucMFND2qRBdmeDEE0Uq0IccWSuDQwdwXXrBCkxVFKOH+VVB8UceMNHohxhVNipDCEBqkoIGUTu70AA4P3PUEYG6cEQXiM0lwwRBryKNiF1dcwYQQDK+wQxZijGYmnk+tsEIVGrgTZ6VniMHUCHZ3EAWQCWlRxe+X47BCy8UEc08GcmfVwVUxLDHFECPoE01TTWhjTRQimBBDEW64QUYTZczBhBcJCTFEFKODSkMUZcAJWDWMjDJHGW4089df3DiRBRDgwzE7YPLgji5uIQmEzIMaeHgU+nbwqCaEaFEAXI82rqOav8gDLgOzjj5c9YpbXEIR2bjHLQ5yBjdw4QxjGs0OOvA6MQSjGrNLjX2akQ1U0KEMXlACDYh0uS3M4Q3+CeoAHbKBmHuE4yBJ6EEXUveomiBuCKhwA3AqOJmypIMb+ILEH1ChhTXoIUEbqwMiXsELZThjOOEgB8cO4gYqKOEMDNxhFKjQBFmFw4IAZM25uJOKMWyhi35gxFk6WAxnqOcw5wKcQdAgJz84shrVcIMfRpEOSMqjGtGoTnVSJY78dIcRf2ADFPwgsbM0Q2LmaRVmGNKGYmzSPvYxFzsqOZ12dSsbACrlq85Sq1sQ6EBrfBAReHI1baTjUuGIhjZ0UZkC3cI89CqPeQrkBzq4IQ1nWMOCCsijoPhgBUKoQstokJUJQOkBSlADJVqRimKgghEwe4MW0KCxZvisIif+QwCUMnShkD2ABmaQAyQoMYoCXYINdCgGcKRmEAkRQAErI4DKgiIHP/wBEoy4hDvN0wxfMXRFo7CXNYh4j492TBG7VJVJV1oQKDBUCzi6WZQuUAai+UAEPvDRBWikEaTxIGo/EwIP/igFH0hARZoTwRC+8AUtFEFqPlCCFryghZtSRE8H6cIOHnABH0iBWl4wwxGgupIiKUEIPqjAqKhihSY4igYjMGcHUrCDKIS1hFKTAlVFAwIq1W19NMCnhCRQgRBAAQ28SIPP1nCGNBTDaXfZQQoq8LGgYAVSILjQBC6wAyEQAQ11SFGNuvC7P+2ACXO4i+kipNYHdIBMppn+hxteRyYqCEwCOJDCHDyqIixoQQxuleyXojA3rFxgBK57ixcmcNozAOYeeAjCGWZiN7hM4AmjUFEVmpCFJrjuSxEhE1ZAYLq7KQFS0RjU/+5xhjI0YQcauEBesKoQM2QBUp113dzm4CjFZaVM8RWCGwA4u3sAowmq1cAE8GQF+iJECXNkwg6E11kmuCEdGSATCLISlyqAwXkQSI0TuACHdBTjDh0Agwmw0EAyiWElCilCEvDrlKfsoAzC0Ecc9uI6DXDVxxPwwgjuAQc8NSEa3UiDMnghu3v8oXZ3QIYX/KCQIdCxKYGiQhei8dw5tHEIXqjCHGAImHR8QAhAuEL+FsrwP8E0QxdwVogC71JjIXShFdcJDH6sUQxFQJAccHCvE87Qh0WVJRrhCJCBFEKNK0yYgZ3NwgrcAIl0zK414qAPAPPsXQvBSR7TrNiBJKGPNyAkGsbgA1NcxwLXuQEPwrA0s9wRDms8N1XuOOYQJLCF/ESDPwOsVR7glCoSliEOZWCgapNwJDm0AoKSqc49FEGFMtyhVqhIWArWoAgF5WEPLmqDfGTXM4M8oQxXSF2kxpSFHbTADX/wS6XIBatmSKILQzAcpMIkhTSo4Q1pGGM2NqmYg1xhd2sYTQqcdAEqJMENmSywJtnBnVsoopomagMQGVSHQVziFc1AETn+qmNPg1CBCkFwQxC+RKa71bUMsnvuZDRZrmog45138HKu6FCxzGhrVdkQRzhEexAiZRMFe2nSClB3B21AsIrycNav34lDN9wiDwW6TBmdEQ720NoaCTmDGqgghnbvQA7ppt8twnKq+rwLktHIgxbaAIU1+AEVxSgGL3hRSF5tkFt3QEgsdOyGO1zUDWVgxK/1lQ53jbwsnNzOKf2giDdAgQ54zzu/aLgePi9kMqZIRzBGMYpfV6PxlaxGu7BjH3FkwxqrwvYYftDO7jxTl2dBRBsYcongkKtcs4w63AszmGaIA1ZnyTtHzaN5iQVIEXpwj0iw4Abr1OdcFKcPu/T+I/lc8rJftapYbOrAItNhQRHyyLS5CMOffb0qGvqqV949WDE63MEN2qRDbGgUg+WtQARbdnr/cUq6wAg5NwfK1H7TdAl+kAd54AYYswYJ8gpBQllcNTdj4AWMEAxyAAE+JiFKIB6jcAvBUC8jAjNugAUmQgfBVCNBAVsLVwVZwAQPYE5Q8hZ/MAqM0AonqAiDoAXioQdEFyTnVIRBoTIJoAAg0AVyYAeRACIjgghh8AaoMFI+gyEhgwAJoE9QQgBaqAAvWAaBdBmXcQd1ACdl8VE6kk8ZsoVJCFEJMGl2MAdzADOv8AYdpQ+8wFIDUTIj44VBAQgeQlC1ogvNgAouykAHFMiHCkEJqtAK0rQqjKgipWcNvyE7k6gip8QOXTeEmcgQbAAI3VByNBIQAAA7
<!--{{{-->
<div class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump'><span class='tagging' macro='tagging'><span class='tagged' macro='tags'></span><span title="TagCycle" style="margin-right:20px;">vælg status:<span macro="tiddler cycleTags with: TagList"></span>
</span>
</div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
!Inline Formatting /% DEBUG: buggy (-> monospaced) %/
|!Option|!Syntax|!Output|
|bold font|{{{''bold''}}}|''bold''|
|italic type|{{{//italic//}}}|//italic//|
|underlined text|{{{__underlined__}}}|__underlined__|
|strikethrough text|{{{--strikethrough--}}}|--strikethrough--|
|superscript text|{{{^^super^^script}}}|^^super^^script|
|subscript text|{{{~~sub~~script}}}|~~sub~~script|
|highlighted text|{{{@@highlighted@@}}}|@@highlighted@@|
|preformatted text|{{{{{{preformatted}}}}}}|{{{preformatted}}}|
|coloured text|{{{@@bgcolor(#ff0000):color(#ffffff):coloured text@@}}}|@@bgcolor(#ff0000):color(#ffffff):coloured text@@|
|Escape word wikification|{{{~MiniPedia}}}|~MiniPedia instead of MiniPedia|
!Todo Lists
{{{
[ ] Sample 1
[ ] Sample 2
[ ] Sample 3
}}}
[_] Sample 1
[ ] Sample 2
[ ] Sample 3

!Article Lists
{{{<<tiddlerList parameter1:"value1" parameter2:"value2" ...>>}}}
!!Examples
List all tiddlers tagged with "Plugin"
{{{<<tiddlerList tags:Plugin>>}}}
List newest 3 plugins which are not templates:
{{{<<tiddlerList tags:"Plugin,-Template" top:3 order:"-created">>}}}
List all tiddlers containing "Jack" in their title or text (last modified first):
{{{<<tiddlerList search:"Jack" order:"-modified">>}}}
List all tiddlers starting with "T" in a table:
{{{<<tiddlerList title:"^T" format:"table" header:"Tiddlers beginning with T" footer:"%count items listed">>}}}
Group tiddlers by first letter
{{{<<tiddlerList top:"15" group:"tiddler.title.substr(0,1)" groupTemplate:"''%group''">>}}}
Show a list of all tiddlers with creation date (overrides default item template)
{{{<<tiddlerList itemTemplate:"* %link (%created)\n">>}}}
Show all tiddlers that have the host's tiddler title in their tag list
{{{<<tiddlerList filter:"tiddler.tags.contains(currentTiddler.title)">>}}}
!Block Elements
!!Headings
{{{
!Heading 1
!!Heading 2
!!!Heading 3
!!!!Heading 4
!!!!!Heading 5
}}}
<<<
!Heading 1
!!Heading 2
!!!Heading 3
!!!!Heading 4
!!!!!Heading 5
<<<
!!Lists
{{{
* unordered list, level 1
** unordered list, level 2
*** unordered list, level 3

# ordered list, level 1
## ordered list, level 2
### unordered list, level 3

; definition list, term
: definition list, description
}}}
<<<
* unordered list, level 1
** unordered list, level 2
*** unordered list, level 3

# ordered list, level 1
## ordered list, level 2
### unordered list, level 3

; definition list, term
: definition list, description
<<<
!!Blockquotes /% DEBUG: hack %/
{{{
> blockquote, level 1
>> blockquote, level 2
>>> blockquote, level 3

<<<
blockquote
<<<
}}}
<<<
> blockquote, level 1
>> blockquote, level 2
>>> blockquote, level 3

> blockquote
<<<
!!Preformatted Text /% DEBUG: hack %/
{{{
 {{{
 preformatted (e.g. code)
 }}}
}}}
<<<
{{{
preformatted (e.g. code)
}}}
<<<
!!Tables
{{{
|CssClass|k
|!heading column 1|!heading column 2|
|row 1, column 1|row 1, column 2|
|row 2, column 1|row 2, column 2|
|>|COLSPAN|
|ROWSPAN| … |
|~| … |
|CssProperty:value;…| … |
|caption|c
}}}
''Annotation:''
* The {{{>}}} marker creates a "colspan", causing the current cell to merge with the one to the right.
* The {{{~}}} marker creates a "rowspan", causing the current cell to merge with the one above.
<<<
|CssClass|k
|!heading column 1|!heading column 2|
|row 1, column 1|row 1, column 2|
|row 2, column 1|row 2, column 2|
|>|COLSPAN|
|ROWSPAN| … |
|~| … |
|CssProperty:value;…| … |
|caption|c
<<<
!!Images /% DEBUG: to do %/
cf. [[TiddlyWiki.com|http://www.tiddlywiki.com/#EmbeddedImages]]
!Hyperlinks
* [[WikiWords|WikiWord]] are automatically transformed to hyperlinks to the respective tiddler
** the automatic transformation can be suppressed by preceding the respective WikiWord with a tilde ({{{~}}}): {{{~WikiWord}}}
* [[PrettyLinks]] are enclosed in square brackets and contain the desired tiddler name: {{{[[tiddler name]]}}}
** optionally, a custom title or description can be added, separated by a pipe character ({{{|}}}): {{{[[title|target]]}}}<br>'''N.B.:''' In this case, the target can also be any website (i.e. URL).
!Custom Styling
* {{{@@CssProperty:value;CssProperty:value;…@@}}}<br>''N.B.:'' CSS color definitions should use lowercase letters to prevent the inadvertent creation of WikiWords.
* {{{{{customCssClass{…}}}}}} /% DEBUG: buggy %/
* raw HTML can be inserted by enclosing the respective code in HTML tags: {{{<html> … </html>}}}
!Special Markers
* {{{<br>}}} forces a manual line break
* {{{----}}} creates a horizontal ruler
* [[HTML entities|http://www.tiddlywiki.com/#HtmlEntities]]
* {{{<<macroName>>}}} calls the respective [[macro|Macros]]
* To hide text within a tiddler so that it is not displayed, it can be wrapped in {{{/%}}} and {{{%/}}}.<br/>This can be a useful trick for hiding drafts or annotating complex markup.
* To prevent wiki markup from taking effect for a particular section, that section can be enclosed in three double quotes: e.g. {{{"""WikiWord"""}}}.
!Table of Contents
{{{<<showtoc>>}}}

<<showtoc>>

!More info
[[Tiddlywiki markup|http://www.tiddlywiki.org/wiki/TiddlyWiki_Markup]]
<<tiddlerList tags:-sysfile,-systemConfig,-MiniPediaTheme group:"tiddler.title.substr(0,1)" groupTemplate:'!%group\n'>>
/%
|Name|cycleTags|
|Source|http://lastfm.tiddlyspot.com/#cycleTags|
|Version|0.1.1|
|Author|Tobias Beer|
|License||''License''|[[Creative Commons Attribution-Share Alike 3.0|http://creativecommons.org/licenses/by-sa/3.0/]]|
|~CoreVersion|2.5|
|Type|script|
|Requires|[[InlineJavascriptPlugin]] [[on tiddlytools|http://www.tiddlytools.com/#InlineJavascriptPlugin]]|
|Overrides||
|Description|allows to cycle through a defined list of tags|
|Discusson|[[tiddlywiki google group|http://groups.google.com/group/tiddlywiki/browse_frm/thread/de78a3e21b1a0b97]].

usage:
	<<tiddler cycleTags with: TagList Tiddler>>

where:
	TagList - (required)
		refers to a tiddler with a defined list of tags see cycleTagsInfo
	Tiddler - (optional) 
		when defined, sets the tags on the specified tiddler instead of the one calling the script

%/<script>
var tid = "$2";
if (tid!="$"+"2") {
  tid = store.getTiddler(tid);
  if (tid==null) return "@@color:red;invalid tiddler reference@@";
}
else {
  tid = store.getTiddler(story.findContainingTiddler(place).getAttribute('tiddler'));
}
if (tid == undefined) return;
var def="$1";
if (store.getTiddler(def)==undefined) return "@@color:red;invalid taglist@@";
var lines=store.getTiddlerText(def).split("\n");
var next=-1;
var i=0;
remove="";
while (next<0 && i<lines.length) {
  var parts=lines[i].split('###');
  if (tid.tags.contains(parts[0])) {
    next=i+1;
    remove=parts[0];
  }
  i++;
}

i>=lines.length?next=0:next=i;
parts=lines[next].split('###');

var tag = parts[0];
parts[1]!=undefined?text = parts[1]:text = "set "+ tag;
parts[2]!=undefined?tooltip = parts[2]:tooltip = "assign '"+ tag + "' to this tiddler";
parts[3]!=undefined?cls = parts[3]:cls = "";
parts[4]!=undefined?rbutton = parts[4]:rbutton = "";

if (remove != "" && rbutton != "") {
  var btn = createTiddlyButton(place,rbutton,"fjern tag " + remove,function(){store.setTiddlerTag(this.tid,0,this.removeTag); story.refreshTiddler(story.findContainingTiddler(this).getAttribute('tiddler'),null,true);},cls);
  btn.removeTag = remove;
  btn.tid = tid.title;
}

var btn = createTiddlyButton(place,text,tooltip,function(){store.setTiddlerTag(this.tid,1,this.switchTag);store.setTiddlerTag(this.tid,0,this.removeTag);story.refreshTiddler(story.findContainingTiddler(this).getAttribute('tiddler'),null,true);},cls);
btn.switchTag = parts[0];
btn.removeTag = remove;
btn.tid = tid.title;
</script>
Denne artikel er om æbler! De gror på træer!