New upgrade method for TiddlyWiki: proof of concept

83 views
Skip to first unread message

Saq Imtiaz

unread,
Feb 15, 2008, 6:36:48 PM2/15/08
to TiddlyWikiDev
Now that the TiddlyWiki core supports importing content, the recommended upgrade method has been changed to take advantage of it. The current recommended method is to download a new empty TiddlyWiki and import your content in to it. The disadvantage is that it is a very counter-intuitive way of upgrading.

I've spent some time today putting together a proof of concept for a new upgrade process that takes advantage of the import mechanism but still offers a much simpler and almost 'one click' upgrade process.

This should prove useful in context of the following item on the roadmap for TiddlyWiki 2.3.1: 'New presentation of import tiddlers macro, optimized for upgrading TiddlyWikis? (2.3.1)'
(http://trac.tiddlywiki.org/milestone/2.3.1)

It is not much code either ~ 2kb. I've tested on FF2 and IE7 with no problems, on Windows Vista and Ubuntu.

Please keep in mind that I only spent about 2 hours on this and have not focused on the user interface for now. I just wanted a working demo so we could discuss this further. I would love to create a nice informative user interface that is updated during the upgrade process.

Demo
Download the attached file to your computer. It is the latest version of TiddlyWiki.com with my upgrade code added. The version number has been displayed in the SiteTitle using the version macro. Please note the 'upgrade' button in the HelloThere tiddler.  (I've attached both the TiddlyWiki and a zip file with the TiddlyWiki in case the group decides to gobble the html attachments.)

For the purpose of this demo I have put together a mock newer TiddlyWiki to upgrade to. It is a mock TiddlyWiki 5.0, but the file itself is just the latest empty.html from TiddlyWiki.com with my upgrade code added and the version number changed to 5.0 in an text editor. This file has been placed on my server as the equivalent of the empty file at TiddlyWiki.com/empty.html

In the file you downloaded, click upgrade and follow the onscreen instructions. Please pay note to both the alerts and the messageArea messages.

Once the upgrade has completed, please note that the version number of the file is 5.0, but you have your original content.


Concept
We want to automatically fetch the latest empty.html from TiddlyWiki.com and running that file import the content from the older file into it, all without manual interaction.
This is done by means of the following concept:
  1. Prompt user to save their work
  2. Backup the file to a special file name
  3. Download the new TiddlyWiki empty file using an XmlHttpRequest
  4. Overwrite the current file with the new file
  5. Reload the file with a startup parameter called upgrade, passing to it the path to the backup file created in step 2
  6. On reload, the newer TiddlyWiki is loaded and automatically imports all content from the older file. Currently the behaviour is to not overwrite tiddler existing in the new empty file (so as to not overwrite newer versions of plugins included by default) Here we could add any extra plugin compatibility handling.
  7. We inform the user and then do a save, to create the appropriate MarkupBlocks
  8. We do one last reload to initialize the imported plugins.

Possible issues
  • I haven't focused much on error handling for now and we could improve in that area
  • In step 2 above, we could just create a regular backup
  • I use the locateStoreArea function to verify that the downloaded file is complete and a valid TiddlyWiki. It might be nice to provide an alternative verification source. Eg: a small file sitting at tiddlywiki.com/latest.js with information like, latest version number, file size, sha-1 hash. This could also be used to write a quick and simple plugin that notifies the user when a newer version of TiddlyWiki is available.
    Also currently the TiddlyWiki can update itself even if there is not a newer core version available. A check should be added for this.
  • We might want to more processing of plugins, ie check for compatibility etc before importing. It should be trivial to do so
  • We need a nice informative UI

A part of me is wondering if there is some fatal flaw in this that I am not seeing as it was too easy to implement..... I'd love to hear from you guys as to what you think. If it seems promising, we can figure out the best UI for it and perhaps get a patch ready for the core.

Cheers,
Saq

--
Tiddly Learning ( http://lewcid.org ) : TiddlyWiki news, plugins, themes and educational usage
tw-com.html
tw-com.zip

Jeremy Ruston

unread,
Feb 16, 2008, 9:59:55 AM2/16/08
to Tiddly...@googlegroups.com
Great stuff, Saq, I think that's just what we need.

> On reload, the newer TiddlyWiki is loaded and automatically imports all
> content from the older file. Currently the behaviour is to not overwrite
> tiddler existing in the new empty file (so as to not overwrite newer

> I use the locateStoreArea function to verify that the downloaded file is


> complete and a valid TiddlyWiki. It might be nice to provide an alternative
> verification source. Eg: a small file sitting at tiddlywiki.com/latest.js
> with information like, latest version number, file size, sha-1 hash. This
> could also be used to write a quick and simple plugin that notifies the user
> when a newer version of TiddlyWiki is available.

That's a good idea. Ideally, generating that file would be part of the
tw.com production process (it's a bit manual at the moment).

> Also currently the TiddlyWiki can update itself even if there is not a
> newer core version available. A check should be added for this.

Although perhaps it would be useful to be able to do that to bring in
plugin updates.

> A part of me is wondering if there is some fatal flaw in this that I am not
> seeing as it was too easy to implement.....

Hehe, I don't think so; it's virtuoso hacking.

Cheers

Jeremy


>
> Cheers,
> Saq
>
> --
> Tiddly Learning ( http://lewcid.org ) : TiddlyWiki news, plugins, themes and
> educational usage
> >
>
>
>

> Welcome to TiddlyWiki created by Jeremy Ruston, Copyright (c) 2007 UnaMesa
> Association
> This page requires JavaScript to function properly.
>
> If you are using Microsoft Internet Explorer you may need to click on the
> yellow bar above and select 'Allow Blocked Content'. You must then click
> 'Yes' on the following security warning.
>
>
>
>
>
>
>
>
>
> <!--{{{-->
> <link rel='alternate' type='application/rss+xml' title='RSS'
> href='index.xml'/>
> <!--}}}-->
>
> Background: #fff
> Foreground: #000
> PrimaryPale: #8cf
> PrimaryLight: #18f
> PrimaryMid: #04b
> PrimaryDark: #014
> SecondaryPale: #ffc
> SecondaryLight: #fe8
> SecondaryMid: #db4
> SecondaryDark: #841
> TertiaryPale: #eee
> TertiaryLight: #ccc
> TertiaryMid: #999
> TertiaryDark: #666
> Error: #f88
>
> /*{{{*/
> body {background:[[ColorPalette::Background]];
> color:[[ColorPalette::Foreground]];}
>
> a {color:[[ColorPalette::PrimaryMid]];}
> a:hover {background-color:[[ColorPalette::PrimaryMid]];
> color:[[ColorPalette::Background]];}
> a img {border:0;}
>
> h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]];
> background:transparent;}
> h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
> h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}
>
> .button {color:[[ColorPalette::PrimaryDark]]; border:1px solid
> [[ColorPalette::Background]];}
> .button:hover {color:[[ColorPalette::PrimaryDark]];
> background:[[ColorPalette::SecondaryLight]];
> border-color:[[ColorPalette::SecondaryMid]];}
> .button:active {color:[[ColorPalette::Background]];
> background:[[ColorPalette::SecondaryMid]]; border:1px solid
> [[ColorPalette::SecondaryDark]];}
>
> .header {background:[[ColorPalette::PrimaryMid]];}
> .headerShadow {color:[[ColorPalette::Foreground]];}
> .headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
> .headerForeground {color:[[ColorPalette::Background]];}
> .headerForeground a {font-weight:normal;
> color:[[ColorPalette::PrimaryPale]];}
>
> .tabSelected{color:[[ColorPalette::PrimaryDark]];
> background:[[ColorPalette::TertiaryPale]];
> border-left:1px solid [[ColorPalette::TertiaryLight]];
> border-top:1px solid [[ColorPalette::TertiaryLight]];
> border-right:1px solid [[ColorPalette::TertiaryLight]];
> }
> .tabUnselected {color:[[ColorPalette::Background]];
> background:[[ColorPalette::TertiaryMid]];}
> .tabContents {color:[[ColorPalette::PrimaryDark]];
> background:[[ColorPalette::TertiaryPale]]; border:1px solid
> [[ColorPalette::TertiaryLight]];}
> .tabContents .button {border:0;}
>
> #sidebar {}
> #sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
> #sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
> #sidebarOptions .sliderPanel a
> {border:none;color:[[ColorPalette::PrimaryMid]];}
> #sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]];
> background:[[ColorPalette::PrimaryMid]];}
> #sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]];
> background:[[ColorPalette::Background]];}
>
> .wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid
> [[ColorPalette::PrimaryMid]];}
> .wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
> .wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
> .wizardStep {background:[[ColorPalette::Background]];
> color:[[ColorPalette::Foreground]];
> border:1px solid [[ColorPalette::PrimaryMid]];}
> .wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
> .wizardFooter {background:[[ColorPalette::PrimaryPale]];}
> .wizardFooter .status {background:[[ColorPalette::PrimaryDark]];
> color:[[ColorPalette::Background]];}
> .wizard .button {color:[[ColorPalette::Foreground]];
> background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
> border-color:[[ColorPalette::SecondaryPale]]
> [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]]
> [[ColorPalette::SecondaryPale]];}
> .wizard .button:hover {color:[[ColorPalette::Foreground]];
> background:[[ColorPalette::Background]];}
> .wizard .button:active {color:[[ColorPalette::Background]];
> background:[[ColorPalette::Foreground]]; border: 1px solid;
> border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]]
> [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}
>
> #messageArea {border:1px solid [[ColorPalette::SecondaryMid]];
> background:[[ColorPalette::SecondaryLight]];
> color:[[ColorPalette::Foreground]];}
> #messageArea .button {color:[[ColorPalette::PrimaryMid]];
> background:[[ColorPalette::SecondaryPale]]; border:none;}
>
> .popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid
> [[ColorPalette::TertiaryMid]];}
>
> .popup {background:[[ColorPalette::TertiaryPale]];
> color:[[ColorPalette::TertiaryDark]]; border-left:1px solid
> [[ColorPalette::TertiaryMid]]; border-top:1px solid
> [[ColorPalette::TertiaryMid]]; border-right:2px solid
> [[ColorPalette::TertiaryDark]]; border-bottom:2px solid
> [[ColorPalette::TertiaryDark]];}
> .popup hr {color:[[ColorPalette::PrimaryDark]];
> background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
> .popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
> .popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]];
> border: none;}
> .popup li a:hover {background:[[ColorPalette::SecondaryLight]];
> color:[[ColorPalette::Foreground]]; border: none;}
> .popup li a:active {background:[[ColorPalette::SecondaryPale]];
> color:[[ColorPalette::Foreground]]; border: none;}
> .popupHighlight {background:[[ColorPalette::Background]];
> color:[[ColorPalette::Foreground]];}
> .listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}
>
> .tiddler .defaultCommand {font-weight:bold;}
>
> .shadow .title {color:[[ColorPalette::TertiaryDark]];}
>
> .title {color:[[ColorPalette::SecondaryDark]];}
> .subtitle {color:[[ColorPalette::TertiaryDark]];}
>
> .toolbar {color:[[ColorPalette::PrimaryMid]];}
> .toolbar a {color:[[ColorPalette::TertiaryLight]];}
> .selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
> .selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}
>
> .tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]];
> background-color:[[ColorPalette::TertiaryPale]];}
> .selected .tagging, .selected .tagged
> {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid
> [[ColorPalette::TertiaryMid]];}
> .tagging .listTitle, .tagged .listTitle
> {color:[[ColorPalette::PrimaryDark]];}
> .tagging .button, .tagged .button {border:none;}
>
> .footer {color:[[ColorPalette::TertiaryLight]];}
> .selected .footer {color:[[ColorPalette::TertiaryMid]];}
>
> .sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
> .sparktick {background:[[ColorPalette::PrimaryDark]];}
>
> .error, .errorButton {color:[[ColorPalette::Foreground]];
> background:[[ColorPalette::Error]];}
> .warning {color:[[ColorPalette::Foreground]];
> background:[[ColorPalette::SecondaryPale]];}
> .lowlight {background:[[ColorPalette::TertiaryLight]];}
>
> .zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px
> solid [[ColorPalette::TertiaryMid]];}
>
> .imageLink, #displayArea .imageLink {background:transparent;}
>
> .annotation {background:[[ColorPalette::SecondaryLight]];
> color:[[ColorPalette::Foreground]]; border:2px solid
> [[ColorPalette::SecondaryMid]];}
>
> .viewer .listTitle {list-style-type:none; margin-left:-2em;}
> .viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
> .viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}
>
> .viewer table, table.twtable {border:2px solid
> [[ColorPalette::TertiaryDark]];}
> .viewer th, .viewer thead td, .twtable th, .twtable thead td
> {background:[[ColorPalette::SecondaryMid]]; border:1px solid
> [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
> .viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid
> [[ColorPalette::TertiaryDark]];}
>
> .viewer pre {border:1px solid [[ColorPalette::SecondaryLight]];
> background:[[ColorPalette::SecondaryPale]];}
> .viewer code {color:[[ColorPalette::SecondaryDark]];}
> .viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]];
> color:[[ColorPalette::TertiaryDark]];}
>
> .highlight, .marked {background:[[ColorPalette::SecondaryLight]];}
>
> .editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
> .editor textarea {border:1px solid [[ColorPalette::PrimaryMid]];
> width:100%;}
> .editorFooter {color:[[ColorPalette::TertiaryMid]];}
>
> #backstageArea {background:[[ColorPalette::Foreground]];
> color:[[ColorPalette::TertiaryMid]];}
> #backstageArea a {background:[[ColorPalette::Foreground]];
> color:[[ColorPalette::Background]]; border:none;}
> #backstageArea a:hover {background:[[ColorPalette::SecondaryLight]];
> color:[[ColorPalette::Foreground]]; }
> #backstageArea a.backstageSelTab {background:[[ColorPalette::Background]];
> color:[[ColorPalette::Foreground]];}
> #backstageButton a {background:none; color:[[ColorPalette::Background]];
> border:none;}
> #backstageButton a:hover {background:[[ColorPalette::Foreground]];
> color:[[ColorPalette::Background]]; border:none;}
> #backstagePanel {background:[[ColorPalette::Background]]; border-color:
> [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]]
> [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
> .backstagePanelFooter .button {border:none;
> color:[[ColorPalette::Background]];}
> .backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
> #backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6;
> filter:'alpha(opacity:60)';}
> /*}}}*/
>
> /*{{{*/
> * html .tiddler {height:1%;}
>
> body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}
>
> h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
> h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
> h4,h5,h6 {margin-top:1em;}
> h1 {font-size:1.35em;}
> h2 {font-size:1.25em;}
> h3 {font-size:1.1em;}
> h4 {font-size:1em;}
> h5 {font-size:.9em;}
>
> hr {height:1px;}
>
> a {text-decoration:none;}
>
> dt {font-weight:bold;}
>
> ol {list-style-type:decimal;}
> ol ol {list-style-type:lower-alpha;}
> ol ol ol {list-style-type:lower-roman;}
> ol ol ol ol {list-style-type:decimal;}
> ol ol ol ol ol {list-style-type:lower-alpha;}
> ol ol ol ol ol ol {list-style-type:lower-roman;}
> ol ol ol ol ol ol ol {list-style-type:decimal;}
>
> .txtOptionInput {width:11em;}
>
> #contentWrapper .chkOptionInput {border:0;}
>
> .externalLink {text-decoration:underline;}
>
> .indent {margin-left:3em;}
> .outdent {margin-left:3em; text-indent:-3em;}
> code.escaped {white-space:nowrap;}
>
> .tiddlyLinkExisting {font-weight:bold;}
> .tiddlyLinkNonExisting {font-style:italic;}
>
> /* the 'a' is required for IE, otherwise it renders the whole tiddler in
> bold */
> a.tiddlyLinkNonExisting.shadow {font-weight:bold;}
>
> #mainMenu .tiddlyLinkExisting,
> #mainMenu .tiddlyLinkNonExisting,
> #sidebarTabs .tiddlyLinkNonExisting {font-weight:normal;
> font-style:normal;}
> #sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}
>
> .header {position:relative;}
> .header a:hover {background:transparent;}
> .headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px;
> top:-1px;}
> .headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px;
> top:0px;}
>
> .siteTitle {font-size:3em;}
> .siteSubtitle {font-size:1.2em;}
>
> #mainMenu {position:absolute; left:0; width:10em; text-align:right;
> line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}
>
> #sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
> #sidebarOptions {padding-top:0.3em;}
> #sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
> #sidebarOptions input {margin:0.4em 0.5em;}
> #sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em;
> font-size:.85em;}
> #sidebarOptions .sliderPanel a {font-weight:bold; display:inline;
> padding:0;}
> #sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
> #sidebarTabs .tabContents {width:15em; overflow:hidden;}
>
> .wizard {padding:0.1em 1em 0em 2em;}
> .wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em
> 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
> .wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em
> 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
> .wizardStep {padding:1em 1em 1em 1em;}
> .wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}
> .wizardFooter {padding:0.8em 0.4em 0.8em 0em;}
> .wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}
> .wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}
>
> #messageArea {position:fixed; top:2em; right:0em; margin:0.5em;
> padding:0.5em; z-index:2000; _position:absolute;}
> .messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em
> 0.2em;}
> #messageArea a {text-decoration:underline;}
>
> .tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
> .popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em;
> margin:0;}
>
> .popup {position:absolute; z-index:300; font-size:.9em; padding:0;
> list-style:none; margin:0;}
> .popup .popupMessage {padding:0.4em;}
> .popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em
> 0em;}
> .popup li.disabled {padding:0.4em;}
> .popup li a {display:block; padding:0.4em; font-weight:normal;
> cursor:pointer;}
> .listBreak {font-size:1px; line-height:1px;}
> .listBreak div {margin:2px 0;}
>
> .tabset {padding:1em 0em 0em 0.5em;}
> .tab {margin:0em 0em 0em 0.25em; padding:2px;}
> .tabContents {padding:0.5em;}
> .tabContents ul, .tabContents ol {margin:0; padding:0;}
> .txtMainTab .tabContents li {list-style:none;}
> .tabContents li.listLink { margin-left:.75em;}
>
> #contentWrapper {display:block;}
> #splashScreen {display:none;}
>
> #displayArea {margin:1em 17em 0em 14em;}
>
> .toolbar {text-align:right; font-size:.9em;}
>
> .tiddler {padding:1em 1em 0em 1em;}
>
> .missing .viewer,.missing .title {font-style:italic;}
>
> .title {font-size:1.6em; font-weight:bold;}
>
> .missing .subtitle {display:none;}
> .subtitle {font-size:1.1em;}
>
> .tiddler .button {padding:0.2em 0.4em;}
>
> .tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
> .isTag .tagging {display:block;}
> .tagged {margin:0.5em; float:right;}
> .tagging, .tagged {font-size:0.9em; padding:0.25em;}
> .tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
> .tagClear {clear:both;}
>
> .footer {font-size:.9em;}
> .footer li {display:inline;}
>
> .annotation {padding:0.5em; margin:0.5em;}
>
> * html .viewer pre {width:99%; padding:0 0 1em 0;}
> .viewer {line-height:1.4em; padding-top:0.5em;}
> .viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
> .viewer blockquote {line-height:1.5em;
> padding-left:0.8em;margin-left:2.5em;}
> .viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}
>
> .viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
> .viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td,
> .twtable tr,.twtable caption {padding:3px;}
> table.listView {font-size:0.85em; margin:0.8em 1.0em;}
> table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px
> 3px;}
>
> .viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em;
> line-height:1.4em; overflow:auto;}
> .viewer code {font-size:1.2em; line-height:1.4em;}
>
> .editor {font-size:1.1em;}
> .editor input, .editor textarea {display:block; width:100%; font:inherit;}
> .editorFooter {padding:0.25em 0em; font-size:.9em;}
> .editorFooter .button {padding-top:0px; padding-bottom:0px;}
>
> .fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}
>
> .sparkline {line-height:1em;}
> .sparktick {outline:0;}
>
> .zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
> .zoomer div {padding:1em;}
>
> * html #backstage {width:99%;}
> * html #backstageArea {width:99%;}
> #backstageArea {display:none; position:relative; overflow: hidden;
> z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}
> #backstageToolbar {position:relative;}
> #backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em
> 0.3em 0.5em;}
> #backstageButton {display:none; position:absolute; z-index:175; top:0em;
> right:0em;}
> #backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em
> 0.1em 0.1em;}
> #backstage {position:relative; width:100%; z-index:50;}
> #backstagePanel {display:none; z-index:100; position:absolute; margin:0em
> 3em 0em 3em; padding:1em 1em 1em 1em;}
> .backstagePanelFooter {padding-top:0.2em; float:right;}
> .backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
> #backstageCloak {display:none; z-index:20; position:absolute; width:100%;
> height:100px;}
>
> .whenBackstage {display:none;}
> .backstageVisible .whenBackstage {display:block;}
> /*}}}*/
>
> /***
> StyleSheet for use when a translation requires any css style changes.
> This StyleSheet can be used directly by languages such as Chinese, Japanese
> and Korean which need larger font sizes.
> ***/
> /*{{{*/
> body {font-size:0.8em;}
> #sidebarOptions {font-size:1.05em;}
> #sidebarOptions a {font-style:normal;}
> #sidebarOptions .sliderPanel {font-size:0.95em;}
> .subtitle {font-size:0.8em;}
> .viewer table.listView {font-size:0.95em;}
> /*}}}*/
>
> /*{{{*/
> @media print {
> #mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton,
> #backstageArea {display: none ! important;}
> #displayArea {margin: 1em 1em 0em 1em;}
> /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the
> noscript content */
> noscript {display:none;}
> }
> /*}}}*/
>
> <!--{{{-->
> <div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]]
> [[ColorPalette::PrimaryMid]]'>
> <div class='headerShadow'>
> <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
> <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
> </div>
> <div class='headerForeground'>
> <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
> <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
> </div>
> </div>
> <div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
> <div id='sidebar'>
> <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
> <div id='sidebarTabs' refresh='content' force='true'
> tiddler='SideBarTabs'></div>
> </div>
> <div id='displayArea'>
> <div id='messageArea'></div>
> <div id='tiddlerDisplay'></div>
> </div>
> <!--}}}-->
>
> <!--{{{-->
> <div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler >
> fields syncing permalink references jump'></div>
> <div class='title' macro='view title'></div>
> <div class='subtitle'><span macro='view modifier link'></span>, <span
> macro='view modified date'></span> (<span macro='message
> views.wikified.createdPrompt'></span> <span macro='view created
> date'></span>)</div>
> <div class='tagging' macro='tagging'></div>
> <div class='tagged' macro='tags'></div>
> <div class='viewer' macro='view text wikified'></div>
> <div class='tagClear'></div>
> <!--}}}-->
>
> <!--{{{-->
> <div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler
> deleteTiddler'></div>
> <div class='title' macro='view title'></div>
> <div class='editor' macro='edit title'></div>
> <div macro='annotations'></div>
> <div class='editor' macro='edit text'></div>
> <div class='editor' macro='edit tags'></div><div class='editorFooter'><span
> macro='message views.editor.tagPrompt'></span><span
> macro='tagChooser'></span></div>
> <!--}}}-->
>
> To get started with this blank TiddlyWiki, you'll need to modify the
> following tiddlers:
> * SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown
> above (after saving, they will also appear in the browser title bar)
> * MainMenu: The menu (usually on the left)
> * DefaultTiddlers: Contains the names of the tiddlers that you want to
> appear when the TiddlyWiki is opened
> You'll also need to enter your username for signing your edits: <<option
> txtUserName>>
>
> These InterfaceOptions for customising TiddlyWiki are saved in your browser
>
> Your username for signing your edits. Write it as a WikiWord (eg JoeBloggs)
>
> <<option txtUserName>>
> <<option chkSaveBackups>> SaveBackups
> <<option chkAutoSave>> AutoSave
> <<option chkRegExpSearch>> RegExpSearch
> <<option chkCaseSensitiveSearch>> CaseSensitiveSearch
> <<option chkAnimate>> EnableAnimations
>
> ----
> Also see AdvancedOptions
>
> <<importTiddlers>>
>
>
> |''URL:''|http://tiddlywiki.abego-software.de/|
> |''Description:''|UdoBorkowski's Extensions for TiddlyWiki|
> |''Author:''|UdoBorkowski|
>
> Rename this tiddler to 'ColorPalette' to enable this color scheme
>
> Background: #ffc
> Foreground: #000
> PrimaryPale: #fc8
> PrimaryLight: #f81
> PrimaryMid: #b40
> PrimaryDark: #410
> SecondaryPale: #ffc
> SecondaryLight: #fe8
> SecondaryMid: #db4
> SecondaryDark: #841
> TertiaryPale: #e88
> TertiaryLight: #c66
> TertiaryMid: #944
> TertiaryDark: #633
>
> This tiddler shows some more complex effects that can be obtained with
> cunning use of CSS. Not all of these will work properly on all browsers
> because of differences in CSS implementation, but they should fail
> gracefully.
>
> You can have special formatting for a specific, named tiddler like this:
> {{{
> #tiddlerHelloThere .title {
> background-color: #99aaee;
> }
> }}}
>
> Or for the first displayed tiddler:
> {{{
> div.tiddler:first-child .title {
> font-size: 28pt;
> }
> }}}
>
> Or just for the first line of every tiddler:
> {{{
> .viewer:first-line {
> background-color: #999999;
> }
> }}}
>
> Or just for the first letter of every tiddler:
> {{{
> .viewer:first-letter {
> float: left;
> font-size: 28pt;
> font-weight: bold;
> }
> }}}
>
> Or just for tiddlers tagged with a particular tag (note that this won't work
> for tags that contain spaces):
> {{{
> div[tags~="welcome"].tiddler .viewer {
> background-color: #ffccaa;
> }
>
> div[tags~="features"].tiddler .viewer {
> background-color: #88aaff;
> }
> }}}
>
> If you check this box in the InterfaceOptions, TiddlyWiki will
> automatically SaveChanges every time you edit a tiddler. In that way there's
> a lot less chance of you losing any information.
>
> However, if you also have the SaveBackups checkbox ticked, you'll end up
> with a lot of archived files. You may prefer to select either one or the
> other.
>
> One of the great strengths of TiddlyWiki is the way that its interface can
> be customised by editting various shadow tiddlers. However, a problem that
> has consistently emerged is the difficulty of reconciling the needs of
> authors, who need access to the full array of TiddlyWiki features, and the
> needs of ordinary readers, who generally benefit from seeing a restricted
> set of functionality more suited to their needs.
>
> The new backstage area in release 2.2 offers a solution to this conundrum by
> providing a consistent way of accessing authoring functionality that is
> independent of the interface customisations (so, even if you blast away the
> contents of your PageTemplate, you can still access the backstage area).
>
> The backstage area is only available when a TiddlyWiki is edittable -
> typically meaning that it's been opened off of a {{{file://}}} URL. It
> appears as an unobtrusive link in the topright corner of the page. Clicking
> it reveals the backstage toolbar consisting of commands like
> {{{saveChanges}}} and drop-down tasks like ImportTiddlers, SyncMacro,
> PluginManager and Tweak (which provides access to the new OptionsMacro).
>
> TiddlyWiki in Basque:
> * SÃ(c)amusPálás, [[site|http://zopelana.org/wiki/hutsik.html]]
>
> |''URL:''|http://tiddlywiki.bidix.info/|
> |''Description:''|Repository for BidiX's TiddlyWiki Extensions|
> |''Author:''|BidiX|
>
> To make quoted bits of text stand out, you can use BlockQuotes within your
> [[tiddler]]s, like this:
>
> JeremyRuston said:
> <<<
> 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.
> <<<
>
> Like BulletPoints and NumberedBulletPoints, you can have multiple levels of
> BlockQuotes. Just edit this tiddler to see how it's done.
>
> >level 1
> >level 1
> >>level 2
> >>level 2
> >>>level 3
> >>>level 3
> >>level 2
> >level 1
>
> |''URL:''|http://bob.mcelrath.org/plugins.html|
> |''Description:''|Bob McElrath's Plugins|
> |''Author:''|BobMcElrath|
>
> Bulgarian translations of TiddlyWiki:
> * [[site|http://fire.atspace.org/]]
> ** //I don't know who to credit with this -- please let me know if it's
> you!//
>
> Creating BulletPoints is simple.
> * Just add an asterisk
> * at the beginning of a line.
> ** If you want to create sub-bullets
> ** start the line with two asterisks
> *** And if you want yet another level
> *** use three asterisks
> * Edit this tiddler to see how it's done
> * You can also do NumberedBulletPoints
>
> The Mozilla-based [[Camino browser|http://www.caminobrowser.org/]] on
> Macintosh OS X works well with TiddlyWiki, including the ability to
> SaveChanges.
>
> Abandons any pending edits to the current tiddler, and switches it the
> default view. It is used with the ToolbarMacro like this:
> {{{
> <<toolbar cancelTiddler>>
> }}}
>
> TiddlyWiki in Catalan:
> * [[PacoRivière|http://pacoriviere.cat]],
> [[site|http://pacoriviere.googlepages.com/TiddlyWikica.html]],
> [[guide|http://pacoriviere.googlepages.com/20minuts.html]],
> [[video|http://video.pacoriviere.cat]]
>
> When you upload a TiddlyWiki to a web server, if doesn't load properly, it
> may be a CharacterEncoding issue.
>
> TiddlyWiki uses Unicode ~UTF-8 encoding and won't load properly if your host
> is serving it as ~ISO-8859-1. You should be able to check this by loading
> another page on the server in FireFox and selecting 'Page Info' on the
> 'Tools' menu.
>
> If this is the case, it should be reasonably easy to sort out. We recommend
> that you contact your server host and ask them to serve it in ~UTF-8 mode.
> If you are more technically hands-on, you may be able to [[solve the issue
> yourself|http://www.w3.org/International/questions/qa-htaccess-charset]].
>
> TiddlyWiki說中文:
> * For Traditional Hanzi characters (for Taiwan & Hong Kong):
> ** [[MilchFlasche
> edition|http://milchflasche.byethost31.com/index.php?config=TiddlyZiddly#TW%E4%BB%8B%E9%9D%A2%E7%BF%BB%E8%AD%AF_2.0.11_%E8%8F%AF%E8%AA%9E_%E7%B9%81%E9%AB%94%E6%BC%A2%E5%AD%97]],
> [[site|http://milchflasche.byethost31.com/index.php?config=TiddlyZiddly]]
> ** [[BramChen
> edition|http://www.tiddlywiki.org/browser/Trunk/association/locales/core/zh-Hant]],
> site: http://ptw.sourceforge.net/
> * In Simplified Hanzi characters (for China & Singapore):
> ** [[BramChen
> edition|http://www.tiddlywiki.org/browser/Trunk/association/locales/core/zh-Hans]]
> ** [[JiangZhanyong
> edition|http://tiddlywiki.gf.cs.hit.edu.cn/#%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%E7%BF%BB%E8%AF%91]],
> [[site|http://tiddlywiki.gf.cs.hit.edu.cn/]]
>
> Closes all other open tiddlers, except for any that are being editted. It
> is used with the ToolbarMacro like this:
> {{{
> <<toolbar closeOthers>>
> }}}
>
> Closes the current tiddler, regardless of whether it is being editted. It
> is used with the ToolbarMacro like this:
> {{{
> <<toolbar closeTiddler>>
> }}}
>
> [>img[tiddlywiki.org
> logo|http://trac.tiddlywiki.org/chrome/site/tworg_logo_med.jpg][http://www.tiddlywiki.org]]TiddlyWiki
> today is the result of the efforts of dozens of people around the world
> generously contributing their time and skill. The core of the TiddlyWiki
> development community is http://www.tiddlywiki.org. It hosts the master copy
> of the TiddlyWiki source code, and a system for tracking bugs and
> enhancement requests. The community welcomes [[contributions|Contribute]].
>
> There are two GoogleGroups for discussions about TiddlyWiki. They are the
> best places to ask questions about TiddlyWIki, and to connect with other
> enthusiasts:
> * A TiddlyWiki group for general discussion, bug reports and announcements
> at http://groups.google.com/group/TiddlyWiki
> * A TiddlyWikiDev group for discussion about TiddlyWiki development at
> http://groups.google.com/group/TiddlyWikiDev
>
> For non-English language speakers,
> * TiddlyWikiFR, in French, at http://groups.google.com/group/TiddlyWikiFR
> * TiddlyWiki è ¯èªžæ"¯æ ´è«–壇, in Chinese, at
> http://groups.google.com/group/TiddlyWiki-zh
> * TiddlyWikiPT, in Brazilian Portuguese, at
> http://groups.google.com.br/group/tiddlywikipt
>
> Many TiddlyWiki hackers hang out on our IRC room, #tiddlywiki on
> irc.freenode.net.
>
> <html>
> <a href="http://www.frappr.com/tiddlywiki"><img
> src="http://www.frappr.com/i/frapper_sticker.gif" border="0" alt="Check out
> our Frappr!" title="Check out our Frappr!"></a>
> </html>
>
> TiddlyWiki is legally owned by [[The UnaMesa
> Foundation|http://www.unamesa.org/]].
>
> PageTemplate
> |>|>|SiteTitle - SiteSubtitle|
> |MainMenu|DefaultTiddlers<<br>><<br>><<br>><<br>>ViewTemplate<<br>><<br>>EditTemplate|SideBarOptions|
> |~|~|OptionsPanel|
> |~|~|AdvancedOptions|
> |~|~|<<tiddler Configuration.SideBarTabs>>|
>
> ''StyleSheet:'' StyleSheetColors - StyleSheetLayout - StyleSheetPrint
>
> SiteUrl
>
> SideBarTabs
> |[[Timeline|TabTimeline]]|[[All|TabAll]]|[[Tags|TabTags]]|>|>|[[More|TabMore]]
> |
> |>|>||[[Missing|TabMoreMissing]]|[[Orphans|TabMoreOrphans]]|[[Shadowed|TabMoreShadowed]]|
>
> TiddlyWiki has an enthusiastic and friendly [[Community]] of people around
> the world helping to grow and improve it. But there's always more to do and
> we welcome any offers of assistance. There are many ways that you can help:
> * Testing and [[reporting
> bugs|http://trac.tiddlywiki.org/wiki/ReportingBugs]] against the core code.
> Clear, easily reproducible bug reports are incredibly useful and really help
> the team improve the quality of TiddlyWiki
> * [[Contributing code|http://trac.tiddlywiki.org/wiki/ContributingCode]]
> * [[Making translations|http://trac.tiddlywiki.org/wiki/Translations]]
> * Documentation needs planning, writing and editting:
> ** User guide information at http://tiddlywikiguides.org/
>
> TiddlyWiki na Hrvatski:
> * MarcellMars, [[site|http://www.picigin.net/logcells]]
>
> /***
> |''Name:''|CryptoFunctionsPlugin|
> |''Description:''|Support for cryptographic functions|
> ***/
> //{{{
> if(!version.extensions.CryptoFunctionsPlugin) {
> version.extensions.CryptoFunctionsPlugin = {installed:true};
>
> //--
> //-- Crypto functions and associated conversion routines
> //--
>
> // Crypto "namespace"
> function Crypto() {}
>
> // Convert a string to an array of big-endian 32-bit words
> Crypto.strToBe32s = function(str)
> {
> var be = Array();
> var len = Math.floor(str.length/4);
> var i, j;
> for(i=0, j=0; i<len; i++, j+=4) {
> be[i] = ((str.charCodeAt(j)&0xff) << 24)|((str.charCodeAt(j+1)&0xff) <<
> 16)|((str.charCodeAt(j+2)&0xff) << 8)|(str.charCodeAt(j+3)&0xff);
> }
> while (j<str.length) {
> be[j>>2] |= (str.charCodeAt(j)&0xff)<<(24-(j*8)%32);
> j++;
> }
> return be;
> };
>
> // Convert an array of big-endian 32-bit words to a string
> Crypto.be32sToStr = function(be)
> {
> var str = "";
> for(var i=0;i<be.length*32;i+=8)
> str += String.fromCharCode((be[i>>5]>>>(24-i%32)) & 0xff);
> return str;
> };
>
> // Convert an array of big-endian 32-bit words to a hex string
> Crypto.be32sToHex = function(be)
> {
> var hex = "0123456789ABCDEF";
> var str = "";
> for(var i=0;i<be.length*4;i++)
> str += hex.charAt((be[i>>2]>>((3-i%4)*8+4))&0xF) +
> hex.charAt((be[i>>2]>>((3-i%4)*8))&0xF);
> return str;
> };
>
> // Return, in hex, the SHA-1 hash of a string
> Crypto.hexSha1Str = function(str)
> {
> return Crypto.be32sToHex(Crypto.sha1Str(str));
> };
>
> // Return the SHA-1 hash of a string
> Crypto.sha1Str = function(str)
> {
> return Crypto.sha1(Crypto.strToBe32s(str),str.length);
> };
>
> // Calculate the SHA-1 hash of an array of blen bytes of big-endian 32-bit
> words
> Crypto.sha1 = function(x,blen)
> {
> // Add 32-bit integers, wrapping at 32 bits
> add32 = function(a,b)
> {
> var lsw = (a&0xFFFF)+(b&0xFFFF);
> var msw = (a>>16)+(b>>16)+(lsw>>16);
> return (msw<<16)|(lsw&0xFFFF);
> };
> // Add five 32-bit integers, wrapping at 32 bits
> add32x5 = function(a,b,c,d,e)
> {
> var lsw = (a&0xFFFF)+(b&0xFFFF)+(c&0xFFFF)+(d&0xFFFF)+(e&0xFFFF);
> var msw = (a>>16)+(b>>16)+(c>>16)+(d>>16)+(e>>16)+(lsw>>16);
> return (msw<<16)|(lsw&0xFFFF);
> };
> // Bitwise rotate left a 32-bit integer by 1 bit
> rol32 = function(n)
> {
> return (n>>>31)|(n<<1);
> };
>
> var len = blen*8;
> // Append padding so length in bits is 448 mod 512
> x[len>>5] |= 0x80 << (24-len%32);
> // Append length
> x[((len+64>>9)<<4)+15] = len;
> var w = Array(80);
>
> var k1 = 0x5A827999;
> var k2 = 0x6ED9EBA1;
> var k3 = 0x8F1BBCDC;
> var k4 = 0xCA62C1D6;
>
> var h0 = 0x67452301;
> var h1 = 0xEFCDAB89;
> var h2 = 0x98BADCFE;
> var h3 = 0x10325476;
> var h4 = 0xC3D2E1F0;
>
> for(var i=0;i<x.length;i+=16) {
> var j,t;
> var a = h0;
> var b = h1;
> var c = h2;
> var d = h3;
> var e = h4;
> for(j = 0;j<16;j++) {
> w[j] = x[i+j];
> t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
> e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
> }
> for(j=16;j<20;j++) {
> w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
> t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
> e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
> }
> for(j=20;j<40;j++) {
> w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
> t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k2);
> e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
> }
> for(j=40;j<60;j++) {
> w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
> t = add32x5(e,(a>>>27)|(a<<5),(b&c)|(d&(b|c)),w[j],k3);
> e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
> }
> for(j=60;j<80;j++) {
> w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
> t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k4);
> e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
> }
>
> h0 = add32(h0,a);
> h1 = add32(h1,b);
> h2 = add32(h2,c);
> h3 = add32(h3,d);
> h4 = add32(h4,e);
> }
> return Array(h0,h1,h2,h3,h4);
> };
>
>
> }
> //}}}
>
> You can wrap any text in an HTML {{{<span>}}} or {{{<div>}}} with a
> specified CSS class. This allows custom CSS styling in a nice, modular way.
> By placing a rule in your StyleSheet tiddler like {{{.wrappingClass{color:
> #666; background: #bbb} }}} you can markup a piece of text in the tiddler
> using this code:
>
> {{{
> {{wrappingClass{Text that is now accentuated}}}
> }}}
>
> {{wrappingClass{Text that is now accentuated}}}
>
> By default, the text is placed in a {{{<span>}}}. To use a {{{<div>}}}
> instead, insert a line break before the text:
>
> {{{
> {{wrappingClass{
> Text that is now accentuated}}}
> }}}
>
> {{wrappingClass{
> Text that is now accentuated}}}
>
> Sometimes it's necessary to include custom HTML markup in the {{{<head>}}}
> of a TiddlyWiki file - typically for compatibility with ad serving software,
> external libraries, or for custom meta tags. The CustomMarkup operation
> defines four shadow tiddlers whose contents are spliced into the saved HTML
> file. (If you do a view/source you'll see the markers referred to below).
> |!Title |!Location |!Marker |
> |MarkupPreHead |Start of the {{{<head>}}} section
> |{{{<!--PRE-HEAD-START-->}}} |
> |MarkupPostHead |End of the {{{<head>}}} section
> |{{{<!--POST-HEAD-START-->}}} |
> |MarkupPreBody |Start of the {{{<body>}}} section
> |{{{<!--PRE-BODY-START-->}}} |
> |MarkupPostBody |End of the {{{<body>}}} section
> |{{{<!--POST-BODY-START-->}}} |
> MarkupPreHead is the only one with shadow content: a link to the default
> location of the RSS feed.
>
> Starting with this revision, you can skin TiddlyWiki with a special
> StyleSheet tiddler containing your own CSS style sheet declarations. Unlike
> hacking the HTML directly, the StyleSheet tiddler withstands upgrading to a
> new version of the TiddlyWiki code (see HowToUpgrade). You can also use the
> NestedStyleSheets feature to structure your CSS declarations.
>
> The ExampleStyleSheet shows some of the basic options you can control (see
> AnotherExampleStyleSheet for more complex examples). SaveChanges and then
> click refresh in your browser to see StyleSheet changes. Any errors in your
> CSS syntax will be caught and displayed, but they shouldn't stop TiddlyWiki
> from working.
>
> You can customise the appearance and behaviour of TiddlyWiki to almost any
> degree you want:
> * Use the ColorPalette to change the basic colour scheme
> * Create a CustomStyleSheet for finer grained control over the appearance
> * Customise the PageTemplate, ViewTemplate or EditTemplate to change the
> composition of the page and the layout of individual tiddlers
> * Use off-the-shelf themes from [[TiddlyThemes|http://tiddlythemes.com/]]
> * Visit the [[Configuration]] summary to see all the special configuration
> tiddlers
> * Install [[Plugins]] to extend the core functionality (find them at
> [[TiddlyVault|http://tiddlyvault.tiddlyspot.com/]] or you can try [[writing
> or adapting your own|http://gimcrackd.com/etc/src/codex/]])
> * Use TiddlyBookmarklets for low level hacking of TiddlyWiki documents
> There are also a bunch of TiddlyWikiTools that you can use to enhance
> TiddlyWiki.
>
> Česká TiddlyWiki:
> * [[PetrChlebek|http://www.chytraktim.cz/]],
> [[site|http://chlebek.sweb.cz/mystuff.html]]
> * [[Lubos Pajtina|http://www.zsn5vy.ipex.cz/~pajtina/]],
> [[komplet|http://www.zsn5vy.ipex.cz/~pajtina/empty.html]],
> [[plugin|http://www.zsn5vy.ipex.cz/~pajtina/czech.txt]]
>
> Several [[Macros]] including the TodayMacro take a DateFormatString as an
> optional argument. This string can be a combination of ordinary text, with
> some special characters that get substituted by parts of the date:
> * {{{DDD}}} - day of week in full (eg, "Monday")
> * {{{ddd}}} - short day of week (eg, "Mon")
> * {{{DD}}} - day of month
> * {{{0DD}}} - adds a leading zero
> * {{{DDth}}} - adds a suffix
> * {{{WW}}} - ISO-8601 week number of year
> * {{{0WW}}} - adds a leading zero
> * {{{MMM}}} - month in full (eg, "July")
> * {{{mmm}}} - short month (eg, "Jul")
> * {{{MM}}} - month number
> * {{{0MM}}} - adds leading zero
> * {{{YYYY}}} - full year
> * {{{YY}}} - two digit year
> * {{{wYYYY}}} - full year with respect to week number
> * {{{wYY}}} two digit year with respect to week number
> * {{{hh}}} - hours
> * {{{0hh}}} - adds a leading zero
> * {{{hh12}}} - hours in 12 hour clock
> * {{{0hh12}}} - hours in 12 hour clock with leading zero
> * {{{mm}}} - minutes
> * {{{0mm}}} - minutes with leading zero
> * {{{ss}}} - seconds
> * {{{0ss}}} - seconds with leading zero
> * {{{am}}} or {{{pm}}} - lower case AM/PM indicator
> * {{{AM}}} or {{{PM}}} - upper case AM/PM indicator
>
> HelloThere [[GettingStarted]] [[MainFeatures]] [[Feedback]]
>
> Deletes the current tiddler. A confirmation dialogue is displayed unless
> disabled with the ConfirmBeforeDeleting checkbox in AdvancedOptions. It is
> used with the ToolbarMacro like this:
> {{{
> <<toolbar deleteTiddler>>
> }}}
>
> /***
> |''Name:''|DeprecatedFunctionsPlugin|
> |''Description:''|Support for deprecated functions removed from core|
> ***/
> //{{{
> if(!version.extensions.DeprecatedFunctionsPlugin) {
> version.extensions.DeprecatedFunctionsPlugin = {installed:true};
>
> //--
> //-- Deprecated code
> //--
>
> // @Deprecated: Use createElementAndWikify and this.termRegExp instead
> config.formatterHelpers.charFormatHelper = function(w)
> {
> w.subWikify(createTiddlyElement(w.output,this.element),this.terminator);
> };
>
> // @Deprecated: Use enclosedTextHelper and this.lookaheadRegExp instead
> config.formatterHelpers.monospacedByLineHelper = function(w)
> {
> var lookaheadRegExp = new RegExp(this.lookahead,"mg");
> lookaheadRegExp.lastIndex = w.matchStart;
> var lookaheadMatch = lookaheadRegExp.exec(w.source);
> if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
> var text = lookaheadMatch[1];
> if(config.browser.isIE)
> text = text.replace(/\n/g,"\r");
> createTiddlyElement(w.output,"pre",null,null,text);
> w.nextMatch = lookaheadRegExp.lastIndex;
> }
> };
>
> // @Deprecated: Use <br> or <br /> instead of <<br>>
> config.macros.br = {};
> config.macros.br.handler = function(place)
> {
> createTiddlyElement(place,"br");
> };
>
> // Find an entry in an array. Returns the array index or null
> // @Deprecated: Use indexOf instead
> Array.prototype.find = function(item)
> {
> var i = this.indexOf(item);
> return i == -1 ? null : i;
> };
>
> // Load a tiddler from an HTML DIV. The caller should make sure to later
> call Tiddler.changed()
> // @Deprecated: Use store.getLoader().internalizeTiddler instead
> Tiddler.prototype.loadFromDiv = function(divRef,title)
> {
> return store.getLoader().internalizeTiddler(store,this,title,divRef);
> };
>
> // Format the text for storage in an HTML DIV
> // @Deprecated Use store.getSaver().externalizeTiddler instead.
> Tiddler.prototype.saveToDiv = function()
> {
> return store.getSaver().externalizeTiddler(store,this);
> };
>
> // @Deprecated: Use store.allTiddlersAsHtml() instead
> function allTiddlersAsHtml()
> {
> return store.allTiddlersAsHtml();
> }
>
> // @Deprecated: Use refreshPageTemplate instead
> function applyPageTemplate(title)
> {
> refreshPageTemplate(title);
> }
>
> // @Deprecated: Use story.displayTiddlers instead
> function
> displayTiddlers(srcElement,titles,template,unused1,unused2,animate,unused3)
> {
> story.displayTiddlers(srcElement,titles,template,animate);
> }
>
> // @Deprecated: Use story.displayTiddler instead
> function
> displayTiddler(srcElement,title,template,unused1,unused2,animate,unused3)
> {
> story.displayTiddler(srcElement,title,template,animate);
> }
>
> // @Deprecated: Use functions on right hand side directly instead
> var createTiddlerPopup = Popup.create;
> var scrollToTiddlerPopup = Popup.show;
> var hideTiddlerPopup = Popup.remove;
>
> // @Deprecated: Use right hand side directly instead
> var regexpBackSlashEn = new RegExp("\\\\n","mg");
> var regexpBackSlash = new RegExp("\\\\","mg");
> var regexpBackSlashEss = new RegExp("\\\\s","mg");
> var regexpNewLine = new RegExp("\n","mg");
> var regexpCarriageReturn = new RegExp("\r","mg");
>
> }
> //}}}
>
> TiddlyWiki is now owned by UnaMesa, a non-profit foundation. Part of it's
> purpose is to provide a means for people who enjoy using TiddlyWiki to
> usefully reward the members of the community who have helped to create it,
> and so we will be exploring ways of accepting and distributing donations.
> For the moment, we don't have a formal scheme, but would encourage people to
> donate directly to individuals where they can.
> <<<
> On a personal note (writes JeremyRuston), in the two years that I had a
> personal donation account before I took up a [[commercial position with
> BT|http://jermolene.wordpress.com/2007/05/29/i-for-one-welcome-my-new-bt-overlords/]],
> just under a 100 people donated a total of nearly £1500 via PayPal. Knowing
> how much effort it is to make such a payment, I'm truly grateful to everyone
> who took the trouble, many thanks. I used the money to buy camera equipment,
> a [[hobby|http://flickr.com/photos/jermy]] that I couldn't have pursued at
> the time otherwise.
> <<<
>
> Because TiddlyWiki is a single HTML file, you've actually already
> downloaded the entire software just by viewing this site. If you want to be
> able to SaveChanges, you can save your own blank TiddlyWiki to your local
> drive by right clicking on [[this link to empty.html|empty.html]] and
> selecting 'Save link as...' or 'Save target as...'. You can choose where to
> save the file, and what to call it (but make sure that it's saved in HTML
> format and with an HTML extension).
>
> @@There can be confusing and subtle differences between different browsers.
> Some points to watch:@@
> * If you're using Windows XP Service Pack 2 or Windows Vista, check for
> known ServicePack2Problems and VistaIssues
> * Do ''not'' use the File/Save command in your browser to save TiddlyWiki,
> because of SaveUnpredictabilities.
> * Make sure that you're saving in HTML (or "page source" format), not one of
> the new-fangled archive formats
> If you're already using TiddlyWiki, see HowToUpgrade. If you want to save a
> complete copy of this site, including all the instructions and other text,
> you can use this [[this link|index.html]].
>
> TiddlyWiki in het Nederlands:
> * QuadSk8, [[site|http://www.xs4all.nl/~quadsk8l/TiddlyWiki.html]],
> [[plugin|http://www.xs4all.nl/~quadsk8l/TiddlyWiki.html#DutchTranslationConfig]]
>
> Try holding down the alt- or shift-key while clicking on a link to a
> tiddler, on the 'options' button or on the CloseButton for a tiddler. Kind
> of a respectful homage to Mac OS X, which does something similar for many of
> its system animations. (On browsers like InternetExplorer that use the shift
> key to open a new window, it's best to use the alt-key).
>
> Switches the current tiddler to the current edit view. It is used with the
> ToolbarMacro like this:
> {{{
> <<toolbar editTiddler>>
> }}}
>
> {{{
> [img[title|filename]]
> [img[filename]]
> [img[title|filename][link]]
> [img[filename][link]]
> }}}
> Images can be included by their filename or full URL. It's good practice to
> include a title to be shown as a tooltip, and when the image isn't
> available. An image can also link to another tiddler or or a URL
> [img[Romanesque
> broccoli|fractalveg.jpg][http://www.flickr.com/photos/jermy/10134618/]]
> {{{
> [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]]
> }}}
> The tooltip is optional.
>
> [<img[Forest|forest.jpg][http://www.flickr.com/photos/jermy/8749660/]][>img[Field|field.jpg][http://www.flickr.com/photos/jermy/8749285/]]You
> can also float images to the left or right: the forest is left aligned with
> {{{[<img[}}}, and the field is right aligned with {{{[>img[}}}.
> @@clear(left):clear(right):display(block):You can use CSS to clear the
> floats@@
> {{{
> [<img[A woody bit of Hampstead Heath|forest.jpg]]
> [>img[A field near Milton Keynes|field.jpg]]
> }}}
>
> There's now an option under InterfaceOptions to allow TiddlyWiki's
> animation effects to be turned off.
>
> TiddlyWiki in Esperanto:
>
> * FedericoGobbo, [[site|http://www.dicom.uninsubria.it/~fgobbo/]],
> [[plugin|http://www.dicom.uninsubria.it/~fgobbo/#TWEsperantoPlugin]]
>
> /***
> |''Name:''|ExamplePlugin|
> |''Description:''|To demonstrate how to write TiddlyWiki plugins|
> |''Version:''|2.0.3|
> |''Date:''|Sep 22, 2006|
> |''Source:''|http://www.tiddlywiki.com/#ExamplePlugin|
> |''Author:''|JeremyRuston (jeremy (at) osmosoft (dot) com)|
> |''License:''|[[BSD open source license]]|
> |''~CoreVersion:''|2.1.0|
> |''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
> ***/
>
> //{{{
>
> // Uncomment the following line to see how the PluginManager deals with
> errors in plugins
> // deliberateError();
>
> // Log a message
> pluginInfo.log.push("This is a test message from " + tiddler.title);
>
> //}}}
>
> #displayArea {background-color: #ffccff; }
> #mainMenu {border: 1px solid #ffff88; }
> #commandPanel {background-color: #008800; }
>
> config.animFast = 0.12; // Speed for animations (lower == slower)
> config.animSlow = 0.01; // Speed for EasterEgg animations
> config.views.wikified.toolbarEdit.text = "Edit away, it won't get saved";
>
> TiddlyWiki is being used for all kinds of things:
> * EliseSpringer, a philospher at Wesleyan University in Connecticut, USA, is
> using TiddlyWiki for her homepage at http://espringer.web.wesleyan.edu/ and
> for [[ReasoningWell|http://reasoningwell.tiddlyspot.com/]], a wiki for her
> Philosophy faculty
> * The website of a [[body-building club in
> Paris|http://www.superphysique.net/]]
> * Teachers in Massachusetts to [[teach
> mathematics|http://luceatlux.net/mcasmath10/]]
> * Schools in South Australia to [[distribute class materials to
> students|https://secure.ait.org/wiki/background.htm]]
> * ChrisJohnson's [[personal home page|http://www.spkml.com/]]
> * JacksonBoyle's collection of
> [[recipes|http://jacksonboyle.com/kitchen.htm]]
> * JonathanCamp's guide to [[Prince 2 project
> management|http://www.microupdate.net/cms/doc/PrinceII.html]]
> * BrandonSiegel's [[Case Personal Security Device
> Project|http://anubis.case.edu/398n]]
> * MichaelDansie's site for the [[American Cryptogram
> Association|http://msig.med.utah.edu/RunningUtes/cryptogram/aca.html]]
> * BrianHolland's [[student nodes|http://www.acsu.buffalo.edu/~bholland/]]
> from Buffalo Law School
> * RuiCarmo's [[Python
> Grimoire|http://the.taoofmac.com/space/Python/Grimoire]], a sort of recipe
> book for the programming language Python
> * Rich Kulesus' [[themer's blog|http://www.skinyourscreen.com/mrbiotech/]]
> * Qliner Software are using TiddlyWiki to create the site for their
> [[hotkeys|http://www.qliner.com/hotkeys/]] product
> * AndreasKänner's family home page at http://www.kaenner.de/
> * MarkWygent of Wygent Reeds, a maker of Scottish bagpipe reeds from
> Delaware, has compiled a fascinating home page using TiddlyWiki at
> http://www.wygent.com/
> * ChristopherJames has compiled a comprehensive guide to TabletPCs at
> http://www.tabletpcwiki.net/
> * MiguelCentellas has created an extensive guide to Bolivian politics at
> http://www.centellas.org/politics/politiddly.html
> * BrunoTiagoRodrigues has created a geocaching community site in Portuguese
> at http://travelbugrace.geocaching-pt.net/.
> * CharlesStross, a celebrated British ScienceFiction writer, has used
> TiddlyWiki for his 'Tough Guide to the Rapture of the Nerds' at
> http://www.antipope.org/charlie/toughguide.html.
> * KristofferNilausOlsen, a member of the Danish Student Group of Amnesty
> International, has used TiddlyWiki to collate reports of breaches of human
> rights. His site is at http://www.resultat.dk/sg/tw/students.html.
> * MartinSilcock, an brand researcher working with Millward Brown, is using
> TiddlyWiki for his homepage at http://www.explorate.co.uk/.
> * Many people are using the GTDTiddlyWiki variant for personal productivity,
> and there's been some interesting experiments in TiddlyWikiFiction.
>
> Like most wikis, TiddlyWiki supports a range of simplified character
> formatting:
> | !To get | !Type this |h
> | ''Bold'' | {{{''Bold''}}} |
> | --Strikethrough-- | {{{--Strikethrough--}}} |
> | __Underline__ | {{{__Underline__}}} (that's two underline characters) |
> | //Italic// | {{{//Italic//}}} |
> | Superscript: 2^^3^^=8 | {{{2^^3^^=8}}} |
> | Subscript: a~~ij~~ = -a~~ji~~ | {{{a~~ij~~ = -a~~ji~~}}} |
> | @@highlight@@ | {{{@@highlight@@}}} |
> <<<
> The highlight can also accept CSS syntax to directly style the text:
> @@color:green;green coloured@@
> @@background-color:#ff0000;color:#ffffff;red coloured@@
> @@text-shadow:black 3px 3px 8px;font-size:18pt;display:block;margin:1em 1em
> 1em 1em;border:1px solid black;Access any CSS style@@
> <<<
>
> //For backwards compatibility, the following highlight syntax is also
> accepted://
> {{{
> @@bgcolor(#ff0000):color(#ffffff):red coloured@@
> }}}
> @@bgcolor(#ff0000):color(#ffffff):red coloured@@
>
> If you've any comments, corrections or observations about TiddlyWiki, the
> best way to get our attention is to post to the [[Community]] groups -- or
> write a blog entry.
>
> TiddlyWiki suomeksi:
> *
> [[JuhaKrapinoja|http://www.iworld.de/~juha_krapinoja/TiddlyWiki/TiddlyWiki_fi.html#JuhaKrapinoja]],
> [[site|http://www.iworld.de/~juha_krapinoja/TiddlyWiki/TiddlyWiki_fi.html]],
> [[plugin|http://www.iworld.de/~juha_krapinoja/TiddlyWiki/TiddlyWiki_fi.html#systemConfigSuomi]]
>
> FireFox lets you SaveChanges in TiddlyWiki, but you will see up to three
> dialogs asking your permission for the local file operations. You must allow
> all three operations for it to work properly. Note that you can select the
> //Remember this decision// option to avoid seeing the dialogs in future.
> <<<
> You can run into problems if you accidentally click 'Deny' on the dialog,
> and select //Remember this decision//.
>
> To reverse the effects, first locate the file {{{prefs.js}}} in your FireFox
> profile directory. Under Windows you'll find it at something like
> {{{C:\Documents and Settings\Jeremy\Application
> Data\Mozilla\Firefox\Profiles\o3dhupu6.default\prefs.js}}}, where
> {{{Jeremy}}} is the name of your windows profile and {{{o3dhupu6}}} will be
> a similar string of gobbledegook. On the Mac it'll be at
> {{{~/Library/Application
> Support/Firefox/Profiles/o3dhupu6.default/prefs.js}}} and on most versions
> of Linux, at {{{~/.mozilla/firefox/o3dhupu6.default/prefs.js}}}.
>
> Open the file in a text editor and find the line
> {{{user_pref("capability.principal.codebase.p0.denied",
> "UniversalXPConnect");}}} and simply replace the word {{{denied}}} with
> {{{granted}}}.
> //(Thanks to JonScully for figuring out this fix)//
> <<<
>
> FireFox users should be aware that GreaseMonkey can break TiddlyWiki.
> There's also a rather unpredictable FireFoxKeyboardIssue.
>
> Under FireFox, TiddlyWiki can get into a state where it ignores the arrow
> keys on the keyboard but accepts ordinary alphanumeric input. The triggers
> for this behaviour are unclear, but it doesn't just affect TiddlyWiki. The
> solution appears to be to locate the file {{{compreg.dat}}} in your FireFox
> profile folder and rename it to {{{compreg.dat.old}}}.
>
> Released in September 2004, the [[first version|firstversion.html]] was
> pretty basic, weighing in at 52KB.
>
> * PoulStaugaard and IvanMetalnikov's at http://poul.staugaard.dk/IeWiki.htm
> * HenrikAastedSorensen's at http://aasted.org/wiki
>
> Here's one way to get a Flickr badge in TiddlyWiki:
>
> <html>
> <a href="http://www.flickr.com" style="text-align:center;">www.<strong
> style="color:#3993ff">flick<span
> style="color:#ff1c92">r</span></strong>.com</a><br>
> <iframe style="background-color:#ffffff; border-color:#ffffff; border:none;"
> width="113" height="151" frameborder="0" scrolling="no"
> src="http://www.flickr.com/apps/badge/badge_iframe.gne?zg_bg_color=ffffff&zg_person_id=35468148136%40N01"
> title="Flickr Badge"></iframe>
> </html>
>
> Here's the HTML code to insert in a tiddler:
> {{{
> <html>
> <a href="http://www.flickr.com" style="text-align:center;">www.<strong
> style="color:#3993ff">flick<span
> style="color:#ff1c92">r</span></strong>.com</a><br>
> <iframe style="background-color:#ffffff; border-color:#ffffff; border:none;"
> width="113" height="151" frameborder="0" scrolling="no"
> src="http://www.flickr.com/apps/badge/badge_iframe.gne?zg_bg_color=ffffff&zg_person_id=35468148136%40N01"
> title="Flickr Badge"></iframe>
> </html>
> }}}
>
> You'll need to know your Flickr person ID, which should replace the value
> "35468148136%40N01" in the HTML. There's a useful [[Flickr
> idGettr|http://eightface.com/code/idgettr/]] to help with this.
>
> TiddlyWiki en français:
> * JacquesTurbÃ(c), [[site|http://avm.free.fr/TiddlyWiki-fr.html]],
> [[plugin|http://avm.free.fr/TiddlyWiki-fr.html#AdaptationFrançaise2]]
>
> NathanBower's GTDTiddlyWiki is a popular adaptation of TiddlyWiki geared
> towards DavidAllen's GettingThingsDone methodology for personal
> productivity. The
> [[original|http://shared.snapgrid.com/gtd_tiddlywiki.html]] is based on an
> obsolete, older version of TiddlyWiki; if you want to have the GTD
> look-and-feel but still be able to use the latest TiddlyWiki features, check
> out the GTD Style at [[TiddlerWiki|http://tiddlystyles.com/#GTDStyleSheet]]
>
> TiddlyWiki in Galician:
> *Makeijan, http://makeijan.googlepages.com/tiddlywiki.html
>
> A new feature for the ThirdVersion of TiddlyWiki is the ability to generate
> an RssFeed of its content. You can flick it on with a new addition to the
> InterfaceOptions. If enabled, it automatically saves an RSS 2.0 format file
> with the last few changed tiddlers in it. It's given the same filename as
> the TiddlyWiki file but with the ".xml" extension. Like all TiddlyWiki
> features, it's experimental, and will probably be a bit temperamental in
> your feedreader until the bugs are ironed out.
>
> Note that you must set the tiddler SiteUrl to be the URL where your
> TiddlyWiki will be published. (Don't put leading spaces or line breaks
> before or after the URL).
>
> TiddlyWiki in Deutsch:
> * BesimKaradeniz, [[site|http://www.karadeniz.de/tiddlywiki/]],
> [[plugin|http://www.karadeniz.de/tiddlywiki/#GermanTranslation206]]
> * MarkusHeurung, [[site|http://tiddlywiki.byzero.de/index.html]],
> [[plugin|http://tiddlywiki.byzero.de/index.html#%5b%5bDeutsche
> Übersetzung%5d%5d]]
> * ChristianHauck, [[site|http://www.tiddlywiki.de/]],
> [[plugin|http://www.tiddlywiki.de/index.htm#systemConfigDeutsch]]
> There's also SwenSchneider's
> [[TiddlyWikiHandbuch|http://www.tiddlywikihandbuch.de/]]
>
> The easiest way to learn about TiddlyWiki is to use it! Try clicking on
> various links and see what happens - you cannot damage tiddlywiki.com or
> your browser. (Use the <<closeAll>> button over on the right to clear all
> the displayed tiddlers and start again).
>
> There is an extensive [[Community]] [[documentation
> wiki|http://www.tiddlywiki.org/]], including an invaluable
> [[FAQ|http://www.tiddlywiki.org/wiki/TiddlyWiki_FAQ]]. Other useful guides
> include:
> * Dave Gifford's [[TiddlyWiki for the Rest of
> Us|http://www.giffmex.org/twfortherestofus.html]] and his [[slideshow
> introduction|http://www.giffmex.org/blog/?p=23]]
> * Morris Gray's [[TW Help - TiddlyWiki help file for
> beginners|http://tiddlyspot.com/twhelp/]]
> * Dmitri Popov's [[TiddlyWiki quick reference
> card|http://nothickmanuals.info/doku.php/cheatsheets]]
> * Screencasts from
> [[JimVentola|http://faculty.massasoit.mass.edu/jventola/videocasts/tidhelp2/tidhelp2.html]]
> and
> [[LeonKilat|http://max.limpag.com/2006/09/07/using-a-tiddlywiki-a-video-guide/]].
> When you're ready to create your own TiddlyWiki on your computer, follow the
> instructions in DownloadSoftware and SaveChanges. There is also a free
> hosted service at http://tiddlyspot.com/ that makes it easier to share your
> TiddlyWiki with others (for more demanding applications there are several
> other ServerSide solutions available).
>
> |''URL:''|http://gimcrackd.com/etc/src/|
> |''Description:''|Gimcrack'd: Code and Other Oddments|
> |''Author:''|ChrisKlimas|
>
> <<gradient horiz #bbbbbb #eeeeee #ffffff>>The new GradientMacro allows
> simple horizontal and vertical coloured gradients. They are constructed from
> coloured HTML elements, and don't require any images to work.>>
> The GradientMacro is an ExtendedMacro that processes the text after it up
> until the next '>>' sequence. It looks like this:
> {{{
> <<gradient vert #ffffff #ffdddd #ff8888>>gradient fill>>
> }}}
> The first parameter can be ''vert'' or ''horiz'' to indicate the direction
> of the gradient. The following parameters are two or more colours (CSS
> RGB(r,g,b) format is also acceptable). The GradientMacro constructs a smooth
> linear gradient between each of the colours in turn.
>
> | <<gradient vert #ffffff #ffdddd #ff8888>>No images were harmed in the
> making of this gradient fill>> | <<gradient vert #ffffff #ddffdd #88ff88>>No
> images were harmed in the making of this gradient fill>> | <<gradient vert
> #ffffff #ddddff #8888ff>>No images were harmed in the making of this
> gradient fill>> |
>
> Inline CSS definitions can be added to gradient filles like this:
>
> <<gradient vert #000000 #660000
> #aa2222>>color:#ffffff;font-size:12pt;Darkness>>
> {{{
> <<gradient vert #000000 #660000
> #aa2222>>color:#ffffff;font-size:12pt;Darkness>>
> }}}
>
> Several popular GreaseMonkey scripts can cause some or all features of
> TiddlyWiki to stop working - the default Linkify script seems to be
> particularly troublesome. There doesn't seem to be a //solid// way to
> disable GreaseMonkey from within TiddlyWiki (which is technically entirely
> understandable but does lead to a fairly grim user experience).
>
> TiddlyWiki in Greek:
> * Spyk, [[site|http://spyros.kroustalakis.googlepages.com/empty_gr.html]]
>
> TiddlyWiki makes a great GuerillaWiki in situations where it's not
> practical to use a traditional wiki.
>
> For instance, in a corporate setting, persuading an over-worked IT
> department to install you a Wiki server for you isn't always going to be
> possible overnight. And your PC is locked down so you can't install a
> conventional Wiki yourself. But, equally, you can't go and use one of the
> public hosted Wiki services because your Information Security department
> would not allow all that corporate data to flow into an outside server.
>
> TiddlyWiki slices through those barriers by being usable on virtually all
> PCs.
>
> I don't know of a full Hebrew translation of TiddlyWiki, but Lin Magazine
> has published [[TiddlyWiki: מסמך וויקי ×
> ×™×(c)×™|http://linmagazine.co.il/misc/files/linmagazine-tidlly-intro.html]],
> a guide to getting up and running with TiddlyWiki.
>
> <<upgrade>>
>
> /***
> |Name|HelloWorldMacro|
> |Created by|SimonBaird|
> |Location|http://simonbaird.com/mptw/#HelloWorldMacro|
> |Version|1.1|
> |Requires|~TW2.x|
> !Description
> It's a Hello World TiddlyWiki macros.
>
> !History
> * 11-Jan-06, version 1.1, updated for ~TW2.0
>
> !Examples
> |!Source|!Output|h
> |{{{<<helloWorld dude>>}}}|<<helloWorld dude>>|
> |{{{<<helloWorld 'to everyone'>>}}}|<<helloWorld 'to everyone'>>|
> (You can use (single or double) quotes or double square brackets for params
> with spaces)
>
> !Notes
> This is intended to help you get started with customising your TW. To make
> the macro work you have to give this tiddler a tag of systemConfig then save
> and reload. To learn more about customising Tiddlywiki? Look at other
> people's plugins or... click View, Source in your browser and start reading.
> :)
>
> !Code
> ***/
> //{{{
> config.macros.helloWorld = {};
> config.macros.helloWorld.handler = function
> (place,macroName,params,wikifier,paramString,tiddler) {
> var who = params.length > 0 ? params[0] : "world";
> wikify("Hello //" + who + "// from the '" + macroName + "' macro in tiddler
> [[" + tiddler.title + "]].", place);
> }
>
> //}}}
>
> This is an advanced option that lets you choose whether editting features
> are shown when a TiddlyWiki file is viewed over {{{http:}}} (as opposed to
> {{{file:}}}).
>
> To publish a TiddlyWiki with the editting features hidden you'll need to
> create a tiddler tagged with 'systemConfig' and include in it the line:
>
> {{{
> config.options.chkHttpReadOnly = true;
> }}}
>
> End users can then override the setting using the AdvancedOptions panel.
>
> You can divide a tiddler into
> ----
> sections by typing four dashes on a line by themselves
>
> The core TiddlyWiki code is regularly updated with bug fixes and new
> features. If you're using an earlier revision of TiddlyWiki, here's the
> simple way to upgrade to the latest version:
> * Download a fresh, empty version of TiddlyWiki by right-clicking on [[this
> link|http://www.tiddlywiki.com/empty.html]], selecting 'Save target' or
> 'Save link' and saving it in a convenient location as (say)
> "mynewtiddlywiki.html"
> * Open the new TiddlyWiki file in your browser
> * Choose ''import'' from the BackstageArea at the top of the window (you may
> need to click the 'backstage' button at the upper right to show the
> BackstageArea)
> * Click the ''browse'' button and select your original TiddlyWiki file (say,
> "mytiddlywiki.html") from the file browser
> * Click the ''open'' button on the import wizard; a list of all of your
> tiddlers is displayed
> * Click on the top-left checkbox to select all the tiddlers in the list
> * Scroll down to the bottom of the wizard and ensure that the checkbox
> labelled //Keep these tiddlers linked to this server...// is ''clear''
> * Click the ''import'' button
> The most likely cause of the upgrade process not working properly is that
> one of the [[Plugins]] you're using is not compatible with a change in the
> new release. If so, you can repeat the process omitting the troublesome
> plugins.
>
> Entities in HTML documents allow characters to be entered that can't easily
> be typed on an ordinary keyboard. They take the form of an ampersand (&), an
> identifying string, and a terminating semi-colon (;). There's a complete
> reference [[here|http://www.htmlhelp.com/reference/html40/entities/]]; some
> of the more common and useful ones are shown below. Also see [[Paul's
> Notepad|http://thepettersons.org/PaulsNotepad.html#GreekHtmlEntities%20HtmlEntitiesList%20LatinHtmlEntities%20MathHtmlEntities]]
> for a more complete list.
>
> |>|>|>|>|>|>| !HTML Entities |
> | &amp;nbsp; | &nbsp; | no-break space | &nbsp;&nbsp; | &amp;apos; | &apos;
> | single quote, apostrophe |
> | &amp;ndash; | &ndash; | en dash |~| &amp;quot; | " | quotation mark |
> | &amp;mdash; | &mdash; | em dash |~| &amp;prime; | &prime; | prime;
> minutes; feet |
> | &amp;hellip; | &hellip; | horizontal ellipsis |~| &amp;Prime; | &Prime; |
> double prime; seconds; inches |
> | &amp;copy; | &copy; | Copyright symbol |~| &amp;lsquo; | &lsquo; | left
> single quote |
> | &amp;reg; | &reg; | Registered symbol |~| &amp;rsquo; | &rsquo; | right
> single quote |
> | &amp;trade; | &trade; | Trademark symbol |~| &amp;ldquo; | &ldquo; | left
> double quote |
> | &amp;dagger; | &dagger; | dagger |~| &amp;rdquo; | &rdquo; | right double
> quote |
> | &amp;Dagger; | &Dagger; | double dagger |~| &amp;laquo; | &laquo; | left
> angle quote |
> | &amp;para; | &para; | paragraph sign |~| &amp;raquo; | &raquo; | right
> angle quote |
> | &amp;sect; | &sect; | section sign |~| &amp;times; | &times; |
> multiplication symbol |
> | &amp;uarr; | &uarr; | up arrow |~| &amp;darr; | &darr; | down arrow |
> | &amp;larr; | &larr; | left arrow |~| &amp;rarr; | &rarr; | right arrow |
> | &amp;lArr; | &lArr; | double left arrow |~| &amp;rArr; | &rArr; | double
> right arrow |
> | &amp;harr; | &harr; | left right arrow |~| &amp;hArr; | &hArr; | double
> left right arrow |
>
> The table below shows how accented characters can be built up by subsituting
> a base character into the various accent entities in place of the underscore
> ('_'):
>
> |>|>|>|>|>|>|>|>|>|>|>|>|>|>|>|>|>| !Accented Characters |
> | grave accent | &amp;_grave; | &Agrave; | &agrave; | &Egrave; | &egrave; |
> &Igrave; | &igrave; | &Ograve; | &ograve; | &Ugrave; | &ugrave; | &nbsp; |
> &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; |
> | acute accent | &amp;_acute; | &Aacute; | &aacute; | &Eacute; | &eacute; |
> &Iacute; | &iacute; | &Oacute; | &oacute; | &Uacute; | &uacute; | &nbsp; |
> &nbsp; | &Yacute; | &yacute; | &nbsp; | &nbsp; |
> | circumflex accent | &amp;_circ; | &Acirc; | &acirc; | &Ecirc; | &ecirc; |
> &Icirc; | &icirc; | &Ocirc; | &ocirc; | &Ucirc; | &ucirc; | &nbsp; | &nbsp;
> | &nbsp; | &nbsp; | &nbsp; | &nbsp; |
> | umlaut mark | &amp;_uml; | &Auml; | &auml; | &Euml; | &euml; | &Iuml; |
> &iuml; | &Ouml; | &ouml; | &Uuml; | &uuml; | &nbsp; | &nbsp; | &Yuml; |
> &yuml; | &nbsp; | &nbsp; |
> | tilde | &amp;_tilde; | &Atilde; | &atilde; | &nbsp; | &nbsp; | &nbsp; |
> &nbsp; | &Otilde; | &otilde; | &nbsp; | &nbsp; | &Ntilde; | &ntilde; |
> &nbsp; | &nbsp; | &nbsp; | &nbsp; |
> | ring | &amp;_ring; | &Aring; | &aring; | &nbsp; | &nbsp; | &nbsp; | &nbsp;
> | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; |
> &nbsp; |
> | slash | &amp;_slash; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp;
> | &Oslash; | &oslash; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp;
> | &nbsp; |
> | cedilla | &amp;_cedil; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; |
> &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; |
> &nbsp; | &Ccedil; | &ccedil; |
>
> TiddlyWiki magyarul:
> * JároliJózsef, [[site|http://innen.hu/MagyarTiddlyWiki]],
> [[plugin|http://innen.hu/MagyarTiddlyWiki#MagyarFordítás]]
>
> //Note that the popular
> [[Firebug|http://www.joehewitt.com/software/firebug/]] extension for Firefox
> interferes with ImportTiddlers if its "Show XMLHttpRequest" option is
> switched on//
> <<importTiddlers>>
>
> When you type more than three characters in the search box at the upper
> right, any matching tiddlers are automatically displayed with the text
> highlighted. There's a couple of minor issues: the highlights don't get
> removed when you clear the search, and occasionally, on some browsers,
> keystrokes get missed if you type quickly so you may need to click the
> 'search' button to manually trigger the search.
>
> TiddlyWiki lets you write ordinary HTML by enclosing it in {{{<html>}}} and
> {{{</html>}}}:
>
> <html>
> <a href="javascript:;" onclick="onClickTiddlerLink(event);"
> tiddlyLink="TiddlyWiki" style="background-color: yellow;">Link to wikiwords
> from HTML</a>
> </html>
>
> The source for the above is:
>
> {{{
> <html>
> <div style="background-color: yellow;">
> <a href="javascript:;" onclick="onClickTiddlerLink(event);"
> tiddlyLink="Macros">Link to wikiwords from HTML</a>
> </div>
> </html>
> }}}
>
> HTML can enable some exotic new features (like [[embedding GMail and
> Outlook|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/d363303aff5868d0/056269d8409d121f?lnk=st&q=embedding+gmail&rnum=1#056269d8409d121f]]
> in a TiddlyWiki). However it doesn't work for some JavaScript code
> libraries; see CustomMarkup for another way to include custom HTML in your
> TiddlyWiki.
>
> [[Plugins]] are just tiddlers containing JavaScript code that is tagged
> with <<tag systemConfig>>. TiddlyWiki executes any [[Plugins]] as it loads;
> they can add [[Macros]] or otherwise extend and enhance the base code.
>
> The recommended way to install a plugin into your own copy of TiddlyWiki is
> to use ImportTiddlers (there are instructions for ManuallyInstallIngPlugins
> when required).
>
> InterfaceOptions are displayed when you click the 'options' button on the
> right. They are saved in a cookie on your browser, making them sticky
> between visits:
> <<<
> <<tiddler OptionsPanel>>
> <<<
> * The user name for edits should be set //before// starting to edit things
> (ouch. another bug)
> * SaveBackups gives the option of whether to generate backup files
> * AutoSave gives the option of automatically saving every time a change is
> made
> * RegExpSearch allows more complex search expressions
> * CaseSensitiveSearch does as its name implies
>
> TiddlyWiki works on InternetExplorer 6.x and above under Windows. It also
> allows you to SaveChanges, albeit there are some annoying XP
> ServicePack2Problems and VistaIssues to work around.
>
> Known problems with TiddlyWiki under InternetExplorer:
> * [[Gradient]] fills sometimes appear in the wrong place until you move the
> mouse over the tiddler
> * Horizontal gradients don't work correctly
> * Links to tiddlers with multiple consecutive spaces in their titles is
> broken
> * Runs of spaces within tiddlers get conflated into a single space when you
> edit a tiddler. This is particularly annoying when using MonospacedText
> blocks
>
> TiddlyWiki in Italiano
> * MathewWarburton,
> [[site|http://spazioinwind.libero.it/mat01/TiddlyWikiITA.html]],
> [[plugin|http://spazioinwind.libero.it/mat01/TiddlyWikiTutorialITA.htm#Italiano]],
> [[tutorial|http://spazioinwind.libero.it/mat01/TiddlyWikiTutorialITA.htm]]
> (Mathew's updated translation includes the wonderful "Frammenti" for
> "Tiddlers" and "Frammento" for "Tiddler").
>
> There is also an [[Italian
> tutorial|http://pollio.maurizio.googlepages.com/MiniGuidaTiddlyWiki.html]]
> by PollioMaurizio.
>
> |''URL:''|http://jackparke.googlepages.com/jtw.html|
> |''Description:''|Plugins, Macros and Hacks|
> |''Author:''|JackParker|
>
> Japanese translation of TiddlyWiki:
> * [[site|http://flow.dip.jp/mt/archives/u/twmemo.html]],
> [[plugin|http://flow.dip.jp/mt/archives/u/twmemo.html#JapaneseTranslation]]
>
> I'm the original creator of TiddlyWiki (nowadays, it's more of a [[group
> effort|Community]]). I work at [[BT|http://www.btplc.com/]] where I am Head
> of Open Source Innovation.
>
> I can be reached at {{{jeremy (at) osmosoft (dot) com}}}, and I regularly
> read and reply to messages on the [[TiddlyWiki Google Groups|Community]]. I
> blog at http://jermolene.wordpress.com/ and you can also find me on
> [[Flickr|http://www.flickr.com/photos/jermy/]] and
> [[del.icio.us|http://del.icio.us/jeremyruston]].
>
> Offers a popup menu to jump directly to any of the currently open tiddlers.
> It is used with the ToolbarMacro like this:
> {{{
> <<toolbar jump>>
> }}}
>
> Access keys are shortcuts to common functions accessed by typing a letter
> with either the 'alt' (PC) or 'control' (Mac) key:
> |!PC|!Mac|!Function|
> |Alt-F|Ctrl-F|Search|
> |Alt-J|Ctrl-J|NewJournal|
> |Alt-N|Ctrl-N|NewTiddler|
> |Alt-S|Ctrl-S|SaveChanges|
> These access keys are provided by the associated internal [[Macros]] for the
> functions above. The macro needs to be used in an open tiddler (or the
> MainMenu or SideBar) in order for the access keys to work.
>
> While editing a tiddler:
> * ~Control-Enter or ~Control-Return accepts your changes and switches out of
> editing mode (use ~Shift-Control-Enter or ~Shift-Control-Return to stop the
> date and time being updated for MinorChanges)
> * Escape abandons your changes and reverts the tiddler to its previous state
>
> In the search box:
> * Escape clears the search term
>
> TiddlyWiki in Korean:
> * Ed Seunghoon Yeon,
> [[site|http://www.kcug.net/TiddlyWiki/Korean.utf-8.txt]]
>
> |''URL:''|http://tw.lewcid.org/|
> |''Description:''|a repository of my extensions for TW|
> |''Author:''|SaqImtiaz|
>
> The format for PrettyLinks allows for links that open local or network
> folders. Depending on your browser and operating system, the folders are
> opened in Windows Explorer, the OS X Finder, or the browser itself.
>
> Edit this tiddler to see [[this link to a Windows network
> share|file://///server/share/folder/path/name]], [[this link to a Windows
> drive-mapped folder|file:///c:/folder/path/name]] and [[this link to a
> Unix-style folder|file:///folder/path/name]].
>
> [[Macros]] let you write tiddlers containing more exotic objects than just
> text. Built-in macros include:
> * NewJournalMacro and NewTiddlerMacro
> * GradientMacro
> * [[Sparklines]]
> * TabMacro
> * TaggingMacro
> * TodayMacro
> * ToolbarMacro
>
> Tag popup:
> {{{
> <<tag features>>
> }}}
> will result in <<tag features>>
>
> Slider:
> {{{
> <<slider chkTestSlider OptionsPanel options "Change TiddlyWiki advanced
> options">>
> }}}
> Results in this button <<slider chkTestSlider OptionsPanel options "Change
> TiddlyWiki advanced options">>
> The parameters are:
> * cookie name to be used to save the state of the slider
> * name of the tiddler to include in the slider
> * title text of the slider
> * tooltip text of the slider
>
> Out of the box, TiddlyWiki offers:
> * Works with all major desktop [[browsers]] on Windows, Macintosh and Linux
> and many mobile browsers such as the Apple iPhone and the Nokia 770/N800
> ** You can SaveChanges with FireFox, [[Opera]], InternetExplorer for
> Windows, [[Safari]], and [[Camino]]
> * The BackstageArea for handy access to authoring tools including
> [[importing|ImportTiddlers]] and
> [[synchronisation|http://www.tiddlywiki.org/wiki/Dev:Server_Adaptor_Mechanism]]
> of tiddlers with external files and servers
> * Full text formatting including MonospacedText, ExtendedFormatting,
> NonWikiWordLinks, WikiWordEscape, PrettyLinks, SubHeadings, BulletPoints,
> NumberedBulletPoints, [[Tables]], BlockQuotes, HorizontalRules and the
> ability to use a CustomCssClass and InlineHTML
> * [img[brixhamharbour.jpg][EmbeddedImages]]...EmbeddedImages
> * [[Macros]] providing rich interactive features, including [[Sparklines]]
> and [[Gradients|GradientMacro]]
> * InterfaceOptions and AdvancedOptions, including the ability to
> GenerateAnRssFeed, SaveBackups and AutoSave
> * KeyboardShortcuts so you can finish editing a tiddler with Control-Enter
> or abandon it with Escape
> * Extensive StartupParameters to control the behaviour of TiddlyWiki through
> specially crafted URLs
> * There are [[translations]] of TiddlyWiki available in many languages,
> including [[Chinese]], [[French]], [[German]], [[Spanish]], [[Portuguese]]
> The [[Community]] around TiddlyWiki has extended this basic functionality
> with a wide range of [[Plugins]] and TiddlyWikiAdaptations.
>
> HelloThere
> TiddlyWiki
> MainFeatures
> GettingStarted
> [[Customisation]]
> [[Community]]
> DownloadSoftware
> [[Plugins]]
> [[RSS|RssFeed]]
>
> ^^[img[favicon.ico]] TiddlyWiki <<version>>
> Â(c) 2007 [[UnaMesa|http://www.unamesa.org/]]^^
>
> In some situations it can be useful to use the clipboard insead of
> InstallingPlugins using ImportTiddlers.
>
> # Open a new browser window and navigate to the TiddlyWiki site containing
> the macro you want
> # Double click the tiddler, or click the {{{source}}} button (on other sites
> it will sometimes be a {{{view}}} or {{{edit}}} button)
> # The entire text of the tiddler should be selected; if not select it
> manually with Control-A or Command-A
> # Copy the entire text of the tiddler to the clipboard
> # Open your TiddlyWiki file in a new browser window
> # Click {{{new tiddler}}} to create a new blank tiddler
> ## Paste the contents of the clipboard into it's body
> ## Set the title as appropriate
> ## Add the tag {{{systemConfig}}}
> # Click {{{done}}} on the tiddler
> # SaveChanges
> # Reload your TiddlyWiki in the browser
> The plugin should now be available for use.
>
> |''URL:''|http://www.martinswiki.com/ |
> |''Description:''|Martin Buddens's Plugins |
> |''Author:''|MartinBudden |
>
> MicroContent being a fashionable word for self-contained fragments of
> content that are typically smaller than entire pages. Often MicroContent is
> presented via some kind of aggregation that reduces the perceptual shock and
> resource cost of context switching (eg Blogs aggregating several entries
> onto a page or Flickr presenting photos in an album). This TiddlyWiki
> aggregates MicroContent items that I call 'tiddlers' into pages that are
> loaded in one gulp and progressively displayed as the user clicks hypertext
> links to read them.
>
> Sometimes it's useful to stop a minor change to a tiddler from causing it
> to rise to the top of the timeline. This can be done by pressing the Shift
> key while clicking the 'done' toolbar button, or with the
> ~Shift-Control-Enter key. This behaviour can be switched to become the
> default with one of the AdvancedOptions.
>
> The 'Missing' option on the MoreTab shows you the names of tiddlers that
> you've referred to but not gone ahead to define. It can be useful during
> writing sessions to keep track of things you need to come back and fill out.
>
> |''URL:''|http://mptw.tiddlyspot.com/|
> |''Description:''|a tiddlywiki distribution and plugins|
> |''Author:''|SimonBaird|
>
> {{{Monospaced text}}} is supported - edit this tiddler to see the syntax.
>
> You can also have monospaced blocks (useful for source code):
>
> {{{
> var posTop = findPosY(e);
> var posBot = posTop + e.offsetHeight;
> var winTop = findScrollY();
> var winHeight = findWindowHeight();
> var winBot = winTop + winHeight;
> if(posTop < winTop)
> return(posTop);
> else if(posBot > winBot)
> {
> if(e.offsetHeight < winHeight)
> return(posTop - (winHeight - e.offsetHeight));
> else
> return(posTop);
> }
> else
> return(winTop);
> }}}
>
> The functions of 'Timeline' and 'All' tabs have been around since the
> FirstVersion of TiddlyWiki. The purpose of the 'More' tab is to bring
> together some other, more specialised lists of tiddlers that can be useful
> during writing sessions. Currently, it offers lists of OrphanTiddlers and
> MissingTiddlers.
>
> Within a CustomStyleSheet, you can include the text of another tiddler by
> including it in double square brackets. For example, if the tiddler
> MyFavouriteColour contains {{{#ff763e}}}, and the StyleSheet tiddler
> contained:
>
> {{{
> #mainMenu {background-color:[[MyFavouriteColour]];}
> }}}
>
> Then, the effect is that each CSS declaration will be set to
> {{{background-color: #ff763e;}}}.
>
> In practice, for small bits of text like a colour, it makes sense to use
> TiddlerSlicing format to reference a chunk of text within a tiddler. See
> ColorPalette and StyleSheetColors for an example.
>
> Of course, you can use this mechanism to redirect any part of a stylesheet,
> not just colours. And you can nest references for more complex effects.
>
> A PageTemplate, ViewTemplate or EditTemplate can include the text of
> another tiddler by including it in double square brackets. For example:
>
> {{{
> <div>
> [[MyHeader]]
> </div>
> }}}
>
> You can also use TiddlerSlicing format to include a smaller chunk of the
> text of a tiddler.
>
> TiddlyWiki has been improved in several other areas for release 2.2. Here
> are some of the highlights; see the full [[release note at
> tiddlywiki.org|http://trac.tiddlywiki.org/tiddlywiki/wiki/ReleaseNoteTwoPointTwo]]
> for more details.
> !!! Usability
> There's a slew of significant usability enhancements including:
> * The new BackstageArea to separate off authoring specific functionality
> * Popup previews of tiddler contents in the plugin manager, sync manager,
> and ImportTiddlers
> * 'More' command to simplify tiddler toolbars
> * "Yellow note" annotations to indicate the purpose of special tiddlers such
> as shadow tiddlers
> * New {{{<<options>>}}} macro to allow access to the complete set of
> available configuration options
> * New "size" and "execution time" columns in the plugin manager
> * Improved NewTiddler and NewJournal macros that can accept custom fields
> * Embolden tags in the tag listing that are also defined as tiddlers
> !!! Performance
> * New DomScrubbing feature to deal with memory leaks
> * Revised storage format using {{{<PRE>}}} tags to permit whitespace and new
> lines to be preserved without requiring escaping
> * Greatly enhanced animation engine that performs better on slower hardware
> !!! Hackability
> As usual, several of the new features are intended to make life easier for
> plugin writers and other TiddlyWiki hackers:
> * A new
> [[ServerConnectivity|http://www.tiddlywiki.org/wiki/Dev:Server_Adaptor_Mechanism]]
> architecture
> * New PluginLoadOrder mechanism for controlling the execution order of
> plugins
> * Better startup timing instrumentation
> * Rearranged shadow tiddlers into their own, unencoded store area
> * Refactored {{{saveChanges()}}} to make it easier to add new save
> mechanisms
> * Added paramifier for overriding current read-only state (eg,
> http://www.tiddlywiki.com/beta/#readOnly:no)
> * ...and by popular request, we've started to reformat the TiddlyWiki source
> code to use the more conventional K&R layout standard
> !!! Internationalisation
> TiddlyWiki benefits from an extensive set of
> [[translations|http://trac.tiddlywiki.org/wiki/Translations]]. There are
> several enhancements in this release to make it easier to maintain
> translations.
>
> The {{{<<newJournal>>}}} macro creates a new tiddler with it's title set to
> the current date, and the cursor in the body text area ready to type.
>
> This macro is identical to the NewTiddlerMacro except that the "title"
> parameter is treated as a DateFormatString so that you can specify your own
> date format.
>
> The {{{<<newTiddler>>}}} macro displays a button that can be clicked to
> create a new tiddler. By default, the new tiddler is opened in edit mode or
> you can specify a custom template.
>
> The available parameters are:
>
> |!Parameter |!Description |
> |label |The text of the button |
> |prompt |The tooltip for the button |
> |accessKey |The access key to trigger the button (specify a single letter;
> different browsers require a different modifier key like Alt- or Control-) |
> |focus |Which of the edittable fields to default the focus to (eg, "title",
> "text", "tags") |
> |template |The template to use to display the new tiddler (defaults to
> EditTemplate) |
> |text |The default text for the new tiddler |
> |title |The default title for the new tiddler |
> |tag |A single tag to be applied to the new tiddler (repeat this parameter
> to specify multiple tags) |
>
> For example: <<newTiddler label:"try this" accessKey:1 focus:tags
> text:"hello there!" tag:greeting tag:"an example">> (can also be triggered
> with Alt-1)
> {{{
> <<newTiddler label:"try this" accessKey:1 focus:tags text:"hello there!"
> tag:greeting tag:"an example">>
> }}}
>
> You can only prime the initial values of fields that map to a text input box
> in the specified template (for instance, if you specify the standard
> ViewTemplate as the template you won't be able to prime any fields). For
> example, this doesn't work as you might expect:
> {{{
> <<newTiddler template:ViewTemplate text:"To be or not to be">>
> }}}
> <<newTiddler template:ViewTemplate text:"To be or not to be">>
>
> To make a tiddler that doesn't have a WikiWord as its name, you can enclose
> the name in [[double square brackets]] - edit this tiddler to see an
> example. After saving the tiddler you can then click on the link to create
> the new tiddler. NonWikiWordLinks permits tiddlers to be created with names
> that are made from character sets that don't have upper and lower case.
>
>
>

--
Jeremy Ruston
mailto:jer...@osmosoft.com
http://www.tiddlywiki.com

FND

unread,
Feb 16, 2008, 10:30:29 AM2/16/08
to Tiddly...@googlegroups.com
> Great stuff, Saq, I think that's just what we need.

I can only second that - very impressive indeed! (And all that in only
two hours... !?)

> verification source. Eg: a small file sitting at tiddlywiki.com/latest.js
> with information like, latest version number, file size, sha-1 hash.

Sounds good.

> This could also be used to write a quick and simple plugin that notifies the
> user when a newer version of TiddlyWiki is available.

That'd be very cool.

> Ideally, generating that file would be part of the
> tw.com production process (it's a bit manual at the moment).

From my limited knowledge, I think this could easily be incorporated
into Cook (as an optional argument, of course).

>> currently the TiddlyWiki can update itself even if there is not a
>> newer core version available. A check should be added for this.
>
> Although perhaps it would be useful to be able to do that to bring in
> plugin updates.

I'm not sure whether the default distro's plugins should be updated
using the core-upgrade mechanism - sync'ing them just like regular
plugins might be less confusing.
Also see this thread:
[twdev] official plugin repository
http://tinyurl.com/29o95a
(http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/53c0b136c5b3eddb)


-- F.

Paco Rivière

unread,
Feb 16, 2008, 4:34:57 PM2/16/08
to TiddlyWikiDev
Pls. go on. I look forward to use it!
> (http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/53c...)
>
> -- F.

FND

unread,
Feb 19, 2008, 8:05:08 AM2/19/08
to Tiddly...@googlegroups.com
> I'm not sure whether the default distro's plugins should be updated
> using the core-upgrade mechanism - sync'ing them just like regular
> plugins might be less confusing.

Maybe this core-upgrade mechanism could prompt the user to sync outdated
plugins - that would be very helpful.


-- F.

Saq Imtiaz

unread,
Mar 17, 2008, 8:06:15 AM3/17/08
to Tiddly...@googlegroups.com
I'm quite happy to work on this some more if we can get some consensus and momentum going.
Some things that we need to decide:
1) What kind of a GUI do we want? For the very first iteration do we even want anything more than an upgrade button and notification using alerts?
2) Verification. Do we use filesize? SHA1 hash? do we leave hooks for the verification and implement it at a later time?
3) What kind of handling/checking do we want when importing content into the new file? Compatibility check for plugins? Or do we implement this at a later date too?

Saq

Martin Budden

unread,
Mar 17, 2008, 1:24:31 PM3/17/08
to Tiddly...@googlegroups.com
Saq,

some thoughts about your questions:
1) for the first implementation this is probably enough
2) I think we should do some kind of verification. For reference the
tiddlywiki implementation of SHA1 has does about 30K a second, so
verifying a tiddlywiki file will take a few seconds (acceptable, but
not ideal)
3) won't we get the compatibility checking for the plugins 'for free',
when they are reloaded after the upgrade?

Martin

Saq Imtiaz

unread,
Mar 17, 2008, 1:34:54 PM3/17/08
to Tiddly...@googlegroups.com
On Mon, Mar 17, 2008 at 6:24 PM, Martin Budden <mjbu...@gmail.com> wrote:

Saq,

some thoughts about your questions:
1) for the first implementation this is probably enough

Agreed
 

2) I think we should do some kind of verification. For reference the
tiddlywiki implementation of SHA1 has does about 30K a second, so
verifying a tiddlywiki file will take a few seconds (acceptable, but
not ideal)

My other concern with SHA1 verification is that the relevant code is now shipped in the CryptoPlugin and we cant safely assume that every TiddlyWiki will have it. Filesize verification is probably a good start, but not really sufficient.... ideas? We also need to make sure Cook can generate the relevant verification file to live on the serverside. As I mentioned in the corresponding thread, Cook is unaware of the version number of the TiddlyWiki it is cooking. Since this information must be included in the verification file, we need to decide how to handle this. Should Cook grep this from the version.js file?
 

3) won't we get the compatibility checking for the plugins 'for free',
when they are reloaded after the upgrade?

Well, it might be nicer to check for compatibility when importing and offer to either skip the import of incompatible plugins or fetch upgrades from Source slice in the plugin. But this could be part of the PluginManager functionality instead.

Tomorrow I have a packed schedule, but I'll try and submit a patch for this on Wednesday.

Saq

 

Martin

On 17/03/2008, Saq Imtiaz <lew...@gmail.com> wrote:
> I'm quite happy to work on this some more if we can get some consensus and
> momentum going.
> Some things that we need to decide:
> 1) What kind of a GUI do we want? For the very first iteration do we even
> want anything more than an upgrade button and notification using alerts?
>  2) Verification. Do we use filesize? SHA1 hash? do we leave hooks for the
> verification and implement it at a later time?
> 3) What kind of handling/checking do we want when importing content into the
> new file? Compatibility check for plugins? Or do we implement this at a
> later date too?
>
> Saq
>
>
>  >
>


Saq Imtiaz

unread,
Mar 17, 2008, 1:40:52 PM3/17/08
to Tiddly...@googlegroups.com
Actually on second thought, I believe it might be far more appropriate for one of the core developers to polish this into shape and submit a patch.

Saq
Reply all
Reply to author
Forward
0 new messages