<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>abegoExtensions</title>
<link>http://tiddlywiki.abego-software.de</link>
<description>UdoBorkowski's Extensions for TiddlyWiki</description>
<language>en-us</language>
<copyright>Copyright 2012 YourName</copyright>
<pubDate>Mon, 01 Oct 2012 19:46:19 GMT</pubDate>
<lastBuildDate>Mon, 01 Oct 2012 19:46:19 GMT</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>TiddlyWiki 2.3.0</generator>
<item>
<title>IncludePlugin</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;abego.IncludePlugin&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Version:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;1.0.1 (2007-04-30)&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Type:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;plugin&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Source:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/#IncludePlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/#IncludePlugin&quot; target=&quot;_blank&quot;&gt;http://tiddlywiki.abego-software.de/#IncludePlugin&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;Udo Borkowski (ub [at] abego-software [dot] de)&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 class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/#%5B%5BIncludePlugin%20Documentation%5D%5D&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/#%5B%5BIncludePlugin%20Documentation%5D%5D&quot; target=&quot;_blank&quot;&gt;IncludePlugin Documentation&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Community:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;(&lt;a class=&quot;externalLink&quot; href=&quot;http://del.icio.us/post?url=http://tiddlywiki.abego-software.de/index.html%23IncludePlugin&quot; title=&quot;External link to http://del.icio.us/post?url=http://tiddlywiki.abego-software.de/index.html%23IncludePlugin&quot; target=&quot;_blank&quot;&gt;del.icio.us&lt;/a&gt;) (&lt;a class=&quot;externalLink&quot; href=&quot;http://groups.google.com/group/TiddlyWiki&quot; title=&quot;External link to http://groups.google.com/group/TiddlyWiki&quot; target=&quot;_blank&quot;&gt;Support&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Copyright:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;&#169;&lt;/span&gt; 2007 &lt;a class=&quot;externalLink&quot; href=&quot;http://www.abego-software.de&quot; title=&quot;External link to http://www.abego-software.de&quot; target=&quot;_blank&quot;&gt;abego Software&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Licence:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://www.abego-software.de/legal/apl-v10.html&quot; title=&quot;External link to http://www.abego-software.de/legal/apl-v10.html&quot; target=&quot;_blank&quot;&gt;BSD open source license (abego Software)&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.1.3&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Browser:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Firefox 1.5.0.9 or better; Internet Explorer 6.0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h1&gt;Revision history&lt;/h1&gt;&lt;em&gt;The IncludePlugin is no longer in active development. If you are experiencing problems or looking for some additional features you may want have a look at the  &lt;a class=&quot;externalLink&quot; href=&quot;http://yakovl.bplaced.net/TW/STP/STP.html&quot; title=&quot;External link to http://yakovl.bplaced.net/TW/STP/STP.html&quot; target=&quot;_blank&quot;&gt;SharedTiddlersPlugin&lt;/a&gt;.&lt;/em&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt; 1.0.1 (2007-04-30)&lt;ul&gt;&lt;li&gt; Make ForEachTiddler &quot;Include-aware&quot;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; 1.0.0 (2007-02-08) &lt;ul&gt;&lt;li&gt; initial version&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;Source Code&lt;/h1&gt;This plugin's source code is compressed (and hidden). Use this &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/archive/IncludePlugin/1.0.1/IncludePlugin-1.0.1-src.js&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/archive/IncludePlugin/1.0.1/IncludePlugin-1.0.1-src.js&quot; target=&quot;_blank&quot;&gt;link&lt;/a&gt; to get the readable source code.&lt;br&gt;&lt;em&gt;&lt;br&gt;&lt;/em&gt;</description>
<category>IncludePlugin</category>
<category>systemConfig</category>
<link>http://tiddlywiki.abego-software.de#IncludePlugin</link>
<pubDate>Mon, 01 Oct 2012 19:45:41 GMT</pubDate>
</item>
<item>
<title>YourSearchPlugin v2.1.6 released</title>
<description>Fix issue when using &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;YourSearchPlugin&quot;&gt;YourSearchPlugin&lt;/a&gt; with Internet Explorer 8. Thanks to Roger Gallion for reporting and providing the fix.  (For details see: &lt;a class=&quot;externalLink&quot; href=&quot;https://github.com/abego/YourSearchPlugin/issues/1&quot; title=&quot;External link to https://github.com/abego/YourSearchPlugin/issues/1&quot; target=&quot;_blank&quot;&gt;https://github.com/abego/YourSearchPlugin/issues/1&lt;/a&gt;)</description>
<link>http://tiddlywiki.abego-software.de#%5B%5BYourSearchPlugin%20v2.1.6%20released%5D%5D</link>
<pubDate>Thu, 19 Apr 2012 02:58:00 GMT</pubDate>
</item>
<item>
<title>FormTiddlerPlugin</title>
<description>&lt;br&gt;&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;FormTiddlerPlugin&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Version:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;1.0.7 (2012-04-19)&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Summary:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Use form-based tiddlers to enter your tiddler data using text fields, listboxes, checkboxes etc. (All standard HTML Form input elements supported).&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 class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#FormTiddler Introduction&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#FormTiddler Introduction&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;FormTiddler Introduction&quot;&gt;Introduction&lt;/a&gt;, &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#FormTiddler Examples&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#FormTiddler Examples&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;FormTiddler Examples&quot;&gt;Examples&lt;/a&gt;&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 class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/#FormTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/#FormTiddlerPlugin&quot; target=&quot;_blank&quot;&gt;http://tiddlywiki.abego-software.de/#FormTiddlerPlugin&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Twitter:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;https://twitter.com/#!/abego&quot; title=&quot;External link to https://twitter.com/#!/abego&quot; target=&quot;_blank&quot;&gt;@abego&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;UdoBorkowski (ub [at] abego-software [dot] de)&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 class=&quot;externalLink&quot; href=&quot;http://www.abego-software.de/legal/apl-v10.html&quot; title=&quot;External link to http://www.abego-software.de/legal/apl-v10.html&quot; target=&quot;_blank&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;Requires:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;DataTiddlerPlugin&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h1&gt;Description&lt;/h1&gt;Use form-based tiddlers to enter your tiddler data using text fields, listboxes, checkboxes etc. (All standard HTML Form input elements supported).&lt;br&gt;&lt;br&gt;&lt;strong&gt;Syntax:&lt;/strong&gt; &lt;br&gt;&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt;&lt;strong&gt;formTiddler&lt;/strong&gt; &lt;em&gt;tiddlerName&lt;/em&gt;&lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;em&gt;tiddlerName&lt;/em&gt;&lt;/td&gt;&lt;td&gt;The name of the FormTemplate tiddler to be used to edit the data of the tiddler containing the macro.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt;&lt;strong&gt;newTiddlerWithForm&lt;/strong&gt; &lt;em&gt;formTemplateName&lt;/em&gt; &lt;em&gt;buttonLabel&lt;/em&gt; [&lt;em&gt;titleExpression&lt;/em&gt; [&lt;strong&gt;askUser&lt;/strong&gt;]] &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;em&gt;formTemplateName&lt;/em&gt;&lt;/td&gt;&lt;td&gt;The name of the tiddler that defines the form the new tiddler should use.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;em&gt;buttonLabel&lt;/em&gt;&lt;/td&gt;&lt;td&gt;The label of the button&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;em&gt;titleExpression&lt;/em&gt;&lt;/td&gt;&lt;td&gt;A (quoted) JavaScript String expression that defines the title (/name) of the new tiddler.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;askUser&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Typically the user is not asked for the title when a title is specified (and not yet used). When &lt;strong&gt;askUser&lt;/strong&gt; is given the user will be asked in any case. This may be used when the calculated title is just a suggestion that must be confirmed by the user&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;sub&gt;Syntax formatting: Keywords in &lt;strong&gt;bold&lt;/strong&gt;, optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.&lt;/sub&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;For details and how to use the macros see the &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#FormTiddler Introduction&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#FormTiddler Introduction&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;FormTiddler Introduction&quot;&gt;introduction&lt;/a&gt; and the &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#FormTiddler Examples&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#FormTiddler Examples&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;FormTiddler Examples&quot;&gt;examples&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;h1&gt;Source Code&lt;/h1&gt;This plugin's source code is compressed (and hidden). &lt;br&gt;Use this &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/archive/FormTiddlerPlugin/1.0.7/FormTiddlerPlugin-1.0.7-src.js&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/archive/FormTiddlerPlugin/1.0.7/FormTiddlerPlugin-1.0.7-src.js&quot; target=&quot;_blank&quot;&gt;link&lt;/a&gt; to get the readable source code.&lt;br&gt;&lt;em&gt;&lt;br&gt;&lt;/em&gt;</description>
<category>FormTiddlerProject</category>
<category>Plugin</category>
<category>UdoBorkowski</category>
<category>systemConfig</category>
<link>http://tiddlywiki.abego-software.de#FormTiddlerPlugin</link>
<pubDate>Wed, 18 Apr 2012 23:03:00 GMT</pubDate>
</item>
<item>
<title>YourSearchPlugin</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;YourSearchPlugin&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Version:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;2.1.6 (2012-04-19)&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Summary:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Search your TiddlyWiki with advanced search features such as result lists, tiddler preview, result ranking, search filters, combined searches and many more.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Source:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/#YourSearchPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/#YourSearchPlugin&quot; target=&quot;_blank&quot;&gt;http://tiddlywiki.abego-software.de/#YourSearchPlugin&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Twitter:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;https://twitter.com/#!/abego&quot; title=&quot;External link to https://twitter.com/#!/abego&quot; target=&quot;_blank&quot;&gt;@abego&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;GitHub:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;https://github.com/abego/YourSearchPlugin&quot; title=&quot;External link to https://github.com/abego/YourSearchPlugin&quot; target=&quot;_blank&quot;&gt;https://github.com/abego/YourSearchPlugin&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;UdoBorkowski (ub [at] abego-software [dot] de)&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 class=&quot;externalLink&quot; href=&quot;http://www.abego-software.de/legal/apl-v10.html&quot; title=&quot;External link to http://www.abego-software.de/legal/apl-v10.html&quot; target=&quot;_blank&quot;&gt;BSD open source license&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h1&gt;About &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#YourSearch&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#YourSearch&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;YourSearch&quot;&gt;YourSearch&lt;/a&gt;&lt;/h1&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#YourSearch&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#YourSearch&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;YourSearch&quot;&gt;YourSearch&lt;/a&gt; gives you a bunch of new features to simplify and speed up your daily searches in TiddlyWiki. It seamlessly integrates into the standard TiddlyWiki search: just start typing into the 'search' field and explore!&lt;br&gt;&lt;br&gt;For more information see &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#YourSearch Help&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#YourSearch Help&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;YourSearch Help&quot;&gt;Help&lt;/a&gt;.&lt;br&gt;&lt;h1&gt;Compatibility&lt;/h1&gt;This plugin requires TiddlyWiki 2.1. &lt;br&gt;Check the &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/archive&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/archive&quot; target=&quot;_blank&quot;&gt;archive&lt;/a&gt; for YourSearchPlugins supporting older versions of TiddlyWiki.&lt;br&gt;&lt;h1&gt;Source Code&lt;/h1&gt;This plugin's source code is compressed (and hidden). &lt;br&gt;Use this &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/archive/YourSearchPlugin/2.1.6/YourSearchPlugin-2.1.6-src.js&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/archive/YourSearchPlugin/2.1.6/YourSearchPlugin-2.1.6-src.js&quot; target=&quot;_blank&quot;&gt;link&lt;/a&gt; to get the readable source code.&lt;br&gt;&lt;em&gt;&lt;br&gt;&lt;/em&gt;</description>
<category>Plugin</category>
<category>UdoBorkowski</category>
<category>YourSearchProject</category>
<category>systemConfig</category>
<link>http://tiddlywiki.abego-software.de#YourSearchPlugin</link>
<pubDate>Wed, 18 Apr 2012 23:02:00 GMT</pubDate>
</item>
<item>
<title>DataTiddlerPlugin</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;DataTiddlerPlugin&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Version:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;1.0.7 (2012-04-19)&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Summary:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Enhance your tiddlers with structured data (such as strings, booleans, numbers, or even arrays and compound objects) that can be easily accessed and modified through named fields (in JavaScript code).&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Source:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/#DataTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/#DataTiddlerPlugin&quot; target=&quot;_blank&quot;&gt;http://tiddlywiki.abego-software.de/#DataTiddlerPlugin&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Twitter:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;https://twitter.com/#!/abego&quot; title=&quot;External link to https://twitter.com/#!/abego&quot; target=&quot;_blank&quot;&gt;@abego&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;UdoBorkowski (ub [at] abego-software [dot] de)&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 class=&quot;externalLink&quot; href=&quot;http://www.abego-software.de/legal/apl-v10.html&quot; title=&quot;External link to http://www.abego-software.de/legal/apl-v10.html&quot; target=&quot;_blank&quot;&gt;BSD open source license&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h1&gt;Description&lt;/h1&gt;Enhance your tiddlers with structured data (such as strings, booleans, numbers, or even arrays and compound objects) that can be easily accessed and modified through named fields (in JavaScript code).&lt;br&gt;&lt;br&gt;Such tiddler data can be used in various applications. E.g. you may create tables that collect data from various tiddlers. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;em&gt;Example: &quot;Table with all December Expenses&quot;&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;&lt;pre&gt;&amp;lt;&amp;lt;forEachTiddler
    where
        'tiddler.tags.contains(&quot;expense&quot;) &amp;amp;&amp;amp; tiddler.data(&quot;month&quot;) == &quot;Dec&quot;'
    write
        '&quot;|[[&quot;+tiddler.title+&quot;]]|&quot;+tiddler.data(&quot;descr&quot;)+&quot;| &quot;+tiddler.data(&quot;amount&quot;)+&quot;|\n&quot;'
&amp;gt;&amp;gt;
&lt;/pre&gt;&lt;em&gt;(This assumes that expenses are stored in tiddlers tagged with &quot;expense&quot;.)&lt;/em&gt;&lt;br&gt;&lt;span&gt;&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;a href=&quot;javascript:;&quot; title=&quot;Invoice Carvers - UdoBorkowski, 12. Dezember 2005 18:46:00 MEZ&quot; class=&quot;tiddlyLink tiddlyLinkExisting&quot; refresh=&quot;link&quot; tiddlylink=&quot;Invoice Carvers&quot;&gt;Invoice Carvers&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Restaurant&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;35&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;a href=&quot;javascript:;&quot; title=&quot;InvoiceKLM - UdoBorkowski, 13. Dezember 2005 02:22:00 MEZ&quot; class=&quot;tiddlyLink tiddlyLinkExisting&quot; refresh=&quot;link&quot; tiddlylink=&quot;InvoiceKLM&quot;&gt;InvoiceKLM&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Flight&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;688&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;a href=&quot;javascript:;&quot; title=&quot;Receipt Four Seasons - UdoBorkowski, 12. Dezember 2005 18:47:00 MEZ&quot; class=&quot;tiddlyLink tiddlyLinkExisting&quot; refresh=&quot;link&quot; tiddlylink=&quot;Receipt Four Seasons&quot;&gt;Receipt Four Seasons&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Hotel&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;149&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;br&gt;For other examples see DataTiddlerExamples.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;Access and Modify Tiddler Data&lt;/strong&gt;&lt;br&gt;&lt;br&gt;You can &quot;attach&quot; data to every tiddler by assigning a JavaScript value (such as a string, boolean, number, or even arrays and compound objects) to named fields. &lt;br&gt;&lt;br&gt;These values can be accessed and modified through the following Tiddler methods:&lt;br&gt;&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;th&gt;Method&lt;/th&gt;&lt;th&gt;Example&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;code&gt;data(field)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;t.data(&quot;age&quot;)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined &lt;code&gt;undefined&lt;/code&gt; is returned.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;code&gt;data(field,defaultValue)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;t.data(&quot;isVIP&quot;,false)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined the defaultValue is returned.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;code&gt;data()&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;t.data()&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Returns the data object of the tiddler, with a property for every field. The properties of the returned data object may only be read and not be modified. To modify the data use DataTiddler.setData(...) or the corresponding Tiddler method.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;code&gt;setData(field,value)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;t.setData(&quot;age&quot;,42)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Sets the value of the given data field of the tiddler to the value. When the value is &lt;code&gt;undefined&lt;/code&gt; the field is removed.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;code&gt;setData(field,value,defaultValue)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;t.setData(&quot;isVIP&quot;,flag,false)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Sets the value of the given data field of the tiddler to the value. When the value is equal to the defaultValue no value is set (and the field is removed).&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;Alternatively you may use the following functions to access and modify the data. In this case the tiddler argument is either a tiddler or the name of a tiddler.&lt;br&gt;&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;th&gt;Method&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;code&gt;DataTiddler.getData(tiddler,field)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined &lt;code&gt;undefined&lt;/code&gt; is returned.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;code&gt;DataTiddler.getData(tiddler,field,defaultValue)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined the defaultValue is returned.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;code&gt;DataTiddler.getDataObject(tiddler)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Returns the data object of the tiddler, with a property for every field. The properties of the returned data object may only be read and not be modified. To modify the data use DataTiddler.setData(...) or the corresponding Tiddler method.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;code&gt;DataTiddler.setData(tiddler,field,value)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Sets the value of the given data field of the tiddler to the value. When the value is &lt;code&gt;undefined&lt;/code&gt; the field is removed.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;code&gt;DataTiddler.setData(tiddler,field,value,defaultValue)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Sets the value of the given data field of the tiddler to the value. When the value is equal to the defaultValue no value is set (and the field is removed).&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;em&gt;(For details on the various functions see the detailed comments in the source code.)&lt;/em&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;Data Representation in a Tiddler&lt;/strong&gt;&lt;br&gt;&lt;br&gt;The data of a tiddler is stored as plain text in the tiddler's content/text, inside a &quot;data&quot; section that is framed by a &lt;code&gt;&amp;lt;data&amp;gt;...&amp;lt;/data&amp;gt;&lt;/code&gt; block. Inside the data section the information is stored in the &lt;a class=&quot;externalLink&quot; href=&quot;http://www.crockford.com/JSON/index.html&quot; title=&quot;External link to http://www.crockford.com/JSON/index.html&quot; target=&quot;_blank&quot;&gt;JSON format&lt;/a&gt;. &lt;br&gt;&lt;br&gt;&lt;em&gt;&lt;strong&gt;Data Section Example:&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;&lt;pre&gt;&amp;lt;data&amp;gt;{&quot;isVIP&quot;:true,&quot;user&quot;:&quot;John Brown&quot;,&quot;age&quot;:34}&amp;lt;/data&amp;gt;
&lt;/pre&gt;&lt;br&gt;The data section is not displayed when viewing the tiddler (see also &quot;The showData Macro&quot;).&lt;br&gt;&lt;br&gt;Beside the data section a tiddler may have all kind of other content.&lt;br&gt;&lt;br&gt;Typically you will not access the data section text directly but use the methods given above. Nevertheless you may retrieve the text of the data section's content through the &lt;code&gt;DataTiddler.getDataText(tiddler)&lt;/code&gt; function.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;Saving Changes&lt;/strong&gt;&lt;br&gt;&lt;br&gt;The &quot;setData&quot; methods respect the &quot;ForceMinorUpdate&quot; and &quot;AutoSave&quot; configuration values. I.e. when &quot;ForceMinorUpdate&quot; is true changing a value using setData will not affect the &quot;modifier&quot; and &quot;modified&quot; attributes. With &quot;AutoSave&quot; set to true every setData will directly save the changes after a setData.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;Notifications&lt;/strong&gt;&lt;br&gt;&lt;br&gt;No notifications are sent when a tiddler's data value is changed through the &quot;setData&quot; methods. &lt;br&gt;&lt;br&gt;&lt;strong&gt;Escape Data Section&lt;/strong&gt;&lt;br&gt;In case that you want to use the text &lt;code&gt;&amp;lt;data&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;/data&amp;gt;&lt;/code&gt; in a tiddler text you must prefix the text with a tilde ('~'). Otherwise it may be wrongly considered as the data section. The tiddler text &lt;code&gt;~&amp;lt;data&amp;gt;&lt;/code&gt; is displayed as &lt;code&gt;&amp;lt;data&amp;gt;&lt;/code&gt;.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;The showData Macro&lt;/strong&gt;&lt;br&gt;&lt;br&gt;By default the data of a tiddler (that is stored in the &lt;code&gt;&amp;lt;data&amp;gt;...&amp;lt;/data&amp;gt;&lt;/code&gt; section of the tiddler) is not displayed. If you want to display this data you may used the &lt;code&gt;&amp;lt;&amp;lt;showData ...&amp;gt;&amp;gt;&lt;/code&gt; macro:&lt;br&gt;&lt;br&gt;&lt;strong&gt;Syntax:&lt;/strong&gt; &lt;br&gt;&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt;&lt;strong&gt;showData &lt;/strong&gt; [&lt;strong&gt;JSON&lt;/strong&gt;] [&lt;em&gt;tiddlerName&lt;/em&gt;] &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;JSON&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;By default the data is rendered as a table with a &quot;Name&quot; and &quot;Value&quot; column. When defining &lt;strong&gt;JSON&lt;/strong&gt; the data is rendered in JSON format&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;em&gt;tiddlerName&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Defines the tiddler holding the data to be displayed. When no tiddler is given the tiddler containing the showData macro is used. When the tiddler name contains spaces you must quote the name (or use the &lt;code&gt;[[...]]&lt;/code&gt; syntax.)&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;sub&gt;Syntax formatting: Keywords in &lt;strong&gt;bold&lt;/strong&gt;, optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.&lt;/sub&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h1&gt;Source Code&lt;/h1&gt;This plugin's source code is compressed (and hidden). &lt;br&gt;Use this &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/archive/DataTiddlerPlugin/1.0.7/DataTiddlerPlugin-1.0.7-src.js&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/archive/DataTiddlerPlugin/1.0.7/DataTiddlerPlugin-1.0.7-src.js&quot; target=&quot;_blank&quot;&gt;link&lt;/a&gt; to get the readable source code.&lt;br&gt;&lt;em&gt;&lt;br&gt;&lt;/em&gt;</description>
<category>DataTiddlerProject</category>
<category>Plugin</category>
<category>UdoBorkowski</category>
<category>systemConfig</category>
<link>http://tiddlywiki.abego-software.de#DataTiddlerPlugin</link>
<pubDate>Wed, 18 Apr 2012 23:01:00 GMT</pubDate>
</item>
<item>
<title>abegoExtensions News</title>
<description>&lt;h1&gt;2012-04-19&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#FormTiddlerPlugin v1.0.7 and DataTiddlerPlugin v1.0.7 released&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#FormTiddlerPlugin v1.0.7 and DataTiddlerPlugin v1.0.7 released&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;FormTiddlerPlugin v1.0.7 and DataTiddlerPlugin v1.0.7 released&quot;&gt;FormTiddlerPlugin v1.0.7 and DataTiddlerPlugin v1.0.7 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#YourSearchPlugin v2.1.6 released&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#YourSearchPlugin v2.1.6 released&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;YourSearchPlugin v2.1.6 released&quot;&gt;YourSearchPlugin v2.1.6 released&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;2012-04-09&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; Added compatibility note in &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#DataTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#DataTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;DataTiddlerPlugin&quot;&gt;DataTiddlerPlugin&lt;/a&gt; on tiddlers with spaces in their titles when using &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TiddlyWiki&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TiddlyWiki&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TiddlyWiki&quot;&gt;TiddlyWiki&lt;/a&gt; &amp;gt; 2.6.2. Thanks to Matt Shanks for reporting this.&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;2011-09-29&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; Added info on using the &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#IncludePlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#IncludePlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;IncludePlugin&quot;&gt;IncludePlugin&lt;/a&gt; in the Opera or Chrome browser. Thanks to Yakov Litvin for this.&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;2011-05-23&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; Release &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#PartTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#PartTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;PartTiddlerPlugin&quot;&gt;PartTiddlerPlugin&lt;/a&gt; v1.0.10&lt;ul&gt;&lt;li&gt; Adapt to TW 2.6.2 default behaviour when existing tiddlers are opened (don't select text) and fixed Firefox 4 issue. Thanks to dave for reporting the issue.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;2011-01-20&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; Added the &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#ForEachTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#ForEachTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;ForEachTiddlerPlugin&quot;&gt;ForEachTiddlerPlugin&lt;/a&gt; example '&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#Create a table with one column per tiddler (&amp;quot;Vertical Report&amp;quot;)&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#Create a table with one column per tiddler (&amp;quot;Vertical Report&amp;quot;)&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;Create a table with one column per tiddler (&amp;quot;Vertical Report&amp;quot;)&quot;&gt;Create a table with one column per tiddler (&quot;Vertical Report&quot;)&lt;/a&gt;' and '&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#Create a table with one row per tiddler (&amp;quot;Horizontal Report&amp;quot;)&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#Create a table with one row per tiddler (&amp;quot;Horizontal Report&amp;quot;)&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;Create a table with one row per tiddler (&amp;quot;Horizontal Report&amp;quot;)&quot;&gt;Create a table with one row per tiddler (&quot;Horizontal Report&quot;)&lt;/a&gt;'.&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;2010-02-16&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;YourSearchPlugin&quot;&gt;YourSearchPlugin&lt;/a&gt; v2.1.5 released&lt;ul&gt;&lt;li&gt; Fixed problems with CSS and search textfield. Thanks to Guido Glatzel for reporting.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;2009-12-29&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; Added the &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#ForEachTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#ForEachTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;ForEachTiddlerPlugin&quot;&gt;ForEachTiddlerPlugin&lt;/a&gt; example '&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#List all tasks completed on a journal tiddler's day, as a &amp;quot;Daily Status Report&amp;quot;&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#List all tasks completed on a journal tiddler's day, as a &amp;quot;Daily Status Report&amp;quot;&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;List all tasks completed on a journal tiddler's day, as a &amp;quot;Daily Status Report&amp;quot;&quot;&gt;List all tasks completed on a journal tiddler's day, as a &quot;Daily Status Report&quot;&lt;/a&gt;'. Based on an idea by cmari and Alan Cohen. Thanks.&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;2009-10-09&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; Revised the &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#NewTiddlerWithFormMacro&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#NewTiddlerWithFormMacro&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;NewTiddlerWithFormMacro&quot;&gt;NewTiddlerWithFormMacro&lt;/a&gt; documentation&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;2009-09-04&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;YourSearchPlugin&quot;&gt;YourSearchPlugin&lt;/a&gt; v2.1.4 released&lt;ul&gt;&lt;li&gt; Fixed &quot;this command is not supported&quot; error under IE 8. Thanks to rouilj for reporting. (For details see: &lt;a class=&quot;externalLink&quot; href=&quot;http://groups.google.com/group/TiddlyWiki/browse_thread/thread/cffee3254381e478&quot; title=&quot;External link to http://groups.google.com/group/TiddlyWiki/browse_thread/thread/cffee3254381e478&quot; target=&quot;_blank&quot;&gt;http://groups.google.com/group/TiddlyWiki/browse_thread/thread/cffee3254381e478&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;2008-05-04&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; Improved &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TiddlyWiki&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TiddlyWiki&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TiddlyWiki&quot;&gt;TiddlyWiki&lt;/a&gt; style for better appearance in Safari&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;2008-04-16&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;YourSearchPlugin&quot;&gt;YourSearchPlugin&lt;/a&gt; v2.1.3 released&lt;ul&gt;&lt;li&gt; Fixed problem with Firefox3. Thanks to Andreas Hoefler for reporting.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;2008-03-17&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;YourSearchPlugin&quot;&gt;YourSearchPlugin&lt;/a&gt; v2.1.2 released&lt;ul&gt;&lt;li&gt; Bugfix: on IE (6.0) the first letter is dropped from the search string. Thanks to Kashgarinn and Nick Padfield for reporting.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;sup&gt;For older news see the revision history of the various plugins.&lt;/sup&gt;&lt;br&gt;</description>
<category>basic</category>
<link>http://tiddlywiki.abego-software.de#%5B%5BabegoExtensions%20News%5D%5D</link>
<pubDate>Wed, 18 Apr 2012 22:40:00 GMT</pubDate>
</item>
<item>
<title>FormTiddlerPlugin v1.0.7 and DataTiddlerPlugin v1.0.7 released</title>
<description>This release fixes incompatibilities of the &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#FormTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#FormTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;FormTiddlerPlugin&quot;&gt;FormTiddlerPlugin&lt;/a&gt; and &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#DataTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#DataTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;DataTiddlerPlugin&quot;&gt;DataTiddlerPlugin&lt;/a&gt; with newer &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TiddlyWiki&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TiddlyWiki&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TiddlyWiki&quot;&gt;TiddlyWiki&lt;/a&gt; versions.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Details:&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt; &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#FormTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#FormTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;FormTiddlerPlugin&quot;&gt;FormTiddlerPlugin&lt;/a&gt; v1.0.7&lt;ul&gt;&lt;li&gt; Bugfix: &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#FormTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#FormTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;FormTiddlerPlugin&quot;&gt;FormTiddlerPlugin&lt;/a&gt; fails to handle tiddlers with certain names in TW 2.6.5. Thanks to Terence Jacyno, Thomas Manley, Sebastjan Hribar, and Eric Shulman for reporting or suggesting a solution.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#DataTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#DataTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;DataTiddlerPlugin&quot;&gt;DataTiddlerPlugin&lt;/a&gt; v1.0.7&lt;ul&gt;&lt;li&gt; Bugfix: showData macro fails in TW 2.6.5 when tiddler title contains spaces. Thanks to Matt Shanks and Terence Jacyno for reporting.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;</description>
<link>http://tiddlywiki.abego-software.de#%5B%5BFormTiddlerPlugin%20v1.0.7%20and%20DataTiddlerPlugin%20v1.0.7%20released%5D%5D</link>
<pubDate>Wed, 18 Apr 2012 22:26:00 GMT</pubDate>
</item>
<item>
<title>Plugins</title>
<description>&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;th&gt;Plugin&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#AutoRefreshPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#AutoRefreshPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;AutoRefreshPlugin&quot;&gt;AutoRefreshPlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;A tiddler containing the &lt;code&gt;&amp;lt;&amp;lt;autoRefresh...&amp;gt;&amp;gt;&lt;/code&gt; macro is automatically refreshed (re-painted) whenever a tiddler changes.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#DataTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#DataTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;DataTiddlerPlugin&quot;&gt;DataTiddlerPlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;Enhance your tiddlers with structured data (such as strings, booleans, numbers, or even arrays and compound objects) that can be easily accessed and modified through named fields (in &lt;a href=&quot;javascript:;&quot; title=&quot;JavaScript - UdoBorkowski, 20. November 2005 02:50:00 MEZ&quot; class=&quot;tiddlyLink tiddlyLinkExisting&quot; refresh=&quot;link&quot; tiddlylink=&quot;JavaScript&quot;&gt;JavaScript&lt;/a&gt; code).&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#ForEachTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#ForEachTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;ForEachTiddlerPlugin&quot;&gt;ForEachTiddlerPlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Create customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#FormTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#FormTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;FormTiddlerPlugin&quot;&gt;FormTiddlerPlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;Use form-based tiddlers to enter your tiddler data using text fields, listboxes, checkboxes etc. (All standard HTML Form input elements supported).&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#IncludePlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#IncludePlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;IncludePlugin&quot;&gt;IncludePlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&#8222;Include&#8220; other TiddlyWikis in your &#8222;main&#8220; &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TiddlyWiki&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TiddlyWiki&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TiddlyWiki&quot;&gt;TiddlyWiki&lt;/a&gt;, link to included tiddlers, view them in your &#8222;main&#8220; &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TiddlyWiki&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TiddlyWiki&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TiddlyWiki&quot;&gt;TiddlyWiki&lt;/a&gt; (without opening another &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TiddlyWiki&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TiddlyWiki&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TiddlyWiki&quot;&gt;TiddlyWiki&lt;/a&gt;). Even &#8222;search&#8220; looks for included tiddlers. A great way to share tiddlers, to speed up &quot;save changes&quot; and to keep your TiddlyWikis small.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#IntelliTaggerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#IntelliTaggerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;IntelliTaggerPlugin&quot;&gt;IntelliTaggerPlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Speed up tagging tiddlers using tag autocompletion and correction, tag suggestions and context sensitive tag guessing, &quot;Edit Tags only&quot; mode and many more. Especially when you are working with a lot of tags this is the plugin you are looking for.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#IntelliTagsEditCommandPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#IntelliTagsEditCommandPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;IntelliTagsEditCommandPlugin&quot;&gt;IntelliTagsEditCommandPlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;A command for your tiddler's toolbar to directly edit the tiddler's tags using the &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#IntelliTaggerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#IntelliTaggerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;IntelliTaggerPlugin&quot;&gt;IntelliTaggerPlugin&lt;/a&gt;, without switching to &quot;edit mode&quot;.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#PartTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#PartTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;PartTiddlerPlugin&quot;&gt;PartTiddlerPlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;With the &lt;code&gt;&amp;lt;part aPartName&amp;gt; ... &amp;lt;/part&amp;gt;&lt;/code&gt; feature you can structure your tiddler text into separate parts. Each part can be referenced as a &quot;normal&quot; tiddler, using the &quot;tiddlerName/partName&quot; syntax.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#SettingsPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#SettingsPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;SettingsPlugin&quot;&gt;SettingsPlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Manage your option settings' scope: keep settings private to a TiddlyWiki or share them with other TiddlyWikis.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TiddlerWithParamsPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TiddlerWithParamsPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TiddlerWithParamsPlugin&quot;&gt;TiddlerWithParamsPlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;The plugin extends the build-in &lt;code&gt;&amp;lt;&amp;lt;tiddler...&amp;gt;&amp;gt;&lt;/code&gt; macro. It replaces placeholders ($1, $2, ...) in the tiddler by values passed with the macro before it inserts the (replaced) text at the macro's location.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#XHTML10Plugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#XHTML10Plugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;XHTML10Plugin&quot;&gt;XHTML10Plugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Make your &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TiddlyWiki&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TiddlyWiki&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TiddlyWiki&quot;&gt;TiddlyWiki&lt;/a&gt; XHTML 1.0 compliant.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;YourSearchPlugin&quot;&gt;YourSearchPlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Search your &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TiddlyWiki&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TiddlyWiki&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TiddlyWiki&quot;&gt;TiddlyWiki&lt;/a&gt; with advanced search features such as result lists, tiddler preview, result ranking, search filters, combined searches and many more.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;Read &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#Installing Plugins&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#Installing Plugins&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;Installing Plugins&quot;&gt;Installing Plugins&lt;/a&gt; on how to install these plugins in your &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TiddlyWiki&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TiddlyWiki&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TiddlyWiki&quot;&gt;TiddlyWiki&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Previous versions of these plugins (e.g. to run in older versions of &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TiddlyWiki&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TiddlyWiki&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TiddlyWiki&quot;&gt;TiddlyWiki&lt;/a&gt;) you may find in the &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/archive&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/archive&quot; target=&quot;_blank&quot;&gt;archive&lt;/a&gt;.</description>
<category>basic</category>
<link>http://tiddlywiki.abego-software.de#Plugins</link>
<pubDate>Tue, 17 Apr 2012 19:54:00 GMT</pubDate>
</item>
<item>
<title>XHTML10Plugin</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;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#XHTML10Plugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#XHTML10Plugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;XHTML10Plugin&quot;&gt;XHTML10Plugin&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Version:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;1.0.1 (2006-09-16)&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 class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/#XHTML10Plugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/#XHTML10Plugin&quot; target=&quot;_blank&quot;&gt;http://tiddlywiki.abego-software.de/#XHTML10Plugin&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;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#UdoBorkowski&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#UdoBorkowski&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;UdoBorkowski&quot;&gt;UdoBorkowski&lt;/a&gt; (ub [at] abego-software [dot] de)&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Licence:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://www.abego-software.de/legal/apl-v10.html&quot; title=&quot;External link to http://www.abego-software.de/legal/apl-v10.html&quot; target=&quot;_blank&quot;&gt;BSD open source license (abego Software)&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Copyright:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;&#169;&lt;/span&gt; 2005-2006 &lt;a class=&quot;externalLink&quot; href=&quot;http://www.abego-software.de&quot; title=&quot;External link to http://www.abego-software.de&quot; target=&quot;_blank&quot;&gt;abego Software&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.1.0&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Browser:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Firefox 1.5.0.2 or better; Internet Explorer 6.0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;Make your TiddlyWiki XHTML 1.0 compliant format.&lt;br&gt;&lt;br&gt;Once the plugin is installed the existing tiddlers of that &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TiddlyWiki&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TiddlyWiki&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TiddlyWiki&quot;&gt;TiddlyWiki&lt;/a&gt; are automatically converted to the new (XHTML 1.0 compliant) format on the first save. After that all changes are stored in the XHTML format.&lt;br&gt;&lt;br&gt;&lt;h1&gt;Source Code&lt;/h1&gt;&lt;pre&gt;// Ensure the Plugin is only installed once.
//
if (!version.extensions.XHTML10Plugin) {

if (version.major &amp;lt; 2 || (version.major == 2 &amp;amp;&amp;amp; version.minor &amp;lt; 1)) {
	(function() {
		var s = &quot;Use TiddlyWiki 2.1 or better to run the XHTML10Plugin.&quot;;
		alert(s);
		throw s;
	})();
}

version.extensions.XHTML10Plugin = {
	major: 1, minor: 0, revision: 1,
	date: new Date(2006, 8, 16),
	source: &quot;http://tiddlywiki.abego-software.de/#XHTML10Plugin&quot;,
	licence: &quot;[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]&quot;,
	copyright: &quot;Copyright (c) abego Software GmbH, 2005-2006 (www.abego-software.de)&quot;,
};

// Ensure the global abego namespace is set up.
if (!window.abego) window.abego = {};


//--------------------------------
// XHTML10Saver (inherits from SaverBase)

abego.XHTML10Saver = function() {};

abego.XHTML10Saver.prototype = new SaverBase();

abego.XHTML10Saver.prototype.externalizeTiddler = function(store, tiddler) {
	try {
		var s = '';
		store.forEachField(tiddler, 
			function(tiddler, fieldName, value) {
				// don't store stuff from the temp namespace
				if (!fieldName.match(/^temp\./)) {
					if (value)
						value = value.htmlEncode();
					s += ['&amp;lt;pre title=&quot;',fieldName,'&quot;&amp;gt;',value,'&amp;lt;/pre&amp;gt;'].join(&quot;&quot;);
				}
			});
		return ['&amp;lt;div title=&quot;',tiddler.title.htmlEncode(),'&quot;&amp;gt;',s,'&amp;lt;/div&amp;gt;'].join(&quot;&quot;);

	} catch (e) {
		showException(e, config.messages.tiddlerSaveError.format([tiddler.title]));
		return '';
	}
};

abego.XHTML10Saver.prototype.externalize = function(store) {
	return [&quot;&amp;lt;div class='twXHTML10'&amp;gt;\n&quot;,SaverBase.prototype.externalize.apply(this, arguments),&quot;\n&amp;lt;/div&amp;gt;&quot;].join(&quot;&quot;);
};


//--------------------------------
// Overwrite TiddlyWiki.prototype.getSaver to use the XHTML10 format on save

TiddlyWiki.prototype.getSaver = function() {
	if (!this.saver) 
		this.saver = new abego.XHTML10Saver();
	return this.saver;
};

//======================================
// Install the Loader into the HTML page

(function() {
	// The loader code will be inserted into the PostHead markup block,
	// so it can be executed before tiddlers are loaded. We cannot just put this
	// code into a normal plugin since this &quot;load&quot; code is required to load
	// tiddlers. I.e. this code must be executed before any tiddlers/plugins
	// can be loaded.

	var getXHTML10LoaderBlock = function() {
		// The loader code in a big JavaScript string.
		// You may get a non-stringified version of the XHTML10Loader source code at
		// http://tiddlywiki.abego-software.de/archive/XHTML10Plugin/1.0.1/XHTML10Plugin-1.0.1-loader.js

		XHTML10LoaderCode = 
			&quot;if (!window.abego) window.abego = {};\nif (!abego.XHTML10Loader) {\n\t//-&quot;+
			&quot;-------------------------------\n\t// abego.XHTML10Loader (inherits from&quot;+
			&quot; LoaderBase)\n\t\n\tabego.XHTML10Loader = function() {};\n\tabego.XHTML10Loa&quot;+
			&quot;der.prototype = new LoaderBase();\n\t\n\tabego.XHTML10Loader.prototype.lin&quot;+
			&quot;go = {\n\t\tunnamedValue: \&quot;Unnamed value\&quot;,\n\t\tredefining: \&quot;Redefining valu&quot;+
			&quot;e of %0\&quot;,\n\t\tnoXHTML10Format: \&quot;Storage not in XHTML 1.0 format\&quot;\n\t}\n\t\n\ta&quot;+
			&quot;bego.XHTML10Loader.prototype.getTitle = function(store, e) {\n\t\tvar tit&quot;+
			&quot;le = null;\n\t\tif(e.getAttribute)\n\t\t\ttitle = e.getAttribute('title');\n\t\t&quot;+
			&quot;if(!title &amp;amp;&amp;amp; e.id) {\t\n\t\t\tvar lenPrefix = store.idPrefix.length;\n\t\t\tif &quot;+
			&quot;(e.id.substr(0,lenPrefix) == store.idPrefix)\n\t\t\t\ttitle = e.id.substr(l&quot;+
			&quot;enPrefix);\n\t\t}\n\t\treturn title;\n\t};\n\t\n\tabego.XHTML10Loader.prototype.in&quot;+
			&quot;ternalizeTiddler = function(store, tiddler, title, data) {\n\t\tvar field&quot;+
			&quot;s = {};\n\t\tvar elems = data.childNodes;\n\t\tfor(var i = 0; i &amp;lt; elems.leng&quot;+
			&quot;th; i++) {\n\t\t\tvar e = elems[i];\n\t\t\tvar name = e.getAttribute('title');&quot;+
			&quot;\n\t\t\tif (!name) \n\t\t\t\tthrow this.lingo.unnamedValue;\n\t\t\tif (fields[name]&quot;+
			&quot; !== undefined) \n\t\t\t\tthrow this.lingo.redefining.format([name]);\n\t\t\tfi&quot;+
			&quot;elds[name] = getNodeText(e.firstChild); \n\t\t}\n\t\n\t\t// Extract (and remov&quot;+
			&quot;e) the standard fields from the extended fields\n\t\tvar text = fields.te&quot;+
			&quot;xt;\n\t\tvar modifier = fields.modifier;\n\t\tvar modified = Date.convertFro&quot;+
			&quot;mYYYYMMDDHHMM(fields.modified);\n\t\tvar c = fields.created;\n\t\tvar create&quot;+
			&quot;d = c ? Date.convertFromYYYYMMDDHHMM(c) : modified;\n\t\tvar tags = field&quot;+
			&quot;s.tags;\n\t\tdelete fields.modifier;\n\t\tdelete fields.modified;\n\t\tdelete f&quot;+
			&quot;ields.created;\n\t\tdelete fields.tags;\n\t\tdelete fields.text;\n\t\tdelete fi&quot;+
			&quot;elds.title;\n\t\n\t\ttiddler.assign(title,text,modifier,modified,tags,creat&quot;+
			&quot;ed,fields);\n\t\t\n\t\treturn tiddler;\n\t};\n\t\n\tvar findRootNode = function(no&quot;+
			&quot;des) {\n\t\tif (nodes) {\n\t\t\t// skip leading text nodes\n\t\t\tfor (var i = 0;&quot;+
			&quot; i &amp;lt; nodes.length; i++)\n\t\t\t\tif (nodes[i].nodeType != 3)\n\t\t\t\t\tbreak;\n\t\t&quot;+
			&quot;\t\t\t\n\t\t\tif (i &amp;lt; nodes.length &amp;amp;&amp;amp; nodes[i].className == 'twXHTML10')\n\t\t\t\t&quot;+
			&quot;return nodes[i];\n\t\t}\n\t};\n\t\n\tabego.XHTML10Loader.prototype.loadTiddlers&quot;+
			&quot; = function(store,nodes) {\n\t\t// in the twXHMTL10 format all tiddler el&quot;+
			&quot;ements are contained in one enclosing DIV\n\t\t// that contains the forma&quot;+
			&quot;t information\n\t\tvar root = findRootNode(nodes)\n\t\tif (!root) \n\t\t\tthrow &quot;+
			&quot;this.lingo.noXHTML10Format;\n\t\treturn LoaderBase.prototype.loadTiddlers&quot;+
			&quot;.apply(this, [store, root.childNodes]);\n\t};\n\t\n\t\n\t//-------------------&quot;+
			&quot;-------------\n\t// Hijack the loadFromDiv\n\t(function() {\n\t\tvar origTidd&quot;+
			&quot;lyWikiLoadFromDiv = TiddlyWiki.prototype.loadFromDiv;\n\t\tTiddlyWiki.pro&quot;+
			&quot;totype.loadFromDiv = function(srcID,idPrefix) {\n\t\t\t// use the XHTML 1.&quot;+
			&quot;0 loader when the storearea is in 'twXHTML10' format,\n\t\t\t// otherwise &quot;+
			&quot;use the default loader\n\t\t\tvar e = document.getElementById(srcID);\n\t\t\ti&quot;+
			&quot;f (e &amp;amp;&amp;amp; findRootNode(e.childNodes))\n\t\t\t\tthis.loader = new abego.XHTML1&quot;+
			&quot;0Loader();\n\t\t\treturn origTiddlyWikiLoadFromDiv.apply(this, arguments);&quot;+
			&quot;\n\t\t};\n\t})();\n}\n\n&quot;;
		return '&amp;lt;'+'script type=&quot;text/javascript&quot;&amp;gt;\n//&amp;lt;![CDATA[\n'+XHTML10LoaderCode+'\n//]]&amp;gt;\n&amp;lt;/script'+'&amp;gt;\n';
	};

	var insertLoaderBlock = function() {
		if (!store)
			throw &quot;XHTML10LoaderInstaller must run as a plugin&quot;;
			
		var START = &quot;&amp;lt;!--XHMTL10Loader-START--&amp;gt;&quot;;
		var END = &quot;&amp;lt;!--XHMTL10Loader-END--&amp;gt;&quot;;
		
		var postHeadText = store.getTiddlerText(&quot;MarkupPostHead&quot;);
		if (postHeadText.getChunk(START, END)) 
			return; // already installed

		postHeadText += &quot;\n&quot;+START+getXHTML10LoaderBlock()+END+&quot;\n&quot;;
		var tiddler = store.getTiddler(&quot;MarkupPostHead&quot;);
		var tags = tiddler ? tiddler.tags : [];
		store.saveTiddler(&quot;MarkupPostHead&quot;,&quot;MarkupPostHead&quot;,postHeadText,config.options.txtUserName,new Date(),tags);
		alert(&quot;XHTML10Loader installed.\nPlease save and reload your TiddlyWiki to complete the installation. After that your TiddlyWiki will be stored in an XHTML 1.0 compliant format.&quot;);
	};
	
	insertLoaderBlock();														
})();

} // of single install
&lt;/pre&gt;</description>
<category>Plugin</category>
<category>Public</category>
<category>XHTML10Plugin</category>
<link>http://tiddlywiki.abego-software.de#XHTML10Plugin</link>
<pubDate>Mon, 16 Apr 2012 21:38:00 GMT</pubDate>
</item>
<item>
<title>TiddlerWithParamsPlugin</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;TiddlerWithParamsPlugin&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Version:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;1.0.1 (2006-03-22)&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 class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/#TiddlerWithParamsPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/#TiddlerWithParamsPlugin&quot; target=&quot;_blank&quot;&gt;http://tiddlywiki.abego-software.de/#TiddlerWithParamsPlugin&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;UdoBorkowski (ub [at] abego-software [dot] de)&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Licence:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#BSD open source license&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#BSD open source license&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;BSD open source license&quot;&gt;BSD open source license&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h1&gt;Description&lt;/h1&gt;&lt;br&gt;The TiddlerWithParamsPlugin extends the build-in &lt;code&gt;&amp;lt;&amp;lt;tiddler...&amp;gt;&amp;gt;&lt;/code&gt; macro. It replaces placeholders ($1, $2, ...) in the given tiddler by values passed with the macro. Then it inserts the (replaced) text, just like the original &lt;code&gt;&amp;lt;&amp;lt;tiddler...&amp;gt;&amp;gt;&lt;/code&gt; macro.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Syntax:&lt;/strong&gt; &lt;br&gt;&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt;&lt;strong&gt;tiddler &lt;/strong&gt; &lt;em&gt;tiddlerName&lt;/em&gt; [&lt;em&gt;className&lt;/em&gt;] [&lt;strong&gt;asText&lt;/strong&gt;] [&lt;strong&gt;with:&lt;/strong&gt; &lt;em&gt;arguments&lt;/em&gt; ] [&lt;strong&gt;prefix:&lt;/strong&gt; &lt;em&gt;prefixString&lt;/em&gt;] &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;em&gt;tiddlerName&lt;/em&gt;&lt;/td&gt;&lt;td&gt;The name of the tiddler to be included. The tiddler may contain placeholders ($1, $2, ... $9) that will be replaced with the values passed with the macro&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;em&gt;className&lt;/em&gt;&lt;/td&gt;&lt;td&gt;The (CSS) class to be used around the embedded tiddler&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;asText&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;When defined the (replaced) content of the tiddler is inserted as pure text, i.e. it is not &quot;wikified&quot;.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;em&gt;arguments&lt;/em&gt;&lt;/td&gt;&lt;td&gt;up to 9 arguments may be passed to the macro, used as the values for the placeholders $1, $2, ... $9 in the referenced template&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;em&gt;prefixString&lt;/em&gt;&lt;/td&gt;&lt;td&gt;By default the placeholders $1, $2, $3,..., $9 are used. But you may change the &quot;prefix&quot; before the placeholder number (&quot;$&quot;) to some other text through the &quot;prefix:&quot; option. This may be necessary when you are using the $n in the tiddler you are referencing (e.g. when you are using regular expressions).&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;sub&gt;Syntax formatting: Keywords in &lt;strong&gt;bold&lt;/strong&gt;, optional parts in [...]. &lt;/sub&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;h1&gt;Example&lt;/h1&gt;&lt;br&gt;The following &lt;strong&gt;&lt;em&gt;ProjectTemplate&lt;/em&gt;&lt;/strong&gt; tiddler defines an &quot;Overview&quot; page for a project, that gives access to various &quot;sub-tiddlers&quot; used in the project, that follow a static naming schema (e.g. all Notes for any project are stored in a tiddler called &quot;&lt;em&gt;projectName&lt;/em&gt; Notes&quot;). $1 holds the name of the Project (e.g. &quot;ForEachTiddler&quot;), $2 holds the type of the published component (e.g. &quot;Plugin&quot;, &quot;Macro&quot;, &quot;Function&quot;).&lt;br&gt;&lt;pre&gt;![[$1Project]] Overview
* [[$1$2]]
* [[ToDo|$1 ToDos]]
* [[Notes|$1 Notes]]
* [[Examples|$1Examples]]
* [[Tests|$1 Tests]]
* [[Open Bugs/CRs|$1 Open Bugs and ChangeRequests]]
&lt;/pre&gt;&lt;br&gt;This template is now used in the &lt;strong&gt;&lt;em&gt;ForEachTiddlerProject&lt;/em&gt;&lt;/strong&gt; tiddler:&lt;br&gt;&lt;pre&gt;&amp;lt;&amp;lt;tiddler ProjectTemplate with: ForEachTiddler Plugin&amp;gt;&amp;gt;
&lt;/pre&gt;&lt;br&gt;This results in the following tiddler text for the &lt;strong&gt;&lt;em&gt;ForEachTiddlerProject&lt;/em&gt;&lt;/strong&gt; tiddler:&lt;br&gt;&lt;pre&gt;![[ForEachTiddlerProject]] Overview
* [[ForEachTiddlerPlugin]]
* [[ToDo|ForEachTiddler ToDos]]
* [[Notes|ForEachTiddler Notes]]
* [[Examples|ForEachTiddlerExamples]]
* [[Tests|ForEachTiddler Tests]]
* [[Open Bugs/CRs|ForEachTiddler Open Bugs and ChangeRequests]]
&lt;/pre&gt;&lt;br&gt;&lt;h1&gt;Revision history&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; v1.0.0 (2006-01-20)&lt;ul&gt;&lt;li&gt; initial version&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.1 (2006-03-22)&lt;ul&gt;&lt;li&gt; Added 'asText' option&lt;/li&gt;&lt;li&gt; Support Safari (Thanks to Elise Springer for reporting the problem)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;Code&lt;/h1&gt;&lt;pre&gt;//============================================================================
// TiddlerWithParamsPlugin
//============================================================================

// Ensure that the Plugin is only installed once.
//
if (!version.extensions.TiddlerWithParamsPlugin) {

version.extensions.TiddlerWithParamsPlugin = {
	major: 1, minor: 0, revision: 1, 
	date: new Date(2006,3,22), 
	type: 'plugin',
	source: &quot;http://tiddlywiki.abego-software.de/#TiddlerWithParamsPlugin&quot;
};

// ---------------------------------------------------------------------------
// Helpers
// ---------------------------------------------------------------------------

var indexInArray = function(array, item) {
	for (var i = 0; i &amp;lt; array.length; i++) {
		if (array[i] == item) {
			return i;
		}
	}
	return -1;
}

var myEscapeRegExp = function(s)
{
	// The original escapeRegExp function does not work with Safari (2.0.3) 
	// since the $&amp;amp; is not implemented.
var t = s.replace(/\\/g, &quot;\\\\&quot;);
	t = t.replace(/\^/g, &quot;\\^&quot;);
	t = t.replace(/\$/g, &quot;\\$&quot;);
	t = t.replace(/\*/g, &quot;\\*&quot;);
	t = t.replace(/\+/g, &quot;\\+&quot;);
	t = t.replace(/\?/g, &quot;\\?&quot;);
	t = t.replace(/\(/g, &quot;\\(&quot;);
	t = t.replace(/\)/g, &quot;\\)&quot;);
	t = t.replace(/\=/g, &quot;\\=&quot;);
	t = t.replace(/\!/g, &quot;\\!&quot;);
	t = t.replace(/\|/g, &quot;\\|&quot;);
	t = t.replace(/\,/g, &quot;\\,&quot;);
	t = t.replace(/\{/g, &quot;\\{&quot;);
	t = t.replace(/\}/g, &quot;\\}&quot;);
	t = t.replace(/\[/g, &quot;\\[&quot;);
	t = t.replace(/\]/g, &quot;\\]&quot;);
	t = t.replace(/\./g, &quot;\\.&quot;);

    return t;
}

// ---------------------------------------------------------------------------
// The (hijacked) tiddler Macro Handler 
// ---------------------------------------------------------------------------

config.macros.tiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
	
	var className = null;
	var argsStart = -1;
	var doWikify = true;

	var iParams = 1;
	if (params[iParams] != &quot;asText&quot; &amp;amp;&amp;amp; params[iParams] != &quot;with:&quot;) {
		className = params[iParams++];
	}
	if (params[iParams] == &quot;asText&quot;) {
		iParams++;
		doWikify = false;
	}
	if (params[iParams] == &quot;with:&quot;) {
		iParams++;
		argsStart = iParams;
	}
	
	var wrapper = createTiddlyElement(place,&quot;span&quot;,null,className ? className : null,null);
	var text = store.getTiddlerText(params[0]);
	if(text) {
		// Check for recursion
		var tiddlerName = params[0];
		var stack = config.macros.tiddler.tiddlerStack;
		if (stack.find(tiddlerName) !== null) return;

		if (argsStart &amp;gt;= 0) {
			// The params between the &quot;with:&quot; and the &quot;prefix:&quot; (or the end) are the arguments,
			// The param behind the &quot;prefix:&quot; is the prefix before the placeholder numbers.
			var argsEnd = params.length;
			var prefix = &quot;$&quot;;
			var prefixIndex = indexInArray(params, &quot;prefix:&quot;);
			if (prefixIndex &amp;gt;= argsStart) {
				argsEnd = prefixIndex;
				if (prefixIndex &amp;lt; (params.length-1)) {
					prefix = params[prefixIndex+1];
				}
			}
			// to avoid any &quot;special RE chars&quot; problems with the prefix string escape all chars.
			prefix = myEscapeRegExp(prefix);
			
			var args = params.slice(argsStart, argsEnd);
			var n = Math.min(args.length, 9);
			for (var i = 0; i &amp;lt; n; i++) {
				var value = args[i];
				
				var placeholderRE = new RegExp(prefix+(i+1),&quot;mg&quot;);
				text = text.replace(placeholderRE, value);
			}
		}
		stack.push(tiddlerName);
		try {
			if (doWikify) {
				wikify(text,wrapper,null,store.getTiddler(params[0]));
			} else {
				wrapper.appendChild(document.createTextNode(text));
			}
		} finally {			
			stack.pop();
		}
	}
}
config.macros.tiddler.tiddlerStack = [];

// End of &quot;install only once&quot;
}

//============================================================================
// End of TiddlerWithParamsPlugin
//============================================================================
&lt;/pre&gt;&lt;h1&gt;Licence and Copyright&lt;/h1&gt;Copyright (c) abego Software GmbH, 2006 (&lt;a class=&quot;externalLink&quot; href=&quot;http://www.abego-software.de&quot; title=&quot;External link to http://www.abego-software.de&quot; target=&quot;_blank&quot;&gt;www.abego-software.de&lt;/a&gt;)&lt;br&gt;&lt;br&gt;Redistribution and use in source and binary forms, with or without modification,&lt;br&gt;are permitted provided that the following conditions are met:&lt;br&gt;&lt;br&gt;Redistributions of source code must retain the above copyright notice, this&lt;br&gt;list of conditions and the following disclaimer.&lt;br&gt;&lt;br&gt;Redistributions in binary form must reproduce the above copyright notice, this&lt;br&gt;list of conditions and the following disclaimer in the documentation and/or other&lt;br&gt;materials provided with the distribution.&lt;br&gt;&lt;br&gt;Neither the name of abego Software nor the names of its contributors may be&lt;br&gt;used to endorse or promote products derived from this software without specific&lt;br&gt;prior written permission.&lt;br&gt;&lt;br&gt;THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot; AND ANY&lt;br&gt;EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES&lt;br&gt;OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT&lt;br&gt;SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,&lt;br&gt;INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED&lt;br&gt;TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR&lt;br&gt;BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN&lt;br&gt;CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN&lt;br&gt;ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH&lt;br&gt;DAMAGE.&lt;br&gt;</description>
<category>systemConfig</category>
<link>http://tiddlywiki.abego-software.de#TiddlerWithParamsPlugin</link>
<pubDate>Mon, 16 Apr 2012 21:38:00 GMT</pubDate>
</item>
<item>
<title>PartTiddlerPlugin</title>
<description>&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;span&gt;&lt;a name=&quot;Top&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;strong&gt;Name:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;PartTiddlerPlugin&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Version:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;1.0.10 (2011-05-23)&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 class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/#PartTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/#PartTiddlerPlugin&quot; target=&quot;_blank&quot;&gt;http://tiddlywiki.abego-software.de/#PartTiddlerPlugin&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;UdoBorkowski (ub [at] abego-software [dot] de)&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Licence:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#BSD open source license&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#BSD open source license&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;BSD open source license&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.1.3&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Browser:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Firefox 1.0.4+; InternetExplorer 6.0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h1&gt;Table of Content&lt;span&gt;&lt;a name=&quot;TOC&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; &lt;span&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;window.scrollAnchorVisible('Description',null, event)&quot;&gt;Description, Syntax&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt; &lt;span&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;window.scrollAnchorVisible('Applications',null, event)&quot;&gt;Applications&lt;/a&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt; &lt;span&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;window.scrollAnchorVisible('LongTiddler',null, event)&quot;&gt;Refering to Paragraphs of a Longer Tiddler&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt; &lt;span&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;window.scrollAnchorVisible('Citation',null, event)&quot;&gt;Citation Index&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt; &lt;span&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;window.scrollAnchorVisible('TableCells',null, event)&quot;&gt;Creating &quot;multi-line&quot; Table Cells&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt; &lt;span&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;window.scrollAnchorVisible('Tabs',null, event)&quot;&gt;Creating Tabs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt; &lt;span&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;window.scrollAnchorVisible('Sliders',null, event)&quot;&gt;Using Sliders&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;span&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;window.scrollAnchorVisible('Revisions',null, event)&quot;&gt;Revision History&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt; &lt;span&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;window.scrollAnchorVisible('Code',null, event)&quot;&gt;Code&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;Description&lt;span&gt;&lt;a name=&quot;Description&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;With the &lt;code&gt;&amp;lt;part aPartName&amp;gt; ... &amp;lt;/part&amp;gt;&lt;/code&gt; feature you can structure your tiddler text into separate (named) parts. &lt;br&gt;Each part can be referenced as a &quot;normal&quot; tiddler, using the &quot;&lt;em&gt;tiddlerName&lt;/em&gt;&lt;strong&gt;/&lt;/strong&gt;&lt;em&gt;partName&lt;/em&gt;&quot; syntax (e.g. &quot;About/Features&quot;).  E.g. you may create links to the parts (e.g. &lt;code&gt;[[Quotes/BAX95]]&lt;/code&gt; or &lt;code&gt;[[Hobbies|AboutMe/Hobbies]]&lt;/code&gt;), use it in &lt;code&gt;&amp;lt;&amp;lt;tiddler...&amp;gt;&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;&amp;lt;tabs...&amp;gt;&amp;gt;&lt;/code&gt; macros etc.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;Syntax:&lt;/strong&gt; &lt;br&gt;&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;strong&gt;&amp;lt;part&lt;/strong&gt; &lt;em&gt;partName&lt;/em&gt; [&lt;strong&gt;hidden&lt;/strong&gt;] &lt;strong&gt;&amp;gt;&lt;/strong&gt; &lt;em&gt;any tiddler content&lt;/em&gt; &lt;strong&gt;&amp;lt;/part&amp;gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;em&gt;partName&lt;/em&gt;&lt;/td&gt;&lt;td&gt;The name of the part. You may reference a part tiddler with the combined tiddler name &quot;&lt;em&gt;nameOfContainerTidder&lt;/em&gt;&lt;strong&gt;/&lt;/strong&gt;&lt;em&gt;partName&lt;/em&gt;. &lt;br&gt;If you use a partName containing spaces you need to quote it (e.g. &lt;code&gt;&quot;Major Overview&quot;&lt;/code&gt; or &lt;code&gt;[[Shortcut List]]&lt;/code&gt;).&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;hidden&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;When defined the content of the part is not displayed in the container tiddler. But when the part is explicitly referenced (e.g. in a &lt;code&gt;&amp;lt;&amp;lt;tiddler...&amp;gt;&amp;gt;&lt;/code&gt; macro or in a link) the part's content is displayed.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;span&gt;&lt;i&gt;any&amp;nbsp;tiddler&amp;nbsp;content&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;The content of the part.&lt;br&gt;A part can have any content that a &quot;normal&quot; tiddler may have, e.g. you may use all the formattings and macros defined.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;sub&gt;Syntax formatting: Keywords in &lt;strong&gt;bold&lt;/strong&gt;, optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.&lt;/sub&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span&gt;&lt;sub&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;window.scrollAnchorVisible('Top',null, event)&quot;&gt;[Top]&lt;/a&gt;&lt;/sub&gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;h1&gt;Applications&lt;span&gt;&lt;a name=&quot;Applications&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;h2&gt;Refering to Paragraphs of a Longer Tiddler&lt;span&gt;&lt;a name=&quot;LongTiddler&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;Assume you have written a long description in a tiddler and now you want to refer to the content of a certain paragraph in that tiddler (e.g. some definition.) Just wrap the text with a &lt;strong&gt;part&lt;/strong&gt; block, give it a nice name, create a &quot;pretty link&quot; (like &lt;code&gt;[[Discussion Groups|Introduction/DiscussionGroups]]&lt;/code&gt;) and you are done.&lt;br&gt;&lt;br&gt;Notice this complements the approach to first writing a lot of small tiddlers and combine these tiddlers to one larger tiddler in a second step (e.g. using the &lt;code&gt;&amp;lt;&amp;lt;tiddler...&amp;gt;&amp;gt;&lt;/code&gt; macro). Using the &lt;strong&gt;part&lt;/strong&gt; feature you can first write a &quot;classic&quot; (longer) text that can be read &quot;from top to bottom&quot; and later &quot;reuse&quot; parts of this text for some more &quot;non-linear&quot; reading.&lt;br&gt;&lt;br&gt;&lt;span&gt;&lt;sub&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;window.scrollAnchorVisible('Top',null, event)&quot;&gt;[Top]&lt;/a&gt;&lt;/sub&gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;h2&gt;Citation Index&lt;span&gt;&lt;a name=&quot;Citation&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;Create a tiddler &quot;Citations&quot; that contains your &quot;citations&quot;. &lt;br&gt;Wrap every citation with a part and a proper name. &lt;br&gt;&lt;br&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;br&gt;&lt;pre&gt;&amp;lt;part BAX98&amp;gt;Baxter, Ira D. et al: //Clone Detection Using Abstract Syntax Trees.// 
in //Proc. ICSM//, 1998.&amp;lt;/part&amp;gt;

&amp;lt;part BEL02&amp;gt;Bellon, Stefan: //Vergleich von Techniken zur Erkennung duplizierten Quellcodes.// 
Thesis, Uni Stuttgart, 2002.&amp;lt;/part&amp;gt;

&amp;lt;part DUC99&amp;gt;Ducasse, St&#65533;fane et al: //A Language Independent Approach for Detecting Duplicated Code.// 
in //Proc. ICSM//, 1999.&amp;lt;/part&amp;gt;
&lt;/pre&gt;&lt;br&gt;You may now &quot;cite&quot; them just by using a pretty link like &lt;code&gt;[[Citations/BAX98]]&lt;/code&gt; or even more pretty, like this &lt;code&gt;[[BAX98|Citations/BAX98]]&lt;/code&gt;.&lt;br&gt;&lt;br&gt;&lt;span&gt;&lt;sub&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;window.scrollAnchorVisible('Top',null, event)&quot;&gt;[Top]&lt;/a&gt;&lt;/sub&gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;h2&gt;Creating &quot;multi-line&quot; Table Cells&lt;span&gt;&lt;a name=&quot;TableCells&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;You may have noticed that it is hard to create table cells with &quot;multi-line&quot; content. E.g. if you want to create a bullet list inside a table cell you cannot just write the bullet list&lt;br&gt;&lt;pre&gt;* Item 1
* Item 2
* Item 3
&lt;/pre&gt;into a table cell (i.e. between the | ... | bars) because every bullet item must start in a new line but all cells of a table row must be in one line.&lt;br&gt;&lt;br&gt;Using the &lt;strong&gt;part&lt;/strong&gt; feature this problem can be solved. Just create a hidden part that contains the cells content and use a &lt;code&gt;&amp;lt;&amp;lt;tiddler &amp;gt;&amp;gt;&lt;/code&gt; macro to include its content in the table's cell.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;br&gt;&lt;pre&gt;|!Subject|!Items|
|subject1|&amp;lt;&amp;lt;tiddler ./Cell1&amp;gt;&amp;gt;|
|subject2|&amp;lt;&amp;lt;tiddler ./Cell2&amp;gt;&amp;gt;|

&amp;lt;part Cell1 hidden&amp;gt;
* Item 1
* Item 2
* Item 3
&amp;lt;/part&amp;gt;
...
&lt;/pre&gt;&lt;br&gt;Notice that inside the &lt;code&gt;&amp;lt;&amp;lt;tiddler ...&amp;gt;&amp;gt;&lt;/code&gt; macro you may refer to the &quot;current tiddler&quot; using the &quot;.&quot;.&lt;br&gt;&lt;br&gt;BTW: The same approach can be used to create bullet lists with items that contain more than one line.&lt;br&gt;&lt;br&gt;&lt;span&gt;&lt;sub&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;window.scrollAnchorVisible('Top',null, event)&quot;&gt;[Top]&lt;/a&gt;&lt;/sub&gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;h2&gt;Creating Tabs&lt;span&gt;&lt;a name=&quot;Tabs&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;The build-in &lt;code&gt;&amp;lt;&amp;lt;tabs ...&amp;gt;&amp;gt;&lt;/code&gt; macro requires that you defined an additional tiddler for every tab it displays. When you want to have &quot;nested&quot; tabs you need to define a tiddler for the &quot;main tab&quot; and one for every tab it contains. I.e. the definition of a set of tabs that is visually displayed at one place is distributed across multiple tiddlers.&lt;br&gt;&lt;br&gt;With the &lt;strong&gt;part&lt;/strong&gt; feature you can put the complete definition in one tiddler, making it easier to keep an overview and maintain the tab sets.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;br&gt;The standard tabs at the sidebar are defined by the following eight tiddlers:&lt;br&gt;&lt;ul&gt;&lt;li&gt; &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#SideBarTabs&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#SideBarTabs&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;SideBarTabs&quot;&gt;SideBarTabs&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TabAll&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TabAll&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TabAll&quot;&gt;TabAll&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TabMore&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TabMore&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TabMore&quot;&gt;TabMore&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TabMoreMissing&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TabMoreMissing&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TabMoreMissing&quot;&gt;TabMoreMissing&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TabMoreOrphans&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TabMoreOrphans&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TabMoreOrphans&quot;&gt;TabMoreOrphans&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TabMoreShadowed&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TabMoreShadowed&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TabMoreShadowed&quot;&gt;TabMoreShadowed&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TabTags&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TabTags&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TabTags&quot;&gt;TabTags&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TabTimeline&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TabTimeline&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TabTimeline&quot;&gt;TabTimeline&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;Instead of these eight tiddlers one could define the following &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#SideBarTabs&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#SideBarTabs&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;SideBarTabs&quot;&gt;SideBarTabs&lt;/a&gt; tiddler that uses the &lt;strong&gt;part&lt;/strong&gt; feature:&lt;br&gt;&lt;pre&gt;&amp;lt;&amp;lt;tabs txtMainTab 
    Timeline Timeline SideBarTabs/Timeline 
    All 'All tiddlers' SideBarTabs/All 
    Tags 'All tags' SideBarTabs/Tags 
    More 'More lists' SideBarTabs/More&amp;gt;&amp;gt;
&amp;lt;part Timeline hidden&amp;gt;&amp;lt;&amp;lt;timeline&amp;gt;&amp;gt;&amp;lt;/part&amp;gt;
&amp;lt;part All hidden&amp;gt;&amp;lt;&amp;lt;list all&amp;gt;&amp;gt;&amp;lt;/part&amp;gt;
&amp;lt;part Tags hidden&amp;gt;&amp;lt;&amp;lt;allTags&amp;gt;&amp;gt;&amp;lt;/part&amp;gt;
&amp;lt;part More hidden&amp;gt;&amp;lt;&amp;lt;tabs txtMoreTab 
    Missing 'Missing tiddlers' SideBarTabs/Missing 
    Orphans 'Orphaned tiddlers' SideBarTabs/Orphans 
    Shadowed 'Shadowed tiddlers' SideBarTabs/Shadowed&amp;gt;&amp;gt;&amp;lt;/part&amp;gt;
&amp;lt;part Missing hidden&amp;gt;&amp;lt;&amp;lt;list missing&amp;gt;&amp;gt;&amp;lt;/part&amp;gt;
&amp;lt;part Orphans hidden&amp;gt;&amp;lt;&amp;lt;list orphans&amp;gt;&amp;gt;&amp;lt;/part&amp;gt;
&amp;lt;part Shadowed hidden&amp;gt;&amp;lt;&amp;lt;list shadowed&amp;gt;&amp;gt;&amp;lt;/part&amp;gt;
&lt;/pre&gt;&lt;br&gt;Notice that you can easily &quot;overwrite&quot; individual parts in separate tiddlers that have the full name of the part.&lt;br&gt;&lt;br&gt;E.g. if you don't like the classic timeline tab but only want to see the 100 most recent tiddlers you could create a tiddler &quot;SideBarTabs/Timeline&quot; with the following content:&lt;br&gt;&lt;pre&gt;&amp;lt;&amp;lt;forEachTiddler 
		sortBy 'tiddler.modified' descending 
		write '(index &amp;lt; 100) ? &quot;* [[&quot;+tiddler.title+&quot;]]\n&quot;:&quot;&quot;'&amp;gt;&amp;gt;
&lt;/pre&gt;&lt;span&gt;&lt;sub&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;window.scrollAnchorVisible('Top',null, event)&quot;&gt;[Top]&lt;/a&gt;&lt;/sub&gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;h2&gt;Using Sliders&lt;span&gt;&lt;a name=&quot;Sliders&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;Very similar to the build-in &lt;code&gt;&amp;lt;&amp;lt;tabs ...&amp;gt;&amp;gt;&lt;/code&gt; macro (see above) the &lt;code&gt;&amp;lt;&amp;lt;slider ...&amp;gt;&amp;gt;&lt;/code&gt; macro requires that you defined an additional tiddler that holds the content &quot;to be slid&quot;. You can avoid creating this extra tiddler by using the &lt;strong&gt;part&lt;/strong&gt; feature&lt;br&gt;&lt;br&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;br&gt;In a tiddler &quot;About&quot; we may use the slider to show some details that are documented in the tiddler's &quot;Details&quot; part.&lt;br&gt;&lt;pre&gt;...
&amp;lt;&amp;lt;slider chkAboutDetails About/Details details &quot;Click here to see more details&quot;&amp;gt;&amp;gt;
&amp;lt;part Details hidden&amp;gt;
To give you a better overview ...
&amp;lt;/part&amp;gt;
...
&lt;/pre&gt;&lt;br&gt;Notice that putting the content of the slider into the slider's tiddler also has an extra benefit: When you decide you need to edit the content of the slider you can just doubleclick the content, the tiddler opens for editing and you can directly start editing the content (in the part section). In the &quot;old&quot; approach you would doubleclick the tiddler, see that the slider is using tiddler X, have to look for the tiddler X and can finally open it for editing. So using the &lt;strong&gt;part&lt;/strong&gt; approach results in a much short workflow.&lt;br&gt;&lt;br&gt;&lt;span&gt;&lt;sub&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;window.scrollAnchorVisible('Top',null, event)&quot;&gt;[Top]&lt;/a&gt;&lt;/sub&gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;h1&gt;Revision history&lt;span&gt;&lt;a name=&quot;Revisions&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; v1.0.10 (2011-05-23)&lt;ul&gt;&lt;li&gt; Adapt to TW 2.6.2 default behaviour when existing tiddlers are opened (don't select text) and fixed Firefox 4 issue. Thanks to dave for reporting the issue.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.9 (2007-07-14)&lt;ul&gt;&lt;li&gt; Bugfix: Error when using the &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#SideBarTabs&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#SideBarTabs&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;SideBarTabs&quot;&gt;SideBarTabs&lt;/a&gt; example and switching between &quot;More&quot; and &quot;Shadow&quot;. Thanks to cmari for reporting the issue.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.8 (2007-06-16)&lt;ul&gt;&lt;li&gt; Speeding up display of tiddlers containing multiple pard definitions. Thanks to Paco Rivi&#65533;re for reporting the issue.&lt;/li&gt;&lt;li&gt; Support &quot;./partName&quot; syntax inside &lt;code&gt;&amp;lt;&amp;lt;tabs ...&amp;gt;&amp;gt;&lt;/code&gt; macro&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.7 (2007-03-07)&lt;ul&gt;&lt;li&gt; Bugfix: &lt;span&gt;&lt;/span&gt; does not always render correctly after a refresh (e.g. like it happens when using the &quot;Include&quot; plugin). Thanks to Morris Gray for reporting the bug.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.6 (2006-11-07)&lt;ul&gt;&lt;li&gt; Bugfix: cannot edit tiddler when UploadPlugin by Bidix is installed. Thanks to Jos&#65533; Luis Gonz&#65533;lez Castro for reporting the bug.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.5 (2006-03-02)&lt;ul&gt;&lt;li&gt; Bugfix: Example with multi-line table cells does not work in IE6. Thanks to Paulo Soares for reporting the bug.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.4 (2006-02-28)&lt;ul&gt;&lt;li&gt; Bugfix: Shadow tiddlers cannot be edited (in TW 2.0.6). Thanks to Torsten Vanek for reporting the bug.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.3 (2006-02-26)&lt;ul&gt;&lt;li&gt; Adapt code to newly introduced Tiddler.prototype.isReadOnly() function (in TW 2.0.6). Thanks to Paulo Soares for reporting the problem.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.2 (2006-02-05)&lt;ul&gt;&lt;li&gt; Also allow other macros than the &quot;tiddler&quot; macro use the &quot;.&quot; in the part reference (to refer to &quot;this&quot; tiddler)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.1 (2006-01-27)&lt;ul&gt;&lt;li&gt; Added Table of Content for plugin documentation. Thanks to RichCarrillo for suggesting.&lt;/li&gt;&lt;li&gt; Bugfix: newReminder plugin does not work when PartTiddler is installed. Thanks to PauloSoares for reporting.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.0 (2006-01-25)&lt;ul&gt;&lt;li&gt; initial version&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;&lt;sub&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;window.scrollAnchorVisible('Top',null, event)&quot;&gt;[Top]&lt;/a&gt;&lt;/sub&gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;h1&gt;Code&lt;span&gt;&lt;a name=&quot;Code&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;span&gt;&lt;sub&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;window.scrollAnchorVisible('Top',null, event)&quot;&gt;[Top]&lt;/a&gt;&lt;/sub&gt;&lt;/span&gt;&lt;br&gt;&lt;pre&gt;//============================================================================
//                           PartTiddlerPlugin

// Ensure that the PartTiddler Plugin is only installed once.
//
if (!version.extensions.PartTiddlerPlugin) {



version.extensions.PartTiddlerPlugin = {
    major: 1, minor: 0, revision: 10,
    date: new Date(2011, 4, 23), 
    type: 'plugin',
    source: &quot;http://tiddlywiki.abego-software.de/#PartTiddlerPlugin&quot;
};

if (!window.abego) window.abego = {};
if (version.major &amp;lt; 2) alertAndThrow(&quot;PartTiddlerPlugin requires TiddlyWiki 2.0 or newer.&quot;);

//============================================================================
// Common Helpers

// Looks for the next newline, starting at the index-th char of text. 
//
// If there are only whitespaces between index and the newline 
// the index behind the newline is returned, 
// otherwise (or when no newline is found) index is returned.
//
var skipEmptyEndOfLine = function(text, index) {
	var re = /(\n|[^\s])/g;
	re.lastIndex = index;
	var result = re.exec(text);
	return (result &amp;amp;&amp;amp; text.charAt(result.index) == '\n') 
			? result.index+1
			: index;
}


//============================================================================
// Constants

var partEndOrStartTagRE = /(&amp;lt;\/part&amp;gt;)|(&amp;lt;part(?:\s+)((?:[^&amp;gt;])+)&amp;gt;)/mg;
var partEndTagREString = &quot;&amp;lt;\\/part&amp;gt;&quot;;
var partEndTagString = &quot;&amp;lt;/part&amp;gt;&quot;;

//============================================================================
// Plugin Specific Helpers

// Parse the parameters inside a &amp;lt;part ...&amp;gt; tag and return the result.
//
// @return [may be null] {partName: ..., isHidden: ...}
//
var parseStartTagParams = function(paramText) {
	var params = paramText.readMacroParams();
	if (params.length == 0 || params[0].length == 0) return null;
	
	var name = params[0];
	var paramsIndex = 1;
	var hidden = false;
	if (paramsIndex &amp;lt; params.length) {
		hidden = params[paramsIndex] == &quot;hidden&quot;;
		paramsIndex++;
	}
	
	return {
		partName: name, 
		isHidden: hidden
	};
}

// Returns the match to the next (end or start) part tag in the text, 
// starting the search at startIndex.
// 
// When no such tag is found null is returned, otherwise a &quot;Match&quot; is returned:
// [0]: full match
// [1]: matched &quot;end&quot; tag (or null when no end tag match)
// [2]: matched &quot;start&quot; tag (or null when no start tag match)
// [3]: content of start tag (or null if no start tag match)
//
var findNextPartEndOrStartTagMatch = function(text, startIndex) {
	var re = new RegExp(partEndOrStartTagRE);
	re.lastIndex = startIndex;
	var match = re.exec(text);
	return match;
}

//============================================================================
// Formatter

// Process the &amp;lt;part ...&amp;gt; ... &amp;lt;/part&amp;gt; starting at (w.source, w.matchStart) for formatting.
//
// @return true if a complete part section (including the end tag) could be processed, false otherwise.
//
var handlePartSection = function(w) {
	var tagMatch = findNextPartEndOrStartTagMatch(w.source, w.matchStart);
	if (!tagMatch) return false;
	if (tagMatch.index != w.matchStart || !tagMatch[2]) return false;

	// Parse the start tag parameters
	var arguments = parseStartTagParams(tagMatch[3]);
	if (!arguments) return false;
	
	// Continue processing
	var startTagEndIndex = skipEmptyEndOfLine(w.source, tagMatch.index + tagMatch[0].length);
	var endMatch = findNextPartEndOrStartTagMatch(w.source, startTagEndIndex);
	if (endMatch &amp;amp;&amp;amp; endMatch[1]) {
		if (!arguments.isHidden) {
			w.nextMatch = startTagEndIndex;
			w.subWikify(w.output,partEndTagREString);
		}
		w.nextMatch = skipEmptyEndOfLine(w.source, endMatch.index + endMatch[0].length);
		
		return true;
	}
	return false;
}

config.formatters.push( {
    name: &quot;part&quot;,
    match: &quot;&amp;lt;part\\s+[^&amp;gt;]+&amp;gt;&quot;,
	
	handler: function(w) {
		if (!handlePartSection(w)) {
			w.outputText(w.output,w.matchStart,w.matchStart+w.matchLength);
		}
	}
} )

//============================================================================
// Extend &quot;fetchTiddler&quot; functionality to also recognize &quot;part&quot;s of tiddlers 
// as tiddlers.

var currentParent = null; // used for the &quot;.&quot; parent (e.g. in the &quot;tiddler&quot; macro)

// Return the match to the first &amp;lt;part ...&amp;gt; tag of the text that has the
// requrest partName.
//
// @return [may be null]
//
var findPartStartTagByName = function(text, partName) {
	var i = 0;
	
	while (true) {
		var tagMatch = findNextPartEndOrStartTagMatch(text, i);
		if (!tagMatch) return null;

		if (tagMatch[2]) {
			// Is start tag
	
			// Check the name
			var arguments = parseStartTagParams(tagMatch[3]);
			if (arguments &amp;amp;&amp;amp; arguments.partName == partName) {
				return tagMatch;
			}
		}
		i = tagMatch.index+tagMatch[0].length;
	}
}

// Return the part &quot;partName&quot; of the given parentTiddler as a &quot;readOnly&quot; Tiddler 
// object, using fullName as the Tiddler's title. 
//
// All remaining properties of the new Tiddler (tags etc.) are inherited from 
// the parentTiddler.
// 
// @return [may be null]
//
var getPart = function(parentTiddler, partName, fullName) {
	var text = parentTiddler.text;
	var startTag = findPartStartTagByName(text, partName);
	if (!startTag) return null;
	
	var endIndexOfStartTag = skipEmptyEndOfLine(text, startTag.index+startTag[0].length);
	var indexOfEndTag = text.indexOf(partEndTagString, endIndexOfStartTag);

	if (indexOfEndTag &amp;gt;= 0) {
		var partTiddlerText = text.substring(endIndexOfStartTag,indexOfEndTag);
		var partTiddler = new Tiddler();
		partTiddler.set(
						fullName,
						partTiddlerText,
						parentTiddler.modifier,
						parentTiddler.modified,
						parentTiddler.tags,
						parentTiddler.created);
		partTiddler.abegoIsPartTiddler = true;
		return partTiddler;
	}
	
	return null;
}

// Hijack the store.fetchTiddler to recognize the &quot;part&quot; addresses.
//
var hijackFetchTiddler = function() {
	var oldFetchTiddler = store.fetchTiddler ;
	store.fetchTiddler = function(title) {
		var result = oldFetchTiddler.apply(this, arguments);
		if (!result &amp;amp;&amp;amp; title) {
			var i = title.lastIndexOf('/');
			if (i &amp;gt; 0) {
				var parentName = title.substring(0, i);
				var partName = title.substring(i+1);
				var parent = (parentName == &quot;.&quot;) 
						? store.resolveTiddler(currentParent)
						: oldFetchTiddler.apply(this, [parentName]);
				if (parent) {
					return getPart(parent, partName, parent.title+&quot;/&quot;+partName);
				}
			}
		}
		return result;	
	};
};

// for debugging the plugin is not loaded through the systemConfig mechanism but via a script tag. 
// At that point in the &quot;store&quot; is not yet defined. In that case hijackFetchTiddler through the restart function.
// Otherwise hijack now.
if (!store) {
	var oldRestartFunc = restart;
	window.restart = function() {
		hijackFetchTiddler();
		oldRestartFunc.apply(this,arguments);
	};
} else
	hijackFetchTiddler();




// The user must not edit a readOnly/partTiddler
//

config.commands.editTiddler.oldIsReadOnlyFunction = Tiddler.prototype.isReadOnly;

Tiddler.prototype.isReadOnly = function() {
	// Tiddler.isReadOnly was introduced with TW 2.0.6.
	// For older version we explicitly check the global readOnly flag
	if (config.commands.editTiddler.oldIsReadOnlyFunction) {
		if (config.commands.editTiddler.oldIsReadOnlyFunction.apply(this, arguments)) return true;
	} else {
		if (readOnly) return true;
	}

	return this.abegoIsPartTiddler;
}

config.commands.editTiddler.handler_PartTiddlerPlugin = config.commands.editTiddler.handler;

config.commands.editTiddler.handler = function(event,src,title)
{
	var t = store.getTiddler(title);
	// Edit the tiddler if it either is not a tiddler (but a shadowTiddler)
	// or the tiddler is not readOnly
	if(!t || !t.abegoIsPartTiddler)
		{
		return config.commands.editTiddler.handler_PartTiddlerPlugin(event,src,title);
		}
	return false;
}

// To allow the &quot;./partName&quot; syntax in macros we need to hijack 
// the invokeMacro to define the &quot;currentParent&quot; while it is running.
// 
var oldInvokeMacro = window.invokeMacro;
function myInvokeMacro(place,macro,params,wikifier,tiddler) {
	var oldCurrentParent = currentParent;
	if (tiddler) currentParent = tiddler;
	try {
		oldInvokeMacro.apply(this, arguments);
	} finally {
		currentParent = oldCurrentParent;
	}
}
window.invokeMacro = myInvokeMacro;

// To correctly support the &quot;./partName&quot; syntax while refreshing we need to hijack 
// the config.refreshers.tiddlers to define the &quot;currentParent&quot; while it is running.
// 
(function() {
	var oldTiddlerRefresher= config.refreshers.tiddler;
	config.refreshers.tiddler = function(e,changeList) {
		var oldCurrentParent = currentParent;
		try {
			currentParent = e.getAttribute(&quot;tiddler&quot;);
			return oldTiddlerRefresher.apply(this,arguments);
		} finally {
			currentParent = oldCurrentParent;
		}
	};
})();

// Support &quot;./partName&quot; syntax inside &amp;lt;&amp;lt;tabs ...&amp;gt;&amp;gt; macro
(function() {
	var extendRelativeNames = function(e, title) {
		var nodes = e.getElementsByTagName(&quot;a&quot;);
		for(var i=0; i&amp;lt;nodes.length; i++) {
			var node = nodes[i];
			var s = node.getAttribute(&quot;content&quot;);
			if (s &amp;amp;&amp;amp; s.indexOf(&quot;./&quot;) == 0)
				node.setAttribute(&quot;content&quot;,title+s.substr(1));
		}
	};
	var oldHandler = config.macros.tabs.handler;
	config.macros.tabs.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
		var result = oldHandler.apply(this,arguments);
		if (tiddler)
			extendRelativeNames(place, tiddler.title);
		return result;
	};
})();

// Scroll the anchor anchorName in the viewer of the given tiddler visible.
// When no tiddler is defined use the tiddler of the target given event is used.
window.scrollAnchorVisible = function(anchorName, tiddler, evt) {
	var tiddlerElem = null;
	if (tiddler) {
		tiddlerElem = document.getElementById(story.idPrefix + tiddler);
	}
	if (!tiddlerElem &amp;amp;&amp;amp; evt) {
		var target = resolveTarget(evt);
		tiddlerElem = story.findContainingTiddler(target);
	}
	if (!tiddlerElem) return;

	var children = tiddlerElem.getElementsByTagName(&quot;a&quot;);
	for (var i = 0; i &amp;lt; children.length; i++) {
		var child = children[i];
		var name = child.getAttribute(&quot;name&quot;);
		if (name == anchorName) {
			var y = findPosY(child);
			window.scrollTo(0,y);
			return;
		}
	}
}

} // of &quot;install only once&quot;
&lt;/pre&gt;&lt;br&gt;&lt;span&gt;&lt;sub&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;scrollAnchorVisible('Top',null, event)&quot;&gt;[Top]&lt;/a&gt;&lt;/sub&gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;h1&gt;Licence and Copyright&lt;/h1&gt;Copyright (c) abego Software GmbH, 2011 (&lt;a class=&quot;externalLink&quot; href=&quot;http://www.abego-software.de&quot; title=&quot;External link to http://www.abego-software.de&quot; target=&quot;_blank&quot;&gt;www.abego-software.de&lt;/a&gt;)&lt;br&gt;&lt;br&gt;Redistribution and use in source and binary forms, with or without modification,&lt;br&gt;are permitted provided that the following conditions are met:&lt;br&gt;&lt;br&gt;Redistributions of source code must retain the above copyright notice, this&lt;br&gt;list of conditions and the following disclaimer.&lt;br&gt;&lt;br&gt;Redistributions in binary form must reproduce the above copyright notice, this&lt;br&gt;list of conditions and the following disclaimer in the documentation and/or other&lt;br&gt;materials provided with the distribution.&lt;br&gt;&lt;br&gt;Neither the name of abego Software nor the names of its contributors may be&lt;br&gt;used to endorse or promote products derived from this software without specific&lt;br&gt;prior written permission.&lt;br&gt;&lt;br&gt;THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot; AND ANY&lt;br&gt;EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES&lt;br&gt;OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT&lt;br&gt;SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,&lt;br&gt;INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED&lt;br&gt;TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR&lt;br&gt;BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN&lt;br&gt;CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN&lt;br&gt;ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH&lt;br&gt;DAMAGE.&lt;br&gt;&lt;br&gt;&lt;span&gt;&lt;sub&gt;&lt;a href=&quot;javascript:;&quot; onclick=&quot;scrollAnchorVisible('Top',null, event)&quot;&gt;[Top]&lt;/a&gt;&lt;/sub&gt;&lt;/span&gt;&lt;br&gt;</description>
<category>systemConfig</category>
<link>http://tiddlywiki.abego-software.de#PartTiddlerPlugin</link>
<pubDate>Mon, 16 Apr 2012 21:38:00 GMT</pubDate>
</item>
<item>
<title>IntelliTaggerPlugin</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;IntelliTaggerPlugin&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Version:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;1.0.2 (2007-07-25)&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Type:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;plugin&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Source:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin&quot; target=&quot;_blank&quot;&gt;http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin&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;Udo Borkowski (ub [at] abego-software [dot] de)&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 class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#IntelliTaggerPlugin Documentation&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#IntelliTaggerPlugin Documentation&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;IntelliTaggerPlugin Documentation&quot;&gt;IntelliTaggerPlugin Documentation&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;SourceCode:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#IntelliTaggerPlugin SourceCode&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#IntelliTaggerPlugin SourceCode&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;IntelliTaggerPlugin SourceCode&quot;&gt;IntelliTaggerPlugin SourceCode&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Licence:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#BSD open source license (abego Software)&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#BSD open source license (abego Software)&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;BSD open source license (abego Software)&quot;&gt;BSD open source license (abego Software)&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.0.8&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Browser:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Firefox 1.5.0.2 or better&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h1&gt;Version History&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; 1.0.2 (2007-07-25): &lt;ul&gt;&lt;li&gt; Feature: &quot;Return&quot; key may be used to accept first tag suggestion (beside &quot;Alt-1&quot;)&lt;/li&gt;&lt;li&gt; Bugfix: Keyboard shortcuts (Alt+3 etc.) shifted&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; 1.0.1 (2007-05-18): &lt;ul&gt;&lt;li&gt; Improvement: Speedup when using TiddlyWikis with many tags&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; 1.0.0 (2006-04-26): &lt;ul&gt;&lt;li&gt; Initial release&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;Source Code&lt;/h1&gt;&lt;em&gt; &lt;br&gt;&lt;/em&gt;</description>
<category>systemConfig</category>
<link>http://tiddlywiki.abego-software.de#IntelliTaggerPlugin</link>
<pubDate>Mon, 16 Apr 2012 21:38:00 GMT</pubDate>
</item>
<item>
<title>ForEachTiddlerPlugin</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;ForEachTiddlerPlugin&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Version:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;1.0.8 (2007-04-12)&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 class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin&quot; target=&quot;_blank&quot;&gt;http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin&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;UdoBorkowski (ub [at] abego-software [dot] de)&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Licence:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://www.abego-software.de/legal/apl-v10.html&quot; title=&quot;External link to http://www.abego-software.de/legal/apl-v10.html&quot; target=&quot;_blank&quot;&gt;BSD open source license (abego Software)&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Copyright:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;&#169;&lt;/span&gt; 2005-2007 &lt;a class=&quot;externalLink&quot; href=&quot;http://www.abego-software.de&quot; title=&quot;External link to http://www.abego-software.de&quot; target=&quot;_blank&quot;&gt;abego Software&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;TiddlyWiki:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;1.2.38+, 2.0&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Browser:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h1&gt;Description&lt;/h1&gt;&lt;br&gt;Create customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Syntax:&lt;/strong&gt; &lt;br&gt;&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt;&lt;strong&gt;forEachTiddler&lt;/strong&gt; [&lt;strong&gt;in&lt;/strong&gt; &lt;em&gt;tiddlyWikiPath&lt;/em&gt;] [&lt;strong&gt;where&lt;/strong&gt; &lt;em&gt;whereCondition&lt;/em&gt;] [&lt;strong&gt;sortBy&lt;/strong&gt; &lt;em&gt;sortExpression&lt;/em&gt; [&lt;strong&gt;ascending&lt;/strong&gt; &lt;em&gt;or&lt;/em&gt; &lt;strong&gt;descending&lt;/strong&gt;]] [&lt;strong&gt;script&lt;/strong&gt; &lt;em&gt;scriptText&lt;/em&gt;] [&lt;em&gt;action&lt;/em&gt; [&lt;em&gt;actionParameters&lt;/em&gt;]]&lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;em&gt;tiddlyWikiPath&lt;/em&gt;&lt;/td&gt;&lt;td&gt;The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;em&gt;whereCondition&lt;/em&gt;&lt;/td&gt;&lt;td&gt;(quoted) JavaScript boolean expression. May refer to the build-in variables &lt;code&gt;tiddler&lt;/code&gt; and  &lt;code&gt;context&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;em&gt;sortExpression&lt;/em&gt;&lt;/td&gt;&lt;td&gt;(quoted) JavaScript expression returning &quot;comparable&quot; objects (using '&lt;code&gt;&amp;lt;&lt;/code&gt;','&lt;code&gt;&amp;gt;&lt;/code&gt;','&lt;code&gt;==&lt;/code&gt;'. May refer to the build-in variables &lt;code&gt;tiddler&lt;/code&gt; and  &lt;code&gt;context&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;em&gt;scriptText&lt;/em&gt;&lt;/td&gt;&lt;td&gt;(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;em&gt;action&lt;/em&gt;&lt;/td&gt;&lt;td&gt;The action that should be performed on every selected tiddler, in the given order. By default the actions &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#AddToListAction&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#AddToListAction&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;AddToListAction&quot;&gt;addToList&lt;/a&gt; and &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#WriteAction&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#WriteAction&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;WriteAction&quot;&gt;write&lt;/a&gt; are supported. When no action is specified &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#AddToListAction&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#AddToListAction&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;AddToListAction&quot;&gt;addToList&lt;/a&gt;  is used.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;em&gt;actionParameters&lt;/em&gt;&lt;/td&gt;&lt;td&gt;(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). &lt;span&gt;&lt;a href=&quot;javascript:;&quot; title=&quot;JavaScript - UdoBorkowski, 20. November 2005 02:50:00 MEZ&quot; class=&quot;tiddlyLink tiddlyLinkExisting&quot; refresh=&quot;link&quot; tiddlylink=&quot;JavaScript&quot;&gt;JavaScript&lt;/a&gt; in actionParameters may refer to the build-in variables &lt;code&gt;tiddler&lt;/code&gt;, &lt;code&gt;count&lt;/code&gt;, &lt;code&gt;index&lt;/code&gt; and &lt;code&gt;context&lt;/code&gt;.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;sub&gt;Syntax formatting: Keywords in &lt;strong&gt;bold&lt;/strong&gt;, optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.&lt;/sub&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;See details see &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#ForEachTiddlerMacro&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#ForEachTiddlerMacro&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;ForEachTiddlerMacro&quot;&gt;ForEachTiddlerMacro&lt;/a&gt; and &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#ForEachTiddlerExamples&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#ForEachTiddlerExamples&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;ForEachTiddlerExamples&quot;&gt;ForEachTiddlerExamples&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;h1&gt;Revision history&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; v1.0.8 (2007-04-12)&lt;ul&gt;&lt;li&gt; Adapted to latest TiddlyWiki 2.2 Beta importTiddlyWiki API (introduced with changeset 2004). TiddlyWiki 2.2 Beta builds prior to changeset 2004 are no longer supported (but TiddlyWiki 2.1 and earlier, of cause)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.7 (2007-03-28)&lt;ul&gt;&lt;li&gt; Also support &quot;pre&quot; formatted TiddlyWikis (introduced with TW 2.2) (when using &quot;in&quot; clause to work on external tiddlers)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.6 (2006-09-16)&lt;ul&gt;&lt;li&gt; Context provides &quot;viewerTiddler&quot;, i.e. the tiddler used to view the macro. Most times this is equal to the &quot;inTiddler&quot;, but when using the &quot;tiddler&quot; macro both may be different.&lt;/li&gt;&lt;li&gt; Support &quot;begin&quot;, &quot;end&quot; and &quot;none&quot; expressions in &quot;write&quot; action&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.5 (2006-02-05)&lt;ul&gt;&lt;li&gt; Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro (&quot;inTiddler&quot;). Thanks to SimonBaird.&lt;/li&gt;&lt;li&gt; Support Firefox 1.5.0.1&lt;/li&gt;&lt;li&gt; Internal&lt;ul&gt;&lt;li&gt; Make &quot;JSLint&quot; conform&lt;/li&gt;&lt;li&gt; &quot;Only install once&quot;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.4 (2006-01-06)&lt;ul&gt;&lt;li&gt; Support TiddlyWiki 2.0&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.3 (2005-12-22)&lt;ul&gt;&lt;li&gt; Features: &lt;ul&gt;&lt;li&gt; Write output to a file supports multi-byte environments (Thanks to Bram Chen) &lt;/li&gt;&lt;li&gt; Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; Enhancements:&lt;ul&gt;&lt;li&gt; Improved error messages on InternetExplorer.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.2 (2005-12-10)&lt;ul&gt;&lt;li&gt; Features: &lt;ul&gt;&lt;li&gt; context object also holds reference to store (TiddlyWiki)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; Fixed Bugs: &lt;ul&gt;&lt;li&gt; ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.1 (2005-12-08)&lt;ul&gt;&lt;li&gt; Features: &lt;ul&gt;&lt;li&gt; Access tiddlers stored in separated TiddlyWikis through the &quot;in&quot; option. I.e. you are no longer limited to only work on the &quot;current TiddlyWiki&quot;.&lt;/li&gt;&lt;li&gt; Write output to an external file using the &quot;toFile&quot; option of the &quot;write&quot; action. With this option you may write your customized tiddler exports.&lt;/li&gt;&lt;li&gt; Use the &quot;script&quot; section to define &quot;helper&quot; JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).&lt;/li&gt;&lt;li&gt; Access and store context information for the current forEachTiddler invocation (through the build-in &quot;context&quot; object) .&lt;/li&gt;&lt;li&gt; Improved script evaluation (for where/sort clause and write scripts).&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; v1.0.0 (2005-11-20)&lt;ul&gt;&lt;li&gt; initial version&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;h1&gt;Code&lt;/h1&gt;&lt;pre&gt;	
//============================================================================
//============================================================================
//		   ForEachTiddlerPlugin
//============================================================================
//============================================================================

// Only install once
if (!version.extensions.ForEachTiddlerPlugin) {

if (!window.abego) window.abego = {};

version.extensions.ForEachTiddlerPlugin = {
	major: 1, minor: 0, revision: 8, 
	date: new Date(2007,3,12), 
	source: &quot;http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin&quot;,
	licence: &quot;[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]&quot;,
	copyright: &quot;Copyright (c) abego Software GmbH, 2005-2007 (www.abego-software.de)&quot;
};

// For backward compatibility with TW 1.2.x
//
if (!TiddlyWiki.prototype.forEachTiddler) {
	TiddlyWiki.prototype.forEachTiddler = function(callback) {
		for(var t in this.tiddlers) {
			callback.call(this,t,this.tiddlers[t]);
		}
	};
}

//============================================================================
// forEachTiddler Macro
//============================================================================

version.extensions.forEachTiddler = {
	major: 1, minor: 0, revision: 8, date: new Date(2007,3,12), provider: &quot;http://tiddlywiki.abego-software.de&quot;};

// ---------------------------------------------------------------------------
// Configurations and constants 
// ---------------------------------------------------------------------------

config.macros.forEachTiddler = {
	 // Standard Properties
	 label: &quot;forEachTiddler&quot;,
	 prompt: &quot;Perform actions on a (sorted) selection of tiddlers&quot;,

	 // actions
	 actions: {
		 addToList: {},
		 write: {}
	 }
};

// ---------------------------------------------------------------------------
//  The forEachTiddler Macro Handler 
// ---------------------------------------------------------------------------

config.macros.forEachTiddler.getContainingTiddler = function(e) {
	while(e &amp;amp;&amp;amp; !hasClass(e,&quot;tiddler&quot;))
		e = e.parentNode;
	var title = e ? e.getAttribute(&quot;tiddler&quot;) : null; 
	return title ? store.getTiddler(title) : null;
};

config.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
	// config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);

	if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);
	// --- Parsing ------------------------------------------

	var i = 0; // index running over the params
	// Parse the &quot;in&quot; clause
	var tiddlyWikiPath = undefined;
	if ((i &amp;lt; params.length) &amp;amp;&amp;amp; params[i] == &quot;in&quot;) {
		i++;
		if (i &amp;gt;= params.length) {
			this.handleError(place, &quot;TiddlyWiki path expected behind 'in'.&quot;);
			return;
		}
		tiddlyWikiPath = this.paramEncode((i &amp;lt; params.length) ? params[i] : &quot;&quot;);
		i++;
	}

	// Parse the where clause
	var whereClause =&quot;true&quot;;
	if ((i &amp;lt; params.length) &amp;amp;&amp;amp; params[i] == &quot;where&quot;) {
		i++;
		whereClause = this.paramEncode((i &amp;lt; params.length) ? params[i] : &quot;&quot;);
		i++;
	}

	// Parse the sort stuff
	var sortClause = null;
	var sortAscending = true; 
	if ((i &amp;lt; params.length) &amp;amp;&amp;amp; params[i] == &quot;sortBy&quot;) {
		i++;
		if (i &amp;gt;= params.length) {
			this.handleError(place, &quot;sortClause missing behind 'sortBy'.&quot;);
			return;
		}
		sortClause = this.paramEncode(params[i]);
		i++;

		if ((i &amp;lt; params.length) &amp;amp;&amp;amp; (params[i] == &quot;ascending&quot; || params[i] == &quot;descending&quot;)) {
			 sortAscending = params[i] == &quot;ascending&quot;;
			 i++;
		}
	}

	// Parse the script
	var scriptText = null;
	if ((i &amp;lt; params.length) &amp;amp;&amp;amp; params[i] == &quot;script&quot;) {
		i++;
		scriptText = this.paramEncode((i &amp;lt; params.length) ? params[i] : &quot;&quot;);
		i++;
	}

	// Parse the action. 
	// When we are already at the end use the default action
	var actionName = &quot;addToList&quot;;
	if (i &amp;lt; params.length) {
	   if (!config.macros.forEachTiddler.actions[params[i]]) {
			this.handleError(place, &quot;Unknown action '&quot;+params[i]+&quot;'.&quot;);
			return;
		} else {
			actionName = params[i]; 
			i++;
		}
	} 
	
	// Get the action parameter
	// (the parsing is done inside the individual action implementation.)
	var actionParameter = params.slice(i);


	// --- Processing ------------------------------------------
	try {
		this.performMacro({
				place: place, 
				inTiddler: tiddler,
				whereClause: whereClause, 
				sortClause: sortClause, 
				sortAscending: sortAscending, 
				actionName: actionName, 
				actionParameter: actionParameter, 
				scriptText: scriptText, 
				tiddlyWikiPath: tiddlyWikiPath});

	} catch (e) {
		this.handleError(place, e);
	}
};

// Returns an object with properties &quot;tiddlers&quot; and &quot;context&quot;.
// tiddlers holds the (sorted) tiddlers selected by the parameter,
// context the context of the execution of the macro.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {

	var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);

	var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;
	context[&quot;tiddlyWiki&quot;] = tiddlyWiki;
	
	// Get the tiddlers, as defined by the whereClause
	var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);
	context[&quot;tiddlers&quot;] = tiddlers;

	// Sort the tiddlers, when sorting is required.
	if (parameter.sortClause) {
		this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);
	}

	return {tiddlers: tiddlers, context: context};
};

// Returns the (sorted) tiddlers selected by the parameter.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlers = function(parameter) {
	return this.getTiddlersAndContext(parameter).tiddlers;
};

// Performs the macros with the given parameter.
//
// @param parameter holds the parameter of the macro as separate properties.
//				  The following properties are supported:
//
//						place
//						whereClause
//						sortClause
//						sortAscending
//						actionName
//						actionParameter
//						scriptText
//						tiddlyWikiPath
//
//					All properties are optional. 
//					For most actions the place property must be defined.
//
config.macros.forEachTiddler.performMacro = function(parameter) {
	var tiddlersAndContext = this.getTiddlersAndContext(parameter);

	// Perform the action
	var actionName = parameter.actionName ? parameter.actionName : &quot;addToList&quot;;
	var action = config.macros.forEachTiddler.actions[actionName];
	if (!action) {
		this.handleError(parameter.place, &quot;Unknown action '&quot;+actionName+&quot;'.&quot;);
		return;
	}

	var actionHandler = action.handler;
	actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);
};

// ---------------------------------------------------------------------------
//  The actions 
// ---------------------------------------------------------------------------

// Internal.
//
// --- The addToList Action -----------------------------------------------
//
config.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {
	// Parse the parameter
	var p = 0;

	// Check for extra parameters
	if (parameter.length &amp;gt; p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, &quot;addToList&quot;, parameter, p);
		return;
	}

	// Perform the action.
	var list = document.createElement(&quot;ul&quot;);
	place.appendChild(list);
	for (var i = 0; i &amp;lt; tiddlers.length; i++) {
		var tiddler = tiddlers[i];
		var listItem = document.createElement(&quot;li&quot;);
		list.appendChild(listItem);
		createTiddlyLink(listItem, tiddler.title, true);
	}
};

abego.parseNamedParameter = function(name, parameter, i) {
	var beginExpression = null;
	if ((i &amp;lt; parameter.length) &amp;amp;&amp;amp; parameter[i] == name) {
		i++;
		if (i &amp;gt;= parameter.length) {
			throw &quot;Missing text behind '%0'&quot;.format([name]);
		}
		
		return config.macros.forEachTiddler.paramEncode(parameter[i]);
	}
	return null;
}

// Internal.
//
// --- The write Action ---------------------------------------------------
//
config.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {
	// Parse the parameter
	var p = 0;
	if (p &amp;gt;= parameter.length) {
		this.handleError(place, &quot;Missing expression behind 'write'.&quot;);
		return;
	}

	var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);
	p++;

	// Parse the &quot;begin&quot; option
	var beginExpression = abego.parseNamedParameter(&quot;begin&quot;, parameter, p);
	if (beginExpression !== null) 
		p += 2;
	var endExpression = abego.parseNamedParameter(&quot;end&quot;, parameter, p);
	if (endExpression !== null) 
		p += 2;
	var noneExpression = abego.parseNamedParameter(&quot;none&quot;, parameter, p);
	if (noneExpression !== null) 
		p += 2;

	// Parse the &quot;toFile&quot; option
	var filename = null;
	var lineSeparator = undefined;
	if ((p &amp;lt; parameter.length) &amp;amp;&amp;amp; parameter[p] == &quot;toFile&quot;) {
		p++;
		if (p &amp;gt;= parameter.length) {
			this.handleError(place, &quot;Filename expected behind 'toFile' of 'write' action.&quot;);
			return;
		}
		
		filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));
		p++;
		if ((p &amp;lt; parameter.length) &amp;amp;&amp;amp; parameter[p] == &quot;withLineSeparator&quot;) {
			p++;
			if (p &amp;gt;= parameter.length) {
				this.handleError(place, &quot;Line separator text expected behind 'withLineSeparator' of 'write' action.&quot;);
				return;
			}
			lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);
			p++;
		}
	}
	
	// Check for extra parameters
	if (parameter.length &amp;gt; p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, &quot;write&quot;, parameter, p);
		return;
	}

	// Perform the action.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);
	var count = tiddlers.length;
	var text = &quot;&quot;;
	if (count &amp;gt; 0 &amp;amp;&amp;amp; beginExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(beginExpression, context)(undefined, context, count, undefined);
	
	for (var i = 0; i &amp;lt; count; i++) {
		var tiddler = tiddlers[i];
		text += func(tiddler, context, count, i);
	}
	
	if (count &amp;gt; 0 &amp;amp;&amp;amp; endExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(endExpression, context)(undefined, context, count, undefined);

	if (count == 0 &amp;amp;&amp;amp; noneExpression) 
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(noneExpression, context)(undefined, context, count, undefined);
		

	if (filename) {
		if (lineSeparator !== undefined) {
			lineSeparator = lineSeparator.replace(/\\n/mg, &quot;\n&quot;).replace(/\\r/mg, &quot;\r&quot;);
			text = text.replace(/\n/mg,lineSeparator);
		}
		saveFile(filename, convertUnicodeToUTF8(text));
	} else {
		var wrapper = createTiddlyElement(place, &quot;span&quot;);
		wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);
	}
};


// ---------------------------------------------------------------------------
//  Helpers
// ---------------------------------------------------------------------------

// Internal.
//
config.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {
	return {
		place : placeParam, 
		whereClause : whereClauseParam, 
		sortClause : sortClauseParam, 
		sortAscending : sortAscendingParam, 
		script : scriptText,
		actionName : actionNameParam, 
		actionParameter : actionParameterParam,
		tiddlyWikiPath : tiddlyWikiPathParam,
		inTiddler : inTiddlerParam, // the tiddler containing the &amp;lt;&amp;lt;forEachTiddler ...&amp;gt;&amp;gt; macro call.
		viewerTiddler : config.macros.forEachTiddler.getContainingTiddler(placeParam) // the tiddler showing the forEachTiddler result
	};
};

// Internal.
//
// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of 
// the given path.
//
config.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {
	if (!idPrefix) {
		idPrefix = &quot;store&quot;;
	}
	var lenPrefix = idPrefix.length;
	
	// Read the content of the given file
	var content = loadFile(this.getLocalPath(path));
	if(content === null) {
		throw &quot;TiddlyWiki '&quot;+path+&quot;' not found.&quot;;
	}
	
	var tiddlyWiki = new TiddlyWiki();

	// Starting with TW 2.2 there is a helper function to import the tiddlers
	if (tiddlyWiki.importTiddlyWiki) {
		if (!tiddlyWiki.importTiddlyWiki(content))
			throw &quot;File '&quot;+path+&quot;' is not a TiddlyWiki.&quot;;
		tiddlyWiki.dirty = false;
		return tiddlyWiki;
	}
	
	// The legacy code, for TW &amp;lt; 2.2
	
	// Locate the storeArea div's
	var posOpeningDiv = content.indexOf(startSaveArea);
	var posClosingDiv = content.lastIndexOf(endSaveArea);
	if((posOpeningDiv == -1) || (posClosingDiv == -1)) {
		throw &quot;File '&quot;+path+&quot;' is not a TiddlyWiki.&quot;;
	}
	var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);
	
	// Create a &quot;div&quot; element that contains the storage text
	var myStorageDiv = document.createElement(&quot;div&quot;);
	myStorageDiv.innerHTML = storageText;
	myStorageDiv.normalize();
	
	// Create all tiddlers in a new TiddlyWiki
	// (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)
	var store = myStorageDiv.childNodes;
	for(var t = 0; t &amp;lt; store.length; t++) {
		var e = store[t];
		var title = null;
		if(e.getAttribute)
			title = e.getAttribute(&quot;tiddler&quot;);
		if(!title &amp;amp;&amp;amp; e.id &amp;amp;&amp;amp; e.id.substr(0,lenPrefix) == idPrefix)
			title = e.id.substr(lenPrefix);
		if(title &amp;amp;&amp;amp; title !== &quot;&quot;) {
			var tiddler = tiddlyWiki.createTiddler(title);
			tiddler.loadFromDiv(e,title);
		}
	}
	tiddlyWiki.dirty = false;

	return tiddlyWiki;
};


	
// Internal.
//
// Returns a function that has a function body returning the given javaScriptExpression.
// The function has the parameters:
// 
//	 (tiddler, context, count, index)
//
config.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {
	var script = context[&quot;script&quot;];
	var functionText = &quot;var theFunction = function(tiddler, context, count, index) { return &quot;+javaScriptExpression+&quot;}&quot;;
	var fullText = (script ? script+&quot;;&quot; : &quot;&quot;)+functionText+&quot;;theFunction;&quot;;
	return eval(fullText);
};

// Internal.
//
config.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {
	var result = [];
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);
	tiddlyWiki.forEachTiddler(function(title,tiddler) {
		if (func(tiddler, context, undefined, undefined)) {
			result.push(tiddler);
		}
	});
	return result;
};

// Internal.
//
config.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {
	var message = &quot;Extra parameter behind '&quot;+actionName+&quot;':&quot;;
	for (var i = firstUnusedIndex; i &amp;lt; parameter.length; i++) {
		message += &quot; &quot;+parameter[i];
	}
	this.handleError(place, message);
};

// Internal.
//
config.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {
	var result = 
		(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) 
			? 0
			: (tiddlerA.forEachTiddlerSortValue &amp;lt; tiddlerB.forEachTiddlerSortValue)
			   ? -1 
			   : +1; 
	return result;
};

// Internal.
//
config.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {
	var result = 
		(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) 
			? 0
			: (tiddlerA.forEachTiddlerSortValue &amp;lt; tiddlerB.forEachTiddlerSortValue)
			   ? +1 
			   : -1; 
	return result;
};

// Internal.
//
config.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {
	// To avoid evaluating the sortClause whenever two items are compared 
	// we pre-calculate the sortValue for every item in the array and store it in a 
	// temporary property (&quot;forEachTiddlerSortValue&quot;) of the tiddlers.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);
	var count = tiddlers.length;
	var i;
	for (i = 0; i &amp;lt; count; i++) {
		var tiddler = tiddlers[i];
		tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);
	}

	// Do the sorting
	tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);

	// Delete the temporary property that holds the sortValue.	
	for (i = 0; i &amp;lt; tiddlers.length; i++) {
		delete tiddlers[i].forEachTiddlerSortValue;
	}
};


// Internal.
//
config.macros.forEachTiddler.trace = function(message) {
	displayMessage(message);
};

// Internal.
//
config.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {
	var message =&quot;&amp;lt;&amp;lt;&quot;+macroName;
	for (var i = 0; i &amp;lt; params.length; i++) {
		message += &quot; &quot;+params[i];
	}
	message += &quot;&amp;gt;&amp;gt;&quot;;
	displayMessage(message);
};


// Internal.
//
// Creates an element that holds an error message
// 
config.macros.forEachTiddler.createErrorElement = function(place, exception) {
	var message = (exception.description) ? exception.description : exception.toString();
	return createTiddlyElement(place,&quot;span&quot;,null,&quot;forEachTiddlerError&quot;,&quot;&amp;lt;&amp;lt;forEachTiddler ...&amp;gt;&amp;gt;: &quot;+message);
};

// Internal.
//
// @param place [may be null]
//
config.macros.forEachTiddler.handleError = function(place, exception) {
	if (place) {
		this.createErrorElement(place, exception);
	} else {
		throw exception;
	}
};

// Internal.
//
// Encodes the given string.
//
// Replaces 
//	 &quot;$))&quot; to &quot;&amp;gt;&amp;gt;&quot;
//	 &quot;$)&quot; to &quot;&amp;gt;&quot;
//
config.macros.forEachTiddler.paramEncode = function(s) {
	var reGTGT = new RegExp(&quot;\\$\\)\\)&quot;,&quot;mg&quot;);
	var reGT = new RegExp(&quot;\\$\\)&quot;,&quot;mg&quot;);
	return s.replace(reGTGT, &quot;&amp;gt;&amp;gt;&quot;).replace(reGT, &quot;&amp;gt;&quot;);
};

// Internal.
//
// Returns the given original path (that is a file path, starting with &quot;file:&quot;)
// as a path to a local file, in the systems native file format.
//
// Location information in the originalPath (i.e. the &quot;#&quot; and stuff following)
// is stripped.
// 
config.macros.forEachTiddler.getLocalPath = function(originalPath) {
	// Remove any location part of the URL
	var hashPos = originalPath.indexOf(&quot;#&quot;);
	if(hashPos != -1)
		originalPath = originalPath.substr(0,hashPos);
	// Convert to a native file format assuming
	// &quot;file:///x:/path/path/path...&quot; - pc local file --&amp;gt; &quot;x:\path\path\path...&quot;
	// &quot;file://///server/share/path/path/path...&quot; - FireFox pc network file --&amp;gt; &quot;\\server\share\path\path\path...&quot;
	// &quot;file:///path/path/path...&quot; - mac/unix local file --&amp;gt; &quot;/path/path/path...&quot;
	// &quot;file://server/share/path/path/path...&quot; - pc network file --&amp;gt; &quot;\\server\share\path\path\path...&quot;
	var localPath;
	if(originalPath.charAt(9) == &quot;:&quot;) // pc local file
		localPath = unescape(originalPath.substr(8)).replace(new RegExp(&quot;/&quot;,&quot;g&quot;),&quot;\\&quot;);
	else if(originalPath.indexOf(&quot;file://///&quot;) === 0) // FireFox pc network file
		localPath = &quot;\\\\&quot; + unescape(originalPath.substr(10)).replace(new RegExp(&quot;/&quot;,&quot;g&quot;),&quot;\\&quot;);
	else if(originalPath.indexOf(&quot;file:///&quot;) === 0) // mac/unix local file
		localPath = unescape(originalPath.substr(7));
	else if(originalPath.indexOf(&quot;file:/&quot;) === 0) // mac/unix local file
		localPath = unescape(originalPath.substr(5));
	else // pc network file
		localPath = &quot;\\\\&quot; + unescape(originalPath.substr(7)).replace(new RegExp(&quot;/&quot;,&quot;g&quot;),&quot;\\&quot;);	
	return localPath;
};

// ---------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// ---------------------------------------------------------------------------
//
setStylesheet(
	&quot;.forEachTiddlerError{color: #ffffff;background-color: #880000;}&quot;,
	&quot;forEachTiddler&quot;);

//============================================================================
// End of forEachTiddler Macro
//============================================================================


//============================================================================
// String.startsWith Function
//============================================================================
//
// Returns true if the string starts with the given prefix, false otherwise.
//
version.extensions[&quot;String.startsWith&quot;] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: &quot;http://tiddlywiki.abego-software.de&quot;};
//
String.prototype.startsWith = function(prefix) {
	var n =  prefix.length;
	return (this.length &amp;gt;= n) &amp;amp;&amp;amp; (this.slice(0, n) == prefix);
};



//============================================================================
// String.endsWith Function
//============================================================================
//
// Returns true if the string ends with the given suffix, false otherwise.
//
version.extensions[&quot;String.endsWith&quot;] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: &quot;http://tiddlywiki.abego-software.de&quot;};
//
String.prototype.endsWith = function(suffix) {
	var n = suffix.length;
	return (this.length &amp;gt;= n) &amp;amp;&amp;amp; (this.right(n) == suffix);
};


//============================================================================
// String.contains Function
//============================================================================
//
// Returns true when the string contains the given substring, false otherwise.
//
version.extensions[&quot;String.contains&quot;] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: &quot;http://tiddlywiki.abego-software.de&quot;};
//
String.prototype.contains = function(substring) {
	return this.indexOf(substring) &amp;gt;= 0;
};

//============================================================================
// Array.indexOf Function
//============================================================================
//
// Returns the index of the first occurance of the given item in the array or 
// -1 when no such item exists.
//
// @param item [may be null]
//
version.extensions[&quot;Array.indexOf&quot;] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: &quot;http://tiddlywiki.abego-software.de&quot;};
//
Array.prototype.indexOf = function(item) {
	for (var i = 0; i &amp;lt; this.length; i++) {
		if (this[i] == item) {
			return i;
		}
	}
	return -1;
};

//============================================================================
// Array.contains Function
//============================================================================
//
// Returns true when the array contains the given item, otherwise false. 
//
// @param item [may be null]
//
version.extensions[&quot;Array.contains&quot;] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: &quot;http://tiddlywiki.abego-software.de&quot;};
//
Array.prototype.contains = function(item) {
	return (this.indexOf(item) &amp;gt;= 0);
};

//============================================================================
// Array.containsAny Function
//============================================================================
//
// Returns true when the array contains at least one of the elements 
// of the item. Otherwise (or when items contains no elements) false is returned.
//
version.extensions[&quot;Array.containsAny&quot;] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: &quot;http://tiddlywiki.abego-software.de&quot;};
//
Array.prototype.containsAny = function(items) {
	for(var i = 0; i &amp;lt; items.length; i++) {
		if (this.contains(items[i])) {
			return true;
		}
	}
	return false;
};


//============================================================================
// Array.containsAll Function
//============================================================================
//
// Returns true when the array contains all the items, otherwise false.
// 
// When items is null false is returned (even if the array contains a null).
//
// @param items [may be null] 
//
version.extensions[&quot;Array.containsAll&quot;] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: &quot;http://tiddlywiki.abego-software.de&quot;};
//
Array.prototype.containsAll = function(items) {
	for(var i = 0; i &amp;lt; items.length; i++) {
		if (!this.contains(items[i])) {
			return false;
		}
	}
	return true;
};


} // of &quot;install only once&quot;

// Used Globals (for JSLint) ==============
// ... DOM
/*global 	document */
// ... TiddlyWiki Core
/*global 	convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink, 
			displayMessage, endSaveArea, hasClass, loadFile, saveFile, 
			startSaveArea, store, wikify */
&lt;/pre&gt;&lt;br&gt;&lt;br&gt;&lt;h1&gt;Licence and Copyright&lt;/h1&gt;Copyright (c) abego Software GmbH, 2005 (&lt;a class=&quot;externalLink&quot; href=&quot;http://www.abego-software.de&quot; title=&quot;External link to http://www.abego-software.de&quot; target=&quot;_blank&quot;&gt;www.abego-software.de&lt;/a&gt;)&lt;br&gt;&lt;br&gt;Redistribution and use in source and binary forms, with or without modification,&lt;br&gt;are permitted provided that the following conditions are met:&lt;br&gt;&lt;br&gt;Redistributions of source code must retain the above copyright notice, this&lt;br&gt;list of conditions and the following disclaimer.&lt;br&gt;&lt;br&gt;Redistributions in binary form must reproduce the above copyright notice, this&lt;br&gt;list of conditions and the following disclaimer in the documentation and/or other&lt;br&gt;materials provided with the distribution.&lt;br&gt;&lt;br&gt;Neither the name of abego Software nor the names of its contributors may be&lt;br&gt;used to endorse or promote products derived from this software without specific&lt;br&gt;prior written permission.&lt;br&gt;&lt;br&gt;THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot; AND ANY&lt;br&gt;EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES&lt;br&gt;OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT&lt;br&gt;SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,&lt;br&gt;INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED&lt;br&gt;TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR&lt;br&gt;BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN&lt;br&gt;CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN&lt;br&gt;ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH&lt;br&gt;DAMAGE.&lt;br&gt;&lt;br&gt;</description>
<category>ForEachTiddlerMacro</category>
<category>ForEachTiddlerProject</category>
<category>Plugin</category>
<category>UdoBorkowski</category>
<category>systemConfig</category>
<link>http://tiddlywiki.abego-software.de#ForEachTiddlerPlugin</link>
<pubDate>Mon, 16 Apr 2012 21:38:00 GMT</pubDate>
</item>
<item>
<title>SyncFileTiddlers</title>
<description>&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#DataTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#DataTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;DataTiddlerPlugin&quot;&gt;DataTiddlerPlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;archive/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#DataTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#DataTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;DataTiddlerPlugin&quot;&gt;DataTiddlerPlugin&lt;/a&gt;/latest/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#DataTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#DataTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;DataTiddlerPlugin&quot;&gt;DataTiddlerPlugin&lt;/a&gt;.js&lt;/td&gt;&lt;td&gt;readonly&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#ForEachTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#ForEachTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;ForEachTiddlerPlugin&quot;&gt;ForEachTiddlerPlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;archive/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#ForEachTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#ForEachTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;ForEachTiddlerPlugin&quot;&gt;ForEachTiddlerPlugin&lt;/a&gt;/latest/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#ForEachTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#ForEachTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;ForEachTiddlerPlugin&quot;&gt;ForEachTiddlerPlugin&lt;/a&gt;.js&lt;/td&gt;&lt;td&gt;readonly&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#FormTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#FormTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;FormTiddlerPlugin&quot;&gt;FormTiddlerPlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;archive/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#FormTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#FormTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;FormTiddlerPlugin&quot;&gt;FormTiddlerPlugin&lt;/a&gt;/latest/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#FormTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#FormTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;FormTiddlerPlugin&quot;&gt;FormTiddlerPlugin&lt;/a&gt;.js&lt;/td&gt;&lt;td&gt;readonly&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#IncludePlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#IncludePlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;IncludePlugin&quot;&gt;IncludePlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;archive/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#IncludePlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#IncludePlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;IncludePlugin&quot;&gt;IncludePlugin&lt;/a&gt;/latest/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#IncludePlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#IncludePlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;IncludePlugin&quot;&gt;IncludePlugin&lt;/a&gt;.js&lt;/td&gt;&lt;td&gt;readonly&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#IntelliTaggerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#IntelliTaggerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;IntelliTaggerPlugin&quot;&gt;IntelliTaggerPlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;archive/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#IntelliTaggerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#IntelliTaggerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;IntelliTaggerPlugin&quot;&gt;IntelliTaggerPlugin&lt;/a&gt;/latest/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#IntelliTaggerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#IntelliTaggerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;IntelliTaggerPlugin&quot;&gt;IntelliTaggerPlugin&lt;/a&gt;.js&lt;/td&gt;&lt;td&gt;readonly&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#PartTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#PartTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;PartTiddlerPlugin&quot;&gt;PartTiddlerPlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;archive/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#PartTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#PartTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;PartTiddlerPlugin&quot;&gt;PartTiddlerPlugin&lt;/a&gt;/latest/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#PartTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#PartTiddlerPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;PartTiddlerPlugin&quot;&gt;PartTiddlerPlugin&lt;/a&gt;.js&lt;/td&gt;&lt;td&gt;readonly&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#SettingsPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#SettingsPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;SettingsPlugin&quot;&gt;SettingsPlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;archive/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#SettingsPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#SettingsPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;SettingsPlugin&quot;&gt;SettingsPlugin&lt;/a&gt;/latest/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#SettingsPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#SettingsPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;SettingsPlugin&quot;&gt;SettingsPlugin&lt;/a&gt;.js&lt;/td&gt;&lt;td&gt;readonly&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TiddlerWithParamsPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TiddlerWithParamsPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TiddlerWithParamsPlugin&quot;&gt;TiddlerWithParamsPlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;archive/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TiddlerWithParamsPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TiddlerWithParamsPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TiddlerWithParamsPlugin&quot;&gt;TiddlerWithParamsPlugin&lt;/a&gt;/latest/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TiddlerWithParamsPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TiddlerWithParamsPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TiddlerWithParamsPlugin&quot;&gt;TiddlerWithParamsPlugin&lt;/a&gt;.js&lt;/td&gt;&lt;td&gt;readonly&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#XHTML10Plugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#XHTML10Plugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;XHTML10Plugin&quot;&gt;XHTML10Plugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;archive/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#XHTML10Plugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#XHTML10Plugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;XHTML10Plugin&quot;&gt;XHTML10Plugin&lt;/a&gt;/latest/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#XHTML10Plugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#XHTML10Plugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;XHTML10Plugin&quot;&gt;XHTML10Plugin&lt;/a&gt;.js&lt;/td&gt;&lt;td&gt;readonly&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;YourSearchPlugin&quot;&gt;YourSearchPlugin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;archive/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;YourSearchPlugin&quot;&gt;YourSearchPlugin&lt;/a&gt;/latest/&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;YourSearchPlugin&quot;&gt;YourSearchPlugin&lt;/a&gt;.js&lt;/td&gt;&lt;td&gt;readonly&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;</description>
<link>http://tiddlywiki.abego-software.de#SyncFileTiddlers</link>
<pubDate>Mon, 16 Apr 2012 21:35:00 GMT</pubDate>
</item>
<item>
<title>SyncFileTiddlerPlugin</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;SyncFileTiddlerPlugin&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Summary:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Automatically synchronizes the text of a tiddler with the content of an associated text file.&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.0 (2012-04-16)&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Source:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/#SyncFileTiddlerPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/#SyncFileTiddlerPlugin&quot; target=&quot;_blank&quot;&gt;http://tiddlywiki.abego-software.de/#SyncFileTiddlerPlugin&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;UdoBorkowski (ub [at] abego-software [dot] de)&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Licence:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://www.abego-software.de/legal/apl-v10.html&quot; title=&quot;External link to http://www.abego-software.de/legal/apl-v10.html&quot; target=&quot;_blank&quot;&gt;BSD open source license (abego Software)&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;&lt;strong&gt;Copyright:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;&#169;&lt;/span&gt; 2012 &lt;a class=&quot;externalLink&quot; href=&quot;http://www.abego-software.de&quot; title=&quot;External link to http://www.abego-software.de&quot; target=&quot;_blank&quot;&gt;abego Software&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h1&gt;About SyncFileTiddler&lt;/h1&gt;SyncFileTiddler automatically synchronizes the text of a tiddler with the content of an associated text file.&lt;br&gt;&lt;br&gt;The tiddlers to be synched are specified in a table in the tiddler SyncFileTiddlers. A table entry looks like this:&lt;br&gt;&lt;pre&gt;|SomeTiddler|path/To/File.txt|readonly|
&lt;/pre&gt;This will be rendered as:&lt;br&gt;&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td&gt;SomeTiddler&lt;/td&gt;&lt;td&gt;path/To/File.txt&lt;/td&gt;&lt;td&gt;readonly&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;When the &quot;readonly&quot; parameter is missing the tiddler is editable. Changes to the tiddler's text will be written to the associated file. &lt;br&gt;When &quot;readonly&quot; is specified the tiddler is not editable in the TiddlyWiki, but changes in the associated file will also change the tiddler's text accordingly. &lt;br&gt;The file is regularily read (&quot;polled&quot;) to verify if its text has changed. &lt;br&gt;&lt;br&gt;The tags of the tiddler can only be specified in the TiddlyWiki. The file will not affect the tags.&lt;br&gt;&lt;h1&gt;Revision history&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; SyncFileTiddlerPlugin 1.0.0 (2012-04-16)&lt;ul&gt;&lt;li&gt; initial version&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;Source Code&lt;/h1&gt;&lt;pre&gt;var abego = abego || {};

(function(namespace) {	
	var entries = {};

	var errorMsg = function(s) {
		throw &quot;SyncFileTiddler: &quot; + s;
	};
	
	var save = function(filepath, s) {
		var b = saveFile(filepath, s);
		if (!b) {
			throw errorMsg(&quot;file could not be saved: &quot; + filepath);
		}
		return s;
	};

	var createTiddler = function(title, text) {
		var t = store.createTiddler(title);
		t.text = text;
		return text;
	};

	var getTiddlerText = function(title) {
		return store.getTiddlerText(title, null);
	};

	var setTiddlerText = function(title, text) {
		var t = store.fetchTiddler(title);
		store.saveTiddler(title, title, text, &quot;SyncFileTiddler (&quot;
				+ config.options.txtUserName + &quot;)&quot;, new Date(), t.fields.tags);
		return text;
	};

	/**
	 * FIXME: also implement the &quot;delete&quot; case, i.e. delete the &quot;Slave&quot; when the
	 * &quot;Master&quot; is missing (need a deleteFile method first). (? What about
	 * losing tags when deleting the tiddler after a file delete?)
	 * 
	 * @param oldFileContent
	 *            [nullable] when not null it holds the content of the file as
	 *            it was loaded &quot;some time ago&quot;. Before the method overwrites
	 *            the file it checks if the file still has the oldFileContent.
	 *            If the file's current content differs from the oldFileContent,
	 *            the file was modified &quot;from the outside&quot;. Then we have a sync
	 *            conflict and the method fails.
	 * @param fileIsMaster
	 *            when true the file is the Master, i.e. the tiddler should get
	 *            the file's content. When false the file should get the
	 *            tiddler's content. When undefined the function should try to
	 *            find out what is the Master.
	 * @return [nullable] the text/content of the Tiddler/File, or null if
	 *         neither Tiddler nor File exists
	 */
	var syncTiddlerAndFile = function(tiddler, filepath, oldFileContent,
			fileIsMaster) {
		var tiddlerContent = getTiddlerText(tiddler);
		var fileContent = loadFile(filepath);
		
		if (fileContent) {
			fileContent = fileContent.replace(/\r\n/g,'\n');
			
			if (tiddlerContent) {
				// both file and tiddler exist.

				if (fileContent == tiddlerContent) {
					// both file and tiddler are equal
					return fileContent;

				} else {
					// file and tiddler differ.
					if (fileIsMaster === undefined) {
						// No Master is explicitly defined.
						throw errorMsg(&quot;tiddler and file have different content (delete the 'old' one to fix this):\n&quot;
								+ tiddler + &quot;\n&quot; + filepath);

					} else if (fileIsMaster) {
						// the file is the master, i.e. the tiddler gets the
						// file's content
						return setTiddlerText(tiddler, fileContent);

					} else {
						// the tiddler is the master, i.e. the file gets the
						// tiddler's text

						// But first check if the file was not modified in the
						// meantime
						if (oldFileContent &amp;amp;&amp;amp; oldFileContent != fileContent) {
							throw errorMsg(&quot;The file was modified externally: &quot;
									+ filepath);
						}
						return save(filepath, tiddlerContent);
					}
				}
			} else {
				// file exists, but no tiddler.

				// Create a new tiddler with the fileContent
				return createTiddler(tiddler, fileContent);
			}
		} else {
			if (tiddlerContent) {
				// tiddler exists, but no file.

				// create a file with the tiddler's content
				return save(filepath, tiddlerContent);
			} else {
				// Neither tiddler nor file exists.

				// do nothing
				return null;
			}
		}
	};

	var syncEntry = function(entry, fileIsMaster, ignoreOldFileContent) {
		if (entry.readonly &amp;amp;&amp;amp; !fileIsMaster) {
			return false;
		}
		
		entry.oldFileContent = syncTiddlerAndFile(entry.tiddler,
				entry.filepath, ignoreOldFileContent ? null
						: entry.oldFileContent, fileIsMaster);
		return true;
	};

	var saveAsFile = function(tiddler) {
		var e = entries[tiddler];
		if (e) {
			var s = getTiddlerText(tiddler);
			save(e.filepath, s);
			e.oldFileContent = s;
		}
	};

	// When a tiddler is saved and it is a &quot;SyncFileTiddler&quot; the corresponding
	// file is updated.
	var oldSaveTiddler = TiddlyWiki.prototype.saveTiddler;
	TiddlyWiki.prototype.saveTiddler = function(title, newTitle) {
		var result = oldSaveTiddler.apply(this, arguments);

		try {
			// &quot;Sync&quot; the tiddler with its file, with the tiddler being the
			// Master.
			// (Will do nothing if the tiddler is not a &quot;SyncFileTiddler&quot;)
			SyncFileTiddler.syncTiddler(newTitle, false);
		} catch (e) {
			if (confirm(&quot;The file to sync with was modified externally.\n\n&quot;
					+ &quot;Press OK to overwrite anyway.\n&quot;
					+ &quot;Press Cancel to keep file unchanged.&quot;)) {
				saveAsFile(newTitle);
			} else if (confirm(&quot;Use the file's content as the tiddler text?&quot;)) {
				syncEntry(entries[newTitle], true);
			}
		}
		return result;
	};

	// The tiddler must be readonly when its &quot;sync&quot; entry is readonly
	var oldIsReadOnly = Tiddler.prototype.isReadOnly;

	Tiddler.prototype.isReadOnly = function() {
		if (oldIsReadOnly.apply(this, arguments)) {
			return true;
		}
		var e = entries[this.title];
		return e &amp;amp;&amp;amp; e.readonly;
	}

	var pauseBetweenFilePolls = 2000;
	var polling = false;
	var pollFileChanges = function() {
		if (polling) {
			SyncFileTiddler.syncAll(true);

			// schedule the next time to poll for file changes
			setTimeout(pollFileChanges, pauseBetweenFilePolls);
		}
	};

	var SyncFileTiddler = {

		/**
		 * The tiddler is registered to be &quot;synched&quot; with the file.
		 * 
		 * If a tiddler is added more than once the last file specified is used.
		 * 
		 * @param tiddler
		 *            title of the tiddler to register
		 * @param filepath
		 *            path to the file to associate with the tiddler.
		 */
		add : function(tiddler, filepath, readonly) {
			if (!filepath.startsWith(&quot;/&quot;)) {
				// a path relative to the document
				var docPath = document.URL;
				if (!docPath.startsWith(&quot;file://&quot;))
					return;
				var p = docPath.substring(7, docPath.lastIndexOf(&quot;/&quot;) + 1);
				filepath = p + filepath;
			}

			entries[tiddler] = {
				tiddler : tiddler,
				filepath : filepath,
				readonly : readonly,
				oldFileContent : syncTiddlerAndFile(tiddler, filepath, null,
						true),
			};
		},

		/**
		 * &quot;Syncs&quot; the tiddler with its file.
		 * 
		 * Will do nothing when the tiddler is not a &quot;FileSyncTiddler&quot; (i.e. was
		 * not registered using add)
		 */
		syncTiddler : function(tiddler, fileIsMaster) {
			var e = entries[tiddler];
			if (e) {
				syncEntry(e, fileIsMaster);
				autoSaveChanges(true);
				return true;
			} else {
				return false;
			}
		},

		syncAll : function(fileIsMaster) {
			for ( var e in entries) {
				syncEntry(entries[e], fileIsMaster);
			}
			autoSaveChanges(true);
		},

		setPolling : function(b) {
			if (b == polling)
				return;

			polling = b;
			if (polling) {
				// start polling
				pollFileChanges();
			}
		},

		isPolling : function() {
			return polling;
		},

		setPauseBetweenFilePolls : function(millis) {
			pauseBetweenFilePolls = millis;
		},
		
		getPauseBetweenFilePolls : function() {
			return pauseBetweenFilePolls;
		},
		
		addSyncFileTiddlers : function() {
			var s = store.getTiddlerText(&quot;SyncFileTiddlers&quot;);
			if (!s)
				return;

			var lines = s.split(&quot;\n&quot;);
			for ( var i = 0; i &amp;lt; lines.length; i++) {
				var line = lines[i];
				var a = line.split('\|');
				if (a.length &amp;gt;= 3) {
					var tiddler = a[1];
					var filepath = a[2];
					var readonly = a.length &amp;gt;= 4 &amp;amp;&amp;amp; a[3]==&quot;readonly&quot;;
					SyncFileTiddler.add(tiddler, filepath,readonly);
				}
			}
		}
	};

	namespace.SyncFileTiddler = SyncFileTiddler;

})(abego);

setTimeout(function() {
	abego.SyncFileTiddler.addSyncFileTiddlers();
	abego.SyncFileTiddler.setPolling(true);
},1);
&lt;/pre&gt;</description>
<category>systemConfig</category>
<link>http://tiddlywiki.abego-software.de#SyncFileTiddlerPlugin</link>
<pubDate>Mon, 16 Apr 2012 21:14:00 GMT</pubDate>
</item>
<item>
<title>MainMenu</title>
<description>&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#About&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#About&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;About&quot;&gt;About&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TiddlyWiki&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TiddlyWiki&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TiddlyWiki&quot;&gt;TiddlyWiki&lt;/a&gt;&lt;br&gt;&lt;span class=&quot;abegoLink&quot;&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://www.abego-software.de&quot; title=&quot;External link to http://www.abego-software.de&quot; target=&quot;_blank&quot;&gt;abego Software&lt;/a&gt;&lt;/span&gt;&lt;br&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#abegoExtensions News&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#abegoExtensions News&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;abegoExtensions News&quot;&gt;News&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#Plugins&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#Plugins&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;Plugins&quot;&gt;Plugins&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#Installing Plugins&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#Installing Plugins&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;Installing Plugins&quot;&gt;Installing Plugins&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#Download&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#Download&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;Download&quot;&gt;Download&lt;/a&gt;&lt;br&gt;&lt;span class=&quot;abegoLink&quot;&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/archive&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/archive&quot; target=&quot;_blank&quot;&gt;Archive&lt;/a&gt;&lt;/span&gt;&lt;br&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#Donations&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#Donations&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;Donations&quot;&gt;Donations&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#Copyright&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#Copyright&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;Copyright&quot;&gt;Copyright&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#Contact&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#Contact&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;Contact&quot;&gt;Contact&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#Imprint&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#Imprint&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;Imprint&quot;&gt;Imprint&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;sup&gt;&#169; 2005-2012&lt;br&gt;&lt;a class=&quot;externalLink&quot; href=&quot;http://www.abego-software.de&quot; title=&quot;External link to http://www.abego-software.de&quot; target=&quot;_blank&quot;&gt;abego Software&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;</description>
<category>basic</category>
<link>http://tiddlywiki.abego-software.de#MainMenu</link>
<pubDate>Mon, 16 Apr 2012 19:50:00 GMT</pubDate>
</item>
<item>
<title>YourSearchPlugin-src</title>
<description>For &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#YourSearchPlugin&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;YourSearchPlugin&quot;&gt;YourSearchPlugin&lt;/a&gt; source code see the &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de/archive&quot; title=&quot;External link to http://tiddlywiki.abego-software.de/archive&quot; target=&quot;_blank&quot;&gt;archive&lt;/a&gt;.</description>
<category>YourSearchProject</category>
<link>http://tiddlywiki.abego-software.de#YourSearchPlugin-src</link>
<pubDate>Mon, 16 Apr 2012 17:56:00 GMT</pubDate>
</item>
<item>
<title>YourSearchItemTemplate</title>
<description>&lt;pre&gt;&amp;lt;span class='yourSearchNumber' macro='foundTiddler number'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span class='yourSearchTitle' macro='foundTiddler title'/&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;nbsp;-&amp;amp;nbsp;
&amp;lt;span macro='foundTiddler field includeURL'/&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;nbsp;-&amp;amp;nbsp;
&amp;lt;span class='yourSearchTags' macro='foundTiddler field tags 50'/&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span macro=&quot;yourSearch if previewText&quot;&amp;gt;&amp;lt;div class='yourSearchText' macro='foundTiddler field text 250'/&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/span&amp;gt;
&lt;/pre&gt;</description>
<category>YourSearchProject</category>
<link>http://tiddlywiki.abego-software.de#YourSearchItemTemplate</link>
<pubDate>Mon, 16 Apr 2012 17:56:00 GMT</pubDate>
</item>
<item>
<title>ViewTemplate</title>
<description>&amp;lt;div class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler editIncludedTiddler intelliTagsEdit permalink references jump'&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;&amp;lt;div class='title' macro='view title'&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;&amp;lt;div class='subtitle' macro='view includeURL'&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;&amp;lt;!&lt;span&gt;&#8212;&lt;/span&gt; &amp;lt;div class='subtitle'&amp;gt;&amp;lt;span macro='view modifier link'&amp;gt;&amp;lt;/span&amp;gt;, &amp;lt;span macro='view modified date &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#DD MMM YYYY&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#DD MMM YYYY&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;DD MMM YYYY&quot;&gt;DD MMM YYYY&lt;/a&gt;'&amp;gt;&amp;lt;/span&amp;gt; (created &amp;lt;span macro='view created date &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#DD MMM YYYY&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#DD MMM YYYY&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;DD MMM YYYY&quot;&gt;DD MMM YYYY&lt;/a&gt;'&amp;gt;&amp;lt;/span&amp;gt;)&amp;lt;/div&amp;gt; &lt;br&gt;&amp;lt;div class='tagging' macro='tagging'&amp;gt;&amp;lt;/div&amp;gt; &lt;strike&gt;&amp;gt;&lt;br&gt;&amp;lt;div class='tagged' macro='tags'&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;&amp;lt;div class='viewer' macro='view text wikified'&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;&amp;lt;div class='tagClear'&amp;gt;&amp;lt;/div&amp;gt;&lt;/strike&gt;</description>
<category>basic</category>
<link>http://tiddlywiki.abego-software.de#ViewTemplate</link>
<pubDate>Mon, 16 Apr 2012 17:55:00 GMT</pubDate>
</item>
<item>
<title>TiddlyWikis</title>
<description>see &lt;a class=&quot;externalLink&quot; href=&quot;http://tiddlywiki.abego-software.de#TiddlyWiki&quot; title=&quot;External link to http://tiddlywiki.abego-software.de#TiddlyWiki&quot; target=&quot;_blank&quot; refresh=&quot;link&quot; tiddlylink=&quot;TiddlyWiki&quot;&gt;TiddlyWiki&lt;/a&gt;</description>
<category>basic</category>
<link>http://tiddlywiki.abego-software.de#TiddlyWikis</link>
<pubDate>Mon, 16 Apr 2012 17:55:00 GMT</pubDate>
</item>
</channel>
</rss>