<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>andycjw's wiki</title>
<link>http://www.tiddlywiki.com/</link>
<description>a reusable non-linear personal web notebook for study notes</description>
<language>en-us</language>
<copyright>Copyright 2006 AndyChong</copyright>
<pubDate>Sun, 02 Apr 2006 08:53:33 GMT</pubDate>
<lastBuildDate>Sun, 02 Apr 2006 08:53:33 GMT</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>TiddlyWiki 2.0.6</generator>
<item>
<title>UploadLog</title>
<description>| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |&lt;br /&gt;| 2/4/2006 14:56:9 | AndyChong | [[index.html|file:///C:/Documents%20and%20Settings/Andy%20Chong/Desktop/wiki/index.html#UploadPlugin]] | [[...|...]] | ./upload | uploaded | ./backup |&lt;br /&gt;| 2/4/2006 14:57:51 | AndyChong | [[index.html|file:///C:/Documents%20and%20Settings/Andy%20Chong/Desktop/wiki/index.html#UploadPlugin]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] | ./ | index.html | ./history | Ok |&lt;br /&gt;| 2/4/2006 14:58:54 | AndyChong | [[index.html|file:///C:/Documents%20and%20Settings/Andy%20Chong/Desktop/wiki/index.html#UploadPlugin]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  | index.html | ./history |&lt;br /&gt;| 2/4/2006 15:1:4 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  | index.html | ./history |&lt;br /&gt;| 2/4/2006 15:4:10 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[...|...]] |  | index.html | ./history |&lt;br /&gt;| 2/4/2006 15:4:31 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  | index.html | ./history |&lt;br /&gt;| 2/4/2006 15:6:6 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[...|...]] |  | index.html | ./history |&lt;br /&gt;| 2/4/2006 15:7:20 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[...|...]] |  | index.html | ./history |&lt;br /&gt;| 2/4/2006 15:13:1 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  | index.html | ./history |&lt;br /&gt;| 2/4/2006 15:16:51 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  |  | ./backup |&lt;br /&gt;| 2/4/2006 15:17:21 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  | index.html | ./backup |&lt;br /&gt;| 2/4/2006 15:20:8 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  | index.html | ./history |&lt;br /&gt;| 2/4/2006 15:28:25 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  | index.html | ./history |&lt;br /&gt;| 2/4/2006 15:36:24 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  | index.html | ./history |&lt;br /&gt;| 2/4/2006 15:39:37 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  | index.html | ./history |&lt;br /&gt;| 2/4/2006 15:49:56 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  | index.html | ./history |&lt;br /&gt;| 2/4/2006 15:52:53 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  | index.html | ./history |&lt;br /&gt;| 2/4/2006 15:54:9 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  | index.html | ./history |&lt;br /&gt;| 2/4/2006 16:7:21 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  | index.html | ./history | Ok |&lt;br /&gt;| 2/4/2006 16:12:57 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  | index.html | ./history |&lt;br /&gt;| 2/4/2006 16:14:26 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  | index.html | ./history | Ok |&lt;br /&gt;| 2/4/2006 16:19:30 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  | index.html | ./history | Ok |&lt;br /&gt;| 2/4/2006 16:25:30 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  | index.html | ./history |&lt;br /&gt;| 2/4/2006 16:29:6 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/wiki/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] |  | index.html | ./history |&lt;br /&gt;| 2/4/2006 16:30:49 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] | ../ | index.html | ./history |&lt;br /&gt;| 2/4/2006 16:31:59 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] | ../ | index.html | ./history |&lt;br /&gt;| 2/4/2006 16:32:8 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/wiki/store.php]] | ../ | index.html | ./history | Ok |&lt;br /&gt;| 2/4/2006 16:34:37 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/store.php]] |  | index.html | ./wiki/history | Ok |&lt;br /&gt;| 2/4/2006 16:35:23 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/store.php]] |  | index.html | ./wiki/history | Ok |&lt;br /&gt;| 2/4/2006 16:39:17 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/store.php]] |  | index.html | ./wiki/history | Ok |&lt;br /&gt;| 2/4/2006 16:47:29 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/store.php]] |  | index.html | ./wiki/history | Ok |&lt;br /&gt;| 2/4/2006 16:53:33 | AndyChong | [[/|http://www.csie.ntu.edu.tw/~b93118/]] | [[store.php|http://www.csie.ntu.edu.tw/~b93118/store.php]] |  | index.html | ./wiki/history |</description>
<link>http://www.tiddlywiki.com/#UploadLog</link>
<pubDate>Sun, 02 Apr 2006 08:53:33 GMT</pubDate>
</item>
<item>
<title>My Current Favourite Music</title>
<description>&lt;html&gt;&lt;br /&gt;&lt;object classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot;&lt;br /&gt;codebase=&quot;http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0&quot;&lt;br /&gt;width=&quot;400&quot; height=&quot;170&quot; &gt;&lt;br /&gt;        &lt;param name=&quot;allowScriptAccess&quot; value=&quot;sameDomain&quot;/&gt;&lt;br /&gt;        &lt;param name=&quot;movie&quot; value=&quot;http://www.csie.ntu.edu.tw/~b93118/music/xspf_player.swf?playlist_url=http://www.csie.ntu.edu.tw/~b93118/music/playlist.xspf&amp;autoload=true&amp;info_button_text=Artist Info&quot;/&gt;&lt;br /&gt;        &lt;param name=&quot;quality&quot; value=&quot;high&quot;/&gt;&lt;br /&gt;    &lt;embed src=&quot;http://www.csie.ntu.edu.tw/~b93118/music/xspf_player.swf?playlist_url=http://www.csie.ntu.edu.tw/~b93118/music/playlist.xspf&amp;autoload=true&amp;info_button_text=Artist Info&quot;&lt;br /&gt;    quality=&quot;high&quot; name=&quot;xspf_player&quot; allowscriptaccess=&quot;sameDomain&quot;&lt;br /&gt;    type=&quot;application/x-shockwave-flash&quot;&lt;br /&gt;    pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot;&lt;br /&gt;    align=&quot;center&quot; width=400&quot; height=&quot;170&quot;&gt; &lt;/embed&gt;&lt;br /&gt;&lt;/object&gt;&lt;br /&gt;&lt;/html&gt;</description>
<link>http://www.tiddlywiki.com/#%5B%5BMy%20Current%20Favourite%20Music%5D%5D</link>
<pubDate>Sun, 02 Apr 2006 08:53:25 GMT</pubDate>
</item>
<item>
<title>HowToUpload</title>
<description>To upload a TiddlyWiki on your web server :&lt;br /&gt;&lt;br /&gt;#Import all tiddlers tagged with Upload from http://TiddlyWiki.bidix.info/#Upload&lt;br /&gt;#Install UploadPlugin //as usual//&lt;br /&gt;#Configure and upload [[store.php]] on your webserver&lt;br /&gt;#set a {{{&lt;&lt;upload&gt;&gt;}}} button for example in your SideBarOptions&lt;br /&gt;#Set UploadOptions in conformity with [[store.php]]&lt;br /&gt;#click on &lt;&lt;upload&gt;&gt; button&lt;br /&gt; </description>
<category>Upload</category>
<category>Doc</category>
<category>HowTo</category>
<link>http://www.tiddlywiki.com/#HowToUpload</link>
<pubDate>Sun, 02 Apr 2006 08:44:44 GMT</pubDate>
</item>
<item>
<title>TiddlyWiki</title>
<description>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. I think that TiddlyWiki represents a novel medium for writing, and will promote its own distinctive WritingStyle.&lt;br /&gt;&lt;br /&gt;from [[Official Website|http://www.tiddlywiki.com]]&lt;br /&gt;&lt;br /&gt;!Main Features&lt;br /&gt;Out of the box, TiddlyWiki offers:&lt;br /&gt;* Browsable with the vast majority of modern desktop browsers on Windows, Macintosh and Linux and including the Nokia770&lt;br /&gt;* Ability to SaveChanges on FireFox under Windows or OS X, InternetExplorer under Windows and [[Safari]] and [[Camino]] under OS X&lt;br /&gt;* Rich formatting including MonospacedText, ExtendedFormatting, NonWikiWordLinks, WikiWordEscape, PrettyLinks, SubHeadings, BulletPoints, NumberedBulletPoints, [[Tables]], BlockQuotes, HorizontalRules and the ability to use a CustomCssClass.&lt;br /&gt;* Various InterfaceOptions, including the ability to GenerateAnRssFeed, SaveBackups and AutoSave&lt;br /&gt;* KeyboardShortcuts so you can finish editing a tiddler with Control-Enter or abandon it with Escape&lt;br /&gt;* InlineHTML&lt;br /&gt;* [img[brixhamharbour.jpg][EmbeddedImages]]...EmbeddedImages:&lt;br /&gt;* [[Macros]] providing rich interactive features, including [[Sparklines]] and [[Gradients||GradientMacro]]&lt;br /&gt;* a flexible OpenSourceLicense&lt;br /&gt;* a liquid CSS layout that can be customised with a CustomStyleSheet&lt;br /&gt;* Extensive StartupParameters to control the behaviour of TiddlyWiki through specially crafted URLs&lt;br /&gt;The [[Community]] around TiddlyWiki has extended this basic functionality with a wide range of [[Plugins]] and TiddlyWikiAdaptations.&lt;br /&gt;</description>
<category>Concepts</category>
<link>http://www.tiddlywiki.com/#TiddlyWiki</link>
<pubDate>Sun, 02 Apr 2006 08:19:00 GMT</pubDate>
</item>
<item>
<title>ArchivedTimeline</title>
<description>/***&lt;br /&gt;|''Name:''|ArchivedTimeline|&lt;br /&gt;|''Version:''|0.3.1 (Feb 04, 2006)|&lt;br /&gt;|''Source:''|https://sourceforge.net/projects/ptw/|&lt;br /&gt;|''Author:''|BramChen|&lt;br /&gt;|''Type:''|Macro|&lt;br /&gt;!Description&lt;br /&gt;Timeline archived monthly.&lt;br /&gt;!Syntax/Examples&lt;br /&gt;&gt;{{{&lt;&lt;timeline [modified | created]&gt;&gt;}}}&lt;br /&gt;&lt;br /&gt;!Known issues/Todos&lt;br /&gt;* &lt;br /&gt;&lt;br /&gt;!Instructions&lt;br /&gt;&lt;br /&gt;!Notes&lt;br /&gt;* &lt;br /&gt;&lt;br /&gt;!Revision history&lt;br /&gt;* v0.3.1 (04 Feb 2006)&lt;br /&gt;** JSLint checked&lt;br /&gt;* v0.3.0 (Feb 04, 2006)&lt;br /&gt;** Fixed several missing variable declarations&lt;br /&gt;* v0.2.0 (Dec 26, 2005)&lt;br /&gt;** changed for the new feature of Macro timeline of TW 2.0.0 beta 6&lt;br /&gt;* v0.1.0 (Nov 3, 2005)&lt;br /&gt;** Initial release.&lt;br /&gt;&lt;br /&gt;!Code&lt;br /&gt;***/&lt;br /&gt;//{{{&lt;br /&gt;version.extensions.archivedTimeline = {major: 0, minor: 3, revision: 1,&lt;br /&gt;	date: new Date(&quot;Feb 04, 2006&quot;),&lt;br /&gt;	name: &quot;ArchivedTimeline&quot;,&lt;br /&gt;	type: &quot;Macro&quot;,&lt;br /&gt;	author: &quot;BramChen&quot;,&lt;br /&gt;	source: &quot;http://sourceforge.net/project/showfiles.php?group_id=150646&quot;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;config.macros.archivedTimeline = {&lt;br /&gt;	tooltips: &quot;Archives sorted by &quot;,&lt;br /&gt;	msg : &quot;The param of macro timeline should be 'created' or 'modified'&quot;,&lt;br /&gt;	dateFormat: &quot;DD MMM, YYYY&quot;&lt;br /&gt;};&lt;br /&gt;config.macros.timeline = config.macros.archivedTimeline;&lt;br /&gt;&lt;br /&gt;config.macros.timeline.handler = function(place,macroName,params) {&lt;br /&gt;	var field = params[0] ? params[0] : &quot;modified&quot;;&lt;br /&gt;	if (field != &quot;modified&quot; &amp;&amp; field != &quot;created&quot;) {&lt;br /&gt;		displayMessage(config.macros.timeline.msg);&lt;br /&gt;		return;&lt;br /&gt;	}&lt;br /&gt;	place.appendChild(document.createTextNode(this.tooltips + field));&lt;br /&gt;	var tiddlers = store.reverseLookup(&quot;tags&quot;,&quot;excludeLists&quot;,false,field);&lt;br /&gt;	var lastMonth = &quot;&quot;; var lastDay = &quot;&quot;; var theText = &quot;----\n&quot;; var i = 0;&lt;br /&gt;	var cookie; var archives;&lt;br /&gt;	for (var t=tiddlers.length-1; t&gt;=0; t--) {&lt;br /&gt;		var tiddler = tiddlers[t];&lt;br /&gt;		var theField = (field == &quot;created&quot;) ? tiddler.created : tiddler.modified;&lt;br /&gt;		var theMonth = theField.convertToYYYYMMDDHHMM().substr(0,6);&lt;br /&gt;		var theDay = theField.convertToYYYYMMDDHHMM().substr(0,8);                            &lt;br /&gt;		if(theMonth != lastMonth) {&lt;br /&gt;			if (lastMonth === &quot;&quot;) {&lt;br /&gt;				lastMonth = theMonth;&lt;br /&gt;				}&lt;br /&gt;			else {&lt;br /&gt;				place.appendChild(document.createElement(&quot;hr&quot;));	&lt;br /&gt;				cookie = 'chktimeline'+(i++);&lt;br /&gt;				archives = this.formatString(this.dateFormat, lastMonth);&lt;br /&gt;				this.slider(place,cookie,theText,archives,this.tooltips + archives);	&lt;br /&gt;				lastMonth = theMonth; theText = &quot;----\n&quot;; &lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;		if(theDay != lastDay){&lt;br /&gt;			theText +=  theField.formatString(this.dateFormat) + '\n';&lt;br /&gt;			lastDay = theDay; &lt;br /&gt;		}&lt;br /&gt;		theText += '* [[' + tiddler.title + ']]\n';			&lt;br /&gt;	}&lt;br /&gt;	place.appendChild(document.createElement(&quot;hr&quot;));&lt;br /&gt;	cookie = 'chktimeline'+(i++);&lt;br /&gt;	archives = this.formatString(this.dateFormat, lastMonth);&lt;br /&gt;	this.slider(place,cookie,theText,archives,this.tooltips + archives);	&lt;br /&gt;	place.appendChild(document.createElement(&quot;hr&quot;));&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;config.macros.timeline.onClickSlider = config.macros.slider.onClickSlider;&lt;br /&gt;&lt;br /&gt;config.macros.timeline.slider = function(place,cookie,text,id,tooltips)&lt;br /&gt;{&lt;br /&gt;	var btn = createTiddlyButton(place,id,tooltips,this.onClickSlider);	&lt;br /&gt;	var panel = createTiddlyElement(place,&quot;div&quot;,null,&quot;timelineSliderPanel&quot;,null);&lt;br /&gt;		panel.setAttribute(&quot;cookie&quot;,cookie);&lt;br /&gt;		panel.style.display = config.options[cookie] ? &quot;block&quot; : &quot;none&quot;;&lt;br /&gt;	if(text){&lt;br /&gt;		wikify(text,panel);&lt;br /&gt;	}&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;config.macros.timeline.formatString = function(template, yyyymm)&lt;br /&gt;{&lt;br /&gt;	var dateString = new Date(yyyymm.substr(0,4)+'/'+yyyymm.substr(4,2)+'/01');&lt;br /&gt;	template = template.replace(/DDD|0DD|DD|hh|mm|ss/g,'');&lt;br /&gt;	return dateString.formatString(template);&lt;br /&gt;};&lt;br /&gt;//}}}</description>
<category>systemConfig</category>
<link>http://www.tiddlywiki.com/#ArchivedTimeline</link>
<pubDate>Sun, 02 Apr 2006 08:12:00 GMT</pubDate>
</item>
<item>
<title>Welcome</title>
<description>Welcome to my personal study notes wiki, TiddlyWiki style. Please feel free to look around, and if you're interested in joining me compiling notes, drop me a mail at b93118@csie.ntu.edu.tw, I'll open up the login clearance for you to do so, thank you.&lt;br /&gt;&lt;br /&gt;* Learn the basics of TiddlyWiki with this [[tutorial|http://www.blogjones.com/TiddlyWikiTutorial.html]]</description>
<link>http://www.tiddlywiki.com/#Welcome</link>
<pubDate>Sun, 02 Apr 2006 08:07:00 GMT</pubDate>
</item>
<item>
<title>AdvancedOptions</title>
<description>&lt;&lt;option chkGenerateAnRssFeed&gt;&gt; GenerateAnRssFeed&lt;br /&gt;&lt;&lt;option chkOpenInNewWindow&gt;&gt; OpenLinksInNewWindow&lt;br /&gt;&lt;&lt;option chkSaveEmptyTemplate&gt;&gt; SaveEmptyTemplate&lt;br /&gt;&lt;&lt;option chkToggleLinks&gt;&gt; Clicking on links to tiddlers that are already open causes them to close&lt;br /&gt;^^(override with Control or other modifier key)^^&lt;br /&gt;&lt;&lt;option chkHttpReadOnly&gt;&gt; HideEditingFeatures when viewed over HTTP&lt;br /&gt;&lt;&lt;option chkForceMinorUpdate&gt;&gt; Treat edits as MinorChanges by preserving date and time&lt;br /&gt;^^(override with Shift key when clicking 'done' or by pressing Ctrl-Shift-Enter^^&lt;br /&gt;&lt;&lt;option chkConfirmDelete&gt;&gt; ConfirmBeforeDeleting&lt;br /&gt;Maximum number of lines in a tiddler edit box: &lt;&lt;option txtMaxEditRows&gt;&gt;&lt;br /&gt;Folder name for backup files: &lt;&lt;option txtBackupFolder&gt;&gt;&lt;br /&gt;&lt;br /&gt;&lt;&lt;tiddler UploadOptions&gt;&gt;</description>
<link>http://www.tiddlywiki.com/#AdvancedOptions</link>
<pubDate>Sun, 02 Apr 2006 07:39:00 GMT</pubDate>
</item>
<item>
<title>UploadForm</title>
<description>This form is provided for uploading any file with the store.php script describe in UploadPlugin&lt;br /&gt;----&lt;br /&gt;&lt;html&gt;&lt;center&gt;&lt;br /&gt;&lt;form enctype=&quot;multipart/form-data&quot; action=&quot;http://www.csie.ntu.edu.tw/~b93118/wiki/store.php&quot; method=&quot;post&quot;&gt;&lt;br /&gt; &lt;input type=&quot;hidden&quot; name=&quot;MAX_FILE_SIZE&quot; value=&quot;3000000&quot; /&gt;&lt;br /&gt;This file : &lt;input name=&quot;userfile&quot; type=&quot;file&quot; /&gt;&lt;p&gt;&lt;br /&gt;Options* : &lt;input type=&quot;text&quot; name=&quot;UploadPlugin&quot; size=70 value=&quot;backupDir=backupDir;user=UPLOAD_USER;password=UPLOAD_PASSWORD;&quot; /&gt;&lt;p&gt;&lt;br /&gt; &lt;input type=&quot;submit&quot; value=&quot;Upload&quot; /&gt;&lt;br /&gt;&lt;/form&gt;&lt;/center&gt;&lt;br /&gt;&lt;/html&gt;&lt;br /&gt;----&lt;br /&gt; * Don't save your real username and password in any tiddler</description>
<category>Upload</category>
<category>tool</category>
<link>http://www.tiddlywiki.com/#UploadForm</link>
<pubDate>Sun, 02 Apr 2006 07:28:00 GMT</pubDate>
</item>
<item>
<title>UploadPlugin</title>
<description>/***&lt;br /&gt;&lt;&lt;tiddler UploadPluginDoc&gt;&gt;&lt;br /&gt;!Code&lt;br /&gt;***/&lt;br /&gt;//{{{&lt;br /&gt;version.extensions.UploadPlugin = {&lt;br /&gt;	major: 3, minor: 3, revision: 1, &lt;br /&gt;	date: new Date(2006,3,30),&lt;br /&gt;	type: 'macro',&lt;br /&gt;	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',&lt;br /&gt;	docs: 'http://tiddlywiki.bidix.info/#UploadPluginDoc'&lt;br /&gt;};&lt;br /&gt;//}}}&lt;br /&gt;&lt;br /&gt;////+++!![config.lib.file]&lt;br /&gt;&lt;br /&gt;//{{{&lt;br /&gt;if (!config.lib) config.lib = {};&lt;br /&gt;if (!config.lib.file) config.lib.file= {&lt;br /&gt;	author: 'BidiX',&lt;br /&gt;	version: {major: 0, minor: 1, revision: 0}, &lt;br /&gt;	date: new Date(2006,3,9)&lt;br /&gt;};&lt;br /&gt;config.lib.file.dirname = function (filePath) {&lt;br /&gt;	var lastpos;&lt;br /&gt;	if ((lastpos = filePath.lastIndexOf(&quot;/&quot;)) != -1) {&lt;br /&gt;		return filePath.substring(0, lastpos);&lt;br /&gt;	} else {&lt;br /&gt;		return filePath.substring(0, filePath.lastIndexOf(&quot;\\&quot;));&lt;br /&gt;	}&lt;br /&gt;};&lt;br /&gt;config.lib.file.basename = function (filePath) {&lt;br /&gt;	var lastpos;&lt;br /&gt;	if ((lastpos = filePath.lastIndexOf(&quot;#&quot;)) != -1) &lt;br /&gt;		filePath = filePath.substring(0, lastpos);&lt;br /&gt;	if ((lastpos = filePath.lastIndexOf(&quot;/&quot;)) != -1) {&lt;br /&gt;		return filePath.substring(lastpos + 1);&lt;br /&gt;	} else&lt;br /&gt;		return filePath.substring(filePath.lastIndexOf(&quot;\\&quot;)+1);&lt;br /&gt;};&lt;br /&gt;window.basename = function() {return &quot;@@deprecated@@&quot;;};&lt;br /&gt;//}}}&lt;br /&gt;////===&lt;br /&gt;&lt;br /&gt;////+++!![config.lib.log]&lt;br /&gt;&lt;br /&gt;//{{{&lt;br /&gt;if (!config.lib) config.lib = {};&lt;br /&gt;if (!config.lib.log) config.lib.log= {&lt;br /&gt;	author: 'BidiX',&lt;br /&gt;	version: {major: 0, minor: 1, revision: 0}, &lt;br /&gt;	date: new Date(2006,3,9)&lt;br /&gt;};&lt;br /&gt;config.lib.Log = function(tiddlerTitle, logHeader) {&lt;br /&gt;	if (version.major &lt; 2)&lt;br /&gt;		this.tiddler = store.tiddlers[tiddlerTitle];&lt;br /&gt;	else&lt;br /&gt;		this.tiddler = store.getTiddler(tiddlerTitle);&lt;br /&gt;	if (!this.tiddler) {&lt;br /&gt;		this.tiddler = new Tiddler();&lt;br /&gt;		this.tiddler.title = tiddlerTitle;&lt;br /&gt;		this.tiddler.text = &quot;| !date | !user | !location |&quot; + logHeader;&lt;br /&gt;		this.tiddler.created = new Date();&lt;br /&gt;		this.tiddler.modifier = config.options.txtUserName;&lt;br /&gt;		this.tiddler.modified = new Date();&lt;br /&gt;	if (version.major &lt; 2)&lt;br /&gt;		store.tiddlers[tiddlerTitle] = this.tiddler;&lt;br /&gt;	else&lt;br /&gt;		store.addTiddler(this.tiddler);&lt;br /&gt;	}&lt;br /&gt;	return this;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;config.lib.Log.prototype.newLine = function (line) {&lt;br /&gt;	var now = new Date();&lt;br /&gt;	var newText = &quot;| &quot;;&lt;br /&gt;	newText += now.getDate()+&quot;/&quot;+(now.getMonth()+1)+&quot;/&quot;+now.getFullYear() + &quot; &quot;;&lt;br /&gt;	newText += now.getHours()+&quot;:&quot;+now.getMinutes()+&quot;:&quot;+now.getSeconds()+&quot; | &quot;;&lt;br /&gt;	newText += config.options.txtUserName + &quot; | &quot;;&lt;br /&gt;	var location = document.location.toString();&lt;br /&gt;	var filename = config.lib.file.basename(location);&lt;br /&gt;	if (!filename) filename = '/';&lt;br /&gt;	newText += &quot;[[&quot;+filename+&quot;|&quot;+location + &quot;]] |&quot;;&lt;br /&gt;	this.tiddler.text = this.tiddler.text + &quot;\n&quot; + newText;&lt;br /&gt;	this.addToLine(line);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;config.lib.Log.prototype.addToLine = function (text) {&lt;br /&gt;	this.tiddler.text = this.tiddler.text + text;&lt;br /&gt;	this.tiddler.modifier = config.options.txtUserName;&lt;br /&gt;	this.tiddler.modified = new Date();&lt;br /&gt;	if (version.major &lt; 2)&lt;br /&gt;	store.tiddlers[this.tiddler.tittle] = this.tiddler;&lt;br /&gt;	else {&lt;br /&gt;		store.addTiddler(this.tiddler);&lt;br /&gt;		story.refreshTiddler(this.tiddler.title);&lt;br /&gt;		store.notify(this.tiddler.title, true);&lt;br /&gt;	}&lt;br /&gt;	if (version.major &lt; 2)&lt;br /&gt;		store.notifyAll(); &lt;br /&gt;};&lt;br /&gt;//}}}&lt;br /&gt;////===&lt;br /&gt;&lt;br /&gt;////+++!![config.lib.options]&lt;br /&gt;&lt;br /&gt;//{{{&lt;br /&gt;if (!config.lib) config.lib = {};&lt;br /&gt;if (!config.lib.options) config.lib.options = {&lt;br /&gt;	author: 'BidiX',&lt;br /&gt;	version: {major: 0, minor: 1, revision: 0}, &lt;br /&gt;	date: new Date(2006,3,9)&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;config.lib.options.init = function (name, defaultValue) {&lt;br /&gt;	if (!config.options[name]) {&lt;br /&gt;		config.options[name] = defaultValue;&lt;br /&gt;		saveOptionCookie(name);&lt;br /&gt;	}&lt;br /&gt;};&lt;br /&gt;//}}}&lt;br /&gt;////===&lt;br /&gt;&lt;br /&gt;////+++!![PasswordTweak]&lt;br /&gt;&lt;br /&gt;//{{{&lt;br /&gt;version.extensions.PasswordTweak = {&lt;br /&gt;	major: 1, minor: 0, revision: 2, date: new Date(2006,3,11),&lt;br /&gt;	type: 'tweak',&lt;br /&gt;	source: 'http://tiddlywiki.bidix.info/#PasswordTweak'&lt;br /&gt;};&lt;br /&gt;//}}}&lt;br /&gt;/***&lt;br /&gt;!!config.macros.option&lt;br /&gt;***/&lt;br /&gt;//{{{&lt;br /&gt;config.macros.option.passwordCheckboxLabel = &quot;Save this password on this computer&quot;;&lt;br /&gt;config.macros.option.passwordType = &quot;password&quot;; // password | text&lt;br /&gt;&lt;br /&gt;config.macros.option.onChangeOption = function(e)&lt;br /&gt;{&lt;br /&gt;	var opt = this.getAttribute(&quot;option&quot;);&lt;br /&gt;	var elementType,valueField;&lt;br /&gt;	if(opt) {&lt;br /&gt;		switch(opt.substr(0,3)) {&lt;br /&gt;			case &quot;txt&quot;:&lt;br /&gt;				elementType = &quot;input&quot;;&lt;br /&gt;				valueField = &quot;value&quot;;&lt;br /&gt;				break;&lt;br /&gt;			case &quot;pas&quot;:&lt;br /&gt;				elementType = &quot;input&quot;;&lt;br /&gt;				valueField = &quot;value&quot;;&lt;br /&gt;				break;&lt;br /&gt;			case &quot;chk&quot;:&lt;br /&gt;				elementType = &quot;input&quot;;&lt;br /&gt;				valueField = &quot;checked&quot;;&lt;br /&gt;				break;&lt;br /&gt;		}&lt;br /&gt;		config.options[opt] = this[valueField];&lt;br /&gt;		saveOptionCookie(opt);&lt;br /&gt;		var nodes = document.getElementsByTagName(elementType);&lt;br /&gt;		for(var t=0; t&lt;nodes.length; t++) {&lt;br /&gt;			var optNode = nodes[t].getAttribute(&quot;option&quot;);&lt;br /&gt;			if (opt == optNode) &lt;br /&gt;				nodes[t][valueField] = this[valueField];&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;	return(true);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;config.macros.option.handler = function(place,macroName,params)&lt;br /&gt;{&lt;br /&gt;    var opt = params[0];&lt;br /&gt;	var size = 15;&lt;br /&gt;	if (params[1])&lt;br /&gt;		size = params[1];&lt;br /&gt;    if(config.options[opt] === undefined) {&lt;br /&gt;        return;}&lt;br /&gt;    var c;&lt;br /&gt;    switch(opt.substr(0,3)) {&lt;br /&gt;		case &quot;txt&quot;:&lt;br /&gt;			c = document.createElement(&quot;input&quot;);&lt;br /&gt;			c.onkeyup = this.onChangeOption;&lt;br /&gt;			c.setAttribute (&quot;option&quot;,opt);&lt;br /&gt;			c.size = size;&lt;br /&gt;			c.value = config.options[opt];&lt;br /&gt;			place.appendChild(c);&lt;br /&gt;			break;&lt;br /&gt;		case &quot;pas&quot;:&lt;br /&gt;			// input password&lt;br /&gt;			c = document.createElement (&quot;input&quot;);&lt;br /&gt;			c.setAttribute(&quot;type&quot;,config.macros.option.passwordType);&lt;br /&gt;			c.onkeyup = this.onChangeOption;&lt;br /&gt;			c.setAttribute(&quot;option&quot;,opt);&lt;br /&gt;			c.size = size;&lt;br /&gt;			c.value = config.options[opt];&lt;br /&gt;			place.appendChild(c);&lt;br /&gt;			// checkbox link with this password &quot;save this password on this computer&quot;&lt;br /&gt;			c = document.createElement(&quot;input&quot;);&lt;br /&gt;			c.setAttribute(&quot;type&quot;,&quot;checkbox&quot;);&lt;br /&gt;			c.onclick = this.onChangeOption;&lt;br /&gt;			c.setAttribute(&quot;option&quot;,&quot;chk&quot;+opt);&lt;br /&gt;			place.appendChild(c);&lt;br /&gt;			c.checked = config.options[&quot;chk&quot;+opt];&lt;br /&gt;			// text savePasswordCheckboxLabel&lt;br /&gt;			place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));&lt;br /&gt;			break;&lt;br /&gt;		case &quot;chk&quot;:&lt;br /&gt;			c = document.createElement(&quot;input&quot;);&lt;br /&gt;			c.setAttribute(&quot;type&quot;,&quot;checkbox&quot;);&lt;br /&gt;			c.onclick = this.onChangeOption;&lt;br /&gt;			c.setAttribute(&quot;option&quot;,opt);&lt;br /&gt;			place.appendChild(c);&lt;br /&gt;			c.checked = config.options[opt];&lt;br /&gt;			break;&lt;br /&gt;	}&lt;br /&gt;};&lt;br /&gt;//}}}&lt;br /&gt;/***&lt;br /&gt;!! Option cookie stuff&lt;br /&gt;***/&lt;br /&gt;//{{{&lt;br /&gt;window.loadOptionsCookie_orig_PasswordTweak = window.loadOptionsCookie;&lt;br /&gt;window.loadOptionsCookie = function()&lt;br /&gt;{&lt;br /&gt;	var cookies = document.cookie.split(&quot;;&quot;);&lt;br /&gt;	for(var c=0; c&lt;cookies.length; c++) {&lt;br /&gt;		var p = cookies[c].indexOf(&quot;=&quot;);&lt;br /&gt;		if(p != -1) {&lt;br /&gt;			var name = cookies[c].substr(0,p).trim();&lt;br /&gt;			var value = cookies[c].substr(p+1).trim();&lt;br /&gt;			switch(name.substr(0,3)) {&lt;br /&gt;				case &quot;txt&quot;:&lt;br /&gt;					config.options[name] = unescape(value);&lt;br /&gt;					break;&lt;br /&gt;				case &quot;pas&quot;:&lt;br /&gt;					config.options[name] = unescape(value);&lt;br /&gt;					break;&lt;br /&gt;				case &quot;chk&quot;:&lt;br /&gt;					config.options[name] = value == &quot;true&quot;;&lt;br /&gt;					break;&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;window.saveOptionCookie_orig_PasswordTweak = window.saveOptionCookie;&lt;br /&gt;window.saveOptionCookie = function(name)&lt;br /&gt;{&lt;br /&gt;	var c = name + &quot;=&quot;;&lt;br /&gt;	switch(name.substr(0,3)) {&lt;br /&gt;		case &quot;txt&quot;:&lt;br /&gt;			c += escape(config.options[name].toString());&lt;br /&gt;			break;&lt;br /&gt;		case &quot;chk&quot;:&lt;br /&gt;			c += config.options[name] ? &quot;true&quot; : &quot;false&quot;;&lt;br /&gt;			// is there an option link with this chk ?&lt;br /&gt;			if (config.options[name.substr(3)]) {&lt;br /&gt;				saveOptionCookie(name.substr(3));&lt;br /&gt;			}&lt;br /&gt;			break;&lt;br /&gt;		case &quot;pas&quot;:&lt;br /&gt;			if (config.options[&quot;chk&quot;+name]) {&lt;br /&gt;				c += escape(config.options[name].toString());&lt;br /&gt;			} else {&lt;br /&gt;				c += &quot;&quot;;&lt;br /&gt;			}&lt;br /&gt;			break;&lt;br /&gt;	}&lt;br /&gt;	c += &quot;; expires=Fri, 1 Jan 2038 12:00:00 UTC; path=/&quot;;&lt;br /&gt;	document.cookie = c;&lt;br /&gt;};&lt;br /&gt;//}}}&lt;br /&gt;/***&lt;br /&gt;!! Initializations&lt;br /&gt;***/&lt;br /&gt;//{{{&lt;br /&gt;// define config.options.pasPassword&lt;br /&gt;if (!config.options.pasPassword) {&lt;br /&gt;	config.options.pasPassword = 'defaultPassword';&lt;br /&gt;	window.saveOptionCookie('pasPassword');&lt;br /&gt;}&lt;br /&gt;// since loadCookies is first called befor password definition&lt;br /&gt;// we need to reload cookies&lt;br /&gt;window.loadOptionsCookie();&lt;br /&gt;//}}}&lt;br /&gt;////===&lt;br /&gt;&lt;br /&gt;////+++!![config.macros.upload]&lt;br /&gt;&lt;br /&gt;//{{{&lt;br /&gt;config.macros.upload = {&lt;br /&gt;	accessKey: &quot;U&quot;,&lt;br /&gt;	formName: &quot;UploadPlugin&quot;,&lt;br /&gt;	contentType: &quot;text/html;charset=UTF-8&quot;,&lt;br /&gt;	defaultStoreScript: &quot;store.php&quot;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// only this two configs need to be translated&lt;br /&gt;config.macros.upload.messages = {&lt;br /&gt;	aboutToUpload: &quot;About to upload TiddlyWiki to %0&quot;,&lt;br /&gt;	errorDownloading: &quot;Error downloading&quot;,&lt;br /&gt;	errorUploadingContent: &quot;Error uploading content&quot;,&lt;br /&gt;	fileNotFound: &quot;file to upload not found&quot;,&lt;br /&gt;	fileNotUploaded: &quot;File %0 NOT uploaded&quot;,&lt;br /&gt;	mainFileUploaded: &quot;Main TiddlyWiki file uploaded to %0&quot;,&lt;br /&gt;	urlParamMissing: &quot;url param missing&quot;,&lt;br /&gt;	rssFileNotUploaded: &quot;RssFile %0 NOT uploaded&quot;,&lt;br /&gt;	rssFileUploaded: &quot;Rss File uploaded to %0&quot;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;config.macros.upload.label = {&lt;br /&gt;	promptOption: &quot;Save and Upload this TiddlyWiki with UploadOptions&quot;,&lt;br /&gt;	promptParamMacro: &quot;Save and Upload this TiddlyWiki in %0&quot;,&lt;br /&gt;	saveLabel: &quot;save to web&quot;, &lt;br /&gt;	saveToDisk: &quot;save to disk&quot;,&lt;br /&gt;	uploadLabel: &quot;upload&quot;	&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;config.macros.upload.handler = function(place,macroName,params){&lt;br /&gt;	// parameters initialization&lt;br /&gt;	var storeUrl = params[0];&lt;br /&gt;	var toFilename = params[1];&lt;br /&gt;	var backupDir = params[2];&lt;br /&gt;	var uploadDir = params[3];&lt;br /&gt;	var username = params[4];&lt;br /&gt;	var password; // for security reason no password as macro parameter&lt;br /&gt;	var label;&lt;br /&gt;	if (document.location.toString().substr(0,4) == &quot;http&quot;)&lt;br /&gt;		label = this.label.saveLabel;&lt;br /&gt;	else&lt;br /&gt;		label = this.label.uploadLabel;&lt;br /&gt;	var prompt;&lt;br /&gt;	if (storeUrl) {&lt;br /&gt;		prompt = this.label.promptParamMacro.toString().format([this.dirname(storeUrl)]);&lt;br /&gt;	}&lt;br /&gt;	else {&lt;br /&gt;		prompt = this.label.promptOption;&lt;br /&gt;	}&lt;br /&gt;	createTiddlyButton(place, label, prompt, &lt;br /&gt;						function () {&lt;br /&gt;							config.macros.upload.upload(storeUrl, toFilename, uploadDir, backupDir, username, password); &lt;br /&gt;							return false;}, &lt;br /&gt;						null, null, this.accessKey);&lt;br /&gt;};&lt;br /&gt;config.macros.upload.UploadLog = function() {&lt;br /&gt;	return new config.lib.Log('UploadLog', &quot; !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |&quot; );&lt;br /&gt;};&lt;br /&gt;config.macros.upload.UploadLog.prototype = config.lib.Log.prototype;&lt;br /&gt;config.macros.upload.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir,  backupDir) {&lt;br /&gt;	var line = &quot; [[&quot; + config.lib.file.basename(storeUrl) + &quot;|&quot; + storeUrl + &quot;]] | &quot;;&lt;br /&gt;	line += uploadDir + &quot; | &quot; + toFilename + &quot; | &quot; + backupDir + &quot; |&quot;;&lt;br /&gt;	this.newLine(line);&lt;br /&gt;};&lt;br /&gt;config.macros.upload.UploadLog.prototype.endUpload = function() {&lt;br /&gt;	this.addToLine(&quot; Ok |&quot;);&lt;br /&gt;};&lt;br /&gt;config.macros.upload.basename = config.lib.file.basename;&lt;br /&gt;config.macros.upload.dirname = config.lib.file.dirname;&lt;br /&gt;config.macros.upload.upload = function(storeUrl, toFilename, uploadDir, backupDir, username, password)&lt;br /&gt;{&lt;br /&gt;	// parameters initialization&lt;br /&gt;	storeUrl = (storeUrl ? storeUrl : config.options.txtUploadStoreUrl);&lt;br /&gt;	toFilename = (toFilename ? toFilename : config.options.txtUploadFilename);&lt;br /&gt;	if (toFilename === '') {&lt;br /&gt;			toFilename = config.lib.file.basename(document.location.toString());&lt;br /&gt;	}&lt;br /&gt;	backupDir = (backupDir ? backupDir : config.options.txtUploadBackupDir);&lt;br /&gt;	uploadDir = (uploadDir ? uploadDir : config.options.txtUploadDir);&lt;br /&gt;	username = (username ? username : config.options.txtUploadUserName);&lt;br /&gt;	password = config.options.pasUploadPassword; // for security reason no password as macro parameter&lt;br /&gt;&lt;br /&gt;	clearMessage();&lt;br /&gt;	// only for forcing the message to display&lt;br /&gt;	 if (version.major &lt; 2)&lt;br /&gt;		store.notifyAll();&lt;br /&gt;	if (!storeUrl) {&lt;br /&gt;		alert(config.macros.upload.messages.urlParamMissing);&lt;br /&gt;		return;&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	var log = new this.UploadLog();&lt;br /&gt;	log.startUpload(storeUrl, toFilename, uploadDir,  backupDir);&lt;br /&gt;	if (document.location.toString().substr(0,5) == &quot;file:&quot;) {&lt;br /&gt;		saveChanges();&lt;br /&gt;	}&lt;br /&gt;	displayMessage(config.macros.upload.messages.aboutToUpload.format([this.dirname(storeUrl)]), this.dirname(storeUrl));&lt;br /&gt;	this.uploadChanges(storeUrl, toFilename, uploadDir, backupDir, username, password);&lt;br /&gt;	if(config.options.chkGenerateAnRssFeed) {&lt;br /&gt;		//var rssContent = convertUnicodeToUTF8(generateRss());&lt;br /&gt;		var rssContent = generateRss();&lt;br /&gt;		var rssPath = toFilename.substr(0,toFilename.lastIndexOf(&quot;.&quot;)) + &quot;.xml&quot;;&lt;br /&gt;		this.uploadContent(rssContent, storeUrl, rssPath, uploadDir, '', username, password, &lt;br /&gt;			function (responseText) {&lt;br /&gt;				if (responseText.substring(0,1) != '0') {&lt;br /&gt;					displayMessage(config.macros.upload.messages.rssFileNotUploaded.format([rssPath]));&lt;br /&gt;				}&lt;br /&gt;				else {&lt;br /&gt;					if (uploadDir) {&lt;br /&gt;						rssPath = uploadDir + &quot;/&quot; + config.macros.upload.basename(rssPath);&lt;br /&gt;					} else {&lt;br /&gt;						rssPath = config.macros.upload.basename(rssPath);&lt;br /&gt;					}&lt;br /&gt;					displayMessage(config.macros.upload.messages.rssFileUploaded.format(&lt;br /&gt;						[config.macros.upload.dirname(storeUrl)+&quot;/&quot;+rssPath]), config.macros.upload.dirname(storeUrl)+&quot;/&quot;+rssPath);&lt;br /&gt;				}&lt;br /&gt;				// for debugging store.php uncomment last line&lt;br /&gt;				//DEBUG alert(responseText);&lt;br /&gt;			});&lt;br /&gt;	}&lt;br /&gt;	return;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;config.macros.upload.uploadChanges = function(storeUrl, toFilename, uploadDir, backupDir, &lt;br /&gt;		username, password) {&lt;br /&gt;	var original;&lt;br /&gt;	if (document.location.toString().substr(0,4) == &quot;http&quot;) {&lt;br /&gt;		original =  this.download(storeUrl, toFilename, uploadDir, backupDir, username, password);&lt;br /&gt;		return;&lt;br /&gt;	}&lt;br /&gt;	else {&lt;br /&gt;		// standard way : Local file&lt;br /&gt;		&lt;br /&gt;		original = loadFile(getLocalPath(document.location.toString()));&lt;br /&gt;		if(window.Components) {&lt;br /&gt;			// it's a mozilla browser&lt;br /&gt;			try {&lt;br /&gt;				netscape.security.PrivilegeManager.enablePrivilege(&quot;UniversalXPConnect&quot;);&lt;br /&gt;				var converter = Components.classes[&quot;@mozilla.org/intl/scriptableunicodeconverter&quot;]&lt;br /&gt;									.createInstance(Components.interfaces.nsIScriptableUnicodeConverter);&lt;br /&gt;				converter.charset = &quot;UTF-8&quot;;&lt;br /&gt;				original = converter.ConvertToUnicode(original);&lt;br /&gt;			}&lt;br /&gt;			catch(e) {&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;	//DEBUG alert(original);&lt;br /&gt;	this.uploadChangesFrom(original, storeUrl, toFilename, uploadDir, backupDir, &lt;br /&gt;		username, password);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;config.macros.upload.uploadChangesFrom = function(original, storeUrl, toFilename, uploadDir, backupDir, &lt;br /&gt;		username, password) {&lt;br /&gt;	var startSaveArea = '&lt;div id=&quot;' + 'storeArea&quot;&gt;'; // Split up into two so that indexOf() of this source doesn't find it&lt;br /&gt;	var endSaveArea = '&lt;/d' + 'iv&gt;';&lt;br /&gt;	// Locate the storeArea div's&lt;br /&gt;	var posOpeningDiv = original.indexOf(startSaveArea);&lt;br /&gt;	var posClosingDiv = original.lastIndexOf(endSaveArea);&lt;br /&gt;	if((posOpeningDiv == -1) || (posClosingDiv == -1))&lt;br /&gt;		{&lt;br /&gt;		alert(config.messages.invalidFileError.format([document.location.toString()]));&lt;br /&gt;		return;&lt;br /&gt;		}&lt;br /&gt;	var revised = original.substr(0,posOpeningDiv + startSaveArea.length) + &lt;br /&gt;				allTiddlersAsHtml() + &quot;\n\t\t&quot; +&lt;br /&gt;				original.substr(posClosingDiv);&lt;br /&gt;	var newSiteTitle;&lt;br /&gt;	if(version.major &lt; 2){&lt;br /&gt;		newSiteTitle = (getElementText(&quot;siteTitle&quot;) + &quot; - &quot; + getElementText(&quot;siteSubtitle&quot;)).htmlEncode();&lt;br /&gt;	} else {&lt;br /&gt;		newSiteTitle = (wikifyPlain (&quot;SiteTitle&quot;) + &quot; - &quot; + wikifyPlain (&quot;SiteSubtitle&quot;)).htmlEncode();&lt;br /&gt;	}&lt;br /&gt;	revised = revised.replace(new RegExp(&quot;&lt;title&gt;[^&lt;]*&lt;/title&gt;&quot;, &quot;im&quot;),&quot;&lt;title&gt;&quot;+ newSiteTitle +&quot;&lt;/title&gt;&quot;);&lt;br /&gt;	var response = this.uploadContent(revised, storeUrl, toFilename, uploadDir, backupDir, &lt;br /&gt;		username, password, function (responseText) {&lt;br /&gt;					if (responseText.substring(0,1) != '0') {&lt;br /&gt;						alert(responseText);&lt;br /&gt;						displayMessage(config.macros.upload.messages.fileNotUploaded.format([getLocalPath(document.location.toString())]));&lt;br /&gt;					}&lt;br /&gt;					else {&lt;br /&gt;						if (uploadDir !== '') {&lt;br /&gt;							toFilename = uploadDir + &quot;/&quot; + config.macros.upload.basename(toFilename);&lt;br /&gt;						} else {&lt;br /&gt;							toFilename = config.macros.upload.basename(toFilename);&lt;br /&gt;						}&lt;br /&gt;						displayMessage(config.macros.upload.messages.mainFileUploaded.format(&lt;br /&gt;							[config.macros.upload.dirname(storeUrl)+&quot;/&quot;+toFilename]), config.macros.upload.dirname(storeUrl)+&quot;/&quot;+toFilename);&lt;br /&gt;						var log = new config.macros.upload.UploadLog();&lt;br /&gt;						log.endUpload();&lt;br /&gt;						store.setDirty(false);&lt;br /&gt;					}&lt;br /&gt;					// for debugging store.php uncomment last line&lt;br /&gt;					//DEBUG alert(responseText);&lt;br /&gt;				}&lt;br /&gt;			);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;config.macros.upload.uploadContent = function(content, storeUrl, toFilename, uploadDir, backupDir, &lt;br /&gt;		username, password, callbackFn) {&lt;br /&gt;	var boundary = &quot;---------------------------&quot;+&quot;AaB03x&quot;;		&lt;br /&gt;	var request;&lt;br /&gt;	try {&lt;br /&gt;		request = new XMLHttpRequest();&lt;br /&gt;		} &lt;br /&gt;	catch (e) { &lt;br /&gt;		request = new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;); &lt;br /&gt;		}&lt;br /&gt;	if (window.netscape){&lt;br /&gt;			try {&lt;br /&gt;				if (document.location.toString().substr(0,4) != &quot;http&quot;) {&lt;br /&gt;					netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');}&lt;br /&gt;			}&lt;br /&gt;			catch (e) { }&lt;br /&gt;		}		&lt;br /&gt;	//DEBUG alert(&quot;user[&quot;+config.options.txtUploadUserName+&quot;] password[&quot; + config.options.pasUploadPassword + &quot;]&quot;);&lt;br /&gt;	// compose headers data&lt;br /&gt;	var sheader = &quot;\r\n&quot;;&lt;br /&gt;	sheader += &quot;--&quot; + boundary + &quot;\r\nContent-disposition: form-data;name=\&quot;&quot;;&lt;br /&gt;	sheader += config.macros.upload.formName +&quot;\&quot;\r\n\r\n&quot;;&lt;br /&gt;	sheader += &quot;backupDir=&quot;+backupDir&lt;br /&gt;				+&quot;;user=&quot; + username &lt;br /&gt;				+&quot;;password=&quot; + password&lt;br /&gt;				+&quot;;uploaddir=&quot; + uploadDir&lt;br /&gt;				+ &quot;;;\r\n&quot;; &lt;br /&gt;	sheader += &quot;\r\n&quot; + &quot;--&quot; + boundary + &quot;\r\n&quot;;&lt;br /&gt;	sheader += &quot;Content-disposition: form-data;name=\&quot;userfile\&quot;;filename=\&quot;&quot;+toFilename+&quot;\&quot;\r\n&quot;;&lt;br /&gt;	sheader += &quot;Content-Type: &quot; + config.macros.upload.contentType + &quot;\r\n&quot;;&lt;br /&gt;	sheader += &quot;Content-Length: &quot; + content.length + &quot;\r\n\r\n&quot;;&lt;br /&gt;	// compose trailer data&lt;br /&gt;	var strailer = new String();&lt;br /&gt;	strailer = &quot;\r\n--&quot; + boundary + &quot;--\r\n&quot;;&lt;br /&gt;	var data;&lt;br /&gt;	data = sheader + content + strailer;&lt;br /&gt;	//request.open(&quot;POST&quot;, storeUrl, true, username, password);&lt;br /&gt;	request.open(&quot;POST&quot;, storeUrl, true);&lt;br /&gt;	request.onreadystatechange = function () {&lt;br /&gt;				if (request.readyState == 4) {&lt;br /&gt;				     if (request.status == 200)&lt;br /&gt;						callbackFn(request.responseText);&lt;br /&gt;					else&lt;br /&gt;						alert(config.macros.upload.messages.errorUploadingContent);&lt;br /&gt;				}&lt;br /&gt;		};&lt;br /&gt;	request.setRequestHeader(&quot;Content-Length&quot;,data.length);&lt;br /&gt;	request.setRequestHeader(&quot;Content-Type&quot;,&quot;multipart/form-data; boundary=&quot;+boundary);&lt;br /&gt;	request.send(data); &lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;config.macros.upload.download = function(uploadUrl, uploadToFilename, uploadDir, uploadBackupDir, &lt;br /&gt;	username, password) {&lt;br /&gt;	var request;&lt;br /&gt;	try {&lt;br /&gt;		request = new XMLHttpRequest();&lt;br /&gt;	} &lt;br /&gt;	catch (e) { &lt;br /&gt;		request = new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;); &lt;br /&gt;	}&lt;br /&gt;	try {&lt;br /&gt;		if (uploadUrl.substr(0,4) == &quot;http&quot;) {&lt;br /&gt;			netscape.security.PrivilegeManager.enablePrivilege(&quot;UniversalBrowserRead&quot;);&lt;br /&gt;			}&lt;br /&gt;		else {&lt;br /&gt;			netscape.security.PrivilegeManager.enablePrivilege(&quot;UniversalXPConnect&quot;);&lt;br /&gt;		}&lt;br /&gt;	} catch (e) { }&lt;br /&gt;	//request.open(&quot;GET&quot;, document.location.toString(), true, username, password);&lt;br /&gt;	request.open(&quot;GET&quot;, document.location.toString(), true);&lt;br /&gt;	request.onreadystatechange = function () {&lt;br /&gt;		if (request.readyState == 4) {&lt;br /&gt;			if(request.status == 200) {&lt;br /&gt;				config.macros.upload.uploadChangesFrom(request.responseText, uploadUrl, &lt;br /&gt;					uploadToFilename, uploadDir, uploadBackupDir, username, password);&lt;br /&gt;			}&lt;br /&gt;			else&lt;br /&gt;				alert(config.macros.upload.messages.errorDownloading.format(&lt;br /&gt;					[document.location.toString()]));&lt;br /&gt;		}&lt;br /&gt;	};&lt;br /&gt;	request.send(null);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;//}}}&lt;br /&gt;////===&lt;br /&gt;&lt;br /&gt;////+++!![Initializations]&lt;br /&gt;&lt;br /&gt;//{{{&lt;br /&gt;config.lib.options.init('txtUploadStoreUrl','store.php');&lt;br /&gt;config.lib.options.init('txtUploadFilename','');&lt;br /&gt;config.lib.options.init('txtUploadDir','');&lt;br /&gt;config.lib.options.init('txtUploadBackupDir','');&lt;br /&gt;config.lib.options.init('txtUploadUserName',config.options.txtUserName);&lt;br /&gt;config.lib.options.init('pasUploadPassword','');&lt;br /&gt;config.shadowTiddlers.UploadPluginDoc = &quot;[[Full Documentation|http://tiddlywiki.bidix.info/l#UploadPluginDoc ]]\n&quot;; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//}}}&lt;br /&gt;////===&lt;br /&gt;&lt;br /&gt;////+++!![Core Hijacking]&lt;br /&gt;&lt;br /&gt;//{{{&lt;br /&gt;config.macros.saveChanges.label_orig_UploadPlugin = config.macros.saveChanges.label;&lt;br /&gt;config.macros.saveChanges.label = config.macros.upload.label.saveToDisk;&lt;br /&gt;//}}}&lt;br /&gt;////===</description>
<category>systemConfig</category>
<category>Upload</category>
<link>http://www.tiddlywiki.com/#UploadPlugin</link>
<pubDate>Sun, 02 Apr 2006 07:19:00 GMT</pubDate>
</item>
<item>
<title>Upload</title>
<description>Get all this tiddler simply using EricShulman's ImportTiddlersPlugin and selecting all tiddlers tagged [[Upload]].&lt;br /&gt;&lt;br /&gt;[[Upload]] is &lt;&lt;tagging Upload&gt;&gt;</description>
<category>hideTagged</category>
<category>Upload</category>
<link>http://www.tiddlywiki.com/#Upload</link>
<pubDate>Sun, 02 Apr 2006 07:14:00 GMT</pubDate>
</item>
<item>
<title>UploadOptions</title>
<description>!Options used by UploadPlugin&lt;br /&gt;Username: &lt;&lt;option txtUploadUserName&gt;&gt;&lt;br /&gt;Password: &lt;&lt;option pasUploadPassword&gt;&gt;&lt;br /&gt;&lt;br /&gt;Url of the [[store.php]] script^^(1)^^: &lt;&lt;option txtUploadStoreUrl 50&gt;&gt;&lt;br /&gt;Relative Directory to store the file^^(2)^^: &lt;&lt;option txtUploadDir 50&gt;&gt;&lt;br /&gt;Filename of the uploaded file^^(3)^^: &lt;&lt;option txtUploadFilename 40&gt;&gt;&lt;br /&gt;Directory to backup file on webserver^^(4)^^: &lt;&lt;option txtUploadBackupDir&gt;&gt;&lt;br /&gt;&lt;br /&gt;^^(1)^^Mandatory either in UploadOptions or in MacroParameter&lt;br /&gt;^^(2)^^If empty stores in the [[store.php]] directory&lt;br /&gt;^^(3)^^If empty takes the actual filename&lt;br /&gt;^^(4)^^If empty existing the file with same name on webserver will be overwriten&lt;br /&gt;&lt;br /&gt;!Upload&lt;br /&gt;{{{&lt;&lt;upload [[UploadStoreUrl]}}}^^(1)^^{{{ [UploadFilename] [UploadBackupDir]]&gt;&gt;}}}&lt;br /&gt;&lt;br /&gt;&lt;&lt;upload&gt;&gt;</description>
<category>Upload</category>
<category>tool</category>
<link>http://www.tiddlywiki.com/#UploadOptions</link>
<pubDate>Sun, 02 Apr 2006 07:12:00 GMT</pubDate>
</item>
<item>
<title>SideBarOptions</title>
<description>&lt;&lt;search&gt;&gt;&lt;&lt;closeAll&gt;&gt;&lt;&lt;permaview&gt;&gt;&lt;&lt;newTiddler&gt;&gt;&lt;&lt;newJournal 'DD MMM YYYY'&gt;&gt;&lt;&lt;saveChanges&gt;&gt;&lt;&lt;upload&gt;&gt;&lt;&lt;slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'&gt;&gt;</description>
<link>http://www.tiddlywiki.com/#SideBarOptions</link>
<pubDate>Sun, 02 Apr 2006 07:12:00 GMT</pubDate>
</item>
<item>
<title>GettingStarted</title>
<description>Welcome to your brand new [[MonkeyPirateTiddlyWiki|http://simonbaird.com/mptw/]]. This is the standard empty [[TiddlyWiki|http://www.tiddlywiki.com/]] (version &lt;&lt;version&gt;&gt;) preconfigured with a few bits and pieces from MPTW, in particular the layout, the colours, and the popular [[TagglyTagging|http://simonbaird.com/mptw/#TagglyTagging]]. If you're new to ~TagglyTagging then try the (slightly out-of-date) [[FAQ|http://simonbaird.com/mptw1/#TagglyTaggingFAQ]] and [[Tutorial|http://simonbaird.com/mptw1/#TagglyTaggingTutorial]].&lt;br /&gt;&lt;br /&gt;To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:&lt;br /&gt;* SiteTitle &amp; SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)&lt;br /&gt;* MainMenu: The menu (usually on the left)&lt;br /&gt;* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened&lt;br /&gt;You'll also need to enter your username for signing your edits: &lt;&lt;option txtUserName&gt;&gt;&lt;br /&gt;&lt;br /&gt;To create your own tiddlers, click 'new tiddler' in the right sidebar. To edit a tiddler click the 'edit' button in the tiddler's toolbar. To save all your tiddlers click 'save changes' in the right sidebar. If you're new to TiddlyWiki check out the formatting info [[here|http://www.tiddlywiki.com/#MainFeatures]].&lt;br /&gt;&lt;br /&gt;Use this to import tiddlers from another TiddlyWiki. You can use a local file (click Browse...) or type the url of an online TiddlyWiki.&lt;br /&gt;&lt;&lt;importTiddlers inline&gt;&gt;&lt;br /&gt;To change your colour scheme you can edit the styles in StyleSheet. (Refer to StyleSheetColors and StyleSheetLayout for all styles used).&lt;br /&gt;&lt;br /&gt;</description>
<link>http://www.tiddlywiki.com/#GettingStarted</link>
<pubDate>Sun, 02 Apr 2006 07:06:00 GMT</pubDate>
</item>
<item>
<title>DefaultTiddlers</title>
<description>[[Welcome]]</description>
<link>http://www.tiddlywiki.com/#DefaultTiddlers</link>
<pubDate>Sun, 02 Apr 2006 07:05:00 GMT</pubDate>
</item>
<item>
<title>MainMenu</title>
<description>[[Welcome]]</description>
<link>http://www.tiddlywiki.com/#MainMenu</link>
<pubDate>Sun, 02 Apr 2006 07:01:00 GMT</pubDate>
</item>
<item>
<title>SiteSubtitle</title>
<description>a reusable non-linear personal web notebook for study notes</description>
<link>http://www.tiddlywiki.com/#SiteSubtitle</link>
<pubDate>Sun, 02 Apr 2006 07:00:00 GMT</pubDate>
</item>
<item>
<title>SiteTitle</title>
<description>andycjw's wiki</description>
<link>http://www.tiddlywiki.com/#SiteTitle</link>
<pubDate>Sun, 02 Apr 2006 06:30:00 GMT</pubDate>
</item>
<item>
<title>ImportedTiddlers</title>
<description>On Sunday, April 02, 2006 2:29:29 PM, AndyChong imported tiddlers from&lt;br /&gt;[[http://tiddlywiki.bidix.info/#HowToUpload|http://tiddlywiki.bidix.info/#HowToUpload]]:&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;Out of 201 tiddlers  in {{{http://tiddlywiki.bidix.info/#HowToUpload}}}:&lt;br /&gt;9 new tiddlers were added to your document.&lt;br /&gt;192 tiddlers were not imported.&lt;br /&gt;#[[HowToUpload]]&lt;br /&gt;#[[Upload]]&lt;br /&gt;#[[UploadForm]]&lt;br /&gt;#[[UploadOptions]]&lt;br /&gt;#[[UploadPlugin]]&lt;br /&gt;#[[UploadPluginDoc]]&lt;br /&gt;#[[UploadPluginMsgFR]]&lt;br /&gt;#[[UploadToFileMacro]]&lt;br /&gt;#[[store.php]]&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;&lt;html&gt;&lt;input type=&quot;button&quot; href=&quot;javascript:;&quot; onclick=&quot;story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');&quot; value=&quot;discard report&quot;&gt;&lt;/html&gt;&lt;br /&gt;----&lt;br /&gt;On Sunday, April 02, 2006 2:26:52 PM, AndyChong imported tiddlers from&lt;br /&gt;[[C:\Documents and Settings\Andy Chong\Desktop\wiki\empty.html|C:\Documents and Settings\Andy Chong\Desktop\wiki\empty.html]]:&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;Out of 19 tiddlers  in {{{C:/Documents and Settings/Andy Chong/Desktop/wiki/empty.html}}}:&lt;br /&gt;1 new tiddler was added to your document.&lt;br /&gt;18 tiddlers were not imported.&lt;br /&gt;#[[InlineJavascriptPlugin]]&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;&lt;html&gt;&lt;input type=&quot;button&quot; href=&quot;javascript:;&quot; onclick=&quot;story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');&quot; value=&quot;discard report&quot;&gt;&lt;/html&gt;</description>
<link>http://www.tiddlywiki.com/#ImportedTiddlers</link>
<pubDate>Sun, 02 Apr 2006 06:29:00 GMT</pubDate>
</item>
<item>
<title>InlineJavascriptPlugin</title>
<description>/***&lt;br /&gt;''InlineJavascriptPlugin for ~TiddlyWiki version 1.2.x and 2.0''&lt;br /&gt;^^author: Eric Shulman - ELS Design Studios&lt;br /&gt;source: http://www.TiddlyTools.com/#InlineJavascriptPlugin&lt;br /&gt;license: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^&lt;br /&gt;&lt;br /&gt;Insert Javascript executable code directly into your tiddler content. Lets you ''call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.&lt;br /&gt;!!!!!Usage&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;When installed, this plugin adds new wiki syntax for surrounding tiddler content with {{{&lt;script&gt;}}} and {{{&lt;/script&gt;}}} markers, so that it can be treated as embedded javascript and executed each time the tiddler is rendered.&lt;br /&gt;&lt;br /&gt;''Deferred execution from an 'onClick' link''&lt;br /&gt;By including a label=&quot;...&quot; parameter in the initial {{{&lt;script&gt;}}} marker, the plugin will create a link to an 'onclick' script that will only be executed when that specific link is clicked, rather than running the script each time the tiddler is rendered.&lt;br /&gt;&lt;br /&gt;''External script source files:''&lt;br /&gt;You can also load javascript from an external source URL, by including a src=&quot;...&quot; parameter in the initial {{{&lt;script&gt;}}} marker (e.g., {{{&lt;script src=&quot;demo.js&quot;&gt;&lt;/script&gt;}}}). This is particularly useful when incorporating third-party javascript libraries for use in custom extensions and plugins. The 'foreign' javascript code remains isolated in a separate file that can be easily replaced whenever an updated library file becomes available.&lt;br /&gt;&lt;br /&gt;''Defining javascript functions and libraries:''&lt;br /&gt;Although the external javascript file is loaded while the tiddler content is being rendered, any functions it defines will not be available for use until //after// the rendering has been completed. Thus, you cannot load a library and //immediately// use it's functions within the same tiddler. However, once that tiddler has been loaded, the library functions can be freely used in any tiddler (even the one in which it was initially loaded).&lt;br /&gt;&lt;br /&gt;To ensure that your javascript functions are always available when needed, you should load the libraries from a tiddler that will be rendered as soon as your TiddlyWiki document is opened. For example, you could put your {{{&lt;script src=&quot;...&quot;&gt;&lt;/script&gt;}}} syntax into a tiddler called LoadScripts, and then add {{{&lt;&lt;tiddler LoadScripts&gt;&gt;}}} in your MainMenu tiddler.&lt;br /&gt;&lt;br /&gt;Since the MainMenu is always rendered immediately upon opening your document, the library will always be loaded before any other tiddlers that rely upon the functions it defines. Loading an external javascript library does not produce any direct output in the tiddler, so these definitions should have no impact on the appearance of your MainMenu.&lt;br /&gt;&lt;br /&gt;''Creating dynamic tiddler content''&lt;br /&gt;An important difference between this implementation of embedded scripting and conventional embedded javascript techniques for web pages is the method used to produce output that is dynamically inserted into the document:&lt;br /&gt;* In a typical web document, you use the document.write() function to output text sequences (often containing HTML tags) that are then rendered when the entire document is first loaded into the browser window.&lt;br /&gt;* However, in a ~TiddlyWiki document, tiddlers (and other DOM elements) are created, deleted, and rendered &quot;on-the-fly&quot;, so writing directly to the global 'document' object does not produce the results you want (i.e., replacing the embedded script within the tiddler content), and completely replaces the entire ~TiddlyWiki document in your browser window.&lt;br /&gt;* To allow these scripts to work unmodified, the plugin automatically converts all occurences of document.write() so that the output is inserted into the tiddler content instead of replacing the entire ~TiddlyWiki document.&lt;br /&gt;&lt;br /&gt;If your script does not use document.write() to create dynamically embedded content within a tiddler, your javascript can, as an alternative, explicitly return a text value that the plugin can then pass through the wikify() rendering engine to insert into the tiddler display. For example, using {{{return &quot;thistext&quot;}}} will produce the same output as {{{document.write(&quot;thistext&quot;)}}}.&lt;br /&gt;&lt;br /&gt;//Note: your script code is automatically 'wrapped' inside a function, {{{_out()}}}, so that any return value you provide can be correctly handled by the plugin and inserted into the tiddler. To avoid unpredictable results (and possibly fatal execution errors), this function should never be redefined or called from ''within'' your script code.//&lt;br /&gt;&lt;br /&gt;''Accessing the ~TiddlyWiki DOM''&lt;br /&gt;The plugin provides one pre-defined variable, 'place', that is passed in to your javascript code so that it can have direct access to the containing DOM element into which the tiddler output is currently being rendered.&lt;br /&gt;&lt;br /&gt;Access to this DOM element allows you to create scripts that can:&lt;br /&gt;* vary their actions based upon the specific location in which they are embedded&lt;br /&gt;* access 'tiddler-relative' information (use findContainingTiddler(place))&lt;br /&gt;* perform direct DOM manipulations (when returning wikified text is not enough)&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;!!!!!Examples&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;an &quot;alert&quot; message box:&lt;br /&gt;{{{&lt;br /&gt;&lt;script&gt;alert('InlineJavascriptPlugin: this is a demonstration message');&lt;/script&gt;&lt;br /&gt;}}}&lt;br /&gt;&lt;script&gt;alert('InlineJavascriptPlugin: this is a demonstration message');&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;dynamic output:&lt;br /&gt;{{{&lt;br /&gt;&lt;script&gt;return (new Date()).toString();&lt;/script&gt;&lt;br /&gt;}}}&lt;br /&gt;&lt;script&gt;return (new Date()).toString();&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;wikified dynamic output:&lt;br /&gt;{{{&lt;br /&gt;&lt;script&gt;return &quot;link to current user: [[&quot;+config.options.txtUserName+&quot;]]&quot;;&lt;/script&gt;&lt;br /&gt;}}}&lt;br /&gt;&lt;script&gt;return &quot;link to current user: [[&quot;+config.options.txtUserName+&quot;]]&quot;;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;dynamic output using 'place' to get size information for current tiddler&lt;br /&gt;{{{&lt;br /&gt;&lt;script&gt;&lt;br /&gt; if (!window.story) window.story=window;&lt;br /&gt; var title=story.findContainingTiddler(place).id.substr(7);&lt;br /&gt; return title+&quot; is using &quot;+store.getTiddlerText(title).length+&quot; bytes&quot;;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;}}}&lt;br /&gt;&lt;script&gt;&lt;br /&gt; if (!window.story) window.story=window;&lt;br /&gt; var title=story.findContainingTiddler(place).id.substr(7);&lt;br /&gt; return title+&quot; is using &quot;+store.getTiddlerText(title).length+&quot; bytes&quot;;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;creating an 'onclick' button/link that runs a script&lt;br /&gt;{{{&lt;br /&gt;&lt;script label=&quot;click here&quot;&gt;&lt;br /&gt; if (!window.story) window.story=window;&lt;br /&gt; alert(&quot;Hello World!\nlinktext='&quot;+place.firstChild.data+&quot;'\ntiddler='&quot;+story.findContainingTiddler(place).id.substr(7)+&quot;'&quot;);&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;}}}&lt;br /&gt;&lt;script label=&quot;click here&quot;&gt;&lt;br /&gt; if (!window.story) window.story=window;&lt;br /&gt; alert(&quot;Hello World!\nlinktext='&quot;+place.firstChild.data+&quot;'\ntiddler='&quot;+story.findContainingTiddler(place).id.substr(7)+&quot;'&quot;);&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;loading a script from a source url&lt;br /&gt;{{{&lt;br /&gt;&lt;script src=&quot;demo.js&quot;&gt;return &quot;loading demo.js...&quot;&lt;/script&gt;&lt;br /&gt;&lt;script label=&quot;click to execute demo() function&quot;&gt;demo()&lt;/script&gt;&lt;br /&gt;}}}&lt;br /&gt;where http://www.TiddlyTools.com/demo.js contains:&lt;br /&gt;&gt;function demo() { alert('this output is from demo(), defined in demo.js') }&lt;br /&gt;&gt;alert('InlineJavascriptPlugin: demo.js has been loaded');&lt;br /&gt;&lt;script src=&quot;demo.js&quot;&gt;return &quot;loading demo.js...&quot;&lt;/script&gt;&lt;br /&gt;&lt;script label=&quot;click to execute demo() function&quot;&gt;demo()&lt;/script&gt;&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;!!!!!Installation&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;import (or copy/paste) the following tiddlers into your document:&lt;br /&gt;''InlineJavascriptPlugin'' (tagged with &lt;&lt;tag systemConfig&gt;&gt;)&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;!!!!!Revision History&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;''2006.01.05 [1.4.0]''&lt;br /&gt;added support 'onclick' scripts. When label=&quot;...&quot; param is present, a button/link is created using the indicated label text, and the script is only executed when the button/link is clicked. 'place' value is set to match the clicked button/link element.&lt;br /&gt;''2005.12.13 [1.3.1]''&lt;br /&gt;when catching eval error in IE, e.description contains the error text, instead of e.toString(). Fixed error reporting so IE shows the correct response text. Based on a suggestion by UdoBorkowski&lt;br /&gt;''2005.11.09 [1.3.0]''&lt;br /&gt;for 'inline' scripts (i.e., not scripts loaded with src=&quot;...&quot;), automatically replace calls to 'document.write()' with 'place.innerHTML+=' so script output is directed into tiddler content&lt;br /&gt;Based on a suggestion by BradleyMeck&lt;br /&gt;''2005.11.08 [1.2.0]''&lt;br /&gt;handle loading of javascript from an external URL via src=&quot;...&quot; syntax&lt;br /&gt;''2005.11.08 [1.1.0]''&lt;br /&gt;pass 'place' param into scripts to provide direct DOM access &lt;br /&gt;''2005.11.08 [1.0.0]''&lt;br /&gt;initial release&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;!!!!!Credits&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;!!!!!Code&lt;br /&gt;***/&lt;br /&gt;//{{{&lt;br /&gt;version.extensions.inlineJavascript= {major: 1, minor: 4, revision: 0, date: new Date(2006,1,5)};&lt;br /&gt;&lt;br /&gt;config.formatters.push( {&lt;br /&gt; name: &quot;inlineJavascript&quot;,&lt;br /&gt; match: &quot;\\&lt;script&quot;,&lt;br /&gt; lookahead: &quot;\\&lt;script(?: src=\\\&quot;((?:.|\\n)*?)\\\&quot;)?(?: label=\\\&quot;((?:.|\\n)*?)\\\&quot;)?\\&gt;((?:.|\\n)*?)\\&lt;/script\\&gt;&quot;,&lt;br /&gt;&lt;br /&gt; handler: function(w) {&lt;br /&gt; var lookaheadRegExp = new RegExp(this.lookahead,&quot;mg&quot;);&lt;br /&gt; lookaheadRegExp.lastIndex = w.matchStart;&lt;br /&gt; var lookaheadMatch = lookaheadRegExp.exec(w.source)&lt;br /&gt; if(lookaheadMatch &amp;&amp; lookaheadMatch.index == w.matchStart) {&lt;br /&gt; if (lookaheadMatch[1]) { // load a script library&lt;br /&gt; // make script tag, set src, add to body to execute, then remove for cleanup&lt;br /&gt; var script = document.createElement(&quot;script&quot;); script.src = lookaheadMatch[1];&lt;br /&gt; document.body.appendChild(script); document.body.removeChild(script);&lt;br /&gt; }&lt;br /&gt; if (lookaheadMatch[2] &amp;&amp; lookaheadMatch[3]) { // create a link to an 'onclick' script&lt;br /&gt; // add a link, define click handler, save code in link (pass 'place'), set link attributes&lt;br /&gt; var link=createTiddlyElement(w.output,&quot;a&quot;,null,&quot;tiddlyLinkExisting&quot;,lookaheadMatch[2]);&lt;br /&gt; link.onclick=function(){try{return(eval(this.code))}catch(e){alert(e.description?e.description:e.toString())}}&lt;br /&gt; link.code=&quot;function _out(place){&quot;+lookaheadMatch[3]+&quot;};_out(this);&quot;&lt;br /&gt; link.setAttribute(&quot;href&quot;,&quot;javascript:;&quot;); link.setAttribute(&quot;title&quot;,&quot;&quot;); link.style.cursor=&quot;pointer&quot;;&lt;br /&gt; }&lt;br /&gt; else if (lookaheadMatch[3]) { // run inline script code&lt;br /&gt; var code=&quot;function _out(place){&quot;+lookaheadMatch[3]+&quot;};_out(w.output);&quot;&lt;br /&gt; code=code.replace(/document.write\(/gi,'place.innerHTML+=(');&lt;br /&gt; try { var out = eval(code); } catch(e) { out = e.description?e.description:e.toString(); }&lt;br /&gt; if (out &amp;&amp; out.length) wikify(out,w.output);&lt;br /&gt; }&lt;br /&gt; w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt;} )&lt;br /&gt;//}}}&lt;br /&gt;</description>
<category>systemConfig</category>
<link>http://www.tiddlywiki.com/#InlineJavascriptPlugin</link>
<pubDate>Sun, 02 Apr 2006 04:59:00 GMT</pubDate>
</item>
<item>
<title>UploadPluginDoc</title>
<description>/***&lt;br /&gt;|''Name:''|UploadPlugin|&lt;br /&gt;|''Type:''|Plugin|&lt;br /&gt;|''Version:''|3.3.1 (30/03/2006)|&lt;br /&gt;|''Source:''|[[TiddlyWiki.BidiX.info/#UploadPlugin|http://tiddlywiki.BidiX.info/#UploadPlugin]]|&lt;br /&gt;|''Documentation:''|[[TiddlyWiki.BidiX.info/#UploadPluginDoc|http://tiddlywiki.BidiX.info/#UploadPluginDoc]]|&lt;br /&gt;|''Author:''|BidiX[at]BidiX.info |&lt;br /&gt;|''Required:''|TW 2.0.6 |&lt;br /&gt;&lt;br /&gt;!Description&lt;br /&gt;UploadPlugin, with [[store.php]], provides @@upload@@ and @@save to web@@ functions. See HowToUpload ([[HowToUpload|http://TiddlyWiki.bidix.info/#HowToUpload]]).&lt;br /&gt;UploadPlugin uses Username and Password from UploadOptions stored in cookies to authenticate itself to [[store.php]].&lt;br /&gt;French translation available as a separate tiddler UploadPluginMsgFR&lt;br /&gt;&lt;br /&gt;!!UploadPlugin&lt;br /&gt;*If the TiddlyWiki is viewed from @@local disk@@ :&lt;br /&gt;**{{{&lt;&lt;saveChanges&gt;&gt;}}} &lt;br /&gt;***display as ''save to disk''&lt;br /&gt;***work as usual&lt;br /&gt;**{{{&lt;&lt;upload&gt;&gt;}}}&lt;br /&gt;***display as ''upload''&lt;br /&gt;***after saving to disk, upload in the storeUrl directory.&lt;br /&gt;*If the TiddlyWiki is viewed from @@website@@ and is @@readOnly@@ (in core TiddlyWiki since 2.0.6) :&lt;br /&gt;**{{{&lt;&lt;saveChanges&gt;&gt;}}} &lt;br /&gt;***print nothing&lt;br /&gt;***has been disabled&lt;br /&gt;**{{{&lt;&lt;upload&gt;&gt;}}}&lt;br /&gt;***display as '''save to web''&lt;br /&gt;***save in the uploadDir directory.&lt;br /&gt;*If GenerateAnRssFeed in AdvancedOptions is set :&lt;br /&gt;**generate the content of the RSSFeed &lt;br /&gt;**upload the RssFile in uploadDir  directory&lt;br /&gt;**Caution : use the SiteUrl tiddler to specify the right url of the TiddlyWiki in the generated RssFile&lt;br /&gt;*DisplayMessage&lt;br /&gt;*Log upload action in UploadLog&lt;br /&gt;hint : if UploadLog is the first tiddler in the Timeline Tab, no tiddler has been updated since last upload.&lt;br /&gt;&lt;br /&gt;!![[store.php]]&lt;br /&gt;*UserVariables to set :&lt;br /&gt;//{{{&lt;br /&gt;$AUTHENTICATE_USER = true; // true | false&lt;br /&gt;$USERS = array(&lt;br /&gt; 'UserName1'=&gt;'Password1', &lt;br /&gt; 'UserName2'=&gt;'Password2', &lt;br /&gt; 'UserName3'=&gt;'Password3'); // set usernames and strong passwords&lt;br /&gt;$DEBUG = false; // true | false&lt;br /&gt;//}}}&lt;br /&gt;*method GET&lt;br /&gt;**display an information page&lt;br /&gt;*method POST&lt;br /&gt;**if $~AUTHENTICATE_USER is ''true''&lt;br /&gt;***presence and value of user and password are checked with $USER and $PASSWORD &lt;br /&gt;**if toFilename already exists and backDir parameter specified&lt;br /&gt;***rename toFilename to backupDir/toFilename.AAAAMMDD.HHSS.html&lt;br /&gt;**copy temporaryUploadedFile to toFilename&lt;br /&gt;** return status&lt;br /&gt;&lt;br /&gt;!Usage : &lt;br /&gt;{{{&lt;br /&gt;&lt;&lt;upload&gt;&gt;&lt;br /&gt; uses UploadOptions saved in cookies :&lt;br /&gt;	txtUploadUserName: username&lt;br /&gt;	pasUploadPassword : password&lt;br /&gt; 	txtUploadStoreUrl : store script&lt;br /&gt;	txtUploadDir : relative path for upload directory&lt;br /&gt;	txtUploadFilename : upload filename&lt;br /&gt;	txtUploadBackupDir : relative path for backup directory&lt;br /&gt;&lt;br /&gt;&lt;&lt;upload [storeUrl [toFilename [backupDir [uploadDir [username]]]]]&gt;&gt;&lt;br /&gt; optional positional parameters can be passed to overwrite UploadOptions in this order. &lt;br /&gt;}}}&lt;br /&gt;&lt;br /&gt;Install the {{{&lt;&lt;upload ... &gt;&gt;}}} macro in SideBarOptions just below {{{&lt;&lt;saveChanges&gt;&gt;}}} macro.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;!User manual&lt;br /&gt;See HowToUpload&lt;br /&gt;&lt;br /&gt;!Installation :&lt;br /&gt;*Install the UploadPlugin as usual&lt;br /&gt;*Upload the [[store.php]] file on your php aware webserver in your TiddlyWiki directory&lt;br /&gt;*Protect your server against malicious upload. Two approaches :&lt;br /&gt;**set $~AUTHENTICATE_USER to true in the [[store.php]] script&lt;br /&gt;***configure $USER and $PASSWORD in the [[store.php]] script on your webserver&lt;br /&gt;***set UploadOptions in conformity with [[store.php]]&lt;br /&gt;**Use server protection :&lt;br /&gt;***for Apache web server ([[for detail see Apache documentation|http://httpd.apache.org/docs/1.3/howto/htaccess.html]]) : &lt;br /&gt;****configure and upload the [[.htaccess]] [[.passwd]]&lt;br /&gt;***for other web servers see the appropriate documentation&lt;br /&gt;*Configure an upload button, for example in the SideBarOptions&lt;br /&gt;!Suppported Browser&lt;br /&gt;*Firefox : tested Ok&lt;br /&gt;*Internet Explorer : tested Ok&lt;br /&gt;*Safari : reported ok on OS X&lt;br /&gt;*Others : Not tested, please report status.&lt;br /&gt;&lt;br /&gt;!Revision history&lt;br /&gt;*V 3.3.1 (30/03/2006)&lt;br /&gt;**bug in backup folder when uploading rssfile fixed&lt;br /&gt;*V 3.3.0 (12/03/2006)&lt;br /&gt;**Code refactoring&lt;br /&gt;**suppress saveChanges hijacking&lt;br /&gt;*V3.2.2 (25/02/2006)&lt;br /&gt;**Use PasswordTweak 1.0.1&lt;br /&gt;**uploaddir is a relative path&lt;br /&gt;**backupdir is a relative path&lt;br /&gt;+++[previous revisions]&lt;br /&gt;*V3.2.1 (13/02/2006)&lt;br /&gt;**name and password added to open.request (Thanks to TedPavlic)&lt;br /&gt;*V3.2.0 (14/02/2006)&lt;br /&gt;**Use PassworDTweak (http://tiddlyWiki.bidix.info/#PasswordTweak) for password&lt;br /&gt;*V3.1.0 (12/02/2006)&lt;br /&gt;**UploadOptions in Cookies&lt;br /&gt;**Username and password from UploadOptions pass to store.php script for authentification check&lt;br /&gt;*V3.0.3 (03/02/2006)&lt;br /&gt;**Firefox 1.5.0.1 crashes due to global var fixed&lt;br /&gt;*V3.0.2 (25-Jan-2006)&lt;br /&gt;**HTTPS compatible&lt;br /&gt;*V3.0.1 (18-Jan-2006)&lt;br /&gt;**UTF8toUnicode conversion problem in Firefox&lt;br /&gt;*V3.0.0 (15-Jan-2006)&lt;br /&gt;**Asynchronous upload&lt;br /&gt;**Synchronous upload before unload of the page&lt;br /&gt;**All strings extracted in macro config&lt;br /&gt;**Compatibility checked with TW 2.0.2 &amp; TW 1.2.39 for both FF 1.5 and IE 6&lt;br /&gt;*V2.0.2 (8-Jan-2006)&lt;br /&gt;**conversion of SiteTitle and SiteSubtitle in web page Title&lt;br /&gt;*V2.0.1 (8-Jan-2006)&lt;br /&gt;**Compatibilty with TiddlyWiki 2.0.1&lt;br /&gt;*V2.0.0 (3-Jan-2006)&lt;br /&gt;**Save to web&lt;br /&gt;**Compatibilty with TiddlyWiki 1.2.39 and TiddlyWiki 2.0.0 Beta 6&lt;br /&gt;*v1.1.0 (27-Dec-2005)&lt;br /&gt;**Upload RSS File&lt;br /&gt;*v1.0.3 (26-Dec-2005)&lt;br /&gt;**UploadLog tiddler&lt;br /&gt;*v1.0.2 (24-Dec-2005)&lt;br /&gt;**Optional parameter toFilename&lt;br /&gt;**Optional parameter backupDir&lt;br /&gt;*v1.0.1 (23-Dec-2005)&lt;br /&gt;**reformatting code&lt;br /&gt;* v1.0.0 (17-Dec-2005)&lt;br /&gt;** first public working version&lt;br /&gt;===&lt;br /&gt;&lt;br /&gt;</description>
<category>Doc</category>
<category>Upload</category>
<link>http://www.tiddlywiki.com/#UploadPluginDoc</link>
<pubDate>Thu, 30 Mar 2006 10:05:00 GMT</pubDate>
</item>
</channel>
</rss>
