<!--{{{-->
<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>>
Questo software usa ~JavaScript per la gestione interattiva e dinamica di elementi HTML, con l'ausilio di stili CSS, in modalità che ''non possono essere fornite in forme alternative''. Si prega perciò di tenere presente che i contenuti di queste pagine ''non possono essere visualizzati quando gli script sono disabilitati oppure non supportati'' dal browser che si sta utilizzando, indipendentemente da ogni altra considerazione. 

Di conseguenza, //attualmente//, questo software non dovrebbe essere utilizzato nei contesti citati dalla normativa italiana (''Legge 9 gennaio 2004, n. 4, requisito n. 15''), in quanto non aderente alle disposizioni circa il rispetto dei ''requisiti di accessibilità'' nell'ambito della pubblica amministrazione e dei servizi di pubblica utilità. 

Quanto sopra non significa necessariamente che persone disabili non siano in grado di  fruire di questi contenuti, //se la gestione degli script è supportata dal browser utilizzato ed è abilitata.//  Per ulteriori informazioni sul grado di accessibilità di ~TiddlyWiki è possibile consultare questa pagina: [[web2access.org|http://www.web2access.org.uk/product/63/]]. 

----
{{center{
~TiddlyWiki versione <<version>>   <<toggleSideBar "" "Apri/Chiudi la barra laterale" hide>> © 2007 [[UnaMesa|http://www.unamesa.org/]]  -  Aggiornato il: <script>wikify((new Date(document.lastModified)).formatString("0DD-0MM-YYYY 0hh:0mm"), place);
</script>
}}}
{{tagged{//I was trying to say to people, 
"of course, it’ll never be able to save; 
it’s impossible for a HTML file to save 
changes onto your local harddrive, 
don’t be ridiculous".//
                            {{right{//Jeremy Ruston//}}} }}}Il punto di domanda che non a caso appare sul titolo di questa pagina, vuole sottolineare il fatto che me lo sto ancora chiedendo. Forse se lo sta ancora chiedendo anche il suo autore, [[Jeremy Ruston|http://www.tiddlywiki.org/]]. 

~TiddlyWiki è un programma che permette di raccogliere e organizzare in un singolo file una serie di appunti in modo veloce ed efficiente. Il programma non richiede alcuna installazione e per funzionare necessita solamente di un semplice browser (~FireFox, Internet Explorer, Safari, Opera, ecc.). Essendo un singolo file che può essere  tenuto su una chiavetta di memoria, spedito via e-mail o trasferito su un server web per la consultazione in rete, risulta un modo relativamente //semplice//, //immediato// ed estremamente //trasportabile// per raccogliere e gestire contenuti di vario genere. 

Per chi sa chiaramente che cos'è un Wiki, ~TiddlyWiki è un singolo file HTML strutturato in modo tale da comprendere e gestire i contenuti, le funzioni (modifica, registrazione, classificazione e ricerca) e gli stili di formattazione di un Wiki. ~TiddlyWiki si differenzia da un Wiki in quanto il suo funzionamento non dipende da un server e da un database, ed è rivolto ad un utilizzo più personale che collaborativo. Inoltre si presta ad applicazioni pratiche ancora da esplorare. 

Per quanto riguarda i contenuti, ~TiddlyWiki permette di inserire testi in HTML, puro testo, oppure per mezzo della marcatura Wiki. L'aspetto dei contenuti può essere totalmente modificato e personalizzato per mezzo di stili di formattazione (CSS), alcuni già predisposti ma facilmente modificabili. 

Da un punto di vista funzionale, ~TiddlyWiki può essere potenziato aggiungendo estensioni (plugin), molte delle quali si possono trovare già predisposte, oppure scrivendo codice in ~JavaScript. Su questi temi mi soffermerò ampiamente nelle pagine successive. 

Per certi aspetti, ~TiddlyWiki è una ''libreria ~JavaScript'' che gestisce e organizza informazioni memorizzate in formato HTML. Si tratta di una struttura di base che per mezzo di una serie di personalizzazioni talvolta complesse potrebbe fornire un ambiente di sviluppo per la realizzazione di applicazioni complete. 
!!!Il rovescio della medaglia
Tutto questo può sembrare troppo bello per essere vero, infatti è opportuno tenere in considerazione alcuni aspetti critici:  
*Semplicità e immediatezza dipendono da molti fattori, dall'utilizzo che se ne vuol fare e dalle capacità di chi lo utilizza. Spesso la personalizzazione richiede conoscenze degli Standard Web che pochi utilizzatori possiedono.   
*Non tutti i browser sono in grado supportare le funzioni di registrazione in locale dei contenuti, ed alcuni richiedono particolari accorgimenti. Può capitare che alcune personalizzazioni, o estensioni, possano essere supportate da un solo browser (di solito ~FireFox). 
*La gestione dei contenuti su un server Web dipende dal tipo di server utilizzato per l'hosting. Le modalità per registrare i contenuti in linea dipendono dal tipo di servizi di cui il server dispone. Alcuni server che iniettano contenuti pubblicitari nelle pagine web potrebbero dare fastidio. ~TiddlyWiki non è un CMS (Content Management System) nel senso stretto del termine e il suo utilizzo in rete deve sempre tener conto delle limitazioni in fatto di accessibilità dei contenuti e di compatibilità con gli Standard Web.   
*Molti sviluppatori hanno realizzato delle varianti specializzate per usi specifici, ma la maggior parte di queste sono disponibili solo in lingua inglese.     
*Il paradigma //tutto in un singolo file HTML// non si applica ai contenuti non testuali, quali immagini, e contenuti multimediali. Molti sono gli accorgimenti per risolvere questo problema, ma come capita spesso, la cura potrebbe risultare peggiore del male.  
*~TiddlyWiki non è un database, anche se ci assomiglia molto. Le dimensioni dei contenuti incidono direttamente sulle dimensioni del file e sui tempi di caricamento, sia in locale che in rete. Se la mole e la complessità strutturale dei dati da gestire supera certi limiti, si possono utilizzare delle estensioni specializzate che richiedono competenze tecniche, oppure è opportuno utilizzare strumenti più adatti allo scopo.   
[[Introduzione]]
<!--{{{-->
<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>
<!--}}}-->
L'inserimento di immagini in ~TiddlyWiki è un piccolo problema, che si rivela spesso piuttosto serio. 

La marcatura wiki per inserire un'immagine è:
{{{[img[http://www.xxx.org/images/nome.jpg]]}}} 
oppure con un indirizzamento locale: 
{{{[>img[Questa è la mia immagine|icona_80x80.jpg]]}}}
[img[Questa è la mia immagine|icona_80x80.jpg]]

Molto importante fornire sempre il testo alternativo per l'immagine. Notare ora la piccola differenza che fa la differenza (> allinea l'immagine a destra):
{{{[>img[Questa immagine è a destra?|icona_80x80.jpg]]}}} 
[>img[Questa immagine è a destra?|icona_80x80.jpg]] 



Se questa sintassi può apparire un po' astrusa, possiamo posizionare l'immagine con un frammento HTML:  
{{{
<html>
<img src="icona_80x80.jpg" 
width="40" height="40" alt="Sempre la stessa immagine" />
</html>
}}}
<html>
<img src="icona_80x80.jpg" 
width="40" height="40" alt="Sempre la stessa immagine" />
</html>
con alcuni ritocchi sullo stile:
{{{
<html>
<img src="icona_80x80.jpg" 
style="width: 160px; height: 40px;" alt="Sempre la stessa immagine" />
</html>
}}}
<html><img src="icona_80x80.jpg" style="width: 160px; height: 40px;" alt="Sempre la stessa immagine" /></html>

oppure con un'azione radicale (Possiamo agire globalmente sul selettore img oppure definire una classe specifica):
{{{
<html>
  <style>
    .imgright { float: right; margin-left:3em; margin-right:1em }
  </style>
<img src="icona_80x80.jpg" alt="Sempre la stessa immagine" />
</html>
}}}
<html>
  <style>
    .imgright { float: right; margin-left:3em; margin-right:1em }
  </style>
<img class="imgright" src="icona_80x80.jpg" 
alt="Sempre la stessa immagine" />
</html>
Possiamo in alternativa agire sullo sfondo di un elemento per controllare l'inserimento e il posizionamento dell'immagine: 
{{{
<html>
<style>
.test { height: 80px;
	background-image: url('boschina.jpg'); 
        background-repeat: no-repeat; 
        background-color:#fff; 
        color:#edb; 
        border-bottom:0px; }
</style>
<div class="test"></div>
</html>
}}}
<html>
<style>
.test { height: 80px;
	background-image: url('boschina.jpg'); 
        background-repeat: no-repeat; 
        background-color:#fff; 
        color:#edb; 
        border-bottom:0px; }
</style>
<div class="test"></div>
</html>

!Problema dei collegamenti locali/esterni
Se il file principale viene pubblicato su un sito su cui si possono predisporre anche delle cartelle locali contenenti i file delle immagini, non ci sono problemi nella visualizzazione delle pagine in linea o in locale.
Se invece, come nel caso di tiddlyspot, le immagini devono essere recuperate da un altro sito, non è possibile vedere le immagini se il file viene usato in locale. Per risolvere questo problema, tiddlytool dispone di una plugin che permette di configurare dei collegamenti bivalenti. 
Forse potrebbe bastaere una semplice macro che se il file non è in locale aggiunge un prefisso "http://...." al pecorso locale. 
Anche se c'è una possibilità di includere le immagini nel file in formato base-64, è opportuno evitarlo per una serie di problemi collaterali.
 
/***
|Name:|HideWhenPlugin|
|Description:|Allows conditional inclusion/exclusion in templates|
|Version:|3.1 ($Rev: 3919 $)|
|Date:|$Date: 2008-03-13 02:03:12 +1000 (Thu, 13 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
For use in ViewTemplate and EditTemplate. Example usage:
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}
***/
//{{{

window.hideWhenLastTest = false;

window.removeElementWhen = function(test,place) {
	window.hideWhenLastTest = test;
	if (test) {
		removeChildren(place);
		place.parentNode.removeChild(place);
	}
};


merge(config.macros,{

	hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( eval(paramString), place);
	}},

	showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !eval(paramString), place);
	}},

	hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAny(params), place);
	}},

	showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAny(params), place);
	}},

	hideWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);
	}},

	showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);
	}},

	hideWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.title == params[0], place);
	}},

	showWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.title != params[0], place);
	}},

	'else': { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !window.hideWhenLastTest, place);
	}}

});

//}}}

/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2009.04.11 [1.9.5] pass current tiddler object into wrapper code so it can be referenced from within 'onclick' scripts
2009.02.26 [1.9.4] in $(), handle leading '#' on ID for compatibility with JQuery syntax
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 5, date: new Date(2009,4,11)};

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

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

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

// // GLOBAL FUNCTION: $(...) -- 'shorthand' convenience syntax for document.getElementById()
//{{{
if (typeof($)=='undefined') { function $(id) { return document.getElementById(id.replace(/^#/,'')); } }
//}}}
Questo spazio contiene informazioni tecniche in lingua italiana su [[TiddlyWiki|http://www.tiddlywiki.com/]] un web notebook personale non lineare. Per una guida introduttiva in italiano, potete consultare la [[Guida a TiddlyWiki|http://pollio.maurizio.googlepages.com/MiniGuidaTiddlyWiki.html]] realizzata da [[Pollio Maurizio|http://pollio.maurizio.googlepages.com]], da dove si possono scaricare anche alcune versioni personalizzate in lingua italiana per usi specifici. 

{{tagged{//The contents of this site are directed 
to people speaking italian language, anyway 
you could find, sometimes, sections 
specifically directed to international people, 
in english language. //
}}}Ad ogni modo, visto che siete qui, potete anche leggervi prima la mia pagina [[Cos'è TiddlyWiki?]] che contiene alcune mie considerazioni personali su questo strano oggetto. 

In questo ~TyddlySito ho raccolto alcune annotazioni relative alle possibilità di personalizzazione ed estensione, sulla struttura interna del programma, sulla programmazione ed utilizzo di macro e plugins in generale. 

Non si tratta di una lettura adatta a chi vuole limitarsi al semplice uso di ~TiddlyWiki, per questo basta consultare gli indirizzi che ho indicato all'inizio di questa pagina. Per affrontare questi argomenti è necessario avere buona dimestichezza con il funzionamento dei cosiddetti //Web Standards//, ovvero del linguaggio HTML, dei fogli di stile CSS, del linguaggio ~JavaScript e le interazioni con il DOM (Document Object Model), come anche l'uso di Espressioni Regolari, dei linguaggi XML, SVG e altre diavolerie di questo genere, oltre ad una buona conoscenza della lingua inglese, con cui è scritta gran parte della documentazione di riferimento. 

Tutto questo potrebbe essere più che sufficiente per scoraggiare un utilizzatore medio, a cui non interessano troppi dettagli tecnici. Spero tuttavia che qualcuno, spinto da curiosità e spirito di esplorazione, trovi le motivazioni per proseguire la lettura delle pagine successive. A questi auguro una buona lettura e chiedo eventualmente di inviarmi ([[e-mail|mailto:tiziano.detogni@gmail.com]]) qualche commento sul lavoro che ho svolto. 
;Note: 
* Attualmente il sito è in allestimento, sto sperimentando le varie personalizzazioni per la consultazione in rete e le funzionalità fornite dal server di [[tiddlyspot|http://tiddlyspot.com]] che mi sta ospitando... 
*Si prega di leggere con attenzione la seguente avvertenza in materia di [[Accessibilità]] e questa [[Nota]] per quanto riguarda la possibilità di scaricare queste pagine su un supporto locale. 


/***
|''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);
}
//}}}
[[Introduzione]]
[[Cos'è TiddlyWiki?]]
[[Personalizzazione]]
&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;
{{footer{~TiddlyWiki versione   <<version>>
<<toggleSideBar "" "Apri/Chiudi la barra laterale" hide>> © 2007 [[UnaMesa|http://www.unamesa.org/]]
Aggiornato il: <script>wikify((new Date(document.lastModified)).formatString("0DD-0MM-YYYY 0hh:0mm"), place);
</script>
}}}<script> /*   force some Options defaults  */
config.options.chkAnimate = false;
config.options.chkSaveBackups = false;
config.options.chkAutoSave = false;
</script>
<!--{{{-->
<!-- Start of StatCounter Code -->
<script type="text/javascript">
var sc_project=5627600; 
var sc_invisible=1; 
var sc_partition=60; 
var sc_click_stat=1; 
var sc_security="dc8a985f"; 
</script>

<script type="text/javascript"
src="http://www.statcounter.com/counter/counter.js"></script>
<!-- End of StatCounter Code -->
<!--}}}-->
<noscript>
<div style="float:left; width:20%;"><br/></div>
<div style="float:left; width:60%; text-align:left; font-size:small; background-color:#ffffcc; color:#000; "><p>
<p>Questo software utilizza JavaScript per gestire interattivamente e dinamicamente elementi HTML, con l'ausilio di stili CSS, in modalità che non possono essere fornite in forme alternative. I contenuti di queste pagine <b>non possono essere visualizzati quando gli script sono disabilitati oppure non supportati</b> dal browser che si sta utilizzando. </p>
</div>
<div style="float:left;width:20%;"><br/></div>
<div style="clear:both;"></div>
</noscript>
/***
|''Name:''| MySliderHack |
|''Description:''|Extends the core slider macro handler in order to alllow using parameters.|
|''Type''| hack |
|''Version:''| 0.0.1 |
|''Date:''|11/03/2010|
|''Source:''|http://tiziano.tiddlyspot.com/#MySiderHack|
|''Author:''| Tiziano |
|''License:''| [[Creative Commons Attribution-Share Alike 3.0|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''| 2.5.0 |
|''Overrides''| config.macro.slider |
!!!Usage:
<<<
{{{<<slider cookieID title label hint [with:param1 param2...]>>}}}
<<<
!!!Example
{{{
!test
The tiddler @@$1@@ doesn't exist yet
!end

<<slider chktest {{tiddler.title+'##test'}} test test with:"new tiddler">>
}}}
<<slider chktest {{tiddler.title+'##test'}} test test with:"new tiddler">>
!!!Revisions
<<<
* v0.0.2 (2010-06-10)
**example
**beautify
* v0.0.1 (2007-03-28) 
**first attempts
<<<
!Code
***/
//{{{
config.macros.slider.sliderStack = [];

config.macros.slider.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
	var panel = this.createSlider(place,params[0],params[2],params[3]);
	var tiddlerName = params[1];

	params = paramString.parseParams("name",null,true,false,true);
	var names = params[0]["name"];
	var args = params[0]["with"];

	if(!args) {
		panel.setAttribute("refresh","content");
		panel.setAttribute("tiddler",tiddlerName);
	}

	var text = store.getTiddlerText(tiddlerName);
	if (text) {
		var stack = config.macros.slider.sliderStack;
		if (stack.indexOf(tiddlerName) !== -1)  return;
		stack.push(tiddlerName);
		try {
			var n = args ? Math.min(args.length,9) : 0;
			for(var i=0; i<n; i++) {
				var placeholderRE = new RegExp("\\$" + (i + 1),"mg");
				text = text.replace(placeholderRE,args[i]);
			}
			wikify(text,panel,null,store.getTiddler(tiddlerName));  
		} finally { stack.pop(); };
	};
}
//}}}
Dato che ~TiddlyWiki è contenuto in un singolo file HTML, di solito è possibile scaricarlo su un supporto locale per essere usato in situazioni in cui non sia disponibile una connessione Internet. 

Può però capitare che una determinata personalizzazione di ~TiddlyWiki non sia progettata per questo tipo di utilizzo o che vi siano delle limitazioni specifiche da tenere in considerazione. 

''Questo sito non è stato progettato per essere direttamente scaricato in locale, dato che contiene dei collegamenti esterni ad immagini gestiti in modo dinamico da una macro speciale.''  

Tuttavia questo sito è in grado di funzionare in locale, posto che venga scaricato e installato in una directory da un file in formato .zip. Dato che le fasi di allestimento non sono ancora stabilizzate, al momento questo file non è ancora disponibile. 

Nel frattempo chi desiderasse avere una copia in locale di questo sito, può inviarmi una richiesta via [[e-mail|mailto:tiziano.detogni@gmail.com]].  
<!--{{{-->
<div class='header'>   <!-- * -->
<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 id='contentFooter' refresh='content' tiddler='ContentFooter'></div>

<!--}}}-->
/***
|''Name:''|PasswordOptionPlugin|
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Version:''|1.0.2|
|''Date:''|Apr 19, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.PasswordOptionPlugin = {
	major: 1, minor: 0, revision: 2, 
	date: new Date("Apr 19, 2007"),
	source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
	coreVersion: '2.2.0 (Beta 5)'
};

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

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

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

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

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

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

merge(config.optionsDesc,{
		pasPassword: "Test password"
	});
*/
//}}}
Questo frammento elenca le personalizzazioni apportate a questo ~TiddlyWiki per essere visualizzato in rete: 
*Alcuni stili personalizzati nel frammento StyleSheet
** Modifiche alla barra di intestazione e al corpo del carattere 
** Riduzione della dimensione del carattere per il testo non formattato 
**  Modifiche al sottotitolo nella visualizzazione dei frammenti 
**  Personalizzazione menu principale e aspetto dei pulsanti se inseriti in quest'area 
*Per inibire le modifiche in linea occorre commentare alcune righe all'inizio del plugin TspotSetupPlugin;
*Modifiche al frammento ViewTemplate per disattivare la barra dei comandi del frammento e dei riquadri tagged e tagging se in linea (richiede il plugin HideWhenPlugin)
*Importazione del plugin ToggleSideBarMacro per nascondere la barra laterale dei comandi;
*Modifiche a MainMenu per visualizzare la versione, l'ultima data di modifica e il comando per aprire la barra laterale (penso che più avanti non sia necessario). 
*Importazione plugin SinglePageModePlugin per visualizzare un frammento per volta. Apportando un piccola modifica che elimina un fastidioso sfarfallio.  <script>
        /* crea un elenco dei plugin installati */
	var out=["!!!Plugin installati: \n"];
	var tids=store.getTaggedTiddlers("systemConfig");
	for (var i=0; i<tids.length; i++) {
		var t=tids[i].title;
                var t1="[["+t+"]] versione: "+store.getTiddlerSlice(t,"Version");
		var d=store.getTiddlerSlice(t,"Description");
               d="<nowiki>"+d+"</nowiki>"
		out.push(";%0\n:%1\n".format([t1,d]));
	}
	return out.join("");
</script>
/***
|''Name:''| PostTiddlerMacro |
|''Description:''| Adjust images links after tiddler display |
|''Type''| macro |
|''Version:''| 0.0.1 |
|''Date:''| mar 03, 2010 |
|''Source:''|http://tiziano.tiddlyspot.com|
|''Author:''| Tiziano |
|''License:''| xxx |
|''~CoreVersion:''| 2.5.0 |
!!!Usage:
<<<
Prova ad eseguire uno script dopo l'apertura di un frammento. 
Aggiusta il percorso delle immagini indicate negli attributi img. 

Aggiusta il percorso delle immagini indicate in classi particolari.  

Prova a modificare l'immagine nell'intestazione o sullo sfondo in determinate condizioni (un campo personalizzato che indica il nome dell'immagine, oppure una tabella predisposta?)

Il controllo per un cambio di immagine deve essere eseguito su tutti i frammenti, se l'immagine richiesta è già visualizzata, termina. Se manca il campo personalizzato, attiva un'immagine di default. 
<<<
!!!Configuration:
<<<
Da inserire in viewtemplate
{{{
....
<div class='tagClear' macro='postTiddler'></div>
}}}
<<<
!!!Revisions
<<<
* v0.0.2 (2007-04-12)
** xxx xxx
* v0.0.1 (2007-03-28)
** First attempts
*** zzz zzz
*** "kkk kkk"
<<<
!Code
***/
//{{{
/*
  opzioni: remote path to images
*/
       if (config.options.txtRemoteImgPath==undefined)
          config.options.txtRemoteImgPath="http://digilander.libero.it/tizzziano/immagini/";
       if (config.options.txtLocalImgPath==undefined) 
          config.options.txtLocalImgPath="./immagini/";
//}}}

//{{{
/*
    Estrazione nome immagine di sfondo dallo stile background-image
    dell'elemento indicato in caso di problemi torna un valore di default 
*/
config.macros.postTiddler = {};
config.macros.postTiddler.background_image = function (place, xdefault) {
       var theFile=jQuery(place).css('background-image');
//displayMessage('theFile '+theFile);
       if ( (theFile.indexOf('invalid')!=-1) || (theFile=='none') ) 
          return xdefault;      // inizializza immagine
       else {
            theFile = theFile.substr(4);
            theFile = theFile.substr(0, theFile.length-1);
            var slashpos=theFile.lastIndexOf("/"); 
            if (slashpos==-1) slashpos=theFile.lastIndexOf("\\"); 
           return (slashpos==-1)?theFile:theFile.substr(slashpos+1);
         };
};
//}}}

//{{{
config.macros.postTiddler.handler = function (place, macroName, params, wikifier, paramString, tiddler) {
       // impostazione imgpathin base al protocollo
       var imgpath; 
       if (window.location.protocol != "file:")
		imgpath=config.options.txtRemoteImgPath;  //  remote url
	else
               imgpath=config.options.txtLocalImgPath;
       /*
            ricerca delle immagini nel frammento da visualizzare
       */
       var imgs=jQuery('img', story.findContainingTiddler(place));
       imgs.each( function() {
                 // displayMessage('each = '+jQuery(this).attr('src')) 
                   jQuery(this).attr('src',imgpath+jQuery(this).attr('src'));
            } );

//
// verifica sugli stili css
//
var theFile;
var theField;
var defaultBkg='sfondo.jpg';
var defaultHeader='tiziano00.jpg';

/*
   controllo immagine sfondo
*/
      theFile = config.macros.postTiddler.background_image('body', defaultBkg);
       jQuery("body").css('background-image', 'url('+imgpath+theFile+')');
/*
   controllo immagine intestazione (header), 
   imposta l'immagine indicata nel campo personalizzato 'header' 
   oppure l'mmagine di default
*/
      theFile = config.macros.postTiddler.background_image('div.header', defaultHeader);
      theField = store.getValue(tiddler,'header');
      if (!theField) theField=defaultHeader;
      if (theFile!=theField) theFile=theField;
           jQuery("div.header").css('background-image','url('+imgpath+theFile+')');
/*
   controllo immagine collegamenti esterni (externallink)
*/
      theFile = config.macros.postTiddler.background_image('a.externalLink', 'external.png');
      jQuery("a.externalLink").css('background-image','url('+imgpath+theFile+')' );
};
//}}}
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<tiddler TspotSidebar>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
/***
|Name|SinglePageModePlugin|
|Source|http://www.TiddlyTools.com/#SinglePageModePlugin|
|Documentation|http://www.TiddlyTools.com/#SinglePageModePluginInfo|
|Version|2.9.6.1 (see Revisions)|
|Author|Eric Shulman|
|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|Story.prototype.displayTiddler(), Story.prototype.displayTiddlers()|
|Options|##Configuration|
|Description|Show tiddlers one at a time with automatic permalink, or always open tiddlers at top/bottom of page.|
This plugin allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one tiddler displayed at a time.
!!!!!Documentation
>see [[SinglePageModePluginInfo]]
!!!!!Configuration
<<<
<<option chkSinglePageMode>> Display one tiddler at a time
><<option chkSinglePagePermalink>> Automatically permalink current tiddler
><<option chkSinglePageKeepFoldedTiddlers>> Don't close tiddlers that are folded
><<option chkSinglePageKeepEditedTiddlers>> Don't close tiddlers that are being edited
<<option chkTopOfPageMode>> Open tiddlers at the top of the page
<<option chkBottomOfPageMode>> Open tiddlers at the bottom of the page
<<option chkSinglePageAutoScroll>> Automatically scroll tiddler into view (if needed)

Notes:
* The "display one tiddler at a time" option can also be //temporarily// set/reset by including a 'paramifier' in the document URL: {{{#SPM:true}}} or {{{#SPM:false}}}.
* If more than one display mode is selected, 'one at a time' display takes precedence over both 'top' and 'bottom' settings, and if 'one at a time' setting is not used, 'top of page' takes precedence over 'bottom of page'.
* When using Apple's Safari browser, automatically setting the permalink causes an error and is disabled.
<<<
!!!!!Revisions
<<<
2009.02.24 [2.9.6.1] Modifica logica delle opzioni (open on top attivo anche in single page mode)
2008.10.17 [2.9.6] changed chkSinglePageAutoScroll default to false
| Please see [[SinglePageModePluginInfo]] for previous revision details |
2005.08.15 [1.0.0] Initial Release.  Support for BACK/FORWARD buttons adapted from code developed by Clint Checketts.
<<<
!!!!!Code
***/
//{{{
version.extensions.SinglePageModePlugin= {major: 2, minor: 9, revision: 6, date: new Date(2008,10,17)};
//}}}
//{{{
config.paramifiers.SPM = { onstart: function(v) {
	config.options.chkSinglePageMode=eval(v);
	if (config.options.chkSinglePageMode && config.options.chkSinglePagePermalink && !config.browser.isSafari) {
		config.lastURL = window.location.hash;
		if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
	}
} };
//}}}
//{{{
//if (config.options.chkSinglePageMode==undefined)
	config.options.chkSinglePageMode=true;
if (config.options.chkSinglePagePermalink==undefined)
	config.options.chkSinglePagePermalink=true;
if (config.options.chkSinglePageKeepFoldedTiddlers==undefined)
	config.options.chkSinglePageKeepFoldedTiddlers=false;
if (config.options.chkSinglePageKeepEditedTiddlers==undefined)
	config.options.chkSinglePageKeepEditedTiddlers=true;
if (config.options.chkTopOfPageMode==undefined)
	config.options.chkTopOfPageMode=true;
if (config.options.chkBottomOfPageMode==undefined)
	config.options.chkBottomOfPageMode=false;
if (config.options.chkSinglePageAutoScroll==undefined)
	config.options.chkSinglePageAutoScroll=true;
//}}}
//{{{
config.SPMTimer = 0;
config.lastURL = window.location.hash;
function checkLastURL()
{
	if (!config.options.chkSinglePageMode)
		{ window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }
	if (config.lastURL == window.location.hash) return; // no change in hash
	var tids=decodeURIComponent(window.location.hash.substr(1)).readBracketedList();
	if (tids.length==1) // permalink (single tiddler in URL)
		story.displayTiddler(null,tids[0]);
	else { // restore permaview or default view
		config.lastURL = window.location.hash;
		if (!tids.length) tids=store.getTiddlerText("DefaultTiddlers").readBracketedList();
		story.closeAllTiddlers();
		story.displayTiddlers(null,tids);
	}
}


if (Story.prototype.SPM_coreDisplayTiddler==undefined)
	Story.prototype.SPM_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler,template,animate,slowly)
{
	var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
	var tiddlerElem=document.getElementById(story.idPrefix+title); // ==null unless tiddler is already displayed
	var opt=config.options;
	var single=opt.chkSinglePageMode && !startingUp;
	var top=opt.chkTopOfPageMode && !startingUp;
	var bottom=opt.chkBottomOfPageMode && !startingUp;

	if (top)
		arguments[0]=null;   // 2.9.6.1

	if (single) {
		story.forEachTiddler(function(tid,elem) {
			// skip current tiddler and, optionally, tiddlers that are folded.
			if (	tid==title
				|| (opt.chkSinglePageKeepFoldedTiddlers && elem.getAttribute("folded")=="true"))
				return;
			// if a tiddler is being edited, ask before closing
			if (elem.getAttribute("dirty")=="true") {
				if (opt.chkSinglePageKeepEditedTiddlers) return;
				// if tiddler to be displayed is already shown, then leave active tiddler editor as is
				// (occurs when switching between view and edit modes)
				if (tiddlerElem) return;
				// otherwise, ask for permission
				var msg="'"+tid+"' is currently being edited.\n\n";
				msg+="Press OK to save and close this tiddler\nor press Cancel to leave it opened";
				if (!confirm(msg)) return; else story.saveTiddler(tid);
			}
			story.closeTiddler(tid);
		});
	}
//	else if (top)
//		arguments[0]=null;  2.9.6.1
	else if (bottom)
		arguments[0]="bottom";
	if (single && opt.chkSinglePagePermalink && !config.browser.isSafari) {
		window.location.hash = encodeURIComponent(String.encodeTiddlyLink(title));
		config.lastURL = window.location.hash;
		document.title = wikifyPlain("SiteTitle") + " - " + title;
		if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
	}
	if (tiddlerElem && tiddlerElem.getAttribute("dirty")=="true") { // editing... move tiddler without re-rendering
		var isTopTiddler=(tiddlerElem.previousSibling==null);
		if (!isTopTiddler && (single || top))
			tiddlerElem.parentNode.insertBefore(tiddlerElem,tiddlerElem.parentNode.firstChild);
		else if (bottom)
			tiddlerElem.parentNode.insertBefore(tiddlerElem,null);
		else this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
	} else
		this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
	var tiddlerElem=document.getElementById(story.idPrefix+title);
	if (tiddlerElem&&opt.chkSinglePageAutoScroll) {
		// scroll to top of page or top of tiddler
		var isTopTiddler=(tiddlerElem.previousSibling==null);
		var yPos=isTopTiddler?0:ensureVisible(tiddlerElem);
		// if animating, defer scroll until after animation completes
		var delay=opt.chkAnimate?config.animDuration+10:0;
		setTimeout("window.scrollTo(0,"+yPos+")",delay); 
	}
}

if (Story.prototype.SPM_coreDisplayTiddlers==undefined)
	Story.prototype.SPM_coreDisplayTiddlers=Story.prototype.displayTiddlers;
Story.prototype.displayTiddlers = function() {
	// suspend single/top/bottom modes when showing multiple tiddlers
	var opt=config.options;
	var saveSPM=opt.chkSinglePageMode; opt.chkSinglePageMode=false;
	var saveTPM=opt.chkTopOfPageMode; opt.chkTopOfPageMode=false;
	var saveBPM=opt.chkBottomOfPageMode; opt.chkBottomOfPageMode=false;
	this.SPM_coreDisplayTiddlers.apply(this,arguments);
	opt.chkBottomOfPageMode=saveBPM;
	opt.chkTopOfPageMode=saveTPM;
	opt.chkSinglePageMode=saveSPM;
}
//}}}
di Tiziano
Pagina Casa
http://tiziano.tiddlyspot.com
/***
In questo frammento ci sono tutte le dichiarazioni che riguardano gli stili relativi ai nuovi frammenti definiti dall'utente.  Prestare attenzione che non vi siano collegamenti ad altri frammenti, dato che il sistema li concatena automaticamente creando a volte dei problemi. 
Le modifiche a questo frammento non vengono aggiornate automaticamente. 

Per innescare un aggiornamento dopo una modifica premere qui:  <html><a href="javascript:refreshStyles('StyleSheet');">Aggiorna gli stili</a></html>
***/
/***
!!!Stili personali ( nuovi stili usati nei frammenti )
***/
/*{{{*/
.center
	{ display:block;text-align:center; }
.center table
	{ margin:auto !important; }
.right
	{ display:block;text-align:right; }
.floatleft
	{ float:left; }
.floatright
	{ float:right; }
/*}}}*/
/***
!!!Piedipagina
***/
/*{{{*/
#contentFooter {
 background: transparent;
 padding: 1em 10em;
 font-weight:normal;
 font-size:smaller;
}

#contentFooter a {
 color:#009;
} 
/*}}}*/
/***
In questo frammento ci sono tutte le dichiarazioni che riguardano variazioni agli stili predefiniti,  nel frammento annidato ''Stili personali'' ci sono gli stili relativi ai nuovi frammenti definiti dall'utente.  Prestare attenzione che non vi siano collegamenti ad altri frammenti, dato che il sistema li concatena automaticamente creando a volte dei problemi. 
***/
/***
!!!Barra di intestazione
***/
/*{{{*/
body { font-size:.95em; font-family:arial,helvetica;
           margin-left:40px; 
           background: url(sfondo.jpg)
             repeat-y
             0px
             0px
             scroll;
         }

.header {background: transparent no-repeat 0 0 scroll;}
.headerShadow {position:relative; padding:40px 0em 1em 1em; left:-1px; top:-1px; color: [[ColorPalette::SecondaryDark]] }
.headerForeground {position:absolute; padding:40px 0em 1em 1em; left:0px; top:0px; color:[[ColorPalette::SecondaryPale]]; }

.siteTitle {font-size:2em; }
.siteSubtitle { font-size:1em; }
/*}}}*/
/***
!!!Barra menu
***/
/*{{{*/
#mainMenu {
 margin-left: 40px;
 font-size: 0.9em;
 text-align: left;
 width: 14em;
}

#mainMenu .tiddlyLinkExisting { font-weight: bold;}
.button {border:0px}

#mainMenu .footer{
 font-size: x-small;
 font-style:italic;
 text-align: right;
 color:[[ColorPalette::PrimaryMid]];
}
/*}}}*/
/***
!!!Riduzione della dimensione del carattere per il testo non formattato
***/
/*{{{*/
.viewer pre {
padding:0.5em; 
margin-left:0.5em; 
font-size:0.7em; 
line-height:1.4em; 
overflow:auto;}

.custompre {
padding:0.5em; 
margin-left:0.5em; 
font-family: monospace; 
font-size:0.9em; 
line-height:1.4em; 
text-align:justify; 
background:#ffc;}
/*}}}*/
/***
!!!Modifiche al sottotitolo nella visualizzazione dei frammenti
***/
/*{{{*/
.subtitle {
margin-top: -1.5em;
margin-bottom: 0.5em;
padding-bottom: 0.5em;
border-bottom: 1px solid; color:ColorPalette::SecondaryDark;
font-size: x-small;
text-align: right; }
/*}}}*/
/***
!!!Collegamenti esterni
***/
/*{{{*/
.externalLink {color: [[ColorPalette::SecondaryDark]]; text-decoration:underline; 
background: transparent url('external.png') no-repeat scroll right center; 
padding: 0 13px 0 0;}
/*}}}*/
/***
!!!Nested ~StyleSheet ovvero ~StyleSheet transclusion... (vedi twhelp)
***/
/*{{{*/
[[Stili personali]]
/*}}}*/
<script>jQuery('div.tagged', story.findContainingTiddler(place) ).css("display", "none");
   if (!config.options.foo) {
	config.options.foo=true;
	config.options.chktodotiddlerform = false;
	}
</script>Gestione siti da visitare:  I comandi inseriscono il testo in coda. Viene inserito anche il codice per eliminare il testo. 
<<slider chktodotiddlerform {{tiddler.title+"##edit"}} "aggiungi »">>
/%
|Name|ToDoTiddler|
|Source|http://tiziano.tiddlyspot.com/#ToDoTiddler|
|Version|0.0.1|
|Author|Tiziano|
|License|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.5|
|Type|HTML+script|
|Requires|InlineJavaScriptPlugin|
|Overrides||
|Description|Simple quick ToDo List with optional web URL reference|
%/
/%
hidden sections 

--------------------
Template for todo item. 
$0 = URL
$1 = description
$2 = identifier
--------------------
!template
<html><hr/>
<input type="checkbox" title="rimuovi" id=$2 onclick="window.removeMe(this)"/> $1 <a href='$0' target="_blank"> $0 </a> 
</html>
!endtemplate

--------------------
Input form slider 
--------------------
!edit
{{annotation{
<html>
<form id="todotiddlerform" action="javascript:;" style="display:inline">
url: <br/>
<input type="text" style='font-size:0.7em; border: 1px solid; margin: 2px; width: 80%; padding: 3px;' name="url" title="url"><br/>

commento: <br/>
<textarea name="descrizione" title="descrizione" rows=3 style="width:80%;"></textarea><br/>

<input type="button" value="Aggiungi" onclick="form.onrecordChanges()">
</form>
</html>}}}
!endedit


%/<script>
var form=jQuery('form#todotiddlerform').get(0);

form.onrecordChanges = function() {
	var x0= store.getTiddlerText(tiddler.title+'##template');
	x0=x0.replace(/\$\x30/g,form.url.value);
	x0=x0.replace(/\$\x31/g,form.descrizione.value);
	x0=x0.replace(/\$\x32/g,
		new Date().convertToYYYYMMDDHHMMSSMMM());
	tiddler.text+=x0;
	story.saveTiddler(tiddler);
	config.options.foo=false;
	story.refreshTiddler(tiddler.title,null,true);
	return false;
}

window.removeMe = function (place) {
	var xid= place.id; var sp='<html><hr\/>';
	var parts=tiddler.text.split(sp);
	var txt=parts[0]; 
	for (var i=1; i<parts.length; i++) {
		if (parts[i].indexOf(xid) == -1) txt+=sp+parts[i];
	};
	tiddler.text=txt;
	story.saveTiddler(tiddler);
	story.refreshTiddler(tiddler.title,null,true);
	return false;
}
</script>/% begin of data %/<html><hr/>
<input type="checkbox" title="rimuovi" id=20100918.0949300928 onclick="window.removeMe(this)"/> Interesting, to read every morning... <a href='http://groups.google.com/group/TiddlyWiki' target="_blank"> http://groups.google.com/group/TiddlyWiki </a> 
</html><html><hr/>
<input type="checkbox" title="rimuovi" id=20100918.0950240289 onclick="window.removeMe(this)"/> this is only a note, no URL <a href='' target="_blank">  </a> 
</html><html><hr/>
<input type="checkbox" title="rimuovi" id=20100918.0951110945 onclick="window.removeMe(this)"/> check if this site exist <a href='www.nowere.xx' target="_blank"> www.nowere.xx </a> 
</html><html><hr/>
<input type="checkbox" title="rimuovi" id=20100918.0953110430 onclick="window.removeMe(this)"/> guide for italian people <a href='http://pollio.maurizio.googlepages.com/MiniGuidaTiddlyWiki.html' target="_blank"> http://pollio.maurizio.googlepages.com/MiniGuidaTiddlyWiki.html </a> 
</html>
/%
!info
|Name|ToDoTiddler|
|Source|http://tiziano.tiddlyspot.com/#ToDoTiddler|
|Version|0.0.2|
|Author|Tiziano|
|License|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.5|
|Type|HTML + javaScript|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|Simple quick toDo List with optional web URL reference|
!endinfo

--------------------
Input form template 
--------------------
!edit
{{annotation{
<html>
<form class="todotiddlerform" action="javascript:;" style="display:inline">
<span>url:<span> 
<input type="text" style='font-size:0.7em; border: 1px solid; margin: 2px; width: 70%; padding: 3px;' name="url" title="url"><br/>
Text: <br/>
<textarea name="testo" title="Text" rows=3 style="width:60%;"></textarea>

<fieldset style="display:inline; padding-bottom: 4px; width:30%;" onclick="form.onactionChanges()">
<legend>Action<legend>
 <input type="radio" name="todoaction" value="remove"> Remove
 <input type="radio" name="todoaction" value="up">Up<br/>
 <input type="radio" name="todoaction" value="edit" checked="true"> Edit
&nbsp;&nbsp;
 <input type="radio" name="todoaction" value="down"> Down
</fieldset><br/>
<input type="button" value="Add to List" onclick="form.onrecordChanges()">
<input type='checkbox' name='chkLock' onclick="form.onLockChanges()">Lock</input>
</form>
</html>}}}
!endedit
%/<script>
jQuery('div.tagged', story.findContainingTiddler(place) ).css("display", "none");

if (!config.todotiddler) {
config.todotiddler={ 
/*
--------------------
Template for todo item. 
$0 = Internal/external link
$1 = description
$2 = identifier
--------------------
*/
itemTemplate: '<li><a href="javascript:;" class="button" '+
		' id="$2" onClick="window.doAction(this)">X</a>'+
		'&nbsp;<span>$1</span>$0<hr/></li>\n',
/*
Internal external link
$0 = tiddler title or URL
*/
tiddlyLink : '<a href="javascript:;" onClick="openTiddler(this)" title="Tiddler $0" '+
		'class="tiddlyLink tiddlyLinkExisting" refresh="link" tiddlylink="$0">$0</a>',
urlLink : '<a href="$0" target="_blank">$0</a>',
itemicons : {edit: "e", remove: "x", up: "↑", down: "↓"},
dummy: ' '
};

config.todotiddler.sourceTiddler = function(here) {
	while (here && !hasClass(here,"tiddler")) {
		if ( here.getAttribute("tiddler") ) {
			return here.getAttribute("tiddler");
		};
		if (hasClass(here,"tabsetWrapper")) {
			return jQuery(".tabSelected",here).attr('content');
		};
		here = here.parentNode;
	}
	return here.getAttribute('tiddler');
};

config.todotiddler.updateicons = function(here) {
	jQuery(".todotiddlerlist li a.button", here).text( config.todotiddler.itemicons[config.options.txttodotiddleraction] );
};

config.todotiddler.refreshList = function(here) {
	var tid = story.findContainingTiddler(here);
	if (tid) 
		story.refreshTiddler(tid.getAttribute('tiddler'),null,true) 
	else refreshDisplay();
};

}
	config.options.chktodotiddlerform = config.options.chktodotiddlerlock;
	if (!config.options.txttodotiddleraction) 
		config.options.txttodotiddleraction = 'edit';
</script>/%

%/{{todotiddlercontainer{
This is a list of pages to visit. Links are appended to the end of the list. <<slider chktodotiddlerform {{config.todotiddler.sourceTiddler(place)+"##edit"}} "Open form »">><script>

jQuery(".todotiddlercontainer").hover(function() { 
		config.todotiddler.form = jQuery(this).find("form.todotiddlerform").get(0);  
} );

var form=jQuery('form.todotiddlerform',place).get(0);

if (config.options.chktodotiddlerlock) 
	form.chkLock.checked=config.options.chktodotiddlerlock;

if (config.options.txttodotiddleraction) {
	for (i=0; i<form.todoaction.length; i++) 
		if (form.todoaction[i].value==config.options.txttodotiddleraction) {
			form.todoaction[i].checked=true;
			break;
		}
}

form.onLockChanges = function() {
	var xform=config.todotiddler.form;
	config.options.chktodotiddlerlock=xform.chkLock.checked;
	saveOptionCookie('chktodotiddlerlock');
}

form.onactionChanges = function() {
	var xform=config.todotiddler.form;
	for (i=0; i<xform.todoaction.length; i++) 
		if (xform.todoaction[i].checked) break;

	var x=xform.todoaction[i].value;
	config.options.txttodotiddleraction=x;
	saveOptionCookie('txttodotiddleraction');
	config.todotiddler.updateicons(place);
}

form.onrecordChanges = function() {
	var xform=config.todotiddler.form;
	tid=store.getTiddler(config.todotiddler.sourceTiddler(place));
	var x0 = config.todotiddler.itemTemplate;

	var link= store.tiddlerExists(xform.url.value) ? config.todotiddler.tiddlyLink : config.todotiddler.urlLink;

	link=link.replace(/\$\x30/g,xform.url.value);
	x0 = x0.replace(/\$\x30/g,link);
	x0 = x0.replace(/\$\x31/g,xform.testo.value);
	var xid = new Date().convertToYYYYMMDDHHMMSSMMM().split('.');
	x0 = x0.replace(/\$\x32/g, xid[0]+'-'+xid[1]);

	var sp = '<li></li></ul>\n</div></html>';
	var parts = tid.text.split(sp);

	tid.text=parts[0]+x0+sp+parts[1];

	if (!xform.chkLock.checked) 
		config.options.chktodotiddlerlock=false;

	config.todotiddler.refreshList(place);
	return false;
}

window.doAction = function (place) {

	function moveItem(direction) {
		var xid= place.id; var sp='\n<li';
		var parts=tid.text.split(sp);
		var txt=parts[0]; 
		for (var i=1; i<parts.length-1; i++) {
			if (parts[i].indexOf(xid) != -1) {
				switch(direction) {
					case "up":
						if (i>1) {
						var tmp=parts[i-1]; parts[i-1]=parts[i]; parts[i]=tmp;
						}; 
					break;
					case "down":
						if (i<parts.length-2) {
						var tmp=parts[i+1]; parts[i+1]=parts[i]; parts[i]=tmp;
						}; 
					break;
				}
				break;
			}
		};
		for (var i=1; i<parts.length; i++) 
			txt+=sp+parts[i];
		tid.text=txt;
		config.todotiddler.refreshList(place);
	};	// end moveitem

	var tid=store.getTiddler(config.todotiddler.sourceTiddler(place))

	with (config.todotiddler) 
	switch(place.text) {
		case itemicons['up']:
			moveItem('up');
		break;
		case itemicons['down']:
			moveItem('down');
		break;
		case itemicons['edit']:
			var xform=config.todotiddler.form;
			var item=jQuery("#"+place.id);
			xform.testo.value=item.next().text();
			xform.url.value=item.next().next().text();
			jQuery(".sliderPanel[cookie='chktodotiddlerform']").css("display","block");
		break;
		default: // remove
			var xid= place.id; var sp='\n<li';
			var parts=tid.text.split(sp);
			var txt=parts[0]; 
			for (var i=1; i<parts.length; i++) {
				if (parts[i].indexOf(xid) == -1) txt+=sp+parts[i];
			};
			tid.text=txt;
		config.todotiddler.refreshList(place);
		break;
	}
	return false;
}

window.openTiddler = function (target) {
	var link = target;
	var title = null;
	var fields = null;
	var noToggle = null;
	do {
		title = link.getAttribute("tiddlyLink");
		fields = link.getAttribute("tiddlyFields");
		noToggle = link.getAttribute("noToggle");
		link = link.parentNode;
	} while (title == null && link != null);
	if (!store.isShadowTiddler(title)) {
		var f = fields ? fields.decodeHashMap() : {};
		fields = String.encodeHashMap(merge(f,config.defaultCustomFields,true));
	}
	if (title) {
		if (store.getTiddler(title))
			fields = null;
		story.displayTiddler(target,title,null,true,null,fields,false);
	}
	clearMessage();
	return false;
}
</script>/% begin of HTML list %/<html>
<style>
.todotiddlerlist li { list-style-type:none; }
.todotiddlerlist, .todotiddlerlist ul { margin-left: 0px; padding-left: 0px;}
.todotiddlerlist a.button, .todotiddlerlist a { font-size: 0.8em; margin-left: 1em; margin-right: 1em;}
</style><div class="todotiddlerlist"><ul>
<li><a href="javascript:;" class="button"  id="20100930-2105240752" onClick="window.doAction(this)">X</a>&nbsp;<span>Lot of code</span><a href="http://www.tiddlytools.com/" target="_blank">http://www.tiddlytools.com/</a><hr/></li>
<li><a href="javascript:;" class="button"  id="20100930-2105510432" onClick="window.doAction(this)">X</a>&nbsp;<span>The first tiddler</span><a href="javascript:;" onClick="openTiddler(this)" title="Tiddler Introduzione" class="tiddlyLink tiddlyLinkExisting" refresh="link" tiddlylink="Introduzione">Introduzione</a><hr/></li>
<li><a href="javascript:;" class="button"  id="20100930-2107450690" onClick="window.doAction(this)">X</a>&nbsp;<span>There is something new?</span><a href="http://www.tiddlywiki.com/" target="_blank">http://www.tiddlywiki.com/</a><hr/></li>
<li></li></ul>
</div></html><script>
config.todotiddler.updateicons(place);
</script>
}}} /% end of div tiddercontainer %/
/***

|Name|ToggleSideBarMacro|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#ToggleSideBarMacro|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Provides a button for toggling visibility of the SideBar. You can choose whether the SideBar should initially be hidden or displayed.

!Demo
<<toggleSideBar "Toggle Sidebar">>

!Usage:
{{{<<toggleSideBar>>}}} <<toggleSideBar>>
additional options:
{{{<<toggleSideBar label tooltip show/hide>>}}} where:
label = custom label for the button,
tooltip = custom tooltip for the button,
show/hide = use one or the other, determines whether the sidebar is shown at first or not.
(default is to show the sidebar)

You can add it to your tiddler toolbar, your MainMenu, or where you like really.
If you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:
{{{ .HideSideBarButton {float:right;} }}}

!History
*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour. 
*20-07-06: version 0.11
*27-04-06: version 0.1: working.

!Code
***/
//{{{
config.macros.toggleSideBar={};

config.macros.toggleSideBar.settings={
         styleHide :  "#sidebar { display: none;}\n"+"#contentWrapper #displayArea { margin-right: 1em;}\n"+"",
         styleShow : " ",
         arrow1: "«",
         arrow2: "»"
};

config.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)
{
          var tooltip= params[1]||'toggle sidebar';
          var mode = (params[2] && params[2]=="hide")? "hide":"show";
          var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;
          var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;
          var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");
          if (mode == "hide")
             { 
             (document.getElementById("sidebar")).setAttribute("toggle","hide");
              setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");
             }
};

config.macros.toggleSideBar.onToggleSideBar = function(){
          var sidebar = document.getElementById("sidebar");
          var settings = config.macros.toggleSideBar.settings;
          if (sidebar.getAttribute("toggle")=='hide')
             {
              setStylesheet(settings.styleShow,"ToggleSideBarStyles");
              sidebar.setAttribute("toggle","show");
              this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
              }
          else
              {    
               setStylesheet(settings.styleHide,"ToggleSideBarStyles");
               sidebar.setAttribute("toggle","hide");
               this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);
              }

     return false;
}

setStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\n","ToggleSideBarButtonStyles");

//}}}
|~ViewToolbar|closeTiddler closeOthers closeAll +editTiddler fields jump references > permalink publishTiddler|
|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddler tiddler|
/***
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 = 'tiziano';

// 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,{

'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"),

'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"),

'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"),

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

});
//}}}
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 30/09/2010 23:10:54 | tiziano | [[tiziano.html|file:///home/user/lavori/tiddlytest/tiziano.html#%5B%5BToDoTiddler%20new%5D%5D]] | [[store.cgi|http://tiziano.tiddlyspot.com/store.cgi]] | . | [[index.html | http://tiziano.tiddlyspot.com/index.html]] | . | ok |
| 30/09/2010 23:11:33 | tiziano | [[tiziano.html|file:///home/user/lavori/tiddlytest/tiziano.html#%5B%5BToDoTiddler%20new%5D%5D]] | [[store.cgi|http://tiziano.tiddlyspot.com/store.cgi]] | . | [[index.html | http://tiziano.tiddlyspot.com/index.html]] | . | ok |
| 22/11/2010 21:54:58 | tiziano | [[tiziano.html|file:///home/user/lavori/tiddlytest/tiziano.html#Introduzione]] | [[store.cgi|http://tiziano.tiddlyspot.com/store.cgi]] | . | [[index.html | http://tiziano.tiddlyspot.com/index.html]] | . |
| 22/11/2010 21:55:21 | tiziano | [[tiziano.html|file:///home/user/lavori/tiddlytest/tiziano.html#Introduzione]] | [[store.cgi|http://tiziano.tiddlyspot.com/store.cgi]] | . | [[index.html | http://tiziano.tiddlyspot.com/index.html]] | . |
| 22/11/2010 21:55:51 | tiziano | [[tiziano.html|file:///home/user/lavori/tiddlytest/tiziano.html#Introduzione]] | [[store.cgi|http://tiziano.tiddlyspot.com/store.cgi]] | . | [[index.html | http://tiziano.tiddlyspot.com/index.html]] | . |
| 22/11/2010 21:56:37 | tiziano | [[tiziano.html|file:///home/user/lavori/tiddlytest/tiziano.html#Introduzione]] | [[store.cgi|http://tiziano.tiddlyspot.com/store.cgi]] | . | [[index.html | http://tiziano.tiddlyspot.com/index.html]] | . | failed |
| 22/11/2010 21:57:28 | tiziano | [[tiziano.html|file:///home/user/lavori/tiddlytest/tiziano.html#Introduzione]] | [[store.cgi|http://tiziano.tiddlyspot.com/store.cgi]] | . | [[index.html | http://tiziano.tiddlyspot.com/index.html]] | . | failed |
| 13/03/2011 18:13:38 | tiziano | [[tiziano.html|file:///media/eeepc_lavori/lavori_backup/tiddlytest/tiziano.html]] | [[|file:///media/eeepc_lavori/lavori_backup/tiddlytest/]] | . | [[tiziano.html | file:///media/eeepc_lavori/lavori_backup/tiddlytest/tiziano.html]] |  | failed |
| 13/03/2011 18:14:51 | tiziano | [[tiziano.html|file:///media/eeepc_lavori/lavori_backup/tiddlytest/tiziano.html]] | [[store.cgi|http://tiziano.tiddlyspot.com/store.cgi]] | . | [[index.html | http://tiziano.tiddlyspot.com/index.html]] | . |
| 21/04/2012 10:49:18 | tiziano | [[/|http://tiziano.tiddlyspot.com/]] | [[store.cgi|http://tiziano.tiddlyspot.com/store.cgi]] | . | [[index.html | http://tiziano.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");


//}}}

<!--{{{-->
<div macro="hideWhen readOnly" 
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
</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 macro="hideWhen readOnly" 
  <div class='tagged' macro='tags'>
     <div macro='tagging'></div>
  </div>
</div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear' macro='postTiddler'></div>
<!--}}}-->
{{{
http://tiziano.tiddlyspot.com#%5B%5BCos'%C3%A8%20TiddlyWiki%3F%5D%5D
http://tiziano.tiddlyspot.com#Introduzione
http://tiziano.tiddlyspot.com#Personalizzazione
}}}
/***
|''Name:''|ItalianTranslationPlugin|
|''Description:''|Translation of TiddlyWiki into Italian|
|''Authors:''|Mathew Warburton - (mat01web (at) gmail (dot) com + Pollio Maurizio (pollio.maurizio (at) gmail (dot) com)|
|''Source:''|http://pollio.maurizio.googlepages.com/MiniGuidaTiddlyWiki.html|
|''CodeRepository:''|http://pollio.maurizio.googlepages.com/it_2_4_1.js|
|''Version:''|2.4.1|
|''Date:''|Dec 11, 2008|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/deed.it]] |
|''~CoreVersion:''|2.4|
***/

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

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

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

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

merge(config.tasks,{
	save: {text: "Salva", tooltip: "Salva le modifiche in questo TiddlyWiki", action: saveChanges},
	sync: {text: "Sincronizza", tooltip: "Sincronizza questo TiddlyWiki con altri file o server TiddlyWiki", content: '<<sync>>'},
	importTask: {text: "Importa", tooltip: "Importa frammenti e plugin da altri file o server TiddlyWiki", content: '<<importTiddlers>>'},
	tweak: {text: "Modifica", tooltip: "Modifica le opzioni di questo TiddlyWiki", content: '<<options>>'},
	upgrade: {text: "Aggiorna", tooltip: "Aggiorna il codice base di TiddlyWiki", content: '<<upgrade>>'},
  plugins: {text: "Plugin", tooltip: "Gestisce i plugin installati in questo TiddlyWiki", content: '<<plugins>>'}
});

// Options that can be set in the options panel and/or cookies
merge(config.optionsDesc,{
	txtUserName: "Digita un nome utente per firmare le tue modifiche",
	chkRegExpSearch: "Abilita nella ricerca l'uso delle espressioni regolari",
	chkCaseSensitiveSearch: "Abilita la ricerca sensibile alle maiuscole e minuscole",
	chkIncrementalSearch: "Abilita la ricerca incrementale key-by-key",
	chkAnimate: "Abilita animazioni",
	chkSaveBackups: "Genera una copia di backup quando si salvano le modifiche",
	chkAutoSave: "Abilita il salvataggio automatico delle modifiche",
	chkGenerateAnRssFeed: "Genera un feed RSS quando si salvano le modifiche",
	chkSaveEmptyTemplate: "Genera un modello vuoto quando si salvano le modifiche",
	chkOpenInNewWindow: "Apri i link esterni in una nuova finestra",
	chkToggleLinks: "Cliccando su un collegamento ad un frammento già aperto lo chiude",
	chkHttpReadOnly: "Non rendere editabile dal web",
	chkForceMinorUpdate: "Tratta le modifiche come minori non aggiornando il nome utente e la data quando modifichi i frammenti",
	chkConfirmDelete: "Chiedi conferma prima di eliminare il frammento",
	chkInsertTabs: "Usa il tasto tab per inserire caratteri di tabulazione invece di saltare al prossimo campo",
	txtBackupFolder: "Specifica il percorso della directory di backup",
	txtMaxEditRows: "Specifica il massimo numero di righe nelle finestre di modifica dei frammenti",
	txtFileSystemCharSet: "Set di caratteri di default per salvare le modifiche (solo Firefox/Mozilla)"});
	
merge(config.messages,{
	customConfigError: "Si sono verificati dei problemi nel caricare i plugin. Vedi PluginManager per i dettagli",
	pluginError: "Errore: %0",
	pluginDisabled: "Plugin non eseguito perchè disabilitato mediante l'etichetta 'systemConfigDisable' ",
	pluginForced: "Plugin eseguito perchè forzato mediante l'etichetta 'systemConfigForce' ",
	pluginVersionError: "Plugin non eseguito perchè richiede una versione più aggiornata di TiddlyWiki",
	nothingSelected: "Nessuna selezione. Devi selezionare prima uno o più elementi",
	savedSnapshotError: "Sembra che questo TiddlyWiki sia stato salvato scorrettamente. Per informazioni vai a http://www.tiddlywiki.com/#DownloadSoftware per ulteriori dettagli",
	subtitleUnknown: "(sconosciuto)",
	undefinedTiddlerToolTip: "Il frammento '%0' non esiste",
	shadowedTiddlerToolTip: "Il frammento '%0' non esiste, è un modello predefinito",
	tiddlerLinkTooltip: "%0 - %1, %2",
	externalLinkTooltip: "Collegamento a %0",
	noTags: "Non ci sono frammenti del tipo",
	notFileUrlError: "Devi esportare questo TiddlyWiki in un file prima di poterlo salvare",
	cantSaveError: "Non si possono salvare le modifiche con questo browser. Possibili cause possono essere:\n- il tuo browser non supporta il salvataggio (Firefox, Internet Explorer, Safari e Opera, se opportunamente configurati, funzionano bene)\n- il path del tuo file TiddlyWiki contiene caratteri non consentiti\n- il file HTML di TiddlyWiki è stato spostato o rinominato",
	invalidFileError: "Il file originale '%0' non sembra di tipo TiddlyWiki",
	backupSaved: "Backup riuscito",
	backupFailed: "Salvataggio file di backup non riuscito",
	rssSaved: "RSS feed salvato come",
	rssFailed: "Salvataggio file RSS feed non riuscito",
	emptySaved: "Modello vuoto salvato",
	emptyFailed: "Salvataggio file modello vuoto non riuscito",
	mainSaved: "File TiddlyWiki primario salvato",
	mainFailed: "File TiddlyWiki principale non salvato. Le tue modifiche non sono state salvate",
	macroError: "Errore nella macro <<\%0>>",
	macroErrorDetails: "Errore in esecuzione della macro <<\%0>>:\n%1",
	missingMacro: "La macro non esiste",
	overwriteWarning: "Il frammento '%0' esiste già. OK per sostituirlo",
 unsavedChangesWarning: "ATTENZIONE! Non sono state ancora salvate le modifiche in TiddlyWiki\n\nOK per salvare\nANNULLA per annullarle",
 confirmExit: "--------------------------------\n\nCi sono delle modifiche non salvate in TiddlyWiki. Se continui perderai le modifiche\n\n--------------------------------",
 saveInstructions: "SaveChanges",
 unsupportedTWFormat: "Formato TiddlyWiki non supportato '%0'",
 tiddlerSaveError: "Errore nel salvataggio del frammento '%0'",
 tiddlerLoadError: "Errore nel caricamento del frammento '%0'",
 wrongSaveFormat: "Non è possibile salvare nel formato '%0'. Usa il formato standard per salvare",
 invalidFieldName: "Nome di campo invalido %0",
 fieldCannotBeChanged: "Campo '%0' non può essere modificato",
 loadingMissingTiddler: "Attempting to retrieve the tiddler '%0' from the '%1' server at:\n\n'%2' in the workspace '%3'",
 upgradeDone: "Aggiornamento alla versione %0 completato\n\nClicca 'OK' per ricaricare la versione aggiornata di TiddlyWiki"});
 
merge(config.messages.messageClose,{
	text: "Chiudi",
	tooltip: "Chiude l'area messaggi"});

config.messages.backstage = {
	open: {text: "Strumenti", tooltip: "Apre l'area strumenti per eseguire azioni di authoring e editing"},
	close: {text: "Chiudi", tooltip: "Chiude l'area strumenti"},
	prompt: "Strumenti: ",
	decal: {
		edit: {text: "Modifica", tooltip: "Modifica il frammento '%0'"}
	}
};

config.messages.listView = {
	tiddlerTooltip: "Clicca per visualizzare il contenuto (full text) di questo frammento",
	previewUnavailable: "(preview non disponibile)"
};

config.messages.dates.months = ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre","Dicembre"];
config.messages.dates.days = ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"];
config.messages.dates.shortMonths = ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"];
config.messages.dates.shortDays = ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"];
// suffixes for dates, eg "1st","2nd","3rd"..."30th","31st"
config.messages.dates.daySuffixes = ["mo","do","zo","to","to","to","mo","vo","no","mo",
		"mo","mo","mo","mo","mo","mo","mo","mo","mo","mo",
		"mo","mo","mo","mo","mo","mo","mo","mo","mo","mo",
		"mo"];
config.messages.dates.am = "am";
config.messages.dates.pm = "pm";

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

merge(config.views.wikified.tag,{
	labelNoTags: "Nessuna categoria",
	labelTags: "Categorie: ",
	openTag: "Apri la categoria '%0'",
	tooltip: "Mostra frammenti del tipo '%0'",
	openAllText: "Apri tutti i tiddler di questa categoria",
	openAllTooltip: "Apri tutti",
	popupNone: "Non ci sono altri frammenti del tipo '%0'"});

merge(config.views.wikified,{
	defaultText: "Il frammento '%0' non esiste ancora. Doppio click per crearlo",
	defaultModifier: "(mancante)",
	shadowModifier: "(frammento nascosto incorporato)",
	dateFormat: "DD MMM YYYY", // use this to change the date format for your locale, eg "YYYY MMM DD", do not translate the Y, M or D
	createdPrompt: "creato"});

merge(config.views.editor,{
	tagPrompt: "Aggiungi le categorie separandole con uno spazio, [[se il titolo della categoria è più lungo di una parola mettilo tra due parentesi quadre]] o scegli tra quelle esistenti",
	defaultText: "Edita '%0'"});

merge(config.views.editor.tagChooser,{
	text: "Esistenti",
	tooltip: "Seleziona la categoria tra quelle già presenti",
	popupNone: "Non è definita nessuna categoria",
	tagTooltip: "Aggiungi la categoria '%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: "Trova",
	prompt: "Cerca in questo TiddlyWiki",
	accessKey: "F",
	successMsg: "%0 Trovati frammenti contenenti %1",
	failureMsg: "Nessun frammento contiene %0"});

merge(config.macros.tagging,{
	label: "Crea Categorie: ",
	labelNotTag: "Categoria:",
	tooltip: "Frammenti di tipo '%0'"});

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

merge(config.macros.allTags,{
	tooltip: "Mostra i frammenti del tipo '%0'",
	noTags: "Non ci sono frammenti categorizzati"});

config.macros.list.all.prompt = "Elenca tutti i frammenti in ordine alfabetico";
config.macros.list.missing.prompt = "Elenca i frammenti collegati tra loro ma non ancora definiti";
config.macros.list.orphans.prompt = "Elenca i frammenti non collegati";
config.macros.list.shadowed.prompt = "Elenca i frammenti nascosti contenenti le impostazioni del programma";
config.macros.list.touched.prompt = "Elenca i frammenti che sono stati modificati localmente";

merge(config.macros.closeAll,{
	label: "Chiudi tutti",
	prompt: "Chiude tutti i frammenti aperti (esclusi quelli in modifica)"});

merge(config.macros.permaview,{
	label: "Indirizzo di Pagina",
	prompt: "Indica sulla barra l'indirizzo della pagina e dei frammenti aperti"});

merge(config.macros.saveChanges,{
	label: "Salva modifiche",
	prompt: "Salva tutti i frammenti per creare un nuovo TiddlyWiki",
	accessKey: "S"});

merge(config.macros.newTiddler,{
	label: "Nuovo",
	prompt: "Crea un nuovo frammento",
	title: "Nuovo",
	accessKey: "N"});

merge(config.macros.newJournal,{
	label: "Oggi",
	prompt: "Crea un nuovo frammento con data e ora corrente",
	accessKey: "J"});

merge(config.macros.options,{
	wizardTitle: "Modifica le opzioni",
	step1Title: "Queste opzioni sono salvate nei cookies del tuo browser",
	step1Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='false' name='chkUnknown'>Mostra le opzioni sconosciute</input>",
	unknownDescription: "//(sconosciuta)//",
	listViewTemplate: {
		columns: [
			{name: 'Option', field: 'option', title: "Opzione", type: 'String'},
			{name: 'Description', field: 'description', title: "Descrizione", type: 'WikiText'},
			{name: 'Name', field: 'name', title: "Nome", type: 'String'}
			],
		rowClasses: [
			{className: 'lowlight', field: 'lowlight'} 
			]}
	});

merge(config.macros.plugins,{
	wizardTitle: "Gestione plugin",
	step1Title: "Plugin attualmente installati",
	step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
  skippedText: "(Questo plugin non è stato eseguito perchè è stato caricato dopo l'avvio di TiddlyWiki)",
	noPluginText: "Non ci sono plugin installati",
	confirmDeleteText: "Sei sicuro di voler cancellare questo/i plugin?:\n\n%0",
	removeLabel: "Rimuovi l'etichetta systemConfig",
	removePrompt: "Rimuovi l'etichetta systemConfig",
	deleteLabel: "Cancella",
	deletePrompt: "Cancella definitivamente questi frammenti",
  listViewTemplate : {
		columns: [
			{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "Tiddler", type: 'Tiddler'},
			{name: 'Size', field: 'size', tiddlerLink: 'size', title: "Size", type: 'Size'},
      {name: 'Forced', field: 'forced', title: "Forced", tag: 'systemConfigForce', type: 'TagCheckbox'},
			{name: 'Disabled', field: 'disabled', title: "Disabled", tag: 'systemConfigDisable', type: 'TagCheckbox'},
			{name: 'Executed', field: 'executed', title: "Loaded", type: 'Boolean', trueText: "Yes", falseText: "No"},
			{name: 'Startup Time', field: 'startupTime', title: "Startup Time", type: 'String'},
      {name: 'Error', field: 'error', title: "Status", type: 'Boolean', trueText: "Error", falseText: "OK"},
			{name: 'Log', field: 'log', title: "Log", type: 'StringList'}
			],
		rowClasses: [
    {className: 'error', field: 'error'},
    {className: 'warning', field: 'warning'}
    ]}
 });

merge(config.macros.toolbar,{
	moreLabel: "Altro",
	morePrompt: "Mostra altri comandi"
	});
	
merge(config.macros.refreshDisplay,{
	label: "Rinnova",
	prompt: "Rinnova l'intero display di TiddlyWiki"
	});

merge(config.macros.importTiddlers,{
	readOnlyWarning: "Non puoi importare frammenti in un TiddlyWiki aperto in sola lettura. Prova ad aprirlo da file:// URL",
	wizardTitle: "Importa frammenti da altri file o server",
	step1Title: "Passo 1: Individua il server o il file TiddlyWiki",
	step1Html: "Specifica il tipo di server: <select name='selTypes'><option value=''>Scegli...</option></select><br>Digita l'URL o il percorso qui: <input type='text' size=50 name='txtPath'><br>...o esplora per un file: <input type='file' size=50 name='txtBrowse'><br><hr>...o seleziona un feed predefinito: <select name='selFeeds'><option value=''>Scegli...</option></select>",
	openLabel: "Apri",
	openPrompt: "Apri la connessione per questo file o server",
	openError: "Si sono verificati problemi nel prelevare il file TiddlyWiki",
	statusOpenHost: "Apro l'host",
	statusGetWorkspaceList: "Ottengo la lista dei workspace disponibili",
	step2Title: "Passo 2: Scegli il workspace",
	step2Html: "Digita il nome di un workspace: <input type='text' size=50 name='txtWorkspace'><br>...o seleziona un workspace: <select name='selWorkspace'><option value=''>Scegli...</option></select>",
	cancelLabel: "Cancella",
	cancelPrompt: "Cancella l'importazione",
	statusOpenWorkspace: "Apro il workspace",
	statusGetTiddlerList: "Ottengo la lista dei frammenti disponibili",
	errorGettingTiddlerList: "Errore nel prelevare la lista dei frammenti, clicca Cancel per provare ancora",
	step3Title: "Passo 3: Scegli il/i frammento/i da importare",
	step3Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='true' name='chkSync'>Mantieni questi frammenti collegati a questo server in modo da poterli sincronizzare per successive modifiche</input><br><input type='checkbox' name='chkSave'>Salva i dettagli di questo server in un frammento 'systemServer' con il nome:</input> <input type='text' size=25 name='txtSaveTiddler'>",
	importLabel: "Importa",
	importPrompt: "Importa questi frammenti",
	confirmOverwriteText: "Sei sicuro di voler sovrascrivere questi frammenti:\n\n%0",
	step4Title: "Passo 4: Importato/i %0 frammento/i",
	step4Html: "<input type='hidden' name='markReport'></input>", // DO NOT TRANSLATE
	doneLabel: "Fatto",
	donePrompt: "Chiudi questo wizard",
	statusDoingImport: "Importo i frammenti",
	statusDoneImport: "Tutti i frammenti importati",
	systemServerNamePattern: "%2 on %1",
	systemServerNamePatternNoWorkspace: "%1",
	confirmOverwriteSaveTiddler: "Il frammento '%0' già esiste. Clicca su 'OK' per sovrascriverlo o 'Cancel' per lasciarlo inalterato",
	serverSaveTemplate: "|''Type:''|%0|\n|''URL:''|%1|\n|''Workspace:''|%2|\n\nQuesto frammento è stato creato automaticamente per memorizzare i dettagli di questo server",
	serverSaveModifier: "(System)",
	listViewTemplate: {
		columns: [
			{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "Frammento", type: 'Tiddler'},
			{name: 'Size', field: 'size', tiddlerLink: 'size', title: "Dimensioni", type: 'Size'},
			{name: 'Tags', field: 'tags', title: "Categorie", type: 'Tags'}
			],
		rowClasses: [
			]}
	});

merge(config.macros.upgrade,{
	wizardTitle: "Aggiorna il codice base di TiddlyWiki",
	step1Title: "Aggiorna o ripara questo TiddlyWiki all'ultima versione",
	step1Html: "Stai per aggiornare all'ultima versione del codice base di TiddlyWiki (da <a href='%0' class='externalLink' target='_blank'>%1</a>). Il contenuto del tuo TiddlyWiki viene preservato nel processo di aggiornamento.<br><br>Tieni presente che l'aggiornamento del codice base può interferire con vecchi plugins. Se si verificano problemi con il file aggiornato, consulta <a href='http://www.tiddlywiki.org/wiki/CoreUpgrades' class='externalLink' target='_blank'>http://www.tiddlywiki.org/wiki/CoreUpgrades</a>",
	errorCantUpgrade: "Impossibile aggiornare questo TiddlyWiki. E' possibile aggiornare solo TiddlyWiki memorizzati in locale",
	errorNotSaved: "Devi salvare le modifiche prima di realizzare l'aggiornamento",
	step2Title: "Conferma i dettagli dell'aggiornamento",
	step2Html_downgrade: "Stai per realizzare un downgrade di TiddlyWiki alla versione %0 dalla %1.<br><br>Non è consigliato il downgrade del codice base ad una vecchia versione",
	step2Html_restore: "Questo TiddlyWiki utilizza già l'ultima versione del codice base (%0).<br><br>Puoi comunque continuare l'aggiornamento per assicurarti che il codice base non sia stato corrotto o danneggiato",
	step2Html_upgrade: "Stai per aggiornare TiddlyWiki alla versione %0 dalla %1",
	upgradeLabel: "Aggiorna",
	upgradePrompt: "Preparazione del processo di aggiornamento",
	statusPreparingBackup: "Preparazione backup",
	statusSavingBackup: "Salvataggio del file di backup",
	errorSavingBackup: "Si è verificato un problema nel salvataggio del file di backup",
	statusLoadingCore: "Caricamento del codice base",
	errorLoadingCore: "Errore nel caricamento del codice base",
	errorCoreFormat: "Errore con il nuovo codice base",
	statusSavingCore: "Salvataggio del nuovo codice base",
	statusReloadingCore: "Ricarico il nuovo codice base",
	startLabel: "Inizia",
	startPrompt: "Inizia l'aggiornamento",
	cancelLabel: "Cancella",
	cancelPrompt: "Cancella l'aggiornamento",
	step3Title: "Aggiornamento cancellato",
	step3Html: "Hai cancellato il processo di aggiornamento"
	});

merge(config.macros.sync,{
	listViewTemplate: {
		columns: [
			{name: 'Selected', field: 'selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "Frammento", type: 'Tiddler'},
			{name: 'Server Type', field: 'serverType', title: "Tipo server", type: 'String'},
			{name: 'Server Host', field: 'serverHost', title: "Host server", type: 'String'},
			{name: 'Server Workspace', field: 'serverWorkspace', title: "Server workspace", type: 'String'},
			{name: 'Status', field: 'status', title: "Stato sincronizzazione", type: 'String'},
			{name: 'Server URL', field: 'serverUrl', title: "Server URL", text: "Visualizza", type: 'Link'}
			],
		rowClasses: [
			],
		buttons: [
			{caption: "Sincronizza questi frammenti", name: 'sync'}
			]},
	wizardTitle: "Sincronizza con file o server esterni",
	step1Title: "Scegli il frammento da sincronizzare",
	step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
	syncLabel: "Sincronizza",
	syncPrompt: "Sincronizza questi frammenti",
	hasChanged: "Modificato in locale",
	hasNotChanged: "Non modificato in locale",
	syncStatusList: {
		none: {text: "...", color: "none"},
		changedServer: {text: "Modificato sul server", color: '#80ff80'},
		changedLocally: {text: "Modificato in locale", color: '#80ff80'},
		changedBoth: {text: "Modificato in locale e sul server", color: '#ff8080'},
		notFound: {text: "Non trovato sul server", color: '#ffff80'},
		putToServer: {text: "Modifiche salvate sul server", color: '#ff80ff'},
		gotFromServer: {text: "Recupero aggiornamenti dal server", color: '#80ffff'}
		}
	});

merge(config.commands.closeTiddler,{
	text: "Chiudi",
	tooltip: "Chiude questo frammento"});

merge(config.commands.closeOthers,{
	text: "Chiude altri",
	tooltip: "Chiude tutti gli altri frammenti"});

merge(config.commands.editTiddler,{
	text: "Modifica",
	tooltip: "Edita il frammento",
	readOnlyText: "Visualizza",
	readOnlyTooltip: "Visualizza il contenuto di questo frammento"});

merge(config.commands.saveTiddler,{
	text: "Salva",
	tooltip: "Salva le modifiche"});

merge(config.commands.cancelTiddler,{
	text: "Annulla",
	tooltip: "Annulla le modifiche",
	warning: "Sei sicuro di voler annullare le modifiche a '%0'?",
	readOnlyText: "Chiudi",
	readOnlyTooltip: "Visualizza il frammento nel modo usuale"});

merge(config.commands.deleteTiddler,{
	text: "Elimina",
	tooltip: "Elimina questo frammento",
	warning: "Sei sicuro di voler eliminare '%0'?"});

merge(config.commands.permalink,{
	text: "Indirizzo",
	tooltip: "Indica sulla barra l'indirizzo di questo frammento"});

merge(config.commands.references,{
	text: "Collegati",
	tooltip: "Elenca i frammenti che puntano qui",
	popupNone: "Nessun frammento punta qui"});

merge(config.commands.jump,{
	text: "Vai a",
	tooltip: "Vai ad un altro frammento aperto"});

merge(config.commands.syncing,{
	text: "Sincronizzazione",
	tooltip: "Controlla la sincronizzazione di questo frammento con un file o un server esterno",
	currentlySyncing: "<div>Attualmente sincronizzato attraverso <span class='popupHighlight'>'%0'</span> to:</"+"div><div>host: <span class='popupHighlight'>%1</span></"+"div><div>workspace: <span class='popupHighlight'>%2</span></"+"div>", // Note escaping of closing <div> tag
	notCurrentlySyncing: "Non sincronizzato",
	captionUnSync: "Ferma la sincronizzazione di questo frammento",
	chooseServer: "Sincronizza questo frammento con un altro server:",
	currServerMarker: "\u25cf ",
	notCurrServerMarker: "  "});

merge(config.commands.fields,{
	text: "Campi",
	tooltip: "Mostra i campi estesi di questo frammento",
	emptyText: "Non esistono campi estesi per questo frammento",
	listViewTemplate: {
		columns: [
			{name: 'Field', field: 'field', title: "Field", type: 'String'},
			{name: 'Value', field: 'value', title: "Value", type: 'String'}
			],
		rowClasses: [
			],
		buttons: [
			]}});
			
merge(config.shadowTiddlers,{
	DefaultTiddlers: "[[TranslatedGettingStarted]]",
	MainMenu: "[[TranslatedGettingStarted]]\n\n\n^^~TiddlyWiki versione <<version>>\n© 2007 [[UnaMesa|http://www.unamesa.org/]]^^",
	TranslatedGettingStarted: "Per iniziare ad usare questo documento vuoto, comincia ad editare i seguenti frammenti:\n* SiteTitle & SiteSubtitle: Il titolo ed il sottotitolo del sito (dopo il salvataggio saranno anche visibili nella barra del browser)\n* MainMenu: Il menu principale di ~TiddliWiki\n* DefaultTiddlers: Inserisci i frammenti che desideri compaiano all'apertura di questo ~TiddlyWiki\nInserisci anche un nome utente che ti permetterà di firmare le tue modifiche (usa un formato di parola Wiki es. ~MarioRossi): <<option txtUserName>>",
	SiteTitle: "Il mio ~TiddlyWiki",
	SiteSubtitle: "Un programma non lineare per scrivere web",
	SiteUrl: "http://www.tiddlywiki.com/",
	OptionsPanel: "Queste opzioni sono utilizzate per personalizzare il tuo ~TiddlyWiki e vengono salvate nel browser.\n\nDigita un nome utente per firmare le tue modifiche. Usa un formato di parola Wiki (es. ~MarioRossi)\n<<option txtUserName>>\n\n<<option chkSaveBackups>> Salva backups\n<<option chkAutoSave>> Salvataggio automatico\n<<option chkRegExpSearch>> Ricerca estesa\n<<option chkCaseSensitiveSearch>> Considera caratteri nella ricerca\n<<option chkAnimate>> Abilita animazioni\n\n----\nVedi anche [[Opzioni avanzate|AdvancedOptions]]",
	SideBarOptions: '<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "Opzioni »" "Modifica le opzioni di TiddlyWiki">>',
	SideBarTabs: '<<tabs txtMainTab "Data" "Elenca i frammenti cronologicamente" TabTimeline "Tutti" "Tutti i frammenti in ordine alfabetico" TabAll "Categorie" "Elenca i frammenti per tipo" TabTags "Altro" "Altri elenchi" TabMore>>',
	TabMore: '<<tabs txtMoreTab "Mancanti" "Frammenti non ancora editati" TabMoreMissing "Orfani" "Frammenti non collegati tra loro" TabMoreOrphans "Nascosti" "Frammenti nascosti" TabMoreShadowed>>'});
 
merge(config.annotations,{
	AdvancedOptions: "Questo frammento nascosto permette l'accesso alle opzioni avanzate di TiddlyWiki",
	ColorPalette: "I valori presenti in questo frammento nascosto determinano lo schema dei colori dell'interfaccia utente di TiddlyWiki",
	DefaultTiddlers: "I frammenti elencati in questo frammento nascosto saranno automaticamente visualizzati quando viene avviato TiddlyWiki",
	EditTemplate: "Il template HTML contenuto in questo frammento nascosto determina come vengono visualizzati i frammenti quando sono editati",
	GettingStarted: "Questo frammento nascosto fornisce le istruzioni d'uso di base",
	ImportTiddlers: "Questo frammento nascosto fornisce accesso alla funzione di importazione frammenti",
	MainMenu: "Questo frammento nascosto definisce il contenuto del menu principale di TiddlyWiki visualizzato nella colonna di sinistra",
	MarkupPreHead: "Questo frammento è inserito nel top della sezione <head> del file HTML di TiddlyWiki",
	MarkupPostHead: "Questo frammento è inserito nel bottom della sezione <head> del file HTML di TiddlyWiki",
	MarkupPreBody: "Questo frammento è inserito nel top della sezione <body> del file HTML di TiddlyWiki",
	MarkupPostBody: "Questo frammento è inserito alla fine della sezione <body> del file HTML di TiddlyWiki immediatamente prima del blocco script",
	OptionsPanel: "Questo frammento nascosto definisce il contenuto del pannello opzioni visualizzato nella sidebar",
	PageTemplate: "Il template HTML contenuto in questo frammento nascosto determina il layout complessivo di TiddlyWiki",
	PluginManager: "Questo frammento nascosto fornisce accesso al gestore plugin",
	SideBarOptions: "Questo frammento nascosto definisce il contenuto della sidebar",
	SideBarTabs: "Questo frammento nascosto è usato per i contenuti dei tabs della sidebar",
	SiteSubtitle: "Questo frammento nascosto definisce la seconda parte del titolo della pagina",
	SiteTitle: "Questo frammento nascosto definisce la prima parte del titolo della pagina",
	SiteUrl: "Questo frammento nascosto dovrebbe essere personalizzato con l'URL completo utilizzato per pubblicare il sito",
	StyleSheetColours: "Questo frammento nascosto contiene le definizioni CSS relative al colore degli elementi di pagina",
	StyleSheet: "Questo frammento nascosto può contenere le definizioni CSS personalizzate",
	StyleSheetLayout: "Questo frammento nascosto contiene le definizioni CSS relative al layout degli elementi di pagina",
	StyleSheetLocale: "Questo frammento nascosto contiene le definizioni CSS relative alla traduzione locale",
	StyleSheetPrint: "Questo frammento nascosto contiene le definizioni CSS per la stampa",
	TabAll: "Questo frammento nascosto definisce i contenuti del tab 'Tutti' della sidebar",
	TabMore: "Questo frammento nascosto definisce i contenuti del tab 'Altro' della sidebar",
	TabMoreMissing: "Questo frammento nascosto definisce i contenuti del tab 'Mancanti' della sidebar",
	TabMoreOrphans: "Questo frammento nascosto definisce i contenuti del tab 'Orfani' della sidebar",
	TabMoreShadowed: "Questo frammento nascosto definisce i contenuti del tab 'Nascosti' della sidebar",
	TabTags: "Questo frammento nascosto definisce i contenuti del tab 'Categorie' della sidebar",
	TabTimeline: "Questo frammento nascosto definisce i contenuti del tab 'Data' della sidebar",
	ToolbarCommands: "Questo frammento nascosto definisce quali comandi sono visualizzati nella tiddler toolbar",
	ViewTemplate: "Il template HTML contenuto in questo frammento nascosto determina l'aspetto dei frammenti"
	});
	
}}}
<script show>
var xmlhttp,alerted,xx


try {
	var xmlhttp = new XMLHttpRequest(); // Modern
} catch(ex) {
	try {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); // IE 6
	} catch (ex2) {
		xmlhttp = null;
	}
}

displayMessage("xmlhttp ok");


if (xmlhttp) { 
displayMessage("xmlhttp open");
  xmlhttp.open("HEAD", "http://digilander.libero.it/tizzziano/index.html",true);
displayMessage("xmlhttp onready");
  xmlhttp.onreadystatechange = function () {
      if (xmlhttp.readyState==4) {
                xx=xmlhttp.responseText
               displayMessage("test:"+xx);
                }
         }

displayMessage("xmlhttp send");
  //xmlhttp.send(null)
displayMessage("xmlhttp fine");

// if (xmlhttp.readyState==4) {
//  displayMessage("test:"+xx);
//  return "test: "+xx
// }
  return "test: "+xx
}

</script>
/***
|''Name:''|FieldsEditorPlugin|
|''Description:''|//create//, //edit//, //view// and //delete// commands in toolbar <<toolbar fields>>.|
|''Version:''|1.0.2|
|''Date:''|Dec 21,2007|
|''Source:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Author:''|Pascal Collin|
|''License:''|[[BSD open source license|License]]|
|''~CoreVersion:''|2.2.0|
|''Browser:''|Firefox 2.0; InternetExplorer 6.0, others|
!Demo:
On [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], see [[FieldEditor example]]
!Installation:
*import this tiddler from [[homepage|http://visualtw.ouvaton.org/VisualTW.html]] (tagged as systemConfig)
*save and reload
*optionnaly : add the following css text in your StyleSheet : {{{#popup tr.fieldTableRow td {padding:1px 3px 1px 3px;}}}}
!Code
***/

//{{{

config.commands.fields.handlePopup = function(popup,title) {
	var tiddler = store.fetchTiddler(title);
	if(!tiddler)
		return;
	var fields = {};
	store.forEachField(tiddler,function(tiddler,fieldName,value) {fields[fieldName] = value;},true);
	var items = [];
	for(var t in fields) {
		var editCommand = "<<untiddledCall editFieldDialog "+escape(title)+" "+escape(t)+">>";
		var deleteCommand = "<<untiddledCall deleteField "+escape(title)+" "+escape(t)+">>";
		var renameCommand = "<<untiddledCall renameField "+escape(title)+" "+escape(t)+">>";
		items.push({field: t,value: fields[t], actions: editCommand+renameCommand+deleteCommand});
	}
	items.sort(function(a,b) {return a.field < b.field ? -1 : (a.field == b.field ? 0 : +1);});
	var createNewCommand = "<<untiddledCall createField "+escape(title)+">>";
	items.push({field : "", value : "", actions:createNewCommand });
	if(items.length > 0)
		ListView.create(popup,items,this.listViewTemplate);
	else
		createTiddlyElement(popup,"div",null,null,this.emptyText);
}

config.commands.fields.listViewTemplate = {
	columns: [
		{name: 'Field', field: 'field', title: "Field", type: 'String'},
		{name: 'Actions', field: 'actions', title: "Actions", type: 'WikiText'},
		{name: 'Value', field: 'value', title: "Value", type: 'WikiText'}
	],
	rowClasses: [
			{className: 'fieldTableRow', field: 'actions'}
	],
	buttons: [	//can't use button for selected then delete, because click on checkbox will hide the popup
	]
}

config.macros.untiddledCall = {  // when called from listview, tiddler is unset, so we need to pass tiddler as parameter
	handler : function(place,macroName,params,wikifier,paramString) {
		var macroName = params.shift();
		if (macroName) var macro = config.macros[macroName];
		var title = params.shift();
		if (title) var tiddler = store.getTiddler(unescape(title));
		if (macro) macro.handler(place,macroName,params,wikifier,paramString,tiddler);		
	}
}

config.macros.deleteField = {
	handler : function(place,macroName,params,wikifier,paramString,tiddler) {
		if(!readOnly && params[0]) {
			fieldName = unescape(params[0]);
			var btn = createTiddlyButton(place,"delete", "delete "+fieldName,this.onClickDeleteField);
			btn.setAttribute("title",tiddler.title);
			btn.setAttribute("fieldName", fieldName);
		}
	},
	onClickDeleteField : function() {
		var title=this.getAttribute("title");
		var fieldName=this.getAttribute("fieldName");
		var tiddler = store.getTiddler(title);
		if (tiddler && fieldName && confirm("delete field " + fieldName+" from " + title +" tiddler ?")) {
			delete tiddler.fields[fieldName];
			store.saveTiddler(tiddler.title,tiddler.title,tiddler.text,tiddler.modifier,tiddler.modified,tiddler.tags,tiddler.fields);
			story.refreshTiddler(title,"ViewTemplate",true);
		}
		return false;
	}
}

config.macros.createField = {
	handler : function(place,macroName,params,wikifier,paramString,tiddler) {
		if(!readOnly) {
			var btn = createTiddlyButton(place,"create new", "create a new field",this.onClickCreateField);
			btn.setAttribute("title",tiddler.title);
		}
	},
	onClickCreateField : function() {
		var title=this.getAttribute("title");
		var tiddler = store.getTiddler(title);
		if (tiddler) {
			var fieldName = prompt("Field name","");
			if (store.getValue(tiddler,fieldName)) {
				window.alert("This field already exists.");
			}
			else if (fieldName) {
				var v = prompt("Field value","");
				tiddler.fields[fieldName]=v;
				store.saveTiddler(tiddler.title,tiddler.title,tiddler.text,tiddler.modifier,tiddler.modified,tiddler.tags,tiddler.fields);
				story.refreshTiddler(title,"ViewTemplate",true);
			}
		}
		return false;
	}
}

config.macros.editFieldDialog = {
	handler : function(place,macroName,params,wikifier,paramString,tiddler) {
		if(!readOnly && params[0]) {
			fieldName = unescape(params[0]);
			var btn = createTiddlyButton(place,"edit", "edit this field",this.onClickEditFieldDialog);
			btn.setAttribute("title",tiddler.title);
			btn.setAttribute("fieldName", fieldName);
		}
	},
	onClickEditFieldDialog : function() {
		var title=this.getAttribute("title");
		var tiddler = store.getTiddler(title);
		var fieldName=this.getAttribute("fieldName");
		if (tiddler && fieldName) {
			var value = tiddler.fields[fieldName];
			value = value ? value : "";
			var lines = value.match(/\n/mg);
			lines = lines ? true : false;
			if (!lines || confirm("This field contains more than one line. Only the first line will be kept if you edit it here. Proceed ?")) {
				var v = prompt("Field value",value);
				tiddler.fields[fieldName]=v;
				store.saveTiddler(tiddler.title,tiddler.title,tiddler.text,tiddler.modifier,tiddler.modified,tiddler.tags,tiddler.fields);
				story.refreshTiddler(title,"ViewTemplate",true);
			}
		}
		return false;
	}
}

config.macros.renameField = {
	handler : function(place,macroName,params,wikifier,paramString,tiddler) {
		if(!readOnly && params[0]) {
			fieldName = unescape(params[0]);
			var btn = createTiddlyButton(place,"rename", "rename "+fieldName,this.onClickRenameField);
			btn.setAttribute("title",tiddler.title);
			btn.setAttribute("fieldName", fieldName);
		}
	},
	onClickRenameField : function() {
		var title=this.getAttribute("title");
		var fieldName=this.getAttribute("fieldName");
		var tiddler = store.getTiddler(title);
		if (tiddler && fieldName) {
			var newName = prompt("Rename " + fieldName + " as ?", fieldName);
			if (newName) {
				tiddler.fields[newName]=tiddler.fields[fieldName];
				delete tiddler.fields[fieldName];
				store.saveTiddler(tiddler.title,tiddler.title,tiddler.text,tiddler.modifier,tiddler.modified,tiddler.tags,tiddler.fields);
				story.refreshTiddler(title,"ViewTemplate",true);
			}
		}
		return false;
	}
}

config.shadowTiddlers.StyleSheetFieldsEditor = "/*{{{*/\n";
config.shadowTiddlers.StyleSheetFieldsEditor += ".fieldTableRow td {padding : 1px 3px}\n";
config.shadowTiddlers.StyleSheetFieldsEditor += ".fieldTableRow .button {border:0; padding : 0 0.2em}\n";
config.shadowTiddlers.StyleSheetFieldsEditor +="/*}}}*/";
store.addNotification("StyleSheetFieldsEditor", refreshStyles);

//}}}