<!--{{{-->
<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 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 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:0em 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 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

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

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

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 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 0em;}
.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 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 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 0em 14em;}

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

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

.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:0em 0.25em; padding:0em 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 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px 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 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 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 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<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>>
These InterfaceOptions for customising TiddlyWiki are saved in your browser

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

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

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
/%
!out
$1
!end
%/
<<tiddler Affiche##out with: {{
   var out=[]; 
   var tids=store.getTaggedTiddlers('$1'); 
   out.push("<html><nowiki><div class='box menu'><h2><a href='#' id='toggle-section-menu'>$1...</a></h2>");
       out.push("<div class='block' id='section-menu'><ul class='section menu'><li><ul class='submenu'>");
 	for (var i=0; i<tids.length; i++) { 
        var titre="'"+tids[i].title+"'";
        var js="javascript:story.displayTiddler(null," + titre;
        var sol='<li><a class="active" href="' +js +  ');" >';
        out.push( sol + tids[i].title+"</a></li>"); 
   };
   out.push("</ul></li></ul></div></div></html>"); out.join("");
}}>>
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
/***
|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.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1.3|
|Type|plugin|
|Description|run-time library for displaying attachment tiddlers|
Runtime 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: after creating new attachment tiddlers, you can remove [[AttachFilePlugin]], as long as you retain //this// tiddler (so that images can be rendered later on).
!!!!!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.10.10 [4.0.1] in fileExists(), check for IE to avoid hanging Chrome during startup
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: 1, date: new Date(2009,10,10)};
//}}}

//{{{
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 if (config.browser.isIE) { // IE
		var fso = new ActiveXObject("Scripting.FileSystemObject");
		return fso.FileExists(f);
	}
	else return true; // other browsers: assume file exists
}
//}}}

//{{{
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);
	}
}
//}}}
{{centeredmenu{<script>
var title = new Date( );
title = "[[" + title.formatString("DDD DD MMM YYYY") + "]]" ;
return title
</script>}}}
<<tiddler Drapeau>> Ce [[tiddlywiki|http://www.tiddlywiki.fr/]] est un exercice de style pour mettre en évidence le "[[framework CSS Fluid 960|http://www.designinfluences.com/fluid960gs/]]"

[img[chakra.png]] qui signifie ''la roue'' en sanscrit (chakra) est une image réalisée sous [[inkscape|http://www.inkscape.org/?lang=fr]] et librement utilisable. 
Background: #6e7580
Foreground: #222222
PrimaryPale: #f1f1f5
PrimaryLight:  #7d8faa
PrimaryMid: #29364b
PrimaryDark: #a9b3c2
SecondaryPale: #47576f
SecondaryLight: #c4ccd8
SecondaryMid: #abb3c0
SecondaryDark: #8993a2
TertiaryPale: #f2f2f2
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
<html><nowiki>
<div class="box">
			<h2>
				<a href="#" id="toggle-forms">Laissez un commentaire</a>
			</h2>
			<div class="block" id="forms">
				<form action="">
					<fieldset class="login">
						<legend>Commentaire :</legend>
						<p>
							<label>Nom : </label>
							<input type="text" name="username" value="" />
						</p>
						<p>
							<label>Courriel : </label>
							<input type="text" name="courriel" value="" />
						</p>
						<p>
							<label>Site web : </label>
							<input type="text" name="web" value="" />
						</p>
						<p>
							<label>Commentaire :</label>
							<textarea name="comment" id="comment" cols="45%"></textarea>
						</p>
						<input class="confirm button" type="submit" value="Envoyer (fictif)" />
					</fieldset>
</form>
</html>
[[Bienvenue]]
^^@@color(blue):■@@@@color(white):■@@@@color(red):■@@^^
<html><nowiki>
		<div class="container_16">
<h3 class="toggler atStart">Design Process</h3>
			<div class="clear"></div>
			<div class="grid_16">
				<h3 id="page-heading">Templates for Rapid Interactive Prototyping</h3>
			</div>
			<div class="clear"></div>

			<div class="grid_4">
				<div class="box">
					<h2>
						<a href="#" id="toggle-paragraphs">Process</a>
					</h2>
					<div class="block">
						<p>Design is based on the inspiration of past accomplishments. On that foundation, we can build upon those achievements to shape the future. Design is about life — past, present and future — and the learning process that happens between birth and death. It is about community and shared knowledge and experience. It is the passion to build on what we've learned to create something better.</p>
					</div>
				</div>
			</div>
			<div class="grid_4">
				<div class="box">
					<h2>
						<a href="#" id="toggle-paragraphs">Design</a>
					</h2>
					<div class="block">
						<p>The words "design influences" can be understood as both a plural noun and as subject and verb. The plural noun speaks of those who have come before us and paved the way. The verb speaks of the responsibility of design to lead the way. By understanding where we have come from, we have a better idea of where we are going and, perhaps, where we should be heading.</p>
					</div>
				</div>
			</div>
			<div class="grid_4">
				<div class="box">
					<h2>
						<a href="#" id="toggle-paragraphs">Inspiration</a>
					</h2>
					<div class="block">
						<p>I have been inspired by the work of many who have pioneered advances in Web Standards, including 
				<a href="http://www.31three.com/" title="www.31three.com">Jesse Bennett-Chamberlain</a>, 
				<a href="http://www.stopdesign.com/" title="www.stopdesign.com">Douglas Bowman</a>, 
				<a href="http://www.chaoticpattern.com/" title="www.chaoticpattern.com">Allen Chang</a>, 
				<a href="http://www.stuffandnonsense.co.uk/" title="www.stuffandnonsense.co.uk">Andy Clarke</a>, 
				<a href="http://www.hicksdesign.co.uk/" title="www.hicksdesign.co.uk">Jon Hicks</a>, 
				<a href="http://www.shauninman.com/" title="www.shauninman.com">Shaun Inman</a>, 
				<a href="http://www.cameronmoll.com/" title="www.cameronmoll.com">Cameron Moll</a>, 
				<a href="http://veerle.duoh.com/" title="veerle.duoh.com">Veerle Pieters</a>, 
				<a href="http://www.jasonsantamaria.com/" title="www.jasonsantamaria.com">Jason Santa Maria</a>, 
				<a href="http://www.mezzoblue.com/" title="www.mezzoblue.com">Dave Shea</a>, 
				<a href="http://www.thebignoob.com/" title="www.thebignoob.com">Ryan Sims</a>, 
				<a href="http://www.sonspring.com/" title="www.sonspring.com">Nathan Smith</a>, and 
				<a href="http://www.zeldman.com/" title="www.zeldman.com">Jeffrey Zeldman</a>, 
				to name a few. Thank you for inspiring <a href="http://www.domain7.com/WhoWeAre/StephenBau.html" title="Stephen Bau, Designer, Domain7">me</a> to give something back.</p>
					</div>
				</div>
			</div>
			<div class="grid_4">
				<div class="box">
					<h2><a href="#" id="toggle-paragraphs">Contribution</a></h2>
					<div class="block">
						<p>The <a href="/fluid960gs/">Fluid 960 Grid System</a> templates have been built upon the work of Nathan Smith and his <a href="http://960.gs/">960 Grid System</a> using effects from the <a href="http://mootools.net/">MooTools</a> and <a href="http://jquery.com/">jQuery</a>  JavaScript libraries. 
			 The idea for building these templates was inspired by Andy Clarke, author of <a href="http://www.transcendingcss.com/">Transcending CSS</a>, who advocates a content-out approach to rapid interactive prototyping, crediting Jason Santa Maria with the <a href="http://www.jasonsantamaria.com/archive/2004/05/24/grey_box_method.php">grey box method</a>.</p>
					</div>
				</div>
			</div>
			<div class="clear"></div>
			<div class="box grid_16" style="padding:0;">
				<h2 style="margin:0">
					<a href="#" style="background-position:99.3% 50%" id="toggle-grid">16-column Grid</a>
				</h2>
			</div>
			<div class="clear"></div>
			<div id="grid">
				<div class="grid_1">
					<div class="box">
						<p>01</p>
					</div>
				</div>
				<div class="grid_1">
					<div class="box">
						<p>02</p>
					</div>
				</div>
				<div class="grid_1">
					<div class="box">
						<p>03</p>
					</div>
				</div>
				<div class="grid_1">
					<div class="box">
						<p>04</p>
					</div>
				</div>
				<div class="grid_1">
					<div class="box">
						<p>05</p>
					</div>
				</div>
				<div class="grid_1">
					<div class="box">
						<p>06</p>
					</div>
				</div>
				<div class="grid_1">
					<div class="box">
						<p>07</p>
					</div>
				</div>
				<div class="grid_1">
					<div class="box">
						<p>08</p>
					</div>
				</div>
				<div class="grid_1">
					<div class="box">
						<p>09</p>
					</div>
				</div>
				<div class="grid_1">
					<div class="box">
						<p>10</p>
					</div>
				</div>
				<div class="grid_1">
					<div class="box">
						<p>11</p>
					</div>
				</div>
				<div class="grid_1">
					<div class="box">
						<p>12</p>
					</div>
				</div>
				<div class="grid_1">
					<div class="box">
						<p>13</p>
					</div>
				</div>
				<div class="grid_1">
					<div class="box">
						<p>14</p>
					</div>
				</div>
				<div class="grid_1">
					<div class="box">
						<p>15</p>
					</div>
				</div>
				<div class="grid_1">
					<div class="box">
						<p>16</p>
					</div>
				</div>
				<div class="clear"></div>
				<div class="grid_2">
					<div class="box">
						<p>01</p>
					</div>
				</div>
				<div class="grid_2">
					<div class="box">
						<p>02</p>
					</div>
				</div>
				<div class="grid_2">
					<div class="box">
						<p>03</p>
					</div>
				</div>
				<div class="grid_2">
					<div class="box">
						<p>04</p>
					</div>
				</div>
				<div class="grid_2">
					<div class="box">
						<p>05</p>
					</div>
				</div>
				<div class="grid_2">
					<div class="box">
						<p>06</p>
					</div>
				</div>
				<div class="grid_2">
					<div class="box">
						<p>07</p>
					</div>
				</div>
				<div class="grid_2">
					<div class="box">
						<p>08</p>
					</div>
				</div>
				<div class="clear"></div>
				<div class="grid_3">
					<div class="box">
						<p>01</p>
					</div>
				</div>
				<div class="grid_3">
					<div class="box">
						<p>02</p>
					</div>
				</div>
				<div class="grid_3">
					<div class="box">
						<p>03</p>
					</div>
				</div>
				<div class="grid_3">
					<div class="box">
						<p>04</p>
					</div>
				</div>
				<div class="grid_4">
					<div class="box">
						<p>05</p>
					</div>
				</div>
				<div class="clear"></div>
				<div class="grid_4">
					<div class="box">
						<p>01</p>
					</div>
				</div>
				<div class="grid_4">
					<div class="box">
						<p>02</p>
					</div>
				</div>
				<div class="grid_4">
					<div class="box">
						<p>03</p>
					</div>
				</div>
				<div class="grid_4">
					<div class="box">
						<p>04</p>
					</div>
				</div>
				<div class="clear"></div>
				<div class="grid_5">
					<div class="box">
						<p>01</p>
					</div>
				</div>
				<div class="grid_5">
					<div class="box">
						<p>02</p>
					</div>
				</div>
				<div class="grid_6">
					<div class="box">
						<p>03</p>
					</div>
				</div>
				<div class="clear"></div>
				<div class="grid_6">
					<div class="box">
						<p>01</p>
					</div>
				</div>
				<div class="grid_5">
					<div class="box">
						<p>02</p>
					</div>
				</div>
				<div class="grid_5">
					<div class="box">
						<p>03</p>
					</div>
				</div>
				<div class="clear"></div>
				<div class="grid_7">
					<div class="box">
						<p>01</p>
					</div>
				</div>
				<div class="grid_5">
					<div class="box">
						<p>02</p>
					</div>
				</div>
				<div class="grid_4">
					<div class="box">
						<p>03</p>
					</div>
				</div>
				<div class="clear"></div>
				<div class="grid_8">
					<div class="box">
						<p>01</p>
					</div>
				</div>
				<div class="grid_8">
					<div class="box">
						<p>02</p>
					</div>
				</div>
				<div class="clear"></div>

			<div class="grid_16">
				<div class="box" id="kwick-box">
					<h2><a href="#" id="toggle-paragraphs">Mootools Fx.Elements</a></h2>
					<div id="kwick">
						<ul class="kwicks">
							<li>
								<a class="kwick one" href="#">
									<span>One</span>
								</a>
							</li>
							<li>
								<a class="kwick two" href="#">
									<span>Two</span>
								</a>
							</li>
							<li>
								<a class="kwick three" href="#">
									<span>Three</span>
								</a>
							</li>
							<li>
								<a class="kwick four" href="#">
									<span>Four</span>
								</a>
							</li>
						</ul>
					</div>
				</div>
			</div>
			<div class="clear"></div>
			<div class="grid_4">
				<div class="box">
					<h2>
						<a href="#" id="toggle-paragraphs">Paragraphs</a>
					</h2>
					<div class="block" id="paragraphs">
						<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
						<p>Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p>
					</div>
				</div>
				<div class="box">
					<h2>
						<a href="#" id="toggle-ajax" class="hidden">[img[ajax-loader.gif]] 
				Ajax Content
			</a>
					</h2>
					<div class="block" id="ajax-content">
			Content loaded dynamically
		</div>
				</div>
				<div class="box menu">
					<h2>
						<a href="#" id="toggle-section-menu">Section Menu</a>
					</h2>
					<div class="block" id="section-menu">
						<ul class="section menu">
							<li>
								<a class="menuitem">Menu 1</a>
								<ul class="submenu">
									<li>
										<a>Submenu 1</a>
									</li>
									<li>
										<a>Submenu 2</a>
									</li>
									<li>
										<a class="active">Submenu 3</a>
									</li>
									<li>
										<a>Submenu 4</a>
									</li>
									<li>
										<a>Submenu 5</a>
									</li>
								</ul>
							</li>
							<li>
								<a class="menuitem">Menu 2</a>
								<ul class="submenu">
									<li>
										<a>Submenu 1</a>
									</li>
									<li>
										<a>Submenu 2</a>
									</li>
									<li>
										<a>Submenu 3</a>
									</li>
									<li>
										<a>Submenu 4</a>
									</li>
									<li>
										<a>Submenu 5</a>
									</li>
								</ul>
							</li>
							<li>
								<a class="menuitem">Menu 3</a>
								<ul class="submenu">
									<li>
										<a>Submenu 1</a>
									</li>
									<li>
										<a>Submenu 2</a>
									</li>
									<li>
										<a>Submenu 3</a>
									</li>
									<li>
										<a>Submenu 4</a>
									</li>
									<li>
										<a>Submenu 5</a>
									</li>
								</ul>
							</li>
							<li>
								<a class="menuitem">Menu 4</a>
								<ul class="submenu">
									<li>
										<a>Submenu 1</a>
									</li>
									<li>
										<a>Submenu 2</a>
									</li>
									<li>
										<a>Submenu 3</a>
									</li>
									<li>
										<a>Submenu 4</a>
									</li>
									<li>
										<a>Submenu 5</a>
									</li>
								</ul>
							</li>
						</ul>
					</div>
				</div>
				<div class="box">
					<h2>
						<a href="#" id="toggle-list-items">List Items</a>
					</h2>
					<div class="block" id="list-items">
						<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod. </p>
						<h5>A menu</h5>
						<ul class="menu">
							<li>
								<a href="#">Item 1</a>
							</li>
							<li>
								<a href="#">Item 2</a>
							</li>
							<li>
								<a href="#">Item 3</a>
							</li>
						</ul>
						<h5>An unordered list</h5>
						<ul>
							<li>
								<a href="#">Item 1</a>
							</li>
							<li>
								<a href="#">Item 2</a>
							</li>
							<li>
								<a href="#">Item 3</a>
							</li>
						</ul>
						<h5>An ordered list</h5>
						<ol>
							<li>
								<a href="#">Item 1</a>
							</li>
							<li>
								<a href="#">Item 2</a>
							</li>
							<li>
								<a href="#">Item 3</a>
							</li>
						</ol>
					</div>
				</div>
			</div>
			<div class="grid_7">
				<div class="box">
					<h2>
						<a href="#" id="toggle-accordion">Accordion</a>
					</h2>
					<div class="block" id="accordion">
						<div id="accordion">
							<h3 class="toggler atStart">Design Process</h3>
							<div class="element atStart">
								<h4>The Value of Design</h4>
								<p>Design is based on the inspiration of past accomplishments. On that foundation, we can build upon those achievements to shape the future. Design is about life — past, present and future — and the learning process that happens between birth and death. It is about community and shared knowledge and experience. It is the passion to build on what we've learned to create something better.</p>
							</div>
							<h3 class="toggler atStart">Design Influences</h3>
							<div class="element atStart">
								<h4>About this Site</h4>
								<p>The words "design influences" can be understood as both a plural noun and as subject and verb. The plural noun speaks of those who have come before us and paved the way. The verb speaks of the responsibility of design to lead the way. By understanding where we have come from, we have a better idea of where we are going and, perhaps, where we should be heading.</p>
							</div>
							<h3 class="toggler atStart">Inspiration</h3>
							<div class="element atStart">
								<h4>Inspired by the Past</h4>
								<p>I have been inspired by the work of many who have pioneered advances in Web Standards, including 
						<a href="http://www.31three.com/" title="www.31three.com">Jesse Bennett-Chamberlain</a>, 
						<a href="http://www.stopdesign.com/" title="www.stopdesign.com">Douglas Bowman</a>, 
						<a href="http://www.chaoticpattern.com/" title="www.chaoticpattern.com">Allen Chang</a>, 
						<a href="http://www.stuffandnonsense.co.uk/" title="www.stuffandnonsense.co.uk">Andy Clarke</a>, 
						<a href="http://www.hicksdesign.co.uk/" title="www.hicksdesign.co.uk">Jon Hicks</a>, 
						<a href="http://www.shauninman.com/" title="www.shauninman.com">Shaun Inman</a>, 
						<a href="http://www.cameronmoll.com/" title="www.cameronmoll.com">Cameron Moll</a>, 
						<a href="http://veerle.duoh.com/" title="veerle.duoh.com">Veerle Pieters</a>, 
						<a href="http://www.jasonsantamaria.com/" title="www.jasonsantamaria.com">Jason Santa Maria</a>, 
						<a href="http://www.mezzoblue.com/" title="www.mezzoblue.com">Dave Shea</a>, 
						<a href="http://www.thebignoob.com/" title="www.thebignoob.com">Ryan Sims</a>, 
						<a href="http://www.sonspring.com/" title="www.sonspring.com">Nathan Smith</a>, and 
						<a href="http://www.zeldman.com/" title="www.zeldman.com">Jeffrey Zeldman</a>, 
						to name a few. Thank you for inspiring <a href="http://www.domain7.com/WhoWeAre/StephenBau.html" title="Stephen Bau, Designer, Domain7">me</a> to give something back.</p>
							</div>
							<h3 class="toggler atStart">Contribution</h3>
							<div class="element atStart">
								<h4>Shaping the Future</h4>
								<p>The <a href="/fluid960gs/">Fluid 960 Grid System</a> templates have been built upon the work of Nathan Smith and his <a href="http://960.gs/">960 Grid System</a> using effects from the <a href="http://www.mootools.net/">Mootools</a> JavaScript library. The idea for building these templates was inspired by Andy Clarke, author of <a href="http://www.transcendingcss.com/">Transcending CSS</a>, who advocates a content-out approach to rapid interactive prototyping, crediting Jason Santa Maria with the <a href="http://www.jasonsantamaria.com/archive/2004/05/24/grey_box_method.php">grey box method</a>.</p>
							</div>
						</div>
					</div>
				</div>
				<div class="box">
					<h2>
						<a href="#" id="toggle-blockquote">Blockquote</a>
					</h2>
					<div class="block" id="blockquote">
						<blockquote>
							<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p>
							<p class="cite">
								<cite>John Smith</cite>
							</p>
						</blockquote>
					</div>
				</div>
				<div class="box">
					<h2>
						<a href="#" id="toggle-tables">Tables</a>
					</h2>
					<div class="block" id="tables">
						<table>
							<tr>
								<th>Lorem ipsum</th>
								<td>Dolor sit</td>
								<td class="currency">$125.00</td>
							</tr>
							<tr>
								<th>Dolor sit</th>
								<td>Nostrud exerci</td>
								<td class="currency">$75.00</td>
							</tr>
							<tr>
								<th>Nostrud exerci</th>
								<td>Lorem ipsum</td>
								<td class="currency">$200.00</td>
							</tr>
							<tr>
								<th>Lorem ipsum</th>
								<td>Dolor sit</td>
								<td class="currency">$64.00</td>
							</tr>
							<tr>
								<th>Dolor sit</th>
								<td>Nostrud exerci</td>
								<td class="currency">$36.00</td>
							</tr>
						</table>
						<table summary="This table includes examples of as many table elements as possible">
							<caption>An example table</caption>
							<colgroup>
								<col class="colA" />
								<col class="colB" />
								<col class="colC" />
							</colgroup>
							<thead>
								<tr>
									<th colspan="3" class="table-head">Table heading</th>
								</tr>
								<tr>
									<th>Column 1</th>
									<th>Column 2</th>
									<th class="currency">Column 3</th>
								</tr>
							</thead>
							<tfoot>
								<tr>
									<th>Subtotal</th>
									<td></td>
									<th class="currency">$500.00</th>
								</tr>
								<tr class="total">
									<th>Total</th>
									<td></td>
									<th class="currency">$500.00</th>
								</tr>
							</tfoot>
							<tbody>
								<tr class="odd">
									<th>Lorem ipsum</th>
									<td>Dolor sit</td>
									<td class="currency">$125.00</td>
								</tr>
								<tr>
									<th>Dolor sit</th>
									<td>Nostrud exerci</td>
									<td class="currency">$75.00</td>
								</tr>
								<tr class="odd">
									<th>Nostrud exerci</th>
									<td>Lorem ipsum</td>
									<td class="currency">$200.00</td>
								</tr>
								<tr>
									<th>Lorem ipsum</th>
									<td>Dolor sit</td>
									<td class="currency">$64.00</td>
								</tr>
								<tr class="odd">
									<th>Dolor sit</th>
									<td>Nostrud exerci</td>
									<td class="currency">$36.00</td>
								</tr>
							</tbody>
						</table>
					</div>
				</div>
				
				</div>
			</div>
			<div class="grid_5">
				<div class="box">
					<h2>
						<a href="#" id="toggle-search">Search</a>
					</h2>
					<div class="block" id="search">
						<form method="get" action="" class="search">
							<p>
								<input class="search text" name="value" type="text" />
								<input class="search button" value="Search" type="submit" />
							</p>
						</form>
					</div>
				</div>
				<div class="box">
					<h2>
						<a href="#" id="toggle-login-forms">Login Forms</a>
					</h2>
					<div class="block" id="login-forms">
						<form action="">
							<fieldset class="login">
								<legend>Login</legend>
								<p class="notice">Login to complete your purchase.</p>
								<p>
									<label>Username: </label>
									<input type="text" name="username" />
								</p>
								<p>
									<label>Password: </label>
									<input type="password" name="password" />
								</p>
								<input class="login button" type="submit" value="Login" />
							</fieldset>
						</form>
						<form action="">
							<fieldset>
								<legend>Register</legend>
								<p>If you do not already have an account, please create a new account to register.</p>
								<input type="submit" value="Create Account" />
							</fieldset>
						</form>
					</div>
				</div>
				<div class="box articles">
					<h2>
						<a href="#" id="toggle-articles">Articles</a>
					</h2>
					<div class="block" id="articles">
						<div class="first article">
							<h3>
								<a href="#">Article Heading</a>
							</h3>
							<h4>Subheading</h4>
							<p class="meta">Vancouver, BC — Wednesday, 23 April 2008</p>
							<a href="#" class="image">
								<img src="img/photo_60x60.jpg" width="60" height="60" alt="photo" />
							</a>
							<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. <a href="#">Visit site.</a></p>
						</div>
						<div class="article">
							<h3>
								<a href="#">Article Heading</a>
							</h3>
							<h4>Subheading</h4>
							<p class="meta">Vancouver, BC — Wednesday, 23 April 2008</p>
							<a href="#" class="image">
								<img src="img/photo_60x60.jpg" width="60" height="60" alt="photo" />
							</a>
							<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. <a href="#">Visit site.</a></p>
						</div>
						<div class="article">
							<h1>Heading 1</h1>
							<h2>Heading 2</h2>
							<h3>Heading 3</h3>
							<h4>Heading 4</h4>
							<p class="meta">Vancouver, BC — Wednesday, 23 April 2008</p>
							<a href="#" class="image">
								<img src="img/photo_60x60.jpg" width="60" height="60" alt="photo" />
							</a>
							<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. <a href="#">Visit site.</a></p>
							<h5>Heading 5</h5>
							<p>Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.</p>
							<h6>Heading 6</h6>
							<p>Epsum factorial non deposit quid pro quo hic escorol. Olypian quarrels et gorilla congolium sic ad nauseum. Souvlaki ignitus carborundum e pluribus unum.</p>
						</div>
					</div>
				</div>
			</div>
			<div class="clear"></div>
			<div class="grid_16" id="site_info">
				<div class="box">
					<p>Fluid 960 Grid System, created by <a href="http://www.domain7.com/WhoWeAre/StephenBau.html">Stephen Bau</a>, based on the <a href="http://960.gs/">960 Grid System</a> by <a href="http://sonspring.com/journal/960-grid-system">Nathan Smith</a>. Released under the 
		<a href="licenses/GPL_license.txt">GPL</a> / <a href="licenses/MIT_license.txt">MIT</a> <a href="README.txt">Licenses</a>.</p>
				</div>
			</div>
			<div class="clear"></div>
		</div>
</html>
Background: #f7f6f3
Foreground: #222222
PrimaryPale: #6e7580
PrimaryLight:  #7d8faa
PrimaryMid: #29364b
PrimaryDark: #fcaafa
SecondaryPale: #47576f
SecondaryLight: #c4ccd8
SecondaryMid: #abb3c0
SecondaryDark: #8993a2
TertiaryPale: #f2f2f2
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/***
|''Name:''|ForEachTiddlerPlugin|
|''Version:''|1.0.8 (2007-04-12)|
|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|&copy; 2005-2007 [[abego Software|http://www.abego-software.de]]|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
!Description

Create customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.

''Syntax:'' 
|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|
|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|
|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and  {{{context}}}.|
|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and  {{{context}}}.|
|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|
|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]]  is used.|
|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|

See details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].

!Revision history
* v1.0.8 (2007-04-12)
** Adapted to latest TiddlyWiki 2.2 Beta importTiddlyWiki API (introduced with changeset 2004). TiddlyWiki 2.2 Beta builds prior to changeset 2004 are no longer supported (but TiddlyWiki 2.1 and earlier, of cause)
* v1.0.7 (2007-03-28)
** Also support "pre" formatted TiddlyWikis (introduced with TW 2.2) (when using "in" clause to work on external tiddlers)
* v1.0.6 (2006-09-16)
** Context provides "viewerTiddler", i.e. the tiddler used to view the macro. Most times this is equal to the "inTiddler", but when using the "tiddler" macro both may be different.
** Support "begin", "end" and "none" expressions in "write" action
* v1.0.5 (2006-02-05)
** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.
** Support Firefox 1.5.0.1
** Internal
*** Make "JSLint" conform
*** "Only install once"
* v1.0.4 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.3 (2005-12-22)
** Features: 
*** Write output to a file supports multi-byte environments (Thanks to Bram Chen) 
*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)
** Enhancements:
*** Improved error messages on InternetExplorer.
* v1.0.2 (2005-12-10)
** Features: 
*** context object also holds reference to store (TiddlyWiki)
** Fixed Bugs: 
*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)
* v1.0.1 (2005-12-08)
** Features: 
*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".
*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.
*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).
*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .
*** Improved script evaluation (for where/sort clause and write scripts).
* v1.0.0 (2005-11-20)
** initial version

!Code
***/
//{{{

	
//============================================================================
//============================================================================
//		   ForEachTiddlerPlugin
//============================================================================
//============================================================================

// Only install once
if (!version.extensions.ForEachTiddlerPlugin) {

if (!window.abego) window.abego = {};

version.extensions.ForEachTiddlerPlugin = {
	major: 1, minor: 0, revision: 8, 
	date: new Date(2007,3,12), 
	source: "http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin",
	licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",
	copyright: "Copyright (c) abego Software GmbH, 2005-2007 (www.abego-software.de)"
};

// For backward compatibility with TW 1.2.x
//
if (!TiddlyWiki.prototype.forEachTiddler) {
	TiddlyWiki.prototype.forEachTiddler = function(callback) {
		for(var t in this.tiddlers) {
			callback.call(this,t,this.tiddlers[t]);
		}
	};
}

//============================================================================
// forEachTiddler Macro
//============================================================================

version.extensions.forEachTiddler = {
	major: 1, minor: 0, revision: 8, date: new Date(2007,3,12), provider: "http://tiddlywiki.abego-software.de"};

// ---------------------------------------------------------------------------
// Configurations and constants 
// ---------------------------------------------------------------------------

config.macros.forEachTiddler = {
	 // Standard Properties
	 label: "forEachTiddler",
	 prompt: "Perform actions on a (sorted) selection of tiddlers",

	 // actions
	 actions: {
		 addToList: {},
		 write: {}
	 }
};

// ---------------------------------------------------------------------------
//  The forEachTiddler Macro Handler 
// ---------------------------------------------------------------------------

config.macros.forEachTiddler.getContainingTiddler = function(e) {
	while(e && !hasClass(e,"tiddler"))
		e = e.parentNode;
	var title = e ? e.getAttribute("tiddler") : null; 
	return title ? store.getTiddler(title) : null;
};

config.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
	// config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);

	if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);
	// --- Parsing ------------------------------------------

	var i = 0; // index running over the params
	// Parse the "in" clause
	var tiddlyWikiPath = undefined;
	if ((i < params.length) && params[i] == "in") {
		i++;
		if (i >= params.length) {
			this.handleError(place, "TiddlyWiki path expected behind 'in'.");
			return;
		}
		tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the where clause
	var whereClause ="true";
	if ((i < params.length) && params[i] == "where") {
		i++;
		whereClause = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the sort stuff
	var sortClause = null;
	var sortAscending = true; 
	if ((i < params.length) && params[i] == "sortBy") {
		i++;
		if (i >= params.length) {
			this.handleError(place, "sortClause missing behind 'sortBy'.");
			return;
		}
		sortClause = this.paramEncode(params[i]);
		i++;

		if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {
			 sortAscending = params[i] == "ascending";
			 i++;
		}
	}

	// Parse the script
	var scriptText = null;
	if ((i < params.length) && params[i] == "script") {
		i++;
		scriptText = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the action. 
	// When we are already at the end use the default action
	var actionName = "addToList";
	if (i < params.length) {
	   if (!config.macros.forEachTiddler.actions[params[i]]) {
			this.handleError(place, "Unknown action '"+params[i]+"'.");
			return;
		} else {
			actionName = params[i]; 
			i++;
		}
	} 
	
	// Get the action parameter
	// (the parsing is done inside the individual action implementation.)
	var actionParameter = params.slice(i);


	// --- Processing ------------------------------------------
	try {
		this.performMacro({
				place: place, 
				inTiddler: tiddler,
				whereClause: whereClause, 
				sortClause: sortClause, 
				sortAscending: sortAscending, 
				actionName: actionName, 
				actionParameter: actionParameter, 
				scriptText: scriptText, 
				tiddlyWikiPath: tiddlyWikiPath});

	} catch (e) {
		this.handleError(place, e);
	}
};

// Returns an object with properties "tiddlers" and "context".
// tiddlers holds the (sorted) tiddlers selected by the parameter,
// context the context of the execution of the macro.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {

	var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);

	var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;
	context["tiddlyWiki"] = tiddlyWiki;
	
	// Get the tiddlers, as defined by the whereClause
	var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);
	context["tiddlers"] = tiddlers;

	// Sort the tiddlers, when sorting is required.
	if (parameter.sortClause) {
		this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);
	}

	return {tiddlers: tiddlers, context: context};
};

// Returns the (sorted) tiddlers selected by the parameter.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlers = function(parameter) {
	return this.getTiddlersAndContext(parameter).tiddlers;
};

// Performs the macros with the given parameter.
//
// @param parameter holds the parameter of the macro as separate properties.
//				  The following properties are supported:
//
//						place
//						whereClause
//						sortClause
//						sortAscending
//						actionName
//						actionParameter
//						scriptText
//						tiddlyWikiPath
//
//					All properties are optional. 
//					For most actions the place property must be defined.
//
config.macros.forEachTiddler.performMacro = function(parameter) {
	var tiddlersAndContext = this.getTiddlersAndContext(parameter);

	// Perform the action
	var actionName = parameter.actionName ? parameter.actionName : "addToList";
	var action = config.macros.forEachTiddler.actions[actionName];
	if (!action) {
		this.handleError(parameter.place, "Unknown action '"+actionName+"'.");
		return;
	}

	var actionHandler = action.handler;
	actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);
};

// ---------------------------------------------------------------------------
//  The actions 
// ---------------------------------------------------------------------------

// Internal.
//
// --- The addToList Action -----------------------------------------------
//
config.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {
	// Parse the parameter
	var p = 0;

	// Check for extra parameters
	if (parameter.length > p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);
		return;
	}

	// Perform the action.
	var list = document.createElement("ul");
	place.appendChild(list);
	for (var i = 0; i < tiddlers.length; i++) {
		var tiddler = tiddlers[i];
		var listItem = document.createElement("li");
		list.appendChild(listItem);
		createTiddlyLink(listItem, tiddler.title, true);
	}
};

abego.parseNamedParameter = function(name, parameter, i) {
	var beginExpression = null;
	if ((i < parameter.length) && parameter[i] == name) {
		i++;
		if (i >= parameter.length) {
			throw "Missing text behind '%0'".format([name]);
		}
		
		return config.macros.forEachTiddler.paramEncode(parameter[i]);
	}
	return null;
}

// Internal.
//
// --- The write Action ---------------------------------------------------
//
config.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {
	// Parse the parameter
	var p = 0;
	if (p >= parameter.length) {
		this.handleError(place, "Missing expression behind 'write'.");
		return;
	}

	var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);
	p++;

	// Parse the "begin" option
	var beginExpression = abego.parseNamedParameter("begin", parameter, p);
	if (beginExpression !== null) 
		p += 2;
	var endExpression = abego.parseNamedParameter("end", parameter, p);
	if (endExpression !== null) 
		p += 2;
	var noneExpression = abego.parseNamedParameter("none", parameter, p);
	if (noneExpression !== null) 
		p += 2;

	// Parse the "toFile" option
	var filename = null;
	var lineSeparator = undefined;
	if ((p < parameter.length) && parameter[p] == "toFile") {
		p++;
		if (p >= parameter.length) {
			this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");
			return;
		}
		
		filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));
		p++;
		if ((p < parameter.length) && parameter[p] == "withLineSeparator") {
			p++;
			if (p >= parameter.length) {
				this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");
				return;
			}
			lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);
			p++;
		}
	}
	
	// Check for extra parameters
	if (parameter.length > p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);
		return;
	}

	// Perform the action.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);
	var count = tiddlers.length;
	var text = "";
	if (count > 0 && beginExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(beginExpression, context)(undefined, context, count, undefined);
	
	for (var i = 0; i < count; i++) {
		var tiddler = tiddlers[i];
		text += func(tiddler, context, count, i);
	}
	
	if (count > 0 && endExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(endExpression, context)(undefined, context, count, undefined);

	if (count == 0 && noneExpression) 
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(noneExpression, context)(undefined, context, count, undefined);
		

	if (filename) {
		if (lineSeparator !== undefined) {
			lineSeparator = lineSeparator.replace(/\\n/mg, "\n").replace(/\\r/mg, "\r");
			text = text.replace(/\n/mg,lineSeparator);
		}
		saveFile(filename, convertUnicodeToUTF8(text));
	} else {
		var wrapper = createTiddlyElement(place, "span");
		wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);
	}
};


// ---------------------------------------------------------------------------
//  Helpers
// ---------------------------------------------------------------------------

// Internal.
//
config.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {
	return {
		place : placeParam, 
		whereClause : whereClauseParam, 
		sortClause : sortClauseParam, 
		sortAscending : sortAscendingParam, 
		script : scriptText,
		actionName : actionNameParam, 
		actionParameter : actionParameterParam,
		tiddlyWikiPath : tiddlyWikiPathParam,
		inTiddler : inTiddlerParam, // the tiddler containing the <<forEachTiddler ...>> macro call.
		viewerTiddler : config.macros.forEachTiddler.getContainingTiddler(placeParam) // the tiddler showing the forEachTiddler result
	};
};

// Internal.
//
// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of 
// the given path.
//
config.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {
	if (!idPrefix) {
		idPrefix = "store";
	}
	var lenPrefix = idPrefix.length;
	
	// Read the content of the given file
	var content = loadFile(this.getLocalPath(path));
	if(content === null) {
		throw "TiddlyWiki '"+path+"' not found.";
	}
	
	var tiddlyWiki = new TiddlyWiki();

	// Starting with TW 2.2 there is a helper function to import the tiddlers
	if (tiddlyWiki.importTiddlyWiki) {
		if (!tiddlyWiki.importTiddlyWiki(content))
			throw "File '"+path+"' is not a TiddlyWiki.";
		tiddlyWiki.dirty = false;
		return tiddlyWiki;
	}
	
	// The legacy code, for TW < 2.2
	
	// Locate the storeArea div's
	var posOpeningDiv = content.indexOf(startSaveArea);
	var posClosingDiv = content.lastIndexOf(endSaveArea);
	if((posOpeningDiv == -1) || (posClosingDiv == -1)) {
		throw "File '"+path+"' is not a TiddlyWiki.";
	}
	var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);
	
	// Create a "div" element that contains the storage text
	var myStorageDiv = document.createElement("div");
	myStorageDiv.innerHTML = storageText;
	myStorageDiv.normalize();
	
	// Create all tiddlers in a new TiddlyWiki
	// (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)
	var store = myStorageDiv.childNodes;
	for(var t = 0; t < store.length; t++) {
		var e = store[t];
		var title = null;
		if(e.getAttribute)
			title = e.getAttribute("tiddler");
		if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)
			title = e.id.substr(lenPrefix);
		if(title && title !== "") {
			var tiddler = tiddlyWiki.createTiddler(title);
			tiddler.loadFromDiv(e,title);
		}
	}
	tiddlyWiki.dirty = false;

	return tiddlyWiki;
};


	
// Internal.
//
// Returns a function that has a function body returning the given javaScriptExpression.
// The function has the parameters:
// 
//	 (tiddler, context, count, index)
//
config.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {
	var script = context["script"];
	var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";
	var fullText = (script ? script+";" : "")+functionText+";theFunction;";
	return eval(fullText);
};

// Internal.
//
config.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {
	var result = [];
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);
	tiddlyWiki.forEachTiddler(function(title,tiddler) {
		if (func(tiddler, context, undefined, undefined)) {
			result.push(tiddler);
		}
	});
	return result;
};

// Internal.
//
config.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {
	var message = "Extra parameter behind '"+actionName+"':";
	for (var i = firstUnusedIndex; i < parameter.length; i++) {
		message += " "+parameter[i];
	}
	this.handleError(place, message);
};

// Internal.
//
config.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {
	var result = 
		(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) 
			? 0
			: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
			   ? -1 
			   : +1; 
	return result;
};

// Internal.
//
config.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {
	var result = 
		(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) 
			? 0
			: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
			   ? +1 
			   : -1; 
	return result;
};

// Internal.
//
config.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {
	// To avoid evaluating the sortClause whenever two items are compared 
	// we pre-calculate the sortValue for every item in the array and store it in a 
	// temporary property ("forEachTiddlerSortValue") of the tiddlers.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);
	var count = tiddlers.length;
	var i;
	for (i = 0; i < count; i++) {
		var tiddler = tiddlers[i];
		tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);
	}

	// Do the sorting
	tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);

	// Delete the temporary property that holds the sortValue.	
	for (i = 0; i < tiddlers.length; i++) {
		delete tiddlers[i].forEachTiddlerSortValue;
	}
};


// Internal.
//
config.macros.forEachTiddler.trace = function(message) {
	displayMessage(message);
};

// Internal.
//
config.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {
	var message ="<<"+macroName;
	for (var i = 0; i < params.length; i++) {
		message += " "+params[i];
	}
	message += ">>";
	displayMessage(message);
};


// Internal.
//
// Creates an element that holds an error message
// 
config.macros.forEachTiddler.createErrorElement = function(place, exception) {
	var message = (exception.description) ? exception.description : exception.toString();
	return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);
};

// Internal.
//
// @param place [may be null]
//
config.macros.forEachTiddler.handleError = function(place, exception) {
	if (place) {
		this.createErrorElement(place, exception);
	} else {
		throw exception;
	}
};

// Internal.
//
// Encodes the given string.
//
// Replaces 
//	 "$))" to ">>"
//	 "$)" to ">"
//
config.macros.forEachTiddler.paramEncode = function(s) {
	var reGTGT = new RegExp("\\$\\)\\)","mg");
	var reGT = new RegExp("\\$\\)","mg");
	return s.replace(reGTGT, ">>").replace(reGT, ">");
};

// Internal.
//
// Returns the given original path (that is a file path, starting with "file:")
// as a path to a local file, in the systems native file format.
//
// Location information in the originalPath (i.e. the "#" and stuff following)
// is stripped.
// 
config.macros.forEachTiddler.getLocalPath = function(originalPath) {
	// Remove any location part of the URL
	var hashPos = originalPath.indexOf("#");
	if(hashPos != -1)
		originalPath = originalPath.substr(0,hashPos);
	// Convert to a native file format assuming
	// "file:///x:/path/path/path..." - pc local file --> "x:\path\path\path..."
	// "file://///server/share/path/path/path..." - FireFox pc network file --> "\\server\share\path\path\path..."
	// "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."
	// "file://server/share/path/path/path..." - pc network file --> "\\server\share\path\path\path..."
	var localPath;
	if(originalPath.charAt(9) == ":") // pc local file
		localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\\");
	else if(originalPath.indexOf("file://///") === 0) // FireFox pc network file
		localPath = "\\\\" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\\");
	else if(originalPath.indexOf("file:///") === 0) // mac/unix local file
		localPath = unescape(originalPath.substr(7));
	else if(originalPath.indexOf("file:/") === 0) // mac/unix local file
		localPath = unescape(originalPath.substr(5));
	else // pc network file
		localPath = "\\\\" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\\");	
	return localPath;
};

// ---------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// ---------------------------------------------------------------------------
//
setStylesheet(
	".forEachTiddlerError{color: #ffffff;background-color: #880000;}",
	"forEachTiddler");

//============================================================================
// End of forEachTiddler Macro
//============================================================================


//============================================================================
// String.startsWith Function
//============================================================================
//
// Returns true if the string starts with the given prefix, false otherwise.
//
version.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.startsWith = function(prefix) {
	var n =  prefix.length;
	return (this.length >= n) && (this.slice(0, n) == prefix);
};



//============================================================================
// String.endsWith Function
//============================================================================
//
// Returns true if the string ends with the given suffix, false otherwise.
//
version.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.endsWith = function(suffix) {
	var n = suffix.length;
	return (this.length >= n) && (this.right(n) == suffix);
};


//============================================================================
// String.contains Function
//============================================================================
//
// Returns true when the string contains the given substring, false otherwise.
//
version.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.contains = function(substring) {
	return this.indexOf(substring) >= 0;
};

//============================================================================
// Array.indexOf Function
//============================================================================
//
// Returns the index of the first occurance of the given item in the array or 
// -1 when no such item exists.
//
// @param item [may be null]
//
version.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.indexOf = function(item) {
	for (var i = 0; i < this.length; i++) {
		if (this[i] == item) {
			return i;
		}
	}
	return -1;
};

//============================================================================
// Array.contains Function
//============================================================================
//
// Returns true when the array contains the given item, otherwise false. 
//
// @param item [may be null]
//
version.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.contains = function(item) {
	return (this.indexOf(item) >= 0);
};

//============================================================================
// Array.containsAny Function
//============================================================================
//
// Returns true when the array contains at least one of the elements 
// of the item. Otherwise (or when items contains no elements) false is returned.
//
version.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAny = function(items) {
	for(var i = 0; i < items.length; i++) {
		if (this.contains(items[i])) {
			return true;
		}
	}
	return false;
};


//============================================================================
// Array.containsAll Function
//============================================================================
//
// Returns true when the array contains all the items, otherwise false.
// 
// When items is null false is returned (even if the array contains a null).
//
// @param items [may be null] 
//
version.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAll = function(items) {
	for(var i = 0; i < items.length; i++) {
		if (!this.contains(items[i])) {
			return false;
		}
	}
	return true;
};


} // of "install only once"

// Used Globals (for JSLint) ==============
// ... DOM
/*global 	document */
// ... TiddlyWiki Core
/*global 	convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink, 
			displayMessage, endSaveArea, hasClass, loadFile, saveFile, 
			startSaveArea, store, wikify */
//}}}


/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.

Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
***/
|Name|FrenchTouch|
|Description|French Theme |
|PageTemplate|##PageTemplate|
|ViewTemplate|##ViewTemplate|
|EditTemplate|##EditTemplate|
|StyleSheet|##StyleSheet|

!PageTemplate
<!--{{{-->
<div class="container_16">
			<div class="clear"></div>
			<div class="fixation">
				<div class="grid_3" id='SiteTitle' refresh='content' tiddler='SiteTitle'></div>
				<br \><br \><div class='grid_13' refresh='content' tiddler='SiteSubtitle'></div>
			</div>
			<div class="clear"></div>
                        <div id="mainMMenu" display: block; top:5em;>
			<div class="grid_3">
				<div class="box">
					<h2>Menu</h2>
					<div class="block">
					    <p  refresh='content' tiddler='MainMenu'></p>
					  </div>
				</div>
			</div>
			</div>
			<div id="displayAArea"  top:5em;>
			<div class="grid_10">
				<div class="box">
					<h2 refresh='content' tiddler='TopMenu'></h2>
					<div id='messageArea'></div>
					<div id='tiddlerDisplay'></div>
				</div>
			</div>	
			</div>
			<div id="sidebbar" top:5em;>
			<div class="grid_3">
				<div class="box">
					<h2>Sidebar</h2>
					<div class="block">
					<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
					<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
					</div>
				</div>
				</div>
			</div>
			<div class="clear"></div>
</div>

<!--}}}-->


!ViewTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'><span macro="tTag tag:star mode:text text:★"></span></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>
<!--}}}-->


!EditTemplate
<!--{{{-->
<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>
<div class='editor' macro='edit alias'></div><div class='editorFooter'><span macro='message abegoTiddlerAlias.lingo.aliasPrompt'></span></div>
<!--}}}-->


!StyleSheet
/*{{{*/
/*Monochrome Theme for TiddlyWiki*/
/*Design and CSS by Saq Imtiaz*/
/*Updated by Jean-Bernard François*/
/*Version 1.0fr*/

/*}}}*/

/*{{{*/

[[SigletColors]]
#topMenu br {display:none;}
#topMenu a, #topMenu .tiddlyLink, #topMenu .button {margin:0em; color:[[ColorPalette::SecondaryMid]]; border:none; border-right: 1px solid [[ColorPalette::PrimaryDark]];float:left;}
#topMenu {border-left: 1px solid [[ColorPalette::SecondaryMid]]; }
#topMenu a:hover {color:[[ColorPalette::PrimaryLight]]; background:[[ColorPalette::PrimaryMid]];}


.tiddler:hover {background:[[ColorPalette::PrimaryPale]]; margin-top:1em;margin-bottom:1em; padding:1em 2em 1em 2em;}
.tiddler {background:[[ColorPalette::TertiaryPale]];  margin-top:1em;margin-bottom:1em; padding:1em 2em 1em 2em; border: 1px solid [[ColorPalette::TertiaryDark]] }


a{
color:[[ColorPalette::TertiaryDark]];
text-decoration: none; background:transparent;
}a:hover {color:[[ColorPalette::SecondaryPale]]; background:[[ColorPalette::Background]];}

.viewer a, .viewer a:hover{border-bottom:1px dotted color:[[ColorPalette::PrimaryPale]]; }

.viewer .button, .editorFooter .button{
color: [[ColorPalette::Foreground]];
border: 1px solid [[ColorPalette::TertiaryDark]];
}

.viewer .button:hover,
.editorFooter .button:hover, .viewer .button:active, .viewer .highlight,.editorFooter .button:active, .editorFooter .highlight{ color: [[ColorPalette::PrimaryLight]];
background: [[ColorPalette::PrimaryDark]];
border-color: [[ColorPalette::SecondaryDark]];
}

.title {color:[[ColorPalette::PrimaryLight]]; font-family:'Lucida Grande', Verdana, Sans-Serif; font-size:2.0em;
}

.subtitle, .subtitle a { color: [[ColorPalette::SecondaryPale]]; font-size: 1em;margin:0.2em;}
.shadow .title{color:[[ColorPalette::PrimaryDark]];}

.toolbar .button {border:1; border-color:[[ColorPalette::PrimaryLight]];}
.selected .toolbar a {color:[[ColorPalette::PrimaryLight]];border:1;}
.selected .toolbar a:hover {color:[[ColorPalette::SecondaryPale]]; background:[[ColorPalette::PrimaryPale]];border:1;}

.toolbar .button:hover, .toolbar .highlight, .toolbar .marked, .toolbar a.button:active{color:[[ColorPalette::PrimaryDark]]; background:transparent;border:1;}


.highlight, .marked {background:transparent; color:#888; border:none; text-decoration:underline;}

.tagging .button:hover, .tagged .button:hover, .tagging .button:active, .tagged .button:active {
border: none; background:[[ColorPalette::SecondaryDark]]; text-decoration:none; color:[[ColorPalette::SecondaryPale]];
}



.popup {
background: [[ColorPalette::Background]];
border: 1px solid [[ColorPalette::Background]];
}

.popup li.disabled {
color: [[ColorPalette::Foreground]];
}

.popup li a, .popup li a:visited {
color: [[ColorPalette::PrimaryDark]];
border: none;
}

.popup li a:hover {
background: [[ColorPalette::TertiaryLight]];
color: [[ColorPalette::TertiaryDark]];
border: none;
}
.popup hr {
	color: [[ColorPalette::TertiaryLight]];
	background: [[ColorPalette::TertiaryDark]];
	border-bottom: 1px;
}

.listBreak div{
	border-bottom: 1px solid [[ColorPalette::PrimaryDark]];
}

#messageArea {
border: 1px plain [[ColorPalette::TertiaryLight]];
background: [[ColorPalette::PrimaryDark]];
color: [[ColorPalette::PrimaryLight]];
font-size:90%;
}

#messageArea .button{

color: [[ColorPalette::PrimaryLight]];
background:[[ColorPalette::TertiaryLight]];
border: 1px solid[[ColorPalette::TertiaryLight]];
}

#messageArea .button:hover {

color: [[ColorPalette::PrimaryLight]];
background: [[ColorPalette::Background]];
border-color: [[ColorPalette::Background]];
}

.viewer blockquote {
border-left: 5px solid 	[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]]
}

.viewer table, .viewer td {
border: 1px solid 	[[ColorPalette::PrimaryLight]];
}

.viewer th, thead td {
background: [[ColorPalette::Background]];
border: 1px solid [[ColorPalette::Background]];
color: [[ColorPalette::SecondaryPale]];
}
.viewer pre {
border: 1px solid [[ColorPalette::Background]];
background: [[ColorPalette::SecondaryLight]];
}

.viewer code {
color: [[ColorPalette::TertiaryLight]]; background:[[ColorPalette::Foreground]];
}

.viewer hr {
border-top: dashed 1px [[ColorPalette::Background]]; margin:0 1em;
}

.editor input {
border: 1px solid [[ColorPalette::TertiaryLight]]; margin-top:5px;
}

.editor textarea {
border: 1px solid [[ColorPalette::TertiaryDark]];
}


.button.on {border-style:none;background:[[ColorPalette::TertiaryDark]];color:[[ColorPalette::TertiaryLight]];}
.button.off {border-style:none;background:#444;color:[[ColorPalette::TertiaryDark]];}
#realmSelector .button.on {margin:0 0.5em;padding:0 1em;border:2px solid [[ColorPalette::TertiaryLight]];background:[[ColorPalette::TertiaryDark]];color:#333;}
#realmSelector .button.off {margin:0 0.5em;padding:0 1em;border:2px solid #999;background:#999;color:[[ColorPalette::TertiaryLight]];}


/*}}}*/


/* http://meyerweb.com/eric/tools/css/reset/ */
/* v1.0 | 20080212 */

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
	margin: 0;
	padding: 0;
	border: 0;
	outline: 0;
	font-size: 100%;
	vertical-align: baseline;
	background: transparent;
}
body {
	line-height: 1;
}
ol, ul {
	list-style: none;
}
blockquote, q {
	quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
	content: '';
	content: none;
}

/* remember to define focus styles! */
:focus {
	outline: 0;
}

/* remember to highlight inserts somehow! */
ins {
	text-decoration: none;
}
del {
	text-decoration: line-through;
}

/* tables still need 'cellspacing="0"' in the markup */
table {
	border-collapse: collapse;
	border-spacing: 0;
}




/*
	960 Grid System ~ Text CSS.
	Learn more ~ http://960.gs/

	Licensed under GPL and MIT.
*/

/* =Basic HTML
--------------------------------------------------------------------------------*/

body
{
	font: 13px/1.5 Helvetica, Arial, 'Liberation Sans', FreeSans, sans-serif;
}

a:focus
{
	outline: 1px dotted invert;
}

hr
{
	border-color: [[ColorPalette::SecondaryDark]];
	border-style: solid;
	border-width: 1px 0 0;
	clear: both;
	height: 0;
}

/* =Headings
--------------------------------------------------------------------------------*/

h1
{
	font-size: 25px;
}

h2
{
	font-size: 23px;
}

h3
{
	font-size: 21px;
}

h4
{
	font-size: 19px;
}

h5
{
	font-size: 17px;
}

h6
{
	font-size: 15px;
}

/* =Spacing
--------------------------------------------------------------------------------*/

ol
{
	list-style: decimal;
}

ul
{
	list-style: square;
}

li
{
	margin-left: 30px;
}

p,
dl,
hr,
h1,
h2,
h3,
h4,
h5,
h6,
ol,
ul,
pre,
table,
address,
fieldset
{
	margin-bottom: 20px;
}



/*
	960 Grid System ~ Core CSS.
	Learn more ~ http://960.gs/

	Licensed under GPL and MIT.
*/

/* =Containers
--------------------------------------------------------------------------------*/

.container_12,
.container_16
{
	width: 96%;
	margin-left: 3%;
	margin-right: 3%;
	opacity:0.90;
}

/* =Grid >> Global
--------------------------------------------------------------------------------*/

.grid_1,
.grid_2,
.grid_3,
.grid_4,
.grid_5,
.grid_6,
.grid_7,
.grid_8,
.grid_9,
.grid_10,
.grid_11,
.grid_12,
.grid_13,
.grid_14,
.grid_15,
.grid_16
{
	display: inline;
	float: left;
	margin-left: 1%;
	margin-right: 1%;
}

.container_12 .grid_3,
.container_16 .grid_4
{
	width: 23%;
}

.container_12 .grid_6,
.container_16 .grid_8
{
	width: 48%;
}

.container_12 .grid_9,
.container_16 .grid_12
{
	width: 73%;
}

.container_12 .grid_12,
.container_16 .grid_16
{
	width: 98%;
}

/* =Grid >> Children (Alpha ~ First, Omega ~ Last)
--------------------------------------------------------------------------------*/

.alpha
{
	margin-left: 0;
}

.omega
{
	margin-right: 0;
}

/* =Grid >> 12 Columns
--------------------------------------------------------------------------------*/

.container_12 .grid_1
{
	width: 6.333%;
}

.container_12 .grid_2
{
	width: 14.666%;
}

.container_12 .grid_4
{
	width: 31.333%;
}

.container_12 .grid_5
{
	width: 39.666%;
}

.container_12 .grid_7
{
	width: 56.333%;
}

.container_12 .grid_8
{
	width: 64.666%;
}

.container_12 .grid_10
{
	width: 81.333%;
}

.container_12 .grid_11
{
	width: 89.666%;
}

/* =Grid >> 16 Columns
--------------------------------------------------------------------------------*/

.container_16 .grid_1
{
	width: 4.25%;
}

.container_16 .grid_2
{
	width: 10.5%;
}

.container_16 .grid_3
{
	width: 16.75%;
}

.container_16 .grid_5
{
	width: 29.25%;
}

.container_16 .grid_6
{
	width: 35.5%;
}

.container_16 .grid_7
{
	width: 41.75%;
}

.container_16 .grid_9
{
	width: 54.25%;
}

.container_16 .grid_10
{
	width: 60.5%;
}

.container_16 .grid_11
{
	width: 66.75%;
}

.container_16 .grid_13
{
	width: 79.25%;
}

.container_16 .grid_14
{
	width: 85.5%;
}

.container_16 .grid_15
{
	width: 91.75%;
}

/* =Prefix Extra Space >> Global
--------------------------------------------------------------------------------*/

.container_12 .prefix_3,
.container_16 .prefix_4
{
	padding-left: 25%;
}

.container_12 .prefix_6,
.container_16 .prefix_8
{
	padding-left: 50%;
}

.container_12 .prefix_9,
.container_16 .prefix_12
{
	padding-left: 75%;
}

/* =Prefix Extra Space >> 12 Columns
--------------------------------------------------------------------------------*/

.container_12 .prefix_1
{
	padding-left: 8.333%;
}

.container_12 .prefix_2
{
	padding-left: 16.666%;
}

.container_12 .prefix_4
{
	padding-left: 33.333%;
}

.container_12 .prefix_5
{
	padding-left: 41.666%;
}

.container_12 .prefix_7
{
	padding-left: 58.333%;
}

.container_12 .prefix_8
{
	padding-left: 66.666%;
}

.container_12 .prefix_10
{
	padding-left: 83.333%;
}

.container_12 .prefix_11
{
	padding-left: 91.666%;
}

/* =Prefix Extra Space >> 16 Columns
--------------------------------------------------------------------------------*/

.container_16 .prefix_1
{
	padding-left: 6.25%;
}

.container_16 .prefix_2
{
	padding-left: 12.5%;
}

.container_16 .prefix_3
{
	padding-left: 18.75%;
}

.container_16 .prefix_5
{
	padding-left: 31.25%;
}

.container_16 .prefix_6
{
	padding-left: 37.5%;
}

.container_16 .prefix_7
{
	padding-left: 43.75%;
}

.container_16 .prefix_9
{
	padding-left: 56.25%;
}

.container_16 .prefix_10
{
	padding-left: 62.5%;
}

.container_16 .prefix_11
{
	padding-left: 68.75%;
}

.container_16 .prefix_13
{
	padding-left: 81.25%;
}

.container_16 .prefix_14
{
	padding-left: 87.5%;
}

.container_16 .prefix_15
{
	padding-left: 93.75%;
}

/* =Suffix Extra Space >> Global
--------------------------------------------------------------------------------*/

.container_12 .suffix_3,
.container_16 .suffix_4
{
	padding-right: 25%;
}

.container_12 .suffix_6,
.container_16 .suffix_8
{
	padding-right: 50%;
}

.container_12 .suffix_9,
.container_16 .suffix_12
{
	padding-right: 75%;
}

/* =Suffix Extra Space >> 12 Columns
--------------------------------------------------------------------------------*/

.container_12 .suffix_1
{
	padding-right: 8.333%;
}

.container_12 .suffix_2
{
	padding-right: 16.666%;
}

.container_12 .suffix_4
{
	padding-right: 33.333%;
}

.container_12 .suffix_5
{
	padding-right: 41.666%;
}

.container_12 .suffix_7
{
	padding-right: 58.333%;
}

.container_12 .suffix_8
{
	padding-right: 66.666%;
}

.container_12 .suffix_10
{
	padding-right: 83.333%;
}

.container_12 .suffix_11
{
	padding-right: 91.666%;
}

/* =Suffix Extra Space >> 16 Columns
--------------------------------------------------------------------------------*/

.container_16 .suffix_1
{
	padding-right: 6.25%;
}

.container_16 .suffix_2
{
	padding-right: 16.5%;
}

.container_16 .suffix_3
{
	padding-right: 18.75%;
}

.container_16 .suffix_5
{
	padding-right: 31.25%;
}

.container_16 .suffix_6
{
	padding-right: 37.5%;
}

.container_16 .suffix_7
{
	padding-right: 43.75%;
}

.container_16 .suffix_9
{
	padding-right: 56.25%;
}

.container_16 .suffix_10
{
	padding-right: 62.5%;
}

.container_16 .suffix_11
{
	padding-right: 68.75%;
}

.container_16 .suffix_13
{
	padding-right: 81.25%;
}

.container_16 .suffix_14
{
	padding-right: 87.5%;
}

.container_16 .suffix_15
{
	padding-right: 93.75%;
}

/* =Clear Floated Elements
--------------------------------------------------------------------------------*/

/* http://sonspring.com/journal/clearing-floats */

html body * span.clear,
html body * div.clear,
html body * li.clear,
html body * dd.clear
{
	background: none;
	border: 0;
	clear: both;
	display: block;
	float: none;
	font-size: 0;
	list-style: none;
	margin: 0;
	padding: 0;
	overflow: hidden;
	visibility: hidden;
	width: 0;
	height: 0;
}

/* http://www.positioniseverything.net/easyclearing.html */

.clearfix:after
{
	clear: both;
	content: '.';
	display: block;
	visibility: hidden;
	height: 0;
}

.clearfix
{
	display: inline-block;
}

* html .clearfix
{
	height: 1%;
}

.clearfix
{
	display: block;
}




/*
-----------------------------------------------
Grey Box Method - Layout CSS
----------------------------------------------- */

body {
	background-image: url([[image]]);
	border-top: 5px solid #000;
	color: #333;
	font-size: 11px;
	padding: 0 0 40px;
}

/* anchors
----------------------------------------------- */
a {
	color: #000;
	font-weight:bold;
	text-decoration: none;
}
a:hover {
	color:#333;
}


/* 960 grid system container background
----------------------------------------------- */
.container_12,
.container_16 {
	background:[[FluidColor::Background]];
}


/* headings
----------------------------------------------- */
h1, h2, h3, h4, h5, h6 {line-height:1.2em; margin-bottom:.3em;}
h2 {margin-top:1em;}
h5 {font-size:1.2em;}
h6 {font-size:1em; text-transform:uppercase;}


h1 a {
	font-weight:normal;
}


/* branding
----------------------------------------------- */
h1#branding {
	font-weight:normal;
	font-size:3em;
	text-align:left;
	background:#aaa;
	padding:.7em 1em;
	margin-bottom:0;
}


/* page heading
----------------------------------------------- */
h2#page-heading {
	font-weight:normal;
	padding:.5em;
	margin:0 0 10px 0;
	border-bottom:1px solid #ccc;
}


/* boxes
----------------------------------------------- */
.box {
	background:#ddd;
	margin-bottom:20px;
	padding:10px 10px 1px 10px;
}
.box h2 {
	font-size:1em;
	font-weight:normal;
	text-transform:uppercase;
	color:[[FluidColor::Background]];
	background:[[FluidColor::Foreground]];
	margin:-10px -10px 0 -10px;
	padding:6px 12px;
}
.box h2 a ,
.box h2 a.visible {
	color:[[FluidColor::Background]];
	background:#333;
	font-size:0.8em;
	padding:6px 12px;
	border:none;
}
.box h2 p ,
.box h2 p.visible {
	background:#333 url("[img[switch_minus.gif]]") 97% 50% no-repeat;
}

.grid_4 .box h2 a {
	background-position: 97% 50%;
}
.grid_5 .box h2 a {
	background-position: 98% 50%;
}
.grid_12 .box h2 a {
	background-position: 99% 50%;
}


.box h2 a.hidden,
.box h2 a.hidden:hover {
	background-image: url("[img[switch_plus.gif]]");
}
.box h2 a:hover {
	background-color:#555;
}
.block {
	padding-top:10px;
}
div.menu {
	padding:0;
}
div.menu h2 {
	margin:0;
}
div.menu .block {
	padding-top:0;
}


/* paragraphs, quotes and lists
----------------------------------------------- */
p {
	margin-bottom:1em;
}
blockquote {
	font-family: Georgia, 'Times New Roman', serif;
	font-size:1.2em;
	padding-left:1em;
	border-left:4px solid #ccc;
}
blockquote cite {
	font-size:.9em;
}
ul, ol {
	padding-top:0;
}


/* menus
----------------------------------------------- */
ul.menu {
	list-style:none;
	border-top:1px solid #bbb;
}
ul.menu li {
	margin:0;
}
ul.menu li a {
	display:block;
	padding:4px 10px;
	border-bottom:1px solid #ccc;
}
ul.menu li a:hover {
	background:[[FluidColor::PrimaryDark]];
}
ul.menu li a:active {
	background:[[FluidColor::PrimaryDark]];
}


/* submenus
----------------------------------------------- */
ul.menu ul {
	list-style:none;
	margin:0;
}
ul.menu ul li a {
	padding-left:30px;
}


/* section menus
----------------------------------------------- */
ul.section {
	border-top:0;
	margin-bottom:0;
}
ul.section li {
	text-transform:uppercase;
}
ul.section li a {
	background:#aaa;
}
ul.section li a:hover {
	background:#999;
}
ul.section li a:active {
	color:[[FluidColor::Background]];
	background:#666;
}
ul.section li li a {
	background:#ccc;
	border-bottom:1px solid [[FluidColor::PrimaryPale]];
}
ul.section li li a:hover {
	background:#bbb;
}
ul.section li li a:active {
	color:[[FluidColor::Foreground]];
	background:[[FluidColor::Background]];
}
ul.section ul li {
	text-transform:none;
}
ul.section ul.current li a {
	background:[[FluidColor::PrimaryPale]];
	border-bottom:1px solid [[FluidColor::Background]];
}
ul.section ul.current li a:hover {
	background:#ddd;
}
ul.section ul.current li a:active {
	background:[[FluidColor::Background]];
}
ul.section li a.current {
	color:[[FluidColor::Background]];
	background:#666;
}
ul.section li a.current:hover {
	background:#555;
}
ul.section li a.current:active {
	background:#444;
}
ul.section li a.active {
	background:[[FluidColor::Background]];
	cursor:default;
}
ul.section li.current > a.active,
ul.section li.current > a.active:hover {
	color:[[FluidColor::Background]];
	background:#666;
	cursor:default;
}


/* table
----------------------------------------------- */
table {
	width:100%;
	border:1px solid #bbb;
	margin-bottom:10px;
}
col.colC {
	width:8em;
}
th, td {
	padding:.2em 1em;
	text-align:left;
}
thead th {
	border-bottom:2px solid #888;
	background:#aaa;
	padding:.4em 1em .2em;
}
thead th.table-head {
	font-size:1em;
	font-weight:normal;
	text-transform:uppercase;
	color:[[FluidColor::Background]];
	background:#555;
	border:1px solid #555;
}
tbody th,
tbody td {
	border-top:1px solid #bbb;
	border-bottom:1px solid #bbb;
	background:[[FluidColor::PrimaryPale]];
}
tbody tr.odd th,
tbody tr.odd td {
	background:[[FluidColor::Background]];
}
tfoot th,
tfoot td {
	border-top:2px solid #666;
	background:[[FluidColor::PrimaryPale]];
}
tfoot tr.total th,
tfoot tr.total td {
	border-top:6px double #666;
}
tfoot tr.total th {
	text-transform:uppercase;
}
th.currency,
td.currency {
	text-align:right;
}


/* forms
----------------------------------------------- */
form {
	overflow:hidden;
}
fieldset {
	border:1px solid #aaa;
	padding:10px;
	position:relative;
	background:#e9e9e9;
	margin-bottom:10px;
}
legend {
	font-size:1.1em;
	padding:.4em .8em;
	background:[[FluidColor::Background]];
	border:1px solid #aaa;
}
fieldset.login p {
	margin-bottom:1em;
	margin-top:0pt;
}
fieldset p label {
	width:98%;
}
fieldset p input {
	width:98%;
}
fieldset p select {
	width:99%;
}
fieldset.login p label {
	float:left;
	line-height:2em;
	margin-right:3%;
	text-align:right;
	width:32%;
}
fieldset.login p input {
	width:60%;
}
fieldset.login input.button {
	margin-left:35%;
}
form p.notice {
	font-weight:bold;
}
input.search.text {
	width:66%;
}
input.search.button {
	width:28%;
	margin-left:2%;
}


/* articles
----------------------------------------------- */
.articles {
	padding:0;
}
.articles h2 {
	margin:0;
}
#articles {
	padding-top:0;
}
.article {
	border-top:1px solid #666;
	padding-top:.5em;
}
.box .article {
	border-top:3px solid [[FluidColor::Background]];
	padding:13px 10px 0 10px;
}
.article h2 {
	font-size:2em;
	font-weight:normal;
	text-transform:none;
	color:#333;
	background:transparent;
	padding:0;
	margin:0;
	border:none;
}
.article h3 {
	margin-bottom:.2em;
	font-size:1.6em;
}
.box .first {
	border-top:none;
}
.article h4 {
	font-size:1.2em;
	text-transform:uppercase;
	margin-bottom:.5em;
}
.article a.image {
	float:left; 
	margin:3px 10px 3px 0; 
	padding:4px;
	border:1px solid #bbb;
	background:[[FluidColor::Background]];
}
.article a.image:hover {
	border:1px solid #666;
}
.article a.image img {
	float:left; 
}
.article p.meta {
	color:#666;
	border-top:1px dotted #999;
	border-bottom:1px dotted #999;
	padding:.3em 0;
	margin-bottom:.8em;
}


/* site information
----------------------------------------------- */
#site_info .box {
	color:#ccc;
	background:#666;
	margin-bottom:10px;
}
#site_info a {
	color:[[FluidColor::Background]];
}
#site_info a:hover {
	color:#000;
}


/* AJAX sliding shelf
----------------------------------------------- */
#loading {float:right; margin-right:14px; margin-top:-2px;}
.block {padding-bottom:1px;}


/* Accordian
----------------------------------------------- */
.toggler {
	color: #222;
	margin: 0;
	padding: 2px 5px;
	background: [[FluidColor::PrimaryPale]];
	border-bottom: 1px solid #ddd;
	border-right: 1px solid #ddd;
	border-top: 1px solid #f5f5f5;
	border-left: 1px solid #f5f5f5;
	font-size:1.1em;
	font-weight: normal;
}
.element h4 {
	margin: 0;
	padding:4px;
	line-height:1.2em;
}
.element p {
	margin: 0;
	padding: 4px;
}
.float-right {
	padding:10px 20px;
	float:right;
}

#accordian-block {
	padding-bottom:10px;
}


/* Mootools Kwicks
----------------------------------------------- */
#kwick-box { 
	padding:0;
	overflow:hidden;
}
#kwick-box h2 { 
	margin:0;
}
#kwick {
	position: relative;
}
#kwick .kwicks {
	display: block;
	background: #999;
	height: 120px;
	list-style:none;
	margin:0;
	overflow:hidden;
}
#kwick li {
	float: left;
	margin:0;
	padding:0;
}
#kwick .kwick {
	display: block;
	cursor: pointer;
	overflow: hidden;
	height: 100px;
	width: 215px;
	padding: 10px;
	background: [[FluidColor::Background]];
}
#kwick .kwick span {
	color:[[FluidColor::Background]];
}
#kwick .one {
	background: #666;
}
#kwick .two {
	background: #777;
}
#kwick .three {
	background: #888;
}
#kwick .four {
	background: #999;
}




/*
-----------------------------------------------
Navigation
----------------------------------------------- */

/* navigation (horizontal subnavigation)
----------------------------------------------- */
ul.nav,
ul.nav * { margin:0;padding:0;}
ul.nav {
  position:relative;
  background:#666;
  max-width:100%;
  height:2.5em;
  }
ul.nav li {
	cursor:pointer;
	float:left;
	text-align:center;
	list-style-type:none;
	font-weight:normal;
}
ul.nav li ul {
	cursor:default;
	width:100%;
	max-width:100%;
	position:absolute;
	height:auto;
	top:2.5em;
	background-position:0 0 !important;
	left:-9000px;
}
ul.nav li ul li {
	padding:0;
	border:none;
	width:auto;
	max-width:none;
}
ul.nav li a {
	color:[[FluidColor::Background]];
	background:[[FluidColor::PrimaryMid]];
	font-weight:bold;
	text-decoration:none;
	display:block;
	float:left;
	padding:0 1em;
	height:2.4em;
	line-height:2.5em;
}
ul.nav li ul li a {
	position:relative !important; /* ie Mac */
	cursor:pointer !important;
	white-space:nowrap;
	line-height:2em;
	height:2em;
	font-weight:normal;
	color:#666;
	background-position:0 50% !important;
}

ul.nav li:hover a,
ul.nav li a:hover,
ul.nav li a:focus {color:[[FluidColor::Background]]; background:[[FluidColor::Foreground]];}
ul.nav li a:active {color:#666; background:[[FluidColor::Background]];}
ul.nav li:hover ul {left:0;z-index:10}
ul.nav li ul,
ul.nav li {background:#ccc !important}
ul.nav li:hover ul li a {color:#444;}
ul.nav li:hover ul li a:hover {color:#000; background:[[FluidColor::Background]];}
ul.nav li:hover ul li a:active {color:#666; background:[[FluidColor::Background]];}

ul.nav li.current a {color:#666; background:[[FluidColor::Background]];; cursor:default; font-weight:bold;}
ul.nav li.current ul {left:0;z-index:5}
ul.nav li.current ul,
ul.nav li.current {background:#ccc !important}
ul.nav li.current ul li a {color:#444; background:#ccc; font-weight:normal;}
ul.nav li.current ul li a:hover {color:#000; background:[[FluidColor::Background]];}
ul.nav li ul li.current a,
ul.nav li ul li.current a:hover,
ul.nav li.current:hover ul li a:active {color:#666; background:[[FluidColor::Background]];}


/* navigation (vertical subnavigation)
----------------------------------------------- */
ul.nav {
  background:[[FluidColor::Background]];
}
ul.main li {
  position:relative;
  top:0;
  left:0;
}
ul.main li ul {
  border-top:0;
}
ul.main li ul li {
  float:left;
}
ul.main li a {
	height:2.5em;
	line-height:2.5em;
	border:0;
	color:[[FluidColor::Background]];
	background:#666;
}
ul.main li ul li a {
  width:12em;
  line-height:2em;
  height:2em;
  text-align:left;
  color:[[FluidColor::Background]];
  border-top:1px solid [[FluidColor::Foreground]];
  background:#444;
}
ul.main li a:focus {color:[[FluidColor::Background]]; background:[[FluidColor::Foreground]];}
ul.main li ul li a:hover {
  color:[[FluidColor::Background]];
  background:#555;
}
ul.main li:hover a {
  color:[[FluidColor::Background]];
  background:#555;
}
ul.main li:hover ul li a {color:[[FluidColor::Background]];}
ul.main li:hover ul li a:hover {color:[[FluidColor::Background]]; background:[[FluidColor::Background]];}
ul.main li:hover a:active {background:[[FluidColor::Background]];}
ul.main li:hover ul li a:active {color:[[FluidColor::Background]]; background:[[FluidColor::Foreground]];}


/* secondary list
----------------------------------------------- */
ul.nav li.secondary {
	float:right;
	color:#cde;
	background:transparent !important;
}
ul.nav li.secondary span.status {
	float:left;
	padding:0 1em;
	line-height:2.77em;
	height:2.77em;
  font-size:0.9em;
}
ul.nav li.secondary span.status a {
	float:none;
	display:inline;
	padding:0;
	height:auto;
	line-height:auto;
	color:#cde;
	background:transparent;
}
ul.nav li.secondary span.status a:hover {
	color:[[FluidColor::Background]];
	background:transparent;
}
ul.nav li.secondary span.status span {
	text-transform:capitalize;
}
ul.nav li.secondary:hover a {
	color:[[FluidColor::Background]];
	background:#666;
}
ul.nav li.secondary:hover a:hover {
	background:#555;
}
ul.nav li.secondary:hover a:active {background:#444;}


<!--}}}-->
/***
|''Name:''|FrenchTranslationPlugin-TW253 by ocalTW and Nicolas Syssoieff |
|''Description:''|Translation of TiddlyWiki 2.5.3 into French |
|''Author:''|ocalTW ( FrenchTranslationPlugin (at) ocalTW (dot) com ) and Nicolas Syssoieff (nicolas.syssoieff+translation (at) gmail (dot) com) |
|''Source:''|http://www.tiddlywiki.fr#FrenchTranslationPlugin |
|''CodeRepository:''|http://svn.tiddlywiki.org/Trunk/association/locales/core/en/locale.en.js |
|''Version:''|0.3.9|
|''Date:''|Aug 18th, 2009|
|''Comments:''|Mail at http://groups.google.com/group/TiddlyWikiFR |
|''History:''|Translations:<br>v2.1.3 by Jacques Turbé<br>v2.2 by ~BidiX<br>v2.3.x & v2.4.x by ocalTW<br>v2.5.1 up to 2.5.3 by ocalTW and Nicolas Syssoieff |
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.5.0|
***/

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

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

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

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

merge(config.tasks,{
    save: {text: "enregistrer", tooltip: "Enregistrer les modifications dans ce TiddlyWiki", action: saveChanges},
    sync: {text: "synchroniser", tooltip: "Synchroniser les modifications avec d'autres fichiers ou serveurs TiddlyWiki", content: '<<sync>>'},
    importTask: {text: "importer", tooltip: "Importer des tiddlers et des plugins depuis d'autres fichiers ou serveurs TiddlyWiki", content: '<<importTiddlers>>'},
    tweak: {text: "configurer", tooltip: "Configurer l'apparence et le comportement de TiddlyWiki", content: '<<options>>'},
    upgrade: {text: "mettre à jour", tooltip: "Mettre à jour le noyau de TiddlyWiki", content: '<<upgrade>>'},
    plugins: {text: "plugins", tooltip: "Gérer les plugins installés", content: '<<plugins>>'}
});

// Options that can be set in the options panel and/or cookies
merge(config.optionsDesc,{
    txtUserName: "Nom d'utilisateur",
    chkRegExpSearch: "Utiliser les expressions régulières dans les recherches",
    chkCaseSensitiveSearch: "Recherche sensible à la casse",
    chkIncrementalSearch: "Recherche incrémentale touche par touche",
    chkAnimate: "Activer les animations",
    chkSaveBackups: "Générer un backup à chaque enregistrement",
    chkAutoSave: "Enregistrer automatiquement les modifications",
    chkGenerateAnRssFeed: "Générer un flux RSS à chaque enregistrement",
    chkSaveEmptyTemplate: "Générer un modèle vide empty.html à chaque enregistrement",
    chkOpenInNewWindow: "Ouvrir les liens externes dans une nouvelle fenêtre",
    chkToggleLinks: "Cliquer sur les liens des tiddlers déjà ouverts les ferme",
    chkHttpReadOnly: "Masquer les fonctions d'édition lors des consultations par HTTP",
    chkForceMinorUpdate: "Ne mettre à jour ni le nom d'utilisateur, ni la date lors de l'édition des tiddlers",
    chkConfirmDelete: "Demander une confirmation avant de supprimer un tiddler",
    chkInsertTabs: "Utiliser la touche 'tab' pour insérer une tabulation au lieu de changer de champ",
    txtBackupFolder: "Nom du répertoire à utiliser pour les backups",
    txtMaxEditRows: "Nombre maximum de lignes dans les zones d'édition",
    txtTheme: "Nom du thème à utiliser",
    txtFileSystemCharSet: "Jeu de caractères à utiliser pour l'enregistrement (uniquement pour Firefox/Mozilla)"});

merge(config.messages,{
    customConfigError: "Problèmes rencontrés pendant le chargement des plugins. Consulter 'PluginManager' pour plus de détails",
    pluginError: "Erreur : %0",
    pluginDisabled: "Plugin non éxécuté car désactivé par le label 'systemConfigDisable'",
    pluginForced: "Plugin exécuté de façon forcée par l'utilisation du label 'systemConfigForce'",
    pluginVersionError: "Plugin non éxécuté car il requiert une version plus récente de TiddlyWiki",
    nothingSelected: "Vous devez d'abord sélectionner un ou plusieurs items",
    savedSnapshotError: "Ce fichier TiddlyWiki ne semble pas être conforme ou n'a pas été enregistré correctement. Consulter http://www.tiddlywiki.com/#Download pour de plus amples détails",
    subtitleUnknown: "(inconnu)",
    undefinedTiddlerToolTip: "Le tiddler '%0' n'existe pas encore",
    shadowedTiddlerToolTip: "Le tiddler '%0' n'existe pas encore, mais a déjà un contenu par défaut",
    tiddlerLinkTooltip: "%0 - %1, %2",
    externalLinkTooltip: "Lien externe vers %0",
    noTags: "Il n'y a pas de tiddlers avec des tags",
    notFileUrlError: "Vous devez enregistrer ce TiddlyWiki dans un fichier avant de pouvoir enregistrer vos modifications",
    cantSaveError: "Impossible d'enregistrer les modifications.\n- Soit votre navigateur ne supporte pas cette fonction (Firefox, Internet Explorer, Safari et Opera fonctionnent s'ils sont configurés correctement)\n- Soit le chemin d'accès à votre fichier TiddlyWiki contient des caractères illégaux\n- Soit le fichier TiddlyWiki a été déplacé ou renommé",
    invalidFileError: "Le fichier original '%0' ne semble pas être un TiddlyWiki valide",
    backupSaved: "Backup enregistré",
    backupFailed: "Echec de l'enregistrement du fichier backup",
    rssSaved: "Flux RSS enregistré",
    rssFailed: "Echec de l'enregistrement du fichier de flux RSS",
    emptySaved: "Modèle vide 'empty.html' enregistré",
    emptyFailed: "Echec de l'enregistrement du modèle TiddlyWiki vide 'empty.html'",
    mainSaved: "Fichier TiddlyWiki enregistré",
    mainFailed: "Echec de l'enregistrement du fichier TiddlyWiki. Vos modifications ne sont pas enregistrées",
    macroError: "Erreur dans la macro <<\%0>>",
    macroErrorDetails: "Erreur pendant l'éxécution de la macro <<\%0>>:\n%1",
    missingMacro: "Macro non trouvée",
    overwriteWarning: "Un tiddler nommé '%0' existe déjà. Cliquer sur OK pour l'écraser",
    unsavedChangesWarning: "ATTENTION! Certaines modifications ne sont pas enregistrées dans le fichier TiddlyWiki\n\nCliquer sur 'OK' pour les enregistrer\nCliquer sur 'ANNULER' pour les ignorer",
    confirmExit: "--------------------------------\n\nCertaines modifications ne sont pas enregistrées dans TiddlyWiki. Si vous continuez ces modifications seront perdues\n\n--------------------------------",
    saveInstructions: "Enregistrer les Modifications",
    unsupportedTWFormat: "Format de TiddlyWiki non supporté '%0'",
    tiddlerSaveError: "Erreur pendant l'enregistrement du tiddler '%0'",
    tiddlerLoadError: "Erreur pendant le chargement du tiddler '%0'",
    wrongSaveFormat: "Impossible d'enregistrer avec le format de stockage '%0'. Utiliser un format standard pour enregistrer.",
    invalidFieldName: "Nom de champ invalide %0",
    fieldCannotBeChanged: "Le champ '%0' ne peut pas être modifié",
    loadingMissingTiddler: "Tentative de récupération du tiddler '%0' à partir du serveur '%1' à :\n\n'%2' dans l'espace de travail '%3'",
    upgradeDone: "La mise à jour en version %0 est effectuée\n\nCliquer sur OK pour recharger la nouvelle version de TiddlyWiki"});

merge(config.messages.messageClose,{
    text: "fermer",
    tooltip: "fermer cette zone de messages"});

config.messages.backstage = {
    open: {text: "barre d'outils", tooltip: "Ouvrir la barre d'outils pour effectuer des tâches de maintenance : synchronisation, export, import, mise à jour, gestion des plugins"},
    close: {text: "fermer", tooltip: "Fermer la barre d'outils"},
    prompt: "Outils : ",
    decal: {
        edit: {text: "éditer", tooltip: "Editer le tiddler '%0'"}
    }
};

config.messages.listView = {
    tiddlerTooltip: "Cliquer pour une vue complète de ce tiddler",
    previewUnavailable: "(aperçu non disponible)"
};

config.messages.dates.months = ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "aout", "septembre", "octobre", "novembre","décembre"];
config.messages.dates.days = ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"];
config.messages.dates.shortMonths = ["jan.", "fev.", "mar.", "avr.", "mai", "juin", "juil", "aou.", "sep.", "oct.", "nov.", "dec."];
config.messages.dates.shortDays = ["dim", "lun", "mar", "mer", "jeu", "ven", "sam"];
// suffixes for dates, eg "1st","2nd","3rd"..."30th","31st"
config.messages.dates.daySuffixes = ["er","","","","","","","","","",
        "","","","","","","","","","",
        "","","","","","","","","","",
        ""];
config.messages.dates.am = "matin";
config.messages.dates.pm = "après-midi";

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

merge(config.views.wikified.tag,{
    labelNoTags: "pas de label",
    labelTags: "labels : ",
    openTag: "Ouvrir le label '%0'",
    tooltip: "Afficher les tiddlers ayant pour label '%0'",
    openAllText: "Tout ouvrir",
    openAllTooltip: "Ouvrir tous ces tiddlers",
    popupNone: "Pas d'autres tiddlers avec le label '%0'"});

merge(config.views.wikified,{
    defaultText: "Le tiddler '%0' n'existe pas encore. Double-cliquer pour le créer",
    defaultModifier: "(manquant)",
    shadowModifier: "(tiddler masqué par défaut)",
    dateFormat: "DD MMM YYYY", // Utilisé pour changer le format de la date (ici : "YYYY MMM DD"), ne pas changer les lettres D (jour), M (mois) ou Y (année)
    createdPrompt: "créé le"});

merge(config.views.editor,{
    tagPrompt: "Entrer des labels séparés par des espaces, [[entre double crochets]] si nécessaire, ou ajouter des labels existants :",
    defaultText: "Entrer le texte pour '%0'"});

merge(config.views.editor.tagChooser,{
    text: "labels",
    tooltip: "Sélectionner des labels existants à ajouter à ce tiddler",
    popupNone: "Aucun label défini",
    tagTooltip: "Ajouter le label '%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: "recherche",
    prompt: "Rechercher dans ce TiddlyWiki",
    accessKey: "F",
    successMsg: "%0 tiddlers trouvés contenant %1",
    failureMsg: "Aucun tiddler ne contient %0"});

merge(config.macros.tagging,{
	label: "avec ce label : ",
	labelNotTag: "aucun tiddler avec ce label",
	tooltip: "Liste des tiddlers avec le label '%0'"});

merge(config.macros.timeline,{
    dateFormat: "DD MMM YYYY"}); // Utilisé pour changer le format de la date (ici : "YYYY MMM DD"), ne pas changer les lettres D (jour), M (mois) ou Y (année)

merge(config.macros.allTags,{
    tooltip: "Afficher les tiddlers avec le label '%0'",
    noTags: "Aucun tiddler n'a de label"});

config.macros.list.all.prompt = "Tous les tiddlers classés par ordre alphabétique";
config.macros.list.missing.prompt = "Tiddlers pointés par un lien mais non créés";
config.macros.list.orphans.prompt = "Tiddlers orphelins qui ne sont référencés par aucun autre tiddler";
config.macros.list.shadowed.prompt = "Tiddlers masqués avec contenu par défaut";
config.macros.list.touched.prompt = "Tiddlers modifiés localement";

merge(config.macros.closeAll,{
    label: "fermer tout",
    prompt: "Fermer tous les tiddlers affichés (sauf ceux en cours d'édition)"});

merge(config.macros.permaview,{
    label: "permalien",
    prompt: "Lien vers une URL contenant tous les tiddlers affichés actuellement"});

merge(config.macros.saveChanges,{
    label: "enregistrer",
    prompt: "Enregistrer tous les tiddlers du TiddlyWiki",
    accessKey: "S"});

merge(config.macros.newTiddler,{
    label: "nouveau tiddler",
    prompt: "Créer un nouveau tiddler",
    title: "Nouveau Tiddler",
    accessKey: "N"});

merge(config.macros.newJournal,{
    label: "nouveau journal",
    prompt: "Créer un nouveau tiddler avec la date et l'heure",
    accessKey: "J"});

merge(config.macros.options,{
    wizardTitle: "Réglage des options avancées",
    step1Title: "Ces options sont enregistrées dans des cookies dans votre navigateur",
    step1Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='false' name='chkUnknown'>Afficher les options inconnues</input>",
    unknownDescription: "//(inconnu)//",
    listViewTemplate: {
        columns: [
            {name: 'Option', field: 'option', title: "Option", type: 'String'},
            {name: 'Description', field: 'description', title: "Description", type: 'WikiText'},
            {name: 'Name', field: 'name', title: "Nom", type: 'String'}
            ],
        rowClasses: [
            {className: 'lowlight', field: 'lowlight'}
            ]}
    });

merge(config.macros.plugins,{
    wizardTitle: "Gérer les plugins",
    step1Title: "Plugins actifs et chargés actuellement",
    step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
    skippedText: "(Ce plugin n'a pas été éxécuté car il a été ajouté après le chargement de ce fichier TiddlyWiki)",
    noPluginText: "Aucun plugin n'est installé",
    confirmDeleteText: "Etes-vous sûr de vouloir effacer ce(s) plugin(s) :\n\n%0",
    removeLabel: "supprimer le label 'systemConfig'",
    removePrompt: "Supprimer le label 'systemConfig'",
    deleteLabel: "supprimer",
    deletePrompt: "Supprimer définitivement ces tiddlers ",
    listViewTemplate: {
        columns: [
            {name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
            {name: 'Tiddler', field: 'tiddler', title: "Tiddler", type: 'Tiddler'},
            {name: 'Description', field: 'Description', title: "Description", type: 'String'},
            {name: 'Version', field: 'Version', title: "Version", type: 'String'},
            {name: 'Size', field: 'size', tiddlerLink: 'size', title: "Taille", type: 'Size'},
            {name: 'Forced', field: 'forced', title: "Forcé", tag: 'systemConfigForce', type: 'TagCheckbox'},
            {name: 'Disabled', field: 'disabled', title: "Désactivé", tag: 'systemConfigDisable', type: 'TagCheckbox'},
            {name: 'Executed', field: 'executed', title: "Chargé", type: 'Boolean', trueText: "Yes", falseText: "No"},
            {name: 'Startup Time', field: 'startupTime', title: "Temps de démarrage", type: 'String'},
            {name: 'Error', field: 'error', title: "Etat", 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: "(plus)",
    morePrompt: "Afficher les commandes supplémentaires",
    lessLabel: "(moins)",
    lessPrompt: "Masquer les commandes supplémentaires",
    separator: "|"
    });

merge(config.macros.refreshDisplay,{
    label: "actualiser",
    prompt: "Actualiser tout le TiddlyWiki"
    });

merge(config.macros.importTiddlers,{
    readOnlyWarning: "Impossible d'importer dans un TiddlyWiki en lecture seule. Ouvrir le TiddlyWiki depuis une URL 'file://'",
    wizardTitle: "Importer des tiddlers depuis un autre fichier ou serveur",
    step1Title: "Etape 1: Localiser le serveur ou le fichier TiddlyWiki",
    step1Html: "Spécifier le type de serveur : <select name='selTypes'><option value=''>Choisir...</option></select><br>Entrer l'URL ou le chemin ici : <input type='text' size=50 name='txtPath'><br>...ou rechercher un fichier en local : <input type='file' size=50 name='txtBrowse'><br><hr>...ou sélectionner une source pré-définie : <select name='selFeeds'><option value=''>Choisir...</option></select>",
    openLabel: "ouvrir",
    openPrompt: "Ouvrir la connexion vers ce fichier ou ce serveur",
    openError: "Problèmes pour récupérer le fichier TiddlyWiki",
    statusOpenHost: "Accès à l'hôte",
    statusGetWorkspaceList: "Récupération de la liste des espaces de travail",
    step2Title: "Etape 2: Choisir l'espace de travail",
    step2Html: "Entrer le nom de l'espace de travail : <input type='text' size=50 name='txtWorkspace'><br>...ou sélectionner un espace de travail : <select name='selWorkspace'><option value=''>Choisir...</option></select>",
    cancelLabel: "annuler",
    cancelPrompt: "Annuler l'importation",
    statusOpenWorkspace: "Ouverture de l'espace de travail",
    statusGetTiddlerList: "Récupération de la liste des tiddlers disponibles",
    errorGettingTiddlerList: "Erreur pendant la récupération des tiddlers, cliquer sur 'Annuler' pour ré-essayer",
    step3Title: "Etape 3: Choisir les tiddlers à importer",
    step3Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='true' name='chkSync'>Lier ces tiddlers à ce serveur pour pouvoir synchroniser les modifications ultérieures</input><br><input type='checkbox' name='chkSave'>Enregistrer les détails de ce serveur dans un tiddler 'systemServer' nommé : </input> <input type='text' size=25 name='txtSaveTiddler'>",
    importLabel: "importer",
    importPrompt: "Importer ces tiddlers",
    confirmOverwriteText: "Etes-vous sûr de vouloir remplacer ces tiddlers :\n\n%0",
    step4Title: "Etape 4: Importation de %0 tiddler(s)",
    step4Html: "<input type='hidden' name='markReport'></input>", // DO NOT TRANSLATE
    doneLabel: "terminé",
    donePrompt: "Fermer cet assistant",
    statusDoingImport: "Importation des tiddlers en cours",
    statusDoneImport: "Tous les tiddlers ont été importés",
    systemServerNamePattern: "%2 sur %1",
    systemServerNamePatternNoWorkspace: "%1",
    confirmOverwriteSaveTiddler: "Le tiddler '%0' existe déjà. Cliquer sur 'OK' pour le remplacer avec les détails de ce serveur, ou sur 'Annuler' pour le conserver",
    serverSaveTemplate: "|''Type:''|%0|\n|''URL:''|%1|\n|''Espace de travail:''|%2|\n\nCe tiddler a été créé automatiquement pour enregistrer les détails de ce serveur",
    serverSaveModifier: "(Système)",
    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: "Taille", type: 'Size'},
            {name: 'Tags', field: 'tags', title: "Labels", type: 'Tags'}
            ],
        rowClasses: [
            ]}
    });

merge(config.macros.upgrade,{
    wizardTitle: "Mettre à jour le noyau de TiddlyWiki",
    step1Title: "Mettre à jour ou réparer ce TiddlyWiki avec la dernière version",
    step1Html: "Vous allez faire une mise à jour du noyau de TiddlyWiki à la dernière version (depuis <a href='%0' class='externalLink' target='_blank'>%1</a>). Votre contenu sera préservé après la mise à jour.<br><br>Les mise à jour du noyau peuvent interférer avec d'anciens plugins. Si vous rencontrez des problèmes avec le TiddlyWiki après la mise à jour, consulter <a href='http://www.tiddlywiki.org/wiki/CoreUpgrades' class='externalLink' target='_blank'>http://www.tiddlywiki.org/wiki/CoreUpgrades</a>",
    errorCantUpgrade: "Impossible de mettre à jour ce TiddlyWiki. La mise à jour n'est possible que sur des fichiers stockés sur un disque local",
    errorNotSaved: "Enregistrer les changements avant  pouvoir réaliser la mise à jour",
    step2Title: "Confirmer les détails de la mise à jour",
    step2Html_downgrade: "Vous êtes sur le point de faire un retour arrière à la version de TiddlyWiki %0 depuis la version %1.<br><br>Le retour arrière vers une version antérieure du noyau n'est pas recommandée",
    step2Html_restore: "Ce TiddlyWiki semble déjà utiliser la dernière version disponible du noyau (%0).<br><br>Vous pouvez quand même continuer la mise à jour pour vous assurer que le noyau n'a été ni corrompu ni endommagé",
    step2Html_upgrade: "Vous êtes sur le point de faire la mise à jour vers TiddlyWiki en version %0 depuis la version %1",
    upgradeLabel: "mettre à jour",
    upgradePrompt: "Préparation à la mise à jour",
    statusPreparingBackup: "Préparation du backup",
    statusSavingBackup: "Enregistrement du fichier de backup",
    errorSavingBackup: "Problème pour enregistrer le fichier de backup",
    statusLoadingCore: "Chargement du noyau",
    errorLoadingCore: "Erreur de chargement du noyau",
    errorCoreFormat: "Erreur avec le nouveau noyau",
    statusSavingCore: "Enregistrement du nouveau noyau",
    statusReloadingCore: "Rechargement du nouveau noyau",
    startLabel: "démarrer",
    startPrompt: "Démarrer la mise à jour",
    cancelLabel: "annuler",
    cancelPrompt: "Annuler la mise à jour",
    step3Title: "Mise à jour annulée",
    step3Html: "Vous avez annulé la mise à jour"
    });

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: "Type de serveur", type: 'String'},
            {name: 'Server Host', field: 'serverHost', title: "Hôte serveur", type: 'String'},
            {name: 'Server Workspace', field: 'serverWorkspace', title: "Espace de travail du serveur", type: 'String'},
            {name: 'Status', field: 'status', title: "Etat de la synchronisation", type: 'String'},
            {name: 'Server URL', field: 'serverUrl', title: "URL du serveur", text: "View", type: 'Link'}
            ],
        rowClasses: [
            ],
        buttons: [
            {caption: "Synchroniser ces tiddlers", name: 'sync'}
            ]},
    wizardTitle: "Synchroniser avec des serveurs et fichiers externes",
    step1Title: "Choisir les tiddlers à synchroniser",
    step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
    syncLabel: "synchroniser",
    syncPrompt: "Synchroniser ces tiddlers",
    hasChanged: "Modifié pendant la déconnexion",
    hasNotChanged: "Non modifié pendant la déconnexion",
    syncStatusList: {
        none: {text: "...", color: "transparent", display:null},
        changedServer: {text: "Modifié sur le serveur", color: '#8080ff', display:null},
        changedLocally: {text: "Modifié pendant la déconnexion", color: '#80ff80', display:null},
        changedBoth: {text: "Changé pendant la déconnexion et sur le serveur", color: '#ff8080', display:null},
        notFound: {text: "Introuvable sur le serveur", color: '#ffff80', display:null},
        putToServer: {text: "Mise à jour enregistrée sur le serveur", color: '#ff80ff', display:null},
        gotFromServer: {text: "Mise à jour récupérée depuis le serveur", color: '#80ffff', display:null}
        }
    });

merge(config.commands.closeTiddler,{
    text: "fermer",
    tooltip: "Fermer ce tiddler"});

merge(config.commands.closeOthers,{
    text: "isoler",
    tooltip: "Fermer tous les autres tiddlers"});

merge(config.commands.editTiddler,{
    text: "éditer",
    tooltip: "Editer ce tiddler",
    readOnlyText: "voir",
    readOnlyTooltip: "Afficher la source de ce tiddler"});

merge(config.commands.saveTiddler,{
    text: "valider",
    tooltip: "Confirmer les modifications effectuées sur ce tiddler"});

merge(config.commands.cancelTiddler,{
    text: "annuler",
    tooltip: "Annuler les modifications de ce tiddler",
    warning: "Etes-vous sûr de vouloir abandonner les modifications de '%0'?",
    readOnlyText: "retour",
    readOnlyTooltip: "Retour à l'affichage normal de ce tiddler"});

merge(config.commands.deleteTiddler,{
    text: "supprimer",
    tooltip: "Supprimer ce tiddler",
    warning: "Confirmez-vous la suppression de '%0'?"});

merge(config.commands.permalink,{
    text: "permalien",
    tooltip: "Permalien de ce tiddler"});

merge(config.commands.references,{
    text: "références",
    tooltip: "Afficher les tiddlers qui font référence à ce tiddler",
    popupNone: "Aucune référence"});

merge(config.commands.jump,{
    text: "atteindre",
    tooltip: "Atteindre un autre tiddler ouvert dans ce document"});

merge(config.commands.syncing,{
    text: "synchronisation",
    tooltip: "Contrôler la synchronisation de ce tiddler avec un serveur ou un fichier externe",
    currentlySyncing: "<div>Actuellement synchronisé via <span class='popupHighlight'>'%0'</span> vers :</"+"div><div>host: <span class='popupHighlight'>%1</span></"+"div><div>workspace: <span class='popupHighlight'>%2</span></"+"div>", // Note escaping of closing <div> tag
    notCurrentlySyncing: "Pas de synchronisation",
    captionUnSync: "Interrompre la synchronisation de ce tiddler",
    chooseServer: "Synchroniser ce tiddler avec un autre serveur :",
    currServerMarker: "\u25cf ",
    notCurrServerMarker: "  "});

merge(config.commands.fields,{
    text: "champs",
    tooltip: "Afficher les champs supplémentaires de ce tiddler",
    emptyText: "Il n'y a pas de champs supplémentaires pour ce tiddler",
    listViewTemplate: {
        columns: [
            {name: 'Field', field: 'field', title: "Champs", type: 'String'},
            {name: 'Value', field: 'value', title: "Valeur", type: 'String'}
            ],
        rowClasses: [
            ],
        buttons: [
            ]}});

merge(config.shadowTiddlers,{
    DefaultTiddlers: "[[PourCommencer]]",
    MainMenu: "[[PourCommencer]]\n\n\n^^~TiddlyWiki version <<version>>\n© 2007 [[UnaMesa|http://www.unamesa.org/]]^^",
    PourCommencer: "Pour bien commencer avec un TiddlyWiki vide, vous devez modifier les tiddlers suivants :\n* SiteTitle & SiteSubtitle: Le titre et le sous-titre du site, visibles ci-dessus (après enregistrement, ils apparaîtront également dans la barre de titre du navigateur)\n* MainMenu: Le menu (généralement à gauche)\n* DefaultTiddlers: Contient le nom des tiddlers que vous souhaitez ouvrir automatiquement au chargement de votre TiddlyWiki\nVous devez également entrer votre nom d'utilisateur pour signer vos modifications : <<option txtUserName>>",
    SiteTitle: "Mon TiddlyWiki",
    SiteSubtitle: "bloc-notes, organiseur personnel interactif, et bien d'autres choses encore ...",
    SiteUrl: "http://www.tiddlywiki.com/",
    OptionsPanel: "Les options de configuration pour adapter votre TiddlyWiki sont enregistrées dans votre navigateur\n\nVotre nom d'utilisateur pour signer vos modifications. Ecrivez-le comme un WikiWord (ex PierreDupont)\n<<option txtUserName>>\n\n<<option chkSaveBackups>> Enregistrer backups\n<<option chkAutoSave>> Enregistrement auto\n<<option chkRegExpSearch>> Recherche avec regexp\n<<option chkCaseSensitiveSearch>> Recherche sensible à la casse\n<<option chkAnimate>> Activer animations\n\n----\nVoir aussi [[OptionsAvancées|AdvancedOptions]]",
    SideBarOptions: '<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options \u00bb" "Modifier les options avancées de TiddlyWiki">>',
    SideBarTabs: '<<tabs txtMainTab "Chrono" "Affichage chronologique" TabTimeline "Tous" "Tous les tiddlers" TabAll "Labels" "Tous les labels" TabTags "Plus" "Autres listes" TabMore>>',
    TabMore: '<<tabs txtMoreTab "Manquants" "Tiddlers manquants" TabMoreMissing "Orphelins" "Tiddlers orphelins" TabMoreOrphans "Masqués" "Tiddlers masqués" TabMoreShadowed>>'
    });

merge(config.annotations,{
    AdvancedOptions: "Ce tiddler masqué permet d'accéder à de nombreuses options avancées",
    ColorPalette: "Les valeurs de ce tiddler masqué déterminent la palette de couleur de l'interface utilisateur de ce ~TiddlyWiki",
    DefaultTiddlers: "Les tiddlers listés dans ce tiddler masqué seront automatiquement affichés à l'ouverture de ce ~TiddlyWiki",
    EditTemplate: "Le gabarit HTML de ce tiddler masqué détermine l'apparence d'un tiddler en mode édition",
    GettingStarted: "Ce tiddler masqué contient des instructions d'utilisation basiques",
    ImportTiddlers: "Ce tiddler masqué permet d'accéder au fonctions d'import des tiddlers",
    MainMenu: "Ce tiddler masqué contient le contenu du menu principal situé dans la colonne de gauche du TiddlyWiki",
    MarkupPreHead: "Ce tiddler est inséré en haut de la section <head> du fichier TiddlyWiki",
    MarkupPostHead: "Ce tiddler est inséré en bas de la section <head> du fichier TiddlyWiki",
    MarkupPreBody: "Ce tiddler est inséré en haut de la section <body> du fichier TiddlyWiki",
    MarkupPostBody: "Ce tiddler est inséré en haut de la section <body> du fichier TiddlyWiki immédiatement après le bloc de script",
    OptionsPanel: "Ce tiddler masqué contient le menu déroulant d'options de la colonne de droite du TiddlyWiki",
    PageTemplate: "Le gabarit HTML de ce tiddler masqué détermine l'apparence complète du TiddlyWiki",
    PluginManager: "Ce tiddler masqué permet d'accéder au gestionnaire de plugins",
    SideBarOptions: "Ce tiddler masqué contient le menu d'options de la colonne de droite du TiddlyWiki",
    SideBarTabs: "Ce tiddler masqué contient le menu en onglets de la colonne de droite du TiddlyWiki",
    SiteSubtitle: "Ce tiddler masqué contient la deuxième partie du titre de la page",
    SiteTitle: "Ce tiddler masqué contient la première partie du titre de la page",
    SiteUrl: "Ce tiddler masqué doit contenir l'URL complète du site utilisée pour la publication",
    StyleSheetColors: "Ce tiddler masqué contient les définitions de style CSS liées à la couleur des différents éléments des pages. 'NE PAS EDITER CE TIDDLER', faire des modifications dans le tiddler masqué StyleSheet",
    StyleSheet: "Ce tiddler peut contenir des définitions de style CSS personnalisées",
    StyleSheetLayout: "Ce tiddler masqué contient les définitions de style CSS liées à la disposition des différents éléments des pages. 'NE PAS EDITER CE TIDDLER', faire des modifications dans le tiddler masqué StyleSheet",
    StyleSheetLocale: "Ce tiddler masqué contient les définitions de style CSS pour la traduction",
    StyleSheetPrint: "Ce tiddler masqué contient les définitions de style CSS pour l'impression",
    TabAll: "Ce tiddler masqué contient l'onglet 'Tous' de la colonne de droite du TiddlyWiki",
    TabMore: "TCe tiddler masqué contient l'onglet 'Plus' de la colonne de droite du TiddlyWiki",
    TabMoreMissing: "Ce tiddler masqué contient l'onglet 'Manquants' de la colonne de droite du TiddlyWiki",
    TabMoreOrphans: "Ce tiddler masqué contient l'onglet 'Orphelins' de la colonne de droite du TiddlyWiki",
    TabMoreShadowed: "Ce tiddler masqué contient l'onglet 'Masqués' de la colonne de droite du TiddlyWiki",
    TabTags: "Ce tiddler masqué contient l'onglet 'Labels' de la colonne de droite du TiddlyWiki",
    TabTimeline: "Ce tiddler masqué contient l'onglet 'Chrono' de la colonne de droite du TiddlyWiki",
    ToolbarCommands: "Ce tiddler masqué détermine quelles commandes sont affichées dans les barre d'outils des tiddlers",
    ViewTemplate: "Le gabarit HTML de ce tiddler masqué détermine l'apparence d'un tiddler en mode normal"
    });

//}}}
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>>
<<version>>
/*
	960 Grid System ~ Core CSS.
	Learn more ~ http://960.gs/

	Licensed under GPL and MIT.
*/

/* =Containers
--------------------------------------------------------------------------------*/

.container_12,
.container_16
{
	width: 92%;
	margin-left: 4%;
	margin-right: 4%;
}

/* =Grid >> Global
--------------------------------------------------------------------------------*/

.grid_1,
.grid_2,
.grid_3,
.grid_4,
.grid_5,
.grid_6,
.grid_7,
.grid_8,
.grid_9,
.grid_10,
.grid_11,
.grid_12,
.grid_13,
.grid_14,
.grid_15,
.grid_16
{
	display: inline;
	float: left;
	margin-left: 1%;
	margin-right: 1%;
}

.container_12 .grid_3,
.container_16 .grid_4
{
	width: 23%;
}

.container_12 .grid_6,
.container_16 .grid_8
{
	width: 48%;
}

.container_12 .grid_9,
.container_16 .grid_12
{
	width: 73%;
}

.container_12 .grid_12,
.container_16 .grid_16
{
	width: 98%;
}

/* =Grid >> Children (Alpha ~ First, Omega ~ Last)
--------------------------------------------------------------------------------*/

.alpha
{
	margin-left: 0;
}

.omega
{
	margin-right: 0;
}

/* =Grid >> 12 Columns
--------------------------------------------------------------------------------*/

.container_12 .grid_1
{
	width: 6.333%;
}

.container_12 .grid_2
{
	width: 14.666%;
}

.container_12 .grid_4
{
	width: 31.333%;
}

.container_12 .grid_5
{
	width: 39.666%;
}

.container_12 .grid_7
{
	width: 56.333%;
}

.container_12 .grid_8
{
	width: 64.666%;
}

.container_12 .grid_10
{
	width: 81.333%;
}

.container_12 .grid_11
{
	width: 89.666%;
}

/* =Grid >> 16 Columns
--------------------------------------------------------------------------------*/

.container_16 .grid_1
{
	width: 4.25%;
}

.container_16 .grid_2
{
	width: 10.5%;
}

.container_16 .grid_3
{
	width: 16.75%;
}

.container_16 .grid_5
{
	width: 29.25%;
}

.container_16 .grid_6
{
	width: 35.5%;
}

.container_16 .grid_7
{
	width: 41.75%;
}

.container_16 .grid_9
{
	width: 54.25%;
}

.container_16 .grid_10
{
	width: 60.5%;
}

.container_16 .grid_11
{
	width: 66.75%;
}

.container_16 .grid_13
{
	width: 79.25%;
}

.container_16 .grid_14
{
	width: 85.5%;
}

.container_16 .grid_15
{
	width: 91.75%;
}

/* =Prefix Extra Space >> Global
--------------------------------------------------------------------------------*/

.container_12 .prefix_3,
.container_16 .prefix_4
{
	padding-left: 25%;
}

.container_12 .prefix_6,
.container_16 .prefix_8
{
	padding-left: 50%;
}

.container_12 .prefix_9,
.container_16 .prefix_12
{
	padding-left: 75%;
}

/* =Prefix Extra Space >> 12 Columns
--------------------------------------------------------------------------------*/

.container_12 .prefix_1
{
	padding-left: 8.333%;
}

.container_12 .prefix_2
{
	padding-left: 16.666%;
}

.container_12 .prefix_4
{
	padding-left: 33.333%;
}

.container_12 .prefix_5
{
	padding-left: 41.666%;
}

.container_12 .prefix_7
{
	padding-left: 58.333%;
}

.container_12 .prefix_8
{
	padding-left: 66.666%;
}

.container_12 .prefix_10
{
	padding-left: 83.333%;
}

.container_12 .prefix_11
{
	padding-left: 91.666%;
}

/* =Prefix Extra Space >> 16 Columns
--------------------------------------------------------------------------------*/

.container_16 .prefix_1
{
	padding-left: 6.25%;
}

.container_16 .prefix_2
{
	padding-left: 12.5%;
}

.container_16 .prefix_3
{
	padding-left: 18.75%;
}

.container_16 .prefix_5
{
	padding-left: 31.25%;
}

.container_16 .prefix_6
{
	padding-left: 37.5%;
}

.container_16 .prefix_7
{
	padding-left: 43.75%;
}

.container_16 .prefix_9
{
	padding-left: 56.25%;
}

.container_16 .prefix_10
{
	padding-left: 62.5%;
}

.container_16 .prefix_11
{
	padding-left: 68.75%;
}

.container_16 .prefix_13
{
	padding-left: 81.25%;
}

.container_16 .prefix_14
{
	padding-left: 87.5%;
}

.container_16 .prefix_15
{
	padding-left: 93.75%;
}

/* =Suffix Extra Space >> Global
--------------------------------------------------------------------------------*/

.container_12 .suffix_3,
.container_16 .suffix_4
{
	padding-right: 25%;
}

.container_12 .suffix_6,
.container_16 .suffix_8
{
	padding-right: 50%;
}

.container_12 .suffix_9,
.container_16 .suffix_12
{
	padding-right: 75%;
}

/* =Suffix Extra Space >> 12 Columns
--------------------------------------------------------------------------------*/

.container_12 .suffix_1
{
	padding-right: 8.333%;
}

.container_12 .suffix_2
{
	padding-right: 16.666%;
}

.container_12 .suffix_4
{
	padding-right: 33.333%;
}

.container_12 .suffix_5
{
	padding-right: 41.666%;
}

.container_12 .suffix_7
{
	padding-right: 58.333%;
}

.container_12 .suffix_8
{
	padding-right: 66.666%;
}

.container_12 .suffix_10
{
	padding-right: 83.333%;
}

.container_12 .suffix_11
{
	padding-right: 91.666%;
}

/* =Suffix Extra Space >> 16 Columns
--------------------------------------------------------------------------------*/

.container_16 .suffix_1
{
	padding-right: 6.25%;
}

.container_16 .suffix_2
{
	padding-right: 16.5%;
}

.container_16 .suffix_3
{
	padding-right: 18.75%;
}

.container_16 .suffix_5
{
	padding-right: 31.25%;
}

.container_16 .suffix_6
{
	padding-right: 37.5%;
}

.container_16 .suffix_7
{
	padding-right: 43.75%;
}

.container_16 .suffix_9
{
	padding-right: 56.25%;
}

.container_16 .suffix_10
{
	padding-right: 62.5%;
}

.container_16 .suffix_11
{
	padding-right: 68.75%;
}

.container_16 .suffix_13
{
	padding-right: 81.25%;
}

.container_16 .suffix_14
{
	padding-right: 87.5%;
}

.container_16 .suffix_15
{
	padding-right: 93.75%;
}

/* =Clear Floated Elements
--------------------------------------------------------------------------------*/

/* http://sonspring.com/journal/clearing-floats */

html body * span.clear,
html body * div.clear,
html body * li.clear,
html body * dd.clear
{
	background: none;
	border: 0;
	clear: both;
	display: block;
	float: none;
	font-size: 0;
	list-style: none;
	margin: 0;
	padding: 0;
	overflow: hidden;
	visibility: hidden;
	width: 0;
	height: 0;
}

/* http://www.positioniseverything.net/easyclearing.html */

.clearfix:after
{
	clear: both;
	content: '.';
	display: block;
	visibility: hidden;
	height: 0;
}

.clearfix
{
	display: inline-block;
}

* html .clearfix
{
	height: 1%;
}

.clearfix
{
	display: block;
}
/%
|Name|DigitalClock|
|Source|http://www.TiddlyTools.com/#DigitalClock|
|Version|1.0.0|
|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|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|display current time with automatic LIVE update|

Usage: <<tiddler DigitalClock with: format tick>>

where 'format' is any TiddlyWiki date/time formatting string
and 'tick' is the time in seconds between display updates (default=1sec)

For example, use:
   << ... "0hh:0mm" 60>>
to show hours and minutes only, updated once per minute

%/<script>
	window.DigitalClock_tick=function(id){
		var e=document.getElementById(id); if (!e) return;
		e.title='Cliquer pour '+(e.paused?'RELANCER':'ARRETER')+" l'horloge";
		if (e.paused) return;
		e.innerHTML=new Date().formatString(e.fmt);
		setTimeout('window.DigitalClock_tick('+id+')',e.tick*1000);
	}
	var e=createTiddlyElement(place,'a',new Date().getTime()+Math.random());
	e.onclick=function(){this.paused=!this.paused;window.DigitalClock_tick(this.id);}
	e.style.cursor='pointer';
	e.fmt=('$1'=='$'+'1')?'hh12:0mm:0ss am':'$1';
	e.tick=('$2'=='$'+'2')?'1':'$2';
	window.DigitalClock_tick(e.id);
</script>
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.2|
|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||
|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
<<<
2008.03.03 [1.9.2] corrected declaration of wikifyPlainText() for 'TW 2.1.x compatibility fallback' (fixes Safari "parse error")
2008.02.23 [1.9.1] in onclick function, use string instead of array for 'bufferedHTML' attribute on link element (fixes IE errors)
2008.02.21 [1.9.0] 'onclick' scripts now allow returned text (or document.write() calls) to be wikified into a span that immediately follows the onclick link.  Also, added default 'return false' handling if no return value provided (prevents HREF from being triggered -- return TRUE to allow HREF to be processed).  Thanks to Xavier Verges for suggestion and preliminary code.
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.inlineJavascript= {major: 1, minor: 9, revision: 2, date: new Date(2008,3,3)};

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) { // load a script library
				// make script tag, set src, add to body to execute, then remove for cleanup
				var script = document.createElement("script"); script.src = src;
				document.body.appendChild(script); document.body.removeChild(script);
			}
			if (code) { // there is script code
				if (show) // show inline script code in tiddler output
					wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
				if (label) { // create a link to an 'onclick' script
					// add a link, define click handler, save code in link (pass 'place'), set link attributes
					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){"+fixup+"\n};_out(this);"
					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 inline script code
					var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
					var code="function _out(place){"+fixup+"\n};_out(w.output);"
					try { var out=eval(code); } 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();
}
//}}}
/*
-----------------------------------------------
Grey Box Method - Layout CSS
----------------------------------------------- */

body {
	background: #eee;
	border-top: 5px solid #000;
	color: #333;
	font-size: 11px;
	padding: 0 0 40px;
}


/* anchors
----------------------------------------------- */
a {
	color: #000;
	font-weight:bold;
	text-decoration: none;
}
a:hover {
	color:#333;
}


/* 960 grid system container background
----------------------------------------------- */
.container_12,
.container_16 {
	background:#fff;
}


/* headings
----------------------------------------------- */
h1, h2, h3, h4, h5, h6 {line-height:1.2em; margin-bottom:.3em;}
h2 {margin-top:1em;}
h5 {font-size:1.2em;}
h6 {font-size:1em; text-transform:uppercase;}


h1 a {
	font-weight:normal;
}


/* branding
----------------------------------------------- */
h1#branding {
	font-weight:normal;
	font-size:3em;
	text-align:left;
	background:#aaa;
	padding:.7em 1em;
	margin-bottom:0;
}


/* page heading
----------------------------------------------- */
h2#page-heading {
	font-weight:normal;
	padding:.5em;
	margin:0 0 10px 0;
	border-bottom:1px solid #ccc;
}


/* boxes
----------------------------------------------- */
.box {
	background:#ddd;
	margin-bottom:20px;
	padding:10px 10px 1px 10px;
}
.box h2 {
	font-size:1em;
	font-weight:normal;
	text-transform:uppercase;
	color:#fff;
	background:#333;
	margin:-10px -10px 0 -10px;
	padding:6px 12px;
}
.box h2 a,
.box h2 a.visible {
	color:#fff;
	background:#333 url("[img[switch_minus.gif]]") 97% 50% no-repeat;
	display:block;
	padding:6px 12px;
	margin:-6px -12px;
	border:none;
}
.grid_4 .box h2 a {
	background-position: 97% 50%;
}
.grid_5 .box h2 a {
	background-position: 98% 50%;
}
.grid_12 .box h2 a {
	background-position: 99% 50%;
}


.box h2 a.hidden,
.box h2 a.hidden:hover {
	background-image: url("[img[switch_plus.gif]]");
}
.box h2 a:hover {
	background-color:#111;
}
.block {
	padding-top:10px;
}
div.menu {
	padding:0;
}
div.menu h2 {
	margin:0;
}
div.menu .block {
	padding-top:0;
}


/* paragraphs, quotes and lists
----------------------------------------------- */
p {
	margin-bottom:1em;
}
blockquote {
	font-family: Georgia, 'Times New Roman', serif;
	font-size:1.2em;
	padding-left:1em;
	border-left:4px solid #ccc;
}
blockquote cite {
	font-size:.9em;
}
ul, ol {
	padding-top:0;
}


/* menus
----------------------------------------------- */
ul.menu {
	list-style:none;
	border-top:1px solid #bbb;
}
ul.menu li {
	margin:0;
}
ul.menu li a {
	display:block;
	padding:4px 10px;
	border-bottom:1px solid #ccc;
}
ul.menu li a:hover {
	background:#eee;
}
ul.menu li a:active {
	background:#ccc;
}


/* submenus
----------------------------------------------- */
ul.menu ul {
	list-style:none;
	margin:0;
}
ul.menu ul li a {
	padding-left:30px;
}


/* section menus
----------------------------------------------- */
ul.section {
	border-top:0;
	margin-bottom:0;
}
ul.section li {
	text-transform:uppercase;
}
ul.section li a {
	background:#bbb;
}
ul.section li a:hover {
	background:#aaa;
}
ul.section li a:active {
	color:#fff;
	background:#666;
}
ul.section li li a {
	background:#ddd;
	border-bottom:1px solid #eee;
}
ul.section li li a:hover {
	background:#ccc;
}
ul.section li li a:active {
	color:#000;
	background:#fff;
}
ul.section ul li {
	text-transform:none;
}
ul.section ul.current li a {
	background:#eee;
	border-bottom:1px solid #fff;
}
ul.section ul.current li a:hover {
	background:#ddd;
}
ul.section ul.current li a:active {
	background:#fff;
}
ul.section li a.current {
	color:#fff;
	background:#666;
}
ul.section li a.current:hover {
	background:#555;
}
ul.section li a.current:active {
	background:#444;
}
ul.section li a.active {
	background:#fff;
	cursor:default;
}
ul.section li.current > a.active,
ul.section li.current > a.active:hover {
	color:#fff;
	background:#666;
	cursor:default;
}


/* table
----------------------------------------------- */
table {
	width:100%;
	border:1px solid #bbb;
	margin-bottom:10px;
}
col.colC {
	width:8em;
}
th, td {
	padding:.2em 1em;
	text-align:left;
}
thead th {
	border-bottom:2px solid #888;
	background:#bbb;
	padding:.4em 1em .2em;
}
thead th.table-head {
	font-size:1em;
	font-weight:normal;
	text-transform:uppercase;
	color:#fff;
	background:#555;
	border:1px solid #555;
}
tbody th,
tbody td {
	border-top:1px solid #bbb;
	border-bottom:1px solid #bbb;
	background:#eee;
}
tbody tr.odd th,
tbody tr.odd td {
	background:#fff;
}
tfoot th,
tfoot td {
	border-top:2px solid #666;
	background:#eee;
}
tfoot tr.total th,
tfoot tr.total td {
	border-top:6px double #666;
}
tfoot tr.total th {
	text-transform:uppercase;
}
th.currency,
td.currency {
	text-align:right;
}


/* forms
----------------------------------------------- */
form {
	overflow:hidden;
}
fieldset {
	border:1px solid #bbb;
	padding:10px;
	position:relative;
	background:#e9e9e9;
	margin-bottom:10px;
}
legend {
	font-size:1.1em;
	padding:.4em .8em;
	background:#fff;
	border:1px solid #bbb;
}
fieldset.login p {
	margin-bottom:1em;
	margin-top:0pt;
}
fieldset p label {
	width:98%;
}
fieldset p input {
	width:98%;
}
fieldset p select {
	width:99%;
}
fieldset.login p label {
	float:left;
	line-height:2em;
	margin-right:3%;
	text-align:right;
	width:32%;
}
fieldset.login p input {
	width:60%;
}
fieldset.login input.button {
	margin-left:35%;
}
form p.notice {
	font-weight:bold;
}
input.search.text {
	width:66%;
}
input.search.button {
	width:28%;
	margin-left:2%;
}


/* articles
----------------------------------------------- */
.articles {
	padding:0;
}
.articles h2 {
	margin:0;
}
#articles {
	padding-top:0;
}
.article {
	border-top:1px solid #666;
	padding-top:.5em;
}
.box .article {
	border-top:3px solid #fff;
	padding:13px 10px 0 10px;
}
.article h2 {
	font-size:2em;
	font-weight:normal;
	text-transform:none;
	color:#333;
	background:transparent;
	padding:0;
	margin:0;
	border:none;
}
.article h3 {
	margin-bottom:.2em;
	font-size:1.6em;
}
.box .first {
	border-top:none;
}
.article h4 {
	font-size:1.2em;
	text-transform:uppercase;
	margin-bottom:.5em;
}
.article a.image {
	float:left; 
	margin:3px 10px 3px 0; 
	padding:4px;
	border:1px solid #bbb;
	background:#fff;
}
.article a.image:hover {
	border:1px solid #666;
}
.article a.image img {
	float:left; 
}
.article p.meta {
	color:#666;
	border-top:1px dotted #999;
	border-bottom:1px dotted #999;
	padding:.3em 0;
	margin-bottom:.8em;
}


/* site information
----------------------------------------------- */
#site_info .box {
	color:#ccc;
	background:#666;
	margin-bottom:10px;
}
#site_info a {
	color:#fff;
}
#site_info a:hover {
	color:#000;
}


/* AJAX sliding shelf
----------------------------------------------- */
#loading {float:right; margin-right:14px; margin-top:-2px;}
.block {padding-bottom:1px;}


/* Accordian
----------------------------------------------- */
.toggler {
	color: #222;
	margin: 0;
	padding: 2px 5px;
	background: #eee;
	border-bottom: 1px solid #ddd;
	border-right: 1px solid #ddd;
	border-top: 1px solid #f5f5f5;
	border-left: 1px solid #f5f5f5;
	font-size:1.1em;
	font-weight: normal;
}
.element h4 {
	margin: 0;
	padding:4px;
	line-height:1.2em;
}
.element p {
	margin: 0;
	padding: 4px;
}
.float-right {
	padding:10px 20px;
	float:right;
}

#accordian-block {
	padding-bottom:10px;
}


/* Mootools Kwicks
----------------------------------------------- */
#kwick-box { 
	padding:0;
	overflow:hidden;
}
#kwick-box h2 { 
	margin:0;
}
#kwick {
	position: relative;
}
#kwick .kwicks {
	display: block;
	background: #999;
	height: 120px;
	list-style:none;
	margin:0;
	overflow:hidden;
}
#kwick li {
	float: left;
	margin:0;
	padding:0;
}
#kwick .kwick {
	display: block;
	cursor: pointer;
	overflow: hidden;
	height: 100px;
	width: 215px;
	padding: 10px;
	background: #fff;
}
#kwick .kwick span {
	color:#fff;
}
#kwick .one {
	background: #666;
}
#kwick .two {
	background: #777;
}
#kwick .three {
	background: #888;
}
#kwick .four {
	background: #999;
}
/***
|''Name:''|LoadRemoteFileThroughProxy (previous LoadRemoteFileHijack)|
|''Description:''|When the TiddlyWiki file is located on the web (view over http) the content of [[SiteProxy]] tiddler is added in front of the file url. If [[SiteProxy]] does not exist "/proxy/" is added. |
|''Version:''|1.1.0|
|''Date:''|mar 17, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#LoadRemoteFileHijack|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
***/
//{{{
version.extensions.LoadRemoteFileThroughProxy = {
 major: 1, minor: 1, revision: 0, 
 date: new Date("mar 17, 2007"), 
 source: "http://tiddlywiki.bidix.info/#LoadRemoteFileThroughProxy"};

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

bidix.core.loadRemoteFile = loadRemoteFile;
loadRemoteFile = function(url,callback,params)
{
 if ((document.location.toString().substr(0,4) == "http") && (url.substr(0,4) == "http")){ 
 url = store.getTiddlerText("SiteProxy", "/proxy/") + url;
 }
 return bidix.core.loadRemoteFile(url,callback,params);
}
//}}}
<<tiddler Affiche with:'menu'>>


^^[[TiddlyWiki|http://www.tiddlywiki.fr/]] version <<version>>
[[framework CSS Fluid 960|http://www.designinfluences.com/fluid960gs/]]
© 2007 [[UnaMesa|http://www.unamesa.org/]]^^
<html><nowiki>
	<div class="article">
		<h3>
			<a href="#">Marque-pages</a>
		</h3>
		<h4>Mes liens internet</h4>
		<p class="meta"><a href="http://fr.wikipedia.org/wiki/M%C3%A9m%C3%A9nil">Méménil</a> — Vendredi, 11 Décembre 2009</p>
		<a href="#" class="image">
		<img src="photo_60x60.jpg" width="60" height="60" alt="photo" />
		</a>
		<p><a href="http://www.lipsum.com/">Lorem ipsum</a> dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. <a href="http://www.google.fr">Google</a></p>
	</div>
</html>

/*
-----------------------------------------------
Navigation
----------------------------------------------- */

/* navigation (horizontal subnavigation)
----------------------------------------------- */
ul.nav,
ul.nav * { margin:0;padding:0;}
ul.nav {
  position:relative;
  background:#666;
  max-width:100%;
  height:2.5em;
  }
ul.nav li {
	cursor:pointer;
	float:left;
	text-align:center;
	list-style-type:none;
	font-weight:normal;
}
ul.nav li ul {
	cursor:default;
	width:100%;
	max-width:100%;
	position:absolute;
	height:auto;
	top:2.5em;
	background-position:0 0 !important;
	left:-9000px;
}
ul.nav li ul li {
	padding:0;
	border:none;
	width:auto;
	max-width:none;
}
ul.nav li a {
	color:#fff;
	background:#666;
	font-weight:bold;
	text-decoration:none;
	display:block;
	float:left;
	padding:0 1em;
	height:2.4em;
	line-height:2.5em;
}
ul.nav li ul li a {
	position:relative !important; /* ie Mac */
	cursor:pointer !important;
	white-space:nowrap;
	line-height:2em;
	height:2em;
	font-weight:normal;
	color:#666;
	background-position:0 50% !important;
}

ul.nav li:hover a,
ul.nav li a:hover,
ul.nav li a:focus {color:#000; background:#ccc;}
ul.nav li a:active {color:#666; background:#fff;}
ul.nav li:hover ul {left:0;z-index:10}
ul.nav li ul,
ul.nav li {background:#ccc !important}
ul.nav li:hover ul li a {color:#444;}
ul.nav li:hover ul li a:hover {color:#000; background:#fff;}
ul.nav li:hover ul li a:active {color:#666; background:#fff;}

ul.nav li.current a {color:#666; background:#fff; cursor:default; font-weight:bold;}
ul.nav li.current ul {left:0;z-index:5}
ul.nav li.current ul,
ul.nav li.current {background:#ccc !important}
ul.nav li.current ul li a {color:#444; background:#ccc; font-weight:normal;}
ul.nav li.current ul li a:hover {color:#000; background:#fff;}
ul.nav li ul li.current a,
ul.nav li ul li.current a:hover,
ul.nav li.current:hover ul li a:active {color:#666; background:#fff;}


/* navigation (vertical subnavigation)
----------------------------------------------- */
ul.nav {
  background:#666;
}
ul.main li {
  position:relative;
  top:0;
  left:0;
}
ul.main li ul {
  border-top:0;
}
ul.main li ul li {
  float:left;
}
ul.main li a {
	height:2.5em;
	line-height:2.5em;
	border:0;
	color:#fff;
	background:#666;
}
ul.main li ul li a {
  width:12em;
  line-height:2em;
  height:2em;
  text-align:left;
  color:#fff;
  border-top:1px solid #444;
  background:#444;
}
ul.main li a:focus {color:#fff; background:#666;}
ul.main li ul li a:hover {
  color:#fff;
  background:#555;
}
ul.main li:hover a {
  color:#fff;
  background:#555;
}
ul.main li:hover ul li a {color:#fff;}
ul.main li:hover ul li a:hover {color:#fff; background:#444;}
ul.main li:hover a:active {background:#444;}
ul.main li:hover ul li a:active {color:#fff; background:#222;}


/* secondary list
----------------------------------------------- */
ul.nav li.secondary {
	float:right;
	color:#cde;
	background:transparent !important;
}
ul.nav li.secondary span.status {
	float:left;
	padding:0 1em;
	line-height:2.77em;
	height:2.77em;
  font-size:0.9em;
}
ul.nav li.secondary span.status a {
	float:none;
	display:inline;
	padding:0;
	height:auto;
	line-height:auto;
	color:#cde;
	background:transparent;
}
ul.nav li.secondary span.status a:hover {
	color:#fff;
	background:transparent;
}
ul.nav li.secondary span.status span {
	text-transform:capitalize;
}
ul.nav li.secondary:hover a {
	color:#fff;
	background:#666;
}
ul.nav li.secondary:hover a:hover {
	background:#555;
}
ul.nav li.secondary:hover a:active {background:#444;}
/***
|''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:''|~PopupMacro|
|''Author:''|Saq Imtiaz (mod Tobias Beer)|
|''Version:''|1.1 (2009-11-08)|
|''Description:''|Create popups with custom content|
|''Source:''|http://tbGTD.tiddlyspor.com/#PopupMacro|
|''Documentation:''|http://tw.lewcid.org/#PopupMacroDocs|
|''Requires:''|TW Version 2.0.8 or better|
@@((mod for tbGTD(^removed styles and code cleanup)))@@
!Code
***/
//{{{
config.macros.popup={
err1:'missing macro parameters',
err2:'missing label or content parameter',
arrow:document.all?"▼":"▾",
handler:function(place,macroName,params,wikifier,paramString,theTiddler){
var cls,id,lbl,src,click;
if(!params[0]||!params[1]){createTiddlyError(place,this.err1,this.err2);return false;}
lbl=params[0];
src=(params[1]).replace(/\$\)\)/g,">>");
id=params[2]?params[2]:'nestedpopup';
cls='popup'+(params[3]?' ' +params[3]:'');
click=function(e){
	var btn,nest,p,tgt;
	e=e||window.event;
	tgt=resolveTarget(e);
	nest=!isNested(tgt);
	id=nest?id:'popup';
	if(nest&&Popup.stack.length>1)Popup.removeFrom(1);
	else if(!nest&&Popup.stack.length>0)Popup.removeFrom(0);
	p=createTiddlyElement(document.body,"ol",id,cls,null);
	Popup.stack.push({root:this,popup:p});
	wikify(src,p);
	Popup.show(p,true);e.cancelBubble=true;if(e.stopPropagation)e.stopPropagation();return false;
}
btn=createTiddlyButton(place,lbl+this.arrow,lbl,click,null);
}
}
window.isNested=function(el){
	var c=document.getElementById("contentWrapper");
	while(el!=null){if(el==c)return true;el=el.parentNode;}return false;
}
setStylesheet('#nestedpopup {margin-left:1em;}','PopupMacroStyles');
//}}}
Pour bien commencer avec un TiddlyWiki vide, vous devez modifier les tiddlers suivants :
* SiteTitle & SiteSubtitle: Le titre et le sous-titre du site, visibles ci-dessus (après enregistrement, ils apparaîtront également dans la barre de titre du navigateur)
* MainMenu: Le menu (généralement à gauche)
* DefaultTiddlers: Contient le nom des tiddlers que vous souhaitez ouvrir automatiquement au chargement de votre TiddlyWiki
Vous devez également entrer votre nom d'utilisateur pour signer vos modifications : <<option txtUserName>>
/* http://meyerweb.com/eric/tools/css/reset/ */
/* v1.0 | 20080212 */

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
	margin: 0;
	padding: 0;
	border: 0;
	outline: 0;
	font-size: 100%;
	vertical-align: baseline;
	background: transparent;
}
body {
	line-height: 1;
}
ol, ul {
	list-style: none;
}
blockquote, q {
	quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
	content: '';
	content: none;
}

/* remember to define focus styles! */
:focus {
	outline: 0;
}

/* remember to highlight inserts somehow! */
ins {
	text-decoration: none;
}
del {
	text-decoration: line-through;
}

/* tables still need 'cellspacing="0"' in the markup */
table {
	border-collapse: collapse;
	border-spacing: 0;
}
<html><div class='article'>
<h3>Fluid 960 CSS Framework</h3>
</div></html>
<<tiddler Aujourdhui>>  <<tiddler 'Horloge Numérique'>>
[img[chakra.png]]
<<tiddler 'Horloge Numérique'>><html><nowiki>
<div class="box">
			<h2>
				<a href="#" id="toggle-forms">Tableau de Bord</a>
			</h2>
			<div class="block" id="forms">
				<form action="">
					<fieldset class="login">
						<legend>Login Information</legend>
						<p>
							<label>Utilisateur : </label>
							<input type="text" name="username" value="" />
						</p>
						<p>
							<label>Mot de Passe : </label>
							<input type="password" name="password" />
						</p>
						<input class="confirm button" type="submit" value="Connexion" />
					</fieldset>
</form><br>
</html>
<<tiddler Affiche with:'star'>><<tiddler Affiche with:'note'>>
<<tiddler Affiche with:'css'>>
/*
	960 Grid System ~ Text CSS.
	Learn more ~ http://960.gs/

	Licensed under GPL and MIT.
*/

/* =Basic HTML
--------------------------------------------------------------------------------*/

body
{
	font: 13px/1.5 Helvetica, Arial, 'Liberation Sans', FreeSans, sans-serif;
}

a:focus
{
	outline: 1px dotted invert;
}

hr
{
	border-color: #ccc;
	border-style: solid;
	border-width: 1px 0 0;
	clear: both;
	height: 0;
}

/* =Headings
--------------------------------------------------------------------------------*/

h1
{
	font-size: 25px;
}

h2
{
	font-size: 23px;
}

h3
{
	font-size: 21px;
}

h4
{
	font-size: 19px;
}

h5
{
	font-size: 17px;
}

h6
{
	font-size: 15px;
}

/* =Spacing
--------------------------------------------------------------------------------*/

ol
{
	list-style: decimal;
}

ul
{
	list-style: square;
}

li
{
	margin-left: 30px;
}

p,
dl,
hr,
h1,
h2,
h3,
h4,
h5,
h6,
ol,
ul,
pre,
table,
address,
fieldset
{
	margin-bottom: 20px;
}
/***
|''Name:''|TiddlerAliasPlugin|
|''Version:''|1.0.0 BETA 4 (2009-03-30)|
|''Source:''|http://tiddlywiki.abego-software.de/Beta.html#TiddlerAliasPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|&copy; 2009 [[abego Software|http://www.abego-software.de]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 1.5.0.7 or better; InternetExplorer 6.0|
!Description

Reference a tiddler through an alias (or even through many aliases). E.g. a tiddler "William Shakespeare" may also be referenced as {{{[[Shaxper]]}}}.

When editing a tiddler you may enter alternative names for the tiddler in the "Alias" field (below the tags field), similar to the way you enter tags. You may even specify multiple alias names, separated by spaces. Alias names containing spaces must be written as {{{[[...]]}}}

Also this plugin implements the "Auto Non-Space Alias" feature: for tiddlers with titles containing whitespaces an alias is automatically created that has every whitespace replaced by a dash ("-"). E.g. a tiddler called [[Tiddler with no alias defined]] can also be referenced by [[Tiddler-with-no-alias-defined]].

!Revision history
* v1.0.0 Beta 4 (2009-03-30)
** Bugfix: ToggleLinks does not work when TiddlerAliasPlugin is installed (Thanks to Jonnan West for reporting the bug)
* v1.0.0 Beta 3 (2006-09-23)
** Support "Auto Non-Space Alias" feature: For tiddler with titles containing whitespaces an alias is automatically created that has every whitespace replaced by a dash ("-")
* v1.0.0 Beta 2 (2006-09-22)
** Bugfix: Tiddler is displayed more than once when opened both through title and alias (Thanks to KenGirard for reporting)
* v1.0.0 Beta 1 (2006-09-21)
** Beta 1 release
!Code
***/
//{{{
	
//============================================================================
//============================================================================
//		   TiddlerAliasPlugin
//============================================================================
//============================================================================

// Only install once
if (!version.extensions.TiddlerAliasPlugin) {

version.extensions.TiddlerAliasPlugin = {
	major: 1, minor: 0, revision: 0, beta: 4,
	date: new Date(2009,2,30), 
	source: "http://tiddlywiki.abego-software.de/Beta.html#TiddlerAliasPlugin",
	licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",
	copyright: "Copyright (c) abego Software GmbH, 2005-2009 (www.abego-software.de)"
};

(function() {

window.abegoTiddlerAlias = {
	lingo:  {
		aliasPrompt: "Type alias names (i.e. alternative names for this tiddler) separated with spaces, [[use double square brackets]] if necessary"
	}, 
	
	editTemplateExtension: "<div class='editor' macro='edit alias'></div><div class='editorFooter'><span macro='message abegoTiddlerAlias.lingo.aliasPrompt'></span></div>"
};

var oldFetchTiddler;
var oldSaveTiddler;
var oldDisplayTiddler;

var fWithAutoNonSpaceAlias = true;

function withAutoNonSpaceAlias() {
	return fWithAutoNonSpaceAlias;
}

function addNonSpaceAlias(map, title) {
	var s = title.replace(/\s/g,"-");
	if (s != title)
		map[s] = title;
}

function calcAliases() {
	var result = {};
	store.forEachTiddler(function(title,tiddler) {
		var s = store.getValue(tiddler,"alias");
		if (s) {
			var p = s.parseParams("list",null,false,true);
			for(var i=1; i<p.length; i++)
				result[p[i].value] = title;
		}
		if (withAutoNonSpaceAlias())
			addNonSpaceAlias(result,title);
	});
	return result;
}

// Returns a map that maps an alias name to the title of the tiddler
abegoTiddlerAlias.getAliases = function() {
	if (!store.aliases)
		store.aliases = calcAliases();
	return store.aliases;
}

// Returns the title of the tiddler for the given alias.
// When no such alias is defined but a tiddler with that name exists the alias is returned.
// Otherwise null is returned.
abegoTiddlerAlias.getAliasTitle = function(alias) {
	var t = abegoTiddlerAlias.getAliases()[alias];
	return t ? t : (store.fetchTiddler(alias) ? alias : null)
}

function hasEditTemplateExtension(s) {
	return s.indexOf(abegoTiddlerAlias.editTemplateExtension) >= 0;
}

function addEditTemplateExtension(s) {
	if (s && !hasEditTemplateExtension(s)) {
		var i = s.lastIndexOf("</div>");
		if (i >= 0)
			return s.slice(0,i+6)+"\n"+abegoTiddlerAlias.editTemplateExtension+s.slice(i+6);
	}
	return null;
}

function hijackFetchTiddler() {
	oldFetchTiddler = store.fetchTiddler;

	store.fetchTiddler = function(title) {
		var result = oldFetchTiddler.apply(this, arguments);
		if (!result && title) {
			title = abegoTiddlerAlias.getAliases()[title];
			if (title)
				result = oldFetchTiddler.apply(this, [title])
		}
		return result;	
	};
}

function hijackSaveTiddler() {
	oldSaveTiddler = TiddlyWiki.prototype.saveTiddler;
	TiddlyWiki.prototype.saveTiddler = function() {
		var result = oldSaveTiddler.apply(this, arguments);
		delete store.aliases;				
		return result;	
	}
}


function hijackDisplayTiddler() {
	oldDisplayTiddler = Story.prototype.displayTiddler;
	Story.prototype.displayTiddler = function(srcElement,title,template,animate,slowly,customFields,toggle,animationSrc) {
		// Ensure that a tiddler is always opened with its "original" title (not an alias)
		var tiddler = store.fetchTiddler(title);
		if (tiddler) 
			title = tiddler.title;
		return oldDisplayTiddler.apply(this, [srcElement,title,template,animate,slowly,customFields,toggle,animationSrc]);
	}
}
	

function modifyEditTemplate() {
	// The shadow tiddler
	var s = addEditTemplateExtension(config.shadowTiddlers["EditTemplate"]);
	if (s) 
		config.shadowTiddlers["EditTemplate"] = s;
	
	// The "real" tiddler (if defined)
	var t = store.getTiddler("EditTemplate");
    if (t && !hasEditTemplateExtension(t.text))
          t.set(null,addEditTemplateExtension(t.text));		
}

// Requires store is defined.
function doHijacking() {
	hijackFetchTiddler();
	hijackSaveTiddler();
	hijackDisplayTiddler();
	modifyEditTemplate();
}

// for debugging the plugin is not loaded through the systemConfig mechanism but via a script tag. 
// At that point in the "store" is not yet defined. In that case hijackFetchTiddler through the restart function.
// Otherwise hijack now.
if (!store) {
	var oldRestartFunc = restart;
	window.restart = function() {
		doHijacking();
		oldRestartFunc.apply(this,arguments);
	};
} else
	doHijacking();

// To support the access through the "message" macro
config.abegoTiddlerAlias = abegoTiddlerAlias;
})();
} // of "install only once"


/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.

Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
***/

//}}}
/***
|''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
!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","",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;
}

//}}}
/***

An under construction replacement for toggleTag

<<tTag mode:text text:D tag:Done>>
<<tTag mode:text text:N tag:Next>>
***/
//{{{

merge(config.macros,{

	tTag: {

		createIfRequired: true,
		shortLabel: "[[%0]]",
		longLabel: "[[%0]] [[%1]]",

		handler: function(place,macroName,params,wikifier,paramString,tiddler) {

			var parsedParams = paramString.parseParams("tags",null,true);
			
			if (!tiddler)
				tiddler = store.getTiddler(getParam(parsedParams,"title"));
			
			var tag = getParam(parsedParams,"tag","checked");
			var title = getParam(parsedParams,"title",tiddler.title);

			var refreshAll = getParam(parsedParams,"refreshAll",false);

			var defaultLabel = (title == tiddler.title ? this.shortLabel : this.longLabel);
			var label = getParam(parsedParams,"label",defaultLabel);

			var theTiddler =  title == tiddler.title ? tiddler : store.getTiddler(title);

			var mode = getParam(parsedParams,"mode","checkbox");

			var theClass = getParam(parsedParams,"class",tag+"Button");


			var currentValue = theTiddler && 
				(macroName == "tTag" ? theTiddler.isTagged(tag) : store.getValue(theTiddler,tag)=="true");

			if (mode == "checkbox") {
				// create the checkbox

				var cb = createTiddlyCheckbox(place, label.format([tag,title]), currentValue, function(e) {
					if (!store.tiddlerExists(title)) {
						if (config.macros.tTag.createIfRequired) {
							var content = store.getTiddlerText(title); // just in case it's a shadow
							store.saveTiddler(title,title,content?content:"",config.options.txtUserName,new Date(),null);
						}
						else 
							return false;
					}
					//store.suspendNotifications(); 
					if (macroName == "tTag")
						store.setTiddlerTag(title,this.checked,tag);
					else // it must be tField
						store.setValue(title,tag,this.checked?"true":null);

					if (refreshAll) {
						 story.forEachTiddler(function(title,element) {
						   if (element.getAttribute("dirty") != "true") 
						     story.refreshTiddler(title,false,true);
						 });
					}

					//store.resumeNotifications();
					return true;
				});
			}
			else if (mode == "text") {
				var text = getParam(parsedParams,"text","X");

				var cl = createTiddlyButton(place, text, "Bascule "+text, function(e) {
					if(!e) var e = window.event;

					if (!store.tiddlerExists(title)) {
						if (config.macros.tTag.createIfRequired) {
							var content = store.getTiddlerText(title); // just in case it's a shadow
							store.saveTiddler(title,title,content?content:"",config.options.txtUserName,new Date(),null);
						}
						else 
							return false;
					}
					//store.suspendNotifications(); 
					var currentState = this.getAttribute("state")=="true";
					var newState = !currentState;

					store.setTiddlerTag(title,newState,tag);
					if (macroName == "tTag")
						store.setTiddlerTag(title,newState,tag);
					else // it must be tField
						store.setValue(title,tag,newState?"true":null);

					// this is terrible please refactor
					if (currentState) {
						cl.setAttribute("state","false");
						removeClass(cl,"on");
						addClass(cl,"off");
					}
					else {
						cl.setAttribute("state","true");
						removeClass(cl,"off");
						addClass(cl,"on");
					}

					//refreshDisplay(); 
					if (refreshAll) {
						 story.forEachTiddler(function(title,element) {
						   if (element.getAttribute("dirty") != "true") 
						     story.refreshTiddler(title,false,true);
						 });
					}
					//store.resumeNotifications();

					e.cancelBubble = true;
					if(e.stopPropagation) e.stopPropagation();

					return false;
				});

				addClass(cl,theClass.replace(/ /g,''));

				if (currentValue) {
					cl.setAttribute("state","true");
					removeClass(cl,"off");
					addClass(cl,"on");
				}
				else {
					cl.setAttribute("state","false");
					removeClass(cl,"on");
					addClass(cl,"off");
				}
				
			}
			else if (mode == "popup") {
				var cl = createTiddlyButton(place, "zzz", "Toggle "+text, function(e) {
					// props to Saq
					if(!e) var e = window.event;
					var popup = Popup.create(this);
					createTiddlyButton(createTiddlyElement(popup,"li"),"foo","bar",function(e) {
						// under contruction
						alert(this.getAttribute("tag"));
					});
					Popup.show(popup,false);
					e.cancelBubble = true;
					if(e.stopPropagation) e.stopPropagation();
					return false ;
				});
			}

		}
	}

});

config.macros.tField = config.macros.tTag;

setStylesheet(["",
".button.off {border-style:none;background:#fff;color:#ccc;}",
".button.on {border-style:none;background:#ddd;color:#000;}",
// TODO move this css elsewhere
"#realmSelector .button.off {margin:0 0.5em;padding:0 1em;border:2px solid #aaa;background:#eee;color:#333;}", // actually reversed, ie off is "on"
"#realmSelector .button.on {margin:0 0.5em;padding:0 1em;border:2px solid #999;background:#999;color:#ccc;}", // actually reversed, ie off is "on"
""].join("\n"),"tTag");

//}}}
<<refreshDisplay>>  <<newTiddler>>  <<forEachTiddler where 'tiddler.tags.contains("top")' write
 '"  [["+tiddler.title+"]]"'>>  <<popup ★ [[<<tiddler ★##star$))]]>>
/***
Description: Contains the stuff you need to use Tiddlyspot
Note, you also need UploadPlugin, PasswordOptionPlugin and LoadRemoteFileThroughProxy
from http://tiddlywiki.bidix.info for a complete working Tiddlyspot site.
***/
//{{{

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

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

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

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

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

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

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

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

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

});
//}}}
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 13/12/2009 09:44:53 | JBF | [[index.html|http://oxydum.tiddlyspot.com/index.html]] | [[store.cgi|http://oxydum.tiddlyspot.com/store.cgi]] | . | [[oxydum.html | http://oxydum.tiddlyspot.com/oxydum.html]] |  |
| 13/12/2009 09:45:10 | JBF | [[index.html|http://oxydum.tiddlyspot.com/index.html]] | [[store.cgi|http://oxydum.tiddlyspot.com/store.cgi]] | . | [[index.html | http://oxydum.tiddlyspot.com/index.html]] | . |
| 13/12/2009 11:09:35 | JBF | [[index.html|file:///home/@@/index.html]] | [[|file:///home/@@/]] | . | [[index.html | file:///home/@@/index.html]] |  | failed |
| 13/12/2009 11:10:09 | JBF | [[index.html|file:///home/@@/index.html]] | [[store.cgi|file:///home/@@/store.cgi]] | . | [[index.html | file:///home/@@/index.html]] |  |
| 13/12/2009 11:17:27 | JBF | [[index.html|file:///home/@@/index.html]] | [[store.cgi|http://oxydum.tiddlyspot.com/store.cgi]] | . | [[index.html | http://oxydum.tiddlyspot.com/index.html]] | . | ok |
| 13/12/2009 11:19:08 | JBF | [[index.html|file:///home/@@/index.html]] | [[store.cgi|http://oxydum.tiddlyspot.com/store.cgi]] | . | [[index.html | http://oxydum.tiddlyspot.com/index.html]] | . | ok |
| 13/12/2009 11:19:32 | JBF | [[index.html|file:///home/@@/index.html]] | [[store.cgi|file:///home/@@/store.cgi]] | . | [[index.html | file:///home/@@/index.html]] | http://oxydum.tiddlyspot.com |
| 13/12/2009 11:22:06 | JBF | [[index.html|file:///home/@@/index.html]] | [[store.cgi|http://oxydum.tiddlyspot.com/store.cgi]] | . | [[index.html | http://oxydum.tiddlyspot.com/index.html]] | . |
| 13/12/2009 11:22:12 | JBF | [[index.html|file:///home/@@/index.html]] | [[store.cgi|file:///home/@@/store.cgi]] | . | [[index.html | file:///home/@@/index.html]] | http://oxydum.tiddlyspot.com | ok |
| 13/12/2009 11:22:50 | JBF | [[index.html|file:///home/@@/index.html]] | [[store.cgi|http://oxydum.tiddlyspot.com/store.cgi]] | . | [[index.html | http://oxydum.tiddlyspot.com/index.html]] | . |
/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.3|
|''Date:''|Feb 24, 2008|
|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|
|''Documentation:''|http://tiddlywiki.bidix.info/#UploadPluginDoc|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
	major: 4, minor: 1, revision: 3,
	date: new Date("Feb 24, 2008"),
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0'
};

//
// Environment
//

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

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

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

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

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

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

//
// uploadOptions Macro
//

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

//
// upload functions
//

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

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

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

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

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

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

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

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

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

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

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

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

//
// Utilities
// 

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

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

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

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

//
// Initializations
//

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

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

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

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


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


//}}}

This document is a ~TiddlyWiki from tiddlyspot.com.  A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.

@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below.  Then configure privacy and other site settings at your [[control panel|http://oxydum.tiddlyspot.com/controlpanel]] (your control panel username is //oxydum//).
<<tiddler TspotControls>>
See also GettingStarted.

@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the "save to web" button in the column on the right.

@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick.  You can make changes and save them locally without being connected to the Internet.  When you're ready to sync up again, just click "upload" and your ~TiddlyWiki will be saved back to tiddlyspot.com.

@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]].  Also visit [[TiddlyWiki.org|http://tiddlywiki.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help.  If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].

@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site.  Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions.
/***
|Description:|Configuration|
***/
//{{{
config.options.chkHttpReadOnly = false;
showBackstage = false;
config.options.txtTheme = 'FrenchTouch';

config.options.chkSaveBackups = false;
config.options.chkAutoSave = true;

//}}}
!usage
{{{[img[chakra.png]]}}}
[img[chakra.png]]
!notes
चक्रं
!type
image/png
!file
./chakra.png
!url

!data
data:image/png;base64,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
!star
{{menuH{liste des favoris}}}
<<tiddlerList tags:"star" itemTemplate:"*%0 \n" -modified">>