Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
Promemoria per il giorno 18 aprile 2006
Questa opzione, se selezionata, abilita l'effetto di animazione nell'apertura dei tiddler
Prima che TiddlyWiki supportasse i [[Plugin]], molti sviluppatori indipendenti hanno creato specifici adattamenti di questo software per realizzare nuove funzionalità. Questi adattamenti possono essere considerati variazioni del codice originale e //non sono necessariamente basati sull'ultima versione di codice di ~TiddlyWiki//. Per questo motivo, la tendenza attuale è quella di realizzare nuove funzionalità sotto forma di Plugin in modo da poter essere più facilmente integrate all'interno del codice originario e aggiornate all'ultima versione.
Nel seguito si riporta un elenco degli adattamenti di ~TiddlyWiki:
* ~KeithHodges' ~TiddlyPom, http://www.warwick.ac.uk/~tuspam/tiddlypom.html
* ~RodneyGomes' ~RoWiki, basato su ~PyTW, http://rodney.gotdns.com/
* ~LarsEnglund's ~TiddlyWikiRDF, http://larsenglund.com/TiddlyWikiRDF/
* ~BramChen's ~PrinceTiddlyWiki, http://ptw.sf.net/index-en.html
* ~JoshGoebel's ~ServerSideWiki, http://www.serversidewiki.com
* ~MasakiYatsu's ~LesserWiki, http://lesserwiki.org/
* ~MichaelBridgen's ~StickyWiki, http://www.squaremobius.net/~mikeb/Darcs/sticky-wiki/
* ~DavidHarper's ~BloTid, http://www.spacecoastweb.net/BloTid/Tiddly/
* ~JacquesTurbé's ~TidliPo, http://avm.free.fr/tidlipo.html in Francese
* ~JoeRaii's pytw, http://www.cs.utexas.edu/~joeraii/pytw/ ed il suo Siglet, http://www.cs.utexas.edu/~joeraii/siglet/
* ~JároliJózsef's ~MagyarTiddlyWiki, http://innen.hu/MagyarTiddlyWiki in Ungherese
* Yoshimov's ~EncryptedTiddlyWiki, http://wiki.yoshimov.com/?page=EncryptedTiddlyWiki
* ~TiagoDionizio's ~TsWiki basato su Tcl e ~SQLite, http://mega.ist.utl.pt/~tngd/wiki/
* ~TimMorgan's ~ZiddlyWiki basato su Zope, http://timmorgan.org/ZiddlyWiki/
* ~SteveRumsby's ~YetAnotherTiddlyWikiAdaptation, http://www.rumsby.org/yatwa/
* ~PhonoHawk's ~PerlTiddlyWiki, http://ccm.sherry.jp/tiddly/
* ~NathanBower's ~GTDTiddlyWiki, http://shared.snapgrid.com/gtd_tiddlywiki.html
* ~GeetDuggal's ~PileTiddly, http://www.geetduggal.com/PileTiddly/
* ~DanPhiffer's ~TiddlyWikiRemote, http://phiffer.org/tiddly/
* ~JonnyLeRoy's ~TiddlyTagWiki, http://www.digitaldimsum.co.uk/
* ~JodyFoo's ~TagglyWiki, http://informationality.com/tagglywiki/tagglywiki.html
* ~ChristianHauck's, http://www.christianhauck.net/html/14300.html
* ~TonyLownds's ~TiddlyHacks, http://tony.lownds.com/tiddly/dev/cgi/index.cgi
* ~AlanHecht's ~QwikiWeb, http://snipurl.com/qwikiweb
* ~TimCuthbertson e ~MattGiuca's ~TiddlyWikiCSS, http://codestar.lidonet.net/misc/tiddlywikicss.html
** ulteriori sviluppi di ~PeterLazarev, http://petka.webhop.net/#NiceTiddlyWiki
* ~PatrickCurry e ~GabrielJeffrey's ~PhpTiddlyWiki, http://www.patrickcurry.com/tiddly/
<<option chkOpenInNewWindow>> Apri collegamenti in una nuova finestra
<<option chkSaveEmptyTemplate>> SalvaModelloVuoto
<<option chkToggleLinks>> Cliccando su un collegamento ad un frammento già aperto lo chiude
^^(evita con Control o altro tasto modificabile)^^
<<option chkHttpReadOnly>> Non rendere editabile dal web
<<option chkForceMinorUpdate>> Tratta le modifiche minori e mantieni data ed ora precedenti
^^(disattiva con Shift in modifica o con la combinazione ~Ctrl-Shift-Enter)^^
<<option chkConfirmDelete>> Richiedi Conferma prima di eliminare il frammento
Numero massimo di righe per ciascun frammento: <<option txtMaxEditRows>>
Percorso della directory di backup: <<option txtBackupFolder>>
''Rendi le opzioni private: ''<<option chkUsePrivateSettings>> Utilizza opzioni private <<option chkMakeSettingPrivateWhenChanged>> Rendi tutte le opzioni private   [[Visualizza le impostazioni]].
^^(Le opzioni private sono memorizzate in questo ~TiddlyWiki. Le opzioni condivise sono memorizzate in cookies e condivise da tutte le copie locali di ~TiddlyWiki. Per maggiori informazioni sull'uso di questo plugin consultare [[Documentazione SettingsPlugin]].)^^
<<option chkInsertTabs>> Usa il tasto tab per inserire caratteri di tabulazione invece di saltare al prossimo campo
TiddlyWiki
Nella mia ricerca di soluzioni open source ho scoperto TiddlyWiki
Che cosa è:
TiddlyWiki è un singolo file html che ha tutte le caratteristiche di un wiki - compresi tutti i contenuti, le funzionalità (compreso l'editing, il salvataggio, la marcatura e la ricerca) e il foglio di stile. Essendo un singolo file, è molto portatile: si può inviare per e-mail, metterlo su un server web o condividerlo tramite una chiavetta USB.
Ma non è solo un wiki !
Ha le capacità di un plugin molto potente; quindi può essere utilizzato anche per costruire nuovi strumenti. Hai il pieno controllo su come viene visualizzato e si comporta. Per esempio, TiddlyWiki è già in uso come :
Un notebook personale
Un GTD (" Getting Things Done " ) strumento di produttività
Uno strumento di collaborazione per la costruzione di siti web (per la prototipazione rapida
... e molto altro ancora!
Leggi il Tiddler IstruzioniRR
Per effettuare il download di questo programma leggere il tiddler [[Download]]
/***
|Name|BetterTimelineMacro|
|Created by|SaqImtiaz|
|Location|http://lewcid.googlepages.com/lewcid.html#BetterTimelineMacro|
|Version|0.5 beta|
|Requires|~TW2.x|
!!!Description:
A replacement for the core timeline macro that offers more features:
*list tiddlers with only specfic tag
*exclude tiddlers with a particular tag
*limit entries to any number of days, for example one week
*specify a start date for the timeline, only tiddlers after that date will be listed.
!!!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
Edit the ViewTemplate to add the fullscreen command to the toolbar.
!!!Syntax:
{{{<<timeline better:true>>}}}
''the param better:true enables the advanced features, without it you will get the old timeline behaviour.''
additonal params:
(use only the ones you want)
{{{<<timeline better:true onlyTag:Tag1 excludeTag:Tag2 sortBy:modified/created firstDay:YYYYMMDD maxDays:7 maxEntries:30>>}}}
''explanation of syntax:''
onlyTag: only tiddlers with this tag will be listed. Default is to list all tiddlers.
excludeTag: tiddlers with this tag will not be listed.
sortBy: sort tiddlers by date modified or date created. Possible values are modified or created.
firstDay: useful for starting timeline from a specific date. Example: 20060701 for 1st of July, 2006
maxDays: limits timeline to include only tiddlers from the specified number of days. If you use a value of 7 for example, only tiddlers from the last 7 days will be listed.
maxEntries: limit the total number of entries in the timeline.
!!!History:
*28-07-06: ver 0.5 beta, first release
!!!Code
***/
//{{{
// Return the tiddlers as a sorted array
TiddlyWiki.prototype.getTiddlers = function(field,excludeTag,includeTag)
{
var results = [];
this.forEachTiddler(function(title,tiddler)
{
if(excludeTag == undefined || tiddler.tags.find(excludeTag) == null)
if(includeTag == undefined || tiddler.tags.find(includeTag)!=null)
results.push(tiddler);
});
if(field)
results.sort(function (a,b) {if(a[field] == b[field]) return(0); else return (a[field] < b[field]) ? -1 : +1; });
return results;
}
//this function by Udo
function getParam(params, name, defaultValue)
{
if (!params)
return defaultValue;
var p = params[0][name];
return p ? p[0] : defaultValue;
}
window.old_timeline_handler= config.macros.timeline.handler;
config.macros.timeline.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
var args = paramString.parseParams("list",null,true);
var betterMode = getParam(args, "better", "false");
if (betterMode == 'true')
{
var sortBy = getParam(args,"sortBy","modified");
var excludeTag = getParam(args,"excludeTag",undefined);
var includeTag = getParam(args,"onlyTag",undefined);
var tiddlers = store.getTiddlers(sortBy,excludeTag,includeTag);
var firstDayParam = getParam(args,"firstDay",undefined);
var firstDay = (firstDayParam!=undefined)? firstDayParam: "00010101";
var lastDay = "";
var field= sortBy;
var maxDaysParam = getParam(args,"maxDays",undefined);
var maxDays = (maxDaysParam!=undefined)? maxDaysParam*24*60*60*1000: (new Date()).getTime() ;
var maxEntries = getParam(args,"maxEntries",undefined);
var last = (maxEntries!=undefined) ? tiddlers.length-Math.min(tiddlers.length,parseInt(maxEntries)) : 0;
for(var t=tiddlers.length-1; t>=last; t--)
{
var tiddler = tiddlers[t];
var theDay = tiddler[field].convertToLocalYYYYMMDDHHMM().substr(0,8);
if ((theDay>=firstDay)&& (tiddler[field].getTime()> (new Date()).getTime() - maxDays))
{
if(theDay != lastDay)
{
var theDateList = document.createElement("ul");
place.appendChild(theDateList);
createTiddlyElement(theDateList,"li",null,"listTitle",tiddler[field].formatString(this.dateFormat));
lastDay = theDay;
}
var theDateListItem = createTiddlyElement(theDateList,"li",null,"listLink",null);
theDateListItem.appendChild(createTiddlyLink(place,tiddler.title,true));
}
}
}
else
{
window.old_timeline_handler.apply(this,arguments);
}
}
//}}}
/***
|Name|BigThemePack|
|Created by|SimonBaird & SaqImtiaz|
|Location|http://simonbaird.com/mptw/#BigThemePack|
|Version|0.1.0|
|Requires|SelectThemePlugin|
!Uninstallation Notes:
*Make sure that you set your theme as default or none, before deleting the theme pack.
!Code
***/
//{{{
if (!config.themes) config.themes = [];
//}}}
/***
!!~MonkyMind themes
The following themes were created by Robert Lindsay from http://www.monkymind.org/
***/
//{{{
config.shadowTiddlers.Berry2StyleSheet = "<!--- [[Berry 2|StyleSheet]] with ideas shamesslessly taken from (and suggested by) Simon Baird, Clint Checketts and Christine Hodges --->\n\n/*{{{*/\n.headerForeground { display: none;}\n#sidebar {width: 170px; background: #efefef;border-left: solid 2px #b8b9c7;border-top: solid 2px #d7d8e8;}\n#sidebarTabs .tabContents {width: 158px; background: #eae9ee;font-weight: bold; color: #333 ;}\n#sidebarOptions input { border: solid 2px #b8b9c7; }\n#sidebarOptions .sliderPanel { background: #eee;}\n#sidebarOptions a {;border: none;}\n#sidebarOptions .sliderPanel a {border: none;color: #5c4894;}\n#displayArea {background: #fff;margin: 1em 15.7em 0em 1em;border-left: solid 2px #b8b9c7;}\n.viewer {line-height: 1.4em;padding-bottom: 1em;border-bottom:solid 1px #b8b9c7;}\n.viewer th, thead td {background: #5d4b97;border: 1px solid #666;color: #fff;}\n.title {color: #000}\nh1,h2,h3,h4,h5 {color: #fff;background: #6b69ad;}\na{ color: #700126;}\na:hover{ background: #6b69ad; color: #fff;font-weight: bold;}\n.externalLink { text-decoration: underline; color: #000083;}\nbody { background: #d7d8e8;}\n.popup { background: #6b69ad; border: 1px solid #04b;}\n.popup li a:hover {background: #d7d8e8;color: #000;border: none;}\n.popup li.disabled {color: #000;}\n.button:hover {color: #fff;background: #6b69ad;\n border: 1px solid #d7d8e8;}\n#topMenu { background: transparent; padding: 6px;margin-left: -5px;border-bottom: solid 3px #5c4894;}\n#topMenu .button, #topMenu .tiddlyLink, tiddlyLinkExisting, #topMenu .externalLink\n{\n color: #fff;\n text-align: center;\n font-weight: bold;\n font-size: 1.1em;\n text-decoration: none;\n letter-spacing: 1.5px;\n background: transparent;\n border-right: solid 1px #fff;\n padding: 5px 15px 8px 15px;\n}\n#topMenu a:hover {\n color: #700126;\n background: #d7d8e8;\n}\n#topMenu br {display: none; padding-right: 1em;}\n\n\n/*}}}*/";
config.shadowTiddlers.Berry2PageTemplate = "<!--- More ideas shamesslessly begged, borrowed or stolen from..... Simon Baird, Clint Checketts and Christine Hodges :)) --->\n<!--{{{-->\n<div class='header' macro=\"gradient vert #5c4894 #6b69ad\">\n <div id='topMenu'>\n <span refresh='content' tiddler='SiteTitle'></span><span refresh='content' tiddler='MainMenu'></span></div>\n </div>\n</div> \n<div id='sidebar'>\n <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n <div id='messageArea'></div>\n <div id='tiddlerDisplay'></div>\n</div>\n<!--}}}-->\n";
config.themes.push("Berry2");
config.shadowTiddlers.Blueberry2StyleSheet = "<!--- [[Blueberry 2|StyleSheet]] with ideas shamesslessly taken from (and suggested by) Simon Baird, Clint Checketts and Christine Hodges --->\n\n/*{{{*/\n.headerForeground { display: none;}\n#sidebar {width: 171px; background: #e7ecee;border-left: solid 2px #8895bb;border-top: solid 2px #97a8d2;}\n#sidebarTabs .tabContents {width: 158px; background: #dce1e3;font-weight: bold; color: #333 ;}\n#sidebarOptions input { border: solid 2px #8895bb; }\n#sidebarOptions .sliderPanel { background: #eee;}\n#sidebarOptions a {;border: none;}\n#sidebarOptions .sliderPanel a {border: none;color: #00005a;}\n#displayArea {background: #fff;margin: 1em 15.7em 0em 1em;border-left: solid 2px #8895bb;}\n.viewer {line-height: 1.4em;padding-bottom: 1em;border-bottom:solid 1px #dedede;}\n.viewer th, thead td {background: #00009d;border: 1px solid #666;color: #fff;}\n.title {color: #000}\nh1,h2,h3,h4,h5 {color: #fff;background: #00009d;}\na{ color: #00005a;}\na:hover{ background: #00009d; color: #fff;font-weight: bold;}\n.externalLink { text-decoration: underline; color: #000083;}\nbody { background: #97a8d2;}\n.popup { background: #04b; border: 1px solid #04b;}\n.popup li a:hover {background: #dedede;color: #000083;border: none;}\n.popup li.disabled {color: #000;}\n.button:hover {color: #fff;background: #00009d;\n border: 1px solid #dedede;}\n#topMenu { background: transparent; padding: 6px;margin-left: -5px;border-bottom: solid 3px #00005a}\n#topMenu .button, #topMenu .tiddlyLink, tiddlyLinkExisting, #topMenu .externalLink\n{\n color: #fff;\n text-align: center;\n font-weight: bold;\n font-size: 1.1em;\n text-decoration: none;\n letter-spacing: 1.5px;\n background: transparent;\n border-right: solid 1px #fff;\n padding: 5px 15px 6px 15px;\n}\n#topMenu a:hover {\n color: #fff;\n background: #00009d;\n border: solid 1px #db4;\n}\n#topMenu br {display: none; padding-right: 1em;}\n\n\n/*}}}*/";
config.shadowTiddlers.Blueberry2PageTemplate = "<!--- More ideas shamesslessly begged, borrowed or stolen from..... Simon Baird, Clint Checketts and Christine Hodges :)) --->\n<!--{{{-->\n<div class='header' macro=\"gradient vert #00005a #0000ad\">\n <div id='topMenu'>\n <span refresh='content' tiddler='SiteTitle'></span><span refresh='content' tiddler='MainMenu'></span></div>\n </div>\n</div> \n<div id='sidebar'>\n <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n <div id='messageArea'></div>\n <div id='tiddlerDisplay'></div>\n</div>\n<!--}}}-->\n";
config.themes.push("Blueberry2");
config.shadowTiddlers.iJobsStyleSheet = "<!--- [[iJobs 2|StyleSheet]] with ideas shamesslessly taken from (and suggested by) Simon Baird, Clint Checketts and Christine Hodges. Colours inspired by http://www.solucija.com/templates/demo/Internet_Jobs/ --->\n/*{{{*/\n.headerForeground { display: none;}\n#sidebar {width: 171px; background: #808080;border-bottom: solid 1.5em #3c6491;border-top: solid 2px #fff;}\n#sidebarTabs .tabContents {width: 158px; background: #eee;font-weight: bold; color: #333 ;}\n.tabSelected{color: #fff;background: #963112; border: solid 1px #fff;}\n.tabUnselected {color: #fff;background: #999;}\n#sidebarOptions .sliderPanel { background: #eee;}\n#sidebarOptions a {;border: none;}\n#sidebarOptions .sliderPanel a {border: none;color: #333;background: #eee;}\n#displayArea {background: #fff;margin: 1em 15.7em 0em 1em;border-top: solid 3px #ddd;border-bottom: solid 1.5em #3c6491;}\n.viewer {line-height: 1.4em;padding-bottom: 1em;border-bottom:solid 1px #dedede;}\n.viewer th, thead td {background: #963112;border: 1px solid #666;color: #fff;}\n.title {color: #000}\nh1,h2,h3,h4,h5 {color: #fff;background: #963112;}\na{ color:#c01903 ;}\na:hover{ background: #c01903; color: #fff;font-weight: bold;}\n.externalLink { text-decoration: underline; color: #c01903;}\nbody { background: #fff;}\n.popup { background: #3c6491; border: 1px solid #3c6491;}\n.popup li a:hover {background: #dedede;color: #963112;border: none;}\n.popup li.disabled {color: #000;}\n.button {color: #fff;background: #808080;border: 1px solid #fff;}\n.button:hover {color: #fff;background: #c01903;\n border: 1px solid #dedede;}\n#topMenu { background: transparent;border-bottom: solid 3px #bcbcbc; padding: 5px;margin-left: -5px;}\n#topMenu .button, #topMenu .tiddlyLink, tiddlyLinkExisting, #topMenu .externalLink\n{\n color: #333;\n text-align: center;\n font-weight: bold;\n font-size: 1em;\n text-decoration: none;\n letter-spacing: 1.5px;\n background: transparent;\n border-right: solid 1px #fff;\n padding: 5px 15px 8px 15px;\n}\n#topMenu a:hover {\n color: #fff;\n background: #3c6491;\n}\n#topMenu br {display: none; padding-right: 1em;}\n\n\n/*}}}*/\n";
config.shadowTiddlers.iJobsPageTemplate = "<!--- More ideas shamesslessly begged, borrowed or stolen from..... Simon Baird, Clint Checketts and Christine Hodges :)) --->\n<!--{{{-->\n<div class='header' macro=\"gradient vert #aaa #ccc\">\n <div id='topMenu'>\n <span refresh='content' tiddler='SiteTitle'></span><span refresh='content' tiddler='MainMenu'></span></div>\n </div>\n</div> \n<div id='sidebar'>\n <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n <div id='messageArea'></div>\n<div class='viewer' macro=\"gradient vert #f5f5f5 #fff\">\n <div id='tiddlerDisplay'></div>\n</div>\n<!--}}}-->\n";
config.themes.push("iJobs");
config.shadowTiddlers.NoBerry2StyleSheet = "<!--- The default TW colours with modified layout. Ideas shamesslessly taken from (and suggested by) Simon Baird, Clint Checketts and Christine Hodges --->\n\n/*{{{*/\n.headerForeground { display: none;}\n#sidebar {width: 170px; }\n#sidebarTabs .tabContents {width: 158px; }\n#displayArea {background: #fff;margin: 1em 15.7em 0em 1em;}\n#topMenu { background: transparent; padding: 6px;margin-left: -5px; border-bottom: solid 3px #0457ce;}\n#topMenu .button, #topMenu .tiddlyLink, tiddlyLinkExisting, #topMenu .externalLink\n{\n color: #fff;\n text-align: center;\n font-weight: bold;\n font-size: 1.1em;\n text-decoration: none;\n letter-spacing: 1.5px;\n background: transparent;\n border-right: solid 1px #fff;\n padding: 5px 15px 8px 15px;\n}\n#topMenu a:hover {\n color: #fff;\n background: #18f;\n}\n#topMenu br {display: none; padding-right: 1em;}\n\n\n/*}}}*/";
config.shadowTiddlers.NoBerry2PageTemplate = "<!--- More ideas shamesslessly begged, borrowed or stolen from..... Simon Baird, Clint Checketts and Christine Hodges :)) --->\n<!--{{{-->\n<div class='header' macro=\"gradient vert #04b #18f\">\n <div id='topMenu'>\n <span refresh='content' tiddler='SiteTitle'></span><span refresh='content' tiddler='MainMenu'></span></div>\n </div>\n</div> \n<div id='sidebar'>\n <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n <div id='messageArea'></div>\n <div id='tiddlerDisplay'></div>\n</div>\n<!--}}}-->\n";
config.themes.push("NoBerry2");
//}}}
/***
!!Clint's Themes
The themes were created by Clint Checketts from http://www.checkettsweb.com/
The original GTD theme was created by Nathan Bowers from http://snapgrid.com/
***/
//{{{
config.shadowTiddlers.GTDStyleSheet = "/***\n!Calendar CSS\n***/\n/*{{{*/\n.calendar{\n border-bottom: 1px solid #550000;\n}\n\n.viewer .calendar{\n width: 220px;\n}\n\n#mainMenu .calendar{\n font-size: 8px;\n cursor: pointer;\n width: 100%;\n border: 0;\n border-collapse: collapse;\n}\n\n#mainMenu .calendar .button{\n border: 0;\n}\n\n#mainMenu .calendar td{\n font-size: 8pt;\n padding: 0;\n background: #fff;\n border: 0;\n}\n\n#mainMenu .calendar a{\n margin: 0;\n color: #000;\n background: transparent;\n}\n\n#mainMenu .calendar a:hover{\n color: #000;\n background: transparent;\n}\n\n#mainMenu .calendarMonthname,\n#mainMenu .calendar .calendarMonthTitle td a{\n color: #fff;\n}\n\n#mainMenu .calendarDaysOfWeek td{\n background: #500;\n color: #fff;\n}\n\n/*}}}*/\n\n/***\n!GTD Style\n\n!Generic rules /%==================================================================== %/\n***/\n/*{{{*/\nbody {\n background: #464646 url('http://shared.snapgrid.com/images/tiddlywiki/bodygradient.png') repeat-x top fixed;\n color: #000;\n font: .82em/1.25em 'Bitstream Vera Sans', Verdana, Helvetica, Arial, sans-serif;\n/*'Lucida Sans Unicode', 'Lucida Grande','Trebuchet MS', */\n}\n/*}}}*/\n/***\n!Header rules /%====================================================================== %/\n***/\n/*{{{*/\n#contentWrapper\n{\n margin: 0 auto;\nwidth: 59em;\nposition: relative;\n}\n\n#header\n{\n color: #fff;\n padding: 1.5em 1em .6em 0;\n}\n\n#siteTitle {\n\n font-size: 2.3em;\n margin: 0;\n}\n\n#siteSubtitle {\n font-size: 1em;\n padding-left: .8em;;\n}\n\n#titleLine{\n background: transparent;\n padding: 0;\n}\n\n#titleLine a {\n color: #cf6;\n background: transparent;\n}\n/*}}}*/\n\n\n\n\n\n\n\n\n\n/***\n!Sidebar rules /%====================================================================== %/\n***/\n/*{{{*/\n#sidebar{\n left: 0;\nwidth: 18em;\n margin: .9em .9em 0 0;\n color: #000;\n background: transparent;\n}\n/*}}}*/\n/***\n!Main menu rules /%=================================================================== %/\n***/\n/*{{{*/\n#mainMenu{\n position: static;\n width: auto;\n\n background: #600;\n border-right: 3px solid #500;\npadding: 0;\n text-align: left;\n font-size: 1em;\n}\n\n#mainMenu h1{\n padding: 0;\n margin: 0;\n font-size: 1em;\n font-weight: normal;\n}\n\n#mainMenu ul{\n padding: 0;\n margin: 0;\n list-style: none;\n}\n\n#mainMenu h1 a,\n#mainMenu li a,\n#mainMenu li a.button{\n display: block;\n padding: 0 5px 0 10px;\nborder: 0;\n border-bottom: 1px solid #500;\n border-top: 1px solid #900;\nmargin: 0;\n}\n\n#mainMenu a,\n#mainMenu a.button{\n height: 22px;\nheight: 1.83em;\n line-height: 22px;\n color: #fff;\n background: #700;\nmargin-left: 1em;\n}\n\n#mainMenu a:hover,\n#mainMenu a.button:hover {\n background: #b00;\n color: #fff;\n}\n/*}}}*/\n/***\n!Sidebar options rules /%============================================================ %/\n***/\n/*{{{*/\n#sidebarOptions {\n background: #eeb;\n border-right: 3px solid #bb8;\n color: #B4C675;\n padding: .5em 0;\n}\n\n#sidebarOptions a {\n color: #700;\n margin: .2em .8em;\n padding: 0;\n border: 0;\n}\n\n#sidebarOptions a:hover, #sidebarOptions a:active {\n color: #fff;\n background: #700;\n border: 0;\n}\n\n#sidebarOptions input{\n margin: 2px 10px;\n border: 1px inset #333;\npadding: 0;\n}\n\n#sidebarOptions .sliderPanel {\n background: #fff;\n color: #000;\n padding: 5px 10px;\n font-size: .9em;\n}\n\n#sidebarOptions .sliderPanel a{\n font-weight: normal;\n margin: 0;\n}\n\n#sidebarOptions .sliderPanel a:link,#sidebarOptions .sliderPanel a:visited {\n color: #700;\n}\n\n#sidebarOptions .sliderPanel a:hover,#sidebarOptions .sliderPanel a:active {\n color: #fff;\n background: #700;\n}\n/*}}}*/\n/***\n!Sidebar tabs rules /%===================================================================== %/\n***/\n/*{{{*/\n#sidebarTabs {\n background: transparent;\n border-right: 3px solid #740;\n border-bottom: 3px solid #520;\n border: 0;\n padding: 0;\n}\n\n#contentWrapper #sidebarTabs a,\n#contentWrapper #displayArea .tabContents a{\n color: #fff;\n}\n\n#contentWrapper #sidebarTabs a:hover,\n#contentWrapper #displayArea .tabContents a:hover {\n background: #000;\n color: #fff;\n}\n\n#contentWrapper #sidebarTabs a:active,\n#contentWrapper #displayArea .tabContents a:active{\n color: #000;\n}\n\n\n\n#contentWrapper .tabSelected {\n background: #960;\n}\n\n#contentWrapper .tabUnselected{\n background: #660;\n}\n\n#contentWrapper #sidebar .tabset{\n background: #eeb;\n border-right: 3px solid #bb8;\n padding: 0 0 0 .75em;\n}\n\n#contentWrapper .tabContents{\nfont-size: .95em;\nbackground: #960;\nborder:0;\n border-right: 3px solid #740;\n border-bottom: 3px solid #520;\n padding: .75em;\n}\n\n#contentWrapper .tabContents{\n width: auto;\n}\n\n#contentWrapper #sidebarTabs .tabContents .tabset,\n#contentWrapper .tabContents .tabset{\n border: 0;\n padding: 0;\n background: transparent;\n}\n\n#contentWrapper .tabContents .tabSelected,\n#contentWrapper .tabContents .tabContents {\n background: #700;\n border: 0;\n}\n\n#contentWrapper .tabContents .tabUnselected {\n background: #440;\n}\n\n#contentWrapper .tabset a {\n color: #fff;\n padding: .2em .7em;\n margin: 0 .17em 0 0;\n height: 2em;\nposition: static;\n}\n\n#contentWrapper .tabset a:hover {\n background: #000;\n color: #fff;\n}\n\n#contentWrapper .tabset a:active {\n color: #000;\n}\n\n#contentWrapper .tabContents ul{\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n#contentWrapper .tabContents .tabContents ul{\n color: #eeb;\n}\n\n.tabContents ul a,\n.tabContents ul .button{\n color: #fff;\n display: block;\n padding: .1em 0 .1em .7em;\n background: transparent;\n border: 0;\n}\n\n.tabContents ul a:hover {\n color: #fff;\n background: #000;\n}\n/*}}}*/\n/***\n!License panel rules /%==================================================================== %/\n***/\n/*{{{*/\n#licensePanel {\n padding: 0px 1em;\n font-size: .9em;\n}\n\n#licensePanel a {\n color: #960;\n display: block;\n margin-top: .9em;\n}\n\n#licensePanel a:hover {\n color: #fff;\n background: transparent;\n}\n/*}}}*/\n/***\n!Popup rules /%================================================================= %/\n***/\n/*{{{*/\n.popup {\n font-size: .8em;\n padding: 0em;\n background: #333;\n border: 1px solid #000;\n}\n\n.popup hr {\n margin: 1px 0 0 0;\n visibility: hidden;\n}\n\n.popup li.disabled {\n color: #666;\n}\n\n.popup li a,\n.popup li a:visited{\n color: #000;\n border: .1em outset #cf6;\n background: #cf6;\n}\n\n.popup li a:hover {\nborder: .1em outset #cf6;\n background: #ef9;\n color: #000;\n}\n/*}}}*/\n/***\n!Message area rules /%================================================================= %/\n***/\n/*{{{*/\n#messageArea{\n font-size: .9em;\n padding: .4em;\n background: #FFE72F;\n border-right: .25em solid #da1;\n border-bottom: .25em solid #a80;\n\nposition: fixed;\n top: 10px;\n right: 10px;\n color: #000;\n}\n\n#contentWrapper #messageArea a{\n color: #00e;\n text-decoration: none;\n}\n\n#contentWrapper #messageArea a:hover{\n color: #00e;\n text-decoration: underline;\n background: transparent;\n}\n\n#contentWrapper #messageArea .messageToolbar a.button{\n border: 1px solid #da1;\n}\n\n#contentWrapper #messageArea .messageToolbar a.button:hover{\n color: #00e;\n text-decoration: none;\n border: 1px solid #000;\n background: #fff;\n}\n\n\n\n/*}}}*/\n/***\n!Tiddler display rules /%================================================================== %/\n***/\n/*{{{*/\n#displayArea {\n width: 39.75em;\n margin: 0 0 0 17em;\n}\n\n.tiddler {\n margin: 0 0 .9em 0;\n padding: 0 1em;\n border-right: .25em solid #aaa;\n border-bottom: .25em solid #555;\n background: #fff;\n}\n\n.title {\n font-size: 1.5em;\n font-weight: bold;\n color: #900;\n}\n\n.toolbar {\n font-size: .8em;\n padding: .5em 0;\n}\n\n.toolbar .button{\n padding: .1em .3em;\n color: #000;\n\n border: .1em outset #cf6;\n background: #cf6;\nmargin: .1em;\n}\n\n.toolbar .button:hover {\n background: #ef9;\n color: #000;\n}\n\n.toolbar .button:active {\n background: #ff0;\n}\n\n/*}}}*/\n/***\n!Viewer rules /% ------------------------------------------------------------------------------------------ %/\n***/\n/*{{{*/\n.viewer {\n line-height: 1.4em;\n font-size: 1em;\n}\n\n.viewer a:link, .viewer a:visited {\n color: #15b;\n}\n\n.viewer a:hover {\n color: #fff;\n background: #000;\n}\n\n.viewer .button{\n background: transparent;\n border-top: 1px solid #eee;\n border-left: 1px solid #eee;\n border-bottom: 1px solid #000;\n border-right: 1px solid #000;\n}\n\n.viewer .button:hover{\n background: #eee;\n color: #000;\n}\n\n.viewer .button:active{\n background: #ccc;\n border-bottom: 1px solid #eee;\n border-right: 1px solid #eee;\n border-top: 1px solid #111;\n border-left: 1px solid #111;\n}\n\n\n.viewer blockquote {\n border-left: 3px solid #777;\n margin: .3em;\n padding: .3em;\n}\n\n.viewer pre{\n background: #fefefe;\n border: 1px solid #f1f1f1;\n}\n\n.viewer pre, .viewer code{\n color: #000;\n}\n\n.viewer ul {\n padding-left: 30px;\n}\n\n.viewer ol {\n padding-left: 30px;\n}\nul{\nlist-style-type: asquare;\n}\nol{ \n list-style-type: decimal;\n}\n\nol ol{ \n list-style-type: lower-alpha;\n}\n\nol ol ol{ \n list-style-type: lower-roman;\n}\n\n.viewer ul, .viewer ol, .viewer p {\n margin: .0;\n}\n\n.viewer li {\n margin: .2em 0;\n}\n\nh1,h2,h3,h4,h5,h6 {\n color: #000;\n font-weight: bold;\n background: #eee;\n padding: 2px 10px;\n margin: 5px 0;\n}\n\n.viewer h1 {font-size: 1.3em;}\n.viewer h2 {font-size: 1.2em;}\n.viewer h3 {font-size: 1.1em;}\n.viewer h4 {font-size: 1em;}\n.viewer h5 { font-size: .9em;}\n.viewer h6 { font-size: .8em;}\n\n.viewer table {\n border: 2px solid #303030;\n font-size: 11px;\n margin: 10px 0;\n}\n\n.viewer th, .viewer thead td{\n color: #000;\n background: #eee;\n border: 1px solid #aaa;\n padding: 0 3px;\n}\n\n.viewer td {\n border: 1px solid #aaa;\n padding: 0 3px;\n}\n\n.viewer caption {\n padding: 3px;\n}\n\n.viewer hr {\n border: none;\n border-top: dotted 1px #777;\n height: 1px;\n color: #777;\n margin: 7px 0;\n}\n\n.viewer\n{\n margin: .5em 0 0 0;\n padding: .5em 0;\n border-top: 1px solid #ccc;\n}\n\n.highlight {\n color: #000;\n background: #ffe72f;\n}\n/*}}}*/\n/***\n!Editor rules /% ----------------------------------------------------------------------------------------- %/\n***/\n/*{{{*/\n.editor {\n font-size: .8em;\n color: #402C74;\n padding: .3em 0;\n}\n\n.editor input, .editor textarea {\n font: 1.1em/130% 'Andale Mono', 'Monaco', 'Lucida Console', 'Courier New', monospace;\n margin: 0;\n border: 1px inset #333;\n padding: 2px 0;\n}\n\n.editor textarea {\n height: 42em;\n width: 100%;\n}\n\ninput:focus, textarea:focus\n{\n background: #ffe;\n border: 1px solid #000;\n}\n.footer\n{\n padding: .5em 0;\n margin: .5em 0;\n border-top: 1px solid #ddd;\n color: #555;\n text-align: center; \n}\n/*}}}*/\n/***\n!IE Display hacks /% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%/\n***/\n/*{{{*/\nbody{\n _text-align: center;\n}\n\n#contentWrapper\n{\n/* _width: 770px; CSS UNDERSCORE HACK FOR PROPER WIN/IE DISPLAY */\n _text-align: left; /* CSS UNDERSCORE HACK FOR PROPER WIN/IE DISPLAY */ \n}\n\n#messageArea{\n _position: absolute;\n}\n/*}}}*/";
config.shadowTiddlers.GTDPageTemplate = "<!---\n| Name:|GTDTWPlusPageTemplate|\n| Source:|http://www.checkettsweb.com/tw/gtd_tiddlywiki.htm#StyleSheet|\n| Author:|ClintChecketts|\n--->\n<!--{{{-->\n<div id='header'>\n<div id='titleLine'>\n<span id='siteTitle' refresh='content' tiddler='SiteTitle'></span>\n<span id='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n</div>\n<div id='sidebar'>\n<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div><div id=\"licensePanel\">\n<a rel=\"license\" href=\"http://shared.snapgrid.com/gtd_tiddlywiki.html#RevisionHistory\" target=\"_new\">GTDTW Version <span macro=\"version\"></span></a>\n<a rel=\"license\" href=\"http://www.tiddlywiki.com\" target=\"_new\">\nTiddlyWiki is published by Jeremy Ruston at Osmosoft under a BSD open source license</a>\n<a rel=\"license\" href=\"http://snapgrid.com\" target=\"_new\">GTD TiddlyWiki is a modification by Nathan Bowers at Snapgrid under the same license terms.</a>\n<a rel=\"license\" href=\"http://davidco.com\" target=\"_new\">\"Getting Things Done\" is © David Allen at Davidco. Davidco has no affiliation with TiddlyWiki or GTD TiddlyWiki.</a></div></div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n<!--}}}-->";
config.themes.push("GTD");
config.shadowTiddlers.DevFireStyleSheet = "/***\n!Devfire\nStyle by Clint Checketts (http://www.checkettsweb.com) for TiddlyWiki 2.0\nInspired by the GLP'd Darkfire Wordpress skin.\n\n!Sections in this Tiddler:\n*Generic rules\n*Links styles\n*Header\n*Main menu\n*Sidebar\n**Sidebar options\n**Sidebar tabs\n*Message area\n*Popup\n*Tabs\n*Tiddler display\n**Viewer\n**Editor\n*Misc. rules\n!Generic rules /% ============================================================= %/\n***/\n/*{{{*/\nbody {\nbackground-color: #000;\n}\n/*}}}*/\n/***\n!Link styles /% ============================================================= %/\n***/\n/*{{{*/\na,\na.button,\n#mainMenu a.button,\n#sidebarOptions .sliderPanel a{\n color: #ffbf00;\n border: 0;\n}\n\na:hover,\na.button:hover,\n#mainMenu a.button:hover,\n#sidebarOptions .sliderPanel a:hover\n#sidebarOptions .sliderPanel a:active{\n color: #ff7f00;\n border: 0;\n border-bottom: #ff7f00 1px dashed;\n background: transparent;\n text-decoration: none;\n}\n\n#displayArea .button.highlight{\n color: #ffbf00;\n background: #4c4c4c;\n}\n/*}}}*/\n/***\n!Header styles /% ============================================================= %/\n***/\n/*{{{*/\n.header{\n border-bottom: 2px solid #ffbf00;\n color: #fff;\n}\n\n.headerForeground a {\n color: #fff;\n}\n\n.header a:hover {\n border-bottom: 1px dashed #fff;\n}\n/*}}}*/\n/***\n!Main menu styles /% ============================================================= %/\n***/\n/*{{{*/\n#mainMenu {color: #fff;}\n#mainMenu h1{\n font-size: 1.1em;\n}\n#mainMenu li,#mainMenu ul{\n list-style: none;\n margin: 0;\n padding: 0;\n}\n/*}}}*/\n/***\n!Sidebar styles /% ============================================================= %/\n***/\n/*{{{*/\n#sidebar {\n right: 0;\n color: #fff;\n border: 2px solid #ffbf00;\n border-width: 0 0 2px 2px;\n}\n#sidebarOptions {\n background-color: #4c4c4c;\n padding: 0;\n}\n\n#sidebarOptions a{\n margin: 0;\n color: #ffbf00;\n border: 0;\n}\n#sidebarOptions a:hover {\n color: #4c4c4c;\n background-color: #ffbf00;\n\n}\n\n#sidebarOptions a:active {\n color: #ffbf00;\n background-color: transparent;\n}\n\n#sidebarOptions .sliderPanel {\n background-color: #333;\n margin: 0;\n}\n\n#sidebarTabs {background-color: #4c4c4c;}\n#sidebarTabs .tabSelected {\n padding: 3px 3px;\n cursor: default;\n color: #ffbf00;\n background-color: #666;\n}\n#sidebarTabs .tabUnselected {\n color: #ffbf00;\n background-color: #5f5f5f;\n padding: 0 4px;\n}\n\n#sidebarTabs .tabUnselected:hover,\n#sidebarTabs .tabContents {\n background-color: #666;\n}\n\n.listTitle{color: #FFF;}\n#sidebarTabs .tabContents a{\n color: #ffbf00;\n}\n\n#sidebarTabs .tabContents a:hover{\n color: #ff7f00;\n background: transparent;\n}\n\n#sidebarTabs .txtMoreTab .tabSelected,\n#sidebarTabs .txtMoreTab .tab:hover,\n#sidebarTabs .txtMoreTab .tabContents{\n color: #ffbf00;\n background: #4c4c4c;\n}\n\n#sidebarTabs .txtMoreTab .tabUnselected {\n color: #ffbf00;\n background: #5f5f5f;\n}\n\n.tab.tabSelected, .tab.tabSelected:hover{color: #ffbf00; border: 0; background-color: #4c4c4c;cursor:default;}\n.tab.tabUnselected {background-color: #666;}\n.tab.tabUnselected:hover{color:#ffbf00; border: 0;background-color: #4c4c4c;}\n.tabContents {\n background-color: #4c4c4c;\n border: 0;\n}\n.tabContents .tabContents{background: #666;}\n.tabContents .tabSelected{background: #666;}\n.tabContents .tabUnselected{background: #5f5f5f;}\n.tabContents .tab:hover{background: #666;}\n/*}}}*/\n/***\n!Message area styles /% ============================================================= %/\n***/\n/*{{{*/\n#messageArea {background-color: #666; color: #fff; border: 2px solid #ffbf00;}\n#messageArea a:link, #messageArea a:visited {color: #ffbf00; text-decoration:none;}\n#messageArea a:hover {color: #ff7f00;}\n#messageArea a:active {color: #ff7f00;}\n#messageArea .messageToolbar a{\n border: 1px solid #ffbf00;\n background: #4c4c4c;\n}\n/*}}}*/\n/***\n!Popup styles /% ============================================================= %/\n***/\n/*{{{*/\n#popup {color: #fff; background-color: #4c4c4c; border: 1px solid #ffbf00;}\n#popup a {color: #ffbf00; }\n#popup a:hover { background: transparent; color: #ff7f00; border: 0;}\n#popup hr {color: #ffbf00; background: #ffbf00;}\n/*}}}*/\n/***\n!Tiddler Display styles /% ============================================================= %/\n***/\n/*{{{*/\n.title{color: #fff;}\nh1, h2, h3, h4, h5 {\n color: #fff;\n background-color: transparent;\n border-bottom: 1px solid #333;\n}\n\n.subtitle{\n color: #666;\n}\n\n.viewer {color: #fff; }\n\n.viewer table{background: #666; color: #fff;}\n\n.viewer th {background-color: #996; color: #fff;}\n\n.viewer pre, .viewer code {color: #ddd; background-color: #4c4c4c; border: 1px solid #ffbf00;}\n\n.viewer hr {color: #666;}\n\n.tiddler .button {color: #4c4c4c;}\n.tiddler .button:hover { color: #ffbf00; background-color: #4c4c4c;}\n.tiddler .button:active {color: #ffbf00; background-color: #4c4c4c;}\n\n.toolbar {\n color: #4c4c4c;\n}\n\n.toolbar a.button,\n.editorFooter a{\n border: 0;\n}\n\n.footer {\n color: #ddd;\n}\n\n.selectedTiddler .footer {\n color: #888;\n}\n\n.highlight, .marked {\n color: #000;\n background-color: #ffe72f;\n}\n.editorFooter {\n color: #aaa;\n}\n\n.tab{\n-moz-border-radius-topleft: 3px;\n-moz-border-radius-topright: 3px;\n}\n\n.tagging,\n.tagged{\n background: #4c4c4c;\n border: 1px solid #4c4c4c; \n}\n\n.selected .tagging,\n.selected .tagged{\n background: #000;\n border: 1px solid #ffbf00;\n}\n\n.tagging .listTitle,\n.tagged .listTitle{\n color: #fff;\n}\n\n.tagging .button,\n.tagged .button{\n color: #ffbf00;\n border: 0;\n padding: 0;\n}\n\n.tagging .button:hover,\n.tagged .button:hover{\nbackground: transparent;\n}\n/*}}}*//***\n!Devfire\nStyle by Clint Checketts (http://www.checkettsweb.com) for TiddlyWiki 2.0\nInspired by the GLP'd Darkfire Wordpress skin.\n\n!Sections in this Tiddler:\n*Generic rules\n*Links styles\n*Header\n*Main menu\n*Sidebar\n**Sidebar options\n**Sidebar tabs\n*Message area\n*Popup\n*Tabs\n*Tiddler display\n**Viewer\n**Editor\n*Misc. rules\n!Generic rules /% ============================================================= %/\n***/\n/*{{{*/\nbody {\nbackground-color: #000;\n}\n/*}}}*/\n/***\n!Link styles /% ============================================================= %/\n***/\n/*{{{*/\na,\na.button,\n#mainMenu a.button,\n#sidebarOptions .sliderPanel a{\n color: #ffbf00;\n border: 0;\n}\n\na:hover,\na.button:hover,\n#mainMenu a.button:hover,\n#sidebarOptions .sliderPanel a:hover\n#sidebarOptions .sliderPanel a:active{\n color: #ff7f00;\n border: 0;\n border-bottom: #ff7f00 1px dashed;\n background: transparent;\n text-decoration: none;\n}\n\n#displayArea .button.highlight{\n color: #ffbf00;\n background: #4c4c4c;\n}\n/*}}}*/\n/***\n!Header styles /% ============================================================= %/\n***/\n/*{{{*/\n.header{\n border-bottom: 2px solid #ffbf00;\n color: #fff;\n}\n\n.headerForeground a {\n color: #fff;\n}\n\n.header a:hover {\n border-bottom: 1px dashed #fff;\n}\n/*}}}*/\n/***\n!Main menu styles /% ============================================================= %/\n***/\n/*{{{*/\n#mainMenu {color: #fff;}\n#mainMenu h1{\n font-size: 1.1em;\n}\n#mainMenu li,#mainMenu ul{\n list-style: none;\n margin: 0;\n padding: 0;\n}\n/*}}}*/\n/***\n!Sidebar styles /% ============================================================= %/\n***/\n/*{{{*/\n#sidebar {\n right: 0;\n color: #fff;\n border: 2px solid #ffbf00;\n border-width: 0 0 2px 2px;\n}\n#sidebarOptions {\n background-color: #4c4c4c;\n padding: 0;\n}\n\n#sidebarOptions a{\n margin: 0;\n color: #ffbf00;\n border: 0;\n}\n#sidebarOptions a:hover {\n color: #4c4c4c;\n background-color: #ffbf00;\n\n}\n\n#sidebarOptions a:active {\n color: #ffbf00;\n background-color: transparent;\n}\n\n#sidebarOptions .sliderPanel {\n background-color: #333;\n margin: 0;\n}\n\n#sidebarTabs {background-color: #4c4c4c;}\n#sidebarTabs .tabSelected {\n padding: 3px 3px;\n cursor: default;\n color: #ffbf00;\n background-color: #666;\n}\n#sidebarTabs .tabUnselected {\n color: #ffbf00;\n background-color: #5f5f5f;\n padding: 0 4px;\n}\n\n#sidebarTabs .tabUnselected:hover,\n#sidebarTabs .tabContents {\n background-color: #666;\n}\n\n.listTitle{color: #FFF;}\n#sidebarTabs .tabContents a{\n color: #ffbf00;\n}\n\n#sidebarTabs .tabContents a:hover{\n color: #ff7f00;\n background: transparent;\n}\n\n#sidebarTabs .txtMoreTab .tabSelected,\n#sidebarTabs .txtMoreTab .tab:hover,\n#sidebarTabs .txtMoreTab .tabContents{\n color: #ffbf00;\n background: #4c4c4c;\n}\n\n#sidebarTabs .txtMoreTab .tabUnselected {\n color: #ffbf00;\n background: #5f5f5f;\n}\n\n.tab.tabSelected, .tab.tabSelected:hover{color: #ffbf00; border: 0; background-color: #4c4c4c;cursor:default;}\n.tab.tabUnselected {background-color: #666;}\n.tab.tabUnselected:hover{color:#ffbf00; border: 0;background-color: #4c4c4c;}\n.tabContents {\n background-color: #4c4c4c;\n border: 0;\n}\n.tabContents .tabContents{background: #666;}\n.tabContents .tabSelected{background: #666;}\n.tabContents .tabUnselected{background: #5f5f5f;}\n.tabContents .tab:hover{background: #666;}\n/*}}}*/\n/***\n!Message area styles /% ============================================================= %/\n***/\n/*{{{*/\n#messageArea {background-color: #666; color: #fff; border: 2px solid #ffbf00;}\n#messageArea a:link, #messageArea a:visited {color: #ffbf00; text-decoration:none;}\n#messageArea a:hover {color: #ff7f00;}\n#messageArea a:active {color: #ff7f00;}\n#messageArea .messageToolbar a{\n border: 1px solid #ffbf00;\n background: #4c4c4c;\n}\n/*}}}*/\n/***\n!Popup styles /% ============================================================= %/\n***/\n/*{{{*/\n#popup {color: #fff; background-color: #4c4c4c; border: 1px solid #ffbf00;}\n#popup li.disabled{color: #ffbf00;}\n\n#popup a {color: #ffbf00; }\n#popup a:hover { background: transparent; color: #ff7f00; border: 0;}\n#popup hr {color: #ffbf00; background: #ffbf00;}\n/*}}}*/\n/***\n!Tiddler Display styles /% ============================================================= %/\n***/\n/*{{{*/\n.title{color: #fff;}\nh1, h2, h3, h4, h5 {\n color: #fff;\n background-color: transparent;\n border-bottom: 1px solid #333;\n}\n\n.subtitle{\n color: #666;\n}\n\n.viewer {color: #fff; }\n\n.viewer table{background: #666; color: #fff;}\n\n.viewer th {background-color: #996; color: #fff;}\n\n.viewer pre, .viewer code {color: #ddd; background-color: #4c4c4c; border: 1px solid #ffbf00}\n\n.viewer hr {color: #666;}\n\n.tiddler .button {color: #4c4c4c;}\n.tiddler .button:hover { color: #ffbf00; background-color: #4c4c4c;}\n.tiddler .button:active {color: #ffbf00; background-color: #4c4c4c;}\n\n.toolbar {\n color: #4c4c4c;\n}\n\n.toolbar a.button,\n.editorFooter a{\n border: 0;\n}\n\n.footer {\n color: #ddd;\n}\n\n.selectedTiddler .footer {\n color: #888;\n}\n\n.highlight, .marked {\n color: #000;\n background-color: #ffe72f;\n}\n.editorFooter {\n color: #aaa;\n}\n\n.tab{\n-moz-border-radius-topleft: 3px;\n-moz-border-radius-topright: 3px;\n}\n\n.tagging,\n.tagged{\n background: #4c4c4c;\n border: 1px solid #4c4c4c; \n}\n\n.selected .tagging,\n.selected .tagged{\n background: #000;\n border: 1px solid #ffbf00;\n}\n\n.tagging .listTitle,\n.tagged .listTitle{\n color: #fff;\n}\n\n.tagging .button,\n.tagged .button{\n color: #ffbf00;\n border: 0;\n padding: 0;\n}\n\n.tagging .button:hover,\n.tagged .button:hover{\nbackground: transparent;\n}\n\n.cascade {\n background: #4c4c4c;\n color: #ddd;\n border: 1px solid #ffbf00;\n}\n/*}}}*/";
config.shadowTiddlers.DevFirePageTemplate = "<div class='header' macro='gradient vert #390108 #900'>\n<div class='headerShadow'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n<div class='headerForeground'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n</div>\n<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\n<div id='sidebar'>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>";
config.themes.push("DevFire");
config.shadowTiddlers.ClassicBrownStyleSheet = "[[TagglyTaggingStyles]]\n\n/***\n!TiddlyWiki Classic Color Scheme\nDesigned by Jeremy Ruston\n\nTo use this color scheme copy the [[ClassicTiddlyWiki]] contents into a tiddler and name it 'StyleSheet' also grab the [[ClassicTemplate]] and copy its contents into a tiddler named 'PageTemplate'.\n\n!Colors Used\n*@@bgcolor(#630):color(#fff): #630@@\n*@@bgcolor(#930): #930@@\n*@@bgcolor(#996633): #963@@\n*@@bgcolor(#c90): #c90@@\n*@@bgcolor(#cf6): #cf6@@\n*@@bgcolor(#cc9): #cc9@@\n*@@bgcolor(#ba9): #ba9@@\n*@@bgcolor(#996): #996@@\n*@@bgcolor(#300):color(#fff): #300@@\n*@@bgcolor(#000000):color(#fff): #000@@\n*@@bgcolor(#666): #666@@\n*@@bgcolor(#888): #888@@\n*@@bgcolor(#aaa): #aaa@@\n*@@bgcolor(#ddd): #ddd@@\n*@@bgcolor(#eee): #eee@@\n*@@bgcolor(#ffffff): #fff@@\n*@@bgcolor(#f00): #f00@@\n*@@bgcolor(#ff3): #ff3@@\n!Generic Rules /%==============================================%/\n***/\n/*{{{*/\nbody {\n background: #fff;\n color: #000;\n}\n\na{\n color: #963;\n}\n\na:hover{\n background: #963;\n color: #fff;\n}\n\na img{\n border: 0;\n}\n\nh1,h2,h3,h4,h5 {\n background: #cc9;\n}\n/*}}}*/\n/***\n!Header /%==================================================%/\n***/\n/*{{{*/\n.header{\n background: #300;\n}\n\n.titleLine {\n color: #fff;\n padding: 5em 0em 1em .5em;\n}\n\n.titleLine a {\n color: #cf6;\n}\n\n.titleLine a:hover {\n background: transparent;\n}\n/*}}}*/\n/***\n!Main Menu /%=================================================%/\n***/\n/*{{{*/\n#mainMenu .button {\n color: #930;\n}\n\n#mainMenu .button:hover {\n color: #cf6;\n background: #930;\n}\n\n#mainMenu li{\n list-style: none;\n}\n/*}}}*/\n/***\n!Sidebar options /%=================================================%/\n~TiddlyLinks and buttons are treated identically in the sidebar and slider panel\n***/\n/*{{{*/\n#sidebar {\n background: #c90;\n right: 0;\n}\n\n#sidebarOptions a{\n color: #930;\n border: 0;\n margin: 0;\n padding: .25em .5em;\n}\n\n#sidebarOptions a:hover {\n color: #cf6;\n background: #930;\n}\n\n#sidebarOptions a:active {\n color: #930;\n background: #cf6;\n}\n\n#sidebarOptions .sliderPanel {\n background: #eea;\n margin: 0;\n}\n\n#sidebarOptions .sliderPanel a {\n color: #930;\n}\n\n#sidebarOptions .sliderPanel a:hover {\n color: #cf6;\n background: #930;\n}\n\n#sidebarOptions .sliderPanel a:active {\n color: #930;\n background: #cf6;\n}\n/*}}}*/\n/***\n!Sidebar tabs /%=================================================%/\n***/\n/*{{{*/\n.tabSelected,.tabContents {\n background: #eea;\n border: 0;\n}\n\n.tabUnselected {\n background: #c90;\n}\n\n#sidebarTabs {\n background: #c90;\n}\n\n#sidebarTabs .tabSelected{\n color: #cf6;\n background: #963;\n}\n\n#sidebarTabs .tabUnselected {\n color: #cf6;\n background: #930;\n}\n\n#sidebarTabs .tabContents{\n background: #963;\n}\n\n#sidebarTabs .txtMoreTab .tabSelected,\n#sidebarTabs .txtMoreTab .tabSelected:hover{\n background: #930;\n color: #cf6;\n}\n\n#sidebarTabs .txtMoreTab .tabUnselected,\n#sidebarTabs .txtMoreTab .tabUnselected:hover{\n background: #300;\n color: #cf6;\n}\n\n#sidebarTabs .txtMoreTab .tabContents {\n background: #930;\n}\n\n#sidebarTabs .tabContents a {\n color: #cf6;\n border: 0;\n}\n\n#sidebarTabs .button.highlight,\n#sidebarTabs .tabContents a:hover {\n background: #cf6;\n color: #300;\n}\n/*}}}*/\n/***\n!Message Area /%=================================================%/\n***/\n/*{{{*/\n#messageArea {\n background: #930;\n color: #fff;\n}\n\n#messageArea a:link, #messageArea a:visited {\n color: #c90;\n}\n\n#messageArea a:hover {\n color: #963;\n background: transparent;\n}\n\n#messageArea a:active {\n color: #fff;\n}\n/*}}}*/\n/***\n!Popup /%=================================================%/\n***/\n/*{{{*/\n.popup {\n background: #eea;\n border: 1px solid #930;\n}\n\n.popup hr {\n color: #963;\n background: #963;\n border-bottom: 1px;\n}\n\n.popup li.disabled {\n color: #ba9;\n}\n\n.popup li a, .popup li a:visited {\n color: #300;\n}\n\n.popup li a:hover {\n background: #930;\n color: #eea;\n}\n/*}}}*/\n/***\n!Tiddler Display /%=================================================%/\n***/\n/*{{{*/\n.tiddler .button {\n color: #930;\n}\n\n.tiddler .button:hover {\n color: #cf6;\n background: #930;\n}\n\n.tiddler .button:active {\n color: #fff;\n background: #c90;\n}\n\n.shadow .title {\n color: #888;\n}\n\n.title {\n color: #422;\n}\n\n.subtitle {\n color: #866;\n}\n\n.toolbar {\n color: #aaa;\n}\n\n.toolbar a,\n.toolbar a:hover{\n border: 0;\n}\n\n.tagging, .tagged {\n border: 1px solid #fff;\n background-color: #ffc;\n}\n\n.selected .tagging, .selected .tagged {\n border: 1px solid #aa6;\n background-color: #ffc;\n}\n\n.tagging .listTitle, .tagged .listTitle {\ncolor: #999999;\n}\n\n.footer {\n color: #ddd;\n}\n\n.selected .footer {\n color: #888;\n}\n\n.sparkline {\n background: #eea;\n border: 0;\n}\n\n.sparktick {\n background: #930;\n}\n\n.errorButton {\n color: #ff0;\n background: #f00;\n}\n\n.zoomer {\n color: #963;\n border: 1px solid #963;\n}\n/*}}}*/\n/***\n''The viewer is where the tiddler content is displayed'' /%------------------------------------------------%/\n***/\n/*{{{*/\n.viewer .button {\n background: #c90;\n color: #300;\n border-right: 1px solid #300;\n border-bottom: 1px solid #300;\n}\n\n.viewer .button:hover {\n background: #eea;\n color: #c90;\n}\n\n.viewer .imageLink{\n background: transparent;\n}\n\n.viewer blockquote {\n border-left: 3px solid #666;\n}\n\n.viewer table {\n border: 2px solid #303030;\n}\n\n.viewer th, thead td {\n background: #996;\n border: 1px solid #606060;\n color: #fff;\n}\n\n.viewer td, .viewer tr {\n border: 1px solid #606060;\n}\n\n.viewer pre {\n border: 1px solid #963;\n background: #eea;\n}\n\n.viewer code {\n color: #630;\n}\n\n.viewer hr {\n border: 0;\n border-top: dashed 1px #606060;\n color: #666;\n}\n\n.highlight, .marked {\n background: #ff3;\n}\n/*}}}*/\n/***\n''The editor replaces the viewer in the tiddler'' /%------------------------------------------------%/\n***/\n/*{{{*/\n.editor input {\n border: 1px solid #000;\n}\n\n.editor textarea {\n border: 1px solid #000;\n width: 100%;\n}\n\n.editorFooter {\n color: #aaa;\n}\n\n.editorFooter a {\n color: #930;\n}\n\n.editorFooter a:hover {\n color: #cf6;\n background: #930;\n}\n\n.editorFooter a:active {\n color: #fff;\n background: #c90;\n}\n/*}}}*/";
config.shadowTiddlers.ClassicBrownPageTemplate = "<div class='header'>\n<div class='titleLine'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n</div>\n<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\n<div id='sidebar'>\n<div macro='gradient vert #ffffff #cc9900'>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n</div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>";
config.themes.push("ClassicBrown");
//}}}
/***
!~MonkeyPirateTiddlyWiki Themes
Created by Simon Baird from http://simonbaird.com/mptw/
***/
//{{{
// couple of extra bits
config.shadowTiddlers.HorizontalMainMenuStyles = "/***\nTo use, add {{{[[HorizontalMainMenuStyles]]}}} to your StyleSheet tiddler, or you can just paste the CSS in directly. See also HorizontalMainMenu and PageTemplate.\n***/\n/*{{{*/\n\n#topMenu br {display:none; }\n#topMenu { background: #39a; }\n#topMenu { padding:2px; }\n#topMenu .button, #topMenu .tiddlyLink {\n margin-left:0.5em; margin-right:0.5em;\n padding-left:3px; padding-right:3px;\n color:white; font-size:115%;\n}\n#topMenu .button:hover, #topMenu .tiddlyLink:hover { background:#178;}\n\n#displayArea { margin: 1em 15.7em 0em 1em; } /* so we use the freed up space */\n\n/* just in case want some QuickOpenTags in your topMenu */\n#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }\n#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }\n#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }\n\n\n/*}}}*/";
config.shadowTiddlers.SideBarWhiteAndGrey = "/***\nThis CSS by DaveBirss.\n***/\n/*{{{*/\n\n.tabSelected {\n background: #fff;\n}\n\n.tabUnselected {\n background: #eee;\n}\n\n#sidebar {\n color: #000;\n background: transparent; \n}\n\n#sidebarOptions {\n background: #fff;\n}\n\n#sidebarOptions .button {\n color: #999;\n}\n\n#sidebarOptions .button:hover {\n color: #000;\n background: #fff;\n border-color:white;\n}\n\n#sidebarOptions .button:active {\n color: #000;\n background: #fff;\n}\n\n#sidebarOptions .sliderPanel {\n background: transparent;\n}\n\n#sidebarOptions .sliderPanel A {\n color: #999;\n}\n\n#sidebarOptions .sliderPanel A:hover {\n color: #000;\n background: #fff;\n}\n\n#sidebarOptions .sliderPanel A:active {\n color: #000;\n background: #fff;\n}\n\n.sidebarSubHeading {\n color: #000;\n}\n\n#sidebarTabs {`\n background: #fff\n}\n\n#sidebarTabs .tabSelected {\n color: #000;\n background: #fff;\n border-top: solid 1px #ccc;\n border-left: solid 1px #ccc;\n border-right: solid 1px #ccc;\n border-bottom: none;\n}\n\n#sidebarTabs .tabUnselected {\n color: #999;\n background: #eee;\n border-top: solid 1px #ccc;\n border-left: solid 1px #ccc;\n border-right: solid 1px #ccc;\n border-bottom: none;\n}\n\n#sidebarTabs .tabContents {\n background: #fff;\n}\n\n\n#sidebarTabs .txtMoreTab .tabSelected {\n background: #fff;\n}\n\n#sidebarTabs .txtMoreTab .tabUnselected {\n background: #eee;\n}\n\n#sidebarTabs .txtMoreTab .tabContents {\n background: #fff;\n}\n\n#sidebarTabs .tabContents .tiddlyLink {\n color: #999;\n}\n\n#sidebarTabs .tabContents .tiddlyLink:hover {\n background: #fff;\n color: #000;\n}\n\n#sidebarTabs .tabContents {\n color: #000;\n}\n\n#sidebarTabs .button {\n color: #666;\n}\n\n#sidebarTabs .tabContents .button:hover {\n color: #000;\n background: #fff;\n}\n\n\n/*}}}*/";
config.shadowTiddlers.MPTWStyleSheet = "/***\nCosmetic fixes that probably should be included in a future TW...\n***/\n/*{{{*/\n.viewer .listTitle { list-style-type:none; margin-left:-2em; }\n.editorFooter .button { padding-top: 0px; padding-bottom:0px; }\n/*}}}*/\n/***\nImportant stuff. See TagglyTaggingStyles and HorizontalMainMenuStyles\n***/\n/*{{{*/\n[[TagglyTaggingStyles]]\n[[HorizontalMainMenuStyles]]\n/*}}}*/\n/***\nClint's fix for weird IE behaviours\n***/\n/*{{{*/\nbody {position:static;}\n.tagClear{margin-top:1em;clear:both;}\n/*}}}*/\n/***\nJust colours, fonts, tweaks etc. See SideBarWhiteAndGrey\n***/\n/*{{{*/\nbody {background:#eee; /* font-size:103%; */}\na{ color: #069; }\na:hover{ background: #069; color: #fff; }\n.popup { background: #178; border: 1px solid #069; }\n.headerForeground a { color: #6fc;}\n.headerShadow { left: 2px; top: 2px; }\n.title { padding:0px; margin:0px; }\n.siteSubtitle { padding:0px; margin:0px; padding-left:1.5em; }\n.subtitle { font-size:90%; color:#ccc; padding-left:0.25em; }\nh1,h2,h3,h4,h5 { color: #000; background: transparent; }\n.title {color:black; font-size:2em;}\n.shadow .title {color:#999; }\n.viewer pre { background-color:#f8f8ff; border-color:#ddf; }\n.viewer { padding-top:0px; }\n.editor textarea { font-family:monospace; }\n#sidebarOptions { border:1px #ccc solid; }\n.tiddler {\n border-bottom:1px solid #ccc; border-right:1px solid #ccc; padding-bottom:1em; margin-bottom:1em; \n background:#fff; padding-right:1.5em; }\n#messageArea { background-color:#bde; border-color:#8ab; border-width:4px; border-style:dotted; font-size:90%; }\n#messageArea .button { text-decoration:none; font-weight:bold; background:transparent; border:0px; }\n#messageArea .button:hover {background: #acd; }\n[[SideBarWhiteAndGrey]]\n\n.viewer td {vertical-align:top;}\n\n.viewer table.noBorder {border-style:none;}\n.viewer table.noBorder td {border-style:none;}\n.viewer table.threeCol td {width:33%;}\n\n#adsense {\n margin: 1em 15.7em 0em 1em; border:1px solid #ddd;\n background:#f8f8f8; text-align:center;margin-bottom:1em;overflow:hidden;padding:0.5em;} \n\n.sliderPanel { margin-left: 2em; }\n\n.viewer th { background:#ddd; color:black; }\n/*}}}*/\n/*{{{*/\n/* for testing clint's new formatter. eg {{red{asdfaf}}} */\n.red { color:white; background:red; display:block; padding:1em; } \n\n/* FF doesn't need this. but IE seems to want to make first one white */\n.txtMainTab .tabset { background:#eee; }\n.txtMoreTab .tabset { background:transparent; }\n\n.faq ol li { padding-top:1em; font-size:120%; }\n.faq ol ul li { padding-top:0px; font-size:100%; }\n\n/*}}}*/\n";
config.shadowTiddlers.MPTWPageTemplate = "<!---\nI've just tweaked my gradient colours and the topMenu bit. See HorizontalMainMenu.\n--->\n<!--{{{-->\n<div class='header' macro='gradient vert #000 #069'>\n<div class='headerShadow'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n<div class='headerForeground'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n<div id='topMenu' refresh='content' tiddler='MainMenu'></div>\n</div>\n<div id='sidebar'>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>\n<!--}}}-->\n";
config.themes.push("MPTW");
config.shadowTiddlers.MPTWCurvesStyleSheet = "/*{{{*/\n[[MPTWStyleSheet]]\n.tiddler { -moz-border-radius: 2em;}\n.button { -moz-border-radius: 1em;}\n#sidebarOptions { -moz-border-radius: 0 0 1em 1em;}\n.tab { -moz-border-radius: 1em 1em 0 0;}\n.tabContents { -moz-border-radius: 1em 1em 0 0;}\n/*}}}*/";
config.shadowTiddlers.MPTWCurvesPageTemplate = config.shadowTiddlers.MPTWPageTemplate;
config.themes.push("MPTWCurves");
//}}}
/***
!GTDd3
Created by Tomo (Tom Otvos) from http://www.dcubed.ca
(Based on the original GTD theme by Nathan Bowers at http://snapgrid.com)
***/
//{{{
config.shadowTiddlers.GTDd3PageTemplate = "<div class='header'>\n<div class='headerShadow'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n<div class='headerForeground'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n</div>\n<div id='mainMenu' refresh='content' tiddler='MainMenu' force='true'></div>\n<div id='sidebar'>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>";
config.shadowTiddlers.GTDd3StyleSheet = "/***\n!GTD specific styles\n***/\n\n/*{{{*/\n\n/* the tagging popup really gets in the way so push it off to the side */\n.tagging { float: right; }\n\n/* this unbullets actions in the actionList macro */\nul.gtdActionList { list-style-type: none; }\nli.gtdActionListProject, li.gtdActionListContext { margin-top: 1.0em; }\n\n.gtdCompletedActionItem { text-decoration: line-through; }\n.gtdNextActionItem { border-bottom: 1px solid red; }\n\n/*}}}*/\n\n/***\n!Imported 3x5 printing styles\n//adapted from the work of Clint Checketts, http://www.checkettsweb.com/tw/gtd_tiddlywiki.htm //\n***/\n\n/*{{{*/\n\n@media print {\n#mainMenu, #sidebar, #messageArea {display: none !important;}\n#displayArea {margin: 1em 1em 0em 1em;}\n\n\n/* LAYOUT ELEMENTS ========================================================== */\n*\n{\n margin: 0;\n padding: 0;\n}\n\n#contentWrapper\n{\n margin: 0;\n width: 100%;\n position: static;\n}\n\nbody {\n background: #fff;\n color: #000;\n font-size: 6.2pt;\n font-family: \"Lucida Grande\", \"Bitstream Vera Sans\", Helvetica, Verdana, Arial, sans-serif;\n}\n\nimg {\n max-width: 2.2in;\n max-height: 4.3in;\n}\n\n#header, #side_container, #storeArea, #copyright, #floater, #messageArea, .save_accesskey, .site_description, #saveTest, .toolbar, .header, .footer, .tagging, .tagged\n{\n display: none;\n}\n\n#tiddlerDisplay, #displayArea\n{\n display: inline;\n}\n\n.tiddler {\n margin: 0 0 2em 0;\n border-top: 1px solid #000;\n page-break-before: always;\n}\n\n.tiddler:first-child {\n page-break-before: ;\n}\n\n.title {\n font-size: 1.6em;\n font-weight: bold;\n margin-bottom: .3em;\n padding: .2em 0;\n border-bottom: 1px dotted #000;\n}\n\np, blockquote, ul, li, ol, dt, dd, dl, table\n{\n margin: 0 0 .3em 0;\n}\n\nh1, h2, h3, h4, h5, h6\n{\n margin: .2em 0;\n} \n\nh1\n{\n font-size: 1.5em;\n}\n\nh2\n{\n font-size: 1.3em;\n}\n\nh3\n{\n font-size: 1.25em;\n}\n\nh4\n{\n font-size: 1.15em;\n}\n\nh5\n{\n font-size: 1.1em;\n}\n\nblockquote\n{\n margin: .6em;\n padding-left: .6em;\n border-left: 1px solid #ccc;\n}\n\nul\n{\n list-style-type: circle;\n}\n\nli\n{\n margin: .1em 0 .1em 2em;\n line-height: 1.4em; \n}\n\ntable\n{\n border-collapse: collapse;\n font-size: 1em;\n}\n\ntd, th\n{\n border: 1px solid #999;\n padding: .2em;\n}\n\nhr {\n border: none;\n border-top: dotted 1px #777;\n height: 1px;\n color: #777;\n margin: .6em 0;\n}\n}\n/*}}}*/\n\n/***\n!Imported styles for calendar plugin\n***/\n\n/*{{{*/\n.calendar{\n border-bottom: 1px solid #550000;\n}\n\n.viewer .calendar{\n width: 220px;\n}\n\n#mainMenu .calendar{\n font-size: 8px;\n cursor: pointer;\n width: 100%;\n border: 0;\n border-collapse: collapse;\n}\n\n#mainMenu .calendar .button{\n border: 0;\n}\n\n#mainMenu .calendar td{\n font-size: 8pt;\n padding: 0;\n background: #fff;\n border: 0;\n}\n\n#mainMenu .calendar a{\n margin: 0;\n color: #000;\n background: transparent;\n}\n\n#mainMenu .calendar a:hover{\n color: #000;\n background: transparent;\n}\n\n#mainMenu .calendarMonthname,\n#mainMenu .calendar .calendarMonthTitle td a{\n color: #fff;\n}\n\n#mainMenu .calendarDaysOfWeek td{\n background: #500;\n color: #fff;\n}\n/*}}}*/\n\n\n/***\n!Layout Rules /%==============================================%/\n***/\n/*{{{*/\n\nbody { position: static; }\n\n.headerForeground, .headerShadow {\n padding-top: 1em;\n}\n\n.tiddler {\n margin: 0 0 0.9em 0;\n padding-bottom: 1em;\n}\n\n#mainMenu {\n width: 16em;\n font-size: 1em;\n text-align: left;\n}\n\n#mainMenu * {\n font-size: 1em;\n font-weight: normal;\n padding: 0; margin: 0; border: 0;\n}\n\n#mainMenu ul {\n list-style: none;\n margin-bottom: 10px;\n}\n\n#mainMenu li {\n text-indent: 1em;\n}\n\n#mainMenu a.button, #mainMenu a.tiddlyLink, #mainMenu a.externalLink {\n display: block; margin: 0;\n}\n\n#displayArea {\n margin-left: 19em;\n}\n\n/*}}}*/\n\n/***\n!Colors Used\n*@@bgcolor(#8cf): #8cf - Background blue@@\n*@@bgcolor(#18f): #18f - Top blue@@\n*@@bgcolor(#04b): #04b - Mid blue@@\n*@@bgcolor(#014):color(#fff): #014 - Bottom blue@@\n*@@bgcolor(#ffc): #ffc - Bright yellow@@\n*@@bgcolor(#fe8): #fe8 - Highlight yellow@@\n*@@bgcolor(#db4): #db4 - Background yellow@@\n*@@bgcolor(#841): #841 - Border yellow@@\n*@@bgcolor(#703):color(#fff): #703 - Title red@@\n*@@bgcolor(#866): #866 - Subtitle grey@@\n!Generic Rules /%==============================================%/\n***/\n/*{{{*/\nbody {\n background: #464646;\n color: #000;\n}\n\na{\n color: #04b;\n}\n\na:hover{\n background: #04b;\n color: #fff;\n}\n\na img{\n border: 0;\n}\n\nh1,h2,h3,h4,h5 {\n color: #000;\n background: #eee;\n}\n\n.button {\n color: #014;\n border: 1px solid #fff;\n}\n\n.button:hover {\n color: #014;\n background: #fe8;\n border-color: #db4;\n}\n\n.button:active {\n color: #fff;\n background: #db4;\n border: 1px solid #841;\n}\n\n/*}}}*/\n/***\n!Header /%==================================================%/\n***/\n/*{{{*/\n.header {\n background: #000;\n}\n\n.headerShadow {\n color: #000;\n}\n\n.headerShadow a {\n font-weight: normal;\n color: #000;\n}\n\n.headerForeground {\n color: #cf6;\n}\n\n.headerForeground a {\n font-weight: normal;\n color: #cf6;\n}\n\n/* ??? what is up when you specify a site title colour in IE ??? */\n/* .siteTitle { color: red; } */\n\n/*}}}*/\n/***\n!General tabs /%=================================================%/\n***/\n/*{{{*/\n\n.tabSelected {\n color: #fff;\n background: #960;\n border: none;\n}\n\n.tabUnselected {\n color: #fff;\n background: #660;\n}\n\n.tabContents {\n color: #004;\n background: #960;\n border: none;\n}\n\n.tabContents .button, .tabContents a {\n border: none;\n color: #fff;\n}\n\n.tabContents a:hover, .tabset a:hover {\n background: #000;\n}\n\n/* make nested tab areas look different */\n.tabContents .tabSelected, .tabContents .tabContents {\n background: #700;\n color: #fff;\n}\n\n.tabContents .tabContents {\n color: #eeb;\n}\n\n/*}}}*/\n/***\n!Main Menu /%=================================================%/\n***/\n/*{{{*/\n#mainMenu {\n background: #700;\n color: #fff;\n border-right: 3px solid #500;\n}\n\n#mainMenu * {\n color: #fff;\n}\n\n#mainMenu a.button, #mainMenu a.tiddlyLink, #mainMenu a.externalLink {\n border: none;\n border-bottom: 1px solid #500;\n border-top: 1px solid #900;\n}\n\n#mainMenu a:hover,\n#mainMenu a.button:hover {\n background-color: #b00;\n color: #fff;\n}\n\n/*}}}*/\n/***\n!Sidebar options /%=================================================%/\n~TiddlyLinks and buttons are treated identically in the sidebar and slider panel\n***/\n/*{{{*/\n#sidebar {\n color: #000;\n background: #eeb;\n border-right: 3px solid #bb8;\n border-bottom: 3px solid #520;\n}\n\n#sidebarOptions input {\n border: 1px solid #04b;\n}\n\n#sidebarOptions .sliderPanel {\n background: #fff;\n}\n\n#sidebarOptions .sliderPanel a {\n border: none;\n color: #700;\n}\n\n#sidebarOptions .sliderPanel a:hover {\n color: #fff;\n background: #700;\n}\n\n#sidebarOptions .sliderPanel a:active {\n color: #700;\n background: #fff;\n}\n\n#sidebarOptions a {\n color: #700;\n border: none;\n}\n\n#sidebarOptions a:hover, #sidebarOptions a:active {\n color: #fff;\n background: #700;\n}\n\n/*}}}*/\n/***\n!Message Area /%=================================================%/\n***/\n/*{{{*/\n#messageArea {\n border-right: 3px solid #da1;\n border-bottom: 3px solid #a80;\n background: #ffe72f;\n color: #014;\n}\n\n#messageArea .button {\n padding: 0.2em 0.2em 0.2em 0.2em;\n color: #014;\n background: #fff;\n}\n\n/*}}}*/\n/***\n!Popup /%=================================================%/\n***/\n/*{{{*/\n.popup {\n background: #333;\n border: none;\n}\n\n.popup hr {\n color: #000;\n}\n\n.popup li.disabled {\n color: #666;\n background: #cf6;\n}\n\n.popup li a, .popup li a:visited {\n color: #000;\n border: 1px outset #cf6;\n background: #cf6;\n}\n\n.popup li a:hover {\n color: #000;\n border: 1px outset #cf6;\n background: #ef9;\n}\n/*}}}*/\n/***\n!Tiddler Display /%=================================================%/\n***/\n/*{{{*/\n.tiddler {\n background: #fff;\n border-right: 3px solid #aaa;\n border-bottom: 3px solid #555;\n}\n\n.tiddler .defaultCommand {\n font-weight: bold;\n}\n\n.shadow .title {\n color: #866;\n}\n\n.title {\n color: #900;\n}\n\n.subtitle {\n color: #866;\n}\n\n.toolbar {\n color: #000;\n}\n\n.toolbar .button {\n background: #cf6;\n border: 1px outset #cf6;\n}\n\n.toolbar .button:hover {\n background: #ef9;\n}\n\n.tagging, .tagged {\n border: 1px solid #eee;\n background-color: #eee;\n}\n\n.selected .tagging, .selected .tagged {\n background-color: #ddd;\n border: 1px solid #bbb;\n}\n\n.tagging .listTitle, .tagged .listTitle {\n color: #014;\n}\n\n.tagging .button, .tagged .button {\n border: none;\n}\n\n.footer {\n color: #ddd;\n}\n\n.selected .footer {\n color: #888;\n}\n\n.sparkline {\n background: #8cf;\n border: 0;\n}\n\n.sparktick {\n background: #014;\n}\n\n.errorButton {\n color: #ff0;\n background: #f00;\n}\n\n.cascade {\n background: #eef;\n color: #aac;\n border: 1px solid #aac;\n}\n\n.imageLink, #displayArea .imageLink {\n background: transparent;\n}\n\n/*}}}*/\n/***\n''The viewer is where the tiddler content is displayed'' /%------------------------------------------------%/\n***/\n/*{{{*/\n\n.viewer .listTitle {list-style-type: none; margin-left: -2em;}\n\n.viewer .button {\n border: 1px solid #db4;\n}\n\n.viewer blockquote {\n border-left: 3px solid #666;\n}\n\n.viewer table {\n border: 2px solid #333;\n}\n\n.viewer th, thead td {\n background: #db4;\n border: 1px solid #666;\n color: #fff;\n}\n\n.viewer td, .viewer tr {\n border: 1px solid #666;\n}\n\n.viewer pre {\n border: 1px solid #fe8;\n background: #ffc;\n}\n\n.viewer code {\n color: #703;\n}\n\n.viewer hr {\n border: 0;\n border-top: dashed 1px #666;\n color: #666;\n}\n\n.highlight, .marked {\n background: #fe8;\n}\n/*}}}*/\n/***\n''The editor replaces the viewer in the tiddler'' /%------------------------------------------------%/\n***/\n/*{{{*/\n.editor input {\n border: 1px solid #04b;\n}\n\n.editor textarea {\n border: 1px solid #04b;\n width: 100%;\n}\n\n.editorFooter {\n color: #aaa;\n}\n\n/*}}}*/\n/***\n!Personal preferences\n***/\n\n/*{{{*/\n/* not required, but the menu looks a whole lot nicer flushed left */\n#mainMenu { text-align: left; }\n/* make input fields in viewer (options) show up in correct size */\n.viewer input { font-size: 0.9em; }\n/*}}}*/\n";
config.themes.push("GTDd3");
//}}}
//Questi broccoli, di cui a Roma si fa gran consumo, hanno le foglie di un verde cupo e il fiore nero o paonazzo.
Nettateli dalle foglie più dure e lessateli. Tolti dall'acqua bollente gettateli nella fredda e, dopo strizzati bene, tritateli all'ingrosso e gettateli in padella con lardo vergine (strutto), condendoli con sale e pepe. Tirato che abbiano tutto l'unto, annaffiateli con vino bianco dolce, continuate a strascinarli in padella finché l'abbiano tutto assorbito ed evaporato, indi serviteli ché saranno lodati.
Eccovi un altro modo di cucinar questi broccoli che così, senza lessarli, riescono migliori. Servitevi soltanto del fiore e delle foglie più tenere; queste tagliatele all'ingrosso e il fiore a piccoli spicchi. Mettete la padella al fuoco con olio in proporzione e uno spicchio d'aglio tagliato a fettine per traverso. Quando l'aglio comincia a rosolare gettate da crude in padella prima le foglie e poi il fiore, sale e pepe per condimento, e via via che, bollendo, si prosciugano rimestandoli sempre, andateli bagnando con un gocciolo d'acqua calda e, quasi a cottura completa, col vino bianco. Non potendo darvi di questo piatto le dosi precise abbiate la pazienza di far qualche prova (ne fo tante io!) per accertarvi del suo gusto migliore//. ''Ricettari del passato - Artusi''
/***
|Name|CalendarPlugin|
|Source|http://www.TiddlyTools.com/#CalendarPlugin|
|Version|0.0.0|
|Author|SteveRumsby|
|License|unknown|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|monthly and yearly calendars|
*''Changes by ELS 2007.11.30:''
**added "return false" to onclick handlers (prevent IE from opening blank pages)
*''Changes by ELS 2005.10.30:''
**config.macros.calendar.handler():
***use "tbody" element for IE compatibility.
***IE returns 2005 for current year, FF returns 105... fix year adjustment accordingly
**createCalendarDays():
***use showDate() function (if defined) to render autostyled date with linked popup
**calendar stylesheet definition:
***use .calendar class-specific selectors, add text centering and margin settings
*''Changes by ELS 2006.08.23:''
**added handling for weeknumbers (code supplied by Martin Budden. see "wn**" comment marks)
*updated by Jeremy Sheeley to add caching for reminder)
!!!!!Syntax:
|{{{<<calendar>>}}}|Produce a full-year calendar for the current year|
|{{{<<calendar year>>}}}|Produce a full-year calendar for the given year|
|{{{<<calendar year month>>}}}|Produce a one-month calendar for the given month and year|
|{{{<<calendar thismonth>>}}}|Produce a one-month calendar for the current month|
|{{{<<calendar lastmonth>>}}}|Produce a one-month calendar for last month|
|{{{<<calendar nextmonth>>}}}|Produce a one-month calendar for next month|
!!!!!Configuration:
<<option chkDisplayWeekNumbers>> Display week numbers //(note: Monday will be used as the start of the week)//
|''First day of week:''|<<option txtCalFirstDay>>|(Monday = 0, Sunday = 6)|
|''First day of weekend:''|<<option txtCalStartOfWeekend>>|(Monday = 0, Sunday = 6)|
***/
// //Modify this section to change the text displayed for the month and day names, to a different language for example. You can also change the format of the tiddler names linked to from each date, and the colours used.
//{{{
config.macros.calendar = {};
config.macros.calendar.monthnames = ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"];
config.macros.calendar.daynames = ["L", "M", "M", "G", "V", "S", "D"];
config.macros.calendar.weekendbg = "#c0c0c0";
config.macros.calendar.monthbg = "#e0e0e0";
config.macros.calendar.holidaybg = "#ffc0c0";
//}}}
/***
!!!!!Code section:
***/
// (you should not need to alter anything below here)//
//{{{
if(config.options.txtCalFirstDay == undefined)
config.options.txtCalFirstDay = 0;
if(config.options.txtCalStartOfWeekend == undefined)
config.options.txtCalStartOfWeekend = 5;
if(config.options.chkDisplayWeekNumbers == undefined)//wn**
config.options.chkDisplayWeekNumbers = false;
if(config.options.chkDisplayWeekNumbers)
config.options.txtCalFirstDay = 0;
config.macros.calendar.tiddlerformat = "0DD/0MM/YYYY"; // This used to be changeable - for now, it isn't// <<smiley :-(>>
version.extensions.calendar = { major: 0, minor: 6, revision: 0, date: new Date(2006, 1, 22)};
config.macros.calendar.monthdays = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
config.macros.calendar.holidays = [ ]; // Not sure this is required anymore - use reminders instead
//}}}
// //Is the given date a holiday?
//{{{
function calendarIsHoliday(date)
{
var longHoliday = date.formatString("0DD/0MM/YYYY");
var shortHoliday = date.formatString("0DD/0MM");
for(var i = 0; i < config.macros.calendar.holidays.length; i++) {
if(config.macros.calendar.holidays[i] == longHoliday || config.macros.calendar.holidays[i] == shortHoliday) {
return true;
}
}
return false;
}
//}}}
// //The main entry point - the macro handler.
// //Decide what sort of calendar we are creating (month or year, and which month or year)
// // Create the main calendar container and pass that to sub-ordinate functions to create the structure.
// ELS 2005.10.30: added creation and use of "tbody" for IE compatibility and fixup for year >1900//
// ELS 2005.10.30: fix year calculation for IE's getYear() function (which returns '2005' instead of '105')//
// ELS 2006.05.29: add journalDateFmt handling//
//{{{
config.macros.calendar.handler = function(place,macroName,params)
{
var calendar = createTiddlyElement(place, "table", null, "calendar", null);
var tbody = createTiddlyElement(calendar, "tbody", null, null, null);
var today = new Date();
var year = today.getYear();
if (year<1900) year+=1900;
// get format for journal link by reading from SideBarOptions (ELS 5/29/06 - based on suggestion by Martin Budden)
var text = store.getTiddlerText("SideBarOptions");
this.journalDateFmt = "DD-MMM-YYYY";
var re = new RegExp("<<(?:newJournal)([^>]*)>>","mg"); var fm = re.exec(text);
if (fm && fm[1]!=null) { var pa=fm[1].readMacroParams(); if (pa[0]) this.journalDateFmt = pa[0]; }
if (params[0] == "thismonth")
{
cacheReminders(new Date(year, today.getMonth(), 1, 0, 0), 31);
createCalendarOneMonth(tbody, year, today.getMonth());
}
else if (params[0] == "lastmonth") {
var month = today.getMonth()-1; if (month==-1) { month=11; year--; }
cacheReminders(new Date(year, month, 1, 0, 0), 31);
createCalendarOneMonth(tbody, year, month);
}
else if (params[0] == "nextmonth") {
var month = today.getMonth()+1; if (month>11) { month=0; year++; }
cacheReminders(new Date(year, month, 1, 0, 0), 31);
createCalendarOneMonth(tbody, year, month);
}
else {
if (params[0]) year = params[0];
if(params[1])
{
cacheReminders(new Date(year, params[1]-1, 1, 0, 0), 31);
createCalendarOneMonth(tbody, year, params[1]-1);
}
else
{
cacheReminders(new Date(year, 0, 1, 0, 0), 366);
createCalendarYear(tbody, year);
}
}
window.reminderCacheForCalendar = null;
}
//}}}
//{{{
//This global variable is used to store reminders that have been cached
//while the calendar is being rendered. It will be renulled after the calendar is fully rendered.
window.reminderCacheForCalendar = null;
//}}}
//{{{
function cacheReminders(date, leadtime)
{
if (window.findTiddlersWithReminders == null)
return;
window.reminderCacheForCalendar = {};
var leadtimeHash = [];
leadtimeHash [0] = 0;
leadtimeHash [1] = leadtime;
var t = findTiddlersWithReminders(date, leadtimeHash, null, 1);
for(var i = 0; i < t.length; i++) {
//just tag it in the cache, so that when we're drawing days, we can bold this one.
window.reminderCacheForCalendar[t[i]["matchedDate"]] = "reminder:" + t[i]["params"]["title"];
}
}
//}}}
//{{{
function createCalendarOneMonth(calendar, year, mon)
{
var row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, true, year, mon);
row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarDayHeader(row, 1);
createCalendarDayRowsSingle(calendar, year, mon);
}
//}}}
//{{{
function createCalendarMonth(calendar, year, mon)
{
var row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, false, year, mon);
row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarDayHeader(row, 1);
createCalendarDayRowsSingle(calendar, year, mon);
}
//}}}
//{{{
function createCalendarYear(calendar, year)
{
var row;
row = createTiddlyElement(calendar, "tr", null, null, null);
var back = createTiddlyElement(row, "td", null, null, null);
var backHandler = function() {
removeChildren(calendar);
createCalendarYear(calendar, year-1);
return false; // consume click
};
createTiddlyButton(back, "<", "Anno precedente", backHandler);
back.align = "center";
var yearHeader = createTiddlyElement(row, "td", null, "calendarYear", year);
yearHeader.align = "center";
//yearHeader.setAttribute("colSpan", 19);
yearHeader.setAttribute("colSpan",config.options.chkDisplayWeekNumbers?22:19);//wn**
var fwd = createTiddlyElement(row, "td", null, null, null);
var fwdHandler = function() {
removeChildren(calendar);
createCalendarYear(calendar, year+1);
return false; // consume click
};
createTiddlyButton(fwd, ">", "Anno successivo", fwdHandler);
fwd.align = "center";
createCalendarMonthRow(calendar, year, 0);
createCalendarMonthRow(calendar, year, 3);
createCalendarMonthRow(calendar, year, 6);
createCalendarMonthRow(calendar, year, 9);
}
//}}}
//{{{
function createCalendarMonthRow(cal, year, mon)
{
var row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon], false, year, mon);
createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+1], false, year, mon);
createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+2], false, year, mon);
row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarDayHeader(row, 3);
createCalendarDayRows(cal, year, mon);
}
//}}}
//{{{
function createCalendarMonthHeader(cal, row, name, nav, year, mon)
{
var month;
if(nav) {
var back = createTiddlyElement(row, "td", null, null, null);
back.align = "center";
back.style.background = config.macros.calendar.monthbg;
/*
back.setAttribute("colSpan", 2);
var backYearHandler = function() {
var newyear = year-1;
removeChildren(cal);
cacheReminders(new Date(newyear, mon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, mon);
return false; // consume click
};
createTiddlyButton(back, "<<", "Anno precedente", backYearHandler);
*/
var backMonHandler = function() {
var newyear = year;
var newmon = mon-1;
if(newmon == -1) { newmon = 11; newyear = newyear-1;}
removeChildren(cal);
cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, newmon);
return false; // consume click
};
createTiddlyButton(back, "<", "Mese precedente", backMonHandler);
month = createTiddlyElement(row, "td", null, "calendarMonthname", name)
// month.setAttribute("colSpan", 3);
// month.setAttribute("colSpan", 5);
month.setAttribute("colSpan", config.options.chkDisplayWeekNumbers?6:5);//wn**
var fwd = createTiddlyElement(row, "td", null, null, null);
fwd.align = "center";
fwd.style.background = config.macros.calendar.monthbg;
// fwd.setAttribute("colSpan", 2);
var fwdMonHandler = function() {
var newyear = year;
var newmon = mon+1;
if(newmon == 12) { newmon = 0; newyear = newyear+1;}
removeChildren(cal);
cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, newmon);
return false; // consume click
};
createTiddlyButton(fwd, ">", "Mese successivo", fwdMonHandler);
/*
var fwdYear = createTiddlyElement(row, "td", null, null, null);
var fwdYearHandler = function() {
var newyear = year+1;
removeChildren(cal);
cacheReminders(new Date(newyear, mon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, mon);
return false; // consume click
};
createTiddlyButton(fwd, ">>", "Anno successivo", fwdYearHandler);
*/
} else {
month = createTiddlyElement(row, "td", null, "calendarMonthname", name)
//month.setAttribute("colSpan", 7);
month.setAttribute("colSpan",config.options.chkDisplayWeekNumbers?8:7);//wn**
}
month.align = "center";
month.style.background = config.macros.calendar.monthbg;
}
//}}}
//{{{
function createCalendarDayHeader(row, num)
{
var cell;
for(var i = 0; i < num; i++) {
if (config.options.chkDisplayWeekNumbers) createTiddlyElement(row, "td");//wn**
for(var j = 0; j < 7; j++) {
var d = j + (config.options.txtCalFirstDay - 0);
if(d > 6) d = d - 7;
cell = createTiddlyElement(row, "td", null, null, config.macros.calendar.daynames[d]);
if(d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))
cell.style.background = config.macros.calendar.weekendbg;
}
}
}
//}}}
//{{{
function createCalendarDays(row, col, first, max, year, mon)
{
var i;
if (config.options.chkDisplayWeekNumbers){
if (first<=max) {
var ww = new Date(year,mon,first);
createTiddlyElement(row, "td", null, null, "w"+ww.getWeek());//wn**
}
else createTiddlyElement(row, "td", null, null, null);//wn**
}
for(i = 0; i < col; i++) {
createTiddlyElement(row, "td", null, null, null);
}
var day = first;
for(i = col; i < 7; i++) {
var d = i + (config.options.txtCalFirstDay - 0);
if(d > 6) d = d - 7;
var daycell = createTiddlyElement(row, "td", null, null, null);
var isaWeekend = ((d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))? true:false);
if(day > 0 && day <= max) {
var celldate = new Date(year, mon, day);
// ELS 2005.10.30: use <<date>> macro's showDate() function to create popup
if (window.showDate) {
showDate(daycell,celldate,"popup","DD",config.macros.calendar.journalDateFmt,true, isaWeekend); // ELS 5/29/06 - use journalDateFmt
} else {
if(isaWeekend) daycell.style.background = config.macros.calendar.weekendbg;
var title = celldate.formatString(config.macros.calendar.tiddlerformat);
if(calendarIsHoliday(celldate)) {
daycell.style.background = config.macros.calendar.holidaybg;
}
if(window.findTiddlersWithReminders == null) {
var link = createTiddlyLink(daycell, title, false);
link.appendChild(document.createTextNode(day));
} else {
var button = createTiddlyButton(daycell, day, title, onClickCalendarDate);
}
}
}
day++;
}
}
//}}}
// //We've clicked on a day in a calendar - create a suitable pop-up of options.
// //The pop-up should contain:
// // * a link to create a new entry for that date
// // * a link to create a new reminder for that date
// // * an <hr>
// // * the list of reminders for that date
//{{{
function onClickCalendarDate(e)
{
var button = this;
var date = button.getAttribute("title");
var dat = new Date(date.substr(6,4), date.substr(3,2)-1, date.substr(0, 2));
date = dat.formatString(config.macros.calendar.tiddlerformat);
var popup = createTiddlerPopup(this);
popup.appendChild(document.createTextNode(date));
var newReminder = function() {
var t = store.getTiddlers(date);
displayTiddler(null, date, 2, null, null, false, false);
if(t) {
document.getElementById("editorBody" + date).value += "\n<<reminder day:" + dat.getDate() +
" month:" + (dat.getMonth()+1) +
" year:" + (dat.getYear()+1900) + " title: >>";
} else {
document.getElementById("editorBody" + date).value = "<<reminder day:" + dat.getDate() +
" month:" + (dat.getMonth()+1) +
" year:" + (dat.getYear()+1900) + " title: >>";
}
return false; // consume click
};
var link = createTiddlyButton(popup, "New reminder", null, newReminder);
popup.appendChild(document.createElement("hr"));
var t = findTiddlersWithReminders(dat, [0,14], null, 1);
for(var i = 0; i < t.length; i++) {
link = createTiddlyLink(popup, t[i].tiddler, false);
link.appendChild(document.createTextNode(t[i].tiddler));
}
return false; // consume click
}
//}}}
//{{{
function calendarMaxDays(year, mon)
{
var max = config.macros.calendar.monthdays[mon];
if(mon == 1 && (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0)) {
max++;
}
return max;
}
//}}}
//{{{
function createCalendarDayRows(cal, year, mon)
{
var row = createTiddlyElement(cal, "tr", null, null, null);
var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first1 < 0) first1 = first1 + 7;
var day1 = -first1 + 1;
var first2 = (new Date(year, mon+1, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first2 < 0) first2 = first2 + 7;
var day2 = -first2 + 1;
var first3 = (new Date(year, mon+2, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first3 < 0) first3 = first3 + 7;
var day3 = -first3 + 1;
var max1 = calendarMaxDays(year, mon);
var max2 = calendarMaxDays(year, mon+1);
var max3 = calendarMaxDays(year, mon+2);
while(day1 <= max1 || day2 <= max2 || day3 <= max3) {
row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;
createCalendarDays(row, 0, day2, max2, year, mon+1); day2 += 7;
createCalendarDays(row, 0, day3, max3, year, mon+2); day3 += 7;
}
}
//}}}
//{{{
function createCalendarDayRowsSingle(cal, year, mon)
{
var row = createTiddlyElement(cal, "tr", null, null, null);
var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first1 < 0) first1 = first1+ 7;
var day1 = -first1 + 1;
var max1 = calendarMaxDays(year, mon);
while(day1 <= max1) {
row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;
}
}
//}}}
// //ELS 2005.10.30: added styles
//{{{
setStylesheet(".calendar, .calendar table, .calendar th, .calendar tr, .calendar td { text-align:center; } .calendar, .calendar a { margin:0px !important; padding:0px !important; }", "calendarStyles");
//}}}
Un altro utile esempio delle potenzialità di ~TiddlyWiki fa riferimento all'installazione del plugin NewCalendarPlugin. Questo plugin, il cui codice sorgente è disponibile [[qui|http://www.math.ist.utl.pt/~psoares/addons.html#CalendarPlugin]], rende disponibile la nuova macro {{{<<newcalendar>>}}} che se invocata all'interno di un tiddler, produce il seguente risultato:
<<newcalendar>>
La macro produce quindi il calendario del mese corrente con la data corrente evidenziata. Il calendario è consultabile cliccando sui comandi presenti nella barra del mese. In particolare cliccando sui segni di {{{<}}} e {{{>}}} si visualizza rispettivamente il mese precedente ed il mese successivo a quello corrente, mentre cliccando sui segni di {{{<<}}} e {{{>>}}} si visualizza rispettivamente l'anno precedente o quello successivo a quello corrente. Ogni giorno visualizzato nel calendario, se cliccato, produce l'apertura di un nuovo tiddler, il cui nome è automaticamente impostato alla data del giorno cliccato, ed è automaticamente associato all'etichetta ''Promemoria''. Se il tiddler viene salvato, la data corrispondente sul calendario sarà evidenziata e ponendo il cursore del mouse in corrispondenza di quel giorno si visualizzerà il tooltip del contenuto del tiddler. Naturalmente cliccando su quella data, verrà aperto il relativo tiddler. Sperimentate direttamente cliccando su uno dei giorni del calendario e scrivendo qualcosa nel tiddler.
Naturalmente se siete interessati a questa funzionalità dovete installare nel vostro ~TiddlyWiki il plugin NewCalendarPlugin (per sapere come fare consultate [[Come installare Plugin]]).
//''Una precisazione sull'utilizzo di questo plugin'': poichè in questo wiki è già installato il plugin CalendarPlugin che svolge funzioni simili a questo ma che si integra meglio nella Timeline, per evitare conflitti, questo plugin è stato da me modificato rinominando nel codice la macro {{{<<calendar>>}}} in {{{<<newcalendar>>}}}. Se decidete di utilizzare questo plugin fate quindi riferimento ''non'' a questa versione ma alla versione originale che trovate [[qui|http://www.math.ist.utl.pt/~psoares/addons.html#CalendarPlugin]].//
Name: MptwSmoke
Background: #fff
Foreground: #000
PrimaryPale: #aaa
PrimaryLight: #777
PrimaryMid: #111
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
@@Attenzione: la procedura di aggiornamento con la nuova versione di ~TiddlyWiki è stata modificata. Leggete le nuove istruzioni.@@
Il codice sorgente di ~TiddlyWiki viene regolarmente aggiornato per rimuovere malfunzionamenti e per introdurre nuove funzionalità. L'ultima versione dell software è sempre disponibile sul [[sito ufficiale|http://www.tiddlywiki.com]]. Prima di mostrare in che modo è possibile aggiornare il software, è importante tenere presente che tramite la macro {{{<<version>>}}} è possibile conoscere la versione di ~TiddlyWiki che si sta utilizzando. Questa, ad esempio, è la versione <<version>> di ~TiddlyWiki.
I passi da seguire per aggiornare ~TiddlyWiki dipendono dalla //versione// che utilizzate. In questo frammento vengono descritte le istruzioni da seguire in entrambi i casi, ossia sia se utilizzate un TW versione ''2.4.0'' o successive che un TW con una versione ''precedente'' alla 2.4.0.
!Aggiornamento dalla versione 2.4.0+ alla versione più recente
Nel caso in cui la versione del vostro TW sia la 2.4.0+, potete eseguire l'aggiornamento del codice base molto semplicemente utilizzando il comando ''Aggiorna'' presente nella ''backstage area'' (ossia, in questa traduzione, nella barra dei comandi visualizzata quando cliccate su ''Strumenti''). In particolare, i passi da seguire sono:
* Aprite la barra dei comandi cliccando sul comando ''Strumenti'' posto in alto a destra;
* Selezionate il comando ''Aggiorna'' della barra dei comandi;
* Cliccate sul pulsante ''Aggiorna'' che compare nella finestra di dialogo e seguite le indicazioni che vi vengono fornite.
L'aggiornamento del codice base ''non'' interferisce in alcun modo con i contenuti del vostro wiki!
!Aggiornamento da una versione precedente alla 2.4.0+ alla versione più recente
Se state utilizzando una precedente versione del software e desiderate aggiornare il vostro wiki all'ultima versione disponibile, basta seguire queste semplici istruzioni:
* Scaricate una copia aggiornata vuota dell'ultima versione di ~TiddlyWiki cliccando con il tasto destro del mouse su [[questo link|http://www.tiddlywiki.com/empty.html]], selezionate dal menu contestuale //'Salva destinazione come...'// o //'Salva oggetto con nome...'// e salvate il file nella cartella desiderata dandogli un nome significativo (ad esempio ''ilmionuovotiddlywiki.html'')
* Aprite il file che avete appena scaricato nel vostro browser
* Scegliete il comando ''import'' nella barra degli strumenti che compare in alto nella pagina. Se questa barra non compare, cliccate sul comando ''backstage'' presente nella pagina in alto a destra
* Cliccate sul pulsante ''browse'' e selezionate dalla finestra di browsing il vostro file ~TiddlyWiki che desiderate aggiornare (supponiamo ad esempio che questo si chiami ''ilmiotiddlywiki.html'')
* Cliccate sul pulsante ''open'' presente nel wizard di importazione; così facendo viene visualizzata una lista di tutti i frammenti presenti nel vostro ~TiddlyWiki
* Cliccate sul riquadro in alto a sinistra per selezionare tutti i tiddlers della lista
* Scrollate verso il basso la finestra del wizard assicurandovi che l'opzione //Keep these tiddlers linked to this server...// ''NON'' sia selezionata
* Cliccate sul pulsante ''import''. A questo punto viene visualizzato un messaggio di riepilogo dell'importazione
* Chiudete il wizard e ''salvate'' il vostro ~TiddlyWiki
Il risultato di questa sequenza è che il file ''ilmionuovotiddlywiki.html'' sarà una copia aggiornata all'ultima versione di ~TiddlyWiki.
La causa più probabile di fallimento della procedura di aggiornamento è che uno dei [[Plugin]] che state utilizzando non è compatibile con l'ultima release del software. Se si verifica questa situazione, ripetete l'intero processo omettendo il plugin che genera problemi.
Se la procedura descritta non dovesse essere chiara, date un'occhiata allo screencast che ho predisposto.
<<player http://pollio.maurizio.googlepages.com/Come_aggiornare_TiddlyWiki.swf 810 610>>
Segnalo, inoltre, che laddove dopo aver [[installato un plugin|Come installare Plugin]], si dovessero verificare problemi, potete avviare il vostro wiki nella modalità SafeMode.
Per modificare il menù del vostro wiki o il titolo è necessario semplicemente editare gli SpecialTiddlers i ~TiddlyWiki. Le modifiche effettuate a questi tiddlers si riflettono immediatamente nel vostro sito.
Nel predisporre questa guida, più volte ho avuto la necessità di inserire dei commenti ''visibili'' nei frammenti di testo che stavo scrivendo. Nel tiddler [[Come inserire commenti nascosti nei Tiddlers]] si è già descritto come poter inserire commenti ''nascosti'' in un tiddler: questa funzionalità di ~TiddlyWiki serve soprattutto a chi sviluppa Plugin per commentare opportunamente il codice che sta sviluppando. La funzionalità descritta invece in questo tiddler è completamente diversa; qui l'esigenza è di poter inserire a piacimento commenti visibili in un tiddler e di tenere traccia di chi li ha inseriti ed in quale data. La soluzione prospettata in questa guida è stata sviluppata da Eric Shulman ed è disponibile, oltre che in questa guida, sul suo [[sito|http://www.TiddlyTools.com]]. La soluzione si basa sull'impiego combinato di diversi elementi; in particolare sul Plugin InlineJavascriptPlugin (//che consente di scrivere direttamente all'interno di un tiddler codice eseguibile ~JavaScript//), e sugli script contenuti nei due frammenti [[addTiddlerComment]] e FinestraCommenta (quest'ultimo da me modificato per tradurlo in lingua italiana). In sintesi, con l'impiego combinato di questi elementi è possibile far comparire in qualsiasi frammento, in maniera estremamente semplice, un pulsante (tipicamente utilizzando la macro {{{<<slider>>}}}) che produce l'apertura di una finestra nella quale si può scrivere il proprio commento. Quando il commento viene salvato, questo compare nel frammento con l'indicazione dell'autore e della data nella quale è stato inserito. Naturalmente è possibile inserire più commenti ad un tiddler. Chi volesse utilizzare questa tecnica deve, quindi, installare nel proprio wiki il plugin ~InlineJavascriptPlugin, copiare semplicemente nel proprio wiki i due frammenti addTiddlerComment e FinestraCommenta ed infine aggiungere ai tiddlers nei quali vuole inserire commenti il seguente codice:
{{{
<<slider chkSliderCommenta FinestraCommenta Commenta "Scrivi un commento">>
}}}
Per vedere un esempio di questa tecnica, aprite il tiddler [[Esempio d'uso dello script per commentare un tiddler]] e sperimentate direttamente.
Naturalmente in TiddlyWiki si possono creare agevolmente anche collegamenti esterni (non solo quindi collegamenti interni a tiddlers). Il codice da utilizzare per creare collegamenti esterni, come ad esempio, l'[[Home Page di TiddlyWiki|http://www.tiddlywiki.com]], è semplicemente il seguente:
{{{
[[testo|url]]
}}}
dove, naturalmente, l'url deve essere espresso nella forma completa, come mostrato di seguito:
{{{
[[Home Page di TiddlyWiki|http://www.tiddlywiki.com]]
}}}
Gli elenchi puntati e numerati (liste) sono una delle opzioni di formattazione del testo più semplici da realizzare con TiddlyWiki. Anteponendo semplicemente un asterisco (*) all'inizio di ogni linea, si realizza un elenco puntato. Se si utilizzano due o tre asterischi, si creano liste indentate su due o tre livelli, come nell'esempio che segue:
*Linea Uno
**linea A
***linea i
***linea ii
**linea B
*Linea Due
*Linea Tre
Qui di seguito il codice per ottenere questa strutturazione della lista:
{{{
*Linea Uno
**linea A
***linea i
***linea ii
**linea B
*Linea Due
*Linea Tre
}}}
Le liste numerate sono altrettanto semplici da realizzare. Basta anteporre il segno di cancelletto (#) all'inizio di ogni linea:
#Linea Uno
##linea A
###linea i
###linea ii
##linea B
#Linea Due
#Linea Tre
Qui seguito il codice per ottenere questa strutturazione della lista:
{{{
#Linea Uno
##linea A
###linea i
###linea ii
##linea B
#Linea Due
#Linea Tre
}}}
Se per qualche motivo avete necessità di creare un singolo Tiddler con titoli multipli, basta semplicemente scrivere ogni titolo su una riga ed aggiungere un punto esclamativo (!) all'inizio. Per creare sottotitoli aggiungete altri punti esclamativi, come mostrato nel seguente esempio:
!Titolo 1
!!Sotto Titolo 1
!!!Sotto Sotto Titolo 1
Il codice necessario per ottenere questo effetto è il seguente:
{{{
!Titolo 1
!!Sotto Titolo 1
!!!Sotto Sotto Titolo 1
}}}
In TiddlyWiki si possono creare tabelle, anche molto complesse, attenendosi a poche regole di formattazione. In particolare potete creare una tabella semplicemente racchiudendo il testo tra due barre verticali || (per ottenere le barre verticali basta premere il tasto shift ed il tasto backslash sulla vostra tastiera).
|!Intestazioni: aggiungete un punto esclamativo (!) subito dopo la barra verticale|!Intestazione2|!Intestazione3|
|Riga 1, Colonna 1|Riga 1, Colonna 2|Riga 1, Colonna 3|
|>|>|Per estendere una riga su più colonne usate il carattere >|
|Per estendere una colonna su più righe usate il carattere ~|>| Con lo spazio iniziale il testo si allinea a destra|
|~|>| Per centrare il testo racchiudetelo tra spazi |
|>|>|bgcolor(green):Colorate una cella con il codice bgcolor(color):|
|Aggiungete un titolo alla tabella inserendolo tra due barre verticali seguite dal carattere c|c
Qui di seguito viene mostrato il codice necessario per creare la precedente tabella:
{{{
|!Intestazioni: aggiungete un punto esclamativo (!) subito dopo la barra verticale|!Intestazione2|!Intestazione3|
|Riga 1, Colonna 1|Riga 1, Colonna 2|Riga 1, Colonna 3|
|>|>|Per estendere una riga su più colonne usate il carattere >|
|Per estendere una colonna su più righe usate il carattere ~|>| Con lo spazio iniziale il testo si allinea a destra|
|~|>| Per centrare il testo racchiudetelo tra spazi |
|>|>|bgcolor(green):Colorate una cella con il codice bgcolor(color):|
|Aggiungete un titolo alla tabella inserendolo tra due barre verticali seguite dal carattere c|c
}}}
Osservate anche questo [[esempio|Tabella periodica degli elementi]] per avere un'idea delle capacità di ~TiddlyWiki di formattare tabelle.
Navigando questo tutorial, avrete sicuramente notato l'elevato numero di punti nei quali compaiono parole attaccate tra di loro. Naturalmente c'è un motivo per questo e la spiegazione è molto semplice: ogni volta che scrivete qualcosa usando più parole attaccate tra loro e con le iniziali maiuscole (in gergo, componete una WikiParola), TiddlyWiki creerà automaticamente un link ad un [[Tiddler]] con quel titolo.
Sperimentate direttamente senza timore di provocare danni! Fate ''doppio click'' su questo [[Tiddler]], o cliccate sul comando ''Modifica'' della [[Toolbar]] per attivare il modo editing e scrivete nello spazio sottostante quello che desiderate avendo solo cura di scrivere parole attaccate tra loro e con le iniziali maiuscole. Scritta una WikiParola, cliccate sul comando "Salva" della finestra.
//Nota: se nella Toolbar non compare il comando ''Modifica'' ma il comando ''View'', vuol dire che l'opzione di rendere editabile questo wiki da web è disabilitata. Per abilitare l'editing dei tiddler da web, aprite il pannello Opzioni, cliccate su OpzioniAvanzate e deselezionate l'opzione ''Non rendere editabile dal web''. Da questo momento in poi i tiddler diventano editabili.//
----
----
Noterete che TiddlyWiki converte automaticamente la vostra WikiParola in un link con carattere corsivo. Provate ora a cliccare su quel link.
Se eseguite questa azione, vedrete la vostra WikiParola come titolo del Tiddler seguito dal testo //Questo frammento non esiste ancora. Doppio click per crearlo//. Se a questo punto fate doppio click e scrivete qualcosa avrete creato un nuovo Tiddler con quel nome. A questo punto, se in qualsiasi punto del vostro Wiki scrivete la vostra WikiParola, TiddlyWiki automaticamente creerà un link ipertestuale a quel Tiddler!
Ma, a questo punto, potreste chiedervi come poter creare un Tiddler il cui nome sia una sola parola, oppure un Tiddler il cui nome ''non'' sia una WikiParola (per esempio una frase senza iniziali maiuscole e con spazi tra le parole). Per risolvere questo problema basta semplicemente, nel modo editing, racchiudere la non WikiParola o la frase fra doppie parentesi quadre, come mostrato di seguito:
{{{
[[Parola non Wiki o frase]]
}}}
Cosa succede però, potreste ancora chiedervi, se vogliamo usare nel nostro sito Wiki una parola fatta da più parole attaccate tra loro, con iniziali maiuscole, ossia una WikiParola, e ''non'' voler però creare un Tiddler, come ad esempio, utilizzare la parola ~JavaScript o scrivere ~JamesBond? Semplice: basta far precedere la parola in questione dal segno di tilde (~). Così facendo ~TiddlyWiki non creerà alcun collegamento ipertestuale ad un tiddler.
{{{
~JavaScript ~JamesBond
}}}
Questo tiddler mostra una opzione avanzata di ~TiddlyWiki che vi consente di scegliere se la funzionalità di editing del vostro wiki sia abilitata o meno quando il file viene letto via {{{http:}}} (e non via {{{file:}}}).
Per pubblicare sul web un sito ~TiddlyWiki con l'opzione di editing disabilitata, basta creare un nuovo tidller, copiare al suo interno il seguente codice ed etichettarlo con la tag 'systemConfig'.
{{{
config.options.chkHttpReadOnly = true;
}}}
L'utente che legge il vostro wiki, una volta scaricato lo stesso sul proprio PC, potrà modificare tale impostazione attraverso il pannello di controllo OpzioniAvanzate.
Questo è un esempio di tiddler che, mediante l'uso di una semplice macro, permette di avere la lista di tutti i tiddlers a cui è stata associata la stessa etichetta. In questo caso specifico, la macro mostra l'elenco di tutti i tiddlers che sono stati categorizzati con l'etichetta Esempi.
<<listTags Esempi>>
Il codice da utilizzare per ottenere questo risultato è semplicemente il seguente:
{{{
<<listTags Esempi>>
}}}
Questa macro di ~TiddlyWiki permette quindi, in maniera semplice, di creare un tiddler che mostra il contenuto di due o più tiddler che abbiano la stessa etichetta. L'uso opportuno delle etichette (tag) può risultare particolarmente utile per estendere le funzionalità di ~TiddlyWiki, come viene mostrato negli esempi [[Lista delle cose da fare - versione semplice]] e [[Lista delle cose da fare - versione avanzata]].
Supponiamo che vi chiediate come poter includere in maniera rapida in un tiddler l'elenco di ''tutti'' i tiddlers che compongono il vostro sito. Questo risultato può essere ottenuto in maniera estremamente semplice utilizzando la macro {{{<<list>>}}}.
Una delle più interessanti, e allo stesso tempo potenti, funzionalità di TiddlyWiki è la possibilità di etichettare i tiddler. Le etichette (tag) permettono di categorizzare i tiddlers. Nel riquadro visualizzato a fianco di questo tiddler noterete che è marcato con l'etichetta Formattazione. Se provate a cliccare su questa etichetta, si aprirà un menù a scorrimento che elenca tutti i tiddler che appartengono alla stessa categoria. Da questo menù avete la possibilità di aprire tutti gli altri tiddler della stessa categoria, singolarmente o tutti insieme.
Per aggiungere un'etichetta ad un tiddler, passate al modo editing e aggiungete, nell'apposita finestra, le etichette che desiderate ''separate da spazio'', oppure scegliete un'etichetta da quelle già definite cliccando sul link Esistenti.
Nel corso di questo tutorial avrete modo di verificare l'enorme potenzialità del concetto di 'tagging' in ~TiddlyWiki.
Per approfondire il tema dei tag leggete anche il tiddler TagSpeciali.
Se desiderate far aprire il vostro ~TiddlyWiki con una ben precisa configurazione di tiddlers aperti, avete due diverse possibilità:
* una volta aperti tutti i tiddlers interessati, cliccate sul comando ''Indirizzo di pagina'' presente nella SideBar. In questo modo, nella finestra indirizzo del browser, viene riportato l'URL che corrisponde al vostro wiki con tutti i tiddlers correntemente aperti. Comunicando questo url, chi cliccherà su questo indirizzo, aprirà il vostro wiki con quella configurazione di tiddlers aperti;
* utilizzare il comando #open:nome tiddler negli StartupParameters.
TiddlyWiki supporta i principali tipi di opzioni di formattazione:
*Per utilizzare il ''grassetto'' basta racchiudere il testo o la parola tra due singoli apici:
{{{
''testo in grassetto''
}}}
*Per utilizzare il --barrato-- basta racchiudere il testo o la parola tra due segni meno:
{{{
--testo barrato--
}}}
*Per utilizzare il __sottolineato__ basta racchiudere il testo o la parola tra due segni di sottolineato (underscore):
{{{
__testo sottolineato__
}}}
*Per utilizzare il //corsivo// basta racchiudere il testo o la parola tra due barre:
{{{
//testo corsivo//
}}}
*Per posizionare una parola all'^^apice^^ basta racchiudere il testo o la parola tra due segni di ^:
{{{
^^testo all'apice^^
}}}
*Per posizionare una parola al ~~pedice~~ basta racchiudere il testo o la parola tra due segni di tilde:
{{{
~~testo al pedice~~
}}}
*Per cambiare il colore di una @@color(blue):parola@@ basta racchiudere il testo o la parola tra due segni di @ facendo precedere il testo dalla stringa color() e specificando all'interno della parentesi un colore (in inglese):
{{{
@@color(colore in inglese):testo colorato@@
}}}
*Per cambiare il colore dello sfondo di una @@bgcolor(red):parola@@ basta racchiudere il testo o la parola tra due segni di @ facendo precedere il testo dalla stringa bgcolor() e specificando all'interno della parentesi un colore (in inglese):
{{{
@@bgcolor(colore in inglese):testo con sfondo colorato@@
}}}
Naturalmente è possibile utilizzare una combinazione di attributi di formattazione scrivendo, ad esempio, ''//testo in grassetto e corsivo//''.
In questo caso il testo è racchiuso tra una coppia di apici singoli ed una coppia di barre:
{{{
''//testo in grassetto e corsivo//''
}}}
Nell'uso di ~TiddlyWiki, soprattutto se decidete di iniziare il vostro wiki a partire da un documento ~TiddlyWiki che presenti già dei contenuti, può nascere l'esigenza di //pulire// la Timeline, nel senso di iniziare a visualizzare gli aggiornamenti che avete effettuato nel vostro wiki a partire da una data specificata, ed evitare quindi che la Timeline diventi troppo lunga, oppure decidere quali tiddlers debbano essere inclusi e/o esclusi dalla Timeline. Per risolvere questo problema esiste un [[Plugin]] specifico che, in maniera molto semplice, vi permette di avere il pieno controllo della vostra Timeline. Il plugin in questione è BetterTimelineMacro che trovate sul seguente [[sito|http://http://lewcid.googlepages.com/lewcid.html#BetterTimelineMacro]]. Per procedere con la personalizzazione della vostra Timeline, seguite i seguenti passi:
#installate nel vostro ~TiddlyWiki wiki il plugin BetterTimelineMacro (se non sapete come fare leggete [[Come installare Plugin]]);
#editate il tiddler TabTimeline, modificando la macro {{{timeline}}} presente in esso, seguendo le seguenti istruzioni:
{{{
<<timeline better:true>>
}}}
Il parametro ''better:true'' abilita le funzionalità avanzate della Timeline. Se non viene specificato, il funzionamento della Timeline sarà quello di default.
Parametri per le funzionalità avanzate //(utilizzate solo quelli che vi interessano)//:
{{{
<<timeline better:true onlyTag:Tag1 excludeTag:Tag2 sortBy:modified/created firstDay:YYYYMMDD maxDays:7 maxEntries:30>>
}}}
''onlyTag:'' solo i tiddlers associati al tag specificato saranno elencati nella Timeline. Il default è la lista di tutti i tiddlers;
''excludeTag:'' i tiddlers associati a questa etichetta saranno esclusi dalla lista;
''sortBy:'' indica l'ordinamento desiderato nella lista. I possibili ordinamenti sono per data di modifica dei tiddlers (modified) o per data di creazione (created);
''firstDay:'' specifica che la Timeline inizi da una ben precisa data espressa nel formato YYYYMMDD. Specificando, quindi, 20060701 la Timeline partirà dal giorno 1 luglio 2006;
''maxDays:'' specifica che la Timeline includa solo i tiddlers aggiornati o creati nel numero di giorni indicato. Ad esempio, indicando come parametro 7, la Timeline visualizzerà solo i tiddlers degli ultimi sette giorni;
''maxEntries:'' limita il numero totale di elementi listati nella Timeline.
Esempio:
{{{
<<timeline better:true sortBy:modified firstDay:20060512 maxEntries:30>>
}}}
In questo modo specificate che la Timeline inizi a visualizzare gli aggiornamenti a ''partire'' dal 12 maggio del 2006, con ordinamento per data di modifica, e che il numero massimo di voci dell'elenco sia 30.
Se desiderate, invece, visualizzare il calendario nella Timeline, dopo aver installato DatePlugin e CalendarPlugin, editate semplicemente il tiddler TabTimeline, sostituendo alla macro {{{<<timeline>>}}} presente in esso, la macro {{{<<calendar thismonth>>}}}.
Fatte le modifiche, salvate il vostro wiki e ricaricatelo. Se tutto è andato bene, la timeline del vostro wiki rifletterà le personalizzazioni effettuate.
TiddlyWiki offre la possibilità di includere all'interno di un tiddler codice HTML. Per fare ciò basta racchiudere il codice HTML tra i comandi {{{<html>}}} e {{{</html>}}}, come mostrato nel seguente esempio:
<html>
<a href="javascript:;" onclick="onClickTiddlerLink(event);" tiddlyLink="TiddlyWiki" style="background-color: yellow;">Link ad un tiddler da codice HTML</a>
</html>
Il codice HTML utilizzato per l'esempio è il seguente:
{{{
<html>
<div style="background-color: yellow;">
<a href="javascript:;" onclick="onClickTiddlerLink(event);" tiddlyLink="TiddlyWiki">Link ad un tiddler da codice HTML</a>
</div>
</html>
}}}
Un altro esempio di tiddler che include codice HTML è [[questo|Frappr TiddlyWiki Community]].
La possibilità di includere codice HTML in ~TiddlyWiki può essere utilizzato per realizzare alcune sofisticate funzionalità (come [[includere GMail e Outlook|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/d363303aff5868d0/056269d8409d121f?lnk=st&q=embedding+gmail&rnum=1#056269d8409d121f]] in ~TiddlyWiki). Naturalmente occorre fare molta attenzione nell'includere codice ~JavaScript in ~TiddlyWiki in quanto i risultati possono essere non predicibili
Includere un'immagine in TiddlyWiki produce questo risultato:
[img[Dog shakes hand with soldier ©blogjones|dogsoldier.jpg][http://www.blogjones.com/Images/dogsoldier.jpg]]
Di seguito c'è la descrizione del codice utilizzato per includere questa immagine nel wiki:
{{{
[img[Dog shakes hand with soldier|dogsoldier.jpg][http://www.blogjones.com/Images/dogsoldier.jpg]]
}}}
Tutte le possibili combinazioni del codice per includere immagini in ~TiddlyWiki sono le seguenti:
{{{
[img[titolo|nomefile]]
[img[nomefile]]
[img[titolo|nomefile][link]]
[img[nomefile][link]]
}}}
Quindi le immagini possono essere incluse mediante il loro nome oppure attraverso specifica dell'URL completo. E' sempre consigliato associare all'immagine un testo descrittivo che è visualizzato come tooltip, posizionando il puntatore del mouse sull'immagine; questo suggerimento è particolarmente utile nel caso l'immagine non sia disponibile. L'immagine, inoltre, può essere associata ad un indirizzo internet, come mostrato nel primo esempio, oppure ad un tiddler (provate a cliccare sull'immagine dei broccoli romani):
[img[Broccoli romani ©jermy|vegetable.jpg][BroccoliRomani]].
Alcuni esempi delle combinazioni possibili del comando per includere immagini sono i seguenti:
{{{
[img[Fractal vegetable|fractalveg.jpg]]
[img[This is shown as a tooltip|http://example.com/image.jpg]]
[img[http://example.com/image.jpg]]
[img[http://example.com/image.jpg][ExampleDotCom]]
}}}
[<img[A woody bit of Hampstead Heath ©jermy|forest.jpg][http://www.flickr.com/photos/jermy/8749660/]][>img[A field near Milton Keynes ©jermy|field.jpg][http://www.flickr.com/photos/jermy/8749285/]] E' possibile, inoltre, allineare le immagini a destra e a sinistra: la foresta è allineata a sinistra facendo precedere il comando img dal segno < in questo modo {{{[<img[}}}, mentre il prato è allineato a destra facendo precedere il comando img dal segno > in questo modo {{{[>img[}}}.
{{{
[<img[A woody bit of Hampstead Heath|forest.jpg]]
[>img[A field near Milton Keynes|field.jpg]]
}}}
@@clear(left):clear(right):display(block):Per il corretto posizionamento delle immagini è possibile utilizzare anche comandi CSS.@@
Alcune osservazioni relativamente alle immagini:
#se includete immagini nel vostro wiki, il wiki diventa meno ''portabile'', nel senso che dovete assicurarvi che il software riesca a prelevare le immagini dai link che avete indicato. Se il file di qualche immagine non è disponibile, ~TiddlyWiki non restituisce alcun errore: semplicemente l'immagine non viene visualizzata;
#non è considerato corretto includere nel vostro wiki link diretti ad immagini presenti su altri siti web personali. E' preferibile scaricare le immagini che vi occorrono sul vostro PC e poi farne l'upload sul server che ospita il vostro wiki o su un server gratuito di hosting immagini come, ad esempio, [[Flickr|http://www.flickr.com]]. Per questo motivo, in questo wiki tutte le immagini utilizzate sono trasferite in locale;
#utilizzate sempre immagini dichiarate gratuite, referenziando l'autore o il sito da cui sono state prelevate.
Se avete necessità di inserire dei commenti ''non visibili'' nei tiddlers, richiudete il testo desiderato tra {{{/%}}} e {{{%/}}}. Questa procedura è utile per non visualizzare bozze di testo o per annotare istruzioni complesse. Editate questo tiddler per vederne un esempio.
/%Testo non visibile fino a quando
il tiddler non viene editato%/
Avete necessità di inserire nel vostro Tiddler una linea di separazione? Digitate semplicemente quattro trattini da soli su una riga. L'effetto che otterrete è questo:
----
Ecco il codice estremamente semplice per ottenere questo risultato:
{{{
----
}}}
Un Plugin non è altro che un blocco di codice ~JavaScript che aggiunge una specifica funzionalità a ~TiddlyWiki. Installare un Plugin in ~TiddlyWiki è molto semplice. Individuato un Plugin che interessa (consultate il sito del.icio.us per una lista aggiornata di plugin [[del.icio.us/tag/tiddlywikiplugin|http://del.icio.us/tag/tiddlywikiplugin]]), basta:
#editare (o visualizzare) il tiddler del plugin interessato;
#copiarne ''l'intero contenuto'' con Ctrl+C;
#creare nel proprio ~TiddlyWiki un ''nuovo tiddler'' con il comando 'Nuovo';
#incollare il codice del Plugin nel tiddler vuoto con Ctrl+V;
#''etichettare il nuovo tiddler con l'etichetta speciale //systemConfig//'';
#salvare il nuovo tiddler, dopo avergli dato un nome (tipicamente il nome del Plugin che state installando);
#salvare il proprio ~TiddlyWiki con il comando 'Salva modifiche' (nota: assicuratevi di aver abilitato l'opzione 'Salva Backups' in modo da poter eventualmente ripristinare la precedente versione del vostro wiki nel caso il nuovo Plugin presentasse problemi di funzionamento;
#chiudere il vostro wiki e riaprirlo (o, semplicemente, fare il 'reload' della pagina nel browser).
Da questo momento in poi, il plugin sarà disponibile all'interno del proprio wiki. Per richiamare l'esecuzione del Plugin appena installato, basterà invocare semplicemente all'interno di un tiddler il nome del Plugin, così come viene fatto per una macro, ossia utilizzando il seguente codice:
{{{
<<nome del plugin>>
}}}
Allo stesso modo si possono installare in ~TiddlyWiki nuove [[Macro]]. Leggete su questo argomento anche [[Come installare macro]].
I plugin installati, ad esempio, in questo wiki sono:
<<listTags systemConfig>>
!Nota
Per avere questo elenco è stata utilizzata la macro listTags, che elenca tutti i tiddlers che hanno la stessa etichetta, specificando che si vuole avere l'elenco di tutti i tiddlers con l'etichetta systemConfig. Per approfondire l'uso di questa macro leggete [[Come elencare tutti i tiddlers che hanno la stessa etichetta]].
Per un elenco di siti di sviluppatori indipendenti nei quali trovare numerosi plugin di ~TiddlyWiki leggete il frammento [[Plugin]].
E' possibile creare nuove macro in ~TiddlyWiki scrivendo codice in ~JavaScript. Sebbene questo argomento non sia oggetto di questa guida, in questo tiddler vengono mostrati i passi da seguire per importare in ~TiddlyWiki macro sviluppate da altri. Come esempio di macro da importare, ~JeremyH, nel suo tutorial, prende in considerazione la macro smiley sviluppata da [[AlanH|http://www.personal.psu.edu/staff/a/c/ach12/tiddlywiki/smiley.htm]].
Questa macro, se invocata, produce il seguente risultato:
<<smiley :-D>>
Il codice che richiama l'esecuzione della macro e che riproduce lo smiley mostrato sopra, è il seguente:
{{{
<<smiley :-D>>
}}}
I passi da seguire per l'installazione di questa macro sono:
#Create un nuovo tiddler e chiamatelo, ad esempio, [[smiley]];
#Copiate il codice della macro smiley dal sito di ~AlanH ed incollatelo nel tiddler appena creato;
#Etichettate il tiddler con il tag systemConfig;
#Salvate le modifiche del vostro wiki e ricaricate la pagina. Se tutto è stato eseguito correttamente, la nuova macro [[smiley]] è disponibile nel vostro wiki.
Altri esempi d'uso della macro smiley sono:
{{{
<<smiley :-)>>
}}}
produce <<smiley :-)>>
{{{
<<smiley ;-)>>
}}}
produce <<smiley ;-)>>
{{{
<<smiley :-|>>
}}}
produce <<smiley :-|>>
{{{
<<smiley :-(>>
}}}
produce <<smiley :-(>>
Per creare un Tiddler che ''non'' ha una WikiParola come nome, basta racchiudere le parole o la frase desiderata fra [[due parentesi quadre]]. Provate ad editare questo tiddler per vedere un esempio. Dopo averlo chiuso, potete cliccare sul link mostrato per creare il nuovo Tiddler. Questa funzionalità di ~TiddlyWiki permette di usare come WikiParola parole scritte con set di caratteri che non contengono maiuscole e minuscole.
Nell'ambito delle possibilità di personalizzazione di ~TiddlyWiki, rientra la necessità di poter modificare, secondo le proprie esigenze, le dimensioni dei caratteri. Questo tipo di personalizzazione può sicuramente essere effettuato modificando i tiddlers speciali che definiscono le regole di presentazione di ~TiddlyWiki operando direttamente sul codice CSS presente in tali tiddlers; ovviamente, per poter effettuare tali modifiche, è necessario conoscere il linguaggio CSS. Per maggiori dettagli leggete [[Come modificare lo stile di TiddlyWiki]].
In questo frammento si descrive una soluzione più semplice che permette di modificare, a proprio piacimento, le dimensioni dei caratteri utilizzate per la visualizzazione del contenuto dei tiddlers (e ''non'', quindi, le dimensioni dei caratteri utilizzate per l'interfaccia di ~TiddlyWiki, il menù principale, la SideBar, ecc.): questa soluzione si basa sull'utilizzo del plugin FontSizePlugin, disponibile in corrispondenza di questo link [[lewcid.googlepages.com/lewcid.html#FontSizePlugin|http://lewcid.googlepages.com/lewcid.html#FontSizePlugin]]. Come al solito, per utilizzare le funzionalità di questo Plugin, occorre installarlo nel proprio wiki: se non sapete o ricordate come fare leggete [[Come installare Plugin]]. Una volta che questo Plugin è stato correttamente installato nel vostro wiki, avrete a disposizione la seguente macro:
{{{
<<fontSize>>
}}}
Inserendo tale macro nel tiddler MainMenu o nel tiddler SideBarOptions o dove preferite, otterrete il seguente risultato:
{{{<<fontSize>>}}} produce questo risultato: <<fontSize>>
{{{<<fontSize font-size: >>}}} produce questo risultato: <<fontSize font-size:>>
L'uso della macro è evidente:
*cliccando sul pulsante con il segno ''+'', le dimensioni dei caratteri vengono incrementate, ad ogni click, del 10% rispetto alla dimensione iniziale del font di caratteri;
*cliccando sul pulsante con il segno ''-'', le dimensioni dei caratteri vengono diminuite, ad ogni click, del 10% rispetto alla dimensione iniziale del font di caratteri;
*cliccando, infine, sul pulsante con il segno ''='', le dimensioni dei caratteri vengono riportate al valore iniziale.
In questo wiki, la macro {{{fontSize}}}, è stata inserita nel tiddler SideBarOptions. Sperimentate direttamente l'uso di questa semplice macro, trovando la posizione migliore, nel vostro wiki, dove inserirla. Leggete, per completezza, anche la documentazione orginale del Plugin FontSizePlugin.
//''Nota'': la versione di FontSizePlugin di questo wiki è stata personalizzata per fare in modo che i messaggi di suggerimento, visualizzati posizionando il cursore del mouse sui pulsanti della macro, siano espressi in lingua italiana.//
Se volete modificare lo stile del vostro ~TiddlyWiki (i colori dei link, il colore del menù, le dimensioni dei caratteri, ecc.), dovete necessariamente aggiungere e/o modificare il codice CSS (Cascading Style Sheet) presente in alcuni tiddler speciali (ShadowTiddlers). Il linguaggio CSS, che non è argomento di questo tutorial, è illustrato su molti siti internet. Per chi volesse approfondire la conoscenza di questo linguaggio, si citano i seguenti siti web:
* [[www.w3schools.com/css/|http://www.w3schools.com/css/]] (inglese)
* [[www.risorse.net/css/|http://www.risorse.net/css/]] (italiano)
* [[www.html.it/css/|http://www.html.it/css/]] (italiano)
Con le ultime versioni di ~TiddlyWiki, per modificare lo stile e la struttura delle pagine dovete modificare il contenuto di pochi ShadowTiddlers. I principali frammenti da considerare sono i seguenti:
*PageTemplate -- Contiene la struttura generale della pagina di ~TiddlyWiki
*EditTemplate -- Contiene la struttura della finestra dell'editor dei tiddler
*ViewTemplate -- Contiene la struttura della finestra di visualizzazione dei tiddler
*StyleSheetColors -- Contiene il CSS per i colori utilizzati da ~TiddlyWiki
*StyleSheetLayout -- Contiene il CSS per il layout di ~TiddlyWiki
*StyleSheetPrint -- Contiene il CSS utilizzato per la stampa da ~TiddlyWiki
!Esempio
Supponiamo, ad esempio, che vogliate far comparire la lista dei tag sotto il tiddler invece che farla comparire nella finestra floating a destra. I passi da seguire per effettuare questa modifica sono:
1. Aprite il tiddler "StyleSheetLayout"
2. Editate questo tiddler cercando la linea marcata con "{{{.tagged {}}}" nella sezione ''tiddler dispaly rules''
3. Cancellate il codice "{{{float:right;}}}" da questa classe CSS
4. Aggiungete il seguente codice al tiddler:
{{{
.tagged li, .tagged ul {
display:inline;
}
}}}
5. Cliccate su "Salva" e chiudete il tiddler StyleSheetLayout
6. Aprite ed editate il tiddler "ViewTemplate"
7. Spostate la linea di codice marcata con "{{{<div class='tagged' macro='tags'></div>}}}" alla fine della lista
8. Cliccate su "Salva" e chudete il tiddler ViewTemplate
9. [[Salvate le vostre modifiche|Come salvare le proprie modifiche]] e ricaricate la pagina. Se non ci sono errori, la lista dei tag associati al tiddler dovrebbe adesso comparire sotto il tiddler su una singola linea.
Altra possibilità che si può seguire per modificare lo stile del vostro ~TiddlyWiki è quella di utilizzare risorse gia disponibili in rete che definiscono temi grafici e template di pagina. Ad esempio questo wiki utilizza BigThemePack (una collezione di temi per ~TiddlyWiki assemblata da [[Simon Baird|http://simonbaird.com/mptw/#BigThemePack]]), un Plugin che utilizzato in combinazione con SelectThemePlugin vi permette di scegliere lo stile del vostro wiki tra quelli disponibili nella collezione. Per verificare la funzionalità di questi Plugin, utilizzate nella SideBar il comando //Scegli lo stile di questo wiki//.
Cosa succede se vogliamo usare nel nostro sito Wiki una parola fatta da più parole attaccate tra loro, con iniziali maiuscole, ossia una WikiParola, e ''non'' voler però creare un Tiddler, come ad esempio, utilizzare la parola ~JavaScript o scrivere ~JamesBond? Semplice: basta far precedere la parola in questione dal segno di tilde ~.
{{{
~JavaScript ~JamesBond
}}}
Suggerimento: per ottenere il segno di tilde, basta premere Blocco Num (in modo da abilitare il tastierino numerico della tastiera del vostro pc) e tenendo premuto il tasto Alt, digitare 126 sul tastierino numerico.
Se state utilizzando Firefox o Internet Explorer, potete salvare le vostre modifiche nel seguente modo:
* se state utilizzando Internet Explorer con Windows XP, potreste incorrere nei [[problemi del service pack2|http://www.tiddlywiki.com/#ServicePack2Problems]].
# cliccate con il tasto destro del mouse su [[questo collegamento|#]] e selezionate 'Salva collegamento come...' o 'Salva destinazione come...'. ''Attenzione'': in questo modo salvate una copia completa di questa guida. Se volete salvare, invece, un modello vuoto di ~TiddlyWiki aprite la sezione [[Download]];
# scegliete dove salvare il file e come volete chiamarlo (conservate però l'estensione .HTML del file);
# aprite il file che avete appena salvato, nel vostro browser;
# cliccate sul link ''Opzioni'' nella SideBar e digitate il vostro nome scritto nella forma di una WikiParola;
# modificate, create e cancellate i tiddler che vi interessano;
# modificate gli SpecialTiddlers per cambiare il SiteTitle, il SiteSubtitle, il SiteUrl ed il MainMenu;
# cliccate sul link ''Salva modifiche'' nella SideBar per salvare le vostre modifiche (nota: il browser Firefox, a seconda della configurazione, vi potrà presentare tre diversi messaggi di avvertimenti di sicurezza. Cliccate sempre su OK);
# TiddlyWiki, se l'opzione //''~SalvaBackups''// è selezionata, creerà automaticamente una copia di backup del file esistente sostituendolo poi con la nuova versione.
Se avete personalizzato un vostro wiki e avete necessità di salvarne una copia ''priva'' dei contenuti (ossia dei frammenti che avete scritto), dovete semplicemente selezionare la corrispondente opzione presente nelle [[OpzioniAvanzate]]. In questo modo, nel momento in cui salvate il vostro wiki, viene salvato anche un ''modello vuoto'' del vostro wiki chiamato ''empty.html''.
Se nel vostro Wiki avete la necessità di segnalare una citazione fatta da qualcuno, potete adoperare i blocchi di citazione. Per utilizzarli, sulla riga che precede il testo della citazione, aggiungete tre segni di minore {{{<<<}}}. Terminate la citazione aggiungendo alla fine ancora tre segni di minore, come nel seguente esempio:
~JeremyRuston ha detto:
<<<
A TiddlyWiki is like a blog because it's divided up into neat little chunks, but it encourages you to read it by hyperlinking rather than sequentially: if you like, a non-linear blog analogue that binds the individual microcontent items into a cohesive whole.
<<<
Questo è il codice da utilizzare per creare blocchi di citazioni:
{{{
<<<
Questo è il testo citato.
<<<
}}}
Allo stesso modo delle liste puntate e numerate, anche nei blocchi di citazione si posono realizzare livelli multipli, così come mostrato nel seguente esempio.
>livello 1
>livello 1
>>livello 2
>>livello 2
>>>livello 3
>>>livello 3
>>livello 2
>livello 1
Editate questo tiddler per vedere come può essere realizzato questo effetto.
Nei testi scritti con font monospaziati o non proporzionati, tutti i caratteri hanno la stessa larghezza. Così, mentre con un font normale il carattere i è più stretto del carattere W, nel {{{testo monospaziato, i e W hanno la stessa larghezza}}}.
Inoltre, la<<tag Formattazione>> e le [[macro|Macro]] non vengono eseguiti se inseriti come caratteri monospaziati. Come, per esempio, la macro today:
{{{
<<today>>
}}}
Per inserire del testo con caratteri monospaziati, basta racchiuderlo tra tre coppie di parentesi graffe:
{{{
{{{Questo è un testo scritto con caratteri monospaziati}}}
}}}
La comunità degli utilizzatori di ~TiddlyWiki è in rapida e continua crescita (//questa è una mia affermazione//). [[Jeremy Ruston|http://www.tiddlywiki.com/#JeremyRuston]] afferma che ~TiddlyWiki è il risultato dello sforzo di dozzine di persone nel mondo che generosamente contribuiscono con il loro tempo e con le loro conoscenze.
Il punto di riferimento per la comunità di sviluppatori è costituito dal sito http://www.tiddlywiki.org Questo sito ospita la copia master del codice sorgente di ~TiddlyWiki, ed un sistema per tenere traccia dei bug e delle richieste di miglioramento. Eventuali [[Contributi]] sono molto ben accettati.
Esistono anche due gruppi di discussione Google (//in lingua inglese//) dedicati a ~TiddlyWiki. Questi sono sicuramente i posti migliori dove porre domande riguardo ~TiddlyWiki e per entrare in contatto con altri utilizzatori di questo software:
* Il gruppo ~TiddlyWiki per le discussioni di carattere generale, segnalazioni di bugs e annunci http://groups-beta.google.com/group/TiddlyWiki
* Il gruppo ~TiddlyWikiDev per discussioni riguardanti lo sviluppo di ~TiddlyWiki http://groups-beta.google.com/group/TiddlyWikiDev
Jeremy Ruston interagisce ed interviene normalmente su questi gruppi.
Cliccate anche su [[Frappr TiddlyWiki Community]].
Questa opzione permette di abilitare la ricerca sensibile alle maiuscole e minuscole del testo o della parola.
~TiddlyWiki è supportato da una entusiastica [[Comunità]] di persone nel mondo che contribuiscono allo sviluppo e al miglioramento del software, ma c'è sempre molto da fare per cui qualsiasi aiuto è molto ben accettato. Ci sono molti modi con i quali si può offrire aiuto:
* Testando e [[segnalando bugs|http://trac.tiddlywiki.org/tiddlywiki/wiki/ReportingBugs]] del codice core. Reports chiari e facilmente riproducibili degli errori rilevati sono incredibilmente utili ed aiutano il team di sviluppo a migliorare la qualità di ~TiddlyWiki
* [[Contribuendo allo sviluppo del codice|http://trac.tiddlywiki.org/tiddlywiki/wiki/ContributingCode]]
* [[Realizzando traduzioni|http://trac.tiddlywiki.org/tiddlywiki/wiki/Translations]]
* Partecipando allo sviluppo della documentazione che richiede pianificazione, scrittura ed editing:
** La documentazione di riferimento ufficiale di ~TiddlyWiki.com su http://doc.tiddlywiki.org/
** Le guide utente su http://tiddlywikiguides.org/
Attività ancora da realizzare per completare questa guida:
--Descrivere i comandi della toolbar--
--Descrivere la sidebar ed il concetto di permaview - tradotto nell'interfaccia italiana come 'indirizzo di pagina'--
--Completare la descrizione di tutte le macro (tagging, tabmacro, toolbar macro, gradient macro, sparklines)--
--Descrivere il tiddler DateFormatString--
--Descrivere le funzionalità delll'inline HTML --
--Descrivere le scorciatoie da tastiera--
--Descrivere le nuove funzionalità dell'inclusione immagini in ~TiddlyWiki--
--Descrivere l'uso di ~TiddlyWiki per realizzare un sito web personale--
Aggiornare il tiddler [[Come installare Plugin]] con l'elenco dei siti di riferimento
--Descrivere la nuova funzionalità di generazione di un archivio RSS--
--Tradurre ed integrare ~UsingThisSite, ~ReadingExperience, ~ToolbarButtons--
--Scrivere il tiddler [[Come elencare tutti i tiddlers presenti nel proprio wiki]]--
--Aggiungere la sezione download con le distribuzioni standard--
--Tradurre il tiddler StartupParameters--
--Aggiungere in [[Ulteriori come fare]] le istruzioni per scegliere lo stile di visualizzazione del proprio wiki--
Scrivere le istruzioni dei nuovi plugin installati CalendarPlugin, DatePlugin, DividedListsPlugin e SelectThemePlugin
Installare e documentare i plugin necessari per scrivere formule matematiche in ~TiddlyWiki e rappresentarle graficamente (http://math.chapman.edu/~jipsen/asciencepad/asciencepad.html) (http://luceatlux.net/wikimath/#Requirements)
--Tradurre il tiddler ToolbarMacro--
--Tradurre il tiddler ShadowTiddlers--
--Riscrivere il tiddler [[Come modificare lo stile di TiddlyWiki]] facendo riferimento ai ShadowTiddlers PageTemplate, EditTemplate, ViewTemplate, StyleSheetColors, StyleSheetLayout, StyleSheetPrint--
--Scrivere e collegare il tiddler [[Come installare macro]] alla sezione [[Ulteriori come fare]]--
--Installare la macro BetterTimelineMacro da http://lewcid.googlepages.com/lewcid.html#BetterTimelineMacro e riscrivere il tiddler [[Come gestire la Timeline]] con le nuove istruzioni--
--Scrivere un nuovo tiddler nella sezione [[Ulteriori come fare]] relativo alla soluzione per la gestione delle dimensioni dei caratteri introdotta con FontSizePlugin--
--Aggiornare il contenuto del tiddler SideBar per la nuova funzionalità di gestione delle dimensioni dei caratteri dei frammenti aperti--
Aggionare il tiddler [[Comunità]] con i nuovi siti di aiuto all'uso di TiddlyWiki
--Documentare l'utilizzo di TiddlyWiki per la realizzazioni di presentazioni--
Descrivere le nuove funzionalità di [[GestionePlugins]] e [[ImportaTiddlers]]. Per quest'ultimo realizzare degli screenshots
Tradurre in italiano i comandi di SelectThemePlugin
--Descrivere l'utilizzo di TiddlyWiki per la realizzazione di slide con l'uso di SlideShowPlugin http://www.math.ist.utl.pt/~psoares/addons.html#SlideShowPlugin--
Descrivere l'utilizzo di TiddlyWiki per scrivere e visualizzare espressioni matematiche http://bob.mcelrath.org/tiddlyjsmath.html
--Scrivere il frammento [[I Tiddler]] di [[Una guida visuale a TiddlyWiki]]--
Tradurre [[Host your TiddlyWiki online]]
--Tradurre [[Version 2.2]] da http://giffmex.org/twfortherestofus.html--
Descrivere le funzioni di sincronizzazione di TiddlyWiki
Diverse [[Macro]] compresa la macro //today// accettano, come argomento opzionale, la stringa ~DateFormatString. Questa stringa può essere una combinazione di testo ordinario, con caratteri speciali che sono sostituiti da parti della data. La stringa può essere formata da una combinazione dei seguenti elementi:
* DDD - giorno della settimana visualizzato per intero (tipo "Lunedì"). ''Esempio'': oggi è <<today DDD>>;
* DD - giorno del mese, 0DD - aggiunge uno zero iniziale. ''Esempio'': oggi è il <<today DD>>° giorno del mese;
* MMM - mese visualizzato per intero (tipo, "Aprile"). ''Esempio'': siamo nel mese di <<today MMM>>;
* MM - numero del mese, 0MM - aggiunge uno zero iniziale. ''Esempio'': siamo nel <<today MM>>° mese dell'anno;
* YYYY - anno a quattro cifre, YY - anno a due cifre. ''Esempio'': siamo nell'anno <<today YYYY>>;
* hh - ore
* mm - minuti
* ss - secondi ''Esempio'': sono le ore <<today hh>>, <<today mm>> minuti e <<today ss>> secondi.
/***
|Name|DatePlugin|
|Source|http://www.TiddlyTools.com/#DatePlugin|
|Version|2.4.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|formatted dates plus popup menu with 'journal' link, changes and (optional) reminders|
There are quite a few calendar generators, reminders, to-do lists, 'dated tiddlers' journals, blog-makers and GTD-like schedule managers that have been built around TW. While they all have different purposes, and vary in format, interaction, and style, in one way or another each of these plugins displays and/or uses date-based information to make finding, accessing and managing relevant tiddlers easier. This plugin provides a general approach to embedding dates and date-based links/menus within tiddler content.
This plugin display formatted dates, for the specified year, month, day using number values or mathematical expressions such as (Y+1) or (D+30). Optionally, you can create a link from the formatted output to a 'dated tiddler' for quick blogging or create a popup menu that includes the dated tiddler link plus links to tiddlers that were created/changed on that date, or are tagged with that date, as well as links to any pending reminders for the coming 31 days (if the RemindersPlugin is installed). This plugin also provides a public API for easily incorporating formatted date output (with or without the links/popups) into other plugins, such as calendar generators, etc.
!!!!!Usage
<<<
When installed, this plugin defines a macro: {{{<<date [mode] [date] [format] [linkformat]>>}}}. All of the macro parameters are optional and, in it's simplest form, {{{<<date>>}}}, it is equivalent to the ~TiddlyWiki core macro, {{{<<today>>}}}.
However, where {{{<<today>>}}} simply inserts the current date/time in a predefined format (or custom format, using {{{<<today [format]>>}}}), the {{{<<date>>}}} macro's parameters take it much further than that:
* [mode] is either ''display'', ''link'' or ''popup''. If omitted, it defaults to ''display''. This param let's you select between simply displaying a formatted date, or creating a link to a specific 'date titled' tiddler or a popup menu containing a dated tiddler link, plus links to changes and reminders.
* [date] lets you enter ANY date (not just today) as ''year, month, and day values or simple mathematical expressions'' using pre-defined variables, Y, M, and D for the current year, month and day, repectively. You can display the modification date of the current tiddler by using the keyword: ''tiddler'' in place of the year, month and day parameters. Use ''tiddler://name-of-tiddler//'' to display the modification date of a specific tiddler. You can also use keywords ''today'' or ''filedate'' to refer to these //dynamically changing// date/time values.
* [format] and [linkformat] uses standard ~TiddlyWiki date formatting syntax. The default is "YYYY.0MM.0DD"
>^^''DDD'' - day of week in full (eg, "Monday"), ''DD'' - day of month, ''0DD'' - adds leading zero^^
>^^''MMM'' - month in full (eg, "July"), ''MM'' - month number, ''0MM'' - adds leading zero^^
>^^''YYYY'' - full year, ''YY'' - two digit year, ''hh'' - hours, ''mm'' - minutes, ''ss'' - seconds^^
>^^//note: use of hh, mm or ss format codes is only supported with ''tiddler'', ''today'' or ''filedate'' values//^^
* [linkformat] - specify an alternative date format so that the title of a 'dated tiddler' link can have a format that differs from the date's displayed format
In addition to the macro syntax, DatePlugin also provides a public javascript API so that other plugins that work with dates (such as calendar generators, etc.) can quickly incorporate date formatted links or popups into their output:
''{{{showDate(place, date, mode, format, linkformat, autostyle, weekend)}}}''
Note that in addition to the parameters provided by the macro interface, the javascript API also supports two optional true/false parameters:
* [autostyle] - when true, the font/background styles of formatted dates are automatically adjusted to show the date's status: 'today' is boxed, 'changes' are bold, 'reminders' are underlined, while weekends and holidays (as well as changes and reminders) can each have a different background color to make them more visibly distinct from each other.
* [weekend] - true indicates a weekend, false indicates a weekday. When this parameter is omitted, the plugin uses internal defaults to automatically determine when a given date falls on a weekend.
<<<
!!!!!Examples
<<<
The current date: <<date>>
The current time: <<date today "0hh:0mm:0ss">>
Today's blog: <<date link today "DDD, MMM DDth, YYYY">>
Recent blogs/changes/reminders: <<date popup Y M D-1 "yesterday">> <<date popup today "today">> <<date popup Y M D+1 "tomorrow">>
The first day of next month will be a <<date Y M+1 1 "DDD">>
This tiddler (DatePlugin) was last updated on: <<date tiddler "DDD, MMM DDth, YYYY">>
The SiteUrl was last updated on: <<date tiddler:SiteUrl "DDD, MMM DDth, YYYY">>
This document was last saved on <<date filedate "DDD, MMM DDth, YYYY at 0hh:0mm:0ss">>
<<date 2006 07 24 "MMM DDth, YYYY">> will be a <<date 2006 07 24 "DDD">>
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''DatePlugin'' (tagged with <<tag systemConfig>>)
<<<
!!!!!Revision History
<<<
''2007.11.21 [2.4.0]'' added hasTagged() and addTaggedToPopup() to list any tiddlers that has been tagged using the title of the dated journal tiddler asa tag value (i.e., the tiddlers that will be listed in the standard "tagging" display when viewing the journal tiddler itself). Based on a request from Coby.
''2007.06.20 [2.3.1]'' in onClickDatePopup(), use Popup.show() instead of deprecated ScrollToTiddlerPopup(). Fixes fatal error that prevents popups from being properly displayed
|please see [[DatePluginHistory]] for additional revision details|
''2005.10.30 [0.9.0]'' pre-release
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].
<<<
!!!!!Code
***/
//{{{
version.extensions.date = {major: 2, minor: 4, revision: 0, date: new Date(2007,11,21)};
//}}}
//{{{
config.macros.date = {
format: "0DD.0MM.YYYY", // default date display format
linkformat: "0DD.0MM.YYYY", // 'dated tiddler' link format
linkedbg: "#babb1e", // "babble"
todaybg: "#ffab1e", // "fable"
weekendbg: "#c0c0c0", // "cocoa"
holidaybg: "#ffaace", // "face"
createdbg: "#bbeeff", // "beef"
modifiedsbg: "#bbeeff", // "beef"
remindersbg: "#c0ffee", // "coffee"
holidays: [ "01/01", "07/04", "07/24", "11/24" ], // NewYearsDay, IndependenceDay(US), Eric's Birthday (hooray!), Thanksgiving(US)
weekend: [ 1,0,0,0,0,0,1 ] // [ day index values: sun=0, mon=1, tue=2, wed=3, thu=4, fri=5, sat=6 ]
};
//}}}
//{{{
config.macros.date.handler = function(place,macroName,params)
{
// do we want to see a link, a popup, or just a formatted date?
var mode="display";
if (params[0]=="display") { mode=params[0]; params.shift(); }
if (params[0]=="popup") { mode=params[0]; params.shift(); }
if (params[0]=="link") { mode=params[0]; params.shift(); }
// get the date
var now = new Date();
var date = now;
if (!params[0] || params[0]=="today")
{ params.shift(); }
else if (params[0]=="filedate")
{ date=new Date(document.lastModified); params.shift(); }
else if (params[0]=="tiddler")
{ date=store.getTiddler(story.findContainingTiddler(place).id.substr(7)).modified; params.shift(); }
else if (params[0].substr(0,8)=="tiddler:")
{ var t; if ((t=store.getTiddler(params[0].substr(8)))) date=t.modified; params.shift(); }
else {
var y = eval(params.shift().replace(/Y/ig,(now.getYear()<1900)?now.getYear()+1900:now.getYear()));
var m = eval(params.shift().replace(/M/ig,now.getMonth()+1));
var d = eval(params.shift().replace(/D/ig,now.getDate()+0));
date = new Date(y,m-1,d);
}
// date format with optional custom override
var format=this.format; if (params[0]) format=params.shift();
var linkformat=this.linkformat; if (params[0]) linkformat=params.shift();
showDate(place,date,mode,format,linkformat);
}
//}}}
//{{{
window.showDate=showDate;
function showDate(place,date,mode,format,linkformat,autostyle,weekend)
{
if (!mode) mode="display";
if (!format) format=config.macros.date.format;
if (!linkformat) linkformat=config.macros.date.linkformat;
if (!autostyle) autostyle=false;
// format the date output
var title = date.formatString(format);
var linkto = date.formatString(linkformat);
// just show the formatted output
if (mode=="display") { place.appendChild(document.createTextNode(title)); return; }
// link to a 'dated tiddler'
var link = createTiddlyLink(place, linkto, false);
link.appendChild(document.createTextNode(title));
link.title = linkto;
link.date = date;
link.format = format;
link.linkformat = linkformat;
// if using a popup menu, replace click handler for dated tiddler link
// with handler for popup and make link text non-italic (i.e., an 'existing link' look)
if (mode=="popup") {
link.onclick = onClickDatePopup;
link.style.fontStyle="normal";
}
// format the popup link to show what kind of info it contains (for use with calendar generators)
if (!autostyle) return;
if (hasModifieds(date)||hasCreateds(date)||hasTagged(date,linkformat))
{ link.style.fontStyle="normal"; link.style.fontWeight="bold"; }
if (hasReminders(date))
{ link.style.textDecoration="underline"; }
if(isToday(date))
{ link.style.border="1px solid black"; }
if( (weekend!=undefined?weekend:isWeekend(date)) && (config.macros.date.weekendbg!="") )
{ place.style.background = config.macros.date.weekendbg; }
if(isHoliday(date)&&(config.macros.date.holidaybg!=""))
{ place.style.background = config.macros.date.holidaybg; }
if (hasCreateds(date)&&(config.macros.date.createdbg!=""))
{ place.style.background = config.macros.date.createdbg; }
if (hasModifieds(date)&&(config.macros.date.modifiedsbg!=""))
{ place.style.background = config.macros.date.modifiedsbg; }
if ((hasTagged(date,linkformat)||store.tiddlerExists(linkto))&&(config.macros.date.linkedbg!=""))
{ place.style.background = config.macros.date.linkedbg; }
if (hasReminders(date)&&(config.macros.date.remindersbg!=""))
{ place.style.background = config.macros.date.remindersbg; }
if(isToday(date)&&(config.macros.date.todaybg!=""))
{ place.style.background = config.macros.date.todaybg; }
}
//}}}
//{{{
function isToday(date) // returns true if date is today
{ var now=new Date(); return ((now-date>=0) && (now-date<86400000)); }
function isWeekend(date) // returns true if date is a weekend
{ return (config.macros.date.weekend[date.getDay()]); }
function isHoliday(date) // returns true if date is a holiday
{
var longHoliday = date.formatString("0MM/0DD/YYYY");
var shortHoliday = date.formatString("0MM/0DD");
for(var i = 0; i < config.macros.date.holidays.length; i++) {
var holiday=config.macros.date.holidays[i];
if (holiday==longHoliday||holiday==shortHoliday) return true;
}
return false;
}
//}}}
//{{{
// Event handler for clicking on a day popup
function onClickDatePopup(e)
{
if (!e) var e = window.event;
var theTarget = resolveTarget(e);
var popup = Popup.create(this);
if(popup) {
// always show dated tiddler link (or just date, if readOnly) at the top...
if (!readOnly || store.tiddlerExists(this.date.formatString(this.linkformat)))
createTiddlyLink(popup,this.date.formatString(this.linkformat),true);
else
createTiddlyText(popup,this.date.formatString(this.linkformat));
addCreatedsToPopup(popup,this.date,this.format);
addModifiedsToPopup(popup,this.date,this.format);
addTaggedToPopup(popup,this.date,this.linkformat);
addRemindersToPopup(popup,this.date,this.linkformat);
}
Popup.show(popup,false);
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return(false);
}
//}}}
//{{{
function indexCreateds() // build list of tiddlers, hash indexed by creation date
{
var createds= { };
var tiddlers = store.getTiddlers("title","excludeLists");
for (var t = 0; t < tiddlers.length; t++) {
var date = tiddlers[t].created.formatString("YYYY0MM0DD")
if (!createds[date])
createds[date]=new Array();
createds[date].push(tiddlers[t].title);
}
return createds;
}
function hasCreateds(date) // returns true if date has created tiddlers
{
if (!config.macros.date.createds) config.macros.date.createds=indexCreateds();
return (config.macros.date.createds[date.formatString("YYYY0MM0DD")]!=undefined);
}
function addCreatedsToPopup(popup,when,format)
{
var force=(store.isDirty() && when.formatString("YYYY0MM0DD")==new Date().formatString("YYYY0MM0DD"));
if (force || !config.macros.date.createds) config.macros.date.createds=indexCreateds();
var indent=String.fromCharCode(160)+String.fromCharCode(160);
var createds = config.macros.date.createds[when.formatString("YYYY0MM0DD")];
if (createds) {
createds.sort();
var e=createTiddlyElement(popup,"div",null,null,"nuovi:");
for(var t=0; t<createds.length; t++) {
var link=createTiddlyLink(popup,createds[t],false);
link.appendChild(document.createTextNode(indent+createds[t]));
createTiddlyElement(popup,"br",null,null,null);
}
}
}
//}}}
//{{{
function indexModifieds() // build list of tiddlers, hash indexed by modification date
{
var modifieds= { };
var tiddlers = store.getTiddlers("title","excludeLists");
for (var t = 0; t < tiddlers.length; t++) {
var date = tiddlers[t].modified.formatString("YYYY0MM0DD")
if (!modifieds[date])
modifieds[date]=new Array();
modifieds[date].push(tiddlers[t].title);
}
return modifieds;
}
function hasModifieds(date) // returns true if date has modified tiddlers
{
if (!config.macros.date.modifieds) config.macros.date.modifieds = indexModifieds();
return (config.macros.date.modifieds[date.formatString("YYYY0MM0DD")]!=undefined);
}
function addModifiedsToPopup(popup,when,format)
{
var force=(store.isDirty() && when.formatString("YYYY0MM0DD")==new Date().formatString("YYYY0MM0DD"));
if (force || !config.macros.date.modifieds) config.macros.date.modifieds=indexModifieds();
var indent=String.fromCharCode(160)+String.fromCharCode(160);
var mods = config.macros.date.modifieds[when.formatString("YYYY0MM0DD")];
if (mods) {
mods.sort();
var e=createTiddlyElement(popup,"div",null,null,"modificati:");
for(var t=0; t<mods.length; t++) {
var link=createTiddlyLink(popup,mods[t],false);
link.appendChild(document.createTextNode(indent+mods[t]));
createTiddlyElement(popup,"br",null,null,null);
}
}
}
//}}}
//{{{
function hasTagged(date,format) // returns true if date is tagging other tiddlers
{
return store.getTaggedTiddlers(date.formatString(format)).length>0;
}
function addTaggedToPopup(popup,when,format)
{
var indent=String.fromCharCode(160)+String.fromCharCode(160);
var tagged=store.getTaggedTiddlers(when.formatString(format));
if (tagged.length) var e=createTiddlyElement(popup,"div",null,null,"tagged:");
for(var t=0; t<tagged.length; t++) {
var link=createTiddlyLink(popup,tagged[t].title,false);
link.appendChild(document.createTextNode(indent+tagged[t].title));
createTiddlyElement(popup,"br",null,null,null);
}
}
//}}}
//{{{
function indexReminders(date,leadtime) // build list of tiddlers with reminders, hash indexed by reminder date
{
var reminders = { };
if(window.findTiddlersWithReminders!=undefined) { // reminder plugin is installed
// DEBUG var starttime=new Date();
var t = findTiddlersWithReminders(date, [0,leadtime], null, null, 1);
for(var i=0; i<t.length; i++) reminders[t[i].matchedDate]=true;
// DEBUG var out="Found "+t.length+" reminders in "+((new Date())-starttime+1)+"ms\n";
// DEBUG out+="startdate: "+date.toLocaleDateString()+"\n"+"leadtime: "+leadtime+" days\n\n";
// DEBUG for(var i=0; i<t.length; i++) { out+=t[i].matchedDate.toLocaleDateString()+" "+t[i].params.title+"\n"; }
// DEBUG alert(out);
}
return reminders;
}
function hasReminders(date) // returns true if date has reminders
{
if (window.reminderCacheForCalendar)
return window.reminderCacheForCalendar[date]; // use calendar cache
if (!config.macros.date.reminders)
config.macros.date.reminders = indexReminders(date,90); // create a 90-day leadtime reminder cache
return (config.macros.date.reminders[date]);
}
function addRemindersToPopup(popup,when,format)
{
if(window.findTiddlersWithReminders==undefined) return; // reminder plugin not installed
var indent = String.fromCharCode(160)+String.fromCharCode(160);
var reminders=findTiddlersWithReminders(when, [0,31],null,null,1);
var e=createTiddlyElement(popup,"div",null,null,"reminders:"+(!reminders.length?" none":""));
for(var t=0; t<reminders.length; t++) {
link = createTiddlyLink(popup,reminders[t].tiddler,false);
var diff=reminders[t].diff;
diff=(diff<1)?"Today":((diff==1)?"Tomorrow":diff+" days");
var txt=(reminders[t].params["title"])?reminders[t].params["title"]:reminders[t].tiddler;
link.appendChild(document.createTextNode(indent+diff+" - "+txt));
createTiddlyElement(popup,"br",null,null,null);
}
if (readOnly) return; // omit "new reminder..." link
var link = createTiddlyLink(popup,indent+"new reminder...",true); createTiddlyElement(popup,"br");
var title = when.formatString(format);
link.title="add a reminder to '"+title+"'";
link.onclick = function() {
// show tiddler editor
story.displayTiddler(null, title, 2, null, null, false, false);
// find body 'textarea'
var c =document.getElementById("tiddler" + title).getElementsByTagName("*");
for (var i=0; i<c.length; i++) if ((c[i].tagName.toLowerCase()=="textarea") && (c[i].getAttribute("edit")=="text")) break;
// append reminder macro to tiddler content
if (i<c.length) {
if (store.tiddlerExists(title)) c[i].value+="\n"; else c[i].value="";
c[i].value += "<<reminder";
c[i].value += " day:"+when.getDate();
c[i].value += " month:"+(when.getMonth()+1);
c[i].value += " year:"+when.getFullYear();
c[i].value += ' title:"Enter a title" >>';
}
};
}
//}}}
/***
|''Nome:''|~SettingsPlugin|
|''Versione:''|1.0.1 (2006-05-03)|
|''Tipo:''|plugin|
|''Origine:''|http://tiddlywiki.abego-software.de/#SettingsPlugin|
|''Autore:''|Udo Borkowski (ub [at] abego-software [dot] de)|
|''Documentazione:''|[[Documentazione SettingsPlugin]]|
|''Licenza:''|[[BSD open source license (abego Software)]]|
|''~TiddlyWiki:''|Versione 2.0.7 o successive|
|''Browser:''|Firefox 1.5 o successivi|
!Descrizione
Per default le opzioni che potete modificare nel pannello [[Opzioni]] e OpzioniAvanzate sono condivise da tutti i ~TiddlyWiki dello stesso sito.
Questo significa anche che tutte le vostre versioni locali di ~TiddlyWiki condividono lo stesso settaggio delle opzioni. Questa situazione può risultare fastidiosa, costringendovi a definire ogni volta una diversa configurazione delle opzioni, se lavorate frequentemente su più copie locali di ~TiddlyWiki.
Il plugin SettingsPlugin vi consente di decidere, per ogni impostazione, se questa deve essere condivisa da tutte le vostre copie locali di ~TiddlyWiki oppure se deve essere //privata// ad un dato sito wiki. Inoltre il plugin vi consente di definire ''tutte'' le opzioni come private per un dato ~TiddlyWiki.
''Come usare le impostazioni private''
Per default tutte le impostazioni sono ''condivise'', ossia ~TiddlyWiki funziona nel modo standard. Per abilitare la gestione privata delle impostazioni, dovete selezionare il box ''Utilizza opzioni private'' nelle OpzioniAvanzate del vostro wiki.
Attivata la gestione privata delle opzioni, si hanno due possibili scelte:
* ''Tutte'' le variazioni alle impostazioni sono mantenute "private", ossia non influenzano altri ~TiddlyWiki locali. In questo caso selezionate il box ''Rendi tutte le opzioni private'';
* Solo alcune opzioni vengono rese private. In questo caso potete specificare quali opzioni rendere private cliccando su [[Visualizza le impostazioni]]. Dal relativo tiddler potete specificare quale opzione rendere privata; inoltre con un singolo click potete rendere tutte le opzioni private o condivise.
Con questo plugin potete decidere quali impostazioni rendere private o condivise per ciascun ~TiddlyWiki su cui lavorate.
Potete anche temporaneamente disabilitare la gestione privata delle opzioni. In questo caso, le vostre opzioni private non vengono più utilizzate. Quando riabilitate la gestione privata delle opzioni, tutte le vostre impostazioni e scelte effettuate vengono automaticamente ripristinate.
''Come vengono memorizzate le impostazioni''
Nel funzionamento originario di ~TiddlyWiki le impostazioni sono memorizzate in "cookies" all'interno del browser.
Le impostazioni private sono invece memorizzate in un tiddler del vostro ~TiddlyWiki. Dovete pertanto assicurarvi che il vostro ~TiddlyWiki possa essere salvato se intendete mantenere le impostazioni private.
Poiché TiddlyWiki è costituito da un unico file HTML, se si vuole utilizzare una copia locale di questo software vi sono due diverse possibilità:
* in corrispondenza di questo [[link|http://www.notaioricciardi.it/public/TiddlyWiki/TiddlyCatasto.html]] è scaricabile in mio Tiddly sull'Anagrafe Immobiliare Integrata;
* in corrispondenza di questo [[link|http://www.notaioricciardi.it/public/TiddlyWiki/Index.html]] è disponibile il modello vuoto dell'ultima versione di TiddlyWiki con interfaccia in lingua ''italiana'';
Nota: //per ''modello vuoto'' si intende la struttura completa di ~TiddlyWiki priva di contenuti//.
Per effettuare il download che vi interessa, cliccate con il tasto destro del mouse su uno dei link indicati e selezionate dal menù contestuale //'Salva destinazione come...'// o //'Salva oggetto con nome...'//.
Scegliete dove salvare il file e come volete chiamarlo, assicurandovi che il file sia salvato nel formato HTML con estensione HTML.
@@A seconda del browser utilizzato si possono verificare, in questa operazione, alcuni problemi. Per tali motivi fate attenzione a:@@
* ''Non'' utilizzate i comandi File/Salva presenti nel vostro browser per salvare ~TiddlyWiki, perchè in questo modo il risultato dell'operazione può dare origine a problemi nel funzionamento del software;
* Assicuratevi che ~TiddlyWiki sia salvato nel formato HTML.
Se invece utilizzate già ~TiddlyWiki, leggete il tiddler [[Come aggiornare TiddlyWiki]].
Tenete, infine, presente il [[sito principale|http://www.tiddlywiki.com]] di ~TiddlyWiki dove è sempre disponibile l'ultima versione.
In questo esempio si mostra l'utilizzo dello script per aggiungere commenti ad un tiddler. Cliccando sul pulsante Commenta si apre una finestra che consente di aggiungere i propri commenti al tiddler. Dopo aver scritto il commento, cliccando sul pulsante ''inserisci il commento'', il testo del commento viene aggiunto al tiddler. Provate ad inserire un vostro commento.
<<slider chkSliderCommenta FinestraCommenta Commenta "Scrivi un commento">>
!!!!!commento di ~MaurizioPollio scritto domenica 21 maggio 2006 17.11.03
<<<
Prova commento
<<<
Le regole che definiscono dove viene visualizzato un [[Tiddler]] quando si clicca sul relativo collegamento, possono sembrare complicate, ma basta sperimentare l'uso del wiki per familiarizzare rapidamente con questa nuova modalità di lettura delle pagine web. Quando cliccate su un link contenuto all'interno di un tiddler, il nuovo tiddler viene aperto ''immediatamente dopo'' quello corrente. Se il tiddler di destinazione è ''già'' aperto, TiddlyWiki utilizza un effetto di scrolling per posizionare la pagina su quel contenuto. Quando cliccate su un link presente nel menù principale o nella SideBar, il tiddler viene aperto nel top della pagina se non è già aperto.
Se desiderate disabilitare l'effetto di animazione dell'apertura dei [[Tiddler]], cliccate sul comando [[Opzioni]] della SideBar e disabilitate l'opzione //''~AbilitaAnimazioni''//.
"26/12: S. Stefano", "01/01:Capodanno", "06/01: Epifania", "25/04:Anniversario della liberazione", "01/05: Festa del lavoro", "02/06: Festa della Repubblica", "15/08: Assunzione di Maria Vergine", "19/09: S. Gennaro", "01/11: Tutti i Santi"
<html><textarea id="comment" rows="5" style="width:100%"></textarea>
<input type="button" value="inserisci il commento" onclick="addTiddlerComment(this.previousSibling.previousSibling);"></html><script>
place.lastChild.firstChild.value="Scrivi qui il tuo commento. Premi di nuovo il pulsante Commenta per chiudere questa finestra.";</script>
/***
|Name|FontSizePlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#FontSizePlugin|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Resize tiddler text on the fly. The text size is remembered between sessions by use of a cookie.
You can customize the maximum and minimum allowed sizes.
(only affects tiddler content text, not any other text)
Also, you can load a TW file with a font-size specified in the url.
Eg: http://tw.lewcid.org/#font:110
!Demo:
Try using the font-size buttons in the sidebar, or in the MainMenu above.
!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
Then put {{{<<fontSize "font-size:">>}}} in your SideBarOptions tiddler, or anywhere else that you might like.
!Usage
{{{<<fontSize>>}}} results in <<fontSize>>
{{{<<fontSize font-size: >>}}} results in <<fontSize font-size:>>
!Customizing:
The buttons and prefix text are wrapped in a span with class fontResizer, for easy css styling.
To change the default font-size, and the maximum and minimum font-size allowed, edit the config.fontSize.settings section of the code below.
!Notes:
This plugin assumes that the initial font-size is 100% and then increases or decreases the size by 10%. This stepsize of 10% can also be customized.
!History:
*27-07-06, version 1.0 : prevented double clicks from triggering editing of containing tiddler.
*25-07-06, version 0.9
!Code
***/
//{{{
config.fontSize={};
//configuration settings
config.fontSize.settings =
{
defaultSize : 100, // all sizes in %
maxSize : 200,
minSize : 40,
stepSize : 10
};
//startup code
var fontSettings = config.fontSize.settings;
if (!config.options.txtFontSize)
{config.options.txtFontSize = fontSettings.defaultSize;
saveOptionCookie("txtFontSize");}
setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
setStylesheet("#contentWrapper .fontResizer .button {display:inline;font-size:105%; font-weight:bold; margin:0 1px; padding: 0 3px; text-align:center !important;}\n .fontResizer {margin:0 0.5em;}","fontResizerButtonStyles");
//macro
config.macros.fontSize={};
config.macros.fontSize.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{
var sp = createTiddlyElement(place,"span",null,"fontResizer");
sp.ondblclick=this.onDblClick;
if (params[0])
createTiddlyText(sp,params[0]);
createTiddlyButton(sp,"+","increase font-size",this.incFont);
createTiddlyButton(sp,"=","reset font-size",this.resetFont);
createTiddlyButton(sp,"–","decrease font-size",this.decFont);
}
config.macros.fontSize.onDblClick = function (e)
{
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return false;
}
config.macros.fontSize.setFont = function ()
{
saveOptionCookie("txtFontSize");
setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
}
config.macros.fontSize.incFont=function()
{
if (config.options.txtFontSize < fontSettings.maxSize)
config.options.txtFontSize = (config.options.txtFontSize*1)+fontSettings.stepSize;
config.macros.fontSize.setFont();
}
config.macros.fontSize.decFont=function()
{
if (config.options.txtFontSize > fontSettings.minSize)
config.options.txtFontSize = (config.options.txtFontSize*1) - fontSettings.stepSize;
config.macros.fontSize.setFont();
}
config.macros.fontSize.resetFont=function()
{
config.options.txtFontSize=fontSettings.defaultSize;
config.macros.fontSize.setFont();
}
config.paramifiers.font =
{
onstart: function(v)
{
config.options.txtFontSize = v;
config.macros.fontSize.setFont();
}
};
//}}}
^^''Tutorial''^^
© [[JeremyH|http://www.blogjones.com/TiddlyWikiTutorial.html]]
^^''Esempi d'uso''^^
© [[TiddlyWikiTips|http://TiddlyWikiTips.com]]
^^''Interfaccia in italiano''^^
[[Mathew Warburton|http://spazioinwind.libero.it/mat01/TiddlyWikiITA.html/#italiano]]
La comunità degli utilizzatori di ~TiddlyWiki ospitata da Frappr:
<html>
<a href="http://www.frappr.com/tiddlywiki"><img src="http://www.frappr.com/i/frapper_sticker.gif" border="0" alt="Frappr TiddlyWiki Community" title="Frappr TiddlyWiki Community"></a>
</html>
GTD^^®^^ è l'acronimo di ''Getting Things Done''^^®^^ una metodologia sviluppata da [[David Allen|http://www.davidco.com/]] per la gestione di progetti ed attività. Esistono numerose [[implementazioni software|http://www.listible.com/list/gtd-software]] di questa metodologia.
Se per voi questa metodica è completamente nuova, potete trovare una breve introduzione dei concetti principali su [[Wikipedia|http://en.wikipedia.org/wiki/GTD]] ed in corrispondenza di [[questo|http://www.minezone.org/wiki/MVance/GettingThingsDone]] link; sono, inoltre, disponibili diversi testi che trattano in maniera approfondita la metodologia di Allen, facilmente reperibili in rete. Segnalo, infine, che è recentemente disponibile in italiano il best seller di David Allen //Getting Things Done// tradotto con il titolo //Detto, Fatto! L'Arte dell'efficienza//; il libro è edito dalla Sperling & Kupfer nella collana Target ed ha un costo di copertina di € 16,50.
Questa opzione permette di abilitare una nuova funzionalità di ~TiddlyWiki. In particolare, se questa opzione è selezionata, ogni qual volta salvate il vostro wiki, ~TiddlyWiki automaticamente salverà un file con lo stesso nome del vostro wiki, formattato secondo lo standard RSS 2.0, con estensione .xml. Questo file riporta le ultime modifiche effettuate ai tiddler che compongono il vostro sito e può essere utilizzato dagli utenti del vostro sito, con un software di gestione feed RSS, per leggere le ultime modifiche effettuate. Per l'utilizzo di questa funzionalità è necessario aver personalizzato il tiddler SiteUrl con l'URL che specifica dove è pubblicato il vostro sito.
config.macros.getversion = {}
config.macros.getversion.handler = function(place,macroName,params)
{
var versionData = version.extensions[params].major + "." + version.extensions[params].minor + "." + version.extensions[params].revision;
createTiddlyElement(place,"span",null,null,versionData);
}
config.macros.getversiondate = {}
config.macros.getversiondate.handler = function(place,macroName,params)
{
var versionDate = version.extensions[params[0]].date.formatString(params[1].trim());
createTiddlyElement(place,"span",null,null,versionDate);
}
/***
|Name|GotoPlugin|
|Source|http://www.TiddlyTools.com/#GotoPlugin|
|Version|1.1.2|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|view any tiddler by entering it's title - displays list of possible matches|
''View a tiddler by typing its title and pressing //enter//.'' Input just enough to uniquely match a single tiddler title and ''press //enter// to auto-complete the title for you!!'' If multiple titles match your input, a list is displayed. You can scroll-and-click (or use arrows+enter) to select/view a tiddler, or press //escape// to close the listbox to resume typing. When the listbox is ''//not//'' being displayed, press //escape// to clear the current text input and start over.
Note: ''At any time, you can move the focus directly to the text input field by using the ~ALT-G keyboard shortcut.''
!!!!!Example
<<<
syntax: {{{<<goto quiet inputstyle liststyle>>}}}
All parameters are optional.
* ''quiet'' prevents //automatic// display of the list as each character is typed. To view the list when ''quiet'', use //down// or //enter//.
* ''inputstyle'' and ''liststyle'' are CSS declarations that modify the default input and listbox styles. Note: styles containing spaces must be surrounded by ({{{"..."}}} or {{{'...'}}}) or ({{{[[...]]}}}).
{{{<<goto>>}}}
<<goto>>
{{{<<goto quiet>>}}}
<<goto quiet>>
{{{<<goto width:20em width:20em>>}}}
<<goto width:20em width:20em>>
<<<
!!!!!Configuration
<<<
The following ~TiddlyWiki search options (see AdvancedOptions) are applied when matching tiddler titles:
><<option chkRegExpSearch>> use regular expressions (text patterns)
><<option chkCaseSensitiveSearch>> use case sensitive matching
You can also create a tiddler tagged with <<tag systemConfig>> to control listing of tiddlers/shadows/tags, as well as the maximum height of the listbox. //The default values are shown below://
//{{{
config.macros.goto.includeTiddlers=true;
config.macros.goto.includeShadows=true;
config.macros.goto.includeTags=true;
config.macros.goto.listMaxSize=10;
//}}}
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''GotoPlugin'' (tagged with <<tag systemConfig>>)
<<<
!!!!!Revisions
<<<
''2006.05.10 [1.1.2]'' when filling listbox, set selection to 'heading' item... auto-select first tiddler title when down/enter moves focus into listbox
''2006.05.08 [1.1.1]'' added accesskey ("G") to input field html (also set when field gets focus). Also, inputKeyHandler() skips non-printing/non-editing keys.
''2006.05.08 [1.1.0]'' added heading to listbox for better feedback (also avoids problems with 1-line droplist)
''2006.05.07 [1.0.0]'' list matches against tiddlers/shadows/tags. input field auto-completion... 1st enter=complete matching input (or show list)... 2nd enter=view tiddler. optional "quiet" param controls when listbox appears.
''2006.05.06 [0.5.0]'' added handling for enter (13), escape(27), and down(40) keys. Change 'ondblclick' to 'onclick' for list handler to view tiddlers (suggested by Florian Cauvin - prevents unintended trigger of tiddler editor). shadow titles inserted into list instead of appended to the end.
''2006.05.05 [0.0.0]'' started
<<<
!!!!!Credits
>This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
!!!!!Code
***/
//{{{
version.extensions.goto= {major: 1, minor: 1, revision: 2, date: new Date(2006,5,10)};
config.macros.goto= {
handler:
function(place,macroName,params) {
var quiet=(params[0] && params[0]=="quiet"); if (quiet) params.shift();
var instyle=params.shift(); if (!instyle) instyle="";
var liststyle=params.shift(); if (!liststyle) liststyle="";
createTiddlyElement(place,"span").innerHTML
=this.html.replace(/%quiet%/,quiet).replace(/%instyle%/,instyle).replace(/%liststyle%/,liststyle);
},
html:
'<form onsubmit="return false" style="display:inline;margin:0;padding:0">\
<input name=goto type=text autocomplete="off" accesskey="G" style="%instyle%"\
title="enter a tiddler title"\
onfocus="this.setAttribute(\'accessKey\',\'G\'); this.select();"\
onkeyup="return config.macros.goto.inputKeyHandler(event,this,this.form.list,%quiet%);">\
<select name=list style="%liststyle%;display:none;position:absolute"\
onchange="if (!this.selectedIndex) this.selectedIndex=1;"\
onblur="this.style.display=\'none\';"\
onkeyup="return config.macros.goto.selectKeyHandler(event,this,this.form.goto);"\
onclick="return config.macros.goto.openItem(this.value,this.form.goto,this);">\
</select>\
</form>',
getItems:
function() {
var items=[];
var tiddlers=store.reverseLookup("tags","excludeSearch",false,"title");
if (this.includeTiddlers) for(var t=0; t<tiddlers.length; t++) items.push(tiddlers[t].title);
if (this.includeShadows) for (var t in config.shadowTiddlers) items.pushUnique(t);
if (this.includeTags) { var tags=store.getTags(); for(var t=0; t<tags.length; t++) items.pushUnique(tags[t][0]); }
return items;
},
includeTiddlers: true, includeShadows: true, includeTags: true,
getItemSuffix:
function(t) {
if (store.tiddlerExists(t)) return ""; // tiddler
if (store.isShadowTiddler(t)) return " (shadow)"; // shadow
return " (tag)"; // tag
},
openItem:
function(title,here,list) {
if (!title.length) return; here.value=title; list.style.display='none'; story.displayTiddler(null,title); return false;
},
inputKeyHandler:
function(event,here,list,quiet) {
var key=event.keyCode;
// non-printing chars... bubble up, except: backspace=8, enter=13, escape=27, space=32, down=40, delete=46
if (key<48) switch(key) { case 8: case 13: case 27: case 32: case 40: case 46: break; default: return true; }
// escape... hide list (2nd esc=reset input)
if (key==27) { if (list.style.display=="none") here.value=here.defaultValue; else list.style.display="none"; return false; }
// blank input... if down/enter... fall through (list all)... else, hide list
if (!here.value.length && !(key==40 || key==13)) { list.style.display="none"; return false; }
// find matching items...
var pattern=config.options.chkRegExpSearch?here.value:here.value.escapeRegExp();
var re=new RegExp(pattern,config.options.chkCaseSensitiveSearch?"mg":"img");
var found = []; var items=this.getItems(); for(var t=0; t<items.length; t++) if(items[t].search(re)!=-1) found.push(items[t]);
// matched one item... enter... not *exact* match... autocomplete input field
if (found.length==1 && quiet && key==13 && here.value!=found[0]) { list.style.display="none"; here.value=found[0]; return false; }
// no match/exact match... enter... create/show it
if (found.length<2 && key==13) return this.openItem(found.length?found[0]:here.value,here,list);
// quiet/no match... hide list...
list.style.display=(!quiet && found.length)?"block":"none";
// no matches... key bubbles up
if (!found.length) return true;
// down/enter... show/move to list...
if (key==40 || key==13) { list.style.display="block"; list.focus(); }
// list is showing... fill list...
if (list.style.display!="none") {
while (list.length > 0) list.options[0]=null; // clear list...
found.sort();
list.options[0]=new Option(found.length==1?this.listMatchMsg:this.listHeading.format([found.length]),"",false,false);
for (var t=0; t<found.length; t++) // fill list...
list.options[t+1]=new Option(found[t]+this.getItemSuffix(found[t]),found[t],false,false);
list.size=(found.length<this.listMaxSize?found.length:this.listMaxSize)+1; // resize list...
list.selectedIndex=(key==40 || key==13)?1:0;
}
return true; // key bubbles up
},
listMaxSize: 10,
listHeading: 'Found %0 matching titles:',
listMatchMsg: 'Press enter to open tiddler...',
selectKeyHandler:
function(event,list,editfield) {
if (event.keyCode==27) // escape... hide list, move to edit field
{ editfield.focus(); list.style.display="none"; return false; }
if (event.keyCode==13 && list.value.length) // enter... view selected item
{ this.openItem(list.value,editfield,list); return false; }
return true;
}
}
//}}}
<<gradient horiz #bbbbbb #eeeeee #ffffff>>La nuova macro ~GradientMacro permette di creare in maniera semplice ed automatica zone colorate sfumate sia in senso orizzontale che verticale.Queste zone colorate sono costruite da elementi di colore HTML e non necessitano di alcuna immagine per realizzare la zona colorata sfumata.>>
La macro ~GradientMacro è una macro di tipo ~ExtendedMacro; la macro processa il testo che segue la sua invocazione fino alla successiva sequenza di simboli '>>'. Per realizzare una zona colorata sfumata, basta inserire in un tiddler del codice simile a questo:
{{{
<<gradient vert #ffffff #ffdddd #ff8888>>testo da includere nella zona colorata sfumata>>
}}}
Il primo paramento della macro può essere ''vert'' o ''horiz'' per indicare se la sfumatura deve essere realizzata secondo la direzione verticale o orizzontale. I successivi parametri della macro sono costituiti da due o più codici di colore (il formato CSS RGB(r,g,b) dei colori è altrettanto valido). La macro ~GradientMacro, sulla base di queste direttive, costruisce una zona colorata sfumata con gradiente lineare tra ciascuno dei colori indicati e secondo l'ordine con cui i colori sono stati elencati.
Un esempio che combina l'uso della ~GradientMacro e le funzionalità di formattazione tabelle di ~TiddlyWiki, è il seguente:
| <<gradient vert #ffffff #ffdddd #ff8888>>Non servono immagini per creare questa cella colorata sfumata>> | <<gradient vert #ffffff #ddffdd #88ff88>>Non servono immagini per creare questa cella colorata sfumata>> | <<gradient vert #ffffff #ddddff #8888ff>>Non servono immagini per creare questa cella colorata sfumata>> |
Nel testo che la macro deve processare, possono essere inserite anche elementi di codice CSS, come mostrato nel seguente esempio:
<<gradient vert #000000 #660000 #aa2222>>color:#ffffff;font-size:12pt;TITOLO>>
{{{
<<gradient vert #000000 #660000 #aa2222>>color:#ffffff;font-size:12pt;TITOLO>>
}}}
TiddlyWiki was designed to be a "client-side" wiki - a wiki that you can use while offline, as opposed to an online "server-side" wiki such as Wikipedia. Nevertheless, you may wish to have your TW online, as a blog, or maybe to have it handy to edit from other locations. If so, there are several ways to host your ~TiddlyWiki online.
''If you need free hosting'', check out the following sites:
*''Tiddlyspot'' at http://tiddlyspot.com. They even have several flavors of ~TWs to choose from.
*''~ServerSideWiki'' at http://serversidewiki.com.
''If you have your own website,'' there are at least a couple options:
*~BidiXTW's ''~UploadPlugin'' at http://tiddlywiki.bidix.info/#HowToUpload
*''ccTiddly'' at http://cctiddly.sourceforge.net
*''~MiniTiddlerServer'' at http://www.minitiddlyserver.com
*''~PrinceTiddlyWiki'' at http://ptw.sourceforge.net
*''~PHPTiddlyWiki'' at http://www.patrickcurry.com/tiddly
You'll have to know what you're doing for these last options. The documentation isn't written in everyday language. Maybe someday I'll get around to "~UploadPlugin for the rest of us"...
!Gli elementi principali di un tiddler
[img[Gli elementi principali di un Tiddler|TW6.jpg]]
!I comandi nascosti di un Tiddler
Nella figura sono mostrati i comandi diponibili in ogni Tiddler. Questi comandi sono normalmente nascosti; posizionando il cursore del mouse sul Tiddler vengono automaticamente visualizzati.
[img[I comandi nascosti di un Tiddler|TW7.jpg]]
!Un Tiddler aperto in modifica
Quando fate doppio click su un Tiddler, o cliccate sul comando ''Modifica'', il Tiddler si apre in modo modifica. Ecco come appare:
[img[Un Tiddler aperto in modifica|TW8.jpg]]
Una volta che le modifiche siano state effettuate, le opzioni disponibili sono:
[img[Comandi del Tiddler nel modo modifica|TW9.jpg]]
Il Main Menu o menu principale non è altro che una lista dei contenuti mediante la quale poter accedere ai tiddler principali del vostro ~TiddlyWiki. Potete editare la composizione di questo menu editando il tiddler MainMenu. In alcuni ~TiddlyWiki il menu principale, invece di essere posizionato sulla sinistra della pagina, viene posizionato in alto nell'header per recuperare spazio utile per il testo.
[img[Il Main Menu|TW2.jpg]]
Il codice che realizza questo menu è il seguente:
{{{
[[Benvenuti]] TiddlyWikiTutorial [[Semplice da Portare]] [[Semplice da Editare]] [[Una guida visuale|Una guida visuale a TiddlyWiki]]
[[Ulteriori come fare]] [[Alcuni esempi d'uso]]
[[Download]]
[[Mappa del sito]]
<<slider fontislider [[Fonti]] Fonti "Le fonti di questo wiki">>
^^© 2008 [[UnaMesa|http://www.unamesa.org]]^^
^^<<today "DDD DD MMM YYYY">>^^
^^TiddlyWiki versione <<version>>^^
}}}
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Version|1.6.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Usage
<<<
When installed, this plugin adds new wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} markers, so that it can be treated as embedded javascript and executed each time the tiddler is rendered.
''Deferred execution from an 'onClick' link''
By including a {{{label="..."}}} parameter in the initial {{{<script>}}} marker, the plugin will create a link to an 'onclick' script that will only be executed when that specific link is clicked, rather than running the script each time the tiddler is rendered. You may also include a {{{title="..."}}} parameter to specify the 'tooltip' text that will appear whenever the mouse is moved over the onClick link text
''External script source files:''
You can also load javascript from an external source URL, by including a src="..." parameter in the initial {{{<script>}}} marker (e.g., {{{<script src="demo.js"></script>}}}). This is particularly useful when incorporating third-party javascript libraries for use in custom extensions and plugins. The 'foreign' javascript code remains isolated in a separate file that can be easily replaced whenever an updated library file becomes available.
''Display script source in tiddler output''
By including the keyword parameter "show", in the initial {{{<script>}}} marker, the plugin will include the script source code in the output that it displays in the tiddler.
''Defining javascript functions and libraries:''
Although the external javascript file is loaded while the tiddler content is being rendered, any functions it defines will not be available for use until //after// the rendering has been completed. Thus, you cannot load a library and //immediately// use it's functions within the same tiddler. However, once that tiddler has been loaded, the library functions can be freely used in any tiddler (even the one in which it was initially loaded).
To ensure that your javascript functions are always available when needed, you should load the libraries from a tiddler that will be rendered as soon as your TiddlyWiki document is opened. For example, you could put your {{{<script src="..."></script>}}} syntax into a tiddler called LoadScripts, and then add {{{<<tiddler LoadScripts>>}}} in your MainMenu tiddler.
Since the MainMenu is always rendered immediately upon opening your document, the library will always be loaded before any other tiddlers that rely upon the functions it defines. Loading an external javascript library does not produce any direct output in the tiddler, so these definitions should have no impact on the appearance of your MainMenu.
''Creating dynamic tiddler content''
An important difference between this implementation of embedded scripting and conventional embedded javascript techniques for web pages is the method used to produce output that is dynamically inserted into the document:
* In a typical web document, you use the document.write() function to output text sequences (often containing HTML tags) that are then rendered when the entire document is first loaded into the browser window.
* However, in a ~TiddlyWiki document, tiddlers (and other DOM elements) are created, deleted, and rendered "on-the-fly", so writing directly to the global 'document' object does not produce the results you want (i.e., replacing the embedded script within the tiddler content), and completely replaces the entire ~TiddlyWiki document in your browser window.
* To allow these scripts to work unmodified, the plugin automatically converts all occurences of document.write() so that the output is inserted into the tiddler content instead of replacing the entire ~TiddlyWiki document.
If your script does not use document.write() to create dynamically embedded content within a tiddler, your javascript can, as an alternative, explicitly return a text value that the plugin can then pass through the wikify() rendering engine to insert into the tiddler display. For example, using {{{return "thistext"}}} will produce the same output as {{{document.write("thistext")}}}.
//Note: your script code is automatically 'wrapped' inside a function, {{{_out()}}}, so that any return value you provide can be correctly handled by the plugin and inserted into the tiddler. To avoid unpredictable results (and possibly fatal execution errors), this function should never be redefined or called from ''within'' your script code.//
''Accessing the ~TiddlyWiki DOM''
The plugin provides one pre-defined variable, 'place', that is passed in to your javascript code so that it can have direct access to the containing DOM element into which the tiddler output is currently being rendered.
Access to this DOM element allows you to create scripts that can:
* vary their actions based upon the specific location in which they are embedded
* access 'tiddler-relative' information (use findContainingTiddler(place))
* perform direct DOM manipulations (when returning wikified text is not enough)
<<<
!!!!!Examples
<<<
an "alert" message box:
><script show>
alert('InlineJavascriptPlugin: this is a demonstration message');
</script>
dynamic output:
><script show>
return (new Date()).toString();
</script>
wikified dynamic output:
><script show>
return "link to current user: [["+config.options.txtUserName+"]]";
</script>
dynamic output using 'place' to get size information for current tiddler:
><script show>
if (!window.story) window.story=window;
var title=story.findContainingTiddler(place).id.substr(7);
return title+" is using "+store.getTiddlerText(title).length+" bytes";
</script>
creating an 'onclick' button/link that runs a script:
><script label="click here" title="clicking this link will show an 'alert' box" show>
if (!window.story) window.story=window;
alert("Hello World!\nlinktext='"+place.firstChild.data+"'\ntiddler='"+story.findContainingTiddler(place).id.substr(7)+"'");
</script>
loading a script from a source url:
>http://www.TiddlyTools.com/demo.js contains:
>>{{{function demo() { alert('this output is from demo(), defined in demo.js') } }}}
>>{{{alert('InlineJavascriptPlugin: demo.js has been loaded'); }}}
><script src="demo.js" show>
return "loading demo.js..."
</script>
><script label="click to execute demo() function" show>
demo()
</script>
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''InlineJavascriptPlugin'' (tagged with <<tag systemConfig>>)
<<<
!!!!!Revision History
<<<
''2007.02.19 [1.6.0]'' added support for title="..." to specify mouseover tooltip when using an onclick (label="...") script
''2006.10.16 [1.5.2]'' add newline before closing '}' in 'function out_' wrapper. Fixes error caused when last line of script is a comment.
''2006.06.01 [1.5.1]'' when calling wikify() on script return value, pass hightlightRegExp and tiddler params so macros that rely on these values can render properly
''2006.04.19 [1.5.0]'' added 'show' parameter to force display of javascript source code in tiddler output
''2006.01.05 [1.4.0]'' added support 'onclick' scripts. When label="..." param is present, a button/link is created using the indicated label text, and the script is only executed when the button/link is clicked. 'place' value is set to match the clicked button/link element.
''2005.12.13 [1.3.1]'' when catching eval error in IE, e.description contains the error text, instead of e.toString(). Fixed error reporting so IE shows the correct response text. Based on a suggestion by UdoBorkowski
''2005.11.09 [1.3.0]'' for 'inline' scripts (i.e., not scripts loaded with src="..."), automatically replace calls to 'document.write()' with 'place.innerHTML+=' so script output is directed into tiddler content. Based on a suggestion by BradleyMeck
''2005.11.08 [1.2.0]'' handle loading of javascript from an external URL via src="..." syntax
''2005.11.08 [1.1.0]'' pass 'place' param into scripts to provide direct DOM access
''2005.11.08 [1.0.0]'' initial release
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
<<<
!!!!!Code
***/
//{{{
version.extensions.inlineJavascript= {major: 1, minor: 6, revision: 0, date: new Date(2007,2,19)};
config.formatters.push( {
name: "inlineJavascript",
match: "\\<script",
lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\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) {
if (lookaheadMatch[1]) { // load a script library
// make script tag, set src, add to body to execute, then remove for cleanup
var script = document.createElement("script"); script.src = lookaheadMatch[1];
document.body.appendChild(script); document.body.removeChild(script);
}
if (lookaheadMatch[5]) { // there is script code
if (lookaheadMatch[4]) // show inline script code in tiddler output
wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
if (lookaheadMatch[2]) { // create a link to an 'onclick' script
// add a link, define click handler, save code in link (pass 'place'), set link attributes
var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",lookaheadMatch[2]);
link.onclick=function(){try{return(eval(this.code))}catch(e){alert(e.description?e.description:e.toString())}}
link.code="function _out(place){"+lookaheadMatch[5]+"\n};_out(this);"
link.setAttribute("title",lookaheadMatch[3]?lookaheadMatch[3]:"");
link.setAttribute("href","javascript:;");
link.style.cursor="pointer";
}
else { // run inline script code
var code="function _out(place){"+lookaheadMatch[5]+"\n};_out(w.output);"
code=code.replace(/document.write\(/gi,'place.innerHTML+=(');
try { var out = eval(code); } catch(e) { out = e.description?e.description:e.toString(); }
if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
}
}
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
}
}
} )
//}}}
Per salvare il tiddly su un server web bisogna utilizzare i seguenti plugin:
1. PasswordOptionPlugin
2. UploadPlugin
3. [[store.php]]
Innanzi tutto bisogna creare un file store.php in questo modo:
- andare al tiddler "store.php", aprirlo, copiare il suo contenuto e incollarlo in un file di Blocco note da salvare come "store.php". Accertarsi che non vi siano altre estensioni come .txt, .html, ecc.
- nel file salvato "store.php" scrivere la username e la password scelte, andando alla linea di utenti $ = array (' ~ NomeUtente1 '=>' Password1 ', etc) e sostituendo NomeUtente1 con il proprio username e Password1 con la propria password. Accertarsi di lasciare tutto il resto invariato: la punteggiatura, il codice, le virgolette singole.
- salvare il file
- caricare store.php tramite FTP in un cartella con permessi di scrittura (es: public) del server web. Se è stato caricato correttamente, si dovrebbe essere in grado di aprire il file dal browser (ad esempio http://www.notaioricciardi.it/public/TiddlyWiky/store.php) e vedere il messaggio BidiX 's .
- cliccare sul pulsante Upload che compare cliccando su Strumenti) in alto
- compilare il pannello Upload opzioni.
1. Impostare il nome utente e la password che hai messo nel tuo file store.php caricato sul server web;
2. Aggiungere l'URL del file store.php (per esempio: http://www.notaioricciardi.it/public/TiddlyWiky/store.php)
3. Lasciare la directory relativa vuoto
4. aggiungere il nome del TiddlyWiki che si vuole "uplodare"
5. Fare clic su 'Upload' nel pannello opzioni. Ci sarà un'attesa finché il file viene caricato, ma apparirà un'area di messaggio che avvertirà la conclusione del processo.
Per ulteriori Upload basterà inserire solo la password.
L'Header contiene il SiteTitle ed il SiteSubtitle di ~TiddlyWiki. Una volta che avete scaricato sul vostro PC il software potete personalizzare entrambi questi elementi semplicemente editando i rispettivi tiddler.
Nella SideBar si trovano le utilities e le opzioni di ~TiddlyWiki. La Sidebar è suddivisa in tre aree:
!1) La parte superiore della ~SideBar
Nella parte superiore ci sono una serie di tools:
[img[La SideBar di TiddlyWiki|TW3.jpg]]
Le funzioni non standard presenti in questa ~SideBar sono state realizzate con [[Plugin]] specifici non presenti nella versione standard di ~TiddlyWiki.
!2) Il menu di gestione delle opzioni
Cliccando su Opzioni si apre il menu di gestione delle opzioni di ~TiddlyWiki:
[img[Le opzioni di TiddlyWiki|TW4-1.jpg]]
!3) La lista di tutti i tiddlers e di tutte le categorie
[img[La lista dei tiddlers e delle categorie TiddlyWiki|TW5-1.jpg]]
La macro ''list'', molto semplicemente, elenca tutti i tiddler del vostro wiki in ordine alfabetico.
!Codice
{{{
<<list>>
}}}
!Esecuzione
<<list>>
Questo esempio d'uso di ~TiddlyWiki estende l'esempio [[Lista delle cose da fare - versione semplice]] introducendo ulteriori funzionalità. L'esempio è riportato come esempio n. 10 in [[tiddlywikitips.com|http://tiddlywikitips.com/#%5B%5BTip%20%2310%3A%20Tabbed%20Self-referencing%20Tagged%20To%20Do%20List%20*%5D%5D]].
In particolare questo esempio trae spunto dall'esigenza di realizzare una lista delle cose da fare che non sia semplicemente un ''elenco'' di attività da svolgere ma una lista di attività, sempre categorizzate secondo delle priorità, nella quale ciascun elemento della lista sia a sua volta un tiddler del quale si può vedere il contenuto e, quindi, di poter essere editato. Associando a questo sistema l'uso delle etichette (tag), si potrà realizzare una lista ''dinamica'', nel senso che modificando semplicemente l'etichetta associata ad un attività descritta in un tiddler, questa potrà passare da una categoria ad un'altra. Questo esempio è istruttivo perchè richiede anche [[l'installazione di un Plugin|Come installare Plugin]]. In particolare il plugin utilizzato per questo esempio è ListAll, un Plugin che rende disponibile una nuova macro ''~ListTags'' la quale consente di avere l'elenco di tutti i tiddler che hanno la stessa etichetta.
Dopo aver installato il plugin ListAll nel vostro wiki, create tre tiddler, così come descritto nell'esempio [[Lista delle cose da fare - versione semplice]], ciascuno associato ad una delle tre categorie di attività (urgente, importante, altro). A questi tre tiddler se ne aggiunge un quarto che sarà associato alle attività completate. //Per mantenere separati in questo wiki sia l'esempio di lista semplice che quello avanzato, i quattro tiddler saranno diversi da quelli utilizzati nell'esempio [[Lista delle cose da fare - versione semplice]] ed avranno nel nome il suffisso ''a''//.
Il primo tiddler si chiamerà, quindi, ~DaFare1a e conterrà il seguente codice:
{{{
![[Urgente|DaFare1a]]
<<listTags "Urgente">>
}}}
Cliccate sul pulsante per vedere il contenuto del tiddler. Cliccate di nuovo per chiuderlo. <<slider chkDaFare DaFare1a DaFare1a "Contenuto del tiddler DaFare1a">>
Il secondo tiddler si chiamerà ~DaFare2a e conterrà il seguente codice:
{{{
![[Importante|DaFare2a]]
<<listTags "Importante">>
}}}
Cliccate sul pulsante per vedere il contenuto del tiddler. Cliccate di nuovo per chiuderlo. <<slider chkDaFare DaFare2a DaFare2a "Contenuto del tiddler DaFare2a">>
Il terzo tiddler si chiamerà ~DaFare3a e conterrà il seguente codice:
{{{
![[Altro|DaFare3a]]
<<listTags "Altro">>
}}}
Cliccate sul pulsante per vedere il contenuto del tiddler. Cliccate di nuovo per chiuderlo. <<slider chkDaFare DaFare3a DaFare3a "Contenuto del tiddler DaFare3a">>
Infine l'ultimo tiddler si chiamerà ~DaFare4a e conterrà il seguente codice:
{{{
![[Completate|DaFare4a]]
<<listTags "Completate">>
}}}
Cliccate sul pulsante per vedere il contenuto del tiddler. Cliccate di nuovo per chiuderlo. <<slider chkDaFare DaFare4a DaFare4a "Contenuto del tiddler DaFare4a">>
Con riferimento al contenuto di questi quattro tiddlers, è evidente che possiamo inserire al loro interno anche descrizioni di attività per le quali non abbiamo bisogno di specificare ulteriormente i contenuti, analogamente a quanto fatto nella lista semplice; in questo modo combineremo la visualizzazione semplice con quella avanzata. Come esempio osservate come è fatto il tiddler <<slider chkDaFare DaFare1a DaFare1a "Contenuto del tiddler DaFare1a">>
A questo punto, creiamo nel nostro wiki tanti tiddlers per ciascuna delle attività che ci interessa inserire nella lista, assegnando ad essi un nome significativo ed avendo cura solamente di etichettarli con una delle quattro categorie individuate, ossia //Urgente//, //Importante//, //Altro//, //Completate//. (Per mostrare le funzionalità della lista ho creato alcuni tiddlers di esempio per ognuna delle precedenti categorie. Sperimentate direttamente voi creando nuovi tiddlers).
Fatto questo, il passo conclusivo consiste nel creare il tiddler principale che combina il contenuto dei quattro tiddler ~DaFare1/2/3/4a. Questo tiddler che potrà avere il nome che desideriamo, dovrà contenere il seguente codice:
{{{
<<tabs txtFavourite
Urgente "Priorità 1" DaFare1a
Importante "Priorità 2" DaFare2a
Altro "Priorità 3" DaFare3a
Completate "Priorità 4" DaFare4a
>>
}}}
Aprendo questo tiddler, si avrà un unico contenitore organizzato con tab diversi per ciascuna delle quattro categorie di attività. Cliccando sul relativo tab si visualizzerà l'elenco delle attività corrispondenti a quella priorità. Le attività per le quali è stato creato un tiddler sono diventate dei collegamenti ipertestuali alla relativa descrizione.
Le differenze di questo esempio rispetto alla lista semplice sono le seguenti:
* con questa tecnica possiamo utilizzare indifferentemente sia l'elenco statico di attività che il link alla descrizione della stessa, a seconda delle nostre preferenze;
* creando un nuovo tiddler per una attività, basta semplicemente associare ad esso l'etichetta desiderata per vedere immediatamente la corrispondente attività elencata nella lista;
* spostare una attività da una categoria ad un'altra significa semplicemente modificare l'etichetta del relativo tiddler. Provate direttamente a modificare l'etichetta di una delle attività, ad esempio sostituendo l'etichetta Urgente con l'etichetta Completate ed osservate il risultato.
Per vedere all'opera questo esempio cliccate [[qui|Lista delle cose da fare - avanzata]].
Tipicamente una lista delle cose da fare, è formata da un certo numero di elenchi di attività categorizzati per importanza. Nell'esempio, sviluppato da Alvin Orzechowski e riportato come suggerimento n. 9 in [[tiddlywikitips.com|http://tiddlywikitips.com/#%5B%5BTip%20%2309%3A%20Tabbed%20Self-referencing%20To%20Do%20List%20*%5D%5D]], si ipotizza di creare una lista di cose da fare nella quale le attività sono classificate secondo tre elementi:
* le attività a priorità più alta, ossia quelle urgenti;
* le attività a priorità più bassa, ossia quelle importanti ma non urgenti;
* le attività che non sono né urgenti né importanti.
Per creare una lista organizzata in questo modo, il primo passo consiste nel creare un tiddler per ciascuna di queste tre categorie di attività.
Il primo tiddler si chiamerà, ad esempio, ~DaFare1 e conterrà il seguente codice:
{{{
![[Urgente|DaFare1]]
*Prima attività inserita nella lista delle cose da fare urgenti
*Seconda attività inserita nella lista delle cose da fare urgenti
}}}
Cliccate sul pulsante per vedere il contenuto del tiddler. Cliccate di nuovo per chiuderlo. <<slider chkDaFare DaFare1 DaFare1 "Contenuto del tiddler DaFare1">>
Il secondo tiddler si chiamerà, ad esempio, ~DaFare2 e conterrà il seguente codice:
{{{
![[Importante|DaFare2]]
*Prima attività inserita nella lista delle cose da fare importanti
*Seconda attività inserita nella lista delle cose da fare importanti
}}}
Cliccate sul pulsante per vedere il contenuto del tiddler. Cliccate di nuovo per chiuderlo. <<slider chkDaFare DaFare2 DaFare2 "Contenuto del tiddler DaFare2">>
Il terzo tiddler si chiamerà, ad esempio, ~DaFare3 e conterrà il seguente codice:
{{{
![[Altro|DaFare3]]
*Prima attività inserita nella liste delle cose da fare né urgenti né importanti
*Seconda attività inserita nella liste delle cose da fare né urgenti né importanti
}}}
Cliccate sul pulsante per vedere il contenuto del tiddler. Cliccate di nuovo per chiuderlo. <<slider chkDaFare DaFare3 DaFare3 "Contenuto del tiddler DaFare3">>
Notate che ciascuno dei tre tiddler contiene all'inizio il codice:
{{{
![[Identificatore della lista|Nome del tiddler]]
}}}
seguito poi da un elenco di attività.
A questo punto per avere la nostra lista, basta creare un ulteriore tiddler che combina il contenuto dei tre tiddler appena creati. Questo tiddler che si chiamerà, ad esempio "Lista delle cose da fare", dovrà contenere il seguente codice:
{{{
<<tabs txtFavourite
Urgente "Priorità 1" DaFare1
Importante "Priorità 2" DaFare2
Altro "Priorità 3" DaFare3
>>
}}}
Aprendo questo tiddler, si avrà un unico contenitore organizzato con tab diversi per ciascuna delle tre categorie di attività. Cliccando sul relativo tab si visualizzerà l'elenco delle attività corrispondenti a quella priorità. Per vedere all'opera questo tiddler cliccate [[qui|Lista delle cose da fare - semplice]].
Le macro sono una delle più potenti caratteristiche che Jeremy Ruston ha inserito in TiddlyWiki. Usando le macro si possono aggiungere nuove funzionalità a ~TiddlyWiki senza necessità di modificare il codice sorgente. Diverse macro sono già installate di default in ~TidllyWiki e molte altre sono disponibili su del.icio.us raggruppate sotto il tag ~TiddlyWikiPlugin [[del.icio.us/tag/tiddlywikiplugin|http://del.icio.us/tag/tiddlywikiplugin]].
Alcune delle macro installate di default in ~TiddlyWiki sono:
----
La macro ''today'' che, invocata nel seguente modo:
{{{
oggi è <<today "DDD DD MMM YYYY">>
}}}
produce questo risultato: oggi è ''<<today "DDD DD MMM YYYY">>''. Se non vengono specificati i parametri, l'esecuzione della macro ''today'' produce questo risultato: oggi è <<today>>
Per il formato dei parametri che possono essere passati alla macro, fate riferimento al tiddler DateFormatString.
----
----
La macro ''tag'' che, invocata nel seguente modo:
{{{
<<tag Funzionalità>>
}}}
produce questo risultato: <<tag Funzionalità>> La macro ''tag'' crea quindi un pulsante che, se cliccato, permette di elencare tutti i frammenti a cui è stata associata l'etichetta specificata nell'invocazione della macro.
----
----
La macro ''listTags'' che, invocata nel seguente modo:
{{{
<<listTags Esempi>>
}}}
produce questo risultato: <<listTags Esempi>> La macro ''listTags'' elenca quindi tutti i tiddler che sono associati ad una determinata etichetta.
----
----
La macro ''newTiddler'' che, invocata nel seguente modo:
{{{
<<newTiddler>>
}}}
produce il pulsante <<newTiddler>>. Questo pulsante permette di creare rapidamente un nuovo tiddler.
----
----
La macro ''newJournal'' che, invocata nel seguente modo:
{{{
<<newJournal "DD MMM YYYY, hh:mm">>
}}}
produce il pulsante <<newJournal "DD MMM YYYY, hh:mm">>. Questo pulsante permette di creare rapidamente un nuovo tiddler con la data e l'orario correnti. Anche in questo caso, come nella macro today, i parametri vengono passati secondo il formato definito in DateFormatString.
----
----
La macro ''tiddler'' che, invocata nel seguente modo:
{{{
<<tiddler MicroContenuti>>
}}}
inserisce l'intero contenuto del tiddler MicroContenuti, come mostrato nel seguito //(relativamente all'uso di questa macro, si fa rilevare che al momento non esiste nessuna protezione contro loop infiniti che possono essere involontariamente innescati)//:
<<tiddler MicroContenuti>>
----
----
La macro ''slider'' che, invocata nel seguente modo:
{{{
<<slider chkTestSlider OptionsPanel Opzioni "Cambiare le opzioni di TiddlyWiki">>
}}}
produce il pulsante <<slider chkTestSlider OptionsPanel Opzioni "Cambiare le opzioni di TiddlyWiki">>
I parametri che è necessario passare allla macro sono, nell'ordine, i seguenti:
* il nome del cookie da utilizzare per salvare lo stato dello slider;
* il nome del tiddler che si vuole includere nello slider;
* il titolo che si vuole associare allo slider;
* il testo del tooltip associato allo slider.
Altro esempio d'uso della macro ''slider'' è questo: <<slider chkSlider TestSlider Test "Test slider">>
----
----
La macro ''version'' che, invocata nel seguente modo:
{{{
<<version>>
}}}
restituisce la versione di ~TiddlyWiki in uso. Questo wiki, ad esempio, utilizza la versione <<version>> di ~TiddlyWiki, che è l'ultima versione disponibile su www.tiddlywiki.com.
----
Altre macro incluse in ~TiddlyWiki sono GradientMacro, [[List]], [[Sparklines]], [[Tabs]], [[Tagging]] e [[Toolbar|ToolbarMacro]].
Per approfondire il concetto di macro, leggete anche [[Come installare macro]].
[img[Portale degli studi notarili|http://www.notaioricciardi.it/Images/notaioRR.jpg][http://www.notaioricciardi.it/login.aspx/]]
<<newcalendar>>
[[MainMenu]]
|<<siteMap Funzionalità >>|<<siteMap Formattazione>><<siteMap ComeFare>>|<<siteMap Esempi>>|
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Version|2.3.2|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Slider.prototype.stop|
|Description|show content in nest-able 'slider' or 'floating' panels, without needing to create separate tiddlers for each panel|
!!!!!Configuration
<<<
Enable animation for slider panels
<<option chkFloatingSlidersAnimate>> allow sliders to animate when opening/closing
>(note: This setting is in //addition// to the general option for enabling/disabling animation effects:
><<option chkAnimate>> enable animations (entire document)
>For slider animation to occur, you must also allow animation in general.
Debugging messages for 'lazy sliders' deferred rendering:
<<option chkDebugLazySliderDefer>> show debugging alert when deferring slider rendering
<<option chkDebugLazySliderRender>> show debugging alert when deferred slider is actually rendered
<<<
!!!!!Usage
<<<
When installed, this plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content. Use {{{+++}}} and {{{===}}} to delimit the slider content. You can also 'nest' these sliders as deep as you like (see complex nesting example below), so that expandable 'tree-like' hierarchical displays can be created. This is most useful when converting existing in-line text content to create in-line annotations, footnotes, context-sensitive help, or other subordinate information displays.
Additional optional syntax elements let you specify
*default to open
*cookiename
*heading level
*floater (with optional CSS width value)
*transient display (clicking elsewhere closes panel)
*custom class/label/tooltip/accesskey
*alternate label/tooltip (displayed when panel is open)
*panelID (for later use with {{{<<DOM>>}}} macro. See [[DOMTweaksPlugin]])
*automatic blockquote style on panel
*deferred rendering of panel content
The complete syntax, using all options, is:
//{{{
++++(cookiename)!!!!!^width^*{{class{[label=key|tooltip][altlabel|alttooltip]}}}#panelID:>...
content goes here
===
//}}}
where:
* {{{+++}}} (or {{{++++}}}) and {{{===}}}<br>marks the start and end of the slider definition, respectively. When the extra {{{+}}} is used, the slider will be open when initially displayed.
* {{{(cookiename)}}}<br>saves the slider opened/closed state, and restores this state whenever the slider is re-rendered.
* {{{!}}} through {{{!!!!!}}}<br>displays the slider label using a formatted headline (Hn) style instead of a button/link style
* {{{^width^}}} (or just {{{^}}})<br>makes the slider 'float' on top of other content rather than shifting that content downward. 'width' must be a valid CSS value (e.g., "30em", "180px", "50%", etc.). If omitted, the default width is "auto" (i.e., fit to content)
* {{{"*"}}} //(without the quotes)//<br>denotes "transient display": when a click occurs elsewhere in the document, the slider/floating panel will be automatically closed. This is useful for creating 'pulldown menus' that automatically go away after they are used. //Note: using SHIFT-click on a slider label will open/close that slider without triggering the automatic closing of any transient slider panels that are currently displayed, permitting ''temporary'' display of several transient panels at once.//
* """{{class{[label=key|tooltip][altlabel|alttooltip]}}}"""<br>uses label/tooltip/accesskey. """{{class{...}}}""", """=key""", """|tooltip""" and """[altlabel|alttooltip]""" are optional. 'class' is any valid CSS class name, used to style the slider label text. 'key' must be a ''single letter only''. altlabel/alttooltip specifiy alternative label/tooltip for use when slider/floating panel is displayed.
* {{{#panelID:}}}<br>defines a unique DOM element ID that is assigned to the panel element used to display the slider content. This ID can then be used later to reposition the panel using the {{{<<DOM move id>>}}} macro (see [[DOMTweaksPlugin]]), or to access/modify the panel element through use of {{{document.getElementById(...)}}}) javascript code in a plugin or inline script.
* {{{">"}}} //(without the quotes)//<br>automatically adds blockquote formatting to slider content
* {{{"..."}}} //(without the quotes)//<br>defers rendering of closed sliders until the first time they are opened. //Note: deferred rendering may produce unexpected results in some cases. Use with care.//
//Note: to make slider definitions easier to read and recognize when editing a tiddler, newlines immediately following the {{{+++}}} 'start slider' or preceding the {{{===}}} 'end slider' sequence are automatically supressed so that excess whitespace is eliminated from the output.//
<<<
!!!!!Examples
<<<
simple in-line slider:
{{{
+++
content
===
}}}
+++
content
===
----
use a custom label and tooltip:
{{{
+++[label|tooltip]
content
===
}}}
+++[label|tooltip]
content
===
----
content automatically blockquoted:
{{{
+++>
content
===
}}}
+++>
content
===
----
all options combined //(default open, cookie, heading, sized floater, transient, class, label/tooltip/key, blockquoted, deferred)//
{{{
++++(testcookie)!!!^30em^*{{big{[label=Z|click or press Alt-Z to open]}}}>...
content
===
}}}
++++(testcookie)!!!^30em^*{{big{[label=Z|click or press Alt-Z to open]}}}>...
content
===
----
complex nesting example:
{{{
+++[get info...=I|click for information or press Alt-I]
put some general information here,
plus a floating panel with more specific info:
+++^10em^[view details...|click for details]
put some detail here, which could in turn contain a transient panel,
perhaps with a +++^25em^*[glossary definition]explaining technical terms===
===
===
}}}
+++[get info...=I|click for information or press Alt-I]
put some general information here,
plus a floating panel with more specific info:
+++^10em^[view details...|click for details]
put some detail here, which could in turn contain a transient panel,
perhaps with a +++^25em^*[glossary definition]explaining technical terms===
===
===
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''NestedSlidersPlugin'' (tagged with <<tag systemConfig>>)
<<<
!!!!!Revision History
<<<
''2007.11.14 - 2.3.2'' in onClickNestedSlider(), prevent SHIFT-click events from opening a new, empty browser window by setting "cancelBubble=true" and calling "stopPropagation()". Note: SHIFT-click is still processed as a normal click (i.e., it toggles the slider panel display). Also, using SHIFT-click will prevent 'transient' sliders from being automatically closed when another slider is opened, allowing you to *temporarily* display several transient sliders at once.
''2007.07.26 - 2.3.1'' in document.onclick(), propagate return value from hijacked core click handler to consume OR bubble up click as needed. Fixes "IE click disease", whereby nearly every mouse click causes a page transition.
|please see [[NestedSlidersPluginHistory]] for additional revision details|
''2005.11.03 - 1.0.0'' initial public release
<<<
!!!!!Credits
<<<
This feature was implemented by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]] with initial research and suggestions from RodneyGomes, GeoffSlocock, and PaulPetterson.
<<<
!!!!!Code
***/
//{{{
version.extensions.nestedSliders = {major: 2, minor: 3, revision: 2, date: new Date(2007,11,14)};
//}}}
//{{{
// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkDebugLazySliderDefer==undefined) config.options.chkDebugLazySliderDefer=false;
if (config.options.chkDebugLazySliderRender==undefined) config.options.chkDebugLazySliderRender=false;
if (config.options.chkFloatingSlidersAnimate==undefined) config.options.chkFloatingSlidersAnimate=false;
// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");
//}}}
//{{{
config.formatters.push( {
name: "nestedSliders",
match: "\\n?\\+{3}",
terminator: "\\s*\\={3}\\n?",
lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\[\\>]*\\^)?)?(\\*)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
handler: function(w)
{
lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
{
// var defopen=lookaheadMatch[1]
// var cookiename=lookaheadMatch[2]
// var header=lookaheadMatch[3]
// var panelwidth=lookaheadMatch[4]
// var transient=lookaheadMatch[5]
// var class=lookaheadMatch[6]
// var label=lookaheadMatch[7]
// var openlabel=lookaheadMatch[8]
// var panelID=lookaheadMatch[9]
// var blockquote=lookaheadMatch[10]
// var deferred=lookaheadMatch[11]
// location for rendering button and panel
var place=w.output;
// default to closed, no cookie, no accesskey, no alternate text/tip
var show="none"; var cookie=""; var key="";
var closedtext=">"; var closedtip="";
var openedtext="<"; var openedtip="";
// extra "+", default to open
if (lookaheadMatch[1]) show="block";
// cookie, use saved open/closed state
if (lookaheadMatch[2]) {
cookie=lookaheadMatch[2].trim().slice(1,-1);
cookie="chkSlider"+cookie;
if (config.options[cookie]==undefined)
{ config.options[cookie] = (show=="block") }
show=config.options[cookie]?"block":"none";
}
// parse label/tooltip/accesskey: [label=X|tooltip]
if (lookaheadMatch[7]) {
var parts=lookaheadMatch[7].trim().slice(1,-1).split("|");
closedtext=parts.shift();
if (closedtext.substr(closedtext.length-2,1)=="=")
{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
openedtext=closedtext;
if (parts.length) closedtip=openedtip=parts.join("|");
else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
}
// parse alternate label/tooltip: [label|tooltip]
if (lookaheadMatch[8]) {
var parts=lookaheadMatch[8].trim().slice(1,-1).split("|");
openedtext=parts.shift();
if (parts.length) openedtip=parts.join("|");
else openedtip="hide "+openedtext;
}
var title=show=='block'?openedtext:closedtext;
var tooltip=show=='block'?openedtip:closedtip;
// create the button
if (lookaheadMatch[3]) { // use "Hn" header format instead of button/link
var lvl=(lookaheadMatch[3].length>6)?6:lookaheadMatch[3].length;
var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,lookaheadMatch[6],title);
btn.onclick=onClickNestedSlider;
btn.setAttribute("href","javascript:;");
btn.setAttribute("title",tooltip);
}
else
var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,lookaheadMatch[6]);
btn.innerHTML=title; // enables use of HTML entities in label
// set extra button attributes
btn.setAttribute("closedtext",closedtext);
btn.setAttribute("closedtip",closedtip);
btn.setAttribute("openedtext",openedtext);
btn.setAttribute("openedtip",openedtip);
btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
btn.defOpen=lookaheadMatch[1]!=null; // save default open/closed state (boolean)
btn.keyparam=key; // save the access key letter ("" if none)
if (key.length) {
btn.setAttribute("accessKey",key); // init access key
btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
}
btn.onmouseover=function(event) // mouseover on button aligns floater position with button
{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel,this.sliderPanel.className); }
// create slider panel
var panelClass=lookaheadMatch[4]?"floatingPanel":"sliderPanel";
var panelID=lookaheadMatch[9]; if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
panel.button = btn; // so the slider panel know which button it belongs to
btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
panel.defaultPanelWidth=(lookaheadMatch[4] && lookaheadMatch[4].length>2)?lookaheadMatch[4].slice(1,-1):"";
panel.setAttribute("transient",lookaheadMatch[5]=="*"?"true":"false");
panel.style.display = show;
panel.style.width=panel.defaultPanelWidth;
panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this,this.className); }
// render slider (or defer until shown)
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
if ((show=="block")||!lookaheadMatch[11]) {
// render now if panel is supposed to be shown or NOT deferred rendering
w.subWikify(lookaheadMatch[10]?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
// align floater position with button
if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel,panelClass);
}
else {
var src = w.source.substr(w.nextMatch);
var endpos=findMatchingDelimiter(src,"+++","===");
panel.setAttribute("raw",src.substr(0,endpos));
panel.setAttribute("blockquote",lookaheadMatch[10]?"true":"false");
panel.setAttribute("rendered","false");
w.nextMatch += endpos+3;
if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
if (config.options.chkDebugLazySliderDefer) alert("deferred '"+title+"':\n\n"+panel.getAttribute("raw"));
}
}
}
}
)
// TBD: ignore 'quoted' delimiters (e.g., "{{{+++foo===}}}" isn't really a slider)
function findMatchingDelimiter(src,starttext,endtext) {
var startpos = 0;
var endpos = src.indexOf(endtext);
// check for nested delimiters
while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
// count number of nested 'starts'
var startcount=0;
var temp = src.substring(startpos,endpos-1);
var pos=temp.indexOf(starttext);
while (pos!=-1) { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
// set up to check for additional 'starts' after adjusting endpos
startpos=endpos+endtext.length;
// find endpos for corresponding number of matching 'ends'
while (startcount && endpos!=-1) {
endpos = src.indexOf(endtext,endpos+endtext.length);
startcount--;
}
}
return (endpos==-1)?src.length:endpos;
}
//}}}
//{{{
window.onClickNestedSlider=function(e)
{
if (!e) var e = window.event;
var theTarget = resolveTarget(e);
var theLabel = theTarget.firstChild.data;
var theSlider = theTarget.sliderPanel
var isOpen = theSlider.style.display!="none";
// toggle label
theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
// toggle tooltip
theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));
// deferred rendering (if needed)
if (theSlider.getAttribute("rendered")=="false") {
if (config.options.chkDebugLazySliderRender)
alert("rendering '"+theLabel+"':\n\n"+theSlider.getAttribute("raw"));
var place=theSlider;
if (theSlider.getAttribute("blockquote")=="true")
place=createTiddlyElement(place,"blockquote");
wikify(theSlider.getAttribute("raw"),place);
theSlider.setAttribute("rendered","true");
}
// show/hide the slider
if(config.options.chkAnimate && (theSlider.className!='floatingPanel' || config.options.chkFloatingSlidersAnimate))
anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
else
theSlider.style.display = isOpen ? "none" : "block";
// reset to default width (might have been changed via plugin code)
theSlider.style.width=theSlider.defaultPanelWidth;
// align floater panel position with target button
if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider,theSlider.className);
// if showing panel, set focus to first 'focus-able' element in panel
if (theSlider.style.display!="none") {
var ctrls=theSlider.getElementsByTagName("*");
for (var c=0; c<ctrls.length; c++) {
var t=ctrls[c].tagName.toLowerCase();
if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
{ ctrls[c].focus(); break; }
}
}
var cookie=theTarget.sliderCookie;
if (cookie && cookie.length) {
config.options[cookie]=!isOpen;
if (config.options[cookie]!=theTarget.defOpen)
saveOptionCookie(cookie);
else { // remove cookie if slider is in default display state
var ex=new Date(); ex.setTime(ex.getTime()-1000);
document.cookie = cookie+"=novalue; path=/; expires="+ex.toGMTString();
}
}
// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
// but allow plain click to bubble up to page background (to dismiss open popup, if any)
if (e.shiftKey) { e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
return false;
}
//}}}
//{{{
// click in document background closes transient panels
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);
// call original click handler
if (document.nestedSliders_savedOnClick)
var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
// if click was inside transient panel (or something contained by a transient panel)... leave it alone
var p=target;
while (p)
if ((p.className=="floatingPanel"||p.className=="sliderPanel")&&p.getAttribute("transient")=="true") break;
else p=p.parentNode;
if (p) return retval;
// otherwise, find and close all transient panels...
var all=document.all?document.all:document.getElementsByTagName("DIV");
for (var i=0; i<all.length; i++) {
// if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
// otherwise, if the panel is currently visible, close it by clicking it's button
if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button})
}
return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel,panelClass) {
if (panelClass=="floatingPanel") {
var left=0;
var top=btn.offsetHeight;
if (place.style.position!="relative") {
var left=findPosX(btn);
var top=findPosY(btn)+btn.offsetHeight;
var p=place; while (p && p.className!='floatingPanel') p=p.parentNode;
if (p) { left-=findPosX(p); top-=findPosY(p); }
}
if (findPosX(btn)+panel.offsetWidth > getWindowWidth()) // adjust position to stay inside right window edge
left-=findPosX(btn)+panel.offsetWidth-getWindowWidth()+15; // add extra 15px 'fudge factor'
panel.style.left=left+"px"; panel.style.top=top+"px";
}
}
function getWindowWidth() {
if(document.width!=undefined)
return document.width; // moz (FF)
if(document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
return document.documentElement.clientWidth; // IE6
if(document.body && ( document.body.clientWidth || document.body.clientHeight ) )
return document.body.clientWidth; // IE4
if(window.innerWidth!=undefined)
return window.innerWidth; // IE - general
return 0; // unknown
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider animation handler 'stop' handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }
// TW2.2+
// hijack Morpher animation handler 'stop' handler so overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
Morpher.prototype.coreStop = Morpher.prototype.stop;
Morpher.prototype.stop = function()
{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }
}
//}}}
{{{
version.extensions.newcalendar = { major: 1, minor: 1, revision: 0, date: new Date(2005, 10, 02)};
// --------------------------------------------------------------------
// Calendar
// --------------------------------------------------------------------
config.macros.newcalendar = {holidays: []};
config.macros.newcalendar.options = {
// months as they appear in the newcalendar's title
newcalendarMonths: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"],
// week day titles as they appear on the newcalendar
newcalendarWeekDays: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa"],
// day week starts from (normally 0-Su or 1-Mo)
newcalendarWeekStart: 1,
newcalendarToday: "Oggi",
newcalendarHoliday: "Festività: ",
newcalendarLongDateFormat: "0DD MMM YYYY",
newcalendarShortDateFormat: "0DD MMM",
newcalendarTag: ["Promemoria"]
};
/***************************************************************************
** Internal functions
***************************************************************************/
config.macros.newcalendar.newcalendarIsHoliday = function(date) {
var cm = config.macros.newcalendar;
var longHoliday = date.formatString(cm.options.newcalendarLongDateFormat);
var shortHoliday = date.formatString(cm.options.newcalendarShortDateFormat);
for(var i = 0; i < cm.holidays.length; i++) {
var holiday = cm.holidays[i].split(":");
if(holiday[0] == longHoliday || holiday[0] == shortHoliday) {
return holiday[1];
}
}
return null;
}
config.macros.newcalendar.onClickOtherDay = function(e) {
var day = this.getAttribute('tiddlylink');
story.displayTiddler(null,day,DEFAULT_EDIT_TEMPLATE);
for(var i=0; i<config.macros.newcalendar.options.newcalendarTag.length; i++){
story.setTiddlerTag(day, config.macros.newcalendar.options.newcalendarTag[i], i);
}
story.focusTiddler(day,"text");
}
config.macros.newcalendar.getPopupText = function(title) {
var popup_entries = store.getTiddlerText(title).split("\n");
var popup = popup_entries[0];
if(popup_entries.length>1) popup += " ...";
return popup;
}
config.macros.newcalendar.findCalendar = function(child) {
var parent;
while (child && child.parentNode) {
parent = child.parentNode;
if (parent.id == "newcalendarWrapper") {
return parent;
}
child = parent;
}
return null;
}
config.macros.newcalendar.selectDate = function(e) {
if (!e) var e = window.event;
var cm = config.macros.newcalendar;
var newcalendar = cm.findCalendar(this);
if (newcalendar) {
var d = this.getAttribute("date");
if (d != null) {
cm.makeCalendar(newcalendar, new Date(new Number(d)));
}
}
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return false;
}
config.macros.newcalendar.makeCalendar = function(newcalendar, dt_current) {
var cm = config.macros.newcalendar;
var dt_today = new Date(new Number(newcalendar.getAttribute("today")));
var currentDay = new Date(new Number(newcalendar.getAttribute("currentDay")));
var setControls = newcalendar.getAttribute("setControls");
newcalendar.setAttribute("date", dt_current.valueOf());
while (newcalendar.hasChildNodes())
newcalendar.removeChild(newcalendar.firstChild);
if(setControls==1){
// get same date in the previous year
var dt_prev_year = new Date(dt_current);
dt_prev_year.setFullYear(dt_prev_year.getFullYear() - 1);
if (dt_prev_year.getDate() != dt_current.getDate())
dt_prev_year.setDate(0);
// get same date in the next year
var dt_next_year = new Date(dt_current);
dt_next_year.setFullYear(dt_next_year.getFullYear() + 1);
if (dt_next_year.getDate() != dt_current.getDate())
dt_next_year.setDate(0);
// get same date in the previous month
var dt_prev_month = new Date(dt_current);
dt_prev_month.setMonth(dt_prev_month.getMonth() - 1);
if (dt_prev_month.getDate() != dt_current.getDate())
dt_prev_month.setDate(0);
// get same date in the next month
var dt_next_month = new Date(dt_current);
dt_next_month.setMonth(dt_next_month.getMonth() + 1);
if (dt_next_month.getDate() != dt_current.getDate())
dt_next_month.setDate(0);
}
// get first day to display in the grid for current month
var dt_firstday = new Date(dt_current);
dt_firstday.setDate(1);
dt_firstday.setDate(1 - (7 + dt_firstday.getDay() - cm.options.newcalendarWeekStart) % 7);
var area, header;
var line, cell, i;
// 1 - newcalendar header table
// 2 - print weekdays titles
// 3 - newcalendar days table
newcalendar.cellPadding = 0;
newcalendar.cellSpacing = 0;
area = createTiddlyElement(newcalendar, "tbody");
// 1 - newcalendar header table
header = createTiddlyElement(area,"tr", "newcalendarHeader");
header.cellPadding = 0;
header.cellSpacing = 0;
if(setControls==1){
var headerValues = [
[ "<<", "selectYear", dt_prev_year.valueOf() ],
[ "<", "selectMonth", dt_prev_month.valueOf() ],
[ cm.options.newcalendarMonths[dt_current.getMonth()] + ' ' + dt_current.getFullYear(),
"selectToday", dt_today.valueOf() ],
[ ">", "selectMonth", dt_next_month.valueOf() ],
[ ">>", "selectYear", dt_next_year.valueOf() ]
];
for (i = 0; i < headerValues.length; ++i) {
var link = createTiddlyElement(header,"td", null, null, headerValues[i][0]);
if(i==2) link.colSpan=3;
link.onclick = cm.selectDate;
link.setAttribute("date", headerValues[i][2]);
}
} else {
var link = createTiddlyElement(header,"td", null, null, cm.options.newcalendarMonths[dt_current.getMonth()] + ' ' + dt_current.getFullYear());
link.colSpan=7;
}
// 2 - print weekdays titles
line = createTiddlyElement(area, "tr", "weekNames");
for (var n = 0; n < 7; ++n) {
createTiddlyElement(line, "td", null, null, cm.options.newcalendarWeekDays[(cm.options.newcalendarWeekStart + n)%7]);
}
// 3 - newcalendar days table
var dt_current_day = new Date(dt_firstday);
var day_class;
var title;
var holiday_name;
var popup;
var clickHandler;
while (dt_current_day.getMonth() == dt_current.getMonth() ||
dt_current_day.getMonth() == dt_firstday.getMonth()) {
// print row header
line = createTiddlyElement(area, "tr", "newcalendarLine", null, null);
for (var n_current_wday = 0; n_current_wday < 7; ++n_current_wday) {
title = dt_current_day.formatString(cm.options.newcalendarLongDateFormat);
clickHandler = cm.onClickOtherDay;
popup = null;
holiday_name = cm.newcalendarIsHoliday(dt_current_day);
if (holiday_name != null) {
// holidays
day_class = "holiDay";
popup = cm.options.newcalendarHoliday + holiday_name;
} else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6) {
// weekend days
day_class = "weekDay";
} else {
// print working days of current month
day_class = "workingDay";
}
if(dt_current_day.getMonth() == dt_current.getMonth()){
if (currentDay.valueOf() == dt_current_day.valueOf()) {
// print current date
if (store.tiddlerExists(title)) {
// day has a tiddler associated with it
day_class += " currentscheduledDay";
clickHandler = onClickTiddlerLink;
popup = cm.options.newcalendarToday + ": "+ cm.getPopupText(title);
} else {
day_class += " currentDay";
popup = cm.options.newcalendarToday;
}
}
if (store.tiddlerExists(title) && dt_current_day.valueOf() != dt_today.valueOf()) {
// day has a tiddler associated with it
day_class += " scheduledDay";
clickHandler = onClickTiddlerLink;
popup = cm.getPopupText(title);
}
}
// extra formatting for days of previous or next month
if (dt_current_day.getMonth() != dt_current.getMonth()) {
day_class += " otherMonthDay";
}
var text = dt_current_day.getDate();
var cell = createTiddlyElement(line, "td", null, day_class, text);
cell.onclick=clickHandler;
cell.setAttribute("date", dt_current_day.valueOf());
cell.setAttribute("tiddlyLink", title);
if(popup) cell.setAttribute("title", popup);
dt_current_day.setDate(dt_current_day.getDate()+1);
}
}
}
config.macros.newcalendar.handler = function(place, macroName, params) {
var start_date = new Array();
var date;
var n_rows = 1;
var n_cols = 1;
var n_months = 1;
var setControls = 1;
switch(params.length){
case 0:
date = new Date();
// filter time values off
start_date[0] = new Date(date.getFullYear(), date.getMonth(), date.getDate());
break;
case 1:
for(var i = 0; i < 12; i++){
start_date[i] = new Date(params[0], i, 1);
}
n_rows = 4;
n_cols = 3;
n_months = 12;
break;
case 2:
start_date[0] = new Date(params[0], params[1]-1, 1);
break;
case 3:
n_cols = 3;
n_months = params[2];
for(var i = 0; i < n_months; i++){
start_date[i] = new Date(params[0], params[1]-1+i, 1);
}
n_rows = Math.max(1,Math.ceil(n_months/n_cols));
n_cols = Math.min(n_cols,n_months);
break;
case 4:
n_months = params[2];
n_cols = params[3];
for(var i = 0; i < n_months; i++){
start_date[i] = new Date(params[0], params[1]-1+i, 1);
}
n_rows = Math.max(1,Math.ceil(n_months/n_cols));
n_cols = Math.min(n_cols,n_months);
break;
}
if(n_months>1) setControls = 0;
var currentDay = new Date();
currentDay = new Date(currentDay.getFullYear(), currentDay.getMonth(), currentDay.getDate());
var holder = createTiddlyElement(place, "table", null,"newcalendarHolder");
var holderTable = createTiddlyElement(holder, "tbody");
for(var i = 0; i < n_rows; i++){
var holderLine = createTiddlyElement(holderTable, "tr");
for(var j = 0; j < n_cols; j++){
var holderCell = createTiddlyElement(holderLine, "td");
if(n_cols*i+j+1<=n_months){
var newcalendar = createTiddlyElement(holderCell, "table", "newcalendarWrapper");
newcalendar.setAttribute("name", "newcalendarWrapper");
newcalendar.setAttribute("setControls", setControls);
newcalendar.setAttribute("today", start_date[n_cols*i+j].valueOf());
newcalendar.setAttribute("currentDay", currentDay.valueOf());
config.macros.newcalendar.makeCalendar(newcalendar, start_date[n_cols*i+j]);
}
}
}
}
function refreshCalendars(hint) {
var newcalendars = document.getElementsByName("newcalendarWrapper");
var i, c;
for (i = 0; i < newcalendars.length; ++i) {
c = newcalendars.item(i);
if (c.id == "newcalendarWrapper") {
config.macros.newcalendar.makeCalendar(c, new Date(new Number(c.getAttribute("date"))));
}
}
}
store.addNotification(null, refreshCalendars);
setStylesheet("/***\n!Calendar Styles\n***/\n/*{{{*/\n .viewer .newcalendarHolder {\n margin-left: auto;\n margin-right: auto;\n border: none;\n}\n\n .viewer .newcalendarHolder table {\n border: none;\n margin: 0;\n}\n\n .viewer .newcalendarHolder tr {\n border: none;\n vertical-align: top;\n}\n\n .viewer .newcalendarHolder td {\n border: none;\n vertical-align: top;\n}\n\n .viewer #newcalendarWrapper {\n width: 21em;\n border: 2px solid #4682b4;\n cursor: pointer;\n}\n\n #newcalendarWrapper #newcalendarLine td {\n height: 2.5em;\n}\n\n #newcalendarWrapper tr {\n border:none;\n}\n\n #newcalendarWrapper td {\n text-align: center;\n vertical-align: middle;\n width: 14.28%;\n border:none;\n}\n\n #newcalendarWrapper #newcalendarHeader td{\n color: #ffffff;\n background-color: #4682b4;\n height: 2em;\n}\n\n #newcalendarWrapper #weekNames td {\n color: #ffffff;\n background-color: #87cefa;\n height: 2em;\n}\n\n #newcalendarWrapper .weekDay {\n background-color: #ccff99;\n}\n\n #newcalendarWrapper .holiDay {\n background-color: #9acd32;\n}\n\n #newcalendarWrapper .currentDay {\n border: solid #ff0000 2px;\n font-weight: bold;\n}\n\n #newcalendarWrapper .currentscheduledDay {\n border: solid #ff0000 2px;\n font-weight: bold;\n}\n\n #newcalendarWrapper .workingDay {\n background-color: #ffffff;\n}\n\n #newcalendarWrapper .scheduledDay {\n border: solid orange 2px;\n}\n\n #newcalendarWrapper .otherMonthDay {\n background-color: #999;\n}\n\n/*}}}*/","CalendarStyles");
}}}
Queste [[Opzioni]] sono utilizzate per personalizzare il tuo ~TiddlyWiky e vengono salvate nel browser.
Digita un nome utente per firmare le tue modifiche. Usa un formato di parola Wiki (es. ~MarioRossi)
<<option txtUserName>>
<<option chkSaveBackups>> SalvaBackups
<<option chkAutoSave>> SalvataggioAutomatico
<<option chkGenerateAnRssFeed>> GeneraUnArchivioRSS
<<option chkRegExpSearch>> RicercaEstesa
<<option chkCaseSensitiveSearch>> ConsideraCaratteriInRicerca
<<option chkAnimate>> AbilitaAnimazioni
----
Apri OpzioniAvanzate
Nella SideBar, cliccando sulla voce Opzioni, si apre il pannello di controllo delle opzioni di ~TiddlyWiki. Le opzioni sono:
* //''~SalvaBackups''// - questa opzione, se selezionata, consente il salvataggio di backup del vostro wiki. In pratica, ogni qual volta salvate le modifiche, ~TiddlyWiki salverà nella cartella corrente amche una copia di backup del file HTML. Questa copia di backup si differenzia dal file originario perchè nel nome del file sarà presente la data e l'orario correnti. E' fortemente consigliato, per evitare perdite ai dati, che questa opzione sia selezionata;
* //''~SalvataggioAutomatico''// - questa opzione, se selezionata, comporta il salvataggio automatico delle modifiche fatte al vostro wiki ogni qual volta editate un tiddler. E' chiaro che, per evitare che la vostra cartella si riempia rapidamente di copie di backup del vostro wiki, è opportuno scegliere tra questa opzione e quella di salvataggio dei backups;
* //''~GeneraUnArchivioRSS''// - questa opzione permette di abilitare una nuova funzionalità di ~TiddlyWiki. In particolare, se questa opzione è selezionata, ogni qual volta salvate il vostro wiki, ~TiddlyWiki automaticamente salverà un file con lo stesso nome del vostro wiki, formattato secondo lo standard RSS 2.0, con estensione .xml. Questo file riporta le ultime modifiche effettuate ai tiddler che compongono il vostro sito e può essere utilizzato dagli utenti del vostro sito, con un software di gestione feed RSS, per leggere le ultime modifiche effettuate. Per l'utilizzo di questa funzionalità è necessario aver personalizzato il tiddler SiteUrl con l'URL che specifica dove è pubblicato il vostro sito;
* //''~RicercaEstesa''// - questa opzione permette di utilizzare i caratteri speciali nella ricerca. Per questo argomento è importante tener presente che le funzioni di ricerca di ~TiddlyWiki possono utilizzare la sintassi [[RegExp|http://www.programmershelp.co.uk/docs/javascript/regexp.html#1193188]];
* //''~ConsideraCaratteriInRicerca''// - questa opzione permette di abilitare la ricerca sensibile alle maiuscole e minuscole del testo o della parola;
* //''~AbilitaAnimazioni''// - questa opzione, se selezionata, abilita l'effetto di animazione nell'apertura dei tiddler.
<<option chkOpenInNewWindow>> Apri collegamenti in una nuova finestra
<<option chkSaveEmptyTemplate>> SalvaModelloVuoto
<<option chkToggleLinks>> Cliccando su un collegamento ad un frammento già aperto lo chiude
^^(evita con Control o altro tasto modificabile)^^
<<option chkHttpReadOnly>> Non rendere editabile dal web
<<option chkForceMinorUpdate>> Tratta le modifiche minori e mantieni data ed ora precedenti
^^(disattiva con Shift in modifica o con la combinazione ~Ctrl-Shift-Enter)^^
<<option chkConfirmDelete>> Richiedi Conferma prima di eliminare il frammento
Numero massimo di righe per ciascun frammento: <<option txtMaxEditRows>>
Percorso della directory di backup: <<option txtBackupFolder>>
''Rendi le opzioni private: ''<<option chkUsePrivateSettings>> Utilizza opzioni private <<option chkMakeSettingPrivateWhenChanged>> Rendi tutte le opzioni private   [[Visualizza le impostazioni]].
^^(Le opzioni private sono memorizzate in questo ~TiddlyWiki. Le opzioni condivise sono memorizzate in cookies e condivise da tutte le copie locali di ~TiddlyWiki. Per maggiori informazioni sull'uso di questo plugin consultare [[Documentazione SettingsPlugin]].)^^
<<option chkInsertTabs>> Usa il tasto tab per inserire caratteri di tabulazione invece di saltare al prossimo campo
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<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='macro' force='true' macro='slider chkSideBarTabs SideBarTabs "Indice »" "Mostra le liste dei tiddlers"'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
/***
|''Name:''|PasswordOptionPlugin|
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Version:''|1.0.2|
|''Date:''|Apr 19, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.PasswordOptionPlugin = {
major: 1, minor: 0, revision: 2,
date: new Date("Apr 19, 2007"),
source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
author: 'BidiX (BidiX (at) bidix (dot) info',
license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
coreVersion: '2.2.0 (Beta 5)'
};
config.macros.option.passwordCheckboxLabel = "Save this password on this computer";
config.macros.option.passwordInputType = "password"; // password | text
setStylesheet(".pasOptionInput {width: 11em;}\n","passwordInputTypeStyle");
merge(config.macros.option.types, {
'pas': {
elementType: "input",
valueField: "value",
eventName: "onkeyup",
className: "pasOptionInput",
typeValue: config.macros.option.passwordInputType,
create: function(place,type,opt,className,desc) {
// password field
config.macros.option.genericCreate(place,'pas',opt,className,desc);
// checkbox linked with this password "save this password on this computer"
config.macros.option.genericCreate(place,'chk','chk'+opt,className,desc);
// text savePasswordCheckboxLabel
place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));
},
onChange: config.macros.option.genericOnChange
}
});
merge(config.optionHandlers['chk'], {
get: function(name) {
// is there an option linked with this chk ?
var opt = name.substr(3);
if (config.options[opt])
saveOptionCookie(opt);
return config.options[name] ? "true" : "false";
}
});
merge(config.optionHandlers, {
'pas': {
get: function(name) {
if (config.options["chk"+name]) {
return encodeCookie(config.options[name].toString());
} else {
return "";
}
},
set: function(name,value) {config.options[name] = decodeCookie(value);}
}
});
// need to reload options to load passwordOptions
loadOptionsCookie();
/*
if (!config.options['pasPassword'])
config.options['pasPassword'] = '';
merge(config.optionsDesc,{
pasPassword: "Test password"
});
*/
//}}}
/***
|Name|PlayerPlugin|
|Source|http://www.TiddlyTools.com/#PlayerPlugin|
|Version|1.1.3|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Embed a media player in a tiddler|
!!!!!Usage
<<<
{{{<<player [id=xxx] [type] [URL] [width] [height] [autoplay|true|false] [showcontrols|true|false] [extras]>>}}}
''id=xxx'' is optional, and specifies a unique identifier for each embedded player. note: this is required if you intend to display more than one player at the same time.
''type'' is optional, and is one of the following: ''windows'', ''realone'', ''quicktime'', ''flash'', ''image'' or ''iframe''. If the media type is not specified, the plugin automatically detects Windows, Real, QuickTime, Flash video or JPG/GIF images by matching known file extensions and/or specialized streaming-media transfer protocols (such as RTSP:). For unrecognized media types, the plugin displays an error message.
''URL'' is the location of the media content
''width'' and ''height'' are the dimensions of the video display area (in pixels)
''autoplay'' or ''true'' or ''false'' is optional, and specifies whether the media content should begin playing as soon as it is loaded, or wait for the user to press the "play" button. Default is //not// to autoplay.
''showcontrols'' or ''true'' or ''false'' is optional, and specifies whether the embedded media player should display its built-in control panel (e.g., play, pause, stop, rewind, etc), if any. Default is to display the player controls.
''extras'' are optional //pairs// of parameters that can be passed to the embedded player, using the {{{<param name=xxx value=yyy>}}} HTML syntax.
''If you use [[AttachFilePlugin]] to encode and store a media file within your document, you can play embedded media content by using the title of the //attachment tiddler//'' as a parameter in place of the usual reference to an external URL. When playing an attached media content, you should always explicitly specify the media type parameter, because the name used for the attachment tiddler may not contain a known file extension from which a default media type can be readily determined.
<<<
!!!!!Configuration
<<<
Default player size:
width: <<option txtPlayerDefaultWidth>> height: <<option txtPlayerDefaultHeight>>
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''PlayerPlugin '' (tagged with <<tag systemConfig>>)
^^documentation and javascript for macro handling^^
<<<
!!!!!Revision History
<<<
''2007.10.15 [1.1.3]'' in loadURL(), add recognition for .PNG (still image), fallback to iframe for unrecognized media types
''2007.08.31 [1.1.2]'' added 'click-through' link for JPG/GIF images
''2007.06.21 [1.1.1]'' changed "hidecontrols" param to "showcontrols" and recognize true/false values in addition to 'showcontrols', added "autoplay" param (also recognize true/false values), allow "auto" as value for type param
''2007.05.22 [1.1.0]'' added support for type=="iframe" (displays src URL in an IFRAME)
''2006.12.06 [1.0.1]'' in handler(), corrected check for config.macros.attach (instead of config.macros.attach.getAttachment) so that player plugin will work when AttachFilePlugin is NOT installed. (Thanks to Phillip Ehses for bug report)
''2006.11.30 [1.0.0]'' support embedded media content using getAttachment() API defined by AttachFilePlugin or AttachFilePluginFormatters. Also added support for 'image' type to render JPG/GIF still images
''2006.02.26 [0.7.0]'' major re-write. handles default params better. create/recreate player objects via loadURL() API for use with interactive forms and scripts.
''2006.01.27 [0.6.0]'' added support for 'extra' macro params to pass through to object parameters
''2006.01.19 [0.5.0]'' Initial ALPHA release
''2005.12.23 [0.0.0]'' Started
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].
<<<
!!!!!Code
***/
// // macro definition
//{{{
version.extensions.player = {major: 1, minor: 1, revision: 3, date: new Date(2007,10,15)};
config.macros.player = {};
config.macros.player.html = {};
config.macros.player.handler= function(place,macroName,params) {
var id=null;
if (params[0].substr(0,3)=="id=") id=params.shift().substr(3);
var type="";
var p=params[0].toLowerCase();
if (p=="auto" || p=="windows" || p=="realone" || p=="quicktime" || p=="flash" || p=="image" || p=="iframe")
type=params.shift().toLowerCase();
var url=params.shift(); if (!url || !url.trim().length) url="";
if (url.length && config.macros.attach!=undefined) // if AttachFilePlugin is installed
if ((tid=store.getTiddler(url))!=null && tid.isTagged("attachment")) // if URL is attachment tiddler title
url=config.macros.attach.getAttachment(url); // replace TiddlerTitle with attachment-expanded URL
var width=params.shift();
var height=params.shift();
var autoplay=false;
if (params[0]=='autoplay'||params[0]=='true'||params[0]=='false')
autoplay=(params.shift()!='false');
var show=true;
if (params[0]=='showcontrols'||params[0]=='true'||params[0]=='false')
show=(params.shift()!='false');
var extras="";
while (params[0]!=undefined)
extras+="<param name='"+params.shift()+"' value='"+params.shift()+"'> ";
this.loadURL(place,id,type,url,width,height,autoplay,show,extras);
}
if (config.options.txtPlayerDefaultWidth==undefined) config.options.txtPlayerDefaultWidth="100%";
if (config.options.txtPlayerDefaultHeight==undefined) config.options.txtPlayerDefaultHeight="480"; // can't use "100%"... player height doesn't stretch right :-(
config.macros.player.loadURL=function(place,id,type,url,width,height,autoplay,show,extras) {
if (id==undefined) id="tiddlyPlayer";
if (!width) var width=config.options.txtPlayerDefaultWidth;
if (!height) var height=config.options.txtPlayerDefaultHeight;
if (url && (!type || !type.length || type=="auto")) { // determine type from URL
u=url.toLowerCase();
if ((u.indexOf('mms')!=-1)||(u.indexOf('.asx')!=-1)||(u.indexOf('.wvx')!=-1)||(u.indexOf('.wmv')!=-1)||(u.indexOf('.mp3')!=-1))
var type="windows";
else if ((u.indexOf('rtsp')!=-1)||(u.indexOf('.ram')!=-1)||(u.indexOf('.rpm')!=-1)||(u.indexOf('.rm' )!=-1)||(u.indexOf('.ra' )!=-1))
var type="realone";
else if ((u.indexOf('.mov')!=-1)||(u.indexOf('.qt' )!=-1))
var type="quicktime";
else if ((u.indexOf('.swf')!=-1)||(u.indexOf('.flv')!=-1))
var type="flash";
else if ((u.indexOf('.jpg')!=-1)||(u.indexOf('.gif')!=-1)||(u.indexOf('.png')!=-1))
var type="image";
else if ((u.indexOf('.htm')!=-1)||(u.indexOf('.html')!=-1))
var type="iframe";
}
if (!type || !config.macros.player.html[type]) var type="none";
if (!url) var url="";
if (show===undefined) var show=true;
if (!extras) var extras="";
if (type=="none" && url.trim().length) type="iframe"; // fallback to iframe for unrecognized media types
// adjust parameter values for player-specific embedded HTML
switch (type) {
case "windows":
autoplay=autoplay?"1":"0"; // player-specific param value
show=show?"1":"0"; // player-specific param value
break;
case "realone":
autoplay=autoplay?"true":"false";
show=show?"block":"none";
height-=show?60:0; // leave room for controls
break;
case "quicktime":
autoplay=autoplay?"true":"false";
show=show?"true":"false";
break;
case "image":
show=show?"block":"none";
break;
case "iframe":
show=show?"block":"none";
break;
}
// create containing div for player HTML
// and add or replace player in TW DOM structure
var newplayer = document.createElement("div");
newplayer.playerType=type;
newplayer.setAttribute("id",id+"_div");
var existing = document.getElementById(id+"_div");
if (existing && !place) place=existing.parentNode;
if (!existing)
place.appendChild(newplayer);
else {
if (place==existing.parentNode) place.replaceChild(newplayer,existing)
else { existing.parentNode.removeChild(existing); place.appendChild(newplayer); }
}
var html=config.macros.player.html[type];
html=html.replace(/%i%/mg,id);
html=html.replace(/%w%/mg,width);
html=html.replace(/%h%/mg,height);
html=html.replace(/%u%/mg,url);
html=html.replace(/%a%/mg,autoplay);
html=html.replace(/%s%/mg,show);
html=html.replace(/%x%/mg,extras);
newplayer.innerHTML=html;
}
//}}}
// // Player-specific API functions: isReady(id), isPlaying(id), toggleControls(id), showControls(id,flag)
//{{{
// status values:
// Windows: 0=Undefined, 1=Stopped, 2=Paused, 3=Playing, 4=ScanForward, 5=ScanReverse
// 6=Buffering, 7=Waiting, 8=MediaEnded, 9=Transitioning, 10=Ready, 11=Reconnecting
// RealOne: 0=Stopped, 1=Contacting, 2=Buffering, 3=Playing, 4=Paused, 5=Seeking
// QuickTime: 'Waiting', 'Loading', 'Playable', 'Complete', 'Error:###'
// Flash: 0=Loading, 1=Uninitialized, 2=Loaded, 3=Interactive, 4=Complete
config.macros.player.isReady=function(id)
{
var d=document.getElementById(id+"_div"); if (!d) return false;
var p=document.getElementById(id); if (!p) return false;
if (d.playerType=='windows') return !((p.playState==0)||(p.playState==7)||(p.playState==9)||(p.playState==11));
if (d.playerType=='realone') return (p.GetPlayState()>1);
if (d.playerType=='quicktime') return !((p.getPluginStatus()=='Waiting')||(p.getPluginStatus()=='Loading'));
if (d.playerType=='flash') return (p.ReadyState>2);
return true;
}
config.macros.player.isPlaying=function(id)
{
var d=document.getElementById(id+"_div"); if (!d) return false;
var p=document.getElementById(id); if (!p) return false;
if (d.playerType=='windows') return (p.playState==3);
if (d.playerType=='realone') return (p.GetPlayState()==3);
if (d.playerType=='quicktime') return (p.getPluginStatus()=='Complete');
if (d.playerType=='flash') return (p.ReadyState<4);
return false;
}
config.macros.player.showControls=function(id,flag) {
var d=document.getElementById(id+"_div"); if (!d) return false;
var p=document.getElementById(id); if (!p) return false;
if (d.playerType=='windows') { p.ShowControls=flag; p.ShowStatusBar=flag; }
if (d.playerType=='realone') { alert('show/hide controls not available'); }
if (d.playerType=='quicktime') // if player not ready, retry in one second
{ if (this.isReady(id)) p.setControllerVisible(flag); else setTimeout('config.macros.player.showControls("'+id+'",'+flag+')',1000); }
if (d.playerType=='flash') { alert('show/hide controls not available'); }
}
config.macros.player.toggleControls=function(id) {
var d=document.getElementById(id+"_div"); if (!d) return false;
var p=document.getElementById(id); if (!p) return false;
if (d.playerType=='windows') var flag=!p.ShowControls;
if (d.playerType=='realone') var flag=true; // TBD
if (d.playerType=='quicktime') var flag=!p.getControllerVisible();
if (d.playerType=='flash') var flag=true; // TBD
this.showControls(id,flag);
}
config.macros.player.fullScreen=function(id) {
var d=document.getElementById(id+"_div"); if (!d) return false;
var p=document.getElementById(id); if (!p) return false;
if (d.playerType=='windows') p.DisplaySize=3;
if (d.playerType=='realone') p.SetFullScreen();
if (d.playerType=='quicktime') { alert('full screen not available'); }
if (d.playerType=='flash') { alert('full screen not available'); }
}
//}}}
// // Player HTML
//{{{
// placeholder (no player)
config.macros.player.html.none=' \
<table id="%i%" width="%w%" height="%h%" style="background-color:#111;border:0;margin:0;padding:0;"> \
<tr style="background-color:#111;border:0;margin:0;padding:0;"> \
<td width="%w%" height="%h%" style="background-color:#111;color:#ccc;border:0;margin:0;padding:0;text-align:center;"> \
\
%u% \
\
</td></tr></table>';
//}}}
//{{{
// JPG/GIF/PNG still images
config.macros.player.html.image='\
<a href="%u%" target="_blank"><img width="%w%" height="%h%" style="display:%s%;" src="%u%"></a>';
//}}}
//{{{
// IFRAME web page viewer
config.macros.player.html.iframe='\
<iframe id="%i%" width="%w%" height="%h%" style="display:%s%;" src="%u%"></iframe>';
//}}}
//{{{
// Windows Media Player
// v7.1 ID: classid=CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6
// v9 ID: classid=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95
config.macros.player.html.windows=' \
<object id="%i%" width="%w%" height="%h%" style="margin:0;padding:0;width:%w%;height:%h%px;" \
classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" \
codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" \
align="baseline" border="0" \
standby="Loading Microsoft Windows Media Player components..." \
type="application/x-oleobject"> \
<param name="FileName" value="%u%"> <param name="ShowControls" value="%s%"> \
<param name="ShowPositionControls" value="1"> <param name="ShowAudioControls" value="1"> \
<param name="ShowTracker" value="1"> <param name="ShowDisplay" value="0"> \
<param name="ShowStatusBar" value="1"> <param name="AutoSize" value="1"> \
<param name="ShowGotoBar" value="0"> <param name="ShowCaptioning" value="0"> \
<param name="AutoStart" value="%a%"> <param name="AnimationAtStart" value="1"> \
<param name="TransparentAtStart" value="0"> <param name="AllowScan" value="1"> \
<param name="EnableContextMenu" value="1"> <param name="ClickToPlay" value="1"> \
<param name="InvokeURLs" value="1"> <param name="DefaultFrame" value="datawindow"> \
%x% \
<embed src="%u%" style="margin:0;padding:0;width:%w%;height:%h%px;" \
align="baseline" border="0" width="%w%" height="%h%" \
type="application/x-mplayer2" \
pluginspage="http://www.microsoft.com/windows/windowsmedia/download/default.asp" \
name="%i%" showcontrols="%s%" showpositioncontrols="1" \
showaudiocontrols="1" showtracker="1" showdisplay="0" \
showstatusbar="%s%" autosize="1" showgotobar="0" showcaptioning="0" \
autostart="%a%" autorewind="0" animationatstart="1" transparentatstart="0" \
allowscan="1" enablecontextmenu="1" clicktoplay="0" invokeurls="1" \
defaultframe="datawindow"> \
</embed> \
</object>';
//}}}
//{{{
// RealNetworks' RealOne Player
config.macros.player.html.realone=' \
<table width="%w%" style="border:0;margin:0;padding:0;"><tr style="border:0;margin:0;padding:0;"><td style="border:0;margin:0;padding:0;"> \
<object id="%i%" width="%w%" height="%h%" style="margin:0;padding:0;" \
CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"> \
<PARAM NAME="CONSOLE" VALUE="player"> \
<PARAM NAME="CONTROLS" VALUE="ImageWindow"> \
<PARAM NAME="AUTOSTART" Value="%a%"> \
<PARAM NAME="MAINTAINASPECT" Value="true"> \
<PARAM NAME="NOLOGO" Value="true"> \
<PARAM name="BACKGROUNDCOLOR" VALUE="#333333"> \
<PARAM NAME="SRC" VALUE="%u%"> \
%x% \
<EMBED width="%w%" height="%h%" controls="ImageWindow" type="audio/x-pn-realaudio-plugin" style="margin:0;padding:0;" \
name="%i%" \
src="%u%" \
console=player \
maintainaspect=true \
nologo=true \
backgroundcolor=#333333 \
autostart=%a%> \
</OBJECT> \
</td></tr><tr style="border:0;margin:0;padding:0;"><td style="border:0;margin:0;padding:0;"> \
<object id="%i%_controls" width="%w%" height="60" style="margin:0;padding:0;display:%s%" \
CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"> \
<PARAM NAME="CONSOLE" VALUE="player"> \
<PARAM NAME="CONTROLS" VALUE="All"> \
<PARAM NAME="NOJAVA" Value="true"> \
<PARAM NAME="MAINTAINASPECT" Value="true"> \
<PARAM NAME="NOLOGO" Value="true"> \
<PARAM name="BACKGROUNDCOLOR" VALUE="#333333"> \
<PARAM NAME="SRC" VALUE="%u%"> \
%x% \
<EMBED WIDTH="%w%" HEIGHT="60" NOJAVA="true" type="audio/x-pn-realaudio-plugin" style="margin:0;padding:0;display:%s%" \
controls="All" \
name="%i%_controls" \
src="%u%" \
console=player \
maintainaspect=true \
nologo=true \
backgroundcolor=#333333> \
</OBJECT> \
</td></tr></table>';
//}}}
//{{{
// QuickTime Player
config.macros.player.html.quicktime=' \
<OBJECT ID="%i%" WIDTH="%w%" HEIGHT="%h%" style="margin:0;padding:0;" \
CLASSID="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" \
CODEBASE="http://www.apple.com/qtactivex/qtplugin.cab"> \
<PARAM name="SRC" VALUE="%u%"> \
<PARAM name="AUTOPLAY" VALUE="%a%"> \
<PARAM name="CONTROLLER" VALUE="%s%"> \
<PARAM name="BGCOLOR" VALUE="#333333"> \
<PARAM name="SCALE" VALUE="aspect"> \
<PARAM name="SAVEEMBEDTAGS" VALUE="true"> \
%x% \
<EMBED name="%i%" WIDTH="%w%" HEIGHT="%h%" style="margin:0;padding:0;" \
SRC="%u%" \
AUTOPLAY="%a%" \
SCALE="aspect" \
CONTROLLER="%s%" \
BGCOLOR="#333333" \
EnableJavaSript="true" \
PLUGINSPAGE="http://www.apple.com/quicktime/download/"> \
</EMBED> \
</OBJECT>';
//}}}
//{{{
// Flash Player
config.macros.player.html.flash='\
<object id="%i%" width="%w%" height="%h%" style="margin:0;padding:0;" \
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" \
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"> \
<param name="movie" value="%u%"> \
<param name="quality" value="high"> \
<param name="SCALE" value="exactfit"> \
<param name="bgcolor" value="333333"> \
%x% \
<embed name="%i%" src="%u%" style="margin:0;padding:0;" \
height="%h%" width="%w%" quality="high" \
pluginspage="http://www.macromedia.com/go/getflashplayer" \
type="application/x-shockwave-flash" scale="exactfit"> \
</embed> \
</object>';
//}}}
Le funzionalità di TiddlyWiki possono essere estese [[installando plugin|Come installare Plugin]]. In rete sono disponibili molti siti che raccolgono e rendono disponibili plugin per ~TiddlyWiki. Se siete interessati a conoscere tali sviluppi, potete fare riferimento al sito del.icio.us consultando il tag ~TiddlyWikiPlugin [[del.icio.us/tag/tiddlywikiplugin|http://del.icio.us/tag/tiddlywikiplugin]] e alla seguente lista:
* ~TimoBenk's [[TiddlyTasks|http://vs241071.vserver.de/tiddlytasks.html]]
* ~BidiX's [[BidiXTW|http://www.bidix.info/TiddlyWiki/BidiXTW.html]]
* ~UdoBorkowski's [[abegoExtensions|http://tiddlywiki.abego-software.de/]]
* ~FrankDellaert's [[software collection|http://www.cc.gatech.edu/~dellaert/#Software]]
* ~DevonJones' [[TiddlyForge|http://www.tiddlyforge.net]]
* ~PaulPetterson's [[Paul's Notepad|http://thepettersons.org/PaulsNotepad.html]]
* ~DanielBaird's [[Tiddly W;nks|http://danielbaird.com/tiddlywinks/]]
* one_each's [[TiddlyWiki bits|http://webpages.charter.net/one_each/]]
* ~ClintChecketts' [[TiddlerWiki|http://checketts.objectis.net/wiki/]]
* ~EricShulman's ~TiddlyTools http://www.tiddlytools.com/
* ~SteveRumsby's ~YetAnotherTiddlyWikiAdaptation http://www.rumsby.org/yatwa/
* ~SimonBaird's ~MonkeyPirateTiddlyWiki http://simonbaird.com/mptw/
* ~AlanHecht's ~TiddlyWikiExtensions http://www.personal.psu.edu/staff/a/c/ach12/tiddlywiki/extensions.htm
* zRenard's ~TiddlyWiki ~StyleSheetRepository http://www.zrenard.com/tiddlywiki/stylesrepository.php
Se volete, inoltre, approfondire il tema degli //adattamenti// di ~TiddlyWiki leggete anche il tiddler [[Adattamenti di TiddlyWiki]].
Poiché tutti gli utilizzatori del vostro sito ~TiddlyWiki possono scaricarlo nella sua interezza sul proprio PC, ognuno di essi può utilizzare la propria ''copia locale'' del vostro sito, in modalità offline per riferimento e/o per ulteriori approfondimenti. Questa caratteristica, associata al fatto che tipicamente un sito ~TiddlyWiki difficilmente ha dimensioni superiori alle centinaia di Kb (//le dimensioni di questa guida, ad esempio, sono dell'ordine dei 400Kb//), consente ad un utente di trasportare, su una normale pendrive USB da 256Mb, una notevole quantità di informazioni.
Poiché un sito realizzato con ~TiddlyWiki è costituito da un ''singolo'' file HTML, è necessario considerare che quando il vostro sito è visitato da qualcuno, ''l'intero'' sito è trasferito sul computer del visitatore, anche se quest'ultimo ne visualizza solo una parte. Questo significa che, inizialmente, la rete è impegnata per realizzare tale trasferimento: è evidente che, a seconda delle dimensioni del vostro sito wiki, l'impegno di banda può essere più o meno considerevole.
L'aspetto positivo di questa caratteristica di ~TiddlyWiki è che una volta che il vostro sito è stato trasferito sul computer del visitatore, //non è neccessaria alcuna ulteriore interazione con il server web che ospita il sito// per consentire all'utilizzatore di leggere tutte le parti che compongono il sito stesso. L'utilizzatore del vostro sito, può continuare a cliccare sui collegamenti ipertestuali, aprire e chiudere tiddler, ecc., ecc. utilizzando esclusivamente la ''copia locale'' del vostro sito senza alcun bisogno di utilizzare la rete per accedere ai contenuti del vostro sito. Questo fatto comporta un evidente risparmio di risorse di rete. Chi sviluppa un sito web con ~TiddlyWiki dovrebbe cercare di mantenere le dimensioni del sito, cioè del file HTML che lo rappresenta, quanto più contenute possibili.
Questa opzione permette di utilizzare i caratteri speciali nella ricerca. Per questo argomento è importante tener presente che le funzioni di ricerca di ~TiddlyWiki possono utilizzare la sintassi [[RegExp|http://www.programmershelp.co.uk/docs/javascript/regexp.html#1193188]].
La modalità SafeMode può essere selezionata specificando {{{#start:safe}}} alla fine dell'URL del vostro ~TiddlyWiki (leggete, per ulteriori dettagli, StartupParameters). Con questa modalità ~TiddlyWiki ''non'' esegue alcun [[Plugin]] e non legge/scrive alcun cookie. Questa modalità può essere utile nel caso si verifichino problemi di funzionamento in ~TiddlyWiki a causa di Plugin installati.
Questa opzione, se selezionata, consente il salvataggio di backup del vostro wiki. In pratica, ogni qual volta salvate le modifiche, ~TiddlyWiki salverà nella cartella corrente amche una copia di backup del file HTML. Questa copia di backup si differenzia dal file originario perchè nel nome del file sarà presente la data e l'orario correnti. E' fortemente consigliato, per evitare perdite ai dati, che questa opzione sia selezionata.
Questa opzione, se abilitata, nel momento in cui salvate il vostro wiki, salva anche un modello vuoto del vostro wiki. Questa opzione è destinata ad essere utilizzata da chi distribuisce dei propri [[Adattamenti di TiddlyWiki]] o delle proprie personalizzazioni. Il file di modello vuoto viene chiamato 'empty.html'.
Una delle peculiari caratteristiche di ~TiddlyWiki è che ''non'' potete editare //direttamente via web// siti realizzati con questa tecnologia. Sebbene utilizzando un sito realizzato con ~TiddlyWiki si possa avere l'impressione che le sue funzionalità di editing dei contenuti possano effettivamente corrispondere a modifiche online del sito web, è chiaro che il file HTML che realizza il sito deve essere presente localmente per consentire il salvataggio delle modifiche effettuate. Questo significa che se avete effettuato delle modifiche al vostro sito, dopo averle salvate cliccando sulla voce di menù //Salva modifiche// della SideBar, avete necessità di trasferire in qualche modo il corrispondente file HTML sul server web che lo ospita. Questa operazione può rappresentare una complicazione a seconda della vostra eperienza sull'utilizzo di programmi di trasferimento file. Tipicamente i server che ospitano siti web, mettono a disposizione dei propri utenti, strumenti di trasferimento file più o meno assistiti; se viene resa disponibile la modalità di trasferimento file FTP, valutate l'opzione di installare nel vostro browser Firefox una delle estensioni che rende disponibile direttamente nel browser tale funzionalità, come ad esempio [[FireFTP|https://addons.mozilla.org/extensions/moreinfo.php?id=684]]. In questo modo, utilizzando anche una versione di [[Firefox portabile|http:www.portableapps.com]] installata su una pendrive, avete un ambiente di sviluppo e di gestione del vostro sito web realmente portabile.
Questa opzione, se selezionata, comporta il salvataggio automatico delle modifiche fatte al vostro wiki ogni qual volta editate un tiddler. E' chiaro che, per evitare che la vostra cartella si riempia rapidamente di copie di backup del vostro wiki, è opportuno scegliere tra questa opzione e quella di salvataggio dei backups.
~TiddlyWiki offre diversi comandi rapidi mediante le cosiddette scorciatoie da tastiera. Una scorciatoia da tastiera si ottiene digitando alcune lettere chiave unitamente ad un tasto speciale. Nei PC il tasto speciale è il tasto 'alt'; nei sistemi Mac il tasto speciale è il tasto 'control'. Le scorciatoie da tastiera di ~TiddlyWiki sono:
|!PC|!Mac|!Funzione|
|~Alt-F|~Ctrl-F|Cerca|
|~Alt-J|~Ctrl-J|Oggi|
|~Alt-N|~Ctrl-N|Nuovo|
|~Alt-S|~Ctrl-S|Salva modifiche|
Queste scorciatoie sono fornite dalle macro interne di ~TiddlyWiki per ciascuna funzione. La macro, perchè la scorciatoia da tastiera funzioni, deve essere usata in un tiddler aperto (o nel MainMenu o nella SideBar).
''Altre scorciatoie da tastiera''
Mentre si sta editando un tiddler:
* premendo ~Control-Enter o ~Control-Return si salvano le modifiche ed il modo editing viene chiuso. Premendo invece la combinazione di tasti ~Shift-Control-Enter o ~Shift-Control-Return si salva il frammento senza aggiornare la data e l'ora; questa opzione può essere utile se non si vuole tenere traccia delle modifiche minori ad un tiddler.
* premendo il tasto Escape si abbandonano le modifiche ed il tiddler ritorna allo stato originario.
Nel box di ricerca:
* premendo il tasto Escape si pulisce la finestra di ricerca
Navigando nel wiki:
* premendo il tasto Ctrl sul PC o il tasto Command sul Mac mentre si clicca su un link ad un tiddler, il tiddler viene aperto normalmente se non è aperto, ma se è //già aperto//, il tiddler viene chiuso. Questo metodo può essere utilizzato per una revisione veloce di tutti i link del vostro wiki ed evitare di dover continuamente muovere il mouse per chiudere i tiddler aperti. Questo comportamento può essere reso permanente settando la relativa opzione "Cliccando su un collegamento ad un frammento già aperto lo chiude" presente nelle OpzioniAvanzate.
/***
''This plugin was previously called StyleChooser.''
|Name|SelectThemePlugin|
|Created by|SimonBaird and SaqImtiaz|
|Location|http://tw.lewcid.org/#SelectThemePlugin|
|Version|1.2.5|
|Requires|~TW2.x|
!Description
*An alternative style switcher, can be used to switch just stylesheets and/or pagetemplates, or a combination of both (a theme)
*you can add your own stylesheets and pagetemplates, or use a ThemePack, like BigThemePack.
!Usage
* You have to have fetch or create some styleSheets and pageTemplates to use this plugin.
**You can either get a ThemePack like BigThemePack which automatically adds themes to ThemeSelect.
**or create tiddlers with styleSheets and pageTemplates and tag them styleSheets and pageTemplates respectively.
* Put {{{<<themeSelect style 'Select theme'>>}}} in your SideBarOptions.
!Creating Theme Packs
*You can create your own theme pack if you like. Instructions can be found [[here.|CreateThemePack]]
!History
*20-Dec-06, v 1.2.5, fixed horizontal rules for IE (thanks Clint), compatibility fix with HoverMenuPlugin
* 08-Sept-06, v1.2.4, fixed bug with TW2.1
* 15-May-06, v1.2.3, added paramifier so you can put theme on url, eg http://www.somewhere.com/twfile.html#theme:Berry2, thanks Clint (Simon).
* 28-Apr-o6, v1.2.2, fixed bug with opening TW after deleting themepacks. (Saq)
* 26-Apr-06, v1.2.1, more code optimization, dropdowns now updated on the fly. (Saq)
* 25-Apr-06, v1.2.0, added 3rd party ThemePack support, and made various other improvements.(Simon & Saq)
* 24-Apr-06, v1.1.0, added: no styles and default styles options, support for ThemePack, support for tag variations(Saq)
* 21-Apr-06, v1.0.0, Reworked dropdowns to include option for pagetemplates (Saq)
* 21-Apr-06, v0.9.0, Rewrote and added Saq's lovely dropdown select (Simon)
* 20-Apr-06, v0.0.1, Basic switcher working (Simon)
!Examples
|!Source|!Output|h
|{{{<<themeSelect style>>}}} for a dropdown with StyleSheets|<<themeSelect style>>|
|{{{<<themeSelect pagetemplate>>}}} for a dropdown with PageTemplates|<<themeSelect pagetemplate>>|
|{{{<<themeSelect style customlabel>>}}} to use a customlabel|<<themeSelect style customlabel>>|
* When applying a stylesheet or template, it also looks for a template or stylesheet respectively based on naming convention, eg MyFunkyStyleSheet and MyFunkyPageTemplate.
!Notes
* See also http://www.tiddlytools.com/#SelectStyleSheetPlugin for a more feature-rich style sheet switcher
! Ideas
* do ViewTemplate also?
* Pretty up the [x] bit
!Code
***/
//{{{
// for compatibility with TW <2.0.9
if (!Array.prototype.contains)
Array.prototype.contains = function(item)
{
return this.find(item) != null;
};
// for compatibility with TW <2.0.9
if (!Array.prototype.containsAny)
Array.prototype.containsAny = function(items)
{
for(var i=0; i<items.length; i++)
if (this.contains(items[i]))
return true;
return false;
};
//}}}
//{{{
version.extensions.SelectTheme = { major: 1, minor: 2, revision: 5, date: new Date(2006,12,20),
source: "http://tw.lewcid.org/#SelectTheme"
};
config.SelectTheme = {
things: {
style: {
tag: ["StyleSheets","StyleSheet","styleSheet","styleSheets","stylesheet","stylesheets"],
theDefault: "StyleSheet",
suffix: "StyleSheet",
notify: refreshStyles,
cookie: "txtStyleSheet",
otherThing: "pagetemplate",
label: "Choose StyleSheet: ",
tooltip: "Choose a StyleSheet",
caseNone: { text:"None", title:"NoStyleSheet"},
caseDefault: { text:"Default", title:"StyleSheet" }
},
pagetemplate: {
tag: ["PageTemplates","PageTemplate","pageTemplates","pageTemplate","pagetemplate","pagetemplates"],
theDefault: "PageTemplate",
suffix: "PageTemplate",
notify: refreshPageTemplate,
cookie: "txtPageTemplate",
otherThing: "style",
label: "Choose PageTemplate: ",
tooltip: "Choose a PageTemplate",
caseNone: { text:"None", title:"NoPageTemplate"},
caseDefault: { text:"Default", title:"PageTemplate" }
}
},
specialCases: ["caseNone","caseDefault"]
};
TiddlyWiki.prototype.removeNotification = function(title,fn) {
for (var i=0;i<this.namedNotifications.length;i++)
if((this.namedNotifications[i].name == title) && (this.namedNotifications[i].notify == fn))
this.namedNotifications.splice(i,1); // counting on it only being there once
}
var things = config.SelectTheme.things;
var specialCases=config.SelectTheme.specialCases;
for (var zz in things) {
// make sure we have a value
if (!config.options[things[zz].cookie])
config.options[things[zz].cookie] = things[zz].theDefault;
// remove core notify
store.removeNotification(things[zz].theDefault,things[zz].notify);
// and add our one
store.addNotification(config.options[things[zz].cookie],things[zz].notify);
}
//checks to see if a tiddler exists in store or as a shadow.
TiddlyWiki.prototype.isTiddler= function (title)
{return store.tiddlerExists(title) || store.isShadowTiddler(title)}
//hijack core function & make sure template exists
window.applyPageTemplate_themeSelect=window.applyPageTemplate;
window.applyPageTemplate=function(title){
if(!store.isTiddler(title))
{title = things.pagetemplate.theDefault;}
applyPageTemplate_themeSelect(title);
}
TiddlyWiki.prototype.makeActiveTheme = function(what,title,alsoCheckOtherThing) {
var thing = things[what];
if (!store.isTiddler(title))
title = thing.theDefault;
var oldTitle = config.options[thing.cookie];
if (what == "style") {
// remove old style element from DOM
var oldStyleElement = document.getElementById(oldTitle);
oldStyleElement.parentNode.removeChild(oldStyleElement);
}
store.removeNotification(oldTitle,thing.notify);
store.addNotification(title,thing.notify);
store.notify(title);
config.options[thing.cookie] = title;
saveOptionCookie(thing.cookie);
if (alsoCheckOtherThing)
this.makeActiveTheme(thing.otherThing,
title.replace(new RegExp(thing.suffix+"$"),"") + things[thing.otherThing].suffix,
false);
};
if (config.hoverMenu)
{
old_hovermenu_makeActiveTheme = TiddlyWiki.prototype.makeActiveTheme;
TiddlyWiki.prototype.makeActiveTheme = function(what,title,alsoCheckOtherThing)
{
old_hovermenu_makeActiveTheme.apply(this,arguments);
if (!alsoCheckOtherThing)
config.hoverMenu.handler();
};
}
config.shadowTiddlers.NoStyleSheet = "";
config.shadowTiddlers.NoPageTemplate = config.shadowTiddlers.PageTemplate;
function switchTheme(e){
if (!e) var e = window.event;
var theTarget = resolveTarget(e);
var theLink = theTarget;
var switchTo= theLink.getAttribute("switchTo");
var mode = theLink.getAttribute("mode");
if ((config.options[things[mode].cookie])!=switchTo)
{store.makeActiveTheme(mode,switchTo,true);};
return(false);
}
config.macros.themeSelect={};
config.macros.themeSelect.dropdownchar = (document.all?"▼":"▾");
config.macros.themeSelect.handler = function(place,macroName,params,wikifier,paramString,tiddler){
var arrow = config.macros.themeSelect.dropdownchar;
var mode = params[0];
var label = (params[1]?params[1]:things[mode].label) + arrow;
var cookie = (config.options[things[mode].cookie]);
var onclick = function(e)
{ if (!e) var e = window.event;
var popup = Popup.create(this);
var tagged=[];
store.forEachTiddler(function(title,tiddler) {
if ((tiddler.tags).containsAny(things[mode].tag)){
tagged.push(tiddler.title);}
});
//integrate ThemePacks
if (config.themes) {
// see what themes have been loaded...
for (var i=0;i<config.themes.length;i++) {
// see if there is one
var lookForThis = config.themes[i] + things[mode].suffix;
if (store.isShadowTiddler(lookForThis)) {
tagged.pushUnique(lookForThis);
}
}
tagged = tagged.sort();
}
//this function used later to create buttons
var createThemeButton = function(switchTo){
var theButton = createTiddlyButton(createTiddlyElement(popup,"li"),text,null,switchTheme,useClass);
theButton.setAttribute("switchTo",switchTo);
theButton.setAttribute("mode",mode);};
//create Buttons for None(shadow styles) & Default (StyleSheet)
// Default button is not created if StyleSheet doesnt exist.
for(var t=0; t<specialCases.length; t++){
var special = specialCases[t];
var text = things[mode][special].text;
var useClass = "tiddlyLinkExisting"; //redundant, optimize!
if ((things[mode][special].title==cookie)||(special=="caseNone"&&!store.isTiddler(cookie)))
{text+= " [x]";
useClass = "currentlySelected";}
if (!((special=="caseDefault")&&(!store.getTiddler(things[mode][special].title))))
createThemeButton(things[mode][special].title); }
//insert horizontal rule
//createTiddlyElement(createTiddlyElement(popup,"li"),"hr");
createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");
//create buttons for all other stylesheet tiddlers
for(var t=0; t<tagged.length; t++)
{ var useClass = "tiddlyLinkExisting";
var text = (tagged[t]).replace((things[mode].suffix),"");
if (tagged[t]==(cookie) )
{text+=" [x]"; useClass="currentlySelected";}
if ((tagged[t]!= (things[mode].theDefault))&&tagged[t]!= (things[mode].none))
{createThemeButton(tagged[t]);}}
Popup.show(popup,false);
e.cancelBubble = true;
if (e.stopPropagation)
e.stopPropagation();
return(false);
};
var createdropperButton = function(place){
var sp = createTiddlyElement(place,"span",null,"ThemeChooserButton");
var theDropDownBtn = createTiddlyButton(sp,label,things[mode].tooltip,onclick);
};
createdropperButton(place);
};
setStylesheet(".popup li a.currentlySelected {background:#ccc;color:black;font-weight:bold;}","currentlySelectedStyle"); // could do better probably...
config.macros.layoutChooser=config.macros.themeSelect;
//shadow tiddler to hold instructions for creating ThemePacks
config.shadowTiddlers.ThemePack='See http://simonbaird.com/mptw/#CreateThemePack';
config.macros.applyTheme = {handler: function (place,macroName,params,wikifier,paramString,tiddler) {
var theme = params[0];
var label = params[1]?params[1]:'Apply theme "' + theme + '"';
var tooltip = 'Apply the "'+theme+'" theme to this TiddlyWiki';
createTiddlyButton(place,label,tooltip,function() {
store.makeActiveTheme("style",theme+things.style.suffix,true);
});
}};
// this means you can put #theme:ThemeName in url. suggested by Clint
config.paramifiers.theme = {
onstart: function(themeName) {
store.makeActiveTheme("style",themeName+config.SelectTheme.things.style.suffix,true);
}
};
//}}}
Fate doppio click su questo contenuto. Questa azione attiva il modo editing. Scrivete quello che desiderate nella finestra di editing che si apre. Fatte le modifiche, spostate il cursore del mouse in prossimità del titolo di questo tiddler e cliccate sul comando "Salva".
Facile vero?
A questo punto se desiderate approfondire come poter salvare le vostre modifiche, dovete salvare il vostro TiddlyWiki sul vostro PC e per sapere come fare passate alla sezione [[Come salvare le proprie modifiche]]. Leggete anche la sezione [[Semplice da Portare]].
In questo tutorial potete apprendere:
*[[Come creare un Tiddler]]
*[[Come formattare testo]]
*[[Come includere immagini]]
*[[Come creare liste]]
*[[Come creare collegamenti esterni]]
*[[Come creare tabelle]]
*[[Come creare sottotitoli]]
*[[Come usare blocchi di citazione]]
*[[Come inserire una linea di separazione]]
*[[Come non linkare una WikiParola]]
*[[Come linkare non WikiParole]]
*[[Come usare testo monospaziato]]
*[[Come etichettare un tiddler]]
*[[Conoscere le macro|Macro]]
*[[Come cambiare il Menù o il Titolo]]
*[[Come inserire commenti nascosti nei Tiddlers]]
*[[Come modificare lo stile di TiddlyWiki]]
Dopo aver letto questi argomenti, leggete anche la sezione [[Ulteriori come fare]] e le [[Scorciatoie da tastiera]].
In informatica il termine ~ServerSide si riferisce ad operazioni che sono realizzate da sistemi server in una interazione client-server. Tipicamente un server è rappresentato da un programma software, come ad esempio un web server, che è eseguito su un computer remoto raggiungibile da un computer client collegato in rete. In una struttura ~ServerSide le operazioni vengono eseguite lato server perchè le stesse richiedono l'accesso a dati o l'utilizzo di funzionalità che non sono disponibili lato client.
~TiddlyWiki, al momento, non ha alcun supporto lato server; questo significa che quando salvate il vostro wiki, state salvando l'intero sito come se fosse un documento word sul vostro PC e che ~TiddlyWiki è essenzialmente un sistema mono utente. Sono disponibili comunque degli adattamenti ~TiddlyWiki ad una architettura ~ServerSide. Chi fosse interessato a conoscere tali sviluppi può far riferimento al seguente link [[www.tiddlywiki.com/#TiddlyWikiAdaptations|http://www.tiddlywiki.com/#TiddlyWikiAdaptations]].
/***
|''Name:''|SettingsPlugin|
|''Version:''|1.1.0 (2006-07-30)|
|''Type:''|plugin|
|''Source:''|http://tiddlywiki.abego-software.de/#SettingsPlugin|
|''Author:''|Udo Borkowski (ub [at] abego-software [dot] de)|
|''Documentation:''|[[SettingsPlugin Documentation]]|
|''~SourceCode:''|[[SettingsPlugin SourceCode]]|
|''Licence:''|[[BSD open source license (abego Software)]]|
|''~CoreVersion:''|2.0.7|
|''Browser:''|Firefox 1.5.0.2 or better; Internet Explorer 6.0|
^^This tiddler contains compressed source code. [[Full Source Code|SettingsPlugin SourceCode]].^^
***/
// /%
if(!version.extensions.SettingsPlugin){if(version.major<2){(function(){var s="Use TiddlyWiki 2.0 or better to run the Settings Plugin.";alert(s);throw s;})();}version.extensions.SettingsPlugin={major:1,minor:1,revision:0,date:new Date(2006,6,30),type:"plugin",source:"http://tiddlywiki.abego-software.de/#SettingsPlugin",documentation:"[[SettingsPlugin Documentation]]",sourcecode:"[[SettingsPlugin SourceCode]]",author:"Udo Borkowski (ub [at] abego-software [dot] de)",licence:"[[BSD open source license (abego Software)]]",coreVersion:"2.0.7",browser:"Firefox 1.5.0.2 or better; Internet Explorer 6.0"};if(!window.abego){window.abego={};}if(!abego.setTiddlerText){abego.setTiddlerText=function(_2,_3,_4,_5,_6,_7){var _8=_2.getTiddler(_3);if(_8&&(_8.text==_4)){return;}var _9=config.options.chkForceMinorUpdate;var _a=!_8?_5:_8.tags;_2.suspendNotifications();try{_2.saveTiddler(_3,_3,_4,_9?undefined:config.options.txtUserName,_9?undefined:new Date(),_a);}finally{_2.resumeNotifications();}if(_7){_2.notify(_3,true);}if(!_6&&config.options.chkAutoSave){saveChanges();}};}(function(){var _b="PrivateSettings";var _c="chkUsePrivateSettings";var _d="chkMakeSettingPrivateWhenChanged";var _e=null;var _f=false;var _10=function(_11,s){var _13=s.split(";");var _14={};for(var c=0;c<_13.length;c++){var p=_13[c].indexOf("=");if(p!=-1){var _17=_13[c].substr(0,p).trim();var _18=_13[c].substr(p+1).trim();_11[_17]=unescape(_18);_14[_17]=true;}}return _14;};var _19=function(_1a){var s=store.getTiddlerText(_b);_e=s?_10(_1a,s):{};};var _1c=function(_1d){_10(_1d,document.cookie);};var _1e=function(){var _1f={};_1c(_1f);return _1f;};var _20=function(){var _21={};_19(_21);return _21;};var _22=function(_23,_24){document.cookie=_23+"="+escape(_24)+"; expires=Fri, 1 Jan 2038 12:00:00 UTC; path=/";};var _25=function(_26,s,_28){var _29=_20();if(s===null){if(!_e[_26]){return;}delete _29[_26];delete _e[_26];}else{var _2a=_29[_26];if(_2a!==undefined&&_2a==s){return;}_29[_26]=s;_e[_26]=true;}var t="";for(var i in _29){if(t){t+="; ";}t+=i+"="+escape(_29[i]);}abego.setTiddlerText(store,_b,t,["excludeLists","excludeSearch"],_28);if(!_28&&config.options.chkAutoSave){saveChanges();}};config.shadowTiddlers["BSD open source license (abego Software)"]="See [[Licence|http://tiddlywiki.abego-software.de/#%5B%5BBSD%20open%20source%20license%5D%5D]].";config.shadowTiddlers["SettingsPlugin Documentation"]="[[Documentation on abego Software website|http://tiddlywiki.abego-software.de/#%5B%5BSettingsPlugin%20Documentation%5D%5D]].\n\n^^You may copy the documentation tiddler from the website to your TiddlyWiki.\nThen you don't need to access the internet to read the documentation.^^";config.shadowTiddlers["SettingsPlugin SourceCode"]="Rightclick this [[link|http://tiddlywiki.abego-software.de/src/Plugin-Settings-src.js]] and choose 'Save target/link as...' to get the plugin source code from the abego Software website.";config.shadowTiddlers["Show Settings"]="<<showSettings>>";if(config.options[_c]===undefined){config.options[_c]=false;}if(config.options[_d]===undefined){config.options[_d]=false;}config.shadowTiddlers.AdvancedOptions+="\n''Private Settings: ''<<option "+_c+">> Use private settings. <<option "+_d+">> Make setting private when changed.   [[Show Settings]].\n^^(Private settings are stored in this ~TiddlyWiki, shared settings are stored as cookies. For more information see the [[Settings documentation|SettingsPlugin Documentation]].)^^";abego.usePrivateSettings=function(){return _f;};abego.setUsePrivateSettings=function(f){if(f!=abego.usePrivateSettings()){_f=f;loadOptionsCookie();}};abego.isUsePrivateSettingsOption=function(_2e){return _2e==_c;};abego.makeSettingPrivateWhenChanged=function(){return config.options[_d];};abego.setMakeSettingPrivateWhenChanged=function(f){config.options[_d]=f;};abego.getSettings=function(){var _30={};_1c(_30);_f=_30[_c]=="true";if(abego.usePrivateSettings()){_19(_30);}return _30;};abego.getSetting=function(_31){var s=abego.getSettings()[_31];return !s?"":s;};abego.saveSetting=function(_33,_34){if(abego.isUsePrivateSettingsOption(_33)){_22(_33,_34);abego.setUsePrivateSettings(_34=="true");loadOptionsCookie();window.alert("You changed the 'Use private settings' option.\nPlease reload your TiddlyWiki to update the settings.\n");return;}if(abego.usePrivateSettings()&&(abego.isSettingPrivate(_33)||abego.makeSettingPrivateWhenChanged())){_25(_33,_34);}else{_22(_33,_34);}};abego.isSettingPrivate=function(_35){if(abego.isUsePrivateSettingsOption(_35)){return false;}if(!_e){_20();}return !!_e[_35];};abego.isPasswordSetting=function(_36){return (_36.substr(0,3)=="pas")||(_36.substr(0,6)=="chkpas");};abego.makeSettingPrivate=function(_37,_38,_39){if(abego.isPasswordSetting(_37)){_25(_37,null,_39);return;}var _3a=_20();var _3b=_3a[_37]!==undefined;if(_38==_3b){return;}var _3c=_1e();if(_38){_25(_37,_3c[_37],_39);}else{if(_3c[_37]===undefined){_22(_37,_3a[_37]);}_25(_37,null,_39);}};abego.setAllSettingsPrivate=function(_3d,_3e){var _3f=abego.getSettings();for(var s in _3f){abego.makeSettingPrivate(s,_3d,true);}if(config.options.chkAutoSave){saveChanges();}if(_3e){story.refreshTiddler(_3e,1,true);}return false;};})();config.macros.showSettings={label:"showSettings",prompt:"Display the current TiddlyWiki settings"};config.macros.showSettings.handler=function(_41,_42,_43,_44,_45,_46){var _47=function(a){var s=a.substr(0,3);return s=="txt"||s=="chk";};var _4a=function(a,b){var s1=a.toLowerCase();var s2=b.toLowerCase();return (s1<s2)?-1:(s1==s2)?0:1;};var _4f=function(a,b){var _52=_47(a);var _53=_47(b);if(_52){if(!_53){return -1;}else{return _4a(a.substr(3),b.substr(3));}}else{if(_53){return 1;}else{return _4a(a,b);}}};var s="<html><table><tr align=\"left\"><th>Private</th><th>Name</th><th>Value</th></tr>";var c=abego.getSettings();var _56=[];for(var i in c){if(!abego.isPasswordSetting(i)){_56.push(i);}}_56.sort(_4f);for(i=0;i<_56.length;i++){var _58=_56[i];var _59=_47(_58)?_58.substr(3)+" ("+_58.substr(0,3)+"...)":_58;var _5a=abego.isUsePrivateSettingsOption(_58)?"":"<input name=\""+_58+"\" type=\"checkbox\" onclick=\"abego.onPrivateSettingClick(this)\""+(abego.isSettingPrivate(_58)?" checked":"")+"/>";s+="<tr><td align=\"right\">"+_5a+"</td><td>"+_59+"</td><td>"+c[_58]+"</td></tr>\n";}s+="</table>";s+="<a class=\"button\" title=\"Make all current settings private\" href=\"javascript:;\" onclick=\"abego.setAllSettingsPrivate(true,'"+_46.title+"',1);\">Make all private</a>";s+="<a class=\"button\" title=\"Make all current settings shared\" href=\"javascript:;\" onclick=\"abego.setAllSettingsPrivate(false,'"+_46.title+"',1);\">Make all shared</a>";s+="</html>";wikify(s,_41);};abego.onPrivateSettingClick=function(_5b){abego.makeSettingPrivate(_5b.name,_5b.checked);return false;};this.loadOptionsCookie=function(){if(safeMode){return;}var _5c=abego.getSettings();for(var _5d in _5c){var _5e=_5c[_5d];switch(_5d.substr(0,3)){case "txt":config.options[_5d]=unescape(_5e);break;case "chk":config.options[_5d]=_5e=="true";break;}}};this.saveOptionCookie=function(_5f){if(safeMode){return;}var v="";switch(_5f.substr(0,3)){case "txt":v=config.options[_5f].toString();break;case "chk":v=config.options[_5f]?"true":"false";break;}abego.saveSetting(_5f,v);};loadOptionsCookie();}
// %/
Gli ShadowTiddlers sono tiddlers speciali nei quali sono definiti i valori di default che TiddlyWiki utilizza se questi ultimi non sono definiti o sono stati cancellati. Per esempio, PageTemplate e StyleSheetColors sono entrambi tiddlers di tipo shadow (nascosti).
Gli ShadowTiddlers fanno sì che sia più difficile rendere TiddlyWiki inoperativo per avere cancellato accidentalmente qualcosa di importante per il suo funzionamento. Potete vedere la lista di tutti i tiddlers di tipo shadow del vostro wiki, consultando il tab ''Nascosti'' presente sotto il tab ''Altro'' nella barra a destra. Quando create un tiddler con lo ''stesso nome'' di un tiddler shadow, viene effettuato un ''override'' delle impostazioni di programma contenute nel sottostante tiddler shadow.
La lista che segue mostra tutti i tiddler di tipo shadow presenti in questo TiddlyWiki:
<<list shadowed>>
Fondamentalmente, quindi, se esiste un tiddler il cui titolo coincide con uno dei titoli della lista, il comportamento di default definito dal corrispondente tiddler viene modificato.
Un sito web realizzato con ~TiddlyWiki è costituito da un ''singolo'' file HTML, autocontenuto: questo significa che tutti i contenuti del vostro sito sono memorizzati all'interno di questo file come semplici componenti testuali. Per tale motivo, tenete presente le seguenti considerazioni:
* non memorizzate alcuna informazione sensibile o riservata all'interno dei tiddler del vostro sito ~TiddlyWiki, a meno che il dispositivo che memorizza il corrispondente file HTML, non sia intrinsecamente sicuro (ad sempio la vostra pendrive personale USB);
* se avete necessità di memorizzare dati sensibili e di accedere ad essi tramite un PC utilizzato da più utenti, cancellate, al termine delle operazioni, la cache del browser;
* se avete invece necessità di memorizzare dati riservati nel vostro ~TiddlyWiki, considerate che esistono degli adattamenti di questo software che implementano la crittografia dei contenuti (come ad esempio http://wiki.yoshimov.com/?page=EncryptedTiddlyWiki).
Con il termine ~SideBar di ~TiddlyWiki si intende il menù di comandi visualizzato sulla destra di questo wiki. Nella ~SideBar sono presenti i seguenti comandi:
* ''Trova'' - permette di trovare all'interno del proprio wiki una qualsiasi parola o testo. Digitando una parola all'interno della finestra di ricerca, vengono aperti tutti i tiddler all'interno dei quali è contenuta la parola digitata. Il termine o la parola utilizzata nella ricerca viene evidenziato. Se nelle opzioni è selezionata l'opzione //~ConsideraCaratteriInRicerca// la ricerca è sensibile alle maiuscole e minuscole. Ricordate anche che per pulire rapidamente la finestra di ricerca, posizionato il puntatore del mouse nella finestra, basta premere il tasto Esc del vostro PC;
* ''Vai al tiddler:'' - permette di trovare all'interno del proprio wiki uno specifico tiddler. Digitando una parola all'interno della finestra di ricerca, viene visualizzata una finestra di risultati che mostra tutti i tiddler il cui nome inizia o contiene la stringa di caratteri digitata: selezionando il nome del tiddler, lo stesso viene aperto immediatamente. Questa funzione non fa parte delle funzionalità standard di ~TiddlyWiki ma è implementata in questo wiki dal [[GoTo Plugin]];
* ''Chiudi tutti'' - permette di chiudere tutti i tiddler aperti nel wiki;
* ''Indirizzo di pagina'' - se cliccato riporta nella finestra indirizzo del browser l'indirizzo della pagina e di tutti i tiddler correntemente aperti. Questa funzionalità può essere quindi utilizzata nel caso si voglia salvare o comunicare un url a cui corrisponde una ben precisa configurazione di frammenti aperti del proprio wiki;
* ''Nuovo'' - se cliccato permette di creare un nuovo frammento;
* '' Oggi'' - se cliccato permette di creare un nuovo frammento che riporta automaticamente la data del giorno. Questa funzionalità può essere quindi utilizzata per creare un frammento di tipo journal;
* ''Salva modifiche'' - se cliccato permette di salvare le modifiche correnti al proprio wiki. Se nella finestra Opzioni è selezionata l'opzione//~SalvaBackups// ~TiddlyWiki automaticamente creerà un archivio di backup del vostro wiki, inserendo nel nome del file, la data e l'orario correnti;
* ''Caratteri:'' <<fontSize>> - permette di incrementare, diminuire o resettare le dimensioni dei caratteri utilizzati per visualizzare il contenuto dei frammenti aperti. Questa funzionalità è stata realizzata installando il Plugin FontSizePlugin. Per maggiori dettagli su questa funzionalità leggete il tiddler [[Come modificare le dimensioni dei caratteri dei frammenti aperti]];
* ''Scegli lo stile di questo wiki'' - se cliccato consente di sceglire lo stile di questo wiki tra quelli disponibili. Questa funzionalità è stata realizzata installando i Plugin BigThemePack e SelectThemePlugin. Per maggiori dettagli su questa funzionalità leggete il tiddler [[Come modificare lo stile di TiddlyWiki]];
* [[Opzioni]] - permette di aprire la finestra delle opzioni del vostro wiki.
<<search>>
Vai al tiddler<<goto width:9em width:13em>><<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<saveChanges>><<fontSize Caratteri: >><<themeSelect style 'Scegli lo stile di questo wiki '>><<slider chkSliderOptionsPanel OptionsPanel Opzioni 'Modifica le opzioni di TiddlyWiki'>>
/***
| Name:|SiteMapMacro|
| Author:|Simon Baird|
| Location:|http://simonbaird.com/mptw/#SiteMapMacro|
| Version:|1.0.3, 15-Mar-06|
!!Examples
See SiteMap and ~SliderSiteMap for example usage.
!!Parameters
* Name of tiddler to start at
* Max depth (a number)
* Format (eg, nested, see formats below)
* Don't show root flag (anything other than null turns it on)
* Tags - a string containing a bracketed list of tags that we are interested in
!!History
* 1.0.3 (15-Mar-06)
** added tag filtering
* 1.0.2 (15-Mar-06)
** Added json format and dontshowroot option
* 1.0.1 (9-Mar-06)
** Added selectable formats and fixed nested slider format
* 1.0.0 (8-Mar-06)
** first release
***/
//{{{
version.extensions.SiteMapMacro = {
major: 1,
minor: 0,
revision: 3,
date: new Date(2006,3,15),
source: "http://simonbaird.com/mptw/#SiteMapMacro"
};
config.macros.siteMap = {
formats: {
bullets: {
formatString: "%0[[%1]]\n%2",
indentString: "*"
},
// put this in your StyleSheet to make it look good.
// .sliderPanel { margin-left: 2em; }
sliders: {
formatString: "[[%1]]+++\n%2===\n\n",
formatStringLeaf: "[[%1]]\n"
},
openSliders: {
formatString: "[[%1]]++++\n%2===\n\n",
formatStringLeaf: "[[%1]]\n"
},
popups: {
formatString: "[[%1]]+++^\n%2===\n\n",
formatStringLeaf: "[[%1]]\n"
},
// these don't work too well
openPopups: {
formatString: "[[%1]]++++^\n%2===\n\n",
formatStringLeaf: "[[%1]]\n"
},
// this is a little nuts but it works
json: {
formatString: '\n%0{"%1":[%2\n%0]}',
formatStringLeaf: '\n%0"%1"',
indentString: " ",
separatorString: ","
}
},
defaultFormat: "bullets",
treeTraverse: function(title,depth,maxdepth,format,dontshowroot,tags,excludetags) {
var tiddler = store.getTiddler(title);
var tagging = store.getTaggedTiddlers(title);
if (dontshowroot)
depth = 0;
var indent = "";
if (this.formats[format].indentString)
for (var j=0;j<depth;j++)
indent += this.formats[format].indentString;
var childOutput = "";
if (!maxdepth || depth < parseInt(maxdepth))
for (var i=0;i<tagging.length;i++)
if (tagging[i].title != title) {
if (this.formats[format].separatorString && i != 0)
childOutput += this.formats[format].separatorString;
childOutput += this.treeTraverse(tagging[i].title,depth+1,maxdepth,format,null,tags,excludetags);
}
if (childOutput == "" && (
(tags && tags != "" && !tiddler.tags.containsAll(tags.readBracketedList())) ||
(excludetags && excludetags != "" && tiddler.tags.containsAny(excludetags.readBracketedList()))
)
) {
// so prune it cos it doesn't have the right tags and neither do any of it's children
return "";
}
if (dontshowroot)
return childOutput;
if (this.formats[format].formatStringLeaf && childOutput == "") {
// required for nestedSliders
return this.formats[format].formatStringLeaf.format([indent,title,childOutput]);
}
return this.formats[format].formatString.format([indent,title,childOutput]);
},
handler: function (place,macroName,params,wikifier,paramString,tiddler) {
wikify(this.treeTraverse(
params[0] && params[0] != '.' ? params[0] : tiddler.title, 1,
params[1] && params[1] != '.' ? params[1] : null, // maxdepth
params[2] && params[2] != '.' ? params[2] : this.defaultFormat, // format
params[3] && params[3] != '.' ? params[3] : null, // dontshowroot
params[4] && params[4] != '.' ? params[4] : null, // tags
params[5] && params[5] != '.' ? params[5] : null // excludetags
),place);
}
}
//}}}
http://pollio.maurizio.googlepages.com/MiniGuidaTiddlyWiki.html
/***
|Name|SnapshotPlugin|
|Source|http://www.TiddlyTools.com/#SnapshotPlugin|
|Documentation|http://www.TiddlyTools.com/#SnapshotPluginInfo|
|Version|1.2.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|save or print HTML+CSS image of rendered document content|
|Status|ALPHA - DO NOT DISTRIBUTE|
This plugin provides a macro as well as tiddler toolbar commands to create a file or browser window containing the //rendered// CSS-and-HTML that is currently being displayed for selected elements of the current document.
!!!!!Documentation
>see [[SnapshotPluginInfo]]
!!!!!Configuration
<<<
<<option chkSnapshotHTMLOnly>> output HTML only (omit CSS)
<<<
!!!!!Revisions
<<<
2009.06.04 [1.2.0] added handling in getSnap() so current form input values are shown in snapshots
|please see [[SnapshotPluginInfo]] for additional revision details|
2008.04.21 [1.0.0] initial release - derived from [[NewDocumentPlugin]] with many improvements...
<<<
!!!!!Code
***/
//{{{
version.extensions.SnapshotPlugin= {major: 1, minor: 2, revision: 0, date: new Date(2009,6,4)};
if (config.options.chkSnapshotHTMLOnly===undefined) config.options.chkSnapshotHTMLOnly=false;
config.macros.snapshot = {
snapLabel: "salva uno snapshot",
printLabel: "stampa uno snapshot",
snapPrompt: "salva una immagine HTML del contenuto renderizzato",
printPrompt: "stampa una immagine HTML del contenuto renderizzato",
hereID: "here",
viewerID: "viewer",
storyID: "story",
allID: "all",
askID: "ask",
askTiddlerID: "askTiddler",
askDOMID: "askDOM",
askMsg: "seleziona un'opzione...",
hereItem: "arg.: '%0'",
viewerItem: "arg.: '%0' (solo il contenuto)",
storyItem: "colonna storia",
allItem: "tutto il documento",
tiddlerItem: "seleziona un argomento...",
IDItem: "seleziona un elemento DOM da ID...",
HTMLItem: "[%0] stampa solo HTML (senza CSS)",
fileMsg: "seleziona o introduci un percorso/nomefile",
defaultFilename: "snapshot.html",
okmsg: "snapshot scritto al %0",
failmsg: "Errore durante la creazione allo %0",
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var printing=params[0]&¶ms[0]=="Stampa"; if (printing) params.shift();
params = paramString.parseParams("anon",null,true,false,false);
var id=getParam(params,"id","here");
var label=getParam(params,"label",printing?this.printLabel:this.snapLabel);
var prompt=getParam(params,"prompt",printing?this.printPrompt:this.snapPrompt);
var btn=createTiddlyButton(place,label,prompt, function(ev){
this.setAttribute("snapID",this.getAttribute("startID"));
config.macros.snapshot.go(this,ev)
});
btn.setAttribute("startID",id);
btn.setAttribute("snapID",id);
btn.setAttribute("printing",printing?"true":"false");
btn.setAttribute("HTMLOnly",config.options.chkSnapshotHTMLOnly?"true":"false");
},
go: function(here,ev) {
var cms=config.macros.snapshot; // abbreviation
var id=here.getAttribute("snapID");
var printing=here.getAttribute("printing")=="true";
var HTMLOnly=here.getAttribute("HTMLOnly")=="true";
if (id==cms.askID||id==cms.askTiddlerID||id==cms.askDOMID) {
cms.askForID(here,ev);
} else {
// get element
if (id==cms.storyID) id="tiddlerDisplay";
if (id==cms.allID) id="contentWrapper";
var snapElem=document.getElementById(id);
if (id==cms.hereID || id==cms.viewerID)
var snapElem=story.findContainingTiddler(here);
if (snapElem && hasClass(snapElem,"tiddler") && (id==cms.viewerID || HTMLOnly)) {
// find viewer class element within tiddler element
var nodes=snapElem.getElementsByTagName("*");
for (var i=0; i<nodes.length; i++)
if (hasClass(nodes[i],"viewer")) { snapElem=nodes[i]; break; }
}
if (!snapElem) // not in a tiddler or no viewer element or unknown ID
{ e.cancelBubble=true; if(e.stopPropagation)e.stopPropagation(); return(false); }
// write or print snapshot
var out=cms.getsnap(snapElem,id,printing,HTMLOnly);
if (printing) cms.printsnap(out); else cms.savesnap(out);
}
return false;
},
askForID: function(here,ev) {
var ev = ev ? ev : window.event;
var cms=config.macros.snapshot; // abbreviation
var id=here.getAttribute("snapID");
var indent='\xa0\xa0\xa0\xa0';
var p=Popup.create(here); if (!p) return false; p.className+=' sticky smallform';
var s=createTiddlyElement(p,'select'); s.button=here;
if (id==cms.askID) {
s.options[s.length]=new Option(cms.askMsg,cms.askID);
var tid=story.findContainingTiddler(here);
if(tid) {
var title=tid.getAttribute("tiddler");
if (here.getAttribute("HTMLOnly")!="true")
s.options[s.length]=new Option(indent+cms.hereItem.format([title]),cms.hereID);
s.options[s.length]=new Option(indent+cms.viewerItem.format([title]),cms.viewerID);
}
s.options[s.length]=new Option(indent+cms.tiddlerItem,cms.askTiddlerID);
s.options[s.length]=new Option(indent+cms.IDItem,cms.askDOMID);
s.options[s.length]=new Option(indent+cms.storyItem,"tiddlerDisplay");
s.options[s.length]=new Option(indent+cms.allItem,"contentWrapper");
}
if (id==cms.askDOMID) {
s.options[s.length]=new Option(cms.IDItem,cms.askDOMID);
var elems=document.getElementsByTagName("*");
var ids=[];
for (var i=0;i<elems.length;i++)
if (elems[i].id.length && elems[i].className!="animationContainer")
ids.push(elems[i].id);
ids.sort();
for (var i=0;i<ids.length;i++) s.options[s.length]=new Option(indent+ids[i],ids[i]);
}
if (id==cms.askTiddlerID) {
s.options[s.length]=new Option(cms.tiddlerItem,cms.askTiddlerID);
var elems=document.getElementsByTagName("div");
var ids=[];
for (var i=0;i<elems.length;i++) { var id=elems[i].id;
if (id.length && id.substr(0,story.idPrefix.length)==story.idPrefix && id!="tiddlerDisplay")
ids.push(id);
}
ids.sort();
for (var i=0;i<ids.length;i++) s.options[s.length]=new Option(indent+ids[i].substr(story.idPrefix.length),ids[i]);
}
s.options[s.length]=new Option(cms.HTMLItem.format([here.getAttribute("HTMLOnly")=="true"?"\u221a":"_"]),cms.HTMLItem);
s.onchange=function(ev){
var ev = ev ? ev : window.event;
var cms=config.macros.snapshot; // abbreviation
var here=this.button;
if (this.value==cms.HTMLItem) {
config.options.chkSnapshotHTMLOnly=!config.options.chkSnapshotHTMLOnly;
here.setAttribute("HTMLOnly",config.options.chkSnapshotHTMLOnly?"true":"false");
config.macros.option.propagateOption("chkSnapshotHTMLOnly","checked",
config.options.chkSnapshotHTMLOnly,"input");
} else
here.setAttribute("snapID",this.value);
config.macros.snapshot.go(here,ev);
return false;
};
Popup.show();
ev.cancelBubble=true;
if(ev.stopPropagation)ev.stopPropagation();
return false;
},
getpath: function() {
// get current path
var path=getLocalPath(window.location.href);
var slashpos=path.lastIndexOf("/");
if (slashpos==-1) slashpos=path.lastIndexOf("\\");
if (slashpos!=-1) path=path.substr(0,slashpos+1); // trim filename
return path;
},
getsnap: function(snapElem,id,printing,HTMLOnly) {
var cms=config.macros.snapshot; // abbreviation
var out='<head>\n';
if (printing)
out+='<base href="file:///'+cms.getpath().replace(/\\/g,'/')+'"></base>\n';
if (!HTMLOnly) {
var styles=document.getElementsByTagName('style');
var fmt='<style>\n/* stylesheet=%0 */\n%1\n\n</style>\n';
for(var i=0; i < styles.length; i++)
out+=fmt.format([styles[i].getAttribute('id'),styles[i].innerHTML]);
}
out+='<style>\n body {background: #fff;}</style>\n</head>\n';
var elems=snapElem.getElementsByTagName('input');
for (var i=0; i<elems.length; i++) { var e=elems[i];
if (e.type=='text') e.defaultValue=e.value;
if (e.type=='checkbox') e.defaultChecked=e.checked;
if (e.type=='radiobutton') e.defaultChecked=e.checked;
}
var elems=snapElem.getElementsByTagName('textarea');
for (var i=0; i<elems.length; i++) elems[i].defaultValue=elems[i].value;
var fmt='<body>\n\n<div class="%0">%1</div>\n\n</body>\n';
out+=fmt.format([(id==cms.viewerID?'tiddler viewer':''),snapElem.innerHTML]);
return '<html>\n'+out+'</html>';
},
printsnap: function(out) {
var win=window.open("","_blank","");
win.document.open();
win.document.writeln(out);
win.document.close();
win.focus(); // bring to front
win.print(); // trigger print dialog
},
savesnap: function(out) {
var cms=config.macros.snapshot; // abbreviation
// make sure we are local
if (window.location.protocol!="file:")
{ alert(config.messages.notFileUrlError); return; }
var target=cms.askForFilename(cms.fileMsg,cms.getpath(),cms.defaultFilename);
if (!target) return; // cancelled by user
// if specified file does not include a path, assemble fully qualified path and filename
var slashpos=target.lastIndexOf("/");
if (slashpos==-1) slashpos=target.lastIndexOf("\\");
if (slashpos==-1) target=target+cms.defaultFilename;
var link="file:///"+target.replace(/\\/g,'/'); // link for message text
var ok=saveFile(target,convertUnicodeToUTF8(out));
var msg=ok?cms.okmsg.format([target]):cms.failmsg.format([target]);
clearMessage(); displayMessage(msg,link);
},
askForFilename: function(msg,path,file) {
if(window.Components) { // moz
try {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
picker.init(window, msg, nsIFilePicker.modeSave);
var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
thispath.initWithPath(path);
picker.displayDirectory=thispath;
picker.defaultExtension='html';
picker.defaultString=file;
picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
if (picker.show()!=nsIFilePicker.returnCancel) var result=picker.file.persistentDescriptor;
}
catch(e) { alert('error during local file access: '+e.toString()) }
}
else { // IE
try { // XP/Vista only
var s = new ActiveXObject('UserAccounts.CommonDialog');
s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|';
s.FilterIndex=3; // default to HTML files;
s.InitialDir=path;
s.FileName=file;
if (s.showOpen()) var result=s.FileName;
}
catch(e) { var result=prompt(msg,path+file); } // fallback for non-XP IE
}
return result;
}
};
//}}}
// // TOOLBAR DEFINITIONS
//{{{
config.commands.snapshotSave = {
text: "snap",
tooltip: config.macros.snapshot.snapPrompt,
handler: function(ev,src,title) {
src.setAttribute("snapID","ask");
src.setAttribute("printing","false");
src.setAttribute("HTMLOnly",config.options.chkSnapshotHTMLOnly?"true":"false");
config.macros.snapshot.go(src,ev);
return false;
}
};
config.commands.snapshotPrint = {
text: "Stampa",
tooltip: config.macros.snapshot.printPrompt,
handler: function(ev,src,title) {
src.setAttribute("snapID","ask");
src.setAttribute("printing","true");
src.setAttribute("HTMLOnly",config.options.chkSnapshotHTMLOnly?"true":"false");
config.macros.snapshot.go(src,ev);
return false;
}
};
//}}}
// // COPIED FROM [[StickyPopupPlugin]] TO ELIMINATE PLUGIN DEPENDENCY
//{{{
if (config.options.chkStickyPopups==undefined) config.options.chkStickyPopups=false;
Popup.stickyPopup_onDocumentClick = function(ev)
{
// if click is in a sticky popup, ignore it so popup will remain visible
var e = ev ? ev : window.event; var target = resolveTarget(e);
var p=target; while (p) {
if (hasClass(p,"popup") && (hasClass(p,"sticky")||config.options.chkStickyPopups)) break;
else p=p.parentNode;
}
if (!p) // not in sticky popup (or sticky popups disabled)... use normal click handling
Popup.onDocumentClick(ev);
return true;
};
try{removeEvent(document,"click",Popup.onDocumentClick);}catch(e){};
try{addEvent(document,"click",Popup.stickyPopup_onDocumentClick);}catch(e){};
//}}}
/***
|''Name''|SparklinePlugin|
|''Description''|provides support for [[sparklines|http://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=0001OR&topic_id=1]]|
|''Version''|1.0.0|
|''Status''|stable|
|''Source''|http://www.tiddlywiki.com/coreplugins.html#SparklinePlugin|
|''~CodeRepository:''|http://svn.tiddlywiki.org/Trunk/association/plugins/SparklinePlugin/SparklinePlugin.js |
|''License''|[[BSD open source license]]|
|''~CoreVersion''|2.3.0|
|''Feedback''|[[TiddlyWiki community|http://groups.google.com/group/TiddlyWiki]] |
|''Keywords''|visualization|
!Usage
{{{
<<sparkline numbers>>
}}}
The macro accepts space-separated numeric values as parameter.
!!Examples
Activity on http://www.tiddlywiki.com during the month of April 2005:
{{{<<sparkline 163 218 231 236 232 266 176 249 289 1041 1835 2285 3098 2101 1755 3283 3353 3335 2898 2224 1404 1354 1825 1839 2142 1942 1784 1145 979 1328 1611>>}}}
<<sparkline 163 218 231 236 232 266 176 249 289 1041 1835 2285 3098 2101 1755 3283 3353 3335 2898 2224 1404 1354 1825 1839 2142 1942 1784 1145 979 1328 1611>>
!Code
***/
//{{{
if(!version.extensions.SparklinePlugin) {
version.extensions.SparklinePlugin = {installed:true};
//--
//-- Sparklines
//--
config.macros.sparkline = {};
config.macros.sparkline.handler = function(place,macroName,params)
{
var data = [];
var min = 0;
var max = 0;
var v;
for(var t=0; t<params.length; t++) {
v = parseInt(params[t]);
if(v < min)
min = v;
if(v > max)
max = v;
data.push(v);
}
if(data.length < 1)
return;
var box = createTiddlyElement(place,"span",null,"sparkline",String.fromCharCode(160));
box.title = data.join(",");
var w = box.offsetWidth;
var h = box.offsetHeight;
box.style.paddingRight = (data.length * 2 - w) + "px";
box.style.position = "relative";
for(var d=0; d<data.length; d++) {
var tick = document.createElement("img");
tick.border = 0;
tick.className = "sparktick";
tick.style.position = "absolute";
tick.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
tick.style.left = d*2 + "px";
tick.style.width = "2px";
v = Math.floor(((data[d] - min)/(max-min)) * h);
tick.style.top = (h-v) + "px";
tick.style.height = v + "px";
box.appendChild(tick);
}
};
}
//}}}
Le Sparklines sono state inventate da [[Edward Tufte|http://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=0001OR&topic_id=1]], autore di diverse ispirate pubblicazioni riguardo la presentazione di informazioni visuali.
Le Sparklines sono descritte da Tufte come "grafici piccoli, intensi e simili alle parole". Le sparklines sono state progettate per essere utilizzate in linea con il testo. Per esempio, questa sparkline <<sparkline 16217 16516 14619 6663 7118 18068 16922 15451 16314 14346 7513 6381 16190 15900 15399 15166 13002 6339 5658 15320 15376 14912 14553 13154 6658 5458 15647 15507 14793 14508 12947>> mostra il numero di visitatori diversi della sezione Università del portale Unina nei giorni che vanno dal 1 marzo al 31 marzo 2006. Osservandola, è immediato intuire che l'andamento del numero di visitatori diversi del portale Unina è ciclico, presentandosi nei fine settimana un minore numero di visitatori del sito.
Creare una sparkline nel proprio wiki è estremamente semplice utilizzando l'omonima macro:
{{{
<<sparkline 163 218 ... 1328 1611>>
}}}
La particolarità delle sparklines è che esse vengono create in linea nel testo senza richiedere alcuna risorsa grafica né una logica ServerSide.
!!!Dalla versione 2.4.0 di TW la macro {{{<<sparkline>>}}} è stata rimossa dal codice core. Se si intende continuare ad utilizzare la macro, sul sito http://www.tiddlywiki.com/coreplugins.html è disponibile il relativo plugin che va installato nel proprio TW.
In TiddlyWiki esistono dei [[Tiddler]] speciali che definiscono la configurazione generale del vostro sito wiki.
MainMenu contiene tutti i link presenti nella barra del menù principale visualizzata sulla sinistra di questa pagina.
SiteTitle e SiteSubtitle sono autoesplicativi, il primo contiene infatti il nome del Wiki visibile sulla barra della finestra del browser, mentre il secondo contiene il sottotitolo del Wiki visibile sempre nella barra della finestra del browser. Entrambe queste informazioni vengono anche visualizzate nel banner del sito.
Il DefaultTiddlers è utilizzato per elencare i tiddlers che si vuole siano visualizzati quando si apre il sito.
Tutti questi elementi possono essere modificati e le variazioni si riflettono immediatamente sul sito. Provate con il vostro TiddlyWiki !
~TiddlyWiki può leggere diversi paramenti di startup dalla sezione //location// dell'URL del sito (le informazioni presenti dopo il carattere '#'). Nel modo d'uso più semplice di questa possibilità, negli ~StartupParameters possono essere indicati i tiddlers che devono essere aperti quando si carica ~TiddlyWiki nel browser, come mostrato nel seguente esempio:
{{{
http://www.tiddlywiki.com/#HelloThere JeremyRuston
}}}
In effetti quest'uso dei parametri di startup, è equivalente a questo URL:
{{{
http://www.tiddlywiki.com/#open:HelloThere open:JeremyRuston
}}}
La lista completa dei comandi disponibili per i parametri di startup, è la seguente:
|!Comando |!Descrizione |!Esempio |
|open:titolo|Apre il tiddler il cui titolo è quello specificato |http://pollio.maurizio.googlepages.com/MiniGuidaTiddlyWiki.html#open:SemplicedaEditare |
|start:safe |Avvia ~TiddlyWiki nella modalità SafeMode |http://pollio.maurizio.googlepages.com/MiniGuidaTiddlyWiki.html#start:safe |
|search:testo |Esegue la ricerca del testo specificato |http://pollio.maurizio.googlepages.com/MiniGuidaTiddlyWiki.html#search:WikiParola |
|tag:nome etichetta |Mostra tutti i tiddlers associati all'etichetta specificata |http://pollio.maurizio.googlepages.com/MiniGuidaTiddlyWiki.html#tag:Importante |
|newTiddler:titolo |Apre un nuovo tiddler nel modo edit con il titolo specificato |http://pollio.maurizio.googlepages.com/MiniGuidaTiddlyWiki.html#newTiddler:Prova |
|newJournal:DateFormatString |Apre un nuovo tiddler del tipo journal con il formato data specificato in accordo a DateFormatString |http://pollio.maurizio.googlepages.com/MiniGuidaTiddlyWiki.html#newJournal:"DD.MM.YYYY" |
/*Change Style Info Here*/
/***
This fixes a problem with the tabs slider
***/
/*{{{*/
#sidebarTabs .button {
margin:0em 0.2em;
padding:0.2em 0.3em;
display:block;
}
/*}}}*/
/***
Style tweak to obtain rounded corner using mozilla based browser (thanks to [[Clint Checketts]] for his help)
***/
/*{{{*/
.tabContents,
#sidebarOptions .sliderPanel,
#messageArea,
#pageFooter
{
-moz-border-radius: 10px;
}
#sidebarOptions input,
#messageArea .button,
.tagging,
.tagged
{
-moz-border-radius: 5px;
}
#contentWrapper .tabContents .tabContents{
width: 90%;
}
/*}}}*/
|Standard Periodic Table (ref. Wikipedia)|c
|| !1 | !2 |!| !3 | !4 | !5 | !6 | !7 | !8 | !9 | !10 | !11 | !12 | !13 | !14 | !15 | !16 | !17 | !18 |
|!1|bgcolor(#a0ffa0): @@color(red):H@@ |>|>|>|>|>|>|>|>|>|>|>|>|>|>|>|>||bgcolor(#c0ffff): @@color(red):He@@ |
|!2|bgcolor(#ff6666): Li |bgcolor(#ffdead): Be |>|>|>|>|>|>|>|>|>|>||bgcolor(#cccc99): B |bgcolor(#a0ffa0): C |bgcolor(#a0ffa0): @@color(red):N@@ |bgcolor(#a0ffa0): @@color(red):O@@ |bgcolor(#ffff99): @@color(red):F@@ |bgcolor(#c0ffff): @@color(red):Ne@@ |
|!3|bgcolor(#ff6666): Na |bgcolor(#ffdead): Mg |>|>|>|>|>|>|>|>|>|>||bgcolor(#cccccc): Al |bgcolor(#cccc99): Si |bgcolor(#a0ffa0): P |bgcolor(#a0ffa0): S |bgcolor(#ffff99): @@color(red):Cl@@ |bgcolor(#c0ffff): @@color(red):Ar@@ |
|!4|bgcolor(#ff6666): K |bgcolor(#ffdead): Ca ||bgcolor(#ffc0c0): Sc |bgcolor(#ffc0c0): Ti |bgcolor(#ffc0c0): V |bgcolor(#ffc0c0): Cr |bgcolor(#ffc0c0): Mn |bgcolor(#ffc0c0): Fe |bgcolor(#ffc0c0): Co |bgcolor(#ffc0c0): Ni |bgcolor(#ffc0c0): Cu |bgcolor(#ffc0c0): Zn |bgcolor(#cccccc): Ga |bgcolor(#cccc99): Ge |bgcolor(#cccc99): As |bgcolor(#a0ffa0): Se |bgcolor(#ffff99): @@color(green):Br@@ |bgcolor(#c0ffff): @@color(red):Kr@@ |
|!5|bgcolor(#ff6666): Rb |bgcolor(#ffdead): Sr ||bgcolor(#ffc0c0): Y |bgcolor(#ffc0c0): Zr |bgcolor(#ffc0c0): Nb |bgcolor(#ffc0c0): Mo |bgcolor(#ffc0c0): Tc |bgcolor(#ffc0c0): Ru |bgcolor(#ffc0c0): Rh |bgcolor(#ffc0c0): Pd |bgcolor(#ffc0c0): Ag |bgcolor(#ffc0c0): Cd |bgcolor(#cccccc): In |bgcolor(#cccccc): Sn |bgcolor(#cccc99): Sb |bgcolor(#cccc99): Te |bgcolor(#ffff99): I |bgcolor(#c0ffff): @@color(red):Xe@@ |
|!6|bgcolor(#ff6666): Cs |bgcolor(#ffdead): Ba |bgcolor(#ffbfff):^^*1^^|bgcolor(#ffc0c0): Lu |bgcolor(#ffc0c0): Hf |bgcolor(#ffc0c0): Ta |bgcolor(#ffc0c0): W |bgcolor(#ffc0c0): Re |bgcolor(#ffc0c0): Os |bgcolor(#ffc0c0): Ir |bgcolor(#ffc0c0): Pt |bgcolor(#ffc0c0): Au |bgcolor(#ffc0c0): @@color(green):Hg@@ |bgcolor(#cccccc): Tl |bgcolor(#cccccc): Pb |bgcolor(#cccccc): Bi |bgcolor(#cccc99): Po |bgcolor(#ffff99): At |bgcolor(#c0ffff): @@color(red):Rn@@ |
|!7|bgcolor(#ff6666): Fr |bgcolor(#ffdead): Ra |bgcolor(#ff99cc):^^*2^^|bgcolor(#ffc0c0): Lr |bgcolor(#ffc0c0): Rf |bgcolor(#ffc0c0): Db |bgcolor(#ffc0c0): Sq |bgcolor(#ffc0c0): Bh |bgcolor(#ffc0c0): Hs |bgcolor(#ffc0c0): Mt |bgcolor(#ffc0c0): Ds |bgcolor(#ffc0c0): Rg |bgcolor(#ffc0c0): @@color(green):Uub@@ |bgcolor(#cccccc): Uut |bgcolor(#cccccc): Uuq |bgcolor(#cccccc): Uup |bgcolor(#cccccc): Uuh |bgcolor(#fcfecc): @@color(#cccccc):Uus@@ |bgcolor(#ecfefc): @@color(#cccccc):Uuo@@ |
| !Lanthanides^^*1^^|bgcolor(#ffbfff): La |bgcolor(#ffbfff): Ce |bgcolor(#ffbfff): Pr |bgcolor(#ffbfff): Nd |bgcolor(#ffbfff): Pm |bgcolor(#ffbfff): Sm |bgcolor(#ffbfff): Eu |bgcolor(#ffbfff): Gd |bgcolor(#ffbfff): Tb |bgcolor(#ffbfff): Dy |bgcolor(#ffbfff): Ho |bgcolor(#ffbfff): Er |bgcolor(#ffbfff): Tm |bgcolor(#ffbfff): Yb |
| !Actinides^^*2^^|bgcolor(#ff99cc): Ac |bgcolor(#ff99cc): Th |bgcolor(#ff99cc): Pa |bgcolor(#ff99cc): U |bgcolor(#ff99cc): Np |bgcolor(#ff99cc): Pu |bgcolor(#ff99cc): Am |bgcolor(#ff99cc): Cm |bgcolor(#ff99cc): Bk |bgcolor(#ff99cc): Cf |bgcolor(#ff99cc): Es |bgcolor(#ff99cc): Fm |bgcolor(#ff99cc): Md |bgcolor(#ff99cc): No |
*Chemical Series of the Periodic Table
**@@bgcolor(#ff6666): Alkali metals@@
**@@bgcolor(#ffdead): Alkaline earth metals@@
**@@bgcolor(#ffbfff): Lanthanides@@
**@@bgcolor(#ff99cc): Actinides@@
**@@bgcolor(#ffc0c0): Transition metals@@
**@@bgcolor(#cccccc): Poor metals@@
**@@bgcolor(#cccc99): Metalloids@@
**@@bgcolor(#a0ffa0): Nonmetals@@
**@@bgcolor(#ffff99): Halogens@@
**@@bgcolor(#c0ffff): Noble gases@@
*State at standard temperature and pressure
**those in @@color(red):red@@ are gases
**those in @@color(green):green@@ are liquids
**those in black are solids
La macro ''tabs'' permette di creare agevolmente all'interno di un tiddler una visualizzazione di informazioni organizzate mediante tab.
!Codice
{{{
<<tabs tabsClass
Microcoentenuti "Una descrizione del concetto di microcontenuti in TiddlyWiki" MicroContenuti
Tiddler "Una descrizione del concetto di tiddler in TiddlyWiki" Tiddler
>>
}}}
!Esecuzione
<<tabs tabsClass
Microcontenuti "Una descrizione del concetto di microcontenuti in TiddlyWiki" MicroContenuti
Tiddler "Una descrizione del concetto di tiddler in TiddlyWiki" Tiddler
>>
!Parametri
*Prima Linea
**tabsClass o txtFavourite: la classe CSS che la macro deve utilizzare per formattare la finestra. Può essere utilizzata per definire il proprio stile di presentazione.
*Altre linee, separati da spazi, i seguenti parametri:
**Il titolo del tab;
**Il testo che deve essere visualizzato quando il cursore del mouse viene posizonato sul tab;
**il nome del tiddler che deve essere incluso nel tab quando questo viene cliccato.
Un altro esempio d'uso di questa macro lo trovate [[qui|Lista delle cose da fare - semplice]].
~TiddlyWiki definisce e fa uso di un numero limitato di TagSpeciali. Queste etichette sono utilizzate per trattare i tiddlers a cui sono associate in modo speciale. In particolare i ~TagSpeciali sono:
* [[excludeSearch]]: se questo tag è associato ad un tiddler comporta l'esclusione del tiddler dai risultati della ricerca;
* [[excludeLists]]: se questo tag è associato ad un tiddler comporta l'esclusione del tiddler dai tab della ~SideBar;
* ''systemTiddler'': questo tag è utilizzato per marcare tiddlers il cui contenuto è utilizzato da ~TiddlyWiki per creare gli elementi principali, quali il menù principale, il titolo del sito, la ~SideBar. I tiddlers marcati con systemTiddler sono automaticamente inclusi nel vostro wiki se utilizzate l'opzione SalvaModelloVuoto nelle opzioni avanzate;
* ''systemConfig'': questo tag è utilizzato per marcare tiddlers che contengono codice ~JavaScript che deve essere eseguito quando ~TiddlyWiki viene caricato nel browser.
In questo wiki sono presenti i seguenti tiddler di sistema: <<listTags systemTiddler>> e sono installate i seguenti Plugin: <<listTags systemConfig>>
La macro tagging produce una lista di link a tutti i tiddler che sono associati ad una data etichetta. Se la macro viene invocata senza specificare il tag, la macro elenca tutti i tiddler che sono etichettati con il nome del tiddler nel quale la macro viene invocata; invocando invece la macro specificando una etichetta, si ottiene l'elenco di tutti i tiddler associati all'etichetta specificata. Invocando, ad esempio, la macro tagging nel seguente modo:
{{{
<<tagging Funzionalità>>
}}}
si ottiene l'elenco di tutti i tiddlers di questa guida a cui è stata associata l'etichetta Funzionalità, come mostrato di seguito:
<<tagging Funzionalità>>
Il codice da utilizzare per invocare la macro tagging è il seguente:
{{{
<<tagging>>
<<tagging etichetta>>
}}}
In HTML, la lista prodotta dalla macro è formattata nel seguente modo:
{{{
<ul>
<li class="listTitle">List title label</li>
<li><a class="tiddlyLink ..." href="javascript:;" onclick="..."
refresh="link" tiddlyLink="ExampleOne">ExampleOne</a></li>
</ul>
}}}
{{{Esempio per mostrare il funzionamento della macro slider. Cliccate di nuovo sul pulsante per far scomparire il testo.}}}
//Dobbiamo guardarci dal predicare ai giovani il successo come scopo della vita. La persona di successo, nel senso in cui la si intende comunemente, è quella che riesce a farsi dare moltissimo dai propri simili, in genere incomparabilmente più di quanto corrisponda al servizio reso loro. Un uomo andrebbe valutato per ciò che dà, non per ciò che riesce a farsi dare dagli altri.// ''Albert Einstein''
Tiddler (//frammento// nella traduzione di Mathew Warburton) è il termine utilizzato per individuare un piccolo blocco di informazioni relative ad un determinato argomento. Un Tiddler può contenere testo, immagini, tabelle, liste e link esterni. Tutti questi elementi sono illustrati nella sezione [[Semplice da Editare]] di questo tutorial.
Quando state visualizzando un Tiddler come questo, potete chiuderlo muovendo semplicemente il mouse sopra il testo visualizzato e cliccare sul link "Chiudi" che compare in alto a destra. Provate direttamente con questo Tiddler!
I tiddlers ''mancanti'' sono quei frammenti collegati tra loro ma non ancora definiti, ossia vuoti. L'elenco di tutti i tiddlers mancanti del proprio wiki è consultabile selezionando il tab ''Mancanti'' della categoria ''Altro'' della SideBar.
I tiddlers ''orfani'' sono quei frammenti che sono stati creati, ossia hanno un contenuto, ma che non sono collegati a nessun altro tiddler. L'elenco di tutti i tiddlers orfani del proprio wiki è consultabile selezionando il tab ''Orfani'' della categoria ''Altro'' della SideBar.
~TiddlyWiki è il nome che è stato dato dal suo creatore (Jeremy Ruston) al software che state utilizzando in questo momento. ~TiddlyWiki è un WikiWikiWeb di MicroContenuti. Scritto in HTML, CSS e ~JavaScript, funziona con qualunque browser moderno senza bisogno di architetture ServerSide. Può essere usato per creare documenti AutoContenuti che possono essere pubblicati sul web, spediti per posta elettronica o portati con se in una Penna.
Il sito web di riferimento per questa tecnologia è [[www.tiddlywiki.com|http://www.tiddlywiki.com]].
Bello, non è vero?
Cliccando su TiddlyWikiTutorial, avete appena aperto il vostro primo [[Tiddler]]. Un [[Tiddler]] non è altro che un blocco di informazioni, o MicroContenuti, relativo ad un determinato argomento. Questo concetto di blocco di informazioni collegate tra loro è una delle caratteristiche che rende TiddlyWiki così potente. La mente umana non è adatta a trattare quantità rilevanti di informazioni; si ottengono risultati migliori quando le informazioni sono trattate in blocchi di dimensioni più limitate.
Oltre questo aspetto, ci sono altre ''due'' caratteristiche che rendono TiddlyWiki così potente e così diverso da quello che siamo abituati a pensare del web: è [[Semplice da Portare]] ed è [[Semplice da Editare]].
Quando posizionate il puntatore del mouse su un tiddler, sulla destra compaiono i comandi della Toolbar. I comandi sono:
* ''Chiudi'' - chiude il tiddler corrente
* ''Chiude altri'' - chiude tutti gli altri tiddler aperti escluso quello corrente
* ''Modifica'' - apre la finestra di editing del tiddler
* ''Indirizzo'' - carica nella barra indirizzo del browser l'indirizzo del tiddler corrente
* ''Collegati'' - elenca tutti i tiddler che sono collegati al tiddler corrente
* ''Vai a '' - elenca tutti i tiddler aperti nella pagina e consente di passare rapidamente ad uno di questi
* ''Salva'' - nel modo editing, salva le modifiche al tiddler
* ''Annulla'' - nel modo editing, annulla le modifiche fatte al tiddler
* ''Elimina'' - nel modo editing, cancella il tiddler
La macro Toolbar può essere usata quando si vuole [[personalizzare il proprio TiddlyWiky|Come modificare lo stile di TiddlyWiki]]. La macro consente, infatti, di definire i comandi che compaiono nella [[Toolbar]] quando si posiziona il cursore del mouse su un tiddler.
!Codice
{{{
<<toolbar closeTiddler -editTiddler +jump>>
}}}
!Esecuzione
<<toolbar closeTiddler -editTiddler +jump>>
!Argomenti
I comandi che è possibile inserire nella [[Toolbar]] sono elencati sul sito di ~TiddlyWiki. Cliccate [[qui|http://www.tiddlywiki.com/#tag:commands]] per avere l'elenco dei comandi.
I comandi preceduti dal segno + sono eseguiti quando si digita ~Ctrl-Enter sulla tastiera o quando viene eseguito un doppio click sul tiddler. I comandi preceduti dal segno - invece sono eseguiti quando si digita il tasto Esc sulla tastiera.
In questa sezione del tutorial, sono riportate delle ulteriori brevi guide all'uso di ~TiddlyWiki ''non'' presenti nel tutorial originale di ~JeremyH. Proprio mentre lavoravo alla realizzazione di questo wiki e quindi mentre mi inoltravo nella conoscenza del sistema, ho riscontrato più volte la necessità di integrare il già ottimo tutorial di partenza, con ulteriori brevi approfondimenti il cui contenuto è stato sempre ricavato dalla consultazione dei numerosi siti della [[comunità|Comunità]] di ~TiddlyWiki.
*[[Come aggiornare TiddlyWiki]]
*[[Come commentare tiddlers]]
*[[Come disabilitare l'editing da web del vostro TiddlyWiki]]
*[[Come elencare i tiddlers mancanti e orfani|Tiddlers mancanti e tiddlers orfani]]
*[[Come elencare tutti i tiddlers che hanno la stessa etichetta]]
*[[Come elencare tutti i tiddlers presenti nel proprio wiki]]
*[[Come far aprire TiddlyWiki con una specificata configurazione di tiddlers aperti]]
*[[Come includere codice HTML in un tiddler]]
*[[Come installare Plugin]]
*[[Come installare macro]]
*[[Come realizzare una versione multilingua di TiddlyWiki]]
*[[Come gestire la Timeline]]
*[[Come modificare le dimensioni dei caratteri dei frammenti aperti]]
*[[Come salvare un modello vuoto del vostro TiddlyWiki]]
Questo tiddler, ispirato dall'ottima guida [[TiddlyWiki for the rest of us|http://giffmex.org/twfortherestofus.html]], ha l'intento di presentare una guida visuale sintetica alle componenti principali di ~TiddlyWiki.
In questa immagine, i box grafici sono ulteriormente descritti nei successivi tiddler.
[img[Pagina principale di TiddlyWiki|TW1.jpg]]
* [[L'Header]]
* [[Il Main Menu]]
* [[La SideBar]]
* [[I Tiddler]]
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 14/09/2010 16:10:36 | RR | [[Index.html|file:///F:/PORTALE/PUBLIC/TiddlyWiki/Index.html]] | [[store.php|http://www.notaioricciardi.it/public/TiddlyWiki/store.php]] | . | [[index.html | http://www.notaioricciardi.it/public/TiddlyWiki/index.html]] | |
/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.4|
|''Date:''|2008-08-11|
|''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: 4,
date: new Date("2008-08-11"),
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");
//}}}
Un altro impiego di ~TiddlyWiki consiste nell'utilizzarlo come un programma per la realizzazione di una presentazione costituita da slides (per intendersi, appunto come ~PowerPoint). Per questo scopo è disponibile un plugin specifico [[SlideShowPlugin|http://www.math.ist.utl.pt/~psoares/addons.html#SlideShowPlugin]] che trasforma TW in un comodo ed efficace sistema per la realizzazione di una presentazione composta da slides. Anche per questa implementazione ho realizzato una breve guida all'uso consultabile al seguente link:
http://pollio.maurizio.googlepages.com/slideshow_empty_it.html
Uno degli utilizzi più diffusi di ~TiddlyWiki è proprio quello di gestore delle attività. A riprova di questa osservazione, basta considerare che esistono diversi adattamenti di questo software dedicati a risolvere nel modo più efficente possibile proprio questa esigenza. Per adattamenti si intendono delle modifiche sostanziali al software originario, mirate a realizzare specifiche funzionalità. Chi volesse approfondire le possibilità di ~TiddlyWiki relativamente alla gestione delle attività, può consultare i seguenti siti:
* ~NathanBower's ''~GTDTiddlyWiki'' http://shared.snapgrid.com/gtd_tiddlywiki.html
* ~SimonBaird ''~MonkeyGTDT'' http://simonbaird.com/monkeygtd/
* ~TomOtvos ''dcubed'' http://www.dcubed.ca
In particolare, per ''dcubed'', segnalo che al seguente link [[pollio.maurizio.googlepages.com/it-d3-gtd-sample.html|http://pollio.maurizio.googlepages.com/it-d3-gtd-sample.html]] è disponibile il mio adattamento alla lingua italiana di questa potente e versatile implementazione con ~TiddlyWiki della metodologia [[GTD]] sviluppata da Tom Otvos.
In ogni caso, a chi abbia già esplorato questa guida, sarà apparso subito chiaro che le funzionalità di ~TiddlyWiki associate all'uso delle etichette (tag) lo rendono particolarmente adatto alla gestione di attività. Un semplice esempio che dimostra tali potenzialità è il seguente:
* create due nuovi tiddler nel vostro wiki. Il primo dal titolo 'Attività da svolgere' ed il secondo dal titolo 'Attività svolte'. Nel corpo del primo tiddler inserite la macro {{{<}}}{{{<listTags DaFare>>}}}, mentre nel secondo tiddler inserite la macro {{{<}}}{{{<listTags Fatte>>}}};
* create tanti tiddler ognuno per ciascuna delle attività che dovete svolgere. Il titolo del tiddler sarà il nome dell'attività, il corpo del tiddler descriverà l'attività ed il tiddler sarà associato all'etichetta ~DaFare.
A questo punto se provate a visualizzare il tiddler 'Attività da svolgere', questo visualizzerà l'elenco di tutte le attività ancora da svolgere. Se una attività viene completata, basterà editare il relativo tiddler cambiando l'etichetta da ~DaFare a Fatte. Automaticamente l'attività scomparirà dal tiddler 'Attività da svolgere' e comparirà nel tiddler 'Attività svolte'.
Questo esempio, sebbene semplice rispetto agli adattamenti di ~TiddlyWiki specificatamente progettati per la gestione delle attività, mostra chiaramente le potenzialità di questo software.
L'uso di questo sito è estremamente semplice. Per la navigazione occorre solo sapere che cliccando su un link visualizzato in grassetto aprite il [[Tiddler]] associato. Cliccando, invece, su un link visualizzato in carattere corsivo come questo, NonEsiste, create un nuovo [[Tiddler]]. Potete creare un nuovo tiddler anche cliccando sul comando ''Nuovo'' visualizzato sul menù di destra della pagina. Quando spostate il puntatore del mouse su un [[Tiddler]], compaiono i comandi della [[Toolbar]]. Potete editare un qualsiasi tiddler facendo doppio click su di esso, oppure cliccando sul comando ''Modifica'' della [[Toolbar]]. Le vostre modifiche non saranno però salvate in maniera permanente fino a quando non avrete una vostra copia di TiddlyWiki. Per questo argomento leggete [[Come salvare le proprie modifiche]].
Per familiarizzare con TiddlyWiki leggete anche i tiddler l'[[Esperienza di lettura]], [[Una guida visuale a TiddlyWiki]], SideBar e [[Opzioni]].
Per avere, inoltre, una visione rapida dei principali contenuti di questa guida, consultate la [[Mappa del sito]].
<!--{{{-->
<div class='toolbar' macro='toolbar -closeTiddler closeOthers snapshotPrint +editTiddler permalink references jump'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, modificato il <span macro='view modified date [[DD MMM YYYY]]'></span> (creato il <span macro='view created date [[DD MMM YYYY]]'></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>
<!--}}}-->
Una ~WikiParola si compone di più parole attaccate tra loro con le iniziali in maiuscolo. La notazione ~WikiParola nel WikiWikiWeb convenzionale crea delle pagine web vuote mentre in TiddlyWiki crea frammenti di [[microcontenuti|MicroContenuti]]. Digitando una ~WikiParola si crea automaticamente un collegamento ad un Tiddler che, se selezionato, viene aperto. Se il Tiddler è vuoto, ~TiddlyWiki notifica che il frammento non esiste ancora e vi consente di editarlo.
Questa versione di TiddlyWiki permette anche di [[non linkare una WikiParola|Come non linkare una WikiParola]].
Con il termine Wiki si intende un modo collaborativo di costruire siti web. Wiki si basa su concetti come la facilità di editare le pagine e l'uso di annotazioni di parole speciali come la WikiParola che crea 'automagicamente=automaticamente+magicamente' collegamenti ipertestuali tra le diverse pagine. Per maggiori dettagli sul concetto di wiki, si suggerisce di consultare [[Wikipedia|http://en.wikipedia.org/wiki/Wiki]]. Tiddly Wiki si differenzia dai Wiki convenzionali perchè non crea pagine intere ma piccoli frammenti di MicroContenuti denominati [[Tiddler]].
<script>
window.addTiddlerComment = function(place) {
if (!window.story) window.story=window; if (!store.getTiddler) store.getTiddler=function(title) {return this.tiddlers[title]}
var title = story.findContainingTiddler(place).id.substr(7);
var tiddler=store.getTiddler(title);
var pos=tiddler.text.indexOf("/%"+place.id+"%/");
if (pos==-1) pos=tiddler.text.length;
var txt="!!!!!commento di "+config.options.txtUserName+" scritto "+(new Date()).toLocaleString()+"\n<<<\n"+place.value+'\n<<<\n';
tiddler.set(null,tiddler.text.substr(0,pos)+txt+tiddler.text.substr(pos));
story.refreshTiddler(title,1,true);
store.setDirty(true);
}
</script>
Un esempio di come realizzare un Tiddler che ha per nome una non WikiParola.
Aggiungete questa etichetta ad un tiddler per rimuovere il tiddler dalla SideBar.
Aggiungete questa etichetta ad un tiddler per rimuovere il tiddler dai risultati delle ricerche.
/***
|''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"
});
}}}
version.extensions.smileyMacro = {major: 0, minor: 1, revision: 0, date: new Date(2005,7,20)};
//Author: Alan Hecht
config.macros.smiley = {}
config.macros.smiley.handler = function(place,macroName,params)
{
var palette = ["transparent","#000000","#1a1507","#352e18","#464646","#666666","#a3141e","#b06b63","#cc9900","#dd9030","#dddddd","#e89d00","#edc32a","#f3cb3c","#fdf201","#fdf526","#ff3149","#ffac00","#ffbf06","#ffc846","#ffcc66","#ffd758","#ffdd01","#ffea7b","#ffed55","#ffffff"];
var data = params;
var imageMap = null;
if(data[0] == ":-)" || data[0] == ":)")
imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyffyffuujbaadyyyeeyeetttdabppppddyddpmmlbbwoooooooowsrlbbwwpooooowwmrlbbwwboooowwwbllbbwwwboooowbrllbacwwwbbbbbrllcaablswwwwsrrlibaaablsssrrllibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";
else if(data[0] == ":-(" || data[0] == ":(")
imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyyyyyyuujbaadyyyeeyeetttdabppppddyddpmmlbbwoooooooowsrlbbwwpooooowwmrlbbwwoooooowwrllbbwwwwbbbbbsrllbacwwbwwwwsbllcaablswwwwsrrlibaaablsssrrllibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";
else if(data[0] == ";-)" || data[0] == ";)")
imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyxxxxxuujbaadyyyxxxeetttdabppphddyddpmmlbbwoooooooowsrlbbwwpooooowwmrlbbwwboooowwwbllbbwwwboooowbrllbacwwwbbbbbrllcaablswwwwsrrlibaaablsssrrllibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";
else if(data[0] == ":-|" || data[0] == ":|")
imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyffyffuujbaadyyyeeyeetttdabppppddyddpmmlbbwoooooooowsrlbbwwpooooowwmrlbbwwoooooowwrllbbwwwwbbbbbsrllbacwwwwwwwsrllcaablswwwwsrrlibaaablsssrrllibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";
else if(data[0] == ":-D" || data[0] == ":D")
imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyeeyeeuujbaadyyyeeyeetttdabppppyyyyypmmlbbwbbbbbbbbbbblbbwbkzzzzzzzkbwbbwbfzzzzzzzfbwbbwbkzzzzzzzkbwbacwbkzzzzzkblcaablsbkzzzkblibaaablsbbbbblibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";
else
createTiddlyElement(place,"span",null,"errorNoSuchMacro","unknown smiley");
if(imageMap)
{
var box = createTiddlyElement(place,"span",null,"smiley",String.fromCharCode(160));
box.style.position = "relative";
box.style.width = "15px";
box.style.height = "15px";
box.style.marginLeft = "1px";
box.style.marginRight = "1px";
box.style.paddingRight = "12px";
box.style.verticalAlign = "top";
//now divide into 15x15 grid and create each pixel
// rows
for(r=0; r<15; r++)
{
// columns
for(c=0; c<15; c++)
{
//create each pixel with the correct background
var pix = document.createElement("img");
pix.className = "smileyPixel";
pix.style.position = "absolute";
pix.border = 0;
pix.style.top = r + "px";
pix.style.left = c + "px";
pix.style.width = "1px";
pix.style.height = "1px";
pix.style.backgroundColor = palette[imageMap.charCodeAt((r*15)+c)-97];
pix.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
box.appendChild(pix);
}
}
}
}
<?php
/***
! User settings
Edit these lines according to your need
***/
//{{{
$AUTHENTICATE_USER = true; // true | false
$USERS = array(
'UserName1'=>'Password1',
'UserName2'=>'Password2',
'UserName3'=>'Password3'); // set usernames and strong passwords
$DEBUG = false; // true | false
$CLEAN_BACKUP = true; // during backuping a file, remove overmuch backups
$FOLD_JS = true; // if javascript files have been expanded during download the fold them
error_reporting(E_ERROR | E_WARNING | E_PARSE);
//}}}
/***
!Code
No change needed under
***/
//{{{
/***
* store.php - upload a file in this directory
* version :1.6.1 - 2007/08/01 - BidiX@BidiX.info
*
* see :
* http://tiddlywiki.bidi.info/#UploadPlugin for usage
* http://www.php.net/manual/en/features.file-upload.php
* for details on uploading files
* usage :
* POST
* UploadPlugin[backupDir=<backupdir>;user=<user>;password=<password>;uploadir=<uploaddir>;[debug=1];;]
* userfile <file>
* GET
*
* each external javascript file included by download.php is change by a reference (src=...)
*
* Revision history
* V1.6.1 - 2007/08/01
* Enhancement: Add javascript folding
* V1.6.0 - 2007/05/17
* Enhancement: Add backup management
* V1.5.2 - 2007/02/13
* Enhancement: Add optional debug option in client parameters
* V1.5.1 - 2007/02/01
* Enhancement: Check value of file_uploads in php.ini. Thanks to Didier Corbière
* V1.5.0 - 2007/01/15
* Correct: a bug in moving uploadFile in uploadDir thanks to DaniGutiérrez for reporting
* Refactoring
* V 1.4.3 - 2006/10/17
* Test if $filename.lock exists for GroupAuthoring compatibility
* return mtime, destfile and backupfile after the message line
* V 1.4.2 - 2006/10/12
* add error_reporting(E_PARSE);
* v 1.4.1 - 2006/03/15
* add chmo 0664 on the uploadedFile
* v 1.4 - 2006/02/23
* add uploaddir option : a path for the uploaded file relative to the current directory
* backupdir is a relative path
* make recusively directories if necessary for backupDir and uploadDir
* v 1.3 - 2006/02/17
* presence and value of user are checked with $USERS Array (thanks to PauloSoares)
* v 1.2 - 2006/02/12
* POST
* UploadPlugin[backupDir=<backupdir>;user=<user>;password=<password>;]
* userfile <file>
* if $AUTHENTICATE_USER
* presence and value of user and password are checked with
* $USER and $PASSWORD
* v 1.1 - 2005/12/23
* POST UploadPlugin[backupDir=<backupdir>] userfile <file>
* v 1.0 - 2005/12/12
* POST userfile <file>
*
* Copyright (c) BidiX@BidiX.info 2005-2007
***/
//}}}
//{{{
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
/*
* GET Request
*/
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<title>BidiX.info - TiddlyWiki UploadPlugin - Store script</title>
</head>
<body>
<p>
<p>store.php V 1.6.1
<p>BidiX@BidiX.info
<p> </p>
<p> </p>
<p> </p>
<p align="center">This page is designed to upload a <a href="http://www.tiddlywiki.com/">TiddlyWiki<a>.</p>
<p align="center">for details see : <a href="http://TiddlyWiki.bidix.info/#HowToUpload">TiddlyWiki.bidix.info/#HowToUpload<a>.</p>
</body>
</html>
<?php
exit;
}
/*
* POST Request
*/
// Recursive mkdir
function mkdirs($dir) {
if( is_null($dir) || $dir === "" ){
return false;
}
if( is_dir($dir) || $dir === "/" ){
return true;
}
if( mkdirs(dirname($dir)) ){
return mkdir($dir);
}
return false;
}
function toExit() {
global $DEBUG, $filename, $backupFilename, $options;
if ($DEBUG) {
echo ("\nHere is some debugging info : \n");
echo("\$filename : $filename \n");
echo("\$backupFilename : $backupFilename \n");
print ("\$_FILES : \n");
print_r($_FILES);
print ("\$options : \n");
print_r($options);
}
exit;
}
function ParseTWFileDate($s) {
// parse date element
preg_match ( '/^(\d\d\d\d)(\d\d)(\d\d)\.(\d\d)(\d\d)(\d\d)/', $s , $m );
// make a date object
$d = mktime($m[4], $m[5], $m[6], $m[2], $m[3], $m[1]);
// get the week number
$w = date("W",$d);
return array(
'year' => $m[1],
'mon' => $m[2],
'mday' => $m[3],
'hours' => $m[4],
'minutes' => $m[5],
'seconds' => $m[6],
'week' => $w);
}
function cleanFiles($dirname, $prefix) {
$now = getdate();
$now['week'] = date("W");
$hours = Array();
$mday = Array();
$year = Array();
$toDelete = Array();
// need files recent first
$files = Array();
($dir = opendir($dirname)) || die ("can't open dir '$dirname'");
while (false !== ($file = readdir($dir))) {
if (preg_match("/^$prefix/", $file))
array_push($files, $file);
}
$files = array_reverse($files);
// decides for each file
foreach ($files as $file) {
$fileTime = ParseTWFileDate(substr($file,strpos($file, '.')+1,strrpos($file,'.') - strpos($file, '.') -1));
if (($now['year'] == $fileTime['year']) &&
($now['mon'] == $fileTime['mon']) &&
($now['mday'] == $fileTime['mday']) &&
($now['hours'] == $fileTime['hours']))
continue;
elseif (($now['year'] == $fileTime['year']) &&
($now['mon'] == $fileTime['mon']) &&
($now['mday'] == $fileTime['mday'])) {
if (isset($hours[$fileTime['hours']]))
array_push($toDelete, $file);
else
$hours[$fileTime['hours']] = true;
}
elseif (($now['year'] == $fileTime['year']) &&
($now['mon'] == $fileTime['mon'])) {
if (isset($mday[$fileTime['mday']]))
array_push($toDelete, $file);
else
$mday[$fileTime['mday']] = true;
}
else {
if (isset($year[$fileTime['year']][$fileTime['mon']]))
array_push($toDelete, $file);
else
$year[$fileTime['year']][$fileTime['mon']] = true;
}
}
return $toDelete;
}
function replaceJSContentIn($content) {
if (preg_match ("/(.*?)<!--DOWNLOAD-INSERT-FILE:\"(.*?)\"--><script\s+type=\"text\/javascript\">(.*)/ms", $content,$matches)) {
$front = $matches[1];
$js = $matches[2];
$tail = $matches[3];
if (preg_match ("/<\/script>(.*)/ms", $tail,$matches2)) {
$tail = $matches2[1];
}
$jsContent = "<script type=\"text/javascript\" src=\"$js\"></script>";
$tail = replaceJSContentIn($tail);
return($front.$jsContent.$tail);
}
else
return $content;
}
// Check if file_uploads is active in php config
if (ini_get('file_uploads') != '1') {
echo "Error : File upload is not active in php.ini\n";
toExit();
}
// var definitions
$uploadDir = './';
$uploadDirError = false;
$backupError = false;
$optionStr = $_POST['UploadPlugin'];
$optionArr=explode(';',$optionStr);
$options = array();
$backupFilename = '';
$filename = $_FILES['userfile']['name'];
$destfile = $filename;
// get options
foreach($optionArr as $o) {
list($key, $value) = split('=', $o);
$options[$key] = $value;
}
// debug activated by client
if ($options['debug'] == 1) {
$DEBUG = true;
}
// authenticate User
if (($AUTHENTICATE_USER)
&& ((!$options['user']) || (!$options['password']) || ($USERS[$options['user']] != $options['password']))) {
echo "Error : UserName or Password do not match \n";
echo "UserName : [".$options['user']. "] Password : [". $options['password'] . "]\n";
toExit();
}
// make uploadDir
if ($options['uploaddir']) {
$uploadDir = $options['uploaddir'];
// path control for uploadDir
if (!(strpos($uploadDir, "../") === false)) {
echo "Error: directory to upload specifies a parent folder";
toExit();
}
if (! is_dir($uploadDir)) {
mkdirs($uploadDir);
}
if (! is_dir($uploadDir)) {
echo "UploadDirError : $uploadDirError - File NOT uploaded !\n";
toExit();
}
if ($uploadDir{strlen($uploadDir)-1} != '/') {
$uploadDir = $uploadDir . '/';
}
}
$destfile = $uploadDir . $filename;
// backup existing file
if (file_exists($destfile) && ($options['backupDir'])) {
if (! is_dir($options['backupDir'])) {
mkdirs($options['backupDir']);
if (! is_dir($options['backupDir'])) {
$backupError = "backup mkdir error";
}
}
$backupFilename = $options['backupDir'].'/'.substr($filename, 0, strrpos($filename, '.'))
.date('.Ymd.His').substr($filename,strrpos($filename,'.'));
rename($destfile, $backupFilename) or ($backupError = "rename error");
// remove overmuch backup
if ($CLEAN_BACKUP) {
$toDelete = cleanFiles($options['backupDir'], substr($filename, 0, strrpos($filename, '.')));
foreach ($toDelete as $file) {
$f = $options['backupDir'].'/'.$file;
if($DEBUG) {
echo "delete : ".$options['backupDir'].'/'.$file."\n";
}
unlink($options['backupDir'].'/'.$file);
}
}
}
// move uploaded file to uploadDir
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $destfile)) {
if ($FOLD_JS) {
// rewrite the file to replace JS content
$fileContent = file_get_contents ($destfile);
$fileContent = replaceJSContentIn($fileContent);
if (!$handle = fopen($destfile, 'w')) {
echo "Cannot open file ($destfile)";
exit;
}
if (fwrite($handle, $fileContent) === FALSE) {
echo "Cannot write to file ($destfile)";
exit;
}
fclose($handle);
}
chmod($destfile, 0644);
if($DEBUG) {
echo "Debug mode \n\n";
}
if (!$backupError) {
echo "0 - File successfully loaded in " .$destfile. "\n";
} else {
echo "BackupError : $backupError - File successfully loaded in " .$destfile. "\n";
}
echo("destfile:$destfile \n");
if (($backupFilename) && (!$backupError)) {
echo "backupfile:$backupFilename\n";
}
$mtime = filemtime($destfile);
echo("mtime:$mtime");
}
else {
echo "Error : " . $_FILES['error']." - File NOT uploaded !\n";
}
toExit();
//}}}
?>