<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>My TiddlyWiki</title>
<description>a reusable non-linear personal web notebook</description>
<language>en</language>
<copyright>Copyright 2012 mm</copyright>
<pubDate>Tue, 25 Dec 2012 16:17:48 GMT</pubDate>
<lastBuildDate>Tue, 25 Dec 2012 16:17:48 GMT</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>TiddlyWiki 2.6.6</generator>
<item>
<title>UploadLog</title>
<description>&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;th align=&quot;center&quot;&gt;date&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;user&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;location&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;storeUrl&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;uploadDir&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;toFilename&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;backupdir&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;origin&lt;/th&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;23/12/2012 19:33:22&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;mm&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/&quot; class=&quot;externalLink&quot;&gt;/&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/store.php&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/store.php&quot; class=&quot;externalLink&quot;&gt;store.php&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://mÃ¥ns.dk/TWWEB/index.html&quot; href=&quot; http://mÃ¥ns.dk/TWWEB/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;backup&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;23/12/2012 19:54:44&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;mm&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/&quot; class=&quot;externalLink&quot;&gt;/&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/store.php&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/store.php&quot; class=&quot;externalLink&quot;&gt;store.php&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;backup&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://mÃ¥ns.dk/TWWEB/backup/index.html&quot; href=&quot; http://mÃ¥ns.dk/TWWEB/backup/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;backup&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;23/12/2012 20:30:48&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;mm&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/&quot; class=&quot;externalLink&quot;&gt;/&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/store.php&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/store.php&quot; class=&quot;externalLink&quot;&gt;store.php&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;backup&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://mÃ¥ns.dk/TWWEB/backup/index.html&quot; href=&quot; http://mÃ¥ns.dk/TWWEB/backup/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;./backup&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;ok&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;23/12/2012 20:31:23&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;mm&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/&quot; class=&quot;externalLink&quot;&gt;/&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/store.php&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/store.php&quot; class=&quot;externalLink&quot;&gt;store.php&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;backup&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://mÃ¥ns.dk/TWWEB/backup/index.html&quot; href=&quot; http://mÃ¥ns.dk/TWWEB/backup/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;./backup&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;23/12/2012 20:34:04&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;mm&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/&quot; class=&quot;externalLink&quot;&gt;/&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/store.php&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/store.php&quot; class=&quot;externalLink&quot;&gt;store.php&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://mÃ¥ns.dk/TWWEB/index.html&quot; href=&quot; http://mÃ¥ns.dk/TWWEB/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;backup&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;23/12/2012 20:34:05&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;mm&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/&quot; class=&quot;externalLink&quot;&gt;/&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/store.php&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/store.php&quot; class=&quot;externalLink&quot;&gt;store.php&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://mÃ¥ns.dk/TWWEB/index.html&quot; href=&quot; http://mÃ¥ns.dk/TWWEB/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;backup&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;23/12/2012 20:36:44&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;mm&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/&quot; class=&quot;externalLink&quot;&gt;/&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/store.php&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/store.php&quot; class=&quot;externalLink&quot;&gt;store.php&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://mÃ¥ns.dk/TWWEB/index.html&quot; href=&quot; http://mÃ¥ns.dk/TWWEB/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;backup&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;23/12/2012 20:39:41&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;mm&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/&quot; class=&quot;externalLink&quot;&gt;/&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/store.php&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/store.php&quot; class=&quot;externalLink&quot;&gt;store.php&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://mÃ¥ns.dk/TWWEB/index.html&quot; href=&quot; http://mÃ¥ns.dk/TWWEB/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;backup&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;23/12/2012 20:41:46&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;mm&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/&quot; class=&quot;externalLink&quot;&gt;/&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/store.php&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/store.php&quot; class=&quot;externalLink&quot;&gt;store.php&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://mÃ¥ns.dk/TWWEB/index.html&quot; href=&quot; http://mÃ¥ns.dk/TWWEB/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;backup&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;25/12/2012 17:17:48&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;mm&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/&quot; class=&quot;externalLink&quot;&gt;/&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://mÃ¥ns.dk/TWWEB/store.php&quot; href=&quot;http://mÃ¥ns.dk/TWWEB/store.php&quot; class=&quot;externalLink&quot;&gt;store.php&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://mÃ¥ns.dk/TWWEB/index.html&quot; href=&quot; http://mÃ¥ns.dk/TWWEB/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;backup&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description>
<link>null#UploadLog</link>
<pubDate>Tue, 25 Dec 2012 16:17:48 GMT</pubDate>

</item>
<item>
<title>Setup a single TW on the web...</title>
<description>&lt;a target=&quot;_blank&quot; title=&quot;External link to ./TW4WEB.zip&quot; href=&quot;./TW4WEB.zip&quot; class=&quot;externalLink&quot;&gt;Download the zip package&lt;/a&gt;.&lt;br&gt;Extract files -&lt;br&gt;Change usernames and passwords in store.php&lt;br&gt;Upload files to a directory on your server.&lt;br&gt;Set write permissions to 777..&lt;br&gt;Open your uploaded TW via http&lt;br&gt;Save changes from backstage &quot;upload&quot; by writing one of your usernames + password..&lt;br&gt;You can download index.html via &lt;a target=&quot;_blank&quot; title=&quot;External link to ./download.php&quot; href=&quot;./download.php&quot; class=&quot;externalLink&quot;&gt;download.php&lt;/a&gt;&lt;br&gt;You can view index.xml via &lt;a target=&quot;_blank&quot; title=&quot;External link to ./news.php&quot; href=&quot;./news.php&quot; class=&quot;externalLink&quot;&gt;news.php&lt;/a&gt;&lt;br&gt;&lt;br&gt;Enjoy &amp;amp; merry Christmas&lt;br&gt;&lt;br&gt;Cheers MÃ¥ns MÃ¥rtensson&lt;br&gt;&lt;br&gt;ps: You can have several TW's working from the same folder - you just have to save back to the right file when doing the upload.&lt;br&gt;In a tiddler tagged with: systemConfig write:&lt;br&gt;&lt;pre&gt;config.options.txtUploadFilename=&quot;TWTitle.html&quot;;
&lt;/pre&gt;&lt;br&gt;Source: &lt;a target=&quot;_blank&quot; title=&quot;External link to https://groups.google.com/forum/?fromgroups=#!topic/tiddlywiki/Q-U87Gol31c&quot; href=&quot;https://groups.google.com/forum/?fromgroups=#!topic/tiddlywiki/Q-U87Gol31c&quot; class=&quot;externalLink&quot;&gt;TiddlyWiki google group&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
<link>null#%5B%5BSetup%20a%20single%20TW%20on%20the%20web...%5D%5D</link>
<pubDate>Tue, 25 Dec 2012 16:17:37 GMT</pubDate>

</item>
<item>
<title>SaveFromWebConfig</title>
<description>&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;Name&lt;/td&gt;&lt;td&gt;SaveFromWebConfig&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;Source&lt;/td&gt;&lt;td&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.TiddlyTools.com/#SaveFromWebConfig&quot; href=&quot;http://www.TiddlyTools.com/#SaveFromWebConfig&quot; class=&quot;externalLink&quot;&gt;http://www.TiddlyTools.com/#SaveFromWebConfig&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;Documentation&lt;/td&gt;&lt;td&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.TiddlyTools.com/#SaveFromWebPluginInfo&quot; href=&quot;http://www.TiddlyTools.com/#SaveFromWebPluginInfo&quot; class=&quot;externalLink&quot;&gt;http://www.TiddlyTools.com/#SaveFromWebPluginInfo&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;Version&lt;/td&gt;&lt;td&gt;1.3.1&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;Author&lt;/td&gt;&lt;td&gt;Eric Shulman&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;License&lt;/td&gt;&lt;td&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.TiddlyTools.com/#LegalStatements&quot; href=&quot;http://www.TiddlyTools.com/#LegalStatements&quot; class=&quot;externalLink&quot;&gt;http://www.TiddlyTools.com/#LegalStatements&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;CoreVersion&lt;/td&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;Type&lt;/td&gt;&lt;td&gt;plugin&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;Description&lt;/td&gt;&lt;td&gt;configuration settings for SaveFromWebPlugin&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h5&gt; URL for server-side 'reflector' script.&lt;/h5&gt;&lt;pre&gt;config.options.txtSaveFromWebScriptURL=&quot;savefromweb.php&quot;;
&lt;/pre&gt;&lt;blockquote&gt;Script can be hosted on ANY web server that supports PHP5.&lt;br&gt;&lt;/blockquote&gt;&lt;h5&gt; URL for TiddlyWiki core source&lt;/h5&gt;&lt;pre&gt;config.options.txtSaveFromWebSourceFile=&quot;&quot;;
&lt;/pre&gt;&lt;blockquote&gt;document URL for retrieving TiddlyWiki core source code. Using an *empty* TW minimizes data transfer for retrieving TW core. Can be on ANY domain... If blank, get core source code from current document URL.&lt;br&gt;&lt;/blockquote&gt;&lt;h5&gt; Target filename&lt;/h5&gt;&lt;pre&gt;config.options.txtSaveFromWebTargetFilename=&quot;&quot;;
&lt;/pre&gt;&lt;blockquote&gt;specifies the destination filename for the downloaded file. Can be any valid filename for local filesystem and appears as the default value when you are prompted to save the file.  If blank, the filename of the current document (or the domain name if there is no filename in the URL) is used.&lt;br&gt;&lt;/blockquote&gt;&lt;h5&gt; Pre-fetch option:&lt;/h5&gt;&lt;pre&gt;config.options.chkSaveFromWebPreFetch=false;
&lt;/pre&gt;&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt; true=get (and cache) TW core code when document is first loaded (i.e., when plugin is initialized)&lt;/li&gt;&lt;li&gt; false=get and cache core code the first time the file is being saved&lt;/li&gt;&lt;/ul&gt;This option causes the plugin to retrieve the TiddlyWiki core source as soon as you load the document, instead of waiting for the first time you save.  This ensures that the TiddlyWiki core source can still be saved to the local filesystem even if your network connection is dropped before you save your changes.  Note that, even without pre-fetching, the core source is always cached after it is retrieved, so that subsequent saves don't do extra work to get it again.&lt;br&gt;&lt;/blockquote&gt;&lt;h5&gt; Local I/O option&lt;/h5&gt;&lt;pre&gt;config.options.chkSaveFromWebAttemptLocalIO=true;
&lt;/pre&gt;&lt;blockquote&gt;(requires browser security permissions, i.e., &quot;trusted site&quot; settings).&lt;br&gt;The plugin will try to obtain security permission for direct filesystem I/O.  If you grant filesystem access to the script, then it writes the document directly to your filesystem, and doesn't use the server-side reflector script at all.  This allows you to save a remote file to your local filesystem, even if your net connection drops after you open the document. Note: if filesystem permissions are not granted, the plugin will automatically attempt to use the server-side reflector script as a fallback... even if no longer connected to the net.&lt;br&gt;&lt;/blockquote&gt; </description>
<category>systemConfig</category>
<link>null#SaveFromWebConfig</link>
<pubDate>Sun, 23 Dec 2012 19:41:00 GMT</pubDate>

</item>
<item>
<title>UploadPlugin</title>
<description>&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Name:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;UploadPlugin&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Description:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Save to web a TiddlyWiki&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Version:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;4.1.3&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Date:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Feb 24, 2008&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Source:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://tiddlywiki.bidix.info/#UploadPlugin&quot; href=&quot;http://tiddlywiki.bidix.info/#UploadPlugin&quot; class=&quot;externalLink&quot;&gt;http://tiddlywiki.bidix.info/#UploadPlugin&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Documentation:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://tiddlywiki.bidix.info/#UploadPluginDoc&quot; href=&quot;http://tiddlywiki.bidix.info/#UploadPluginDoc&quot; class=&quot;externalLink&quot;&gt;http://tiddlywiki.bidix.info/#UploadPluginDoc&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Author:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;BidiX (BidiX (at) bidix (dot) info)&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;License:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D &quot; href=&quot;http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D &quot; class=&quot;externalLink&quot;&gt;BSD open source license&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;CoreVersion:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;2.2.0&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Requires:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;PasswordOptionPlugin&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;pre&gt;version.extensions.UploadPlugin = {
	major: 4, minor: 1, revision: 3,
	date: new Date(&quot;Feb 24, 2008&quot;),
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0'
};

//
// Environment
//

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

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

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

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

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

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

//
// uploadOptions Macro
//

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

//
// upload functions
//

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

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

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

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

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

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

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

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

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

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

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

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

//
// Utilities
// 

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

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

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

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

//
// Initializations
//

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

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

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

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


// Backstage
merge(config.tasks,{
	uploadOptions: {text: &quot;upload&quot;, tooltip: &quot;Change UploadOptions and Upload&quot;, content: '&amp;lt;&amp;lt;uploadOptions&amp;gt;&amp;gt;'}
});
config.backstageTasks.push(&quot;uploadOptions&quot;);
&lt;/pre&gt;&lt;br&gt;</description>
<category>systemConfig</category>
<link>null#UploadPlugin</link>
<pubDate>Sun, 23 Dec 2012 19:31:00 GMT</pubDate>

</item>
<item>
<title>SaveFromWebPlugin</title>
<description>&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;Name&lt;/td&gt;&lt;td&gt;SaveFromWebPlugin&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;Source&lt;/td&gt;&lt;td&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.TiddlyTools.com/#SaveFromWebPlugin&quot; href=&quot;http://www.TiddlyTools.com/#SaveFromWebPlugin&quot; class=&quot;externalLink&quot;&gt;http://www.TiddlyTools.com/#SaveFromWebPlugin&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;Documentation&lt;/td&gt;&lt;td&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.TiddlyTools.com/#SaveFromWebPluginInfo&quot; href=&quot;http://www.TiddlyTools.com/#SaveFromWebPluginInfo&quot; class=&quot;externalLink&quot;&gt;http://www.TiddlyTools.com/#SaveFromWebPluginInfo&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;Version&lt;/td&gt;&lt;td&gt;1.3.2&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;Author&lt;/td&gt;&lt;td&gt;Eric Shulman&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;License&lt;/td&gt;&lt;td&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.TiddlyTools.com/#LegalStatements&quot; href=&quot;http://www.TiddlyTools.com/#LegalStatements&quot; class=&quot;externalLink&quot;&gt;http://www.TiddlyTools.com/#LegalStatements&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;CoreVersion&lt;/td&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;Type&lt;/td&gt;&lt;td&gt;plugin&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;Description&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;extend 'save changes' to get remote document contents and save to local filesystem&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Normally, when you are viewing a TiddlyWiki document over the web (i.e., not via &lt;code&gt;file://&lt;/code&gt;) and you select the &quot;save changes&quot; (or &quot;save to disk&quot;) command, an error message is displayed: &lt;em&gt;&lt;u&gt;&quot;You need to save this TiddlyWiki to a file before you can save changes.&quot;&lt;/u&gt;&lt;/em&gt;  This plugin extends the use of &lt;code&gt;&amp;lt;&amp;lt;saveChanges&amp;gt;&amp;gt;&lt;/code&gt; so that when you are viewing and/or editing a remote TiddlyWiki document, instead of receiving this somewhat confusing and unhelpful message, you can still click the &quot;save changes&quot; (or &quot;save to disk&quot;) command to &lt;strong&gt;store a copy of the remote document directly onto your local filesystem&lt;/strong&gt;, &lt;em&gt;including any unsaved tiddler changes/additions you have made while working on-line.&lt;/em&gt;&lt;br&gt;&lt;h5&gt;Documentation&lt;/h5&gt;&lt;blockquote&gt;see &lt;a tiddlylink=&quot;SaveFromWebPluginInfo&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#SaveFromWebPluginInfo&quot; href=&quot;null#SaveFromWebPluginInfo&quot; class=&quot;externalLink null&quot;&gt;SaveFromWebPluginInfo&lt;/a&gt;&lt;br&gt;&lt;/blockquote&gt;&lt;h5&gt;Configuration&lt;/h5&gt;&lt;blockquote&gt; see &lt;a tiddlylink=&quot;SaveFromWebConfig&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#SaveFromWebConfig&quot; href=&quot;null#SaveFromWebConfig&quot; class=&quot;externalLink null&quot;&gt;SaveFromWebConfig&lt;/a&gt;&lt;br&gt;&lt;/blockquote&gt;&lt;h5&gt;Revisions&lt;/h5&gt;&lt;blockquote&gt;2011.02.14 1.3.2 fix OSX error: use picker.file.path&lt;br&gt;2008.09.29 1.3.1 in saveFromWeb(), do NOT convert UTF8 to Unicode when merging retrieved source for submission to server-side reflector script.  Fixes mangling of international characters and symbols.&lt;br&gt;&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;please see &lt;a tiddlylink=&quot;SaveFromWebPluginInfo&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#SaveFromWebPluginInfo&quot; href=&quot;null#SaveFromWebPluginInfo&quot; class=&quot;externalLink null&quot;&gt;SaveFromWebPluginInfo&lt;/a&gt; for additional revision details&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;2007.06.26 1.0.0 initial release&lt;br&gt;&lt;/blockquote&gt;&lt;h5&gt;Code&lt;/h5&gt;&lt;pre&gt;version.extensions.SaveFromWebPlugin= {major: 1, minor: 3, revision: 2, date: new Date(2011,2,14)};
&lt;/pre&gt;&lt;br&gt;&lt;pre&gt;// DEFAULT SETTINGS
if (config.options.txtSaveFromWebScriptURL==undefined)
	config.options.txtSaveFromWebScriptURL=&quot;savefromweb.php&quot;;
if (config.options.txtSaveFromWebTargetFilename==undefined)
	config.options.txtSaveFromWebTargetFilename=&quot;&quot;; // use current filename when blank
if (config.options.txtSaveFromWebSourceFile==undefined)
	config.options.txtSaveFromWebSourceFile=&quot;&quot;; // use current URL when blank
if (config.options.chkSaveFromWebAttemptLocalIO==undefined)
	config.options.chkSaveFromWebAttemptLocalIO=true; // true=try to use local filesystem I/O (requires security permissions)
if (config.options.chkSaveFromWebPreFetch==undefined)
	config.options.chkSaveFromWebPreFetch=false; // true=retrieve TW core when document is first loaded
&lt;/pre&gt;&lt;br&gt;&lt;pre&gt;// OPTIONAL: get TW core source code when plugin is loaded (i.e., once per document session)
if (document.location.protocol!=&quot;file:&quot; &amp;amp;&amp;amp; config.options.chkSaveFromWebPreFetch) {
	// retrieve TW source from server...
	var src=document.location.href;
	if (config.options.txtSaveFromWebSourceFile &amp;amp;&amp;amp; config.options.txtSaveFromWebSourceFile.length)
		src=config.options.txtSaveFromWebSourceFile;
	var target=config.options.txtSaveFromWebTargetFilename;
	if (!target.length) { // use current filename
		var loc=document.location.pathname;
		var slashpos=loc.lastIndexOf(&quot;/&quot;);
		target=(slashpos==-1)?loc:loc.substr(slashpos+1);
		if (!target.length) target=document.location.host+&quot;.html&quot;;
	}
	var xhr=loadRemoteFile(src,function(success,target,txt,src,xhr){if(success)config.saveFromWebSourceCache=txt;},target);
}
&lt;/pre&gt;&lt;br&gt;&lt;pre&gt;window.saveFromWeb_saveChanges = window.saveChanges;
window.saveChanges = function(onlyIfDirty,tiddlers) {
	// if on file:, just use standard core save handling
	if(document.location.protocol == &quot;file:&quot;) { window.saveFromWeb_saveChanges.apply(this,arguments); return; }
	clearMessage();
	// get target filename
	var target=config.options.txtSaveFromWebTargetFilename;
	if (!target.length) { // use current filename
		var loc=document.location.pathname;
		var slashpos=loc.lastIndexOf(&quot;/&quot;);
		target=(slashpos==-1)?loc:loc.substr(slashpos+1);
		if (!target.length) target=document.location.host+&quot;.html&quot;;
	}
	// get TW core source location
	var src=document.location.href;
	if (config.options.txtSaveFromWebSourceFile &amp;amp;&amp;amp; config.options.txtSaveFromWebSourceFile.length)
		src=config.options.txtSaveFromWebSourceFile;
	// if core source has already been cached, go straight to saving the file...
	if (config.saveFromWebSourceCache)
		{ window.saveFromWeb(true,target,config.saveFromWebSourceCache,src,null); return; }
	// otherwise, retrieve TW source from server...
	displayMessage(&quot;Retrieving TiddlyWiki core from &quot;+src);
	var xhr=loadRemoteFile(src,window.saveFromWeb,target);
	if (!xhr) { // couldn't load remote, report core error message
		displayMessage(&quot;Could not retrieve TiddlyWiki core... download unsuccessful.&quot;);
		alert(config.messages.notFileUrlError);
		if(store.tiddlerExists(config.messages.saveInstructions))
			story.displayTiddler(null,config.messages.saveInstructions);
	}
	return;
}
&lt;/pre&gt;&lt;br&gt;&lt;pre&gt;window.saveFromWeb = function(success,target,txt,url,xhr) {
	if(!success) {
		displayMessage(&quot;Could not retrieve TiddlyWiki core... download unsuccessful.&quot;);
		alert(config.messages.cantSaveError);
		if(store.tiddlerExists(config.messages.saveInstructions))
			story.displayTiddler(null,config.messages.saveInstructions);
		return;
	}
	// Locate the storeArea div's in the original source
	var posDiv=locateStoreArea(txt);
	if(!posDiv) { alert(config.messages.invalidFileError.format([url])); return; }

	// cache the document source so subsequent saves don't have to retrieve the source each time
	if (!config.saveFromWebSourceCache) config.saveFromWebSourceCache=txt;

	// if we can get local filesystem access, then ask for a filename and merge/write the file
	if (config.options.chkSaveFromWebAttemptLocalIO) {
		try {
			// get local target path+filename (may be blocked by browser security)
			var target=promptForFilename( &quot;Save file as:&quot;,&quot;C:\\&quot;,target,&quot;html&quot;);
			if (!target || !target.length) return;
			saveBackup(target,txt);
			saveRss(target);
			saveEmpty(target,txt,posDiv);
			saveMain(target,txt,posDiv);
			return;
		} catch(e) { }
	}
	// otherwise, fallback to using online 'reflector' script (if any)
	if (config.options.txtSaveFromWebScriptURL.length) {
		displayMessage(&quot;Merging tiddlers with core and preparing for download...&quot;);
		var merged=txt.substr(0,posDiv[0]+startSaveArea.length)+&quot;\n&quot;+
			store.allTiddlersAsHtml()+&quot;\n&quot;+txt.substr(posDiv[1]);
		var title=getPageTitle().htmlEncode();
		merged=merged.replaceChunk(&quot;&amp;lt;title&quot;+&quot;&amp;gt;&quot;,&quot;&amp;lt;/title&quot;+&quot;&amp;gt;&quot;,&quot; &quot;+title+&quot; &quot;);
		merged=updateLanguageAttribute(merged);
		merged=updateMarkupBlock(merged,&quot;PRE-HEAD&quot;,&quot;MarkupPreHead&quot;);
		merged=updateMarkupBlock(merged,&quot;POST-HEAD&quot;,&quot;MarkupPostHead&quot;);
		merged=updateMarkupBlock(merged,&quot;PRE-BODY&quot;,&quot;MarkupPreBody&quot;);
		merged=updateMarkupBlock(merged,&quot;POST-SCRIPT&quot;,&quot;MarkupPostBody&quot;);
		// create form in a hidden frame and submit it to server
		var html='&amp;lt;input type=&quot;hidden&quot; name=&quot;filename&quot; value=&quot;&quot;&amp;gt;'
			+'&amp;lt;input type=&quot;hidden&quot; name=&quot;contents&quot; value=&quot;&quot;&amp;gt;';
		var form=window.createHiddenForm(config.options.txtSaveFromWebScriptURL,html);
		form.filename.value=target;
		form.contents.value=merged;
		form.submit();
	}
}
&lt;/pre&gt;&lt;br&gt;&lt;pre&gt;window.createHiddenForm=function(action,body) {
	var f=document.getElementById(&quot;saveFromWebFrame&quot;);
	if (f) document.body.removeChild(f);
	var f=createTiddlyElement(document.body,&quot;iframe&quot;,&quot;saveFromWebFrame&quot;);
	f.style.width=&quot;0px&quot;; f.style.height=&quot;0px&quot;; f.style.border=&quot;0px&quot;;
	var d=f.document;
	if (f.contentDocument) d=f.contentDocument; // For NS6
	else if (f.contentWindow) d=f.contentWindow.document; // For IE5.5 and IE6
	d.open();
	d.writeln('&amp;lt;form target=&quot;_self&quot; action=&quot;'+action+'&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&amp;gt;'+body+'&amp;lt;/form&amp;gt;');
	d.close();
	return d.getElementsByTagName(&quot;form&quot;)[0];
}
&lt;/pre&gt;&lt;br&gt;&lt;pre&gt;// note: if blocked by browser security, this function will throw an error...
// the CALLING function should use &quot;try{...} catch(e){...}&quot; to handle the security errors
window.promptForFilename=function(msg,path,file,defext) {
	var result=&quot;&quot;;
	if(window.Components) { // moz
		netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
		var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
		var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
		picker.init(window, msg, nsIFilePicker.modeSave);
		picker.displayDirectory=null;
		picker.defaultExtension=defext;
		picker.defaultString=file;
		picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
		if (picker.show()!=nsIFilePicker.returnCancel) var result=picker.file.path;
	}
	else { // IE (XP only)
		var s = new ActiveXObject('UserAccounts.CommonDialog');
		s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|';
		s.FilterIndex=1; // default to ALL files;
		s.InitialDir=path;
		s.FileName=file;
		if (s.showOpen()) var result=s.FileName;
	}
	return result;
}
&lt;/pre&gt;</description>
<category>systemConfig</category>
<link>null#SaveFromWebPlugin</link>
<pubDate>Sun, 23 Dec 2012 19:30:00 GMT</pubDate>

</item>
<item>
<title>zzConfig</title>
<description>&lt;pre&gt;config.options[&quot;chkBackstage&quot;]=false;
config.options.txtUploadUserName=&quot;UserName1&quot;;
config.options.pasUploadPassword=&quot;Password1&quot;;
/*config.options.txtUploadStoreUrl=&quot;store.php&quot;;*/
/*config.options.txtUploadDir=&quot;./&quot;;*/
/*config.options.txtUploadFilename=&quot;index.html&quot;;*/
config.options.txtUploadBackupDir=&quot;backup&quot;;
/*config.options.chkUploadLog=&quot;true&quot;;
config.options.txtUploadLogMaxLine=&quot;10&quot;;*/
&lt;/pre&gt;</description>
<category>systemConfig</category>
<link>null#zzConfig</link>
<pubDate>Sun, 23 Dec 2012 18:54:00 GMT</pubDate>

</item>
<item>
<title>DefaultTiddlers</title>
<description>&lt;a tiddlylink=&quot;Setup a single TW on the web...&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#Setup a single TW on the web...&quot; href=&quot;null#Setup a single TW on the web...&quot; class=&quot;externalLink null&quot;&gt;Setup a single TW on the web...&lt;/a&gt;</description>
<link>null#DefaultTiddlers</link>
<pubDate>Sat, 22 Dec 2012 15:52:00 GMT</pubDate>

</item>
<item>
<title>PasswordOptionPlugin</title>
<description>&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Name:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;PasswordOptionPlugin&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Description:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Extends TiddlyWiki options with non encrypted password option.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Version:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;1.0.2&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Date:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Apr 19, 2007&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Source:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://tiddlywiki.bidix.info/#PasswordOptionPlugin&quot; href=&quot;http://tiddlywiki.bidix.info/#PasswordOptionPlugin&quot; class=&quot;externalLink&quot;&gt;http://tiddlywiki.bidix.info/#PasswordOptionPlugin&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Author:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;BidiX (BidiX (at) bidix (dot) info)&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;License:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D &quot; href=&quot;http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D &quot; class=&quot;externalLink&quot;&gt;BSD open source license&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;CoreVersion:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;2.2.0 (Beta 5)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;pre&gt;version.extensions.PasswordOptionPlugin = {
	major: 1, minor: 0, revision: 2, 
	date: new Date(&quot;Apr 19, 2007&quot;),
	source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
	coreVersion: '2.2.0 (Beta 5)'
};

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

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

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

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

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

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

merge(config.optionsDesc,{
		pasPassword: &quot;Test password&quot;
	});
*/
&lt;/pre&gt;</description>
<category>systemConfig</category>
<link>null#PasswordOptionPlugin</link>
<pubDate>Sat, 22 Dec 2012 15:30:00 GMT</pubDate>

</item>
<item>
<title>GettingStarted</title>
<description>To get started with this blank &lt;a tiddlylink=&quot;TiddlyWiki&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#TiddlyWiki&quot; href=&quot;null#TiddlyWiki&quot; class=&quot;externalLink null&quot;&gt;TiddlyWiki&lt;/a&gt;, you'll need to modify the following tiddlers:&lt;br&gt;&lt;ul&gt;&lt;li&gt; &lt;a tiddlylink=&quot;SiteTitle&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#SiteTitle&quot; href=&quot;null#SiteTitle&quot; class=&quot;externalLink null&quot;&gt;SiteTitle&lt;/a&gt; &amp;amp; &lt;a tiddlylink=&quot;SiteSubtitle&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#SiteSubtitle&quot; href=&quot;null#SiteSubtitle&quot; class=&quot;externalLink null&quot;&gt;SiteSubtitle&lt;/a&gt;: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;MainMenu&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#MainMenu&quot; href=&quot;null#MainMenu&quot; class=&quot;externalLink null&quot;&gt;MainMenu&lt;/a&gt;: The menu (usually on the left)&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;DefaultTiddlers&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#DefaultTiddlers&quot; href=&quot;null#DefaultTiddlers&quot; class=&quot;externalLink null&quot;&gt;DefaultTiddlers&lt;/a&gt;: Contains the names of the tiddlers that you want to appear when the &lt;a tiddlylink=&quot;TiddlyWiki&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#TiddlyWiki&quot; href=&quot;null#TiddlyWiki&quot; class=&quot;externalLink null&quot;&gt;TiddlyWiki&lt;/a&gt; is opened&lt;/li&gt;&lt;/ul&gt;You'll also need to enter your username for signing your edits: &lt;input title=&quot;Username for signing your edits&quot; class=&quot;txtOptionInput&quot; option=&quot;txtUserName&quot;&gt;&lt;br&gt;&lt;br&gt;</description>
<link>null#GettingStarted</link>
<pubDate>Sat, 22 Dec 2012 15:26:00 GMT</pubDate>

</item>
</channel>
</rss>