~AndroidCat is loading ...

Requires Javascript.
AndroidCat - Thoughts and Stuff
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
<html><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/QSadZeWso8k&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/QSadZeWso8k&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></html>
*http://www.apologeticsindex.org/l33.html
*[[Tokyo Cult Finds an Unlikely Supporter|http://www.religionnewsblog.com/10184]] (May 5, 1995),  T.R. Reid, //Washington Post//
!Minipedia
Welcome to ~MiniPedia! The latest version and more information can be found on the author's website: http://flx.me
!!What is ~MiniPedia?
~MiniPedia is a heavily modified version of  ~TiddlyWiki that tries to resemble ~MediaWiki as much as possible. ~TiddlyWiki is a single file, self-contained wiki for managing micro-content, written in ~JavaScript. Which means:
!!!It's a single file
A complete ~MiniPedia is stored in a single file on your computer. That makes it super-easy to move your ~MiniPedia around on a USB stick or by emailing it to yourself.
!!!It's self-contained
The single file that is a ~MiniPedia contains not only all of your data, but all the machinery to edit and manipulate it. All you need is a modern web browser, like Mozilla Firefox, Microsoft Internet Explorer, Google Chrome or Opera. You don't need to have any other special programs installed on your computer, and you don't need to be connected to the Internet.

The same ~MiniPedia file will work on just about any computer: Windows ~PCs, Apple Macs, Linux and BSD boxes..
!!!It's a wiki
A wiki is a collection of web pages, like a normal web site, except that every page can be edited, easily and immediately.  Wiki systems are often used to collaboratively manage documentation for large projects, and also sometimes used by a single user as a kind of personal notebook.
!!!It manages micro-content
Most web sites and wikis manage information as pages.  ~MiniPedia is different -- it saves your stuff in smaller chunks (each chunk is called a 'tiddler' or 'article').  Information in small chunks like this is called 'micro-content', and once you start using ~MiniPedia, you realize that micro-content is a natural fit to a lot of the stuff you deal with every day.

!Save Instructions
!!Internet Explorer
# In IE, choose Tools > Internet Options
# Go to the Security tab and select "Local Intranet" Zone
# Click Default Level (to clear the Custom Level settings)
# Set the Security level to Low
# Close all open browsers
# You can now edit the wiki

!!!Also Try:
If ~MiniPedia has been downloaded using Internet Explorer on Windows XP with Service Pack 2 and stored on an ~NTFS-formatted drive, any attempts to save changes will usually fail with the following error message: 
It's not possible to save changes. Possible reasons include: 
* your browser doesn't support saving (Firefox, Internet Explorer, Safari and Opera all work if properly configured) 
* the path name to your ~MiniPedia file contains illegal characters 
* the ~MiniPedia HTML file has been moved or renamed 
The solution is to right-click on the ~MiniPedia HTML file and choose Properties. If the file is blocked, there will be an Unblock button on the resulting property sheet, which will remove the protection and allow the file to be saved. See the example here: http://tiddlywiki.org/wiki/Image:WinXP_SP2_unblock.png
!!Mozilla Firefox
When saving for the first time it will ask you if you allow the file to be updated. Click yes to allow to save changes.
!!Other Browsers (Safari, Opera, Google Chrome, etc)
In order to save with other browsers you'll need to have a special jar file to circumvent the javascript filewrite policies. Download [[TiddlySaver.jar|http://www.tiddlywiki.com/TiddlySaver.jar]] and put it in the same directory as ~MiniPedia. After this reload MiniPedia and try to save changes.

More detailed information/help for other browsers or operating systems can be found here: [[How To/Configure your browser to allow saves to disk|http://tiddlywiki.org/wiki/Configuring_your_browser_to_allow_saves_to_disk]]

!Customization
Since ~MiniPedia is based on ~TiddlyWiki, most (if not all) plugins that are designed for ~TiddlyWiki version 2.5.3 will work on ~MiniPedia. You can find plugins to use here: [[TiddlyVault|http://tiddlyvault.tiddlyspot.com]]
Please be aware that I can't help out a lot if you mess things up. Always create backups!
!!Title and Subtitle
You can set the wiki title and subtitle by editing the [[SiteTitle]] and [[SiteSubtitle]] articles.

!!Default Tiddlers
In the [[DefaultTiddlers]] article you can customize what tiddlers to open when the page is being loaded. For now only [[Home]] is being shown. If you'd like to have more, please enter them here following a new line (Enter Key).

!!Styling
The design can be changed by editing the following articles:

<<tiddlerList tags:MiniPediaTheme>>
!Credits
''Most of the plugins and some of the core code has been amended, please do not seek help from these authors concerning ~MiniPedia.''

Jeremy Ruston, Michael Mahemoff and many others - [[TiddlyWiki|http://www.tiddlywiki.com]]
Clint Checketts - [[Initial ~TiddlyPedia Theme|http://tiddlythemes.com/#TiddlyPedia]]
Pascal Collin - [[TiddlersBarPlugin|http://visualtw.ouvaton.org/VisualTW.html]]
Doug Compton (and many others) - [[TableOfContentsPlugin|http://devpad.tiddlyspot.com/#DcTableOfContentsPlugin]]
Jack Parke - [[TiddlerListMacro|http://jackparke.googlepages.com/jtw.html#TiddlerListMacro]]
Eric Shulman - [[CheckboxPlugin|http://www.tiddlytools.com/#CheckboxPlugin]]
Saq Imtiaz (lewcid) - [[OpenTiddlersMacro|http://tw.lewcid.org/#OpenTiddlersMacro]]
Michael Mahemoff - [[SimpleMessagePlugin|http://tiddlywiki.mahemoff.com/SimpleMessagePlugin.html]]
<<showtoc>>
!Timeline
|sortable|k
||<<autosort>>Year|Event|h
||1983|American Psychological Association (APA) forms DIMPAC, Margaret Singer chair.|
||1987-02-10|//amicus curiae// brief submitted by APA and academics Jeffrey Hadden, Eileen Barker, David Bromley and J. Gordon Melton, Joseph Bettis, Durwood Foster, William R. Garret, Richard D. Kahone, Timothy Miller, John Young, James T. Richardson, Ray L. Hart, Benton Johnson, Franklin Littell, Newton Malony, Donald E. Miller, Mel Prosen, Thomas Robbins, and Huston Smith.|
||1987-03-24|APA withdraws from the brief.|
||1986-11|DIMPAC submits "Final draft of Task Force Report"|
||1987-05|APA rejects DIMPAC report|
||1989-08-02|Benjamin Zablocki's letter to the ASA Council re: Singer|
||1989-10-27|Informal meeting in Salt Lake City of NRM social scientists ^^who?^^|
||1989-12-20|[[Memorandum to Social scientists concerned about forensic and related issues dealing with New Religious Movements|http://groups.google.ca/group/alt.religion.scientology/browse_frm/thread/aa33a6b39979093c/90ba279ba2e083d6#90ba279ba2e083d6]] Hadden, Barker and Bromley, Scientology lawyer Eric Lieberman. [[Rick Ross annotated|http://www.rickross.com/reference/apologist/apologist19.html]]|
||1993|The Family International contacts [[AWARE|http://www.apologeticsindex.org/a106.html]].|
||1994|[[Apologetic book|http://www.apologeticsindex.org/c26.html#aware]] by AWARE (Lewis and Melton) on The Family.|
||1994|James R. Lewis interferes with the publication of a book on The Family by Stephen Kent and Theresa Krebs.|
||1992|Association of World Academics for Religious Freedom (AWARE) formed.|
!Scholar camps
!!"Apologist" camp
|sortable|k
|Tag|<<autosort>>Name|Qualifications|Organization|Connections|h
|[img[x|image/SeriousWarning.png]]|Barker, Eileen|Emeritus member of the London School of Economics|Information Network Focus on Religious Movements (INFORM)|Unification apologist. Commonly quoted for Strawman argument that irreversible brainwashing doesn't exist because many people leave cultic groups, sometimes after years in. (I don't think Singer et al said that thought reform was irreversible.) |
||Maloney, Newton|Professor of Psychology, Fuller Theological Seminary, Pasadena(?)|||
|[img[x|image/SeriousWarning.png]]|[[Introvigne, Massimo|http://en.wikipedia.org/wiki/Massimo_Introvigne]]|Lawyer, self-promotion|[[CESNUR]]|
||Wilson, Bryan|Late Reader Emeritus in Sociology at the University of Oxford||Standardly quoted by ~CoS. Seems to have been [[completely taken in by staged PR|http://knol.google.com/k/csi-resource-center/the-congregational-services-of-the/d94yulooejvb/28#]]. (No ex-member has seen anything like the ceremony that he describes.)|
|[img[x|image/Warning.png]]|Davis, Derek H.|||Incredibly awful papers like this one: [[Davis, Derek H. (2004). "The Church of Scientology: In Pursuit of Legal Recognition" (PDF)|http://www.umhb.edu/files/academics/crl/publications/articles/the_church_of_scientologypursuit_of_legal_recognition.pdf]]. Zeitdiagnosen: Religionsfreiheit und Konformismus. Über Minderheiten und die Macht der Mehrheit, Münster, Germany: Lit Verlag. Was this ''really'' published??|
|[img[x|image/SeriousWarning.png]]|[[Shupe, Anson|http://en.wikipedia.org/wiki/Anson_Shupe]]|Professor Indiana State ~University-Purdue University|[[AWARE|http://www.apologeticsindex.org/c29.html]]|A good friend of Scientology lawyer Moxon who he relies on for neutral factual information for books and papers attacking targets like Old CAN.|
|[img[x|image/Warning.png]]|Bromley, David||||
|[img[x|image/SeriousWarning.png]]|[[Melton, Gordon|http://en.wikipedia.org/wiki/J._Gordon_Melton]]|"research specialist"|Institute for the Study of American Religions (ISAR)([[defunct?|http://www.americanreligion.org/]]), [[CESNUR USA|CESNUR]] [[AWARE|http://www.apologeticsindex.org/c26.html#aware]]|[[AUM]]. Glossed over Snow White as "stealing some Xerox paper", didn't know of the premier US survey data with ~CoS's numbers. Used uncredited and unreferenced ~CoS version of Hubbard's life, Scientology history, including Blackfeet "Blood Brother" and japanese sub sinking (like WTF!?).|
|[img[x|image/SeriousWarning.png]]|[[Hadden, Jeffrey K.|http://en.wikipedia.org/wiki/Jeffrey_K._Hadden]]|Late professor of sociology, University of Virginia||[[Memorandum Social scientists concerned about forensic and related issues dealing with New Religious Movements|http://groups.google.ca/group/alt.religion.scientology/browse_frm/thread/aa33a6b39979093c/90ba279ba2e083d6#90ba279ba2e083d6]] (Later Eileen Barker and David Bromley denied having anything to do with this. [[Eric Lieberman|http://home.primus.ca/~ronsharp/FrontCiteTW.html#tag:[[Eric%20Lieberman%5d%5d]] is a lawyer for the Church of Scientology.)|
|[img[x|image/Warning.png]]|[[Chryssides, George D.|http://en.wikipedia.org/wiki/George_Chryssides]]|||Basic legal fact error in [[New Religious Movements by Bryan R. Wilson, Jamie Cresswell|http://books.google.ca/books?id=iA7yQENNCmQC&pg=PA266&lpg=PA266&dq=Cyril+Vosper+kidnapping&source=bl&ots=pmfezSXoo8&sig=9Uf4EYlgcOwYYQiDqEw1xF_in7o&hl=en&ei=QcKhSYyME4TcNLKA0d4L&sa=X&oi=book_result&resnum=9&ct=result]] Prem Rawat apologist|
|[img[x|image/SeriousWarning.png]]|[[Lewis, James R.|http://en.wikipedia.org/wiki/James_R._Lewis]]|Not a Ph.D as claimed. (oops, now he is, he says.)|Writer.  [[Association of World Academics for Religious Education|http://www.apologeticsindex.org/l33.html#family]] (AWARE) [[Center for Academic Publication|http://www.apologeticsindex.org/c27.html]] (self-pub)|[[AUM]] [[more|http://web.archive.org/web/20030622142613/http://www.silcom.com/~patrick/JAPANwaco.htm]]. In cooperation with the Family, [[interfered with the publication of a book by Dr. Kent|http://www.apologeticsindex.org/c25.html]], as well as other papers. With help from [[Jossi]], edited his own Wikipedia article (as "~ProfLewis"). [[AWARE|http://www.apologeticsindex.org/c27.html]] co-founded by CUT. ([[contractual agreement??|http://www.apologeticsindex.org/a106a.html]])|
||[[Kliever, Lonnie D.|http://en.wikipedia.org/wiki/Lonnie_Kliever]]|Ph.D, Professor of Religious Studies at Southern Methodist University||[[CoS tame expert page|http://www.humanrights-germany.org/experts/eng/kliever01.pdf]] |
||Flinn, Frank K.|||[[November 27, 1994 comment on CoS secrets (on CoS site)|http://www.theta.com/copyright/flinn.htm]] Probably related to a CoS court case.|
|[img[x|image/SeriousWarning.png]]|Anthony, Dick|"Research and forensic psychologist"|Research Director of the Center for the Study of New Religions ^^([[CESNUR]] wtf?)^^ at the Graduate Theological Union in Berkeley California. (Bogus)|Used as an expert witness to block brainwashing as an accepted scientific theory in court cases.|
!!"Anti Cult" camp
|sortable|k
|Tag|Name<<autosort>>|Qualifications|Organization|Connections|h
||[[Lifton, Robert|http://en.wikipedia.org/wiki/Robert_Jay_Lifton]]|||1961 book //Thought Reform and the Psychology of Totalism: A Study of "Brainwashing" in China.// Used as a soft-target for dismissing any study of the subject.|
||Singer, Margaret||||
||Ofshe, Richard||||
||West, L. J. (Jolly)||||
||Kent, Stephen A.||||
||[[Beit-Hallahmi, Benjamin|http://en.wikipedia.org/wiki/Benjamin_Beit-Hallahmi]]|Professor of psychology at the University of Haifa, Israel|||
||Dvorkin, Alexander||||
||[[Zimbardo, Philip|http://en.wikipedia.org/wiki/Philip_Zimbardo]]|Pacific Graduate School of Psychology as Professor of Psychology|||
||[[Zablocki, Benjamin|http://en.wikipedia.org/wiki/Benjamin_Zablocki]]|Professor of sociology at Rutgers University|||
!!Neutral or unclassified
|sortable|k
|Tag|Name<<autosort>>|Qualifications|Organization|Connections|h
||Horowitz, Irving Louis||||
||Beckford, James A.||||
||Richardson, Jim||||
||Robbins, Tom||||
||Galanter, Marc||||
||Levine, Saul||||
||Hall, John||||
||Dawson, Lorne||||
||Cowan, Douglas E.|Assistant Professor of Religious Studies at the University of Waterloo|||
||Urban, Hugh B.|Professor of religious studies at Ohio State University|||
!Memorandum to Social scientists
|Title|Memorandum to Social scientists concerned about forensic and related issues dealing with New Religious Movements|
|Authors|Jeffrey K. Hadden (on behalf of Eileen Barker and David Bromley)|
|Published|December 20, 1989|
|Leaked|October 7, 1998|
!!Pre memorandum meetings
*New York, December 10-12 1989
*Social scientist "informants"
**Perry London (Dean of the Graduate School of Applied and Professional Psychology at Rutgers University);
**Marc Galanter (Professor of Psychiatry and Director of the Division of Alcoholism and Drug Abuse at the NYU School of Medicine)
*"Our legal consultant"
**Eric Lieberman (attorney who has been involved in a number of NRM cases) //(Church of Scientology lawyer)//
*National Council of Churches
**Dean Kelley
*Unification Church
**John Biermans
**David Hager
**Hugh Spurgen
**"I pressed them on the question of whether it might be possible for the UC in collaboration with several other ~NRMs to raise a significant amount of money that could go - no strings attached - to an independent group, which in turn, would entertain proposals and fund research on ~NRMs."
!List of relevant publications
*Zablocki, Benjamin, [[The Blacklisting of a Concept: The Strange History of the Brainwashing Conjecture in the Sociology of Religion|http://www.rci.rutgers.edu/~zablocki/Articles/Zablocki-Blacklisting%20of%20a%20Concept.pdf]], Nova Religio, October 1997.
*[[Excerpts From: Brainwashing Allegations And The Elizabeth Smart Abduction by Dick Anthony|http://web.archive.org/web/20071013162736/http://religiousfreedoms.org/articles/article_brainwashing_elizabeth_smart.htm]]
*[[BRAINWASHING ALLEGATIONS AND THE ELIZABETH SMART ABDUCTION|http://www.cesnur.org/2003/smart_anthony.htm]], Dick Anthony, CESNUR, 2003.
*[[Joining Religious Movements: The Brainwashing Model|http://web.archive.org/web/19991128213910/cti.itc.virginia.edu/~jkh8x/soc257/lectures/brainw.html]] Jeffrey K. Hadden's strategy piece on the strawman of brainwashing.
*Rosedale, Herbert, [[Questions from the Balcony: A Critique of Dick Anthony|http://www.icsahome.com/infoserv_articles/rosedale_herbert_questionsfromthebalcony.htm]], Cults and Society, Vol. 1, No. 1, 2001
*Amitrani, Alberto; Di Marzio, Raffaella, [["Mind Control" in New Religious Movements and the American Psychological Association|http://www.icsahome.com/infoserv_articles/amitrani_alberto_apaandmindcontrol.htm]], Cults and Society, Vol. 1, No. 1, 2001
*Amitrani, Alberto; Di Marzio, Raffaella, [[Blind or Just Don't Want to See? Brainwashing, Mystification, and Suspicion|http://www.icsahome.com/infoserv_articles/amitrani_alberto_and_dimarzio_raffaella_blindordontwanttosee.htm]], Cults and Society, Vol. 1, No. 1, 2001
!!Papers/letters/articles detailing scholar fights
*http://www.apologeticsindex.org/a106.html
*http://www.apologeticsindex.org/c59.html, Benjamin ~Beit-Hallahmi.
*[[Skeptic forum index|http://www.apologeticsindex.org/c34.html]]
*Stephen A. Kent; Theresa Krebs, [[When Scholars Know Sin|http://www.apologeticsindex.org/c25.html]] Skeptic Magazine (Vol. 6, No. 3, 1998)
**[[Mea Culpa! Mea Culpa!|http://www.apologeticsindex.org/c36.html]] J. Gordon Melton Responds
**[[Kent and Krebs' Skepticism Crosses The Line|http://www.apologeticsindex.org/c38.html]] Anson Shupe Responds
**[[Let The Scholar Who Is Without Sin Cast The First Stone|http://www.apologeticsindex.org/c39.html]] James R. Lewis Responds
***[[Clarifying Contentious Issues: A Rejoinder To Melton, Shupe, And Lewis 1/2|http://www.arts.ualberta.ca/~skent/Linkedfiles/Clarifying%20Contentious%20Issues.htm]], Stephen A. Kent and Theresa Krebs.
***[[Clarifying Contentious Issues: A Rejoinder To Melton, Shupe, And Lewis 2/2|http://www.apologeticsindex.org/c41.html]], Stephen A. Kent and Theresa Krebs.
!External links
*[[How Experts View Scientology|http://www.newsfrombree.co.uk/reviews.htm]], Hartley Patterson.
*http://www.spiritus-temporis.com/brainwashing/brainwashing-controversies.html
!Stuff to be mixed in
!!Quote
In 2002, APA's then president, Philip Zimbardo wrote in Psychology Monitor:
>"A body of social science evidence shows that when systematically practiced by state-sanctioned police, military or destructive cults, mind control can induce false confessions, create converts who willingly torture or kill "invented enemies," engage indoctrinated members to work tirelessly, give up their money -- and even their lives -- for "the cause." (Zimbardo, 2002)
!!To do
*Tag and Wikilink the publications.
*Working Wikipedia ref footnotes would be nice.
*Examine the argument that books being used in course curriculum legitimizes them. 
*Strive for neutral POV, haha.
To add items to the featured articles list, add the tag ''Featured'' to the entry.
To remove from the featured articles list, remove the tags ''Featured'' from the entry.
To hide the article from the index, add the ''sysfile'' tag to the entry.

all articles
<<tiddlerList>>
sysfile
<<tiddlerList tags:sysfile>>
systemConfig:
<<tiddlerList tags:systemConfig>>
"""MiniPediaTheme"""
<<tiddlerList tags:MiniPediaTheme>>
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>
<<options>>
!!!Web sites
*[[Chanology Toronto 2.0 - The Game|http://torontoanonymous.proboards.com/]]
*[[Anonymous Toronto Wiki|http://anonymoustoronto.wiki-site.com/index.php/Main_Page]]
!!!My pictures of Anonymous in Toronto
[>img[Nan and the Pirates|http://s260.photobucket.com/albums/ii2/MockerRule/TParty061408/th_LPIC0157.jpg][http://i260.photobucket.com/albums/ii2/MockerRule/TParty061408/LPIC0157.jpg]]
*[[February 10th, 2008|http://s260.photobucket.com/albums/ii2/MockerRule/TParty021008/]]
*[[March 15th, 2008|http://s260.photobucket.com/albums/ii2/MockerRule/TParty031508/]]
*[[April 12th, 2008|http://s260.photobucket.com/albums/ii2/MockerRule/TParty041208/]]
*[[May 10th, 2008|http://s260.photobucket.com/albums/ii2/MockerRule/TParty051008/]]
*[[May 24th, 2008|http://s260.photobucket.com/albums/ii2/MockerRule/Flash052408/]] mini raid
*[[June 14th, 2008|http://s260.photobucket.com/albums/ii2/MockerRule/TParty061408/]]
!!!Videos
<html><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Ggvzn402SPs&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Ggvzn402SPs&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></html>
!!!Other
*[[Nature walk along the Bruce Trail, through the Canadian Advanced Org|http://s260.photobucket.com/albums/ii2/MockerRule/NatureTrail/]]
**[[Google maps|http://maps.google.ca/maps?f=q&source=s_q&hl=en&geocode=&q=793435+3rd+Line+Mono++Orangeville,+Ontario&sll=43.979661,-80.026045&sspn=0.022574,0.055404&ie=UTF8&t=h&hq=&hnear=3rd+Line+E,+Mono,+Dufferin+County,+Ontario&ll=43.975121,-80.035465&spn=0.013635,0.032659&z=16]]
{{autocolumns{
<<tiddlerList tags:-sysfile,-systemConfig,-MiniPediaTheme group:"tiddler.title.substr(0,1)" groupTemplate:'!%group\n'>>
}}}
Online copies (ordered by date):
*[[Kaufman, Robert|Robert Kaufman]] (1972). [[Inside Scientology|http://www.factnet.org/Books/InsideScientology/index.htm]]. Olympia Press. (Revised 1995)
*[[Rolph, C.H.]] (1973) [[Believe What You Like: What happened between the Scientologists and the National Association for Mental Health.|http://www.cs.cmu.edu/~dst/Library/Shelf/rolph/]] Andre Deutsch Limited, London. 1973. ISBN: 023-396-3758
*[[Forte, John|John Forte]] (1980). [[The Commodore and the Colonels|http://www.spaink.net/cos/colonels/colonels.htm]], Corfu Tourist Publications & Enterprises, Greece.
*[[Miller, Russell|Russell Miller]] (1987). [[Bare-Faced Messiah, The True Story of L. Ron Hubbard|http://www.clambake.org/archive/books/bfm/bfmconte.htm]], First American Edition, New York: Henry Holt & Co, 305-306. ISBN 0-8050-0654-0.
*[[Atack, Jon|Jon Atack]] (1990). [[A Piece of Blue Sky|http://www.cs.cmu.edu/~dst/Library/Shelf/atack/index.html]]. New York, NY: Carol Publishing Group. ISBN 0-8184-0499-X.
*[[Wakefield, Margery|Margery Wakefield]] (1991). [[Understanding Scientology|http://www.cs.cmu.edu/~dst/Library/Shelf/wakefield/us.html]].
*[[Corydon, Bent|Bent Corydon]] (1992). [[L. Ron Hubbard: Messiah or Madman|http://www.clambake.org/archive/books/mom/Messiah_or_Madman.txt]], Barricade Books; Revised edition. ISBN 0-942637-57-7
!!!!Book Lists
http://members.ams.chello.nl/mgormez/books/
http://www.cs.cmu.edu/~dst/Library
http://www.xenu.net/archive/books/
http://www.xenu.net/archive/books/cult_etc.html
*Runs conventions which claim to be academic, but critical scholars are rarely allowed in the club house and the level of work is abysmal at best with no review or fact-checking -- Strictly NRM [[fandom|http://en.wikipedia.org/wiki/Fandom]] with pro ~GoHs.
*Massimo Introvigne's [[personal web site|http://en.wikipedia.org/wiki/Personal web page]].
**One CESNUR presentation by Shupe and Darnell @@and Moxon@@ published on the site carefully omits any mention of the Scientology lawyer.
**Many presentations are incomplete, without references and should not be cited.
**Web site has extensive Dracula and Buffy the Vampire Slayer pages. (Not a bad thing as such, but it doesn't help in trying to take the site seriously.)
!!!CESNUR censorship
*Tried to have a web site critical of CESNUR shut down.
!!!CESNUR vs Usenet
*Trolled ARS and when caught, claimed that it was all an experiment, it proved them right, neener-neener.
**It was a lame noob effort by trolling standards.
**By academic standards, their study/experiment excuse made no sense.
**http://www.cesnur.org/testi/anticult_terror.htm
Fair trade use of CESNUR/Introvigne text, interspersed with my comments.
>>Participation in Usenet newsgroups by social scientists, whose aim is to collect and analyze data, has often been practised, and almost as often has raised a range of ethical issues concerning the protection of individual privacy (Clarke 1994). Surely, as Smith (1999, 211-212) argues, "researchers have a responsibility to consider the impact of their work": "the light cast by researchers can also act as a beacon for others, making the space all but useless for its participants. Online researchers have the potential of becoming social locusts, descending on online spaces and rendering them barren". King (1996) proposed ethical guidelines for social scientists researching the Usenet, arguing that covert participant observation and "deception" were admissible, as long as data were anonymized in the presentation with respect to both the identities of the participants and the location of the online space itself. With this literature, and the evolution of technology, in mind, I decided in preparing this chapter to carry out a limited covert participant observation of a number of Italian (and a couple of non-Italian) newsgroups in which extreme anti-cultists had posted repeated messages advertising their anti-cult and anti-"apologists" Web sites.
>You decided to spam your web sites and troll the groups, and any claim of an aim to collect and analyze data seems like a retroactive excuse after you found out that you weren't very clever at hiding.
>
>(You missed a label when you used "extreme anti-cultists". Didn't you mean "extreme anti-cultist ''terrorists''"? If you're going to toss ad hominems, why not use the whole basket?)
>>These messages had normally gone unchallenged, except by newsgroup purists claiming that they were "off topic". A small group of students associated with CESNUR’s library in Turin, Italy, conducted a covert participant observation programme for more than three months extending from the original Italian to some non-Italian newsgroups as well (including, occasionally, alt.religion.scientology).
>The way ARS is mentioned as a kind of afterthought is amusing.
>>They systematically answered the anti-cult postings, both arguing and impugning their motivations with arguments similar to those used by the "opponents" themselves. Identity experiments conducted in earlier studies of newsgroups were replicated, by asking both different people to post with the same user ID, and the same person to post under a number of different ~IDs.
>References to these //earlier studies//, please?
>
>Wait, you seem to be describing some [[Bizarro World|http://en.wikipedia.org/wiki/Bizarro_World]] version of [[single or double-blind test procedures|http://en.wikipedia.org/wiki/Blind_experiment#Double-blind_trials]]. Please tell me that I'm mistaken. In any event, the identifiable headers made the swapping quite moot.
>>This led, ultimately, to passwords for the same user ID being distributed to persons outside the circle of those actually participating in the experiment.
>And by distributed, you mean informally passed around through the grapevine. That sounds like very poor control and sloppy experimental procedures.
>>Some fierce flame wars were engaged in on both "sides". Interestingly enough, new users unknown and unrelated to the group conducting the experiments took "our" side.
>Sure they did... (And you were @@supported by the lurkers@@ too, no doubt!)
>>Others continued to complain (mostly rightly) that the discussions were "off topic" in newsgroups not directly related to new religious movements or "cults". When the experiment finally came to an end, one of the original participants posted a fancy message "signed" (but never written by) the undersigned implying that the whole business was in fact a covert participant observation, much to the annoyance of the anti-cultists. In fact, the participant observation was not entirely covert, in the sense that almost everybody in the anti-cult camp was immediately able to understand that a number of fancy ~IDs were, in fact, associated to some degree with CESNUR.
>i.e. You botched the covert conditions of the experiment and got caught, oops! No surprise: The participants were experienced at the same games played for years by the Church of Scientology, and you were noobs far out of your depth and understanding of how Usenet and the Internet work.
>
>Imagine doing a study on prank phone calls by making them, without considering the ethics involved, or knowing about ~Caller-ID...
>>Indeed, all messages emanating from the original group involved in the research were posted from two computers in CESNUR’s Turin library, using the same operating system, and were quite easy to identify by anybody vaguely familiar with headers, let alone the computer "wiz kids" who abound in the extreme anti-cult subculture.
>Beforehand, you weren't even vaguely familiar with "fancy" ~IDs or headers and were surprised when you got caught and the involuntary subjects of the experiment bit back.
>>In fact, after a few weeks, anti-cultists associated with both alt.religion.scientology and Italian extreme anti-cult sites such as Allarme Scientology and Kelebek had concluded that the threads could be traced back to CESNUR.
>And they were correct, //enk?//
>>They began escalating the controversy from the Usenet to the Web, by posting lengthy articles in which they argued (putting in the same basket messages emanating from the original groups of researchers and from others) that scholars had finally lost their tempers and were behaving like not-so-nice Internet flamers themselves.
>Not an unreasonable conclusion. By permitting their computers and IP addresses to be used in this fashion, CESNUR must accept responsibility for what resulted. No one else is under an obligation to make allowances for your internal problems just because you wanted to do a covert experiment with botched protocols on involuntary subjects. Welcome to the Internet.
>>The observation, on the other hand, was covert, to the extent that other users did not suspect that data were being collected and analyzed in the interests of a scholarly study.
>As far as I know, the publication of this "scholarly study" for review remains covert to this day.
>
>By the way, did you suspect that in the last years of the twentieth century that all of CESNUR's posts, to ARS at least, were being also saved, collected and analyzed as a man with a microscope might scrutinize the transient creatures that swarm and multiply in a drop of water? (Possibly someone has later removed them from Google's archive in the mistaken belief that this would destroy all copies. If so, once again, welcome to the Internet!)
!!!Socks and allies
*[[Una Voce Grida!]]
!!!External links
*http://www.kelebekler.com/cesnur/eng.htm (take with salt)
(Copy for each trip and check-off)
{{autocolumns{
!!!Scooter
*[_] General inspection
*[_] Gear tail bag and sidebags
*[_] Cargo net and bungee cords (extras)
*[ ] Pressure gauge
*[ ] Tire pump (longer trips)
*[ ] Bike toolkit
*[ ] Disk lock/alarm
*[ ] Battery to cigarette lighter rig
*[ ] Tire gunk
*[ ] CAA Plus 200 km towing
!!!Wear (mainly in backpack)
*[ ] Riding jacket
*[ ] Riding boots
*[ ] Riding pants
*[ ] Jeans
*[ ] Jacket liner
*[_] Shorts 1 pair
*[_] T-shirts worn + 2
*[ ] Underwear worn + 2
*[ ] Socks worn + 2
*[ ] Bathing suit
*[ ] Towel
*[ ] Emergency rain poncho
*[ ] Pocket watch
!!!Camping
*[ ] Tent
*[ ] Tent footprint
*[ ] Pegs for tent, sheet
*[ ] Sleeping bag
*[ ] Sleeping pad / air mattress
**[ ] Pump for air mattress
*[ ] Pillow
*[ ] Tarp/sheet for rain shelter (bungee between scooter and tent)
*Lighting: 
**[_] Flashlight, general
**[_] Head light
**[ ] Spare batteries
**[ ] Tea light candles
**[ ] Light sticks
**[ ] Solar garden light
*[ ] Waterproof matches
*[ ] Lighter and spare
*[ ] Multitool
*[ ] Camp stools x 2
*[ ] Camp table (flip as wash sink with garbage bag)
*[ ] Solar shower bag, warm water heater.
!!!Cooking
*[ ] Cook stove & fuel (1 qt Coleman fuel)
**[ ] Fuel funnel
*[ ] Cookwear (2 pots, pan, covers.)
*[ ] 9" skillet.
*[ ] Plastic cup (with measurements)
*[ ] Bowl, plates
*[ ] Knife, fork, spoon
*[ ] Spatula
*[ ] Larger stir spoon
*[ ] Food prep knife
*[ ] Sauces
*[ ] Spices, salt
*[ ] Cooking oil
*[ ] Coffee, sugar, filters.
*[ ] Can opener
*[ ] Swiss Chalet plastic cutlery guest sets
!!!Kitchen and laundry
*[ ] Clothesline (mainly for towel)
*[ ] Cleaning pads
*[ ] Tea towels
*[ ] J-cloths
*[ ] Detergent/dishwash
*[ ] Cooler bag
**[ ] Freezer pack
*[ ] Grocery bag
*[ ] Collapsible water bag
*[ ] Twist-ties
*[ ] Plastic bags, for trash.
*[ ] Extra Ziploc bags
*[ ] Garbage bags
!!!Personal
*[ ] Toilet kit bag
**[ ] Razor and spares
**[ ] Shaving soap and balm
**[ ] Toothpaste (don't keep in tent)
**[ ] Toothbrush
**[ ] Deodorant
**[ ] Shampoo, soap
**[ ] Tiger Balm (also for smelly washrooms)
**[ ] Mirror.
*[ ] Spare TP.
!!!Medicine chest
*[ ] First-aid kit (small)
**[ ] Tensor bandages
*[ ] Bug repellant
*[ ] Suncreen
*[ ] Solarcane
*[ ] Tylenol
*[ ] Vitamins (n days)
*[ ] Patches
*[ ] Wet-wipes.
!!!Toys
*[ ] GPS (with route prepped)
*[ ] Palm PDA
*[ ] Camera
*[ ] AM/FM/Weather/Flashlight crank radio
*[ ] Cellphone
*[ ] Cables for charging toys.
!!!Other
*[ ] USB charger for GPS, Palm (car lighter)
*[ ] USB hub solar charger
*[ ] General gloves
*[ ] Duct tape
*[ ] Zip-ties
*[ ] Do not disturb sign
}}}
/***
|Name|CheckboxPlugin|
|Source|http://www.TiddlyTools.com/#CheckboxPlugin|
|Documentation|http://www.TiddlyTools.com/#CheckboxPluginInfo|
|Version|2.4.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Add checkboxes to your tiddler content|
This plugin extends the TiddlyWiki syntax to allow definition of checkboxes that can be embedded directly in tiddler content.  Checkbox states are preserved by:
* by setting/removing tags on specified tiddlers,
* or, by setting custom field values on specified tiddlers,
* or, by saving to a locally-stored cookie ID,
* or, automatically modifying the tiddler content (deprecated)
When an ID is assigned to the checkbox, it enables direct programmatic access to the checkbox DOM element, as well as creating an entry in TiddlyWiki's config.options[ID] internal data.  In addition to tracking the checkbox state, you can also specify custom javascript for programmatic initialization and onClick event handling for any checkbox, so you can provide specialized side-effects in response to state changes.
!!!!!Documentation
>see [[CheckboxPluginInfo]]
!!!!!Revisions
<<<
2008.01.08 [*.*.*] plugin size reduction: documentation moved to [[CheckboxPluginInfo]]
2008.01.05 [2.4.0] set global "window.place" to current checkbox element when processing checkbox clicks.  This allows init/beforeClick/afterClick handlers to reference RELATIVE elements, including using "story.findContainingTiddler(place)".  Also, wrap handlers in "function()" so "return" can be used within handler code.
|please see [[CheckboxPluginInfo]] for additional revision details|
2005.12.07 [0.9.0] initial BETA release
<<<
!!!!!Code
***/
//{{{
version.extensions.CheckboxPlugin = {major: 2, minor: 4, revision:0 , date: new Date(2008,1,5)};
//}}}
//{{{
config.checkbox = { refresh: { tagged:true, tagging:true, container:true } };
config.formatters.push( {
	name: "checkbox",
	match: "\\[[xX_ ][\\]\\=\\(\\{]",
	lookahead: "\\[([xX_ ])(=[^\\s\\(\\]{]+)?(\\([^\\)]*\\))?({[^}]*})?({[^}]*})?({[^}]*})?\\]",
	handler: function(w) {
		var lookaheadRegExp = new RegExp(this.lookahead,"mg");
		lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			// get params
			var checked=(lookaheadMatch[1].toUpperCase()=="X");
			var id=lookaheadMatch[2];
			var target=lookaheadMatch[3];
			if (target) target=target.substr(1,target.length-2).trim(); // trim off parentheses
			var fn_init=lookaheadMatch[4];
			var fn_clickBefore=lookaheadMatch[5];
			var fn_clickAfter=lookaheadMatch[6];
			var tid=story.findContainingTiddler(w.output);  if (tid) tid=tid.getAttribute("tiddler");
			var srctid=w.tiddler?w.tiddler.title:null;
			config.macros.checkbox.create(w.output,tid,srctid,w.matchStart+1,checked,id,target,config.checkbox.refresh,fn_init,fn_clickBefore,fn_clickAfter);
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
	}
} );
config.macros.checkbox = {
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		if(!(tiddler instanceof Tiddler)) { // if no tiddler passed in try to find one
			var here=story.findContainingTiddler(place);
			if (here) tiddler=store.getTiddler(here.getAttribute("tiddler"))
		}
		var srcpos=0; // "inline X" not applicable to macro syntax
		var target=params.shift(); if (!target) target="";
		var defaultState=params[0]=="checked"; if (defaultState) params.shift();
		var id=params.shift(); if (id && !id.length) id=null;
		var fn_init=params.shift(); if (fn_init && !fn_init.length) fn_init=null;
		var fn_clickBefore=params.shift();
		if (fn_clickBefore && !fn_clickBefore.length) fn_clickBefore=null;
		var fn_clickAfter=params.shift();
		if (fn_clickAfter && !fn_clickAfter.length) fn_clickAfter=null;
		var refresh={ tagged:true, tagging:true, container:false };
		this.create(place,tiddler.title,tiddler.title,0,defaultState,id,target,refresh,fn_init,fn_clickBefore,fn_clickAfter);
	},
	create: function(place,tid,srctid,srcpos,defaultState,id,target,refresh,fn_init,fn_clickBefore,fn_clickAfter) {
		// create checkbox element
		var c = document.createElement("input");
		c.setAttribute("type","checkbox");
		c.onclick=this.onClickCheckbox;
		c.srctid=srctid; // remember source tiddler
		c.srcpos=srcpos; // remember location of "X"
		c.container=tid; // containing tiddler (may be null if not in a tiddler)
		c.tiddler=tid; // default target tiddler 
		c.refresh = {};
		c.refresh.container = refresh.container;
		c.refresh.tagged = refresh.tagged;
		c.refresh.tagging = refresh.tagging;
		place.appendChild(c);
		// set default state
		c.checked=defaultState;
		// track state in config.options.ID
		if (id) {
			c.id=id.substr(1); // trim off leading "="
			if (config.options[c.id]!=undefined)
				c.checked=config.options[c.id];
			else
				config.options[c.id]=c.checked;
		}
		// track state in (tiddlername|tagname) or (fieldname@tiddlername)
		if (target) {
			var pos=target.indexOf("@");
			if (pos!=-1) {
				c.field=pos?target.substr(0,pos):"checked"; // get fieldname (or use default "checked")
				c.tiddler=target.substr(pos+1); // get specified tiddler name (if any)
				if (!c.tiddler || !c.tiddler.length) c.tiddler=tid; // if tiddler not specified, default == container
				if (store.getValue(c.tiddler,c.field)!=undefined)
					c.checked=(store.getValue(c.tiddler,c.field)=="true"); // set checkbox from saved state
			} else {
				var pos=target.indexOf("|"); if (pos==-1) var pos=target.indexOf(":");
				c.tag=target;
				if (pos==0) c.tag=target.substr(1); // trim leading "|" or ":"
				if (pos>0) { c.tiddler=target.substr(0,pos); c.tag=target.substr(pos+1); }
				if (!c.tag.length) c.tag="checked";
				var t=store.getTiddler(c.tiddler);
				if (t && t.tags)
					c.checked=t.isTagged(c.tag); // set checkbox from saved state
			}
		}
		// trim off surrounding { and } delimiters from init/click handlers
		if (fn_init) c.fn_init="(function(){"+fn_init.trim().substr(1,fn_init.length-2)+"})()";
		if (fn_clickBefore) c.fn_clickBefore="(function(){"+fn_clickBefore.trim().substr(1,fn_clickBefore.length-2)+"})()";
		if (fn_clickAfter) c.fn_clickAfter="(function(){"+fn_clickAfter.trim().substr(1,fn_clickAfter.length-2)+"})()";
		c.init=true; c.onclick(); c.init=false; // compute initial state and save in tiddler/config/cookie
	},
	onClickCheckbox: function(event) {
		window.place=this;
		if (this.init && this.fn_init) // custom function hook to set initial state (run only once)
			{ try { eval(this.fn_init); } catch(e) { displayMessage("Checkbox init error: "+e.toString()); } }
		if (!this.init && this.fn_clickBefore) // custom function hook to override changes in checkbox state
			{ try { eval(this.fn_clickBefore) } catch(e) { displayMessage("Checkbox onClickBefore error: "+e.toString()); } }
		if (this.id)
			// save state in config AND cookie (only when ID starts with 'chk')
			{ config.options[this.id]=this.checked; if (this.id.substr(0,3)=="chk") saveOptionCookie(this.id); }
		if (this.srctid && this.srcpos>0 && (!this.id || this.id.substr(0,3)!="chk") && !this.tag && !this.field) {
			// save state in tiddler content only if not using cookie, tag or field tracking
			var t=store.getTiddler(this.srctid); // put X in original source tiddler (if any)
			if (t && this.checked!=(t.text.substr(this.srcpos,1).toUpperCase()=="X")) { // if changed
				t.set(null,t.text.substr(0,this.srcpos)+(this.checked?"X":"_")+t.text.substr(this.srcpos+1),null,null,t.tags);
				if (!story.isDirty(t.title)) story.refreshTiddler(t.title,null,true);
				store.setDirty(true);
			}
		}
		if (this.field) {
			if (this.checked && !store.tiddlerExists(this.tiddler))
				store.saveTiddler(this.tiddler,this.tiddler,"",config.options.txtUserName,new Date());
			// set the field value in the target tiddler
			store.setValue(this.tiddler,this.field,this.checked?"true":"false");
			// DEBUG: displayMessage(this.field+"@"+this.tiddler+" is "+this.checked);
		}
		if (this.tag) {
			if (this.checked && !store.tiddlerExists(this.tiddler))
				store.saveTiddler(this.tiddler,this.tiddler,"",config.options.txtUserName,new Date());
			var t=store.getTiddler(this.tiddler);
			if (t) {
				var tagged=(t.tags && t.tags.indexOf(this.tag)!=-1);
				if (this.checked && !tagged) { t.tags.push(this.tag); store.setDirty(true); }
				if (!this.checked && tagged) { t.tags.splice(t.tags.indexOf(this.tag),1); store.setDirty(true); }
			}
			// if tag state has been changed, update display of corresponding tiddlers (unless they are in edit mode...)
			if (this.checked!=tagged) {
				if (this.refresh.tagged) {
					if (!story.isDirty(this.tiddler)) // the TAGGED tiddler in view mode
						story.refreshTiddler(this.tiddler,null,true); 
					else // the TAGGED tiddler in edit mode (with tags field)
						config.macros.checkbox.refreshEditorTagField(this.tiddler,this.tag,this.checked);
				}
				if (this.refresh.tagging)
					if (!story.isDirty(this.tag)) story.refreshTiddler(this.tag,null,true); // the TAGGING tiddler
			}
		}
		if (!this.init && this.fn_clickAfter) // custom function hook to react to changes in checkbox state
			{ try { eval(this.fn_clickAfter) } catch(e) { displayMessage("Checkbox onClickAfter error: "+e.toString()); } }
		// refresh containing tiddler (but not during initial rendering, or we get an infinite loop!) (and not when editing container)
		if (!this.init && this.refresh.container && this.container!=this.tiddler)
			if (!story.isDirty(this.container)) story.refreshTiddler(this.container,null,true); // the tiddler CONTAINING the checkbox
		return true;
	},
	refreshEditorTagField: function(title,tag,set) {
		var tagfield=story.getTiddlerField(title,"tags");
		if (!tagfield||tagfield.getAttribute("edit")!="tags") return; // if no tags field in editor (i.e., custom template)
		var tags=tagfield.value.readBracketedList();
		if (tags.contains(tag)==set) return; // if no change needed
		if (set) tags.push(tag); // add tag
		else tags.splice(tags.indexOf(tag),1); // remove tag
		for (var t=0;t<tags.length;t++) tags[t]=String.encodeTiddlyLink(tags[t]);
		tagfield.value=tags.join(" "); // reassemble tag string (with brackets as needed)
		return;
	}
}
//}}}
<html>
<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/sUDjbwzCqv4"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/sUDjbwzCqv4" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object>
</html>
[[Home]]
<!--{{{-->
<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler'></div>
<div class='editor' macro='edit title'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span><br><span>To add items to the featured articles list on the left, add the <strong>Featured</strong> tag to the entry.<br>To remove from the featured articles list on the left, remove the tag <strong>Featured</strong> tag from the entry.<br>To hide the article from the index, add the <strong>sysfile</strong> tag to the entry.</span></div>
<!--}}}-->
<html>
<div style="width:473px; border:solid #999999 1px; background-image:url('http://www.soundclick.com/images/elogos/SC_ExtBG.png')">
<a href='http://www.soundclick.com/enturbulator009'>
<div style="margin:5px 0px 3px 0px; text-align:center">Now playing: Enturbulator 009</div></a>
<a href='http://www.soundclick.com'>
<div style="background-color:width:460px; height:45px; cursor:pointer; background-image:url('http://www.soundclick.com/images/elogos/SC_460.png');"></div></a>
<div id="lower"><object type="application/x-shockwave-flash" allowScriptAccess="never" allowNetworking="internal" height="140" width="473" data="http://www.soundclick.com/player/V2/mp3player.swf">
  <param name="allowScriptAccess" value="never" />
  <param name="allowNetworking" value="internal" />
  <param name="movie" value="http://www.soundclick.com/player/V2/mp3player.swf" />
  <param name="loop" value="false" />
  <param name="menu" value="false" />
  <param name="quality" value="high" />
  <param name="wmode" value="transparent" />
  <param name="flashvars" value="playType=band&bandid=23466&q=hi&ext=1&ref=11&shuffle=false" />
  <param name="scale" value="noscale" />
  <param name="salign" value="b" />
  <param name="bgcolor" value="#000000" />
</object></div></div>
</html>
<<tiddlerList tags:Featured>>
//~~(Part of the [[ForEachTiddlerPlugin]])~~//

Create customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.

''Syntax:'' 
|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|
|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|
|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|
|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|
|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|
|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]] is used.|
|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|


''Using JavaScript''

To give you a lot of flexibility the [[ForEachTiddlerMacro]] uses JavaScript in its arguments. Even if you are not that familiar with JavaScript you may find forEachTiddler useful. Just have a look at the various ready-to-use [[ForEachTiddlerExamples]] and adapt them to your needs.

''The Elements of the Macro''

The arguments of the ForEachTiddlerMacro consist of multiple parts, each of them being optional.

<<slider chkFETInClause [[inClause]] "inClause" "inClause">>
<<slider chkFETWhereClause [[whereClause]] "whereClause" "whereClause">>
<<slider chkFETSortClause [[sortClause]] "sortClause" "sortClause">>
<<slider chkFETScriptClause [[scriptClause]] "scriptClause" "scriptClause">>
<<slider chkFETActions [[Action Specification]] "Action Specification" "Action Specification">>

''Using Macros and ">" inside the forEachTiddler Macro''

You may use other macro calls into the expression, especially in the actionParameters. To avoid that the {{{>>}}} of such a macro call is misinterpreted as the end of the {{{<<forEachTiddler...>>}}} macro you must escape the {{{>>}}} of the inner macro with {{{$))}}} E.g. if you want to use {{{<<tiddler ...>>}}} inside the {{{forEachTiddler}}} macro you have to write {{{<<tiddler ...$))}}}.

In addition it is necessary to escape single {{{>}}} with the text {{{$)}}}.

''Using {{{<<tiddler ... with: ...>>}}} to re-use ForEachTiddler definitions''

Sometimes you may want to use a certain ForEachTiddler definition in slight variations. E.g. you may want to list either the tiddlers tagged with "ToDo" and in the other case with "Done". To do so you may use "Tiddler parameters". Here an example:

Replace the variable part of the ForEachTiddler definition with $1 ($2,... $9 are supported). E.g. you may create the tiddler "ListTaggedTiddlers" like this
{{{
<<forEachTiddler 
 where 
 'tiddler.tags.contains("$1")'
>>
}}}

Now you can use the ListTaggedTiddlers for various specific tags, using the {{{<<tiddler ...>>}}} macro:
{{{
<<tiddler ListTaggedTiddlers with: "systemConfig">>
}}}
{{{
<<tiddler ListTaggedTiddlers with: "Plugin">>
}}}


See also [[ForEachTiddlerExamples]].
/***
|''Name:''|ForEachTiddlerPlugin|
|''Version:''|1.0.8 (2007-04-12)|
|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|&copy; 2005-2007 [[abego Software|http://www.abego-software.de]]|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
!Description

Create customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.

''Syntax:'' 
|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|
|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|
|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and  {{{context}}}.|
|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and  {{{context}}}.|
|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|
|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]]  is used.|
|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|

See details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].

!Revision history
* v1.0.8 (2007-04-12)
** 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)
* v1.0.7 (2007-03-28)
** Also support "pre" formatted TiddlyWikis (introduced with TW 2.2) (when using "in" clause to work on external tiddlers)
* v1.0.6 (2006-09-16)
** Context provides "viewerTiddler", i.e. the tiddler used to view the macro. Most times this is equal to the "inTiddler", but when using the "tiddler" macro both may be different.
** Support "begin", "end" and "none" expressions in "write" action
* v1.0.5 (2006-02-05)
** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.
** Support Firefox 1.5.0.1
** Internal
*** Make "JSLint" conform
*** "Only install once"
* v1.0.4 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.3 (2005-12-22)
** Features: 
*** Write output to a file supports multi-byte environments (Thanks to Bram Chen) 
*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)
** Enhancements:
*** Improved error messages on InternetExplorer.
* v1.0.2 (2005-12-10)
** Features: 
*** context object also holds reference to store (TiddlyWiki)
** Fixed Bugs: 
*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)
* v1.0.1 (2005-12-08)
** Features: 
*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".
*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.
*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).
*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .
*** Improved script evaluation (for where/sort clause and write scripts).
* v1.0.0 (2005-11-20)
** initial version

!Code
***/
//{{{

	
//============================================================================
//============================================================================
//		   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: "http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin",
	licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",
	copyright: "Copyright (c) abego Software GmbH, 2005-2007 (www.abego-software.de)"
};

// 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: "http://tiddlywiki.abego-software.de"};

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

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

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

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

config.macros.forEachTiddler.getContainingTiddler = function(e) {
	while(e && !hasClass(e,"tiddler"))
		e = e.parentNode;
	var title = e ? e.getAttribute("tiddler") : 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 "in" clause
	var tiddlyWikiPath = undefined;
	if ((i < params.length) && params[i] == "in") {
		i++;
		if (i >= params.length) {
			this.handleError(place, "TiddlyWiki path expected behind 'in'.");
			return;
		}
		tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

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

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

		if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {
			 sortAscending = params[i] == "ascending";
			 i++;
		}
	}

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

	// Parse the action. 
	// When we are already at the end use the default action
	var actionName = "addToList";
	if (i < params.length) {
	   if (!config.macros.forEachTiddler.actions[params[i]]) {
			this.handleError(place, "Unknown action '"+params[i]+"'.");
			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 "tiddlers" and "context".
// 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["tiddlyWiki"] = tiddlyWiki;
	
	// Get the tiddlers, as defined by the whereClause
	var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);
	context["tiddlers"] = 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 : "addToList";
	var action = config.macros.forEachTiddler.actions[actionName];
	if (!action) {
		this.handleError(parameter.place, "Unknown action '"+actionName+"'.");
		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 > p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);
		return;
	}

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

abego.parseNamedParameter = function(name, parameter, i) {
	var beginExpression = null;
	if ((i < parameter.length) && parameter[i] == name) {
		i++;
		if (i >= parameter.length) {
			throw "Missing text behind '%0'".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 >= parameter.length) {
		this.handleError(place, "Missing expression behind 'write'.");
		return;
	}

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

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

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

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

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

	if (filename) {
		if (lineSeparator !== undefined) {
			lineSeparator = lineSeparator.replace(/\\n/mg, "\n").replace(/\\r/mg, "\r");
			text = text.replace(/\n/mg,lineSeparator);
		}
		saveFile(filename, convertUnicodeToUTF8(text));
	} else {
		var wrapper = createTiddlyElement(place, "span");
		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 <<forEachTiddler ...>> 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 = "store";
	}
	var lenPrefix = idPrefix.length;
	
	// Read the content of the given file
	var content = loadFile(this.getLocalPath(path));
	if(content === null) {
		throw "TiddlyWiki '"+path+"' not found.";
	}
	
	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 "File '"+path+"' is not a TiddlyWiki.";
		tiddlyWiki.dirty = false;
		return tiddlyWiki;
	}
	
	// The legacy code, for TW < 2.2
	
	// Locate the storeArea div's
	var posOpeningDiv = content.indexOf(startSaveArea);
	var posClosingDiv = content.lastIndexOf(endSaveArea);
	if((posOpeningDiv == -1) || (posClosingDiv == -1)) {
		throw "File '"+path+"' is not a TiddlyWiki.";
	}
	var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);
	
	// Create a "div" element that contains the storage text
	var myStorageDiv = document.createElement("div");
	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 < store.length; t++) {
		var e = store[t];
		var title = null;
		if(e.getAttribute)
			title = e.getAttribute("tiddler");
		if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)
			title = e.id.substr(lenPrefix);
		if(title && title !== "") {
			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["script"];
	var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";
	var fullText = (script ? script+";" : "")+functionText+";theFunction;";
	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 = "Extra parameter behind '"+actionName+"':";
	for (var i = firstUnusedIndex; i < parameter.length; i++) {
		message += " "+parameter[i];
	}
	this.handleError(place, message);
};

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

// Internal.
//
config.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {
	var result = 
		(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) 
			? 0
			: (tiddlerA.forEachTiddlerSortValue < 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 ("forEachTiddlerSortValue") of the tiddlers.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);
	var count = tiddlers.length;
	var i;
	for (i = 0; i < 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 < 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 ="<<"+macroName;
	for (var i = 0; i < params.length; i++) {
		message += " "+params[i];
	}
	message += ">>";
	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,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+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 
//	 "$))" to ">>"
//	 "$)" to ">"
//
config.macros.forEachTiddler.paramEncode = function(s) {
	var reGTGT = new RegExp("\\$\\)\\)","mg");
	var reGT = new RegExp("\\$\\)","mg");
	return s.replace(reGTGT, ">>").replace(reGT, ">");
};

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

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

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


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



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


//============================================================================
// String.contains Function
//============================================================================
//
// Returns true when the string contains the given substring, false otherwise.
//
version.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.contains = function(substring) {
	return this.indexOf(substring) >= 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["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.indexOf = function(item) {
	for (var i = 0; i < 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["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.contains = function(item) {
	return (this.indexOf(item) >= 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["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAny = function(items) {
	for(var i = 0; i < 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["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAll = function(items) {
	for(var i = 0; i < items.length; i++) {
		if (!this.contains(items[i])) {
			return false;
		}
	}
	return true;
};


} // of "install only once"

// Used Globals (for JSLint) ==============
// ... DOM
/*global 	document */
// ... TiddlyWiki Core
/*global 	convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink, 
			displayMessage, endSaveArea, hasClass, loadFile, saveFile, 
			startSaveArea, store, wikify */
//}}}


/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.

Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
***/
Type the text for 'ForEachTiddlerProject'
<html>
<embed style="width:400px; height:326px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=-6700984289963923033&hl=en" flashvars=""> </embed>
</html>
FrontCite archive of Scientology in the media references with summaries of news articles, links to the source stories and citation information for use with Wikipedia.
*[[Flat HTML archive of Scientology news stories|http://home.primus.ca/~ronsharp/frontcite.html]]
*[[FrontCite Wiki archive of Scientology news stories with cross-indexed tags|http://home.primus.ca/~ronsharp/frontcitetw.html]]
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
<html><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/ZjBNIZdqMr0&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/ZjBNIZdqMr0&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></html>
!!!Explorer-85
[img[x|http://home.primus.ca/~ronsharp/hw/shadowthb.jpg]] This was the first computer that I built back in 1980. An Explorer-85 with a 3 ~MHz 8085, with two S100 card slots. I added an I/O card to get two hardware serial ports, and a RAM card to bring it up to a massive 64k. Software used: hand-assembled machine code, Tiny Basic, BASEX, a sort-of BASIC compiler and Forth. Storage was via a fairly fast cassette interface. I never did get the BASIC ROMS or the 6 slot card cage or CP/M. I suppose I should toss it out, but that's a hard thing to do to your first computer.
!!!Sinclair ~ZX-81
[img[x|http://home.primus.ca/~ronsharp/hw/zx81thb.jpg]] This Sinclair ~ZX-81 is the same as the ~TS-1000 later released in North America by Timex, except that I assembled it from a kit. Also, it only came with 1k RAM (but socketed for two) and the TV output was on UHF 33. I later added a 64k RAM module, but that was flaky and butt-ugly, so I eventually put a 32k RAM chip inside.
[img[x|http://home.primus.ca/~ronsharp/hw/zx81boardthb.jpg]] The inside of the ~ZX-81 was a haiku of design. Only 4 chips: Z80, RAM, ROM, and glue chip. The main problems with the ZX were the keyboard, the lack of I/O ports, and since the CPU was the video generator, it had to switch off video to get any speed out of it. The Basic was much better than the usual Microsoft Basic.
!!!Z80 Prototype
[img[x|http://home.primus.ca/~ronsharp/hw/signthb.jpg]] This was a prototype for an LED display sign project that never quite jelled. A Z80 with serial port and more parallel I/O than needed. (I never bothered adding the 8255, no need.) The 8k (32k option) RAM is mounted on a Dallas Semi "Smart Socket" that provides battery-backup and time/date. I added two 8910 sound chips which were popular in arcade games in the '80's, primitive today. (They each have two parallel ports, making 7 total on the board. See what I mean?) Maybe someday I'll use it for a controller, but a stamp chip would probably be a better solution. I do want to mount it in a case with an LED front panel. No reason, except I've always wanted a computer with blinky lights! If I was going to knit another one today, I'd use a V20 chip for 8088 compatibility. (I actually did an LED sign board with a V20 later. It might be in use in the Toronto 401 highway signs. I wish I knew for sure.)
!!!Micro Coco
[img[x|http://home.primus.ca/~ronsharp/hw/mc10thb.jpg]] When Radio Shack discontinued the Micro Coco, they were practically giving them away. I couldn't resist. Basically the TVBUG that I used in the Amateur Radio club in University, updated and packaged as a home computer of the day. It failed. It has 4k RAM, ROM Basic, a fairly good chiclet keyboard, a serial/printer port. Not compatible with the Coco because it uses a 6803 rather than a 6809, which is a shame -- but there are some nice extras on-chip like a timer, some extra I/O lines and 128 bytes on internal RAM. It has colour graphics capability, but can't use the full modes of the 6847 chip because of memory decoding issues. (Some place say the 16k RAM add-on cures this, but there are still problems AFAIK.)
[img[x|http://home.primus.ca/~ronsharp/hw/mc10boardthb.jpg]] The board is well laid-out, however there were a few post-fixes with extra wires, and an extra 74LS32 soldered piggyback on another chip. Oops! There's an expansion bus off the back, but much sturdier than the ~ZX-81's. At one time, I worked out what the lines on it are, and it would be easy to make an expansion board, but why bother?

I wish I had pictures of all the hardware I've owned or built over the years. A ~Heath-Zenith 150 compatible was the last kit I assembled. And I wish I had a copy of the LED sign I designed with a V20 chip. (An enhanced 8088 clone with extra speed and op codes.)

I certainly do miss the days of building equipment from kit or even scratch. But when surface mount came along, there was no way a hobbiest could stay on the leading edge without a personal wave soldering machine. Heh. There are still interesting things happening, and some of the PIC stamp chips are pretty neat. Someone actually made a postage stamp sized web server with SLIP, yow! (Since writing this, you can now get systems the size of their 100Base-T connector.)
!Welcome!
{{autocolumns{
<<tiddlerList tags:-sysfile,-systemConfig,-MiniPediaTheme group:"tiddler.title.substr(0,1)" groupTemplate:'!%group\n'>>
}}}
!!!Other stuff
*--[[Microsoft Agent demo|http://home.primus.ca/~ronsharp/clippy.html]] Needs Internet Explorer, and Microsoft Agent (which was dropped in Win 7).--
*[[The first rave ever|http://home.primus.ca/~ronsharp/firstrave.html]] Lights, music, people dancing in their own worlds. I think I've seen it before somewhere.
*[[Kits and homebrew computers|Hardware]]
*[[My Omniflash embedded Linux box|OmniFlash]]
*[[Simulation of a trolling poster|http://home.primus.ca/~ronsharp/spacebot.html]]
<html><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/wzE6pXfOazo&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/wzE6pXfOazo&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></html>
<html><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/_BkqTLnF1U0&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/_BkqTLnF1U0&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></html>
[img[Scientology uber alles|http://i65.photobucket.com/albums/h233/RogerRamdrive/HubTomorrow.jpg]]

[img[E-meter goes where?|http://i65.photobucket.com/albums/h233/RogerRamdrive/GoesWhere.jpg]]

[img[Valuable Final Product|http://i65.photobucket.com/albums/h233/RogerRamdrive/InHubGoals.jpg]]

[img[Blue fat tube|http://i65.photobucket.com/albums/h233/RogerRamdrive/HubDog.jpg]]

[img[Church of Scientology Pyongyang, North Korea|http://i65.photobucket.com/albums/h233/RogerRamdrive/ChurchOfPyongyang.jpg]]

!!!What people are saying in those Big Somewhere Else pictures
[img[x|http://i65.photobucket.com/albums/h233/RogerRamdrive/Relief.jpg]]

!!!Scientologist posing at 911, taken by a Scientologist
[img[Pose Boi 1|http://i65.photobucket.com/albums/h233/RogerRamdrive/photo01a.jpg]] [img[Pose Boi 2|http://i65.photobucket.com/albums/h233/RogerRamdrive/photo06a.jpg]]
Isn't it amazing how that guy's t-shirt stays such a pristine yellow when he's supposedly been working hard for quite some time (by the changing shadows) in an incredibly dirty environment?

!!!Commendation for the Sea Org Scouts
[img[x|http://i65.photobucket.com/albums/h233/RogerRamdrive/2002commend.jpg]]
!!!Cult affiliation
*Prem Rawat
!!!Info
*[[User:Durova/Scientology_arbitration/Jossi_evidence|http://en.wikipedia.org/wiki/User:Durova/Scientology_arbitration/Jossi_evidence]]
*[[Conflict_of_interest/Noticeboard/Archive_22#User:Jossi_and_Prem_Rawat|http://en.wikipedia.org/wiki/Wikipedia:Conflict_of_interest/Noticeboard/Archive_22#User:Jossi_and_Prem_Rawat]]
*[[citizendium.org:Special:Contributions Jossi Fresco|http://en.citizendium.org:8080/wiki?title=Special:Contributions&limit=500&target=Jossi+Fresco]]
*[[Wikipedia ruled by 'Lord of the Universe'|http://www.theregister.co.uk/2008/02/06/the_cult_of_wikipedia/print.html]] February 6, 2008, Cade Metz, The Register
*[['Lord of the Universe' disciple exits Wikipedia|http://www.theregister.co.uk/2009/01/09/fresco_retires_from_wikipedia/]] January 9, 2009, Cade Metz, The Register
*Analysis of edits.
!!!!Critical sites, resources on Scientology and related groups:
This list is somewhat out of date.
{{twocolumns{
*[[aberree.com|http://www.aberree.com]] The Aberree (early Scientologist fanzine)
*[[altreligionscientology.org|http://altreligionscientology.org]] a.r.s Webpage Summary
*[[anti-scientologie.ch|http://www.anti-scientologie.ch]] Swiss critical site
*[[anti-scientology.org|http://www.anti-scientology.org]] Redir to ~HereticWeb (nsfw)
*[[antisectes.net|http://www.antisectes.net]] critique sur Scientologie, dianetique, Hubbard, et autres sectes
*[[apologeticsindex.org|http://www.apologeticsindex.org]] Apologetics Research Resources on religious movements, cults, sects, world religions and related issues
*[[avatarscam.com|http://www.avatarscam.com]] Avatar critic site
*[[free-from-scientology.blogspot.com|http://free-from-scientology.blogspot.com]] Critical blog, Formerly Fooled
*[[bobminton.org|http://www.bobminton.org]] Unofficial Bob Minton critic site
*[[buffaloscientologyinfo.com|http://www.buffaloscientologyinfo.com]]
*[[buttersquash.net|http://buttersquash.net]]
*[[caic.org.au|http://www.caic.org.au]] Cult Awareness and Information Centre
*[[cassiopaeacult.com|http://www.cassiopaeacult.com]] Critics of the fraudulant UFO nut cult the Cassiopaeans
*[[carolineletkeman.org|http://www.carolineletkeman.org]] Refund and Reparation: A resource for victims of Scientology's unconscionable policies and practices
*[[chirowatch.com|http://www.chirowatch.com]] Has some chiro-Scientology connections. Very messy site.
*[[clambake.org|http://www.clambake.org]] Mirror of xenu.net
*[[coswatch.org|http://www.coswatch.org/]] news about the ~CoS and Project Chanology
*[[cosvm.org|http://www.cosvm.org]] Scientology's Volunteer Minister Program
*[[countercult.com|http://countercult.com]] Apologetics Index	
*[[crackpots.org|http://www.crackpots.org]]
*[[cultawarenessnetwork.com|http://www.cultawarenessnetwork.com]] Rick Ross.	
*[[culthelp.info|http://www.culthelp.info]] Cult Awareness and Information Centre
*[[cultinformation.org.uk|http://www.cultinformation.org.uk]] Cult Information Centre
*[[cultnews.com|http://www.cultnews.com]] Cult News from <<tag [[Rick Ross]]>>
*[[cults.co.nz|http://www.cults.co.nz]] New Zealand Cults, Sects, Religions, Christian Organisations, and other groups	
*[[cultsoncampus.com|http://www.cultsoncampus.com]] Cults On Campus News	
*[[xemu.demon.co.uk|http://www.xemu.demon.co.uk]]
*[[dianahsieh.com|http://www.dianahsieh.com/scientology/index.html]] Diana Hsieh Frontsite litigation
*[[dianeticswatch.com|http://dianeticswatch.com]] Dianetics ~Mini-FAQ
*[[digl-watch.info|http://digl-watch.info]] Digital Lightwave info
*[[disconnectionhurts.net|http://DisconnectionHurts.net]] Interviews about <<tag Disconnection>> experiences.
*[[discord.org|http://www.discord.org]]
*[[entheta.ru|http://www.entheta.ru]] It's Russian
*[[enturbulation.org|http://www.enturbulation.org]] Welcome to the Enturbulation Community
*[[escapeint.org|http://www.escapeint.org]] Richard and <<tag [[Bonnie Woods]]>>
*[[ex-cult.org|http://www.ex-cult.org]] ex-cult resource center
*[[exscientologykids.com|http://www.exscientologykids.com]] is designed, owned, and operated by three young women who grew up in Scientology, and later left the Church.
*[[factnet.org|http://www.factnet.org]]	Fight Against Coercive Tactics Network
*[[fair-cult-concern.co.uk|http://www.fair-cult-concern.co.uk]] General cult information
*[[fairgamed.org|http://www.fairgamed.org]]
*[[fecris.org|http://www.fecris.org]] European Federation of Centres of Research and Information on Sectarianism	
*[[freedomofmind.com|http://www.freedomofmind.com]] <<tag [[Steve Hassan]]>>	
*[[freehenson.da.ru|http://freehenson.da.ru]]	
*[[daisy.freeserve.co.uk|http://www.daisy.freeserve.co.uk]] News From Bree
*[[cosmedia.freewinds.cx|http://cosmedia.freewinds.cx]] Media files
*[[frontsightlitigation.com|http://www.frontsightlitigation.com]] Frontsight/Ignatius Piazza getting sued
*[[gerryarmstrong.org|http://www.gerryarmstrong.org]] <<tag [[Gerry Armstrong]]>> Scientology's Salman Rushdie 
*[[hailxenu.net|http://hailxenu.net]] The banner claim
*[[holysmoke.org|http://www.holysmoke.org]]
*[[informer.org|http://www.informer.org]] <<tag [[Dennis Erlich]]>>
*[[ingo-heinemann.de|http://www.ingo-heinemann.de]] Ingo Heinemann: Warum Scientology-Kritik?
*[[jeffjacobsen.org|http://www.jeffjacobsen.org]]	
*[[keithhenson.org|http://www.keithhenson.org]] <<tag [[Keith Henson]]>> And //why// is Scientology after him?
*[[kondra-show.ru|http://www.kondra-show.ru]] Russian versions of critical books
*[[lermanet.com|http://lermanet.com]] Citizens Against Corruption
*[[lermanet2.com|http://lermanet2.com]] Citizens Against Corruption
*[[lisaclause.org|http://www.lisaclause.org]] The Lisa ~McPherson Clause: Scientology Moving to Secure Its 'Right' to Kill Again 
*[[lisafiles.com|http://www.lisafiles.com]] <<tag [[Lisa McPherson]]>>: The Clearwater Police Department Files
*[[lisamcpherson.org|http://www.lisamcpherson.org]] Lisa McPherson Memorial Page
*[[scientologysucks.lron.com|http://scientologysucks.lron.com]]
*[[madvillelaw.net|http://www.madvillelaw.net]]
*[[moreaboutscientologycult.eu|http://www.moreaboutscientologycult.eu]] Clipping library
*[[mystae.com|http://www.mystae.com/streams/gnosis/cos.html]] An otherwise strange site.
*[[narcanon.org|http://www.narcanon.org]] ~NarCONon __is__ Scientology!
*[[narconon-exposed.org|http://www.narconon-exposed.org]] Drug rehab or Scientology front?
*[[narcononvictims.com|http://narcononvictims.com]] Forums on <<tag Narconon>>
*[[narcononwatch.org|http://www.narcononwatch.org]] Narconon Watch - An Examination of the Narconon Program
*[[nots.org|http://www.nots.org]]
*[[operatingthetan.com|http://www.operatingthetan.com]]
*[[OSA babe gallery|http://come.to/osababes/]]
*[[sc-i-r-s-ology.pair.com|http://www.sc-i-r-s-ology.pair.com]] IRS pwn3d ~CoS fringe theory
*[[paulettecooper.com|http://www.paulettecooper.com]] <<tag [[Paulette Cooper]]>>
*[[perkinstragedy.org|http://perkinstragedy.org]]	
*[[psychassualt.org|http://www.psychassualt.org]]
*[[quackfiles.com|http://www.quackfiles.com]] Quacks!	
*[[raids.org|http://www.raids.org]]
*[[raullopez.org|http://www.raullopez.org]] Scientology Swindles Raul Lopez And The World
*[[refocus.org|http://www.refocus.org]] reFOCUS: Recovering Former Cultists' Support Network
*[[religiousfreedomwatchwatch.org|http://www.religiousfreedomwatchwatch.org]]
*[[religiousshunning.org|http://www.religiousshunning.org]] Grace Aaron, shunning and disconnection
*[[reprogram.net|http://www.reprogram.net]] Critical vs Criminon
*[[rickross.com|http://www.rickross.com]] Cult Information from the Rick A. Ross Institute for the Study of Destructive Cults, Controversial Groups and Cult Movements
*[[robertdam-cos.dk|http://www.robertdam-cos.dk]]
*[[robertdam-ias.dk|http://www.robertdam-ias.dk]]
*[[ronthenut.org|http://www.ronthenut.org]]
*[[scamofscientology.nl|http://www.scamofscientology.nl]]
*--[[scienotimes.com|http://web.archive.org/web/20070106013619rn_1/scienotimes.com/modules/altern8news/]]-- Archive of <<tag [[Shawn Lonsdale]]>> news sitesite	
*[[scientology-kills.org|http://scientology-kills.org]] Scientology Celebrities & More
*[[scientology-lies.com|http://www.scientology-lies.com]] I think Scientology is breaking the law and hurting people, and I want them to stop.
*[[scientology-southpark.org|http://www.scientology-southpark.org]]	
*[[scientology-truth.info|http://www.scientology-truth.info]]
*[[scientologywatch.org|http://www.scientologywatch.org]]
*[[shipbrook.com|http://www.shipbrook.com/jeff/CoS/index.html]]	
*[[silentology.com|http://www.silentology.com]] "The Religion of the Anti Christ" Hmm.
*[[skepdic.com|http://skepdic.com/dianetic.html]] Skeptics Dictionary
*[[skeptic.com|http://www.googlesyndicatedsearch.com/u/SkepticsSociety?q=scientology&sa=search&ie=utf-8&oe=utf-8]] Skeptic: The Skeptics Society &amp; Skeptic magazine. Scientology references.
*[[skeptictank.org|http://www.skeptictank.org]]
*[[slatkinfraud.com|http://slatkinfraud.com]] Reed Slatkin Media Resource
*[[slatkinfraud.net|http://slatkinfraud.net]] Reed Slatkin Media Resource
*[[slatkininfo.com|http://www.slatkininfo.com]] Reed Slatkin Bankruptcy Data Collection and Distribution Site.
*[[solitarytrees.net|http://www.solitarytrees.net]]
*[[spiritandsky.com|http://www.spiritandsky.com/skeptics/scientology/]] Critical book resources
*[[stelling.nl|http://www.stelling.nl]] Critical cult resources
*[[stop-narconon.org|http://stop-narconon.org]] Protecting the Vulnerable from Narconon/Scientology
*[[stop-wise.biz|http://stop-wise.biz]] World Institute of Scientology Enterprises = Recruitment Vehicle for Scientology
*[[studytech.org|http://www.studytech.org]] NOT one ~CoS's sites :^)
*[[suppressiveperson.org|http://www.suppressiveperson.org]] <<tag [[Suppressive Person]]>> Defense League
*[[sweenytod.com|http://www.sweenytod.com/cos/index.html]]
*[[thebeginnersguidetolronhubbard.com|http://thebeginnersguidetolronhubbard.com]]
*[[thebridgemovie.net|http://www.thebridgemovie.net]] Redirects to XenuTV
*[[theprofit.org|http://www.theprofit.org]] That movie
*[[thestraights.com|http://thestraights.com]] Information on STRAIGHT as well as bits on ~CoS.
*[[throughthedoor.net|http://throughthedoor.net]] Interviews with ex-members.
*[[torymagoo.org|http://www.torymagoo.org]] Dancing in the moonlight, sipping cream soda.
*[[tr-l.org|http://www.tr-l.org]] The Martin Ottmann Documents Web Site: Exposing Scientology
*[[truthaboutscientology.com|http://www.truthaboutscientology.com]] Scientology - Altering the Tech
*[[unchain.gr|http://www.unchain.gr]] Greece vs Scientology
*[[waldorfcritics.org|http://www.waldorfcritics.org]] Waldorf / Steiner / Anthroposophy
*[[whyaretheydead.net|http://whyaretheydead.net]] Scientology associated deaths
*[[windofchanges.org|http://www.windofchanges.org]] Former members of "Gentle Wind"
*[[xenot.com|http://www.xenot.com]] The Really For Real Space Saga
*[[xenu.ca|http://www.xenu.ca]]
*[[xenu.com|http://www.xenu.com]] Currently mirror of xenu.net
*[[xenu.com-it.net|http://xenu.com-it.net]] Italian critical site
*[[xenu.de|http://xenu.de]] Tilman
*[[xenu.net|http://xenu.net]] Operation Clambake
*[[xenu.us|http://xenu.us]] Redirects to xenu.net
*[[xenuday.com|http://www.xenuday.com]] Xenu Day!
*[[xenu-directory.net|http://xenu-directory.net]] Scientology Critical Information Directory
*[[xenutv.com|http://www.xenutv.com]] Exposing Scientology Through Streaming Video. Mark Bunker, <<tag [[Wise Beard Man]]>>
}}}
This is just a jumbled list from my files.

!!!See also
*TentacleList
Type the text for 'Macro'
<<search>><<openTiddlers text:Home tiddlers:{{store.getTiddlerText("DefaultTiddlers")}} closeAll:true>>[[About]][[Wiki Markup]][[Articles A-Z]]<<newTiddler label:"New Article">><<newTiddler title:"Featured Article" label:"New Featured" tag:"Featured" text:"This is a featured article, it will appear on in the featured article list to the left. To remove it from the featured article list, remove the Featured tag.">><<newJournal "DD MMM YYYY" "journal" label:"New Journal">><<saveChanges "Save Changes">><<slider chkSliderOptionsPanel OptionsPanel "Options »" "Change TiddlyWiki advanced options">>
<html><iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.ca/maps/ms?hl=en&amp;ie=UTF8&amp;msa=0&amp;msid=102299121563303882298.000455620139824c4cd63&amp;t=h&amp;ll=34.67576,-111.443172&amp;spn=1.682075,13.769464&amp;output=embed"></iframe><br /><small>View <a href="http://maps.google.ca/maps/ms?hl=en&amp;ie=UTF8&amp;msa=0&amp;msid=102299121563303882298.000455620139824c4cd63&amp;t=h&amp;ll=34.67576,-111.443172&amp;spn=1.682075,13.769464&amp;source=embed" style="color:#0000FF;text-align:left">CoS radio links</a> in a larger map</small></html>
<html><iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.ca/maps/ms?ie=UTF8&amp;oe=UTF-8&amp;hl=en&amp;om=1&amp;t=h&amp;msid=102299121563303882298.00000111cd82f3e3f0241&amp;msa=0&amp;ll=34.10747,-118.318033&amp;spn=0.052447,0.080338&amp;output=embed"></iframe><br /><small>View <a href="http://maps.google.ca/maps/ms?ie=UTF8&amp;oe=UTF-8&amp;hl=en&amp;om=1&amp;t=h&amp;msid=102299121563303882298.00000111cd82f3e3f0241&amp;msa=0&amp;ll=34.10747,-118.318033&amp;spn=0.052447,0.080338&amp;source=embed" style="color:#0000FF;text-align:left">Cthurch of Scientology Locations</a> in a larger map</small></html>
<!--{{{-->
<link rel="shortcut icon" href="http://home.primus.ca/~ronsharp/tentacle.ico" />
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml'/>
<meta name="keywords" content="Ron Sharp, Hedgehog, Scientology, Cult, Umbra Xenu, ARSCC, Hubbard, Dianetics, Toronto, pictures, images, free-speech, picket"/>
<meta name="description" content="Ron Sharp's home-wiki and critical site in a box."/>
<meta name="author" content="Ron Sharp"/>
<!--}}}-->

<style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>~AndroidCat</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>
/***
|''Name:''|MediaWikiFormatterPlugin|
|''Description:''|Allows Tiddlers to use [[MediaWiki|http://meta.wikimedia.org/wiki/Help:Wikitext]] ([[WikiPedia|http://meta.wikipedia.org/]]) text formatting|
|''Author:''|Martin Budden (mjbudden (at) gmail (dot) com)|
|''Source:''|http://www.martinswiki.com/#MediaWikiFormatterPlugin |
|''CodeRepository:''|http://svn.tiddlywiki.org/Trunk/contributors/MartinBudden/formatters/MediaWikiFormatterPlugin.js |
|''Version:''|0.5.14|
|''Date:''|Jul 27, 2007|
|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev |
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.1.0|

|''Display instrumentation''|<<option chkDisplayInstrumentation>>|
|''Allow zooming of thumbnail images''|<<option chkMediaWikiDisplayEnableThumbZoom>>|
|''List references''|<<option chkMediaWikiListReferences>>|
|''Display unsupported magic words''|<<option chkDisplayMediaWikiMagicWords>>|
|''Use host images''|<<option chkUseHostImages>>|

This is the MediaWikiFormatterPlugin, which allows you to insert MediaWiki formated text into a TiddlyWiki.

The aim is not to fully emulate MediaWiki, but to allow you to work with MediaWiki content off-line and then resync the content with your MediaWiki later on, with the expectation that only minor edits will be required.

To use MediaWiki format in a Tiddler, tag the Tiddler with MediaWikiFormat or set the tiddler's {{{wikiformat}}} extended field to {{{mediawiki}}}.

!!!Issues
There are (at least) the following known issues:
# Not all styles from http://meta.wikimedia.org/wiki/MediaWiki:Common.css incorporated
## Styles for tables don't yet match Wikipedia styles.
## Styles for image galleries don't yet match Wikipedia styles.
# Anchors not yet supported.

!!!Not supported
# Template parser functions (also called colon functions) http://meta.wikimedia.org/wiki/ParserFunctions eg &#123;&#123; #functionname: argument 1 | argument 2 | argument 3... &#125;&#125;
# Magic words and variables http://meta.wikimedia.org/wiki/Help:Magic_words eg {{{__TOC__}}}, &#123;&#123;CURRENTDAY&#125;&#125;, &#123;&#123;PAGENAME&#125;&#125;
# {{{^''}}} (italic at start of line) indents, makes italic and quotes with guilmot quote

!!!No plans to support
# Template substitution on save http://meta.wikimedia.org/wiki/Help:Substitution eg &#123;&#123; subst: templatename &#125;&#125;

***/

//{{{
// Ensure that the MediaWikiFormatter Plugin is only installed once.
if(!version.extensions.MediaWikiFormatterPlugin) {
version.extensions.MediaWikiFormatterPlugin = {installed:true};

if(version.major < 2 || (version.major == 2 && version.minor < 1))
	{alertAndThrow('MediaWikiFormatterPlugin requires TiddlyWiki 2.1 or later.');}

if(config.options.chkDisplayInstrumentation == undefined)
	{config.options.chkDisplayInstrumentation = false;}

if(config.options.chkMediaWikiDisplayEnableThumbZoom == undefined)
	{config.options.chkMediaWikiDisplayEnableThumbZoom = false;}
if(config.options.chkMediaWikiListReferences == undefined)
	{config.options.chkMediaWikiListReferences = true;}
if(config.options.chkDisplayMediaWikiMagicWords == undefined)
	{config.options.chkDisplayMediaWikiMagicWords = false;}
if(config.options.chkUseHostImages == undefined)
	{config.options.chkUseHostImages = false;}

//#config.textPrimitives.urlPattern = "(([a-zA-Z][0-9a-zA-Z+\\-\\.]*:)?/{0,2}[0-9a-zA-Z;/?:@&=+$\\.\\-_!~*'()%]+)?(#[0-9a-zA-Z;/?:@&=+$\\.\\-_!~*'()%]+)?";
//#config.textPrimitives.urlPattern = "[a-z]{3,8}:/{0,2}[^\\s:/<>'\"][^\\s/<>'\"]*(?:/|\\b)";

//<div class='viewer' macro='view text wikified'></div>;

config.macros.include = {};
config.macros.include.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
	if((tiddler instanceof Tiddler) && params[0]) {
		var host = store.getValue(tiddler,'server.host');
		if(host && host.indexOf('wikipedia')!=-1) {
			var t = store.fetchTiddler(params[0]);
			var text = store.getValue(t,'text');
			wikify(text,place,highlightHack,tiddler);
		}
	}
};


MediaWikiFormatter = {}; // 'namespace' for local functions

mwDebug = function(out,str)
{
	createTiddlyText(out,str.replace(/\n/mg,'\\n').replace(/\r/mg,'RR'));
	createTiddlyElement2(out,'br');
};

MediaWikiFormatter.Tiddler_changed = Tiddler.prototype.changed;
Tiddler.prototype.changed = function()
{
	if((this.fields.wikiformat==config.parsers.mediawikiFormatter.format) || this.isTagged(config.parsers.mediawikiFormatter.formatTag)) {
		//# update the links array, by checking for MediaWiki format links
		this.links = [];
//#lookaheadRegExp: /\[\[(?:([a-z]{2,3}:)?)(#?)([^\|\]]*?)(?:(\]\](\w*))|(\|(.*?)\]\]))/mg,
		var tiddlerLinkRegExp = /\[\[(?::?([A-Za-z]{2,}:)?)(#?)([^\|\]]*?)(?:(\]\])|(\|(.*?)\]\]))/mg;
		tiddlerLinkRegExp.lastIndex = 0;
		var match = tiddlerLinkRegExp.exec(this.text);
		while(match) {
			if(!match[1] && !match[2])
				this.links.pushUnique(match[3]);
			match = tiddlerLinkRegExp.exec(this.text);
		}
	} else if(!this.isTagged('systemConfig')) {
		MediaWikiFormatter.Tiddler_changed.apply(this,arguments);
		return;
	}
	this.linksUpdated = true;
};

TiddlyWiki.prototype.getMediaWikiPagesInNamespace = function(namespace)
{
	var results = [];
	this.forEachTiddler(function(title,tiddler) {
		if(tiddler.title.indexOf(namespace)==0)
			results.push(tiddler);
		});
	results.sort(function(a,b) {return a.title < b.title ? -1 : +1;});
	return results;
};

TiddlyWiki.prototype.getMediaWikiPages = function()
{
	var results = [];
	this.forEachTiddler(function(title,tiddler) {
		if(!tiddler.isTagged('excludeLists') && tiddler.title.indexOf(':')==-1)
			results.push(tiddler);
		});
	results.sort(function(a,b) {return a.title < b.title ? -1 : +1;});
	return results;
};

TiddlyWiki.prototype.getMediaWikiOtherPages = function()
{
	var results = [];
	this.forEachTiddler(function(title,tiddler) {
		if(!tiddler.isTagged('excludeLists') && tiddler.title.indexOf(':')!=-1)
			results.push(tiddler);
		});
	results.sort(function(a,b) {return a.title < b.title ? -1 : +1;});
	return results;
};

config.macros.list.otherpages = {};
config.macros.list.otherpages.handler = function(params)
{
	return store.getMediaWikiOtherPages();
};

config.macros.list.templates = {};
config.macros.list.templates.handler = function(params)
{
	return store.getMediaWikiPagesInNamespace('Template:');
};

config.macros.list.categories = {};
config.macros.list.categories.handler = function(params)
{
	return store.getMediaWikiPagesInNamespace('Category:');
};

function createTiddlyElement2(parent,element)
{
	return parent.appendChild(document.createElement(element));
}

config.formatterHelpers.createElementAndWikify = function(w)
{
	w.subWikifyTerm(createTiddlyElement2(w.output,this.element),this.termRegExp);
};

MediaWikiFormatter.hijackListAll = function ()
{
	MediaWikiFormatter.oldListAll = config.macros.list.all.handler;
	config.macros.list.all.handler = function(params) {
		return store.getMediaWikiPages();
	};
};
MediaWikiFormatter.hijackListAll();

MediaWikiFormatter.fullHostName = function(host)
{
//#displayMessage("fullHostName:"+host);
	if(!host)
		return '';
	host = host.trim();
	if(!host.match(/:\/\//))
		host = 'http://' + host;
	if(host.substr(host.length-1) != '/')
		host = host + '/';
	return host;
};

MediaWikiFormatter.normalizedTitle = function(title)
{
	title = title.trim();
	var n = title.charAt(0).toUpperCase() + title.substr(1);
	return n.replace(/\s/g,'_');
};

MediaWikiFormatter.readToDelim = function(w)
//!!! this is a bit rubish, needs doing properly.
{
//#delimiter, startBracket terminatorBracket
	var dRegExp = /\|/mg;
	var sRegExp = /\[\[/mg;
	var tRegExp = /\]\]/mg;

	dRegExp.lastIndex = w.startMatch;
	var dMatch = dRegExp.exec(w.source);
	sRegExp.lastIndex = w.startMatch;
	var sMatch = sRegExp.exec(w.source);
	tRegExp.lastIndex = w.startMatch;
	var tMatch = tRegExp.exec(w.source);
	if(!tMatch) {
		//#mwDebug(w.output,'ERROR1');
		return false;
	}

	while(sMatch && sMatch.index<tMatch.index) {
		if(dMatch && dMatch.index<sMatch.index) {
			//# delim is before startBracket, so return it
//#mwDebug(w.output,'di:'+dMatch.index+' dl:'+sRegExp.lastIndex);
			w.nextMatch = dRegExp.lastIndex;
			w.matchLength = dMatch.index - w.startMatch;
			return true;
		}
//#mwDebug(w.output,'si:'+sMatch.index+' sl:'+sRegExp.lastIndex);
//#mwDebug(w.output,'ti:'+tMatch.index+' tl:'+tRegExp.lastIndex);
		//# startBracket before termBracket, so skip over bracket pairs
		//# found eg [[, so look for ]]
		tRegExp.lastIndex = sRegExp.lastIndex;
		tMatch = tRegExp.exec(w.source);
//#mwDebug(w.output,'xti:'+tMatch.index+' tl:'+tRegExp.lastIndex);
		
		//# and look for another [[
		w.nextMatch = tRegExp.lastIndex;
		dRegExp.lastIndex = w.nextMatch;
		dMatch = dRegExp.exec(w.source);
		sRegExp.lastIndex = w.nextMatch;
		sMatch = sRegExp.exec(w.source);
		tRegExp.lastIndex = w.nextMatch;
		tMatch = tRegExp.exec(w.source);
	}
		
	if(dMatch && dMatch.index<tMatch.index) {
		//# delim is before term, so return it
//#mwDebug(w.output,'2di:'+dMatch.index+' dl:'+sRegExp.lastIndex);
		w.nextMatch = dRegExp.lastIndex;
		w.matchLength = dMatch.index - w.startMatch;
		return true;
	}
	if(tMatch) {
		//# delim is before term, so return it
//#mwDebug(w.output,'2ti:'+tMatch.index+' tl:'+tRegExp.lastIndex);
		w.nextMatch = tRegExp.lastIndex;
		w.matchLength = tMatch.index - w.startMatch;
		return false;
	}
	//#mwDebug(w.output,'ERROR2');
	//# return term
	w.nextMatch = tRegExp.lastIndex;
	w.matchLength = -1;
	return false;
};

MediaWikiFormatter.getParams = function(w)
{
	var params = [];
	var i = 1;
	w.startMatch = w.nextMatch;
	var read = MediaWikiFormatter.readToDelim(w);
	if(w.matchLength!=-1) {
		params[i] = w.source.substr(w.startMatch,w.matchLength);
	}
	while(read) {
		i++;
		w.startMatch = w.nextMatch;
		read = MediaWikiFormatter.readToDelim(w);
		if(w.matchLength!=-1) {
			params[i] = w.source.substr(w.startMatch,w.matchLength);
		}
	}
	return params;
};

MediaWikiFormatter.setFromParams = function(w,p)
{
	var r = {};
	var re = /\s*(.*?)=(?:(?:"(.*?)")|(?:'(.*?)')|((?:\w|%|#)*))/mg;
	var match = re.exec(p);
	while(match)
		{
		var s = match[1].unDash();
		if(match[2]) {
			r[s] = match[2];
		} else if(match[3]) {
			r[s] = match[3];
		} else {
			r[s] = match[4];
		}
		match = re.exec(p);
	}
	return r;
};

MediaWikiFormatter.setAttributesFromParams = function(e,p)
{
	var re = /\s*(.*?)=(?:(?:"(.*?)")|(?:'(.*?)')|((?:\w|%|#)*))/mg;
	var match = re.exec(p);
	while(match) {
		var s = match[1].unDash();
		if(s == 'bgcolor') {
			s = 'backgroundColor';
		}
		try {
			if(match[2]) {
				e.setAttribute(s,match[2]);
			} else if(match[3]) {
				e.setAttribute(s,match[3]);
			} else {
				e.setAttribute(s,match[4]);
			}
		}
		catch(ex) {}
		match = re.exec(p);
	}
};

config.mediawiki = {};
config.mediawiki.formatters = [
{
	name: 'mediaWikiHeading',
	match: '^={1,6}(?!=) *\\n?',
	termRegExp: /(={1,6} *\n)/mg,
	handler: function(w)
	{
		//#var output = w.output.nodeType==1 && w.output.nodeName=='P' ? w.output.parentNode : w.output;
		var output = w.output;
		var e = createTiddlyElement2(output,'h' + w.matchLength);
		//# drop anchor
		var a = createTiddlyElement2(e,'a');
		var t = w.tiddler ? MediaWikiFormatter.normalizedTitle(w.tiddler.title) + ':' : '';
		var len = w.source.substr(w.nextMatch).indexOf('=\n');
		while(w.source.substr(w.nextMatch+len-1,1)=='=') {
			len--;
		}
		//#console.log('aa',w.source.substr(w.nextMatch,len));
		a.setAttribute('name',t+MediaWikiFormatter.normalizedTitle(w.source.substr(w.nextMatch,len)));
		w.subWikifyTerm(e,this.termRegExp);
		//#w.output = createTiddlyElement2(output,'p');
	}
},

{
	name: 'mediaWikiTable',
	match: '^\\{\\|', // ^{|
	handler: function(w)
	{
		var pair = MediaWikiTemplate.findTableBracePair(w.source,w.matchStart);
		if(pair.start==w.matchStart) {
		//#console.log('wwww');
			w.nextMatch = w.matchStart;
			var table = createTiddlyElement2(w.output,'table');
			var tbody = createTiddlyElement2(table,'tbody');// needed for IE
			var mwt = new MediaWikiTemplate();
			//#var t0 = new Date();
			mwt.wikifyTable(tbody,w,pair);
			//#console.log('tabletime:'+(new Date()-t0)+'ms');
		}
	}
},

{
	name: 'mediaWikiList',
	match: '^[\\*#;:]+',
	lookaheadRegExp: /(?:(?:(\*)|(#)|(;)|(:))+)(?: ?)/mg,
	termRegExp: /(\n)/mg,
	handler: function(w)
	{
//#this.debug = createTiddlyElement2(w.output,'p');
//#mwDebug(this.debug,'start list');
		var stack = [w.output];
		var currLevel = 0, currType = null;
		var listType, itemType;
		w.nextMatch = w.matchStart;
		this.lookaheadRegExp.lastIndex = w.nextMatch;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		while(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {
			if(lookaheadMatch[1]) {
				listType = 'ul';
				itemType = 'li';
			} else if(lookaheadMatch[2]) {
				listType = 'ol';
				itemType = 'li';
			} else if(lookaheadMatch[3]) {
				listType = 'dl';
				itemType = 'dt';
			} else if(lookaheadMatch[4]) {
				listType = 'dl';
				itemType = 'dd';
			}
			var listLevel = lookaheadMatch[0].length;
			w.nextMatch += listLevel;
			if(listLevel > currLevel) {
				for(var i=currLevel; i<listLevel; i++) {
					stack.push(createTiddlyElement2(stack[stack.length-1],listType));
				}
			} else if(listLevel < currLevel) {
				for(i=currLevel; i>listLevel; i--) {
					stack.pop();
				}
			} else if(listLevel == currLevel && listType != currType) {
				stack.pop();
				stack.push(createTiddlyElement2(stack[stack.length-1],listType));
			}
//#mwDebug(this.debug,"b:"+w.source.substr(w.nextMatch,30));
			currLevel = listLevel;
			currType = listType;
			var e = createTiddlyElement2(stack[stack.length-1],itemType);
			var ci = w.source.indexOf(':',w.nextMatch);
			var ni = w.source.indexOf('\n',w.nextMatch);
			if(itemType=='dt' && (ni==-1 || (ci!=-1 && ci<ni))) {
				//# deal with ':' on same line as ';'
				w.subWikifyTerm(e,/(:)/mg);
				w.nextMatch--;
			} else {
				w.subWikifyTerm(e,this.termRegExp);
			}
			this.lookaheadRegExp.lastIndex = w.nextMatch;
			lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		}
	}
},

{
	name: 'mediaWikiRule',
	match: '^----+$\\n?',
	handler: function(w)
	{
		//#var output = w.output.parentNode;
		createTiddlyElement2(w.output,'hr');
		//#w.output = createTiddlyElement2(output,'p');
	}
},

/*{
	name: 'mediaWikiLeadingSpaces',
	match: '^ ',
	lookaheadRegExp: /^ /mg,
	termRegExp: /(\n)/mg,
	handler: function(w)
	{
		var e = createTiddlyElement2(w.output,'pre');
		while(true) {
			w.subWikifyTerm(e,this.termRegExp);
			createTiddlyElement2(e,'br');
			this.lookaheadRegExp.lastIndex = w.nextMatch;
			var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
			if(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {
				w.nextMatch += lookaheadMatch[0].length;
			} else {
				break;
			}
		}
	}
},*/

//# [[Image:Westminstpalace.jpg|frame|none|caption text]]
//# //http://en.wikipedia.org/wiki/Image:Westminstpalace.jpg
//# <a href="/wiki/Image:Westminstpalace.jpg" class="internal" title="caption text">
//# <img src="http://upload.wikimedia.org/wikipedia/commons/3/39/Westminstpalace.jpg"
//#  alt="caption text" width="400" height="300" longdesc="/wiki/Image:Westminstpalace.jpg" />
//# </a>

//# [[image:Stockholm.jpg|right|350px|thumb|Stockholm panorama from the City Hall]]
//# <div class="thumb tright">
//# 	<div style="width:352px;">
//# 		<a href="/wiki/Image:Stockholm.jpg" class="internal" title="Stockholm panorama from the City Hall">
//# 			<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Stockholm.jpg/350px-Stockholm.jpg" alt="Stockholm panorama from the City Hall" width="350" height="84" longdesc="/wiki/Image:Stockholm.jpg" />
//# 		</a>
//# 		<div class="thumbcaption">
//# 			<div class="magnify" style="float:right">
//# 				<a href="/wiki/Image:Stockholm.jpg" class="internal" title="Enlarge">
//# 				<img src="/skins-1.5/common/images/magnify-clip.png" width="15" height="11" alt="Enlarge" />
//# 				</a>
//# 			</div>
//# 			Stockholm panorama from the City Hall
//# 		</div>
//# 	</div>
//# </div>
{
	name: 'mediaWikiImage',
	match: '\\[\\[(?:[Ii]mage|Bild):',
	lookaheadRegExp: /\[\[(?:[Ii]mage|Bild):/mg,
	defaultPx: 180,
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var params = MediaWikiFormatter.getParams(w);
			var src = params[1];
			src = src.trim().replace(/ /mg,'_');
			src = src.substr(0,1).toUpperCase() + src.substring(1);
			var palign = null;
			var ptitle = '';
			var psrc = false;
			var px = null;
			var pthumb = false;
			var pframed = false;
			for(var i=2;i<params.length;i++) {
				//# right, left, center, none, sizepx, thumbnail (thumb), frame, and alternate (caption) text.
				var p = params[i];
				if(p=='right'||p=='left'||p=='center'||p=='none') {
					palign = p;
				} else if(p=='thumbnail'||p=='thumb') {
					pthumb = true;
				} else if(p=='framed') {
					pframed = true;
				} else if(/\d{1,4} ?px/.exec(p)) {
					px = p.substr(0,p.length-2).trim();
				} else {
					ptitle = p;
				}
			}//#end for
			if(pthumb) {
				//#var output = w.output.nodeType==1 && w.output.nodeName=='P' ? w.output.parentNode : w.output;
				var output = w.output;
				if(!palign) {
					palign = 'right';
				}
				if(!px) {
					px = 180;
				}
				psrc = px + 'px-' + src;
				var t = createTiddlyElement(output,'div',null,'thumb'+(palign?' t'+palign:''));
				var s = createTiddlyElement2(t,'div');
				s.style['width'] = Number(px) + 2 + 'px';
				var a = createTiddlyElement(s,'a',null,'internal');
				if(config.options.chkMediaWikiDisplayEnableThumbZoom) {
					a.href = src;
				}
				a.title = ptitle;
				var img = createTiddlyElement2(a,'img');
				img.src = 'images/' + psrc;
				if(config.options.chkUseHostImages && Crypto.hexMd5Str) {
//#http://wiki.openmoko.org/images/thumb/b/b9/Freerunner02.gif/150px-Freerunner02.gif
//#http://upload.wikimedia.org/wikipedia/en/thumb/1/1d/KLM_Aircraft_at_Schiphol.jpg/180px-KLM_Aircraft_at_Schiphol.jpg
//#http://upload.wikimedia.org/wikipedia/commons/thumb/3/37/KLMS.jpg/250px-KLMS.jpg
					var md5 = Crypto.hexMd5Str(src);
					var md5dir = '/' + (md5.substr(0,1) + '/' + md5.substr(0,2)).toLowerCase();
					img.src = MediaWikiFormatter.fullHostName(w.tiddler.fields['server.host']||config.defaultCustomFields['server.host']);
					var imgDir = 'images';
					//if(img.src=='http://en.wikipedia.org/w/') {
					if(img.src.indexOf('wikipedia.org/')!=-1) {
						//imgDir = 'wikipedia/en';
						imgDir = 'wikipedia/commons';
						img.src = 'http://upload.wikimedia.org/';
					}	
					img.src += imgDir;
					img.src += '/thumb' + md5dir + '/' + src + '/' + psrc;
					//#console.log('image uri',img.src);
				}

//#mwDebug(w.output,'s1:'+img.src);
				img.width = px;
				img.longdesc = 'Image:' + src;
				img.alt = ptitle;

				var tc = createTiddlyElement(s,'div',null,'thumbcaption');
				var oldSource = w.source; var oldMatch = w.nextMatch;
				w.source = ptitle; w.nextMatch = 0;
				w.subWikifyUnterm(tc);
				w.source = oldSource; w.nextMatch = oldMatch;

				if(config.options.chkMediaWikiDisplayEnableThumbZoom) {
					var tm = createTiddlyElement(tc,'div',null,'magnify');
					tm.style['float'] = 'right';
					var ta = createTiddlyElement(tm,'a',null,'internal');
					ta.title = 'Enlarge';
					timg = createTiddlyElement2(ta,'img'); timg.src = 'magnify-clip.png'; timg.alt = 'Enlarge'; timg.width = '15'; timg.height = '11';
					ta.href = src;
				}
			} else {
				//# not pthumb
				a = createTiddlyElement(w.output,'a',null,'image');
				a.title = ptitle;
				img = createTiddlyElement2(a,'img');
				if(palign) {img.align = palign;}
//#mwDebug(w.output,'s2:'+img.src);
				if(px) {img.width = px;}
				img.longdesc = 'Image:' + src;
				img.alt = ptitle;
				if(config.options.chkUseHostImages) {
//#http://wiki.openmoko.org/images/thumb/b/b9/Freerunner02.gif/150px-Freerunner02.gif
//#http://upload.wikimedia.org/wikipedia/en/thumb/1/1d/KLM_Aircraft_at_Schiphol.jpg/180px-KLM_Aircraft_at_Schiphol.jpg
//#http://upload.wikimedia.org/wikipedia/commons/thumb/3/37/KLMS.jpg/250px-KLMS.jpg
					md5dir = '';
					if(Crypto.hexMd5Str) {
						md5 = Crypto.hexMd5Str(src);
						md5dir = '/'+ (md5.substr(0,1) + '/' + md5.substr(0,2)).toLowerCase();
					}
					img.src = MediaWikiFormatter.fullHostName(w.tiddler.fields['server.host']||config.defaultCustomFields['server.host']);
					imgDir = 'images';
					if(img.src.indexOf('wikipedia.org/')!=-1) {
						imgDir = 'wikipedia/commons';
						img.src = 'http://upload.wikimedia.org/';
					}	
					img.src += imgDir + md5dir + '/' + src;
				} else {
					img.src = px ? 'images/' + px + 'px-' + src : 'images/' + src;
				}
			}
		}
	}//#end image handler
},

{
	name: 'mediaWikiExplicitLink',
	match: '\\[\\[',
	lookaheadRegExp: /\[\[(?:([a-z]{2,3}:)?)(#?)([^\|\]]*?)(?:(\]\](\w*))|(\|(.*?)\]\]))/mg,
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			if(!lookaheadMatch[1]) {
				//# not (eg) [[en:...]]
				var e;
				var link = lookaheadMatch[3];
				var text = link;
				link = link.substr(0,1).toUpperCase() + link.substring(1);
				if(link.substr(0,1)=='/') {
					link = w.tiddler.title + link;
				} else if(link=='../') {
					link = w.tiddler.title.substr(0,w.tiddler.title.lastIndexOf('/'));
				} else if(link.substr(0,3)=='../') {
					var pos = w.tiddler.title.lastIndexOf('/');
					link = w.tiddler.title.substr(0,pos) + link.substr(2);
				}
				if(lookaheadMatch[4]) {
					//# Simple bracketted link
					if(lookaheadMatch[2]) {
						//# link to anchor
						var a = createTiddlyElement(w.output,'a');
						var t = w.tiddler ? MediaWikiFormatter.normalizedTitle(w.tiddler.title) + ':' : '';
						t = '#' + t + MediaWikiFormatter.normalizedTitle(link);
						a.setAttribute('href',t);
						a.title = '#' + MediaWikiFormatter.normalizedTitle(link);
						createTiddlyText(a,'#'+link);
					} else {
					//#mwDebug(w.output,'fm1:'+w.tiddler.title);
						e = createTiddlyLink(w.output,link,false,null,w.isStatic,w.tiddler);
						if(lookaheadMatch[5]) {
							//# add any non-space after the ]]
							text += lookaheadMatch[5];
						}
						createTiddlyText(e,text);
					}
				} else if(lookaheadMatch[6]) {
					//# Piped link
					while(link.charAt(0)==':')
						link = link.substring(1);
					link = MediaWikiFormatter.normalizedTitle(link);
					var i = link.indexOf('#');
					//#if(config.formatterHelpers.isExternalLink(link)) {
					//#	e = createExternalLink(w.output,link);
					//#} else {
					//#mwDebug(w.output,'fm2:'+w.tiddler.title);
					//#	e = createTiddlyLink(w.output,link,false,null,w.isStatic,w.tiddler);
					//#}
					if(i==-1) {
						e = createTiddlyLink(w.output,link,false,null,w.isStatic,w.tiddler);
					} else {
						e = createTiddlyLink(w.output,link.substr(0,i),false,null,w.isStatic,w.tiddler);
					}
					var oldSource = w.source; var oldMatch = w.nextMatch;
					w.source = lookaheadMatch[7].trim(); w.nextMatch = 0;
					w.subWikifyUnterm(e);
					w.source = oldSource; w.nextMatch = oldMatch;
				}
			}
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
},

{
	name: 'mediaWikiParagraph',
	match: '\\n{2,}',
	handler: function(w)
	{
		//#var output = w.output.nodeType==1 && w.output.nodeName=='P' ? w.output.parentNode : w.output;
		w.output = createTiddlyElement2(w.output,'p');
	}
},

{
	name: 'mediaWikiExplicitLineBreak',
	match: '<br ?/?>',
	handler: function(w)
	{
		createTiddlyElement2(w.output,'br');
	}
},

{
	name: 'mediaWikiExplicitLineBreakWithParams',
	match: "<br(?:\\s*(?:(?:.*?)=[\"']?(?:.*?)[\"']?))*?\\s*/?>",
	lookaheadRegExp: /<br((?:\s+(?:.*?)=["']?(?:.*?)["']?)*?)?\s*\/?>/mg, //'
	handler: function(w)
	{
		//# copes with erroneous <br clear='right'>
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var e =createTiddlyElement2(w.output,'br');
			if(lookaheadMatch[1]) {
				MediaWikiFormatter.setAttributesFromParams(e,lookaheadMatch[1]);
			}
			w.nextMatch = this.lookaheadRegExp.lastIndex;// empty tag
		}
	}
},

{
	name: 'mediaWikiTitledUrlLink',
	match: '\\[' + config.textPrimitives.urlPattern + '(?:\\s+[^\\]]+)?' + '\\]', //'
	//# eg [http://www.nupedia.com] or [http://www.nupedia.com Nupedia]
	//# <sup id='_ref-1' class='reference'><a href='#_note-1' title=''>[2]</a>
	handler: function(w)
	{
		var lookaheadRegExp = new RegExp('\\[(' + config.textPrimitives.urlPattern + ')(?:\\s+([^\[]+))?' + '\\]','mg');
		lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index==w.matchStart) {
			var link = lookaheadMatch[1];
			if(lookaheadMatch[2]) {
				var e = createExternalLink(w.output,link);
				var oldSource = w.source; var oldMatch = w.nextMatch;
				w.source = lookaheadMatch[2].trim(); w.nextMatch = 0;
				w.subWikifyUnterm(e);
				w.source = oldSource; w.nextMatch = oldMatch;
			} else {
				e = createExternalLink(createTiddlyElement2(w.output,'sup'),link);
				if(w.linkCount===undefined)
					w.linkCount = 0;
				w.linkCount++;
				createTiddlyText(e,'['+w.linkCount+']');
			}
			w.nextMatch = lookaheadRegExp.lastIndex;
		}
	}
},

{
	name: 'mediaWikiUrlLink',
	match: config.textPrimitives.urlPattern,
	handler: function(w)
	{
		w.outputText(createExternalLink(w.output,w.matchText),w.matchStart,w.nextMatch);
	}
},

{
	name: "mediaWikiCharacterFormat",
	match: "'{2,5}|(?:<[usbi]>)",
	handler: function(w)
	{
		switch(w.matchText) {
		case "'''''":
			var e = createTiddlyElement(w.output,'strong');
			w.subWikifyTerm(createTiddlyElement(e,'em'),/('''''|(?=\n))/mg);
			break;
		case "'''":
			w.subWikifyTerm(createTiddlyElement(w.output,'strong'),/('''|(?=\n))/mg);
			break;
		case "''":
			w.subWikifyTerm(createTiddlyElement(w.output,'em'),/((?:''(?!'))|(?=\n))/mg);
			break;
		case '<u>':
			w.subWikifyTerm(createTiddlyElement(w.output,'u'),/(<\/u>|(?=\n))/mg);
			break;
		case '<s>':
			w.subWikifyTerm(createTiddlyElement(w.output,'del'),/(<\/s>|(?=\n))/mg);
			break;
		case '<b>':
			w.subWikifyTerm(createTiddlyElement(w.output,'b'),/(<\/b>|(?=\n))/mg);
			break;
		case '<i>':
			w.subWikifyTerm(createTiddlyElement(w.output,'i'),/(<\/i>|(?=\n))/mg);
			break;
		}
	}
},

/*{
	//# note, this only gets invoked when viewing the template
	name: 'mediaWikiTemplateParam',
	match: '\\{\\{\\{',
	lookaheadRegExp: /(\{\{\{(?:.|\n)*?\}\}\})/mg,
	element: 'span',
	handler: config.formatterHelpers.enclosedTextHelper
},
*/

//# See http://en.wikipedia.org/wiki/Wikipedia:Footnotes
//# for an explanation of how to generate footnotes using the <ref(erences/)> tags
{
	name: 'mediaWikiInsertReference',
	match: '<ref[^/]*>',
	lookaheadRegExp: /<ref(\s+(?:.*?)=["']?(?:.*?)["']?)?>([^<]*?)<\/ref>/mg,
	//#lookaheadRegExp: /<ref(\s+(?:.*?)=["']?(?:.*?)["']?)?>([.\n]*?)<\/ref>/mg, //"
	handler: function(w)
	{
		if(config.browser.isIE) {
			refRegExp = /<ref[^\/]*>((?:.|\n)*?)<\/ref>/mg;
			refRegExp.lastIndex = w.matchStart;
			var refMatch = refRegExp.exec(w.source);
			if(refMatch && refMatch.index == w.matchStart) {
				w.nextMatch = refRegExp.lastIndex;
				return;
			}
		}
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var x = {id:'',value:''};
			w.nextMatch = this.lookaheadRegExp.lastIndex;
			if(!w.referenceCount) {
				w.referenceCount = 0;
				w.references = {};
			}
			var s = createTiddlyElement(w.output,'sup',null,'reference');
			var a = createTiddlyElement2(s,'a');
			var prefix = w.tiddler ? w.tiddler.title + ':' : '';
			var name;
			if(lookaheadMatch[1]) {
				//# <ref params>
				//#var r = {};
				var r = MediaWikiFormatter.setFromParams(w,lookaheadMatch[1]);
				name = r.name ? r.name.trim() : '';
				name = name.replace(/ /g,'_');
				s.id = prefix + '_ref-' + name;// + '_' + nameCount;(w.referenceCount+1);
				if(!w.references[name]) {
					w.references[name] = x;
					w.references[name].id = w.referenceCount;
					w.references[name].value = lookaheadMatch[2].trim();
				}
			} else {
				//# <ref>, repeat reference
				w.references[w.referenceCount] = x;
				w.references[w.referenceCount].id = w.referenceCount;
				w.references[w.referenceCount].value = lookaheadMatch[2].trim();
				name = w.referenceCount;
				s.id = prefix + '_ref-' + w.referenceCount;
			}
			w.referenceCount++;
			a.title = lookaheadMatch[2].trim();//mb, extra to wikipedia
			a.href = '#' + prefix + '_note-' + name;
			a.innerHTML = '['+w.referenceCount+']';
//#<sup id='_ref-0' class='reference'><a href='#_note-0' title=''>[1]</a></sup>
//#<sup id='_ref-foreign_ministry_0' class='reference'><a href='#_note-foreign_ministry' title=''>[2]</a></sup>
		}
	}
},

{
	name: 'mediaWikiListReferences',
	match: '<references ?/>',
	lookaheadRegExp: /<references ?\/>/mg,
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(config.options.chkMediaWikiListReferences && w.referenceCount) {
			var ol = createTiddlyElement(w.output,'ol',null,'references');
			var oldSource = w.source;
			if(w.referenceCount>0) {
				for(var i in w.references) {
					var li = createTiddlyElement2(ol,'li');
					var prefix = w.tiddler ? w.tiddler.title + ':' : '';
					var b = createTiddlyElement2(li,'b');
					var a = createTiddlyElement2(b,'a');
					li.id = prefix + '_note-' + i;
					a.href = '#' + prefix + '_ref-' + i;
					a.innerHTML = '^';
					w.source = w.references[i].value;
					w.nextMatch = 0;
					w.subWikifyUnterm(li);
				}
			}
			w.source = oldSource;
		}
		w.nextMatch = this.lookaheadRegExp.lastIndex;
	}
},

{
	name: 'mediaWikiRepeatReference',
	match: '<ref[^/]*/>',
	lookaheadRegExp: /<ref(\s+(?:.*?)=["'](?:.*?)["'])?\s*\/>/mg, //'
	handler: function(w)
	{
		if(config.browser.isIE) {
			refRegExp = /<ref.*?\/>/mg;
			refRegExp.lastIndex = w.matchStart;
			var refMatch = refRegExp.exec(w.source);
			if(refMatch && refMatch.index == w.matchStart) {
				w.nextMatch = refRegExp.lastIndex;
				return;
			}
		}
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var x = {id:'',value:''};
			w.nextMatch = this.lookaheadRegExp.lastIndex;
//#<ref name="foreign ministry">
//#<sup id="_ref-foreign_ministry_1" class="reference"><a href="#_note-foreign_ministry" title="">[2]</a></sup>
			var s = createTiddlyElement(w.output,"sup",null,"reference");
			var a = createTiddlyElement2(s,"a");
			var prefix = w.tiddler ? w.tiddler.title : '';
			if(lookaheadMatch[1]) {
				var r = {};
				r = MediaWikiFormatter.setFromParams(w,lookaheadMatch[1]);
				var name = r.name ? r.name.trim() : '';
				name = name.replace(/ /g,'_');
				s.id = prefix + '_ref-' + name +'_' + (w.referenceCount+1);
				var count = w.references && w.references[name] ? (w.references[name].id+1) : '?';
			}
			a.href = '#' + prefix + '_note-' + name;
			a.innerHTML = '['+count+']';
			a.title = name;
		}
	}//# end handler
},

{
	name: 'mediaWikiHtmlEntitiesEncoding',
	match: '&#?[a-zA-Z0-9]{2,8};',
	handler: function(w)
	{
		if(!config.browser.isIE)
			createTiddlyElement(w.output,"span").innerHTML = w.matchText;
	}
},

{
	name: 'mediaWikiComment',
	match: '<!\\-\\-',
	lookaheadRegExp: /<!\-\-((?:.|\n)*?)\-\->/mg,
	//#lookaheadRegExp: /<!\-\-([.\n]*?)\-\->/mg,
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
},

{
	name: 'mediaWikiIncludeOnly',
	match: '<includeonly>',
	lookaheadRegExp: /<includeonly>((?:.|\n)*?)<\/includeonly>/mg,
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
},

{
	name: 'mediaWikiNoWiki',
	match: '<nowiki>',
	lookaheadRegExp: /<nowiki>((?:.|\n)*?)<\/nowiki>/mg,
	element: 'span',
	handler: config.formatterHelpers.enclosedTextHelper
},

{
	name: 'mediaWikiPreNoWiki',
	match: '<pre>\s*<nowiki>',
	lookaheadRegExp: /<pre>\s*<nowiki>((?:.|\n)*?)<\/nowiki>\s*<\/pre>/mg,
	element: 'pre',
	handler: config.formatterHelpers.enclosedTextHelper
},

{
	name: 'mediaWikiPre',
	match: '<pre>',
	lookaheadRegExp: /<pre>((?:.|\n)*?)<\/pre>/mg,
	element: 'pre',
	handler: config.formatterHelpers.enclosedTextHelper
},

{
	name: 'mediaWikiMagicWords',
	match: '__',
	lookaheadRegExp: /__([A-Z]*?)__/mg,
	//# see http://meta.wikimedia.org/wiki/Help:Magic_words
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			//# deal with variables by name here
			switch(lookaheadMatch[1]) {
			case 'NOTOC':
				//# do nothing
				break;
			default:
				if(config.options.chkDisplayMediaWikiMagicWords) {
					//# just output the text of any variables that are not understood
					w.outputText(w.output,w.matchStart,w.nextMatch);
				}
				break;
			}
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
},

{
	name: 'mediaWikiGallery',
	match: '<gallery>',
	lookaheadRegExp: /[Ii]mage:(.*?)\n/mg,
	handler: function(w)
	{
//#basic syntax is:
//#<gallery>
//#Image:Wiki.png
//#Image:Wiki.png|Captioned
//#Image:Wiki.png|[[Help:Contents/Links|Links]] can be put in captions.
//#Image:Wiki.png|Full [[MediaWiki]]<br />[[syntax]] may now be used…
//#</gallery>
//#<table class="gallery" cellspacing="0" cellpadding="0">
//#<tr>
//#...
//#</tr>
//#</table>
		var table = createTiddlyElement(w.output,'table',null,'gallery');
		table.cellspacing = '0';
		table.cellpadding = '0';
		var rowElem = createTiddlyElement2(table,'tr');
		var col = 0;
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var nM = w.nextMatch;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		var oldSource = w.source;
		while(lookaheadMatch) {
			nM += lookaheadMatch[1].length;
			w.source = lookaheadMatch[1] +']]';//!! ]] is hack until getParams is working
			w.nextMatch = 0;
			var params = MediaWikiFormatter.getParams(w);
			var src = params[1]||'';
			src = src.trim().replace(/ /mg,'_');
			src = src.substr(0,1).toUpperCase() + src.substring(1);
			var palign = 'right'; 
			var psrc = '120px-'+src;
			var px = 120;
			var pframed = false;
			ptitle = null;
			for(var i=2;i<params.length;i++) {
				//# right, left, center, none, sizepx, thumbnail (thumb), frame, and alternate (caption) text.
				var p = params[i];
				if(p=='right'||p=='left'||p=='center'||p=='none') {
					palign = p;
				} else if(p=='framed') {
					pframed = true;
				} else if(/\d{1,4}px/.exec(p)) {
					px = p.substr(0,p.length-2).trim();
					psrc = px + 'px-' + src;
				} else {
					ptitle = p;
				}
			}//#end for
//#<td>
//#<div class="gallerybox">
//#	<div class="thumb" style="padding: 26px 0;">
//#		<a href="/wiki/Image:Paul_C%C3%A9zanne_184.jpg" title="Image:Paul Cézanne 184.jpg">
//#		<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Paul_C%C3%A9zanne_184.jpg/120px-Paul_C%C3%A9zanne_184.jpg" width="120" height="94" alt="" />
//#		</a>
//#	</div>
//#	<div class="gallerytext">
//#		<p><i>La Pain et les Oeufs</i> (Bread and Eggs), thought to present austerity, 1865. Signed and dated. Possibly in Spanish style.</p>
//#	</div>
//#</div>
//#</td>
			var td = createTiddlyElement2(rowElem,'td');
			var gb = createTiddlyElement(td,'div',null,'gallerybox');
			var t = createTiddlyElement(gb,'div',null,'thumb');
			t.style['padding'] = '26px 0';

			var a = createTiddlyElement2(t,'a');
			if(config.options.chkMediaWikiDisplayEnableThumbZoom) {
				a.href = src;
			}
			a.title = ptitle;
			var img = createTiddlyElement2(a,'img');
			img.src = psrc;
			img.width = px;
			//#ptitle;
			img.alt = '';

			var gt = createTiddlyElement(gb,'div',null,'gallerytext');
			p = createTiddlyElement2(gt,'p');
			var oldSource2 = w.source; var oldMatch = w.nextMatch;
			w.source = ptitle; w.nextMatch = 0;
			w.subWikifyUnterm(p);
			w.source = oldSource2; w.nextMatch = oldMatch;

			col++;
			if(col>3) {
				rowElem = createTiddlyElement2(table,'tr');
				col = 0;
			}
			w.source = oldSource;
			lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		}
		w.nextMatch = nM + '<gallery>'.length*2+1+'Image:'.length;//!! hack
	}
},

{
	name: 'mediaWikiHtmlTag',
	match: "<[a-zA-Z0-9]{2,}(?:.*?)>",
	//match: "<[a-zA-Z]{2,}(?:\\s*(?:(?:.*?)=[\"']?(?:.*?)[\"']?))*?>",
	lookaheadRegExp: /<([a-zA-Z0-9]{2,})((?:\s+(?:.*?)=(["']?)(?:.*?)\3?)*?)?\s*(\/)?>/mg, //'
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var e =createTiddlyElement2(w.output,lookaheadMatch[1]);
			if(lookaheadMatch[2]) {
				MediaWikiFormatter.setAttributesFromParams(e,lookaheadMatch[2]);
			}
			if(lookaheadMatch[4]) {
				//# empty tag
				w.nextMatch = this.lookaheadRegExp.lastIndex;
			} else {
				w.subWikify(e,'</'+lookaheadMatch[1]+'>');
			}
		}
	}
}
];

config.parsers.mediawikiFormatter = new Formatter(config.mediawiki.formatters);
config.parsers.mediawikiFormatter.format = 'mediawiki';
config.parsers.mediawikiFormatter.formatTag = 'MediaWikiFormat';

MediaWikiTemplate = function()
{
	this.stack = [];
	this.error = false;
	this.tiddler = null;
};

MediaWikiTemplate.findRawDelimiter = function(delimiter,text,start)
{
//# {{!}} {{|}}
//#fnLog('findRawDelimiter:'+text.substr(start,50));
	var d = text.indexOf(delimiter,start);
	if(d==-1)
		return -1;
	var b = {start:-1,end:-1};
	var bs = text.indexOf('[[',start);
	var bi = text.indexOf('{{',start);
	if((bi==-1 || bi > d) && (bs==-1 || bs >d))
		return d;
	var s1 = -1;
	if(bs!=-1 && bs <d) {
		var be = text.indexOf(']]',bs);
		if(be!=-1) {
			b.start = bs;
			b.end = be;
		}
	}
//#console.log('frd('+d+','+bs+','+be+')');
	if(b.start!=-1 && d>b.start)
		s1 = b.end+2;
	var db = MediaWikiTemplate.findDBP(text,start);
//#console.log('frd('+d+','+db.start+','+db.end+')');
	if(db.end!=-1 && d>db.start) {
		if(db.end+2>s1)
			s1 = db.end+2;
	}
	var tb = MediaWikiTemplate.findTBP(text,start);
	if(tb.end!=-1 && d>tb.start) {
		if(tb.end+3>s1)
			s1 = tb.end+3;
	}
	return s1==-1 ? d : MediaWikiTemplate.findRawDelimiter(delimiter,text,s1);
};

/*
* Matched sets of four consecutive braces are interpreted as a parameter surrounded by single braces:
	{{{{foo}}}} is equivalent to { {{{foo}}} }.
* Unmatched sets of four braces are interpreted as nested template calls:
	{{{{TEx1}} }} is parsed as a call to a template, the name of which is dependent on the output of TEx1.
In this example, {{{{TEx1}} }} results in Template:Hello world!, as the Hello world! template does not exist.
* Matched sets of five consecutive braces are interpreted as a template call surrounding a parameter:
	{{{{{foo}}}}} is equivalent to {{ {{{foo}}} }}.
* Unmatched sets of five braces are interpreted using the standard rules:
	{{{{{TEx1}} }}} is interpreted as a named parameter with the name dependent on the result of Template:TEx1,
	which in this case is equivalent to {{{Hello world!}}}.
*/
//	dbrTest('{{ {{{a}}} b }} {{c}}',0,0,13);
MediaWikiTemplate.findDBP = function(text,start,end)
// findDoubleBracePair
{
//#console.log('findDBP:'+start+' t:'+text);
	var ret = {start:-1,end:-1};
	var s = text.indexOf('{{',start);
	if(s==-1) {
		return ret;
	}
	if(end && s>end)
		return ret;
	if(text.substr(s+2,1)!='{') {
		//# only two braces
		var e = text.indexOf('}}',s+2);
//#console.log('db:'+db.start+' ,'+db.end);
//#console.log('tb:'+tb.start+' ,'+tb.end);
//#console.log('e:'+e);
		if(e==-1)
			return ret;
		var s2 = text.indexOf('{{',s+2);
		if(s2==-1 || s2 > e)
			return {start:s,end:e};
		var si = s+2;
		var db = MediaWikiTemplate.findDBP(text,si,e);
		var tb = MediaWikiTemplate.findTBP(text,si,e);
		while((db.end!=-1 && e>db.start && e<=db.end) || (tb.end!=-1 && e>tb.start && e<=tb.end)) {
			//# intervening double or triple brace pair, so skip over
			if(db.end!=-1 && e>db.start && e<=db.end) {
				si = db.end+2;
				if(tb.end!=-1 && e>tb.start && e<=tb.end) {
					if(tb.end>db.end)
						si = tb.end+3;
				}
			} else {
				si = tb.end+3;
			}			
			e = text.indexOf('}}',si);
			db = MediaWikiTemplate.findDBP(text,si,e);
			tb = MediaWikiTemplate.findTBP(text,si,e);
			if(e==-1) {
				return ret;
			}
		}
		return {start:s,end:e};
	}
	//# more than two braces, so count them
	var c = 2;
	while(text.substr(s+c,1)=='{') {
		c++;
	}
	if(c==3) {
		//# it's a triple brace, so skip over it
		//tb = MediaWikiTemplate.findTBP(text,s);
//#console.log('s:'+s+' t:'+text);
//#console.log('tb:'+tb.start+' ,'+tb.end);
		//return tb.end==-1 ? ret : MediaWikiTemplate.findDBP(text,tb.end+3);
		return MediaWikiTemplate.findDBP(text,s+3);
	} else if(c==4) {
		//# it's a quadrupal brace, so see if it is matched (eg {{{{x}}}} ) or not (eg {{{{x}} }} )
		db = MediaWikiTemplate.findDBP(text,s+2);
		if(db.end==-1)
			return ret;
		if(text.substr(db.end+2,2)=='}}') {
			//# it's matched, so skip over 
			//# {{{{foo}}}} is equivalent to { {{{foo}}} }
			return MediaWikiTemplate.findDBP(text,db.end+4);
		} else {
			//# it's not matched
			//# {{{{foo}} }} is equivalent to {{ {{foo}} }}
			e = text.indexOf('}}',db.end+2);
			return e==-1 ? ret : {start:s,end:e};
		}
	} else if(c==5) {
		//# it's a quintupal brace, so see if it is matched (eg {{{{{x}}}}} ) or not (eg {{{{{x}} }}} or {{{{{x}}} }})
		//# {{{{{foo}}}}} is equivalent to {{ {{{foo}}} }}.
		db = MediaWikiTemplate.findDBP(text,s+3);
		if(db.end==-1)
			return ret;
		if(text.substr(db.end+2,3)=='}}}') {
			// it's matched
			return {start:s,end:db.end+3};
		} else if(text.substr(db.end+2,1)!='}') {
			// it's not matched
			// {{{{{x}} }}}
			return {start:s+3,end:db.end};
		} else {
			// }}} }}
			e = text.indexOf('}}',db.end+3);
			return e==-1 ? ret : {start:s,end:e};
		}
	} else {
		//# presume treat six braces as two sets of {{{, so skip
		return MediaWikiTemplate.findDBP(text,s+6);
	}
};

MediaWikiTemplate.findTBP = function(text,start,end)
// findTripleBracePair
{
//#fnLog('findTBP:'+start+' t:'+text);
	var ret = {start:-1,end:-1};
	var s = text.indexOf('{{{',start);
	if(s==-1)
		return ret;
	if(end && s>end)
		return ret;
	if(text.substr(s+3,1)!='{' || text.substr(s+3,3)=='{{{') {
		//# only three braces, or 6 braces
		var si = s+3;
		var e = text.indexOf('}}}',si);
		if(e==-1)
			return ret;
		var s2 = text.indexOf('{{',si);
		if(s2==-1 || s2 > e)
			return {start:s,end:e};
		var db = MediaWikiTemplate.findDBP(text,si,e);
		var tb = MediaWikiTemplate.findTBP(text,si,e);
//	console.log('t:'+text.substr(s,100));
		while((db.end!=-1 && e>=db.end) || (tb.end!=-1 && e>=tb.end)) {
			//# intervening double or triple brace pair, so skip over
			if(db.end!=-1 && e>=db.end) {
				si = db.end+2;
				if(tb.end!=-1 && e>=tb.end) {
					if(tb.end>=db.end)
						si = tb.end+3;
				}
			} else {
				si = tb.end+3;
			}
			db = MediaWikiTemplate.findDBP(text,si,e);
			tb = MediaWikiTemplate.findTBP(text,si,e);
			e = text.indexOf('}}}',si);
			if(e==-1)
				return ret;
		}
		return {start:s,end:e};
	}
	//# more than three braces, so count them
	var c = 3;
	while(text.substr(s+c,1)=='{') {
		c++;
	}
	if(c==4) {
		//# it's a quadrupal brace, so see if it is matched (eg {{{{x}}}} ) or not (eg {{{{x}} }} )
		tb = MediaWikiTemplate.findTBP(text,s+1);
		if(tb.end==-1)
			return ret;
		if(text.substr(tb.end+1,1)=='}') {
			//# it's matched 
			//# {{{{foo}}}} is equivalent to { {{{foo}}} }
			return {start:s+1,end:tb.end};
		} else {
			//# it's not matched, so skip
			//# {{{{foo}} }} is equivalent to {{ {{foo}} }}
			return MediaWikiTemplate.findTBP(text,tb.end+4);
		}
	} else if(c==5) {
		//# it's a quintupal brace, so see if it is matched (eg {{{{{x}}}}} ) or not (eg {{{{{x}} }}} or {{{{{x}}} }})
		//# {{{{{foo}}}}} is equivalent to {{ {{{foo}}} }}.
		db = MediaWikiTemplate.findDBP(text,s+3);
		if(db.end==-1)
			return ret;
		if(text.substr(db.end+2,3)=='}}}') {
			//# it's matched
			return {start:s+2,end:db.end};
		} else if(text.substr(db.end+2,1)!='}') {
			//# it's not matched
			//# {{{{{x}} }}}
			e = text.indexOf('}}}',db.end+2);
			return e==-1 ? ret : {start:s,end:e};
		} else {
			//# {{{{{{x}}} }}
			return {start:s+2,end:db.end};
		}
	}
};

MediaWikiTemplate.findTableBracePair = function(text,start)
{
//#fnLog('findTableBracePair:'+start+' t:'+text);
	var ret = {start:-1,end:-1};
	var s = text.indexOf('{|',start);
	if(s==-1)
		return ret;
	var e = text.indexOf('\n|}',s+2);
	if(e==-1)
		return ret;
	e++;
	var s2 = text.indexOf('{|',s+2);
	if(s2==-1 || s2 > e)
		return {start:s,end:e};
	var tp = MediaWikiTemplate.findTableBracePair(text,s+2);
	while(tp.end!=-1 && e>tp.start && e<=tp.end) {
		//# intervening table brace pair, so skip over
		e = tp.end+2;
		tp = MediaWikiTemplate.findTableBracePair(text,e);
		e = text.indexOf('\n|}',e);
		if(e==-1)
			return ret;
		e++;
	}
	return {start:s,end:e};
};

MediaWikiTemplate.prototype.wikifyTable = function(table,w,pair)
{
//#console.log('wikifyTable');
//#console.log(w);
//#console.log(w.source.substr(w.nextMatch));
	function lineEnd(w) {
		var r = w.source.indexOf('\n',w.nextMatch);
		while(r!=-1) {
			var n = w.source.substr(r+1,1);
			if(n=='|' || n=='!' || (n=='{' && w.source.substr(r+2,1)=='|'))
				break;
			r = w.source.indexOf('\n',r+1);
		}
		return r;
	}
	function subWikifyText(e,w,text) {
			var oldSource = w.source; var oldMatch = w.nextMatch;
			w.source = text; w.nextMatch = 0;
			w.subWikifyUnterm(e);
			w.source = oldSource; w.nextMatch = oldMatch;
	}		
	//# skip over {|
	w.nextMatch += 2;
	var i = lineEnd(w);
	if(i>w.nextMatch) {
//#console.log('attribs');
		MediaWikiFormatter.setAttributesFromParams(table.parentNode,w.source.substring(w.nextMatch,i));
		w.nextMatch = i;
	}
	w.nextMatch++;
	if(w.source.substr(w.nextMatch,2)=='|+') {
//#console.log('caption');
		var caption = createTiddlyElement2(table,'caption');
		w.nextMatch += 2;
		i = lineEnd(w);
		var d = MediaWikiTemplate.findRawDelimiter('|',w.source,w.nextMatch);
		if(d!=-1 && d<i) {
			MediaWikiFormatter.setAttributesFromParams(caption,w.source.substring(w.nextMatch,d));
			w.nextMatch = d+1;
		}
		w.subWikifyTerm(caption,/(\n)/mg);
	}
	var tr = createTiddlyElement2(table,'tr');
//#console.log('x1:'+w.source.substr(w.nextMatch,10));
	if(w.source.substr(w.nextMatch,2)=='|-') {
		w.nextMatch += 2;
		i = lineEnd(w);
		//if(i==-1)
		//	break;
		if(i>w.nextMatch) {
			MediaWikiFormatter.setAttributesFromParams(tr,w.source.substring(w.nextMatch,i));
			w.nextMatch = i;
		}
		w.nextMatch++;
	}
//#console.log('x2:'+w.source.substr(w.nextMatch,10));
	var x = w.source.substr(w.nextMatch,2);
//#console.log('xw:'+x);
	while(x!='|}') {
		if(x=='{|') {
			//# nested table
			var pair2 = MediaWikiTemplate.findTableBracePair(w.source,w.nextMatch);
			if(pair2.start==w.nextMatch) {
				var table2 = createTiddlyElement2(cell,'table');
				this.wikifyTable(table2,w,pair2);
				var y = w.source.substr(w.nextMatch).escapeLineBreaks();
				while(w.source.substr(w.nextMatch,1)=='\n') {
					w.nextMatch++;
				}
			}
		} else if(x=='|-') {
			//# new row
			tr = createTiddlyElement2(table,'tr');
//#console.log('xr:'+w.source.substr(w.nextMatch,40));
			w.nextMatch += 2;
			i = lineEnd(w);
			if(i==-1)
				break;
			if(i>w.nextMatch) {
				MediaWikiFormatter.setAttributesFromParams(tr,w.source.substring(w.nextMatch,i));
				w.nextMatch = i;
			}
			w.nextMatch++;
		} else if(x.substr(0,1)=='!') {
			//# header cell
			w.nextMatch++;
//#console.log('xh:'+w.source.substr(w.nextMatch,40));
			i = lineEnd(w);
//#console.log('xi:'+w.source.substring(w.nextMatch,i));
			if(i==-1)
				break;
			var cell = createTiddlyElement2(tr,'th');
			var c = w.source.indexOf('!!',w.nextMatch);
			while(c!=-1 && c<i) {
				d = MediaWikiTemplate.findRawDelimiter('|',w.source,w.nextMatch);
				if(d!=-1 && d<c) {
					MediaWikiFormatter.setAttributesFromParams(cell,w.source.substring(w.nextMatch,d));
					w.nextMatch = d+1;
				}
				while(w.source.substr(w.nextMatch,1)==' ') {
					w.nextMatch++;
				}
				w.subWikifyTerm(cell,/(\!\!)/mg);
				cell = createTiddlyElement2(tr,'th');
				c = w.source.indexOf('!!',w.nextMatch);
			}
			d = MediaWikiTemplate.findRawDelimiter('|',w.source,w.nextMatch);
			if(d!=-1 && d<i) {
				MediaWikiFormatter.setAttributesFromParams(cell,w.source.substring(w.nextMatch,d));
				w.nextMatch = d+1;
			}
//#console.log('xk:'+w.source.substr(w.nextMatch,i));
			while(w.source.substr(w.nextMatch,1)==' ') {
				w.nextMatch++;
			}
			subWikifyText(cell,w,w.source.substring(w.nextMatch,i));
			w.nextMatch = i+1;
			//w.subWikifyTerm(cell,/(\n)/mg);
		} else if(x.substr(0,1)=='|') {
			//# cell
			w.nextMatch++;
//#console.log('xc:'+w.source.substr(w.nextMatch,40));
			i = lineEnd(w);
			if(i==-1)
				break;
			cell = createTiddlyElement2(tr,'td');
			c = w.source.indexOf('||',w.nextMatch);
	//#console.log('i:'+i);
			while(c!=-1 && c<i) {
				d = MediaWikiTemplate.findRawDelimiter('|',w.source,w.nextMatch);
	//#console.log('c1:'+c);
	//#console.log('d1:'+d+'('+w.nextMatch+','+i+')');
				if(d!=-1 && d<c) {
					MediaWikiFormatter.setAttributesFromParams(cell,w.source.substring(w.nextMatch,d));
					w.nextMatch = d+1;
				}
				while(w.source.substr(w.nextMatch,1)==' ') {
					w.nextMatch++;
				}
				w.subWikifyTerm(cell,/(\|\|)/mg);
				cell = createTiddlyElement2(tr,'td');
				c = w.source.indexOf('||',w.nextMatch);
			}
			d = MediaWikiTemplate.findRawDelimiter('|',w.source,w.nextMatch);
	//#console.log('d2:'+d+'('+w.nextMatch+','+i+')');
			if(d!=-1 && d<i) {
				MediaWikiFormatter.setAttributesFromParams(cell,w.source.substring(w.nextMatch,d));
				w.nextMatch = d+1;
			}
			while(w.source.substr(w.nextMatch,1)==' ') {
				w.nextMatch++;
			}
			subWikifyText(cell,w,w.source.substring(w.nextMatch,i));
			w.nextMatch = i+1;
			//w.subWikifyTerm(cell,/(\n)/mg);
		} else {
			//#console.log('unknown',x.escapeLineBreaks());
		}
	x = w.source.substr(w.nextMatch,2);
//#console.log('xw2:'+x);
	}
	w.nextMatch = pair.end + 3;
	return;
	
};

} //# end of 'install only once'
//}}}
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/JCbKv9yiLiQ&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/JCbKv9yiLiQ&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
<html><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/mnNSe5XYp6E&hl=en"></param><embed src="http://www.youtube.com/v/mnNSe5XYp6E&hl=en" type="application/x-shockwave-flash" width="425" height="344"></embed></object></html>
<html><embed style="width:400px; height:326px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=2742505831051424517&hl=en" flashvars=""> </embed></html>
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/L-vqj3jnxSY"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/L-vqj3jnxSY" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
Useful links generally about motorcycles and scooters by a noob rider, focused on the Greater Toronto Area.
[[MyBikeWiki|http://home.primus.ca/~ronsharp/bikewiki.html]]

[img[Mine!|http://i65.photobucket.com/albums/h233/RogerRamdrive/LPIC0126-1.jpg]]
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.3.4|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
This plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content.  
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
Enable animation for slider panels
<<option chkFloatingSlidersAnimate>> allow sliders to animate when opening/closing
>(note: This setting is in //addition// to the general option for enabling/disabling animation effects:
><<option chkAnimate>> enable animations (entire document)
>For slider animation to occur, you must also allow animation in general.

Debugging messages for 'lazy sliders' deferred rendering:
<<option chkDebugLazySliderDefer>> show debugging alert when deferring slider rendering
<<option chkDebugLazySliderRender>> show debugging alert when deferred slider is actually rendered
<<<
!!!!!Revisions
<<<
2008.01.08 - [*.*.*] plugin size reduction: documentation moved to ...Info tiddler
2007.12.28 - 2.3.4 added hijack for Animator.prototype.startAnimating().  Previously, the plugin code simply set the overflow to "visible" after animation.  This code tweak corrects handling of elements that were styled with overflow=hidden/auto/scroll before animation by saving the overflow style and then restoring it after animation has completed.
|please see [[NestedSlidersPluginInfo]] for additional revision details|
2005.11.03 - 1.0.0 initial public release.  Thanks to RodneyGomes, GeoffSlocock, and PaulPetterson for suggestions and experiments.
<<<
!!!!!Code
***/
//{{{
version.extensions.nestedSliders = {major: 2, minor: 3, revision: 4, date: new Date(2007,12,28)};
//}}}

//{{{
// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkDebugLazySliderDefer==undefined) config.options.chkDebugLazySliderDefer=false;
if (config.options.chkDebugLazySliderRender==undefined) config.options.chkDebugLazySliderRender=false;
if (config.options.chkFloatingSlidersAnimate==undefined) config.options.chkFloatingSlidersAnimate=false;

// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
	background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");
//}}}

//{{{
config.formatters.push( {
	name: "nestedSliders",
	match: "\\n?\\+{3}",
	terminator: "\\s*\\={3}\\n?",
	lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\[\\>]*\\^)?)?(\\*)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
	handler: function(w)
		{
			lookaheadRegExp = new RegExp(this.lookahead,"mg");
			lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = lookaheadRegExp.exec(w.source)
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
			{
				// var defopen=lookaheadMatch[1]
				// var cookiename=lookaheadMatch[2]
				// var header=lookaheadMatch[3]
				// var panelwidth=lookaheadMatch[4]
				// var transient=lookaheadMatch[5]
				// var class=lookaheadMatch[6]
				// var label=lookaheadMatch[7]
				// var openlabel=lookaheadMatch[8]
				// var panelID=lookaheadMatch[9]
				// var blockquote=lookaheadMatch[10]
				// var deferred=lookaheadMatch[11]

				// location for rendering button and panel
				var place=w.output;

				// default to closed, no cookie, no accesskey, no alternate text/tip
				var show="none"; var cookie=""; var key="";
				var closedtext=">"; var closedtip="";
				var openedtext="<"; var openedtip="";

				// extra "+", default to open
				if (lookaheadMatch[1]) show="block";

				// cookie, use saved open/closed state
				if (lookaheadMatch[2]) {
					cookie=lookaheadMatch[2].trim().slice(1,-1);
					cookie="chkSlider"+cookie;
					if (config.options[cookie]==undefined)
						{ config.options[cookie] = (show=="block") }
					show=config.options[cookie]?"block":"none";
				}

				// parse label/tooltip/accesskey: [label=X|tooltip]
				if (lookaheadMatch[7]) {
					var parts=lookaheadMatch[7].trim().slice(1,-1).split("|");
					closedtext=parts.shift();
					if (closedtext.substr(closedtext.length-2,1)=="=")	
						{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
					openedtext=closedtext;
					if (parts.length) closedtip=openedtip=parts.join("|");
					else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
				}

				// parse alternate label/tooltip: [label|tooltip]
				if (lookaheadMatch[8]) {
					var parts=lookaheadMatch[8].trim().slice(1,-1).split("|");
					openedtext=parts.shift();
					if (parts.length) openedtip=parts.join("|");
					else openedtip="hide "+openedtext;
				}

				var title=show=='block'?openedtext:closedtext;
				var tooltip=show=='block'?openedtip:closedtip;

				// create the button
				if (lookaheadMatch[3]) { // use "Hn" header format instead of button/link
					var lvl=(lookaheadMatch[3].length>6)?6:lookaheadMatch[3].length;
					var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,lookaheadMatch[6],title);
					btn.onclick=onClickNestedSlider;
					btn.setAttribute("href","javascript:;");
					btn.setAttribute("title",tooltip);
				}
				else
					var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,lookaheadMatch[6]);
				btn.innerHTML=title; // enables use of HTML entities in label

				// set extra button attributes
				btn.setAttribute("closedtext",closedtext);
				btn.setAttribute("closedtip",closedtip);
				btn.setAttribute("openedtext",openedtext);
				btn.setAttribute("openedtip",openedtip);
				btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
				btn.defOpen=lookaheadMatch[1]!=null; // save default open/closed state (boolean)
				btn.keyparam=key; // save the access key letter ("" if none)
				if (key.length) {
					btn.setAttribute("accessKey",key); // init access key
					btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
				}
				btn.onmouseover=function(event) // mouseover on button aligns floater position with button
					{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel); }

				// create slider panel
				var panelClass=lookaheadMatch[4]?"floatingPanel":"sliderPanel";
				var panelID=lookaheadMatch[9]; if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
				var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
				panel.button = btn; // so the slider panel know which button it belongs to
				btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
				panel.defaultPanelWidth=(lookaheadMatch[4] && lookaheadMatch[4].length>2)?lookaheadMatch[4].slice(1,-1):"";
				panel.setAttribute("transient",lookaheadMatch[5]=="*"?"true":"false");
				panel.style.display = show;
				panel.style.width=panel.defaultPanelWidth;
				panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
					{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this); }

				// render slider (or defer until shown) 
				w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
				if ((show=="block")||!lookaheadMatch[11]) {
					// render now if panel is supposed to be shown or NOT deferred rendering
					w.subWikify(lookaheadMatch[10]?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
					// align floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel);
				}
				else {
					var src = w.source.substr(w.nextMatch);
					var endpos=findMatchingDelimiter(src,"+++","===");
					panel.setAttribute("raw",src.substr(0,endpos));
					panel.setAttribute("blockquote",lookaheadMatch[10]?"true":"false");
					panel.setAttribute("rendered","false");
					w.nextMatch += endpos+3;
					if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
					if (config.options.chkDebugLazySliderDefer) alert("deferred '"+title+"':\n\n"+panel.getAttribute("raw"));
				}
			}
		}
	}
)

// TBD: ignore 'quoted' delimiters (e.g., "{{{+++foo===}}}" isn't really a slider)
function findMatchingDelimiter(src,starttext,endtext) {
	var startpos = 0;
	var endpos = src.indexOf(endtext);
	// check for nested delimiters
	while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
		// count number of nested 'starts'
		var startcount=0;
		var temp = src.substring(startpos,endpos-1);
		var pos=temp.indexOf(starttext);
		while (pos!=-1)  { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
		// set up to check for additional 'starts' after adjusting endpos
		startpos=endpos+endtext.length;
		// find endpos for corresponding number of matching 'ends'
		while (startcount && endpos!=-1) {
			endpos = src.indexOf(endtext,endpos+endtext.length);
			startcount--;
		}
	}
	return (endpos==-1)?src.length:endpos;
}
//}}}

//{{{
window.onClickNestedSlider=function(e)
{
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);
	var theLabel = theTarget.firstChild.data;
	var theSlider = theTarget.sliderPanel
	var isOpen = theSlider.style.display!="none";

	// toggle label
	theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
	// toggle tooltip
	theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));

	// deferred rendering (if needed)
	if (theSlider.getAttribute("rendered")=="false") {
		if (config.options.chkDebugLazySliderRender)
			alert("rendering '"+theLabel+"':\n\n"+theSlider.getAttribute("raw"));
		var place=theSlider;
		if (theSlider.getAttribute("blockquote")=="true")
			place=createTiddlyElement(place,"blockquote");
		wikify(theSlider.getAttribute("raw"),place);
		theSlider.setAttribute("rendered","true");
	}
	// show/hide the slider
	if(config.options.chkAnimate && (!hasClass(theSlider,'floatingPanel') || config.options.chkFloatingSlidersAnimate))
		anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
	else
		theSlider.style.display = isOpen ? "none" : "block";
	// reset to default width (might have been changed via plugin code)
	theSlider.style.width=theSlider.defaultPanelWidth;
	// align floater panel position with target button
	if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider);
	// if showing panel, set focus to first 'focus-able' element in panel
	if (theSlider.style.display!="none") {
		var ctrls=theSlider.getElementsByTagName("*");
		for (var c=0; c<ctrls.length; c++) {
			var t=ctrls[c].tagName.toLowerCase();
			if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
				{ ctrls[c].focus(); break; }
		}
	}
	var cookie=theTarget.sliderCookie;
	if (cookie && cookie.length) {
		config.options[cookie]=!isOpen;
		if (config.options[cookie]!=theTarget.defOpen)
			saveOptionCookie(cookie);
		else { // remove cookie if slider is in default display state
			var ex=new Date(); ex.setTime(ex.getTime()-1000);
			document.cookie = cookie+"=novalue; path=/; expires="+ex.toGMTString();
		}
	}
	// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
	// but allow plain click to bubble up to page background (to dismiss open popup, if any)
	if (e.shiftKey) { e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
	return false;
}
//}}}

//{{{
// click in document background closes transient panels 
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);
	// call original click handler
	if (document.nestedSliders_savedOnClick)
		var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
	// if click was inside transient panel (or something contained by a transient panel)... leave it alone
	var p=target;
	while (p)
		if ((hasClass(p,"floatingPanel")||hasClass(p,"sliderPanel"))&&p.getAttribute("transient")=="true") break;
		else p=p.parentNode;
	if (p) return retval;
	// otherwise, find and close all transient panels...
	var all=document.all?document.all:document.getElementsByTagName("DIV");
	for (var i=0; i<all.length; i++) {
		 // if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
		if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
		// otherwise, if the panel is currently visible, close it by clicking it's button
		if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button}) 
	}
	return retval;
};
//}}}

//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
	if (hasClass(panel,"floatingPanel")) {
		var left=0;
		var top=btn.offsetHeight; 
		if (place.style.position!="relative") {
			var left=findPosX(btn);
			var top=findPosY(btn)+btn.offsetHeight;
			var p=place; while (p && !hasClass(p,'floatingPanel')) p=p.parentNode;
			if (p) { left-=findPosX(p); top-=findPosY(p); }
		}
		if (findPosX(btn)+panel.offsetWidth > getWindowWidth())  // adjust position to stay inside right window edge
			left-=findPosX(btn)+panel.offsetWidth-getWindowWidth()+15; // add extra 15px 'fudge factor'
		panel.style.left=left+"px"; panel.style.top=top+"px";
	}
}

function getWindowWidth() {
	if(document.width!=undefined)
		return document.width; // moz (FF)
	if(document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
		return document.documentElement.clientWidth; // IE6
	if(document.body && ( document.body.clientWidth || document.body.clientHeight ) )
		return document.body.clientWidth; // IE4
	if(window.innerWidth!=undefined)
		return window.innerWidth; // IE - general
	return 0; // unknown
}
//}}}

//{{{
// TW2.1 and earlier:
// hijack Slider animation handler 'stop' handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
	{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }

// TW2.2+
// hijack start/stop handlers so overflow style is saved and restored after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
/**
	Animator.prototype.core_startAnimating = Animator.prototype.startAnimating;
	Animator.prototype.startAnimating = function() {
		for(var t=0; t<arguments.length; t++)
			arguments[t].element.save_overflow=arguments[t].element.style.overflow;
		return this.core_startAnimating.apply(this,arguments);
	};
**/
	Morpher.prototype.coreStop = Morpher.prototype.stop;
	Morpher.prototype.stop = function() {
		this.coreStop.apply(this,arguments);
		this.element.style.overflow = this.element.save_overflow||"visible";
	};
}
//}}}
/***
|Name|NestedSlidersPluginInfo|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.3.4|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|documentation|
|Requires||
|Overrides||
|Description|documentation for NestedSlidersPlugin|
This plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content.
!!!!!Usage
<<<
Use {{{+++}}} and {{{===}}} to delimit the slider content.  You can also 'nest' these sliders as deep as you like (see complex nesting example below), so that expandable 'tree-like' hierarchical displays can be created.  This is most useful when converting existing in-line text content to create in-line annotations, footnotes, context-sensitive help, or other subordinate information displays.

Additional optional syntax elements let you specify
*default to open
*cookiename
*heading level
*floater (with optional CSS width value)
*transient display (clicking elsewhere closes panel)
*custom class/label/tooltip/accesskey
*alternate label/tooltip (displayed when panel is open)
*panelID (for later use with {{{<<DOM>>}}} macro.  See [[DOMTweaksPlugin]])
*automatic blockquote style on panel
*deferred rendering of panel content
The complete syntax, using all options, is:
//{{{
++++(cookiename)!!!!!^width^*{{class{[label=key|tooltip][altlabel|alttooltip]}}}#panelID:>...
content goes here
===
//}}}
where:
* {{{+++}}} (or {{{++++}}}) and {{{===}}}<br>marks the start and end of the slider definition, respectively.  When the extra {{{+}}} is used, the slider will be open when initially displayed.
* {{{(cookiename)}}}<br>saves the slider opened/closed state, and restores this state whenever the slider is re-rendered.
* {{{!}}} through {{{!!!!!}}}<br>displays the slider label using a formatted headline (Hn) style instead of a button/link style
* {{{^width^}}} (or just {{{^}}})<br>makes the slider 'float' on top of other content rather than shifting that content downward.  'width' must be a valid CSS value (e.g., "30em", "180px", "50%", etc.).  If omitted, the default width is "auto" (i.e., fit to content)
* {{{"*"}}} //(without the quotes)//<br>denotes "transient display": when a click occurs elsewhere in the document, the slider/floating panel will be automatically closed.  This is useful for creating 'pulldown menus' that automatically go away after they are used.  //Note: using SHIFT-click on a slider label will open/close that slider without triggering the automatic closing of any transient slider panels that are currently displayed, permitting ''temporary'' display of several transient panels at once.//
* """{{class{[label=key|tooltip][altlabel|alttooltip]}}}"""<br>uses label/tooltip/accesskey.  """{{class{...}}}""", """=key""", """|tooltip""" and """[altlabel|alttooltip]""" are optional.  'class' is any valid CSS class name, used to style the slider label text.  'key' must be a ''single letter only''.  altlabel/alttooltip specifiy alternative label/tooltip for use when slider/floating panel is displayed.
* {{{#panelID:}}}<br>defines a unique DOM element ID that is assigned to the panel element used to display the slider content.  This ID can then be used later to reposition the panel using the {{{<<DOM move id>>}}} macro (see [[DOMTweaksPlugin]]), or to access/modify the panel element through use of {{{document.getElementById(...)}}}) javascript code in a plugin or inline script.
* {{{">"}}} //(without the quotes)//<br>automatically adds blockquote formatting to slider content
* {{{"..."}}} //(without the quotes)//<br>defers rendering of closed sliders until the first time they are opened.  //Note: deferred rendering may produce unexpected results in some cases.  Use with care.//

//Note: to make slider definitions easier to read and recognize when editing a tiddler, newlines immediately following the {{{+++}}} 'start slider' or preceding the {{{===}}} 'end slider' sequence are automatically supressed so that excess whitespace is eliminated from the output.//
<<<
!!!!!Examples
<<<
simple in-line slider: 
{{{
+++
   content
===
}}}
+++
   content
===
----
use a custom label and tooltip: 
{{{
+++[label|tooltip]
   content
===
}}}
+++[label|tooltip]
   content
===
----
content automatically blockquoted: 
{{{
+++>
   content
===
}}}
+++>
   content
===
----
all options combined //(default open, cookie, heading, sized floater, transient, class, label/tooltip/key, blockquoted, deferred)//
{{{
++++(testcookie)!!!^30em^*{{big{[label=Z|click or press Alt-Z to open]}}}>...
   content
===
}}}
++++(testcookie)!!!^30em^*{{big{[label=Z|click or press Alt-Z to open]}}}>...
   content
===
----
complex nesting example:
{{{
+++[get info...=I|click for information or press Alt-I]
	put some general information here,
	plus a floating panel with more specific info:
	+++^10em^[view details...|click for details]
		put some detail here, which could in turn contain a transient panel,
		perhaps with a +++^25em^*[glossary definition]explaining technical terms===
	===
===
}}}
+++[get info...=I|click for information or press Alt-I]
	put some general information here,
	plus a floating panel with more specific info:
	+++^10em^[view details...|click for details]
		put some detail here, which could in turn contain a transient panel,
		perhaps with a +++^25em^*[glossary definition]explaining technical terms===
	===
===
<<<
!!!!!Revisions
<<<
2008.01.08 - [*.*.*] plugin size reduction: documentation moved to ...Info tiddler
2007.12.28 - 2.3.4 added hijack for Animator.prototype.startAnimating().  Previously, the plugin code simply set the overflow to "visible" after animation.  This code tweak corrects handling of elements that were styled with overflow=hidden/auto/scroll before animation by saving the overflow style and then restoring it after animation has completed.
2007.12.17 - 2.3.3 use hasClass() instead of direct comparison to test for "floatingPanel" class.  Allows floating panels to have additional classes assigned to them (i.e., by AnimationEffectsPlugin).
2007.11.14 - 2.3.2 in onClickNestedSlider(), prevent SHIFT-click events from opening a new, empty browser window by setting "cancelBubble=true" and calling "stopPropagation()".  Note: SHIFT-click is still processed as a normal click (i.e., it toggles the slider panel display).  Also, using SHIFT-click will prevent 'transient' sliders from being automatically closed when another slider is opened, allowing you to *temporarily* display several transient sliders at once.
2007.07.26 - 2.3.1 in document.onclick(), propagate return value from hijacked core click handler to consume OR bubble up click as needed.  Fixes "IE click disease", whereby nearly every mouse click causes a page transition.
2007.07.20 - 2.3.0 added syntax for setting panel ID (#panelID:).  This allows individual slider panels to be repositioned within tiddler content simply by giving them a unique ID and then moving them to the desired location using the {{{<<DOM move id>>}}} macro.
2007.07.19 - 2.2.0 added syntax for alttext and alttip (button label and tooltip to be displayed when panel is open)
2007.07.14 - 2.1.2 corrected use of 'transient' attribute in IE to prevent (non-recursive) infinite loop
2007.07.12 - 2.1.0 replaced use of "*" for 'open/close on rollover' (which didn't work too well).  "*" now indicates 'transient' panels that are automatically closed if a click occurs somewhere else in the document.  This permits use of nested sliders to create nested "pulldown menus" that automatically disappear after interaction with them has been completed.  Also, in onClickNestedSlider(), use "theTarget.sliderCookie", instead of "this.sliderCookie" to correct cookie state tracking when automatically dismissing transient panels.
2007.06.10 - 2.0.5 add check to ensure that window.adjustSliderPanel() is defined before calling it (prevents error on shutdown when mouse event handlers are still defined)
2007.05.31 - 2.0.4 add handling to invoke adjustSliderPanel() for onmouseover events on slider button and panel.  This allows the panel position to be re-synced when the button position shifts due to changes in unrelated content above it on the page.  (thanks to Harsha for bug report)
2007.03.30 - 2.0.3 added chkFloatingSlidersAnimate (default to FALSE), so that slider animation can be disabled independent of the overall document animation setting (avoids strange rendering and focus problems in floating panels)
2007.03.01 - 2.0.2 for TW2.2+, hijack Morpher.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends
2007.03.01 - 2.0.1 in hijack for Slider.prototype.stop, use apply() to pass params to core function
2006.07.28 - 2.0.0 added custom class syntax around label/tip/key syntax: {{{{{classname{[label=key|tip]}}}}}}
2006.07.25 - 1.9.3 when parsing slider, save default open/closed state in button element, then in onClickNestedSlider(), if slider state matches saved default, instead of saving cookie, delete it.  Significantly reduces the 'cookie overhead' when default slider states are used.
2006.06.29 - 1.9.2 in onClickNestedSlider(), when setting focus to first control, skip over type="hidden"
2006.06.22 - 1.9.1 added panel.defaultPanelWidth to save requested panel width, even after resizing has changed the style value
2006.05.11 - 1.9.0 added optional '^width^' syntax for floating sliders and '=key' syntax for setting an access key on a slider label
2006.05.09 - 1.8.0 in onClickNestedSlider(), when showing panel, set focus to first child input/textarea/select element
2006.04.24 - 1.7.8 in adjustSliderPos(), if floating panel is contained inside another floating panel, subtract offset of containing panel to find correct position
2006.02.16 - 1.7.7 corrected deferred rendering to account for use-case where show/hide state is tracked in a cookie
2006.02.15 - 1.7.6 in adjustSliderPos(), ensure that floating panel is positioned completely within the browser window (i.e., does not go beyond the right edge of the browser window)
2006.02.04 - 1.7.5 add 'var' to unintended global variable declarations to avoid FireFox 1.5.0.1 crash bug when assigning to globals
2006.01.18 - 1.7.4 only define adjustSliderPos() function if it has not already been provided by another plugin.  This lets other plugins 'hijack' the function even when they are loaded first.
2006.01.16 - 1.7.3 added adjustSliderPos(place,btn,panel,panelClass) function to permit specialized logic for placement of floating panels.  While it provides improved placement for many uses of floating panels, it exhibits a relative offset positioning error when used within *nested* floating panels.  Short-term workaround is to only adjust the position for 'top-level' floaters.
2006.01.16 - 1.7.2 added button property to slider panel elements so that slider panel can tell which button it belongs to.  Also, re-activated and corrected animation handling so that nested sliders aren't clipped by hijacking Slider.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends
2006.01.14 - 1.7.1 added optional "^" syntax for floating panels.  Defines new CSS class, ".floatingPanel", as an alternative for standard in-line ".sliderPanel" styles.
2006.01.14 - 1.7.0 added optional "*" syntax for rollover handling to show/hide slider without requiring a click (Based on a suggestion by tw4efl)
2006.01.03 - 1.6.2 When using optional "!" heading style, instead of creating a clickable "Hn" element, create an "A" element inside the "Hn" element.  (allows click-through in SlideShowPlugin, which captures nearly all click events, except for hyperlinks)
2005.12.15 - 1.6.1 added optional "..." syntax to invoke deferred ('lazy') rendering for initially hidden sliders
removed checkbox option for 'global' application of lazy sliders
2005.11.25 - 1.6.0 added optional handling for 'lazy sliders' (deferred rendering for initially hidden sliders)
2005.11.21 - 1.5.1 revised regular expressions: if present, a single newline //preceding// and/or //following// a slider definition will be suppressed so start/end syntax can be place on separate lines in the tiddler 'source' for improved readability.  Similarly, any whitespace (newlines, tabs, spaces, etc.) trailing the 'start slider' syntax or preceding the 'end slider' syntax is also suppressed.
2005.11.20 - 1.5.0 added (cookiename) syntax for optional tracking and restoring of slider open/close state
2005.11.11 - 1.4.0 added !!!!! syntax to render slider label as a header (Hn) style instead of a button/link style
2005.11.07 - 1.3.0 removed alternative syntax {{{(((}}} and {{{)))}}} (so they can be used by other formatting extensions) and simplified/improved regular expressions to trim multiple excess newlines
2005.11.05 - 1.2.1 changed name to NestedSlidersPlugin
2005.11.04 - 1.2.0 added alternative character-mode syntax {{{(((}}} and {{{)))}}}
tweaked "eat newlines" logic for line-mode {{{+++}}} and {{{===}}} syntax
2005.11.03 - 1.1.1 fixed toggling of default tooltips ("more..." and "less...") when a non-default button label is used.  code cleanup, added documentation
2005.11.03 - 1.1.0 changed delimiter syntax from {{{(((}}} and {{{)))}}} to {{{+++}}} and {{{===}}}.  changed name to EasySlidersPlugin
2005.11.03 - 1.0.0 initial public release
<<<
My [[OmniFlash|http://en.wikipedia.org/wiki/Omniflash]] SBC, with Cirrus Logic ~EP9302 ~ARM9 processor currently running a Linux 2.4 kernel.
Most programming done via telnet in scripts and AWK, also with a cross-compiler toolchain on a Linux PC.
Mainly used for:
*Monitoring LAN and router for changes and loss of service in DHCP IP address from my ISP.
*Local web site.
*Fetching current weather forecast.
*Chiming the hour during waking hours.
*Alarm monitoring.
>[img[x|http://i65.photobucket.com/albums/h233/RogerRamdrive/OmniFlash1.jpg]]
>[img[x|http://i65.photobucket.com/albums/h233/RogerRamdrive/ShadowTech.jpg]]
<html><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/Dg4JOaeWpAs&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Dg4JOaeWpAs&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></html>
/***
|''Name:''|OpenTiddlersMacro|
|''Description:''|Create links that open multiple tiddlers. Optionally close all other tiddlers first.|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#OpenTiddlersMacro|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.0|
|''Date:''||
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.3|
!!Usage:
* {{{<<openTiddlers text:"click" tiddlers:[[TiddlerOne TiddlerTwo "Tiddler Three"]]>>}}}
** text: text for the link.
** tiddlers: titles of tiddlers to open, as a bracketed list.
* Additional optional parameters:
** {{{<<openTiddlers text:"click" tiddlers:[[TiddlerOne TiddlerTwo "Tiddler Three"]] closeAll:true keepMe:false>>}}}
*** closeAll: close all other tiddlers first
*** keepMe : close all other tiddlers, except the one containing the macro
!!Tip:
* You can use evaluated parameters to get a list of tiddlers to open from a tiddler.
** For example to open the DefaultTiddlers for a  "Home" button: <br> {{{<<openTiddlers text:"Home" tiddlers:{{store.getTiddlerText("DefaultTiddlers")}} closeAll:true>>}}} <br>  <<openTiddlers text:"Home" tiddlers:{{store.getTiddlerText("DefaultTiddlers")}} closeAll:true>>

***/
// /%
//!BEGIN-PLUGIN-CODE
config.macros.openTiddlers = 
{
	handler : function(place,macroName,params,wikifier,paramString,tiddler)
	{
		var np = paramString.parseParams("anon",null,true,false,false);
		var text = getParam(np,"text","");
		var tiddlers = getParam(np,"tiddlers","");
		if (tiddlers == ''){
			return false;
		}
		if (typeof tiddlers == 'string' ){
			tiddlers = tiddlers.readBracketedList();
		}
		var closeAll = getParam(np,"closeAll","false");
		var keepMe = getParam(np,"keepMe","false");
		var btn= createTiddlyButton(place,text,null,this.onClick,"tiddlyLinkExisting");
		btn.tiddlers = tiddlers;
		btn.tiddler = tiddler? tiddler.title: undefined;
		btn.closeAll = closeAll;
		btn.keepMe = keepMe;
	},
	onClick: function(e)
	{
		var exclude = (this.keepMe == "true")? this.tiddler : undefined;
		var tiddlers = this.tiddlers;
		if(this.closeAll == 'true'){
			story.closeAllTiddlers(exclude);
			tiddlers = (this.keepMe == "true")? tiddlers: tiddlers.reverse();
		}
		story.displayTiddlers(this,this.tiddlers);
		return(false);
	}
};
//!END-PLUGIN-CODE
// %/
*[[Microsoft Agent demo|http://home.primus.ca/~ronsharp/clippy.html]] Needs Internet Explorer
*[[The first rave ever|http://home.primus.ca/~ronsharp/firstrave.html]] Lights, music, people dancing in their own worlds. I think I've seen it before somewhere.
*[[Kits and homebrew computers|Hardware]]
*[[My Omniflash embedded Linux box|OmniFlash]]
*[[Simulation of a trolling poster|http://home.primus.ca/~ronsharp/spacebot.html]]
<!--{{{-->
<div id='header'>
</div>
<div id='sidebar'>
<div id='titleLine'></div>
<p class='sidetext'>Navigation</p>
<div id='sidebarOptions' refresh='content' tiddler='MainMenu'></div>
<p class='sidetext'>Featured Articles</p>
<div id='menuEntries' refresh='content' force='true' tiddler='FeaturedArticles'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>
<div id='tiddlerDisplay'></div>
</div>

<!--}}}-->
/***
|<html><a name="Top"/></html>''Name:''|PartTiddlerPlugin|
|''Version:''|1.0.9 (2007-07-14)|
|''Source:''|http://tiddlywiki.abego-software.de/#PartTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.3|
|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|
!Table of Content<html><a name="TOC"/></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Description',null, event)">Description, Syntax</a></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Applications',null, event)">Applications</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('LongTiddler',null, event)">Refering to Paragraphs of a Longer Tiddler</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Citation',null, event)">Citation Index</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('TableCells',null, event)">Creating "multi-line" Table Cells</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Tabs',null, event)">Creating Tabs</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Sliders',null, event)">Using Sliders</a></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Revisions',null, event)">Revision History</a></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Code',null, event)">Code</a></html>
!Description<html><a name="Description"/></html>
With the {{{<part aPartName> ... </part>}}} feature you can structure your tiddler text into separate (named) parts. 
Each part can be referenced as a "normal" tiddler, using the "//tiddlerName//''/''//partName//" syntax (e.g. "About/Features").  E.g. you may create links to the parts (e.g. {{{[[Quotes/BAX95]]}}} or {{{[[Hobbies|AboutMe/Hobbies]]}}}), use it in {{{<<tiddler...>>}}} or {{{<<tabs...>>}}} macros etc.


''Syntax:'' 
|>|''<part'' //partName// [''hidden''] ''>'' //any tiddler content// ''</part>''|
|//partName//|The name of the part. You may reference a part tiddler with the combined tiddler name "//nameOfContainerTidder//''/''//partName//. <<br>>If you use a partName containing spaces you need to quote it (e.g. {{{"Major Overview"}}} or {{{[[Shortcut List]]}}}).|
|''hidden''|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 {{{<<tiddler...>>}}} macro or in a link) the part's content is displayed.|
|<html><i>any&nbsp;tiddler&nbsp;content</i></html>|<html>The content of the part.<br>A part can have any content that a "normal" tiddler may have, e.g. you may use all the formattings and macros defined.</html>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!Applications<html><a name="Applications"/></html>
!!Refering to Paragraphs of a Longer Tiddler<html><a name="LongTiddler"/></html>
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 ''part'' block, give it a nice name, create a "pretty link" (like {{{[[Discussion Groups|Introduction/DiscussionGroups]]}}}) and you are done.

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 {{{<<tiddler...>>}}} macro). Using the ''part'' feature you can first write a "classic" (longer) text that can be read "from top to bottom" and later "reuse" parts of this text for some more "non-linear" reading.

<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!!Citation Index<html><a name="Citation"/></html>
Create a tiddler "Citations" that contains your "citations". 
Wrap every citation with a part and a proper name. 

''Example''
{{{
<part BAX98>Baxter, Ira D. et al: //Clone Detection Using Abstract Syntax Trees.// 
in //Proc. ICSM//, 1998.</part>

<part BEL02>Bellon, Stefan: //Vergleich von Techniken zur Erkennung duplizierten Quellcodes.// 
Thesis, Uni Stuttgart, 2002.</part>

<part DUC99>Ducasse, Stéfane et al: //A Language Independent Approach for Detecting Duplicated Code.// 
in //Proc. ICSM//, 1999.</part>
}}}

You may now "cite" them just by using a pretty link like {{{[[Citations/BAX98]]}}} or even more pretty, like this {{{[[BAX98|Citations/BAX98]]}}}.

<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!!Creating "multi-line" Table Cells<html><a name="TableCells"/></html>
You may have noticed that it is hard to create table cells with "multi-line" content. E.g. if you want to create a bullet list inside a table cell you cannot just write the bullet list
{{{
* Item 1
* Item 2
* Item 3
}}}
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.

Using the ''part'' feature this problem can be solved. Just create a hidden part that contains the cells content and use a {{{<<tiddler >>}}} macro to include its content in the table's cell.

''Example''
{{{
|!Subject|!Items|
|subject1|<<tiddler ./Cell1>>|
|subject2|<<tiddler ./Cell2>>|

<part Cell1 hidden>
* Item 1
* Item 2
* Item 3
</part>
...
}}}

Notice that inside the {{{<<tiddler ...>>}}} macro you may refer to the "current tiddler" using the ".".

BTW: The same approach can be used to create bullet lists with items that contain more than one line.

<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!!Creating Tabs<html><a name="Tabs"/></html>
The build-in {{{<<tabs ...>>}}} macro requires that you defined an additional tiddler for every tab it displays. When you want to have "nested" tabs you need to define a tiddler for the "main tab" 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.

With the ''part'' feature you can put the complete definition in one tiddler, making it easier to keep an overview and maintain the tab sets.

''Example''
The standard tabs at the sidebar are defined by the following eight tiddlers:
* SideBarTabs
* TabAll
* TabMore
* TabMoreMissing
* TabMoreOrphans
* TabMoreShadowed
* TabTags
* TabTimeline

Instead of these eight tiddlers one could define the following SideBarTabs tiddler that uses the ''part'' feature:
{{{
<<tabs txtMainTab 
    Timeline Timeline SideBarTabs/Timeline 
    All 'All tiddlers' SideBarTabs/All 
    Tags 'All tags' SideBarTabs/Tags 
    More 'More lists' SideBarTabs/More>>
<part Timeline hidden><<timeline>></part>
<part All hidden><<list all>></part>
<part Tags hidden><<allTags>></part>
<part More hidden><<tabs txtMoreTab 
    Missing 'Missing tiddlers' SideBarTabs/Missing 
    Orphans 'Orphaned tiddlers' SideBarTabs/Orphans 
    Shadowed 'Shadowed tiddlers' SideBarTabs/Shadowed>></part>
<part Missing hidden><<list missing>></part>
<part Orphans hidden><<list orphans>></part>
<part Shadowed hidden><<list shadowed>></part>
}}}

Notice that you can easily "overwrite" individual parts in separate tiddlers that have the full name of the part.

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 "~SideBarTabs/Timeline" with the following content:
{{{
<<forEachTiddler 
		sortBy 'tiddler.modified' descending 
		write '(index < 100) ? "* [["+tiddler.title+"]]\n":""'>>
}}}
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!!Using Sliders<html><a name="Sliders"/></html>
Very similar to the build-in {{{<<tabs ...>>}}} macro (see above) the {{{<<slider ...>>}}} macro requires that you defined an additional tiddler that holds the content "to be slid". You can avoid creating this extra tiddler by using the ''part'' feature

''Example''
In a tiddler "About" we may use the slider to show some details that are documented in the tiddler's "Details" part.
{{{
...
<<slider chkAboutDetails About/Details details "Click here to see more details">>
<part Details hidden>
To give you a better overview ...
</part>
...
}}}

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 "old" 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 ''part'' approach results in a much short workflow.

<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!Revision history<html><a name="Revisions"/></html>
* v1.0.9 (2007-07-14)
** Bugfix: Error when using the SideBarTabs example and switching between "More" and "Shadow". Thanks to cmari for reporting the issue.
* v1.0.8 (2007-06-16)
** Speeding up display of tiddlers containing multiple pard definitions. Thanks to Paco Rivière for reporting the issue.
** Support "./partName" syntax inside <<tabs ...>> macro
* v1.0.7 (2007-03-07)
** Bugfix: <<tiddler "./partName">> does not always render correctly after a refresh (e.g. like it happens when using the "Include" plugin). Thanks to Morris Gray for reporting the bug.
* v1.0.6 (2006-11-07)
** Bugfix: cannot edit tiddler when UploadPlugin by Bidix is installed. Thanks to José Luis González Castro for reporting the bug.
* v1.0.5 (2006-03-02)
** Bugfix: Example with multi-line table cells does not work in IE6. Thanks to Paulo Soares for reporting the bug.
* v1.0.4 (2006-02-28)
** Bugfix: Shadow tiddlers cannot be edited (in TW 2.0.6). Thanks to Torsten Vanek for reporting the bug.
* v1.0.3 (2006-02-26)
** Adapt code to newly introduced Tiddler.prototype.isReadOnly() function (in TW 2.0.6). Thanks to Paulo Soares for reporting the problem.
* v1.0.2 (2006-02-05)
** Also allow other macros than the "tiddler" macro use the "." in the part reference (to refer to "this" tiddler)
* v1.0.1 (2006-01-27)
** Added Table of Content for plugin documentation. Thanks to RichCarrillo for suggesting.
** Bugfix: newReminder plugin does not work when PartTiddler is installed. Thanks to PauloSoares for reporting.
* v1.0.0 (2006-01-25)
** initial version
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!Code<html><a name="Code"/></html>
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
***/
//{{{
//============================================================================
//                           PartTiddlerPlugin

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



version.extensions.PartTiddlerPlugin = {
    major: 1, minor: 0, revision: 9,
    date: new Date(2007, 6, 14), 
    type: 'plugin',
    source: "http://tiddlywiki.abego-software.de/#PartTiddlerPlugin"
};

if (!window.abego) window.abego = {};
if (version.major < 2) alertAndThrow("PartTiddlerPlugin requires TiddlyWiki 2.0 or newer.");

//============================================================================
// 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 && text.charAt(result.index) == '\n') 
			? result.index+1
			: index;
}


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

var partEndOrStartTagRE = /(<\/part>)|(<part(?:\s+)((?:[^>])+)>)/mg;
var partEndTagREString = "<\\/part>";
var partEndTagString = "</part>";

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

// Parse the parameters inside a <part ...> 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 < params.length) {
		hidden = params[paramsIndex] == "hidden";
		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 "Match" is returned:
// [0]: full match
// [1]: matched "end" tag (or null when no end tag match)
// [2]: matched "start" 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 <part ...> ... </part> 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 && 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: "part",
    match: "<part\\s+[^>]+>",
	
	handler: function(w) {
		if (!handlePartSection(w)) {
			w.outputText(w.output,w.matchStart,w.matchStart+w.matchLength);
		}
	}
} )

//============================================================================
// Extend "fetchTiddler" functionality to also recognize "part"s of tiddlers 
// as tiddlers.

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

// Return the match to the first <part ...> 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 && arguments.partName == partName) {
				return tagMatch;
			}
		}
		i = tagMatch.index+tagMatch[0].length;
	}
}

// Return the part "partName" of the given parentTiddler as a "readOnly" 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 >= 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 "part" addresses.
//
var hijackFetchTiddler = function() {
	var oldFetchTiddler = store.fetchTiddler ;
	store.fetchTiddler = function(title) {
		var result = oldFetchTiddler.apply(this, arguments);
		if (!result && title) {
			var i = title.lastIndexOf('/');
			if (i > 0) {
				var parentName = title.substring(0, i);
				var partName = title.substring(i+1);
				var parent = (parentName == ".") 
						? store.resolveTiddler(currentParent)
						: oldFetchTiddler.apply(this, [parentName]);
				if (parent) {
					return getPart(parent, partName, parent.title+"/"+partName);
				}
			}
		}
		return result;	
	};
};

// for debugging the plugin is not loaded through the systemConfig mechanism but via a script tag. 
// At that point in the "store" 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 = 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)
		{
		clearMessage();
		story.displayTiddler(null,title,DEFAULT_EDIT_TEMPLATE);
		story.focusTiddler(title,"text");
		return false;
		}
}

// To allow the "./partName" syntax in macros we need to hijack 
// the invokeMacro to define the "currentParent" 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 "./partName" syntax while refreshing we need to hijack 
// the config.refreshers.tiddlers to define the "currentParent" while it is running.
// 
(function() {
	var oldTiddlerRefresher= config.refreshers.tiddler;
	config.refreshers.tiddler = function(e,changeList) {
		var oldCurrentParent = currentParent;
		try {
			currentParent = e.getAttribute("tiddler");
			return oldTiddlerRefresher.apply(this,arguments);
		} finally {
			currentParent = oldCurrentParent;
		}
	};
})();

// Support "./partName" syntax inside <<tabs ...>> macro
(function() {
	var extendRelativeNames = function(e, title) {
		var nodes = e.getElementsByTagName("a");
		for(var i=0; i<nodes.length; i++) {
			var node = nodes[i];
			var s = node.getAttribute("content");
			if (s && s.indexOf("./") == 0)
				node.setAttribute("content",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 && evt) {
		var target = resolveTarget(evt);
		tiddlerElem = story.findContainingTiddler(target);
	}
	if (!tiddlerElem) return;

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

} // of "install only once"
//}}}

/***
<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2006 ([[www.abego-software.de|http://www.abego-software.de]])

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.

Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.

<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
***/
<html>
<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/2iy0HMrRcYs"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/2iy0HMrRcYs" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object>
</html>
For some reason Scientology never got around to doing one of their usual defamation pages for Stan March of South Park Colorado. If they had, they it probably would have looked like this:
[img[Stan March is eeeevil!|http://home.primus.ca/~ronsharp/rfwstan.jpg]]

+++[Scientology's defamation site]
The Church of Scientology has always pretended that the "Religious Freedom Watch" web site didn't belong to them but to "concerned parishioner" Joel Phillips. However, when some of their sites were under ~DDoS attack by the initial Anonymous reaction (which was quickly changed to legal protests), Scientology moved that site inside their hired protection of Prolexic—which they couldn't have done unless they controlled the site's registration.
[img[Snapshot of moves to Prolexic, January 31st, 2008|http://i65.photobucket.com/albums/h233/RogerRamdrive/TSnapshot-01-31-08.jpg]]
===
 A church with an intelligence division, private investigators by the score, and a web site devoted to slandering critics. "It's not like any church we know."
<html><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/uRrcUW_Sp3Y&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/uRrcUW_Sp3Y&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></html>
<html><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/zr_ru6iwDd8&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/zr_ru6iwDd8&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></html>
<html>
<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/yO9VV11V1kE&rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/yO9VV11V1kE&rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object>
</html>
<html>
<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/cMgakAozEvI&rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/cMgakAozEvI&rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object>
</html>
//"Enslaving populations for Xemu since 75,000,000 BC"//
[>img[Nan meets Anonymous and approves|http://i260.photobucket.com/albums/ii2/MockerRule/TParty061408/Nan_thumb.jpg]]
I feel that Scientology is an organization that deserves a ''lot'' of criticism. Who wants some?
!!!Local index
{{autocolumns{
<<forEachTiddler
    where
        'tiddler.tags.containsAny(["Scientology"])'
    sortBy 
        'tiddler.title.toUpperCase()'
    
    script
        '
        function getGroupCaption(tiddler) {
            return tiddler.title.substr(0,1).toUpperCase();
        } 

        function getGroupTitle(tiddler, context) {
            if (!context.lastGroup || context.lastGroup != getGroupCaption(tiddler)) {
                context.lastGroup = getGroupCaption(tiddler); 
                return "!!"+(context.lastGroup?context.lastGroup:"no tags")+"\n";
            } else 
                return "";
        }
        '
    
    write
         'getGroupTitle(tiddler, context)+"* [[" + tiddler.title+"]]\n"'
>>
}}}
!!!External links
{{threecolumns{
*[[Archive of Scientology's "big somewhere else" news ticker stories|http://home.primus.ca/~ronsharp/nooze1.html]]
*[[Flat HTML version of FrontCite archive of news stories involving Scientology|http://home.primus.ca/~ronsharp/frontcite.html]]
*[[FrontCite Wiki archive of news stories involving Scientology|http://home.primus.ca/~ronsharp/frontcitetw.html]]
*[[Google maps of CoS locations (mainly LA)|http://maps.google.ca/maps/ms?hl=en&ie=UTF8&msa=0&msid=102299121563303882298.00000111cd82f3e3f0241&t=h&z=4]]
*[[Google maps of CoS radio licenses|http://maps.google.ca/maps/ms?hl=en&ie=UTF8&msa=0&msid=102299121563303882298.000455620139824c4cd63&t=h&z=7]]
*[[L. Ron Hubbard speaks his actual words of wisdom!|http://home.primus.ca/~ronsharp/XenuAgent/hub_eyes.html]]
*[[PylonReader|http://home.primus.ca/~ronsharp/PylonReader.html]] a prototype TiddlyWiki front end for Google Groups RSS with ~BanHammer.
*[[Seven day report of noise and spam to the alt.religion.scientology Usenet newsgroup|http://home.primus.ca/~ronsharp/circlejerk.html]]
}}}
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/Hkl-gNiRCWs"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/Hkl-gNiRCWs" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/0i2TqG4WZPk"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/0i2TqG4WZPk" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/bWdLPYQ36Rg"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/bWdLPYQ36Rg" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
<html>
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/ksDoVUTy1go"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/ksDoVUTy1go" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>
</html>
The Secret Life of L. Ron Hubbard   Channel 4, 1997, UK ( in 5 parts )
"If a man really wants to make a million dollars, the best way would be to start his own religion", a quote of L. Ron Hubbard, the founder of the scifi Scientology cult.

Despite legal threats and harassment from Scientology, Channel 4 refused to pull this film, insisting it was based on factual material and interviews with people who had known Mr. Hubbard very well.
<html>
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/Vj2iFFmqP4U"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/Vj2iFFmqP4U" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>
</html>
<html>
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/9RLteeyMlgk"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/9RLteeyMlgk" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>
</html>
<html>
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/hmziDR3f4PA"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/hmziDR3f4PA" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>
</html>
<html>
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/mg0JaGc-ego"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/mg0JaGc-ego" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>
</html>
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/WQk_NKn3Lrc"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/WQk_NKn3Lrc" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
*These videos were removed from YouTube by a fraudulent DMCA claim by a Scientologist. 
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/eQBhFtZeNzk"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/eQBhFtZeNzk" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
*These videos were removed from YouTube by a fraudulent DMCA claim by a Scientologist. 
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/303KXUUwFk0"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/303KXUUwFk0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
*These videos were removed from YouTube by a fraudulent DMCA claim by a Scientologist.
''<<openTiddlers text:Home tiddlers:{{store.getTiddlerText("DefaultTiddlers")}} closeAll:true>>
[[Wiki Markup]]
[[Articles A-Z]]
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>
/***
|Name|SimpleMessagePlugin|
|Version|0.1|
|Author|Michael Mahemoff, Osmosoft|
|''License:''|[[BSD open source license]]|
|~CoreVersion|2.2|
***/

/*{{{*/
(function() {
if(!version.extensions.SimpleMessagePlugin) {

  version.extensions.SimpleMessagePlugin = {installed:true};
  version.extensions.SimpleMessagePlugin.delay = 10000;
  
  var timer;

  var _displayMessage = displayMessage;
  displayMessage = function() {
    if (timer) {
      timer=null;
      clearTimeout(timer);
    }
    timer = setTimeout(clearMessage, version.extensions.SimpleMessagePlugin.delay);
    _displayMessage.apply(this, arguments);
  }

  var _clearMessage = clearMessage;
  clearMessage = function() {
    clearTimeout(timer);
    return _clearMessage.apply(this, arguments);
  }

} // end of 'install only once'
})();
/*}}}*/
Thoughts and Stuff
AndroidCat
http://home.primus.ca/~ronsharp/
!!!Less than serious software for your Windows
|[<img[Firewall Kazowie|http://home.primus.ca/~ronsharp/tmKazowie.jpg]]|When the Internet becomes a battleground, you need cool sound effects! Firewall Kazowie (1.2M) (needs updating for latest Zone Alarm version)|
|[<img[Namer|http://home.primus.ca/~ronsharp/tmNamer.jpg]]|Need names for those D&D characters, movies, rock bands, secret Special Operations , or hax0r handles? Namer will generate them. (Speech supported if installed.) Has server modes.|
/***

''Inspired by [[TiddlyPom|http://www.warwick.ac.uk/~tuspam/tiddlypom.html]]''

|Name|SplashScreenPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#SplashScreenPlugin|
|Version|0.21 |
|Requires|~TW2.08+|
!Description:
Provides a simple splash screen that is visible while the TW is loading.

!Installation
Copy the source text of this tiddler to your TW in a new tiddler, tag it with systemConfig and save and reload. The SplashScreen will now be installed and will be visible the next time you reload your TW.

!Customizing
Once the SplashScreen has been installed and you have reloaded your TW, the splash screen html will be present in the MarkupPreHead tiddler. You can edit it and customize to your needs.

!History
* 20-07-06 : version 0.21, modified to hide contentWrapper while SplashScreen is displayed.
* 26-06-06 : version 0.2, first release

!Code
***/
//{{{
var old_lewcid_splash_restart=restart;

restart = function()
{   if (document.getElementById("SplashScreen"))
        document.getElementById("SplashScreen").style.display = "none";
      if (document.getElementById("contentWrapper"))
        document.getElementById("contentWrapper").style.display = "block";
    
    old_lewcid_splash_restart();
   
    if (splashScreenInstall)
       {if(config.options.chkAutoSave)
			{saveChanges();}
        displayMessage("TW SplashScreen has been installed, please save and refresh your TW.");
        }
}


var oldText = store.getTiddlerText("MarkupPreHead");
if (oldText.indexOf("SplashScreen")==-1)
   {var siteTitle = store.getTiddlerText("SiteTitle");
   var splasher='\n\n<style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>'+siteTitle +'</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>';
   if (! store.tiddlerExists("MarkupPreHead"))
       {var myTiddler = store.createTiddler("MarkupPreHead");}
   else
      {var myTiddler = store.getTiddler("MarkupPreHead");}
      myTiddler.set(myTiddler.title,oldText+splasher,config.options.txtUserName,null,null);
      store.setDirty(true);
      var splashScreenInstall = true;
}
//}}}
/***
http://tiddlystyles.com/#theme:TiddlyPedia
Modifications by Dennis: http://flx.me
***/
/*{{{*/
body{
 background: #f9f9f9 url(data:image/jpeg;base64,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) no-repeat top left;
}

#titleLine{
 display: block;
 background: transparent url(http://home.primus.ca/~ronsharp/ux.jpg) no-repeat 18px 0px;
 _background: transparent;
 height: 128px;
 _height: 140px;
 width: 150px;
 color: #000;
 border: 1px;
 padding: 0;
 margin: 0;
}

* html #titleLine{
 filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='data:image/png;base64,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',sizingMethod='scale');
}

#contentWrapper #siteTitle a{
 display: inline;
 font-weight: bold;
 color: #000;
 font-size: 13px;
}

#siteSubtitle{
 padding: 0;
}

#siteTitle, #mainMenu{
 position: static;
}

#contentWrapper #sidebar{
 top: 0;
 left: 0;
}

#displayArea {
 margin: 0 0 0 15em;
}

a.button#backstageShow {
 background: #000;
}

#messageArea{
 position: fixed;
 padding-top: 3px;
 height: 10px;
 top: -5px;
 right: 80px;
 font-size: 10px;
 border: 1px solid #FFF;
 background: #FFEE88;
 z-index: 25;
 color: #000;
 text-decoration: none;
}

#messageArea a:link{
 text-decoration: none;
}

#messageArea a:hover{
 text-decoration: none;
}

.viewer{
 background: #fff;
 border: 1px solid #aaa;
 padding: 1em;
margin: 0;
}

.body{
 padding: 1px;
}

.title{
 background: #fff;
 border: 1px solid #aaa;
 display: inline;
 margin-left: .5em;
 padding: 2px .5em;
 border-bottom: 0;
 font-weight: bold;
 color: #000;
 font-size: 1.2em;
}

.toolbar{
 visibility: visible;
 display: inline;
 padding: 0;
 font-family: sans-serif;
}

.toolbar a.button:link,.toolbar a.button:visited{
 background: #fff;
 border: 1px solid #aaa;
 color:#002bb8;
 font-size: 11px;
 padding-bottom: 0;
 margin-right: .25em;
}

/* TiddlyPedia was Created by Clinton Checketts based on the Monobook skin of Wikipedia */

#contentWrapper .toolbar .button:hover{
 border-bottom: 1px solid #fff;
 background: #fff;
 color:#002bb8;
}

.toolbar a.button:hover{
 border-bottom: 1px solid #fff;
 background: #fff;
 color:#000;
}

#displayArea .viewer a,a.button:link,a.button:visited,
a.tiddlyLink:link,a.tiddlyLink:visited,
#sidebarOptions .sliderPanel a{
 color:#002bb8;
 background: transparent;
 border: 0;
}

.viewer a:hover,a.button:hover,a.button:active,
a.tiddlyLink:hover,a.tiddlyLink:active,
.viewer a.button:hover,
#sidebarOptions .sliderPanel a:hover{
 color:#002bb8;
 background: transparent;
 text-decoration: underline;
}

#mainMenu{
 font-family: sans-serif;
 text-align: left;
 font-size: x-small;
 width: 100%;
 margin: 0;
 padding: 0;
}

#mainMenu h1{
 font-size: 11px;
 font-weight: normal;
 padding: 0;
 margin: 0;
 background: transparent;
}

#mainMenu ul{
 font-size: 11px;
 border: 1px solid #aaa;
 padding: .25em 0;
 margin: 0;
 list-style-type: square;
 list-style-image: url(bullet.gif);
 background: #fff;
 width: 100%;
}

#mainMenu li{
 margin: 0 0 0 2em;
 padding: 0;
}

#contentWrapper #mainMenu a:link,#contentWrapper #mainMenu a:visited{
 color:#002bb8;
 padding: 0;
 margin: 0;
 background: transparent;
}

#mainMenu .externalLink {
 text-decoration: none;
}

#mainMenu .externalLink:hover {
 text-decoration: underline;
}

#sidebar{
 padding: .5em;
 font-family: sans-serif;
}

#sidebarOptions{
 border: 1px solid #aaa;
 background: #fff;
 padding-top: 8px;
 padding-bottom: 4px;
 width: 100%;
}

#menuEntries{
 border: 1px solid #aaa;
 background: #fff;
 padding-top: 6px;
 padding-bottom: 12px;
 padding-left: 13px;
 width: 160px;
}

p.sidetext{
 margin: 6px 0 0 0;
 padding-left: 13px;
}

#menuEntries ul{
 list-style-type: none;
 padding-left: 0px;
 margin-top: 0px;
 margin-bottom: -5px;
}

#menuEntries li{
 margin-top: 2px;
}

#contentWrapper #menuEntries a,#contentWrapper #menuEntries a:hover{
 color:#002bb8;
 padding: .1em 0 .1em 2em;
 margin-left: -10px;
 font-weight:normal;
 background: transparent url(data:image/gif;base64,R0lGODlhBQANAIAAAGOMnP///yH5BAEAAAEALAAAAAAFAA0AAAIJjI+pu+APo4SpADs%3D) 10px -2px no-repeat;
}

#contentWrapper #sidebarOptions a,#contentWrapper #sidebarOptions a:hover{
 color:#002bb8;
 font-weight:normal;
 padding: .1em 0 .1em 2em;
 background: transparent url(data:image/gif;base64,R0lGODlhBQANAIAAAGOMnP///yH5BAEAAAEALAAAAAAFAA0AAAIJjI+pu+APo4SpADs%3D) 10px -2px no-repeat;
}

#sidebar .sliderPanel{
 margin: 0;
}

#contentWrapper #sidebarOptions .button,#contentWrapper #sidebarOptions .button:hover{
 color:#002bb8;
 padding: .1em 0 .1em 2em;
 background: transparent url(data:image/gif;base64,R0lGODlhBQANAIAAAGOMnP///yH5BAEAAAEALAAAAAAFAA0AAAIJjI+pu+APo4SpADs%3D) 10px -2px no-repeat;
}

#sidebarOptions input{
 width: 89%;
 margin: 0 .5em;
 margin-bottom: 5px;
 padding-left: 3px;
}

#contentWrapper #sidebarTabs .tiddlyLink,#contentWrapper #sidebarTabs .button,
#contentWrapper #sidebarTabs a.tiddlyLink:hover,#contentWrapper #sidebarTabs a.button:hover{
 background: transparent;
 color: #002bb8;
}

.footer{
 margin: -1em 0 1em 0; 
}

.footer .button:hover,.editorFooter .button:hover{
background: transparent;
 color: #002bb8;
 border-bottom: 1px solid #002bb8;
}

#popup{
 background: #e9e9e9;
 color: #000;
}

#popup hr{
 border-color: #aaa;
 background-color: #aaa;
}

#popup a{
 color: #000;
}

#popup a:hover,#contentWrapper #sidebarTabs #popup a:hover{
 background: #666;
 color: #fff;
 text-decoration: none;
}

.tabset{
 background: #aaa;
 border: 1px solid #aaa;
 border-bottom: 0;
 padding: 2px 0 2px 3px;
 cursor: default;
 color: #000;
}

#tabset .tabSelected {
 background: #FFF;
 border: 1px solid #aaa;
 border-bottom: 0;
 cursor: default;
 padding-bottom: 3px;
 color: #000;
}

#displayArea .tiddler a.tiddlyLinkNonExisting{
 color: #ba0000;
}

#displayArea .tiddler a.externalLink{
 text-decoration: none;
 color:#002bb8;
 padding-right: 1em;
 background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAFVBMVEVmmcwzmcyZzP8AZswAZv////////9E6giVAAAAB3RSTlP///////8AGksDRgAAADhJREFUGFcly0ESAEAEA0Ei6/9P3sEcVB8kmrwFyni0bOeyyDpy9JTLEaOhQq7Ongf5FeMhHS/4AVnsAZubxDVmAAAAAElFTkSuQmCC) 100% 50% no-repeat;
}

#displayArea .tiddler a.externalLink:hover{
 text-decoration: underline;
}

.viewer pre{
 background: #e9e9e9;
 border: 1px solid #666;
}

.viewer h1{
 background: transparent;
 font-size: 19pt;
 padding-bottom: 7px;
 border-bottom: 1px solid #aaa;
}

.viewer h2, .viewer h3{
 background: transparent;
 border-bottom: 1px solid #aaa;
 margin-bottom: 0px;
}

.viewer h4, .viewer h5, .viewer h6{
 background: transparent;
 border-style: none;
 margin-bottom: 0px;
}

#sidebar .sliderPanel{
 background: #e9e9e9;
}

#sidebar .sliderPanel input{width: auto;}

.tagged, .tagging, .listTitle{
 float: none;
 display: inline;
}

.tagged li, .tagging li,
.tagged ul, .tagging ul{
 display: inline;
}

.dcTOC ul {
    padding-top: 0px;
	color:black;
	list-style-type: disc;
}

.dcTOC ul ul {
	color:black;
	list-style-type: circle;
}

.dcTOC ul ul ul {
	color:black;
	list-style-type: disc;
}

.dcTOC a {
	color: #1d65bc;
}

.dcTOCTop {
	font-size: 2em;
	color: green;
}

.dcTOCTop a{
	font-size: 2em;
	color: #EEE;
}

.dcTOCToc {
	padding: 3px 0 0 50px;
    font-size: 13px;
	font-weight: bold; 
	color: black;
}

.dcTOC {
	width: 20%;
	padding-left: 15px;
	border: 1px solid #CCCCCC;
	background-color: #EEE;
}

.dcTOC ol {
	margin: 0 1em;
}

#sidebarTabs{
 background: #fff;
 margin-top: .5em;
 width: 100%;
}

#sidebarTabs .tabContents,#sidebarTabs .tabContents .tabContents{
 border: 1px solid #aaa;
 background: #fff;
}

#sidebarTabs .tabSelected,#sidebarTabs .tabcontents .tabSelected {
 background: #fff;
 border: 1px solid #aaa;
 border-bottom: 0;
 cursor: default;
 padding-bottom: 3px;
 color: #000;
}

#sidebarTabs .tabUnselected,#sidebarTabs .tabContents .tabUnselected{
 background: #aaa;
 padding-bottom: 0;
 color: #000; 
}

#tiddlersBar {margin:1em 0 0 1em;z-index:10;}
#tiddlerDisplay{margin-top:-1.1em;z-index:0;}
.toolbar {clear:both; float:right;margin-top:0.8em;}
.toolbar a.button{border:1px solid transparent !important;}
.toolbar a.button:hover {border:1px solid #EEEEEE;}
a#backstageShow.button {background:#000;}
a#backstageShow.button:hover {color:#666;}
.tagging, .tagged {background:none;border:0;}
.selected .tagging, .selected .tagged {background:none;border:0;}
#contentWrapper .toolbar .tagged .button {background-color:transparent;}
.fieldsetFix {width:100%;}
.editor textarea,.editor input {width:80%;}

#tab .tabUnselected{
background: #fff;
}

h1,h2,h3 {padding-bottom:1px; margin-top:0.5em;margin-bottom:0.2em;}
h4,h5,h6 {margin-top:0.5em;}

.tiddlyLinkExisting {font-weight:normal;}

.twocolumns { display:block; column-count:2; -moz-column-count:2; -webkit-column-count:2; column-gap:1em; column-width:50%; -moz-column-width:50%; -webkit-column-width:50%;}
.threecolumns { display:block; column-count:3; -moz-column-count:3; -webkit-column-count:3; column-gap:1em; column-width:33%; -moz-column-width:33%; -webkit-column-width:33%;}
.fourcolumns { display:block; column-count:4; -moz-column-count:4; -webkit-column-count:4; column-gap:1em; column-width:25%; -moz-column-width:25%; -webkit-column-width:25%;}
.autocolumns { display:block; column-count:auto; -moz-column-count:auto; -webkit-column-count:auto; column-gap:1em; column-width:275px; -moz-column-width:275px; -webkit-column-width:275px;}

/*}}}*/
/*{{{*/
#tiddlersBar .button {border:0}
#tiddlersBar .tab {white-space:nowrap}
#tiddlersBar {padding : 1em 0.5em 2px 0.5em}
.tabUnselected .tabButton, .tabSelected .tabButton {padding : 0 2px 0 2px; margin: 0 0 0 4px;}
.tabUnselected{background: #EEE; border: 1px solid #CCC; border-bottom: 0;}
.tabSelected{background: #FFF; border: 1px solid #CCC; border-bottom: 0;}
.tiddler, .tabContents {border: 0;}
/*}}}*/
/***
|Name|TableOfContentsPlugin-mod|
|Author|[[Doug Compton|http://www.zagware.com/tw/plugins.html#DcTableOfContentsPlugin]]|
|Contributors|[[Lewcid|http://lewcid.org]], [[FND|http://devpad.tiddlyspot.com]], [[ELS|http://www.tiddlytools.com]], [[FLX|http://flx.me]]|
|Source|[[FND's DevPad|http://devpad.tiddlyspot.com#DcTableOfContentsPlugin]]|
|Version|0.0.1|
|~CoreVersion|2.2|
<<showtoc>>
!Description
This macro will insert a table of contents reflecting the headings that are used in a tiddler and will be automatically updated when you make changes.  Each item in the table of contents can be clicked on to jump to that heading.  It can be used either inside of select tiddlers or inside a system wide template.

A parameter can be used to show the table of contents of a seperate tiddler, &lt;<showtoc tiddlerTitle>&gt;

It will also place a link beside each header which will jump the screen to the top of the current tiddler.  This will only be displayed if the current tiddler is using the &lt;<showtoc>&gt; macro.

The appearance of the table of contents and the link to jump to the top can be modified using CSS.  An example of this is given below.

!Usage
!!Only in select tiddlers
The table of contents above is an example of how to use this macro in a tiddler.  Just insert &lt;<showtoc>&gt; in a tiddler on a line by itself.

It can also display the table of contents of another tiddler by using the macro with a parameter, &lt;<showtoc tiddlerTitle>&gt;
!!On every tiddler
It can also be used in a template to have it show on every tiddler.  An example ViewTemplate is shown below.

//{{{
<div class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'>Created <span macro='view created date DD-MM-YY'></span>, updated <span macro='view modified date DD-MM-YY'></span></div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class="toc" macro='showtoc'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
//}}}

!Examples
If you had a tiddler with the following headings:
{{{
!Heading1a
!!Heading2a
!!Heading2b
!!!Heading3
!Heading1b
}}}
this table of contents would be automatically generated:
* Heading1a
** Heading2a
** Heading2b
*** Heading3
* Heading1b
!Changing how it looks
To modifiy the appearance, you can use CSS similiar to the below.
//{{{
.dcTOC ul {
	color: red;
	list-style-type: lower-roman;
}
.dcTOC a {
	color: green;
	border: none;
}

.dcTOC a:hover {
	background: white;
	border: solid 1px;
}
.dcTOCTop {
	font-size: 2em;
	color: green;
}
//}}}

!Revision History
!!v0.1.0 (2006-04-07)
* initial release
!!v0.2.0 (2006-04-10)
* added the [top] link on headings to jump to the top of the current tiddler
* appearance can now be customized using CSS
* all event handlers now return false
!!v0.3.0 (2006-04-12)
* added the ability to show the table of contents of a seperate tiddler
* fixed an error when a heading had a ~WikiLink in it
!!v0.3.5 (2007-10-16)
* updated formatter object for compatibility with TiddlyWiki v2.2 (by Lewcid)
!!v0.4.0 (2007-11-14)
* added toggle button for collapsing/expanding table of contents element
* refactored documentation
!To Do
* code sanitizing/rewrite
* documentation refactoring
* use shadow tiddler for styles
!Code
***/
//{{{

version.extensions.DcTableOfContentsPlugin= {
	major: 0, minor: 4, revision: 0,
	type: "macro",
	source: "http://devpad.tiddlyspot.com#DcTableOfContentsPlugin"
};

// Replace heading formatter with our own
for (var n=0; n<config.formatters.length; n++) {
	var format = config.formatters[n];
	if (format.name == 'heading') {
		format.handler = function(w) {
			// following two lines is the default handler
			var e = createTiddlyElement(w.output, "h" + w.matchLength);
			w.subWikifyTerm(e, this.termRegExp); //updated for TW 2.2+

			// Only show [top] if current tiddler is using showtoc
			if (w.tiddler && w.tiddler.isTOCInTiddler == 1) {
				// Create a container for the default CSS values
				var c = createTiddlyElement(e, "div");
				c.setAttribute("style", "font-size: 0.5em; display: none;");
				// Create the link to jump to the top
				createTiddlyButton(c, " [top]", "Go to top of tiddler", window.scrollToTop, "dcTOCTop", null, null);
			}
		}
		break;
	}
}

config.macros.showtoc = {
	handler: function(place, macroName, params, wikifier, paramString, tiddler) {
		var text = "";
		var title = "";
		var myTiddler = null;

		// Did they pass in a tiddler?
		if (params.length) {
			title = params[0];
			myTiddler = store.getTiddler(title);
		} else {
			myTiddler = tiddler;
		}

		if (myTiddler == null) {
			wikify("ERROR: Could not find " + title, place);
			return;
		}

		var lines = myTiddler .text.split("\n");
		myTiddler.isTOCInTiddler = 1;

		// Create a parent container so the TOC can be customized using CSS
		var r = createTiddlyElement(place, "div", null, "dcTOC");
		// create toggle button
		//createTiddlyButton(r, "toggle", "show/collapse table of contents",
		//	function() { config.macros.showtoc.toggleElement(this.nextSibling); },
		//	"toggleButton")
		// Create a container so the TOC can be customized using CSS
		var c = createTiddlyElement(r, "div");
                createTiddlyElement(c, "div", null, "dcTOCToc", "Table of Contents");



		if (lines != null) {
			for (var x=0; x<lines.length; x++) {
				var line = lines[x];
				if (line.substr(0,1) == "!") {
					// Find first non ! char
					for (var i=0; i<line.length; i++) {
						if (line.substr(i, 1) != "!") {
							break;
						}
					}
					var desc = line.substring(i);
					// Remove WikiLinks
					desc = desc.replace(/\[\[/g, "");
					desc = desc.replace(/\]\]/g, "");

					text += line.substr(0, i).replace(/[!]/g, '*');
					text += '<html><a href="javascript:;" onClick="window.scrollToHeading(\'' + title + '\', \'' + desc+ '\', event)">' + desc+ '</a></html>\n';
				}
			}
		}
		wikify(text, c);
	}
}

config.macros.showtoc.toggleElement = function(e) {
	if(e) {
		if(e.style.display != "none") {
			e.style.display = "none";
		} else {
			e.style.display = "";
		}
	}
};

window.scrollToTop = function(evt) {
	if (! evt)
		var evt = window.event;

	var target = resolveTarget(evt);
	var tiddler = story.findContainingTiddler(target);

	if (! tiddler)
		return false;

	window.scrollTo(0, ensureVisible(tiddler));

	return false;
};

window.scrollToHeading = function(title, anchorName, evt) {
	var tiddler = null;

	if (! evt)
		var evt = window.event;

	if (title) {
		story.displayTiddler(store.getTiddler(title), title, null, false);
		tiddler = document.getElementById(story.idPrefix + title);
	} else {
		var target = resolveTarget(evt);
		tiddler = story.findContainingTiddler(target);
	}

	if (tiddler == null)
		return false;
	
	var children1 = tiddler.getElementsByTagName("h1");
	var children2 = tiddler.getElementsByTagName("h2");
	var children3 = tiddler.getElementsByTagName("h3");
	var children4 = tiddler.getElementsByTagName("h4");
	var children5 = tiddler.getElementsByTagName("h5");

	var children = new Array();
	children = children.concat(children1, children2, children3, children4, children5);

	for (var i = 0; i < children.length; i++) {
		for (var j = 0; j < children[i].length; j++) {
			var heading = children[i][j].innerHTML;

			// Remove all HTML tags
			while (heading.indexOf("<") >= 0) {
				heading = heading.substring(0, heading.indexOf("<")) + heading.substring(heading.indexOf(">") + 1);
			}

			// Cut off the code added in showtoc for TOP
			heading = heading.substr(0, heading.length-6);

			if (heading == anchorName) {
				var y = findPosY(children[i][j]);
				window.scrollTo(0,y);
				return false;
			}
		}
	}
	return false
};
//}}}
/***
|''Name:''|TableSortingPlugin|
|''Description:''|Dynamically sort tables by clicking on column headers|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#TableSortingPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.02|
|''Date:''|25-01-2008|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.3|
!!Usage:
* Make sure your table has a header row
** {{{|Name|Phone Number|Address|h}}}<br> Note the /h/ that denote a header row 
* Give the table a class of 'sortable'
** {{{
|sortable|k
|Name|Phone Number|Address|h
}}}<br>Note the /k/ that denotes a class name being assigned to the table.
* To disallow sorting by a column, place {{{<<nosort>>}}} in it's header
* To automatically sort a table by a column, place {{{<<autosort>>}}} in the header for that column
** Or to sort automatically but in reverse order, use {{{<<autosort reverse>>}}}

!!Example:
|sortable|k
|Name |Salary |Extension |Performance |File Size |Start date |h
|ZBloggs, Fred |$12000.00 |1353 |+1.2 |74.2Kb |Aug 19, 2003 21:34:00 |
|ABloggs, Fred |$12000.00 |1353 |1.2 |3350b |09/18/2003 |
|CBloggs, Fred |$12000 |1353 |1.200 |55.2Kb |August 18, 2003 |
|DBloggs, Fred |$12000.00 |1353 |1.2 |2100b |07/18/2003 |
|Bloggs, Fred |$12000.00 |1353 |01.20 |6.156Mb |08/17/2003 05:43 |
|Turvey, Kevin |$191200.00 |2342 |-33 |1b |02/05/1979 |
|Mbogo, Arnold |$32010.12 |2755 |-21.673 |1.2Gb |09/08/1998 |
|Shakespeare, Bill |£122000.00|3211 |6 |33.22Gb |12/11/1961 |
|Shakespeare, Hamlet |£9000 |9005 |-8 |3Gb |01/01/2002 |
|Fitz, Marvin |€3300.30 |5554 |+5 |4Kb |05/22/1995 |

***/
// /%
//!BEGIN-PLUGIN-CODE
config.tableSorting = {
	
	darrow: "\u2193",
	
	uarrow: "\u2191",
	
	getText : function (o) {
		var p = o.cells[SORT_INDEX];
		return p.innerText || p.textContent || '';
	},
	
	sortTable : function (o,rev) {
		SORT_INDEX = o.getAttribute("index");
		var c = config.tableSorting;
		var T = findRelated(o.parentNode,"TABLE");
		if(T.tBodies[0].rows.length<=1) 
			return;
		var itm = "";
		var i = 0;
		while (itm == "" && i < T.tBodies[0].rows.length) {
			itm = c.getText(T.tBodies[0].rows[i]).trim();
			i++;
		}
		if (itm == "") 
			return; 	
		var r = [];
		var S = o.getElementsByTagName("span")[0];		
		c.fn = c.sortAlpha; 
		if(!isNaN(Date.parse(itm)))
			c.fn = c.sortDate; 
		else if(itm.match(/^[$|£|€|\+|\-]{0,1}\d*\.{0,1}\d+$/)) 
			c.fn = c.sortNumber; 
		else if(itm.match(/^\d*\.{0,1}\d+[K|M|G]{0,1}b$/)) 
			c.fn = c.sortFile; 
		for(i=0; i<T.tBodies[0].rows.length; i++) {
			 r[i]=T.tBodies[0].rows[i]; 
		} 
		r.sort(c.reSort);
		if(S.firstChild.nodeValue==c.darrow || rev) {
			r.reverse();
			S.firstChild.nodeValue=c.uarrow;
		} 
		else 
			S.firstChild.nodeValue=c.darrow;
		var thead = T.getElementsByTagName('thead')[0]; 
		var headers = thead.rows[thead.rows.length-1].cells;
		for(var k=0; k<headers.length; k++) {
			if(!hasClass(headers[k],"nosort"))
				addClass(headers[k].getElementsByTagName("span")[0],"hidden");
		}
		removeClass(S,"hidden");
		for(i=0; i<r.length; i++) { 
			T.tBodies[0].appendChild(r[i]);
			c.stripe(r[i],i);
			for(var j=0; j<r[i].cells.length;j++){
				removeClass(r[i].cells[j],"sortedCol");
			}
			addClass(r[i].cells[SORT_INDEX],"sortedCol");
		}
	},
	
	stripe : function (e,i){
		var cl = ["oddRow","evenRow"];
		i&1? cl.reverse() : cl;
		removeClass(e,cl[1]);
		addClass(e,cl[0]);
	},
	
	sortNumber : function(v) {
		var x = parseFloat(this.getText(v).replace(/[^0-9.-]/g,''));
		return isNaN(x)? 0: x;
	},
	
	sortDate : function(v) {
		return Date.parse(this.getText(v));
	},

	sortAlpha : function(v) {
		return this.getText(v).toLowerCase();
	},
	
	sortFile : function(v) { 		
		var j, q = config.messages.sizeTemplates, s = this.getText(v);
		for (var i=0; i<q.length; i++) {
			if ((j = s.toLowerCase().indexOf(q[i].template.replace("%0\u00a0","").toLowerCase())) != -1)
				return q[i].unit * s.substr(0,j);
		}
		return parseFloat(s);
	},
	
	reSort : function(a,b){
		var c = config.tableSorting;
		var aa = c.fn(a);
		var bb = c.fn(b);
		return ((aa==bb)? 0 : ((aa<bb)? -1:1));
	}
};

Story.prototype.tSort_refreshTiddler = Story.prototype.refreshTiddler;
Story.prototype.refreshTiddler = function(title,template,force,customFields,defaultText){
	var elem = this.tSort_refreshTiddler.apply(this,arguments);
	if(elem){
		var tables = elem.getElementsByTagName("TABLE");
		var c = config.tableSorting;
		for(var i=0; i<tables.length; i++){
			if(hasClass(tables[i],"sortable")){
				var x = null, rev, table = tables[i], thead = table.getElementsByTagName('thead')[0], headers = thead.rows[thead.rows.length-1].cells;
				for (var j=0; j<headers.length; j++){
					var h = headers[j];
					if (hasClass(h,"nosort"))
						continue;
					h.setAttribute("index",j);
					h.onclick = function(){c.sortTable(this); return false;};
					h.ondblclick = stopEvent;
					if(h.getElementsByTagName("span").length == 0)
						createTiddlyElement(h,"span",null,"hidden",c.uarrow); 
					if(!x && hasClass(h,"autosort")) {
						x = j;
						rev = hasClass(h,"reverse");
					}
				}
				if(x)
					c.sortTable(headers[x],rev);		
			}
		}
	}
	return elem; 
};

setStylesheet("table.sortable span.hidden {visibility:hidden;}\n"+
	"table.sortable thead {cursor:pointer;}\n"+
	"table.sortable .nosort {cursor:default;}\n"+
	"table.sortable td.sortedCol {background:#ffc;}","TableSortingPluginStyles");

function stopEvent(e){
	var ev = e? e : window.event;
	ev.cancelBubble = true;
	if (ev.stopPropagation) ev.stopPropagation();
	return false;	
}	

config.macros.nosort={
	handler : function(place){
		addClass(place,"nosort");
	}	
};

config.macros.autosort={
	handler : function(place,m,p,w,pS){
		addClass(place,"autosort"+" "+pS);		
	}	
};
//!END-PLUGIN-CODE
// %/
@@This is not an actual planning document, just speculation based on observation.@@
!!!Definition
*Team of editors on Wikipedia from the Church of Scientology under a variety of names, identities, sock-puppets.
**User names might be shared among multiple editors.
**Frequently from ~CoS IP blocks (which are ''only'' used to edit Scientology articles) or open proxies, easily detected.
***Strange, since ~CoS can afford a few outside AOL accounts.
*Players from other teams, like ~TeamInfinite, seconded to the roster now and then.
*Critical viewpoints are labeled as @@anti-scientology@@ and that's defined as ''anything'' that doesn't reflect the official position and plus-good truth from the Church of Scientology.
!!!Agenda
*Restructure articles:
**[[Standard CoS template for the main article|http://en.citizendium.org/wiki/Talk:Church_of_Scientology#TOC_proposal]].
**Remove links to all:
***Critical web sites as anti-scientology, attack sites, hate sites, anti-scientology hate attack sites, etc.
***Critical books: They're by hack writers or disgruntled ex-members with criminal records.
***After the links have been gone for a period, remove refs.
***After the refs have been gone for a period, remove the text as unreferenced.
**Add links (if possible):
***~CoS sites, especially as refs in the introduction, to push down any critical refs.
***~CoS front groups.
***Papers by commissioned or invented scholars, religious types.
***Friendly books.
***Press releases cloaked as news articles.
***Copies of ~CoS text on other sites. (Ontario Consultants, etc.)
**Destroy controversy:
###Move all controversy out of the intro.
###Concentrate it into a ghetto at the end of the article.
###After cleansing the rest of the article, demand equal time in the controversy section for NPOV balance.
###Push the collected ghetto out to a sub-article, possibly arranging them to be [["lost in transit"|http://en.wikipedia.org/wiki/Talk:Scientology/Archive_23#Lost_in_transit]].
###Later see if the sub-article can be deleted. (As was previously done, involving Jossi on [[Prem Rawat|http://www.theregister.co.uk/2008/02/06/the_cult_of_wikipedia/page4.html]].)
*Depreciate critical refs:
**Major newspapers are @@tabloids@@.
**Award winning articles are by hack journalists with an axe to grind. Biased haters on drug money.
**One ref on a subject isn't notable enough.
**Many refs on a subject are ~POV-pushing and undue weight.
**All books by ex-members are COI primary sources, and must be removed.
*Favorable scholars' papers and books should be promoted above all else:
**Because all eight of them are the scientific mainstream.
**Ignore that their books aren't reviewed/fact-checked more than superficially.
**Ignore that many of the papers were presented at fan conventions like CESNUR.
***Ignore the TBA references.
***Definitely ignore the "do not cite" on preliminary copies of presentations when citing.
**Push that some of the books are used in some course at some university somewhere as justification for accepting all of them.
**Ignore that in at least one case, one has worked with a NRM group to suppress a critical academic's book.
**Use inflated hyperbole to describe them ''all'' such as "foremost", "world class", or "world-leading". (In a small pond, all the fish are big.)
**Discredit critical scholars as "the fringe", "a couple", "discredited", "9/11 Truthers"...
***Use the [[exceptional claims defense|http://wikipediareview.com/index.php?s=&showtopic=15240&view=findpost&p=78076]] to exclude them.
**Ignore any controversy over their neutrality, financial arrangements, lack of arms-length dealing, poor references in their work, sloppy scholarship...
**''Especially'' ignore any mention of nerve-gas.
**Scholars outside NRM studies have no standing. (If they use the term cultic rather than the club term NRM, they're definitely outside.)
*Look for news stories that repeat a boilerplate Scientology claim like 10 million members, 6 thousand organizations, and don't have an "according to Scientology" disclaimer, then cite the article as if they are confirming Scientology's claims.
*Time-suck the opposing editors:
**Suggest an outrageous change in the Talk page once a week.
***If no one takes it seriously and replies in the negative, do it.
***If other editors catch on and immediately disagree, discount their responses as biased and be ''bold''!
***If extremely outrageous, have a disposable sock-puppet account pop up and agree.
**--Libel-- Label all opposing editors as a unified ~TeamCritic, even if they frequently disagree/dispute each other.
***If there ''are'' disputes, use them to claim that "even nnnn's own team members don't support this!"
**When there is a shift in the negative direction, drive the article into contention then protection.
***If the article is frozen in a pro state, win!
***If frozen in a negative state, it won't be getting worse and the editors involved may lose interest and move on.
***Try to provoke edit-warring. Toss in extra reverts from disposable socks to provoke opposing editors over the 3RR line.
**If this doesn't work, at least once a year, drive the whole topic into contention and provoke yet another Arbcom RFAR.
!!!Arbcom/admin
*Mutual destruction/restriction with a critical editor is a win!
*Promote absurd aphorisms such as "there are two sides to every coin", "it takes two sides to have a war".
*Promote the trade of pro socks with critical editors as fair and balanced.
**Afterward, ignore the Arbcom and create more socks to carry on.
**Rise, repeat.
*Keep venue shopping (try, try again!)
**Pick a different place each time, hopefully off most involved editors' watchlists.
**Keep checking which admins would be receptive to a tale of woe of how individual critics are ganging up on a large organization with lots of people and endless time.
***When possible, use back-channel communications to keep it off the radar and not subject to review.
***Keep central files and profiles on all admins, key editors.
*When even a marginal preliminary opinion is favorable, conduct a mass-rush to apply it. (When it's not favorable, misinterpret it and apply it anyway.)
!!!Sock breeding:
*Keep a large drawer of dormant socks.
*A sock is born:
**Create new user from unconnected IP/email.
**Lightly edit some unconnected articles for a week or two for established editor status. (This can be done by a lower level staff or even public.)
**Add it to the dormant drawer.
*If Single Purpose Account is being enforced, have lower level staff occasionally take the user out for some off-topic editing to pretty up the ratios.
!!!Team list
*TBA
*[[Tentacle list of Scientogy-related domains|http://home.primus.ca/~ronsharp/tentacle.zip]] (637k zip file) [>img[Image of sample entry|http://i65.photobucket.com/albums/h233/RogerRamdrive/ChiloccoGone.jpg]]
**Click on the link to download it.
**Save to disk.
**Extract files.
**Open the ~TentacleWiki.html file in your browser.
*TiddlyWiki HTML file with Javascript
*Includes:
**Site classification
**Site status
**IP information
**Page title
**Domain creation, expiry and registrant
**Where the email //really// goes to
**Cross-index tags being added over time
*Seems to work best with Firefox 3
<html>
<embed style="width:400px; height:326px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=2196573959887248236&hl=en" flashvars=""> </embed>
</html>
 
<html><span style="FONT-SIZE: 40pt; FONT-FAMILY: Impact">Umbra Xenu</span>
    <span style="COLOR: #ffcc66; FONT-FAMILY: Impact; font-size:24pt">Presents</span> <i>A
    couple dozen views of the run-down Class V Toronto&nbsp;Org of Scientology</i>
    <hr/></span><table style=
    "BORDER-RIGHT: #dedfde 1px; BORDER-TOP: #dedfde 1px; FONT-SIZE: x-small; BORDER-LEFT: #dedfde 1px; BORDER-BOTTOM: #dedfde 1px; FONT-FAMILY: Arial; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: white"
           cellspacing="0" cellpadding="3" border="1">
      <tbody style="font-family:Verdana, Arial, Sans-Serif; font-size:8pt;">
        <tr style="FONT-WEIGHT: bold; COLOR: white; BACKGROUND-COLOR: #6b696b">
          <th>Image</th>

          <th>Description</th>
          <th>Image</th>
          <th>Description</th>
        </tr>
        <tr style="COLOR: black; BACKGROUND-COLOR: #f7f7de">
          <td><a href="pix/TorOrg1.jpg" target="_blank"><img alt="Org 1" src="pix/tmTorOrg1.jpg"/></a></td>
          <td>East store-front side.</td>

          <td><a href="pix/TorOrg2.jpg" target="_blank"><img alt="Tor Org 2" src="pix/tmTorOrg2.jpg"/></a></td>
          <td>
            North side. Note the bedsheet drapes
            and the acoustic ceiling in one room.
          </td>
        </tr>
        <tr>
          <td>
            <a href="pix/TorOrg3.jpg" target="_blank"><img alt="Tor Org 3" src="pix/tmTorOrg3.jpg"/></a>
          </td>

          <td>
            North-east corner. The number of air-conditioners has been increasing the last few years.
          </td>
          <td>
            <a href="pix/TorOrg4.jpg" target="_blank"><img alt="Tor Org 4" src="pix/tmTorOrg4.jpg"/></a>
          </td>
          <td>
            North-east corner upper view. There's
            a penthouse floor not visible here.
          </td>
        </tr>

        <tr style="COLOR: black; BACKGROUND-COLOR: #f7f7de">
          <td>
            <a href="pix/TorOrg5.jpg" target="_blank"><img alt="Tor Org 5" src=
            "pix/tmTorOrg5.jpg"></a>
          </td>
          <td>
            Yet Another north-east corner.
          </td>
          <td>
            <a href="pix/TorOrg6.jpg" target="_blank"><img alt="Tor Org 6" src=
            "pix/tmTorOrg6.jpg"></a>

          </td>
          <td>
            Massive display sign bolted to the
            side of the <i>"Church"</i>. Note the advertising drool down the
            side of the building.
          </td>
        </tr>
        <tr>
          <td>
            <a href="pix/TorOrg7.jpg" target="_blank"><img alt="Tor Org 7" src=
            "pix/tmTorOrg7.jpg"></a>

          </td>
          <td>
            South-east shot of the obviously
            (not) busy org.
          </td>
          <td>
            <a href="pix/TorOrg8.jpg" target="_blank"><img alt="Tor Org 8" src=
            "pix/tmTorOrg8.jpg"></a>
          </td>
          <td>
            A long view over the back alleys East
            of Yonge St. Note the penthouse floor not visible from closer
            in.
          </td>

        </tr>
        <tr style="COLOR: black; BACKGROUND-COLOR: #f7f7de">
          <td>
            <a href="pix/TorOrg9.jpg" target="_blank"><img alt="Tor Org 9" src=
            "pix/tmTorOrg9.jpg"></a>
          </td>
          <td>
            Upper south-east. The dinginess is
            partially due to sky-washout, but mainly because it <i>is</i> a
            dingy building.
          </td>

          <td>
            <a href="pix/TorOrg10.jpg" target="_blank"><img alt="Tor Org 10" src=
            "pix/tmTorOrg10.jpg"></a>
          </td>
          <td>
            More south-east.
          </td>
        </tr>
        <tr>
          <td>

            <a href="pix/TorOrg11.jpg" target="_blank"><img alt="Tor Org 11" src=
            "pix/tmTorOrg11.jpg"></a>
          </td>
          <td>
            North-west corner. More wonderful
            drapery.
          </td>
          <td>
            <a href="pix/TorOrg12.jpg" target="_blank"><img alt="Tor Org 12" src=
            "pix/tmTorOrg12.jpg"></a>
          </td>
          <td>

            The Great Wall of Scientology.
            (North)
          </td>
        </tr>
        <tr style="COLOR: black; BACKGROUND-COLOR: #f7f7de">
          <td>
            <a href="pix/TorOrg13.jpg" target="_blank"><img alt="Tor Org 13" src=
            "pix/tmTorOrg13.jpg"></a>
          </td>
          <td>
            Gregg at the side of the Dianetics
            shop.
          </td>

          <td>
            <a href="pix/TorOrg14.jpg" target="_blank"><img alt="Tor Org 14" src=
            "pix/tmTorOrg14.jpg"></a>
          </td>
          <td>
            The North-East corner, the Dianetics
            shop with picketer.
          </td>
        </tr>
        <tr>
          <td>

            <a href="pix/TorOrg15.jpg" target="_blank"><img alt="Tor Org 15" src=
            "pix/tmTorOrg15.jpg"></a>
          </td>
          <td>
            The North-East corner, the Dianetics
            shop without picketer.
          </td>
          <td>
            <a href="pix/TorOrg16.jpg" target="_blank"><img alt="Tor Org 16" src=
            "pix/tmTorOrg16.jpg"></a>
          </td>
          <td>

            Upper north-west corner.
          </td>
        </tr>
        <tr style="COLOR: black; BACKGROUND-COLOR: #f7f7de">
          <td>
            <a href="pix/TorOrg17.jpg" target="_blank"><img alt="Tor Org 17" src=
            "pix/tmTorOrg17.jpg"></a>
          </td>
          <td>
            Mid-level north-west corner.
          </td>

          <td>
            <a href="pix/TorOrgChapel.jpg" target="_blank"><img alt="Chapel" src=
            "pix/tmTorOrgChapel.jpg"></a>
          </td>
          <td>
            "Chapel" used for spare storage and
            odds'n'ends. No indication that "Sunday Services" ever
            happen.
          </td>
        </tr>
        <tr>
          <td>

            <a href="pix/DarkChapel.jpg" target="_blank"><img alt="Dark Chapel 1" src=
            "pix/tmDarkChapel.jpg"></a>
          </td>
          <td>
            The inside of the chapel at night.
            Quite a clutter on a Friday night with "services" scheduled on
            Sunday.
          </td>
          <td>
            <a href="pix/DarkChapel2.jpg" target="_blank"><img alt="Dark Chapel 2" src=
            "pix/tmDarkChapel2.jpg"></a>
          </td>
          <td>

            More clutter. The low light levels
            and reflections could be better, but there's less hassle taking
            these pix at night.
          </td>
        </tr>
        <tr style="COLOR: black; BACKGROUND-COLOR: #f7f7de">
          <td>
            <a href="pix/DarkOrg1.jpg" target="_blank"><img alt="Dark Org 1" src=
            "pix/tmDarkOrg1.jpg"></a>
          </td>
          <td>
            Not a creature was stirring, except
            the regs on the 2nd floor. (Light-levels severly tweaked.)
          </td>

          <td>
            <a href="pix/DarkOrg2.jpg" target="_blank"><img alt="Dark Org 2" src=
            "pix/tmDarkOrg2.jpg"></a>
          </td>
          <td>
            Reflecting on Co$ slogans.
          </td>
        </tr>
        <tr>
          <td>

            <a href="pix/DarkOrg3.jpg" target="_blank"><img alt="Dark Org 3" src=
            "pix/tmDarkOrg3.jpg"></a>
          </td>
          <td>
            More reflecting. Look
            carefully.
          </td>
          <td>
            <a href="pix/VaginaMono.jpg" target="_blank"><img alt="Vagina Monologues" src=
            "pix/tmVaginaMono.jpg"></a>
          </td>
          <td>

            The NewYorker Theater sign facing the
            Org across the street. The org staff cheered when this sign was
            taken down -- until the Puppetry of the Penis sign went
            up!
          </td>
        </tr>
        <tr style="COLOR: black; BACKGROUND-COLOR: #f7f7de">
          <td>
            <a href="pix/MindGames.jpg" target="_blank"><img alt="MindGames" src=
            "pix/tmMindGames.jpg"></a>
          </td>
          <td>
            Ain't it the truth! "It was better
            than Cats, I want to see it again and again!" The New Yorker has
            now been torn down and will soon be reborn as a&nbsp;home&nbsp;in
            Toronto&nbsp;for the Blue Man Group performance art act.
          </td>

          <td>
            <a href=
            "http://www.scientology.org/world/worldeng/global/orghtml/tororg.htm" target="_blank">
            <img alt="Shiny Org" src="pix/tmlarger.jpg"></a>
          </td>
          <td>
            Scientology's own spanky clean
            picture of the Toronto org from 15+ years ago just after it was
            waxed or something. Later, Scientology photoshopped it into
            <a href=
            "http://www.scientology.org/pics/std/religion/groups/img005b_larger.jpg" target="_blank">
            this picture</a> by changing the sky, buffing up the building,
            deleting the Brothers Restaurant in front and a building on the
            left and adding two people in front of the org. <a href=
            "http://xenu.net/archive/image_edit/" target="_blank">Stalin and Big Brother</a>

            would be proud!
          </td>
        </tr>
        <tr>
          <td>
            <a href="pix/t04_0001.jpg" target="_blank"><img alt="Cabaret" src=
            "pix/tmt04_0001.jpg"/></a>
          </td>
          <td>
            3/19/2004 Put down the cans, the book
            and the clay, Time for a holiday. Life is a cabaret old chum, Come
			to the cabaret!
          </td>

          <td>
            <a href="pix/t04_0002.jpg" target="_blank"><img alt="TorOrg04 2" src=
            "pix/tmt04_0002.jpg"/></a>
          </td>
          <td>
            3/19/2004
          </td>
        </tr>
        <tr style="COLOR: black; BACKGROUND-COLOR: #f7f7de">
          <td>

            <a href="pix/t04_0003.jpg" target="_blank"><img alt="TorOrg04 3" src=
            "pix/tmt04_0003.jpg"/></a>
          </td>
          <td>
            3/19/2004
          </td>
          <td>
            <a href="pix/t04_0004.jpg" target="_blank"><img alt="TorOrg04 4" src=
            "pix/tmt04_0004.jpg"></a>
          </td>
          <td>

            3/19/2004
          </td>
        </tr>
        <tr>
          <td>
            <a href="pix/t04_0005.jpg" target="_blank"><img alt="TorOrg04 5" src=
            "pix/tmt04_0005.jpg"></a>
          </td>
          <td>
            3/19/2004
          </td>

          <td>
            <a href="pix/t04_0006.jpg" target="_blank"><img alt="TorOrg04 6" src=
            "pix/tmt04_0006.jpg"></a>
          </td>
          <td>
            3/19/2004
          </td>
        </tr>
        <tr style="COLOR: black; BACKGROUND-COLOR: #f7f7de">
          <td>

            <a href="pix/t04_0007.jpg" target="_blank"><img alt="Boarded door" src=
            "pix/tmt04_0007.jpg"></a>
          </td>
          <td>
            3/19/2004 The front of the Org under
            construction. The empty room on the left 2nd floor <i>was</i> L.
            Ron Hubbard's office. They have one in every Org, just in
            case.
          </td>
          <td>
            <a href="pix/t04_0008.jpg" target="_blank"><img alt="TorOrg04 8" src=
            "pix/tmt04_0008.jpg"></a>
          </td>

          <td>
            3/19/2004
          </td>
        </tr>
        <tr>
          <td>
            <a href="pix/t04_0009.jpg" target="_blank"><img alt="TorOrg04 9" src=
            "pix/tmt04_0009.jpg"></a>
          </td>
          <td>

            3/19/2004
          </td>
          <td>
            <a href="pix/t04_0010.jpg" target="_blank"><img alt="TorOrg04 10" src=
            "pix/tmt04_0010.jpg"></a>
          </td>
          <td>
            3/19/2004
          </td>
        </tr>
        <tr style="COLOR: black; BACKGROUND-COLOR: #f7f7de">

          <td>
            <a href="pix/t04_0011.jpg" target="_blank"><img alt="TorOrg04 11" src=
            "pix/tmt04_0011.jpg"></a>
          </td>
          <td>
            3/19/2004
          </td>
          <td>
            <a href="pix/t04_0012.jpg" target="_blank"><img alt="TorOrg04 12" src=
            "pix/tmt04_0012.jpg"></a>
          </td>

          <td>
            3/19/2004&nbsp;Renovations with the
            Dianetics Shop entrance boarded up. The windows above are a
            little worse than usual.
          </td>
        </tr>
        <tr>
          <td><a href="pix/t04_0013.jpg" target="_blank"><img alt="Zombies" src="pix/tmt04_0013.jpg"/></a></td>
          <td><font face="Comic Sans MS">Dawn of the Dianetics</font>? (Actually a Toronto-made zombie movie ad.)</td>
          <td><a href="pix/t04_0014.jpg" target="_blank"><img alt="TorOrg04 14" src="pix/tmt04_0014.jpg"/></a></td>

          <td>3/19/2004 Weather report: Heavy entheta</td>
        </tr>
        <tr style="COLOR: black; BACKGROUND-COLOR: #f7f7de">
          <td><a href="pix/t04_0015.jpg" target="_blank"><img alt="LRH B-Day" src="pix/tmt04_0015.jpg"/></a></td>
          <td>3/19/2004 Advertising for L. Ron Hubbard's birthday (March 13th). In recent years, Scientology has
            been photoshopping pictures of Elron. Sometimes 
            <a href="http://xenu.net/archive/image_edit/hubbard2.jpg" target="_blank">this</a> goes
            badly <a href="http://realscientology.org/img/index_1.jpg" target="_blank">wrong</a>
          </td>

          <td>
            <a href="pix/t04_0016.jpg" target="_blank"><img alt="TorOrg04 16" src=
            "pix/tmt04_0016.jpg"></a>
          </td>
          <td>
            3/19/2004 The cluttered "chapel"
            which was later turned into a room for book sales and
            <em><font face="Comic Sans MS">FREE <span style="color:Red">STRESS</span> TESTS</font></em>
          </td>

        </tr>
        <tr>
          <td>
            <a href="pix/cos_0003.jpg" target="_blank"><img alt="Sales Chapel" src=
            "pix/tmcos_0003.jpg"></a>
          </td>
          <td>
            7/23/04 While the Dianetics Shop is
            closed, the chapel was turned into a sales office. They even
            scraped the Chapel lettering off the inside of window.
          </td>
          <td><a href="pix/aug_0006.jpg" target="_blank"><img alt="VM ad" src="pix/tmaug_0006.jpg"/></a></td>

          <td>
            8/20/04 Another zombie .. oh wait,
            that <i>is</i> a Scientology ad for their "Volunteer
            Ministers".
          </td>
        </tr>
        <tr style="COLOR: black; BACKGROUND-COLOR: #f7f7de">
          <td>
            <a href="pix/aug_0011.jpg" target="_blank"><img alt=
            "Scientology Volunter Minister ad" src="pix/tmaug_0011.jpg"></a>
          </td>

          <td>
            8/20/04 Yes, only Scientologist VMs can drive off the eeevil Lord
            <a href="http://en.wikipedia.org/wiki/Xenu" target="_blank">Xenu</a>
          </td>
          <td><a href="pix/feb_0101.jpg" target="_blank"><img alt="Dianetics Shop" src="pix/tmfeb_0101.jpg"/></a></td>
          <td>
            2/1/05 After a year of renovations,
            the Dianetics Shop is reopened for free <em><font face=
            "Comic Sans MS"><span style="color: red">STRESS</span></font></em> testing, but still incomplete
            inside and the side window boarded/painted. Meanwhile the signs
            still point to the Sales Chapel at the side.
          </td>

        </tr>
      </tbody>
    </table><font face="Arial" size="1"><br>
    photos are Copyright 2002-2007, by Ron Sharp. Permission for use is given
    on condition that a courtesy email is sent.</font></html>
<html><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/iC0orVQOT60&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/iC0orVQOT60&hl=en&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></html>
/***
|''Name:''|TiddlerListMacro|
|''Version:''|2.3 (8-Jan-2008)|
|''Source''|http://jackparke.googlepages.com/jtw.html#TiddlerListMacro ([[del.icio.us|http://del.icio.us/post?url=http://jackparke.googlepages.com/jtw.html%23TiddlerListMacro]])|
|''Author:''|[[Jack]]|
|''Type:''|Macro|
|''Documentation:''|[[TiddlerListMacroDocumentation]]|
!Usage
{{{<<tiddlerList parameter1:"value1" parameter2:"value2" ...>>}}}
See TiddlerListMacroDocumentation and TiddlerListMacroExamples

!Description
The TiddlerListMacro lists tiddlers with ~SQL-Like features:
* List tiddlers containing a word in the title or text (case-sensitive)
* List tiddlers tagged with given tags or exclude certain tags
* Ascending and descending sorting of single fields
* Limit number of tiddlers displayed
* Specify different HTML formats for the lists
* Grouping of items in a list
* Customizable wiki templates
* Numbering and totals
!Revision History
* Original by [[Jack]] 17-Apr-2006
* Added formatting (v2.0.1 18-Apr-2006)
* Added grouping (v2.0.2 18-Apr-2006)
* Added flexible filtering (v2.0.3 19-Apr-2006)
* Added custom item templates (v2.0.4 20-Apr-2006)
* Added custom templates (v2.0.5 21-Apr-2006)
* Allow evalled parameters (v2.0.7 23-Apr-2006)
* Allow groupFooterTemplate (v2.0.9 30-Apr-2006)
* Added the customParameter (v2.0.10 2-May-2006)
!To Do
* Case-insensitive searching
* Sorting on multiple fields
!Usage
{{{<<tiddlerList parameter1:"value1" parameter2:"value2" ...>>}}}
!Examples ([[TiddlerListMacroExamples]])
List all tiddlers tagged with "Plugin"
{{{<<tiddlerList tags:Plugin>>}}}
List newest 3 plugins which are not templates:
{{{<<tiddlerList tags:"Plugin,-Template" top:3 order:"-created">>}}}
List all tiddlers containing "Jack" in their title or text (last modified first):
{{{<<tiddlerList search:"Jack" order:"-modified">>}}}
List all tiddlers starting with "T" in a table:
{{{<<tiddlerList title:"^T" format:"table" header:"Tiddlers beginning with T" footer:"%count items listed">>}}}
Group tiddlers by first letter
{{{<<tiddlerList top:"15" group:"tiddler.title.substr(0,1)" groupTemplate:"''%group''">>}}}
Show a list of all tiddlers with creation date (overrides default item template)
{{{<<tiddlerList itemTemplate:"* %link (%created)\n">>}}}
Show all tiddlers that have the host's tiddler title in their tag list
{{{<<tiddlerList filter:"tiddler.tags.contains(currentTiddler.title)">>}}}
!Parameters
|!Parameter|!Type|!Meaning|!Example|
|top|Integer|Number of tiddlers to display|"10"|
|tags|String|List tiddlers with matching tags (AND Logic). Leading - to exclude.|"~ToDo,Urgent,-Done"|
|title|~RegEx|List tiddlers with matching title|"^[Pp]"|
|text|~RegEx|List tiddlers with matching text|"Searchtext"|
|search|~RegEx|List tiddlers with matching title OR text|"Problem"|
|filter*|~JavaScript|List tiddlers according to boolean expression)|"tiddler.title.length<4 && tiddler.tags.contains('Idea')"|
|format|String (fixed list)|HTML formatting of list. list (ul, default), nlist (ol), span, stack (div), csv, table.|"list"|
|order|String|Sort order of tiddlers. - is descending, + ascending|"-created"|
|group*|~JavaScript|Grouping field|tiddler.title.substr(0,1)|
|customParameter*|~JavaScript|Custom parameter to be evalled for use in the itemTemplate|tiddler.text.match(/Version: (.*)/)[1]|
|header|String|Top caption|"Tiddlers beginning with T"|
|footer|String|Bottom caption|"End of list"|
|itemTemplate|~WikiTemplate|~WikiText with %placeholders|"%link\n%abstract\n%modified"|
|groupTemplate|~WikiTemplate|~WikiText with %placeholders for the start of each group|"!!%group"|
|groupFooterTemplate|~WikiTemplate|~WikiText with %placeholders for the end of each group|"----\n"|
|dateFormat|String|Date formatting string when displaying dates|~YYYY-MM-DD|
|separator|String|Define a string or character to be inserted between items listed|" "|
|debug|Boolean|Set to 1 or true for debug mode where only wikitext will be output|debug:1|
{{{*}}} Parameter will be evalled (do not pass with {{{{{ }} }}} unless you want it evalled twice!)
!Template Placeholders
Placeholder values for itemTemplate parameter
|!Placeholder|!Field|
|%item|List item number|
|%link|Link to Tiddler {{{[[MyTiddler]]}}}|
|%title|Tiddler Name {{{MyTiddler}}}|
|%nolink|Unlinked Tiddler Title {{{~MyTiddler}}}|
|%abstract|First 300 chars of tiddler text|
|%text|All tiddler text|
|%tags|Tags separated by space|
|%created|Creation date|
|%modified|Modified date|
|%modifier|Last modifier|
|%group|Name of group field|
|%custom|The result of your evalled customParameter|
|%count|Number of items listed (footer only)|
!Variables
{{{{{currentTiddler}} }}}refers to the current (host) tiddler in function scope (i.e. within the filter or group parameters)
{{{{{gCurrentTiddler}} }}}refers to the current (host) tiddler in global scope (i.e. within{{{ {{}} }}}evalled parameters. Example:
{{{<<tiddlerList tags:{{gCurrentTiddler.title}}>>}}}
!Style
No styles are pre-assigned to the lists. Use {{{@@}}} notation to define custom styles in the header, footer, groupTemplate and itemTemplate parameters.


!Code
***/
//{{{
version.extensions.tiddlerList = {major: 2, minor: 3, revision: 0, date: new Date("Jan 08, 2008")};
// template = [header, item, separator, group, footer]
config.macros.tiddlerList={
 formats : {list:true, nlist:true, span:true, stack:true, csv:true, table:true},
 templates : {
 list : [ "%0\n", "* %0\n", "", "%group\n", "%0\n"],
 nlist : [ "%0", "# %0\n", "", "%group\n", "%0\n"],
 span : [ "%0", "%0", " ", "%group", "%0"],
 stack : [ "%0", "%0", "\n", "%group", "%0"],
 csv : [ "%0", "%0", ", ", "%0", "%0\n"],
 table : ["|!%0|\n", "|%0|\n", "", "|%group|\n", "|%0|\n"]
 },
 dateFormat : "DD MMM YYYY"
}

if (typeof gCurrentTiddler == 'undefined')
 var gCurrentTiddler;

config.macros.tiddlerList.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
 // Some globals
 var count=0, groupCount=0, theGroup="", lastGroup="", firstInGroup = false;
 var currentTiddler = tiddler;
 gCurrentTiddler = tiddler;
 var listWikiText="";
 var formats = this.formats;
 
 // SQL-Like parameters
 var parameters = paramString.parseParams("name",null,true);
 var pTags = parameters[0]["tags"]?parameters[0]["tags"][0].split(","):[];
 var pOrder = parameters[0]["order"]?parameters[0]["order"][0]:"title";
 var pTop = parameters[0]["top"]?parameters[0]["top"][0]:-1;
 var pText = parameters[0]["text"]?parameters[0]["text"][0]:"";
 var pTitle = parameters[0]["title"]?parameters[0]["title"][0]:"";
 var pSearch = parameters[0]["search"]?parameters[0]["search"][0]:"";
 var pFilter = parameters[0]["filter"]?parameters[0]["filter"][0]:"";
 var pHeader = parameters[0]["header"]?paramFormat(parameters[0]["header"][0]):"";
 var pFooter = parameters[0]["footer"]?paramFormat(parameters[0]["footer"][0]):"";
 var pGroup = parameters[0]["group"]?parameters[0]["group"][0]:"";
 var pDateFormat = parameters[0]["dateFormat"]?parameters[0]["dateFormat"][0]:this.dateFormat;
 var pCustomParameter = parameters[0]["customParameter"]?parameters[0]["customParameter"][0]:"";
 var pFormat = parameters[0]["format"]?parameters[0]["format"][0]:"list";
 pFormat = formats[pFormat]?pFormat:"list"
 
 // Separator
 var pSeparator = parameters[0]["separator"]?paramFormat(parameters[0]["separator"][0]):(parameters[0]["seperator"]?paramFormat(parameters[0]["seperator"][0]):this.templates[pFormat][2])

 // Template for group
 var pGroupTemplate = this.templates[pFormat][3];
 if (parameters[0]["groupTemplate"])
 pGroupTemplate = paramFormat(parameters[0]["groupTemplate"][0])
 pGroupTemplate = pGroupTemplate.replace("$))", ">>")
 
 // Template for group footer
 var pGroupFooterTemplate = "";
 if (parameters[0]["groupFooterTemplate"])
 pGroupFooterTemplate = paramFormat(parameters[0]["groupFooterTemplate"][0])
 pGroupFooterTemplate = pGroupFooterTemplate.replace("$))", ">>")
 
 // Template for item
 var pItemTemplate = this.templates[pFormat][1];
 if (parameters[0]["itemTemplate"])
 pItemTemplate = paramFormat(parameters[0]["itemTemplate"][0])
 pItemTemplate = pItemTemplate.replace("$))", ">>").replace("%link", "%0").replace("%item", "%1").replace("%abstract", "%2").replace("%text", "%3").replace("%created", "%4").replace("%modified", "%5").replace("%modifier", "%6").replace("%group", "%7").replace("%title", "%8").replace("%tags", "%9").replace("%nolink", "%10").replace("%custom", "%11")
 // Template for footer
 var pFooterTemplate = this.templates[pFormat][4].replace("%count", "%1")

 // Get all tiddlers
 var tiddlers = store.reverseLookup("tags","excludeLists",false);

 // Sorting
 if(!pOrder)
 pOrder = "title";
 if (pOrder.match(/^\-/i)) {
 pOrder = pOrder.substr(1)
 var sortDesc = true;
 }
 // Sorting on a standard field
 if (pOrder.match(/(title)|(text)|(modifier)|(modified)|(created)|(tags)/))
  if (sortDesc)
   tiddlers.sort(function (a,b) {if(a[pOrder] == b[pOrder]) return(0); else return (a[pOrder] > b[pOrder]) ? -1 : +1; });
  else
  tiddlers.sort(function (a,b) {if(a[pOrder] == b[pOrder]) return(0); else return (a[pOrder] < b[pOrder]) ? -1 : +1; });
 else
  if (sortDesc)
   tiddlers.sort(function (a,b) {if(a.fields[pOrder] == b.fields[pOrder]) return(0); else return (a.fields[pOrder] > b.fields[pOrder]) ? -1 : +1; });
  else
   tiddlers.sort(function (a,b) {if(a.fields[pOrder] == b.fields[pOrder]) return(0); else return (a.fields[pOrder] < b.fields[pOrder]) ? -1 : +1; });

 // Header
 if (pHeader)
 listWikiText += formatItem(this.templates[pFormat][0], [pHeader], pFormat)
 
 for(var t=0; t<tiddlers.length; t++) {
 tiddler = tiddlers[t];
 if (pText!="" && tiddler.text=="") tiddler.text=store.getValue(tiddler, 'text')
 if (pTop==-1 || count<pTop) {
 if (pText=="" || tiddler.text.match(pText)) {
 if (pTitle=="" || tiddler.title.match(pTitle)) {
 if (pSearch=="" || (tiddler.title.match(pSearch) || tiddler.text.match(pSearch))) {
 if (pFilter=="" || eval(pFilter)) {
 if (pTags.length==0 || compareArrays(tiddler.tags, pTags, "all")) {
 count++;
 if (tiddler.text=="") tiddler.text=store.getValue(tiddler, 'text')
 // Grouping
 if (pGroup) {
 theGroup = eval(pGroup);
 if(theGroup != lastGroup) {
 groupCount++;firstInGroup = true;
 if (pGroupFooterTemplate && groupCount>1)
 listWikiText += pGroupFooterTemplate.replace("%group", theGroup)
 listWikiText += pGroupTemplate.replace("%group", theGroup)
 lastGroup = theGroup;
 } else
  firstInGroup = false;
 }
 // Separators
 if (count>1 && !firstInGroup) listWikiText += pSeparator;
 //Plaintext title
 var noLink = tiddler.title.match(config.textPrimitives.wikiLink)?"~" + tiddler.title:tiddler.title;
 // Custom parameter
 if (pCustomParameter)
 var custom="";
 try {
 custom = eval(pCustomParameter)
 } catch (e) {}
 // List individual tiddler
 var strItem = formatItem(pItemTemplate,["[[" + tiddler.title + "]]",count,tiddler.text.substr(0,300),tiddler.text,tiddler.created.formatString(pDateFormat),tiddler.modified.formatString(pDateFormat),tiddler.modifier,theGroup,tiddler.title,tiddler.tags.join(" "),noLink,custom], pFormat)
 for (var fld in tiddler.fields) strItem = strItem.replace('%field.' + fld, tiddler.fields[fld]);
 listWikiText += strItem
 }
 }
 }
 }
 }
 }
 }
 
 // Last group footer
 if (pGroup && pGroupFooterTemplate && count>0)
 listWikiText += pGroupFooterTemplate.replace("%group", theGroup)

 // Footer
 if (pFooter) {
 pFooter = pFooter.replace("%count", count)
 listWikiText += formatItem(pFooterTemplate, [pFooter], pFormat)
 }
 
 // Render result
 if (!parameters[0]["debug"])
 wikify(listWikiText,place, null, currentTiddler)
 else
 place.innerHTML = "<textarea style=\"width:100%;\" rows=30>" + listWikiText + "</textarea>"
 
 
 // Local functions
 
 function paramFormat(param) {
 // Allow "\n" in non evalled parameters
 return param.replace(/\\n/g, "\n");
 }
 
 function formatItem(template, values, format) {
 // Fill template with values (depending on list format)
 if (format.match(/table/) && values[0].match(/\|/))
 return ("%0\n").format(values)
 else
 return template.format(values)
 }
 
 function compareArrays(array, values, logic) {
 // Compare items in array with AND("all") or OR("any") logic
 var matches=0;
 for(var v=0; v<values.length; v++) 
 if(values[v].replace(/^\s+|\s+$/g,"").match(/^\-/) && !array.contains(values[v].replace(/^\s+|\s+$/g,"").substr(1)))
 matches++;
 else if (array.contains(values[v]))
 matches++;
 return ((logic=="all" && matches==values.length) || (logic!="all" && matches>0))
 }
 
}

String.prototype.prettyTrim = function(len,prefix,postfix) {
 var result = this.trim().replace(/\r\n/g,' ').replace(/\n/g,' ');
 if (!prefix) prefix = '';
 if (!postfix) postfix = '';
 if (result.length > len - 3)
 return prefix + result.substr(0,len) + '...' + postfix;
 else if (result.length > 0)
 return prefix + result + postfix;
 else
 return result;
}

//}}}
/***
|''Name:''|TiddlersBarPlugin|
|''Description:''|A bar to switch between tiddlers through tabs (like browser tabs bar).|
|''Version:''|1.2.5|
|''Date:''|Jan 18,2008|
|''Source:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Author:''|Pascal Collin|
|''License:''|[[BSD open source license|License]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 2.0; InternetExplorer 6.0, others|
!Demos
On [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], open several tiddlers to use the tabs bar.
!Installation
#import this tiddler from [[homepage|http://visualtw.ouvaton.org/VisualTW.html]] (tagged as systemConfig)
#save and reload
#''if you're using a custom [[PageTemplate]]'', add {{{<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>}}} before {{{<div id='tiddlerDisplay'></div>}}}
#optionally, adjust StyleSheetTiddlersBar
!Tips
*Doubleclick on the tiddlers bar (where there is no tab) create a new tiddler.
*Tabs include a button to close {{{x}}} or save {{{!}}} their tiddler.
*By default, click on the current tab close all others tiddlers.
!Configuration options 
<<option chkDisableTabsBar>> Disable the tabs bar (to print, by example).
<<option chkHideTabsBarWhenSingleTab >> Automatically hide the tabs bar when only one tiddler is displayed. 
<<option txtSelectedTiddlerTabButton>> ''selected'' tab command button.
<<option txtPreviousTabKey>> previous tab access key.
<<option txtNextTabKey>> next tab access key.
!Code
***/
//{{{
config.options.chkDisableTabsBar = config.options.chkDisableTabsBar ? config.options.chkDisableTabsBar : false;
config.options.chkHideTabsBarWhenSingleTab  = config.options.chkHideTabsBarWhenSingleTab  ? config.options.chkHideTabsBarWhenSingleTab  : false;
config.options.txtSelectedTiddlerTabButton = config.options.txtSelectedTiddlerTabButton ? config.options.txtSelectedTiddlerTabButton : "closeOthers";
config.options.txtPreviousTabKey = config.options.txtPreviousTabKey ? config.options.txtPreviousTabKey : "";
config.options.txtNextTabKey = config.options.txtNextTabKey ? config.options.txtNextTabKey : "";
config.macros.tiddlersBar = {
	tooltip : "see ",
	tooltipClose : "click here to close this tab",
	tooltipSave : "click here to save this tab",
	promptRename : "Enter tiddler new name",
	currentTiddler : "",
	previousState : false,
	previousKey : config.options.txtPreviousTabKey,
	nextKey : config.options.txtNextTabKey,	
	tabsAnimationSource : null, //use document.getElementById("tiddlerDisplay") if you need animation on tab switching.
	handler: function(place,macroName,params) {
		var previous = null;
		if (config.macros.tiddlersBar.isShown())
			story.forEachTiddler(function(title,e){
				if (title==config.macros.tiddlersBar.currentTiddler){
					var d = createTiddlyElement(null,"span",null,"tab tabSelected");
					config.macros.tiddlersBar.createActiveTabButton(d,title);
					if (previous && config.macros.tiddlersBar.previousKey) previous.setAttribute("accessKey",config.macros.tiddlersBar.nextKey);
					previous = "active";
				}
				else {
					var d = createTiddlyElement(place,"span",null,"tab tabUnselected");
					var btn = createTiddlyButton(d,title,config.macros.tiddlersBar.tooltip + title,config.macros.tiddlersBar.onSelectTab);
					btn.setAttribute("tiddler", title);
					if (previous=="active" && config.macros.tiddlersBar.nextKey) btn.setAttribute("accessKey",config.macros.tiddlersBar.previousKey);
					previous=btn;
				}
				var isDirty =story.isDirty(title);
				var c = createTiddlyButton(d,isDirty ?"!":"x",isDirty?config.macros.tiddlersBar.tooltipSave:config.macros.tiddlersBar.tooltipClose, isDirty ? config.macros.tiddlersBar.onTabSave : config.macros.tiddlersBar.onTabClose,"tabButton");
				c.setAttribute("tiddler", title);
				if (place.childNodes) {
					place.insertBefore(document.createTextNode(" "),place.firstChild); // to allow break line here when many tiddlers are open
					place.insertBefore(d,place.firstChild); 
				}
				else place.appendChild(d);
			})
	}, 
	refresh: function(place,params){
		removeChildren(place);
		config.macros.tiddlersBar.handler(place,"tiddlersBar",params);
		if (config.macros.tiddlersBar.previousState!=config.macros.tiddlersBar.isShown()) {
			story.refreshAllTiddlers();
			if (config.macros.tiddlersBar.previousState) story.forEachTiddler(function(t,e){e.style.display="";});
			config.macros.tiddlersBar.previousState = !config.macros.tiddlersBar.previousState;
		}
	},
	isShown : function(){
		if (config.options.chkDisableTabsBar) return false;
		if (!config.options.chkHideTabsBarWhenSingleTab) return true;
		var cpt=0;
		story.forEachTiddler(function(){cpt++});
		return (cpt>1);
	},
	selectNextTab : function(){  //used when the current tab is closed (to select another tab)
		var previous="";
		story.forEachTiddler(function(title){
			if (!config.macros.tiddlersBar.currentTiddler) {
				story.displayTiddler(null,title);
				return;
			}
			if (title==config.macros.tiddlersBar.currentTiddler) {
				if (previous) {
					story.displayTiddler(null,previous);
					return;
				}
				else config.macros.tiddlersBar.currentTiddler=""; 	// so next tab will be selected
			}
			else previous=title;
			});		
	},
	onSelectTab : function(e){
		var t = this.getAttribute("tiddler");
		if (t) story.displayTiddler(null,t);
		return false;
	},
	onTabClose : function(e){
		var t = this.getAttribute("tiddler");
		if (t) {
			if(story.hasChanges(t) && !readOnly) {
				if(!confirm(config.commands.cancelTiddler.warning.format([t])))
				return false;
			}
			story.closeTiddler(t);
		}
		return false;
	},
	onTabSave : function(e) {
		var t = this.getAttribute("tiddler");
		if (!e) e=window.event;
		if (t) config.commands.saveTiddler.handler(e,null,t);
		return false;
	},
	onSelectedTabButtonClick : function(event,src,title) {
		var t = this.getAttribute("tiddler");
		if (!event) event=window.event;
		if (t && config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton])
			config.commands[config.options.txtSelectedTiddlerTabButton].handler(event, src, t);
		return false;
	},
	onTiddlersBarAction: function(event) {
		var source = event.target ? event.target.id : event.srcElement.id; // FF uses target and IE uses srcElement;
		if (source=="tiddlersBar") story.displayTiddler(null,'New Tiddler',DEFAULT_EDIT_TEMPLATE,false,null,null);
	},
	createActiveTabButton : function(place,title) {
		if (config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton]) {
			var btn = createTiddlyButton(place, title, config.commands[config.options.txtSelectedTiddlerTabButton].tooltip ,config.macros.tiddlersBar.onSelectedTabButtonClick);
			btn.setAttribute("tiddler", title);
		}
		else
			createTiddlyText(place,title);
	}
}

story.coreCloseTiddler = story.coreCloseTiddler? story.coreCloseTiddler : story.closeTiddler;
story.coreDisplayTiddler = story.coreDisplayTiddler ? story.coreDisplayTiddler : story.displayTiddler;

story.closeTiddler = function(title,animate,unused) {
	if (title==config.macros.tiddlersBar.currentTiddler)
		config.macros.tiddlersBar.selectNextTab();
	story.coreCloseTiddler(title,false,unused); //disable animation to get it closed before calling tiddlersBar.refresh
	var e=document.getElementById("tiddlersBar");
	if (e) config.macros.tiddlersBar.refresh(e,null);
}

story.displayTiddler = function(srcElement,tiddler,template,animate,unused,customFields,toggle){
	story.coreDisplayTiddler(config.macros.tiddlersBar.tabsAnimationSource,tiddler,template,animate,unused,customFields,toggle);
	var title = (tiddler instanceof Tiddler)? tiddler.title : tiddler;  
	if (config.macros.tiddlersBar.isShown()) {
		story.forEachTiddler(function(t,e){
			if (t!=title) e.style.display="none";
			else e.style.display="";
		})
		config.macros.tiddlersBar.currentTiddler=title;
	}
	var e=document.getElementById("tiddlersBar");
	if (e) config.macros.tiddlersBar.refresh(e,null);
}

var coreRefreshPageTemplate = coreRefreshPageTemplate ? coreRefreshPageTemplate : refreshPageTemplate;
refreshPageTemplate = function(title) {
	coreRefreshPageTemplate(title);
	if (config.macros.tiddlersBar) config.macros.tiddlersBar.refresh(document.getElementById("tiddlersBar"));
}

ensureVisible=function (e) {return 0} //disable bottom scrolling (not useful now)

config.shadowTiddlers.StyleSheetTiddlersBar = "/*{{{*/\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .button {border:0}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .tab {white-space:nowrap}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar {padding : 1em 0.5em 2px 0.5em}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tabUnselected .tabButton, .tabSelected .tabButton {padding : 0 2px 0 2px; margin: 0 0 0 4px;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tiddler, .tabContents {border: 0;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar +="/*}}}*/";
store.addNotification("StyleSheetTiddlersBar", refreshStyles);

config.refreshers.none = function(){return true;}
config.shadowTiddlers.PageTemplate=config.shadowTiddlers.PageTemplate.replace(/<div id='tiddlerDisplay'><\/div>/m,"<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>\n<div id='tiddlerDisplay'></div>");

//}}}
[[TiddlyWiki|http://www.tiddlywiki.com/]] by Jeremy Ruston, is a darned useful tool for organizing information. Use it for anything from a simple set of notes up to your own mini-pedia. The main features:
*Simple to create, edit and organize.
*Can be used for lists of stuff, to do lists, blog-like journals.
*Can be hugely customized and extended with cool add-ons.
*Fairly computer and browser independent. (Some of my customizations work better in Firefox.)
*Plays [[video|The Story of Xenu]] and music from places like YouTube by dropping the embed code in a tiddler.
*Self-contained. A "website in a box" that can be copied and moved easily.
*Makes a nifty platform for hacking ~JavaScript without a development environment.
*The Sync and Import in the Backstage are very powerful.
!!!Useful links
*[[TiddlyWiki User's Guide - an introduction to TiddlyWiki|http://danielbaird.com/tiddlywikiguides/userguide-sample.html#%5B%5BTiddlyWiki%20User's%20Guide%5D%5D]]
*[[TiddlyWiki for the rest of us|http://www.giffmex.org/twfortherestofus.html]]
*[[TiddlySnip for Firefox|http://tiddlysnip.com]] An add-on for Firefox 2 that lets you directly paste tagged text and links from Firefox to your wiki. (Be careful  when editing the wiki and snipping at the same time or you'll lose stuff.) There is a version for FF 3, but you might have to GIS for it.
*[[TiddlyWiki Cheat Sheet (pdf)|http://nothickmanuals.info/doku.php/cheatsheets]]
{{threecolumns{<<timeline>>
}}}
<html>
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/DfAjK1EJHYY&rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/DfAjK1EJHYY&rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>
</html>
<html>
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/lhP7K1UVrG4&rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/lhP7K1UVrG4&rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>
</html>
<html>
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/Xs26_QAoW2o&rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/Xs26_QAoW2o&rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>
</html>
<html>
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/DmnxkR9QmQE&rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/DmnxkR9QmQE&rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>
</html>
[img[x|http://www.weatheroffice.gc.ca/clf2/images/ecfip_e.gif]] <<rssfeed asHtml http://www.weatheroffice.gc.ca/rss/city/on-143_e.xml>>
<!--{{{-->
<div class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump'><span class='tagging' macro='tagging'><span class='tagged' macro='tags'></span>
</span>
</div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
!Inline Formatting /% DEBUG: buggy (-> monospaced) %/
|!Option|!Syntax|!Output|
|bold font|{{{''bold''}}}|''bold''|
|italic type|{{{//italic//}}}|//italic//|
|underlined text|{{{__underlined__}}}|__underlined__|
|strikethrough text|{{{--strikethrough--}}}|--strikethrough--|
|superscript text|{{{^^super^^script}}}|^^super^^script|
|subscript text|{{{~~sub~~script}}}|~~sub~~script|
|highlighted text|{{{@@highlighted@@}}}|@@highlighted@@|
|preformatted text|{{{{{{preformatted}}}}}}|{{{preformatted}}}|
|coloured text|{{{@@bgcolor(#ff0000):color(#ffffff):coloured text@@}}}|@@bgcolor(#ff0000):color(#ffffff):coloured text@@|
|Escape word wikification|{{{~MiniPedia}}}|~MiniPedia instead of MiniPedia|
!Todo Lists
{{{
[ ] Sample 1
[ ] Sample 2
[ ] Sample 3
}}}
[ ] Sample 1
[ ] Sample 2
[ ] Sample 3

!Article Lists
{{{<<tiddlerList parameter1:"value1" parameter2:"value2" ...>>}}}
!!Examples
List all tiddlers tagged with "Plugin"
{{{<<tiddlerList tags:Plugin>>}}}
List newest 3 plugins which are not templates:
{{{<<tiddlerList tags:"Plugin,-Template" top:3 order:"-created">>}}}
List all tiddlers containing "Jack" in their title or text (last modified first):
{{{<<tiddlerList search:"Jack" order:"-modified">>}}}
List all tiddlers starting with "T" in a table:
{{{<<tiddlerList title:"^T" format:"table" header:"Tiddlers beginning with T" footer:"%count items listed">>}}}
Group tiddlers by first letter
{{{<<tiddlerList top:"15" group:"tiddler.title.substr(0,1)" groupTemplate:"''%group''">>}}}
Show a list of all tiddlers with creation date (overrides default item template)
{{{<<tiddlerList itemTemplate:"* %link (%created)\n">>}}}
Show all tiddlers that have the host's tiddler title in their tag list
{{{<<tiddlerList filter:"tiddler.tags.contains(currentTiddler.title)">>}}}
!Block Elements
!!Headings
{{{
!Heading 1
!!Heading 2
!!!Heading 3
!!!!Heading 4
!!!!!Heading 5
}}}
<<<
!Heading 1
!!Heading 2
!!!Heading 3
!!!!Heading 4
!!!!!Heading 5
<<<
!!Lists
{{{
* unordered list, level 1
** unordered list, level 2
*** unordered list, level 3

# ordered list, level 1
## ordered list, level 2
### unordered list, level 3

; definition list, term
: definition list, description
}}}
<<<
* unordered list, level 1
** unordered list, level 2
*** unordered list, level 3

# ordered list, level 1
## ordered list, level 2
### unordered list, level 3

; definition list, term
: definition list, description
<<<
!!Blockquotes /% DEBUG: hack %/
{{{
> blockquote, level 1
>> blockquote, level 2
>>> blockquote, level 3

<<<
blockquote
<<<
}}}
<<<
> blockquote, level 1
>> blockquote, level 2
>>> blockquote, level 3

> blockquote
<<<
!!Preformatted Text /% DEBUG: hack %/
{{{
 {{{
 preformatted (e.g. code)
 }}}
}}}
<<<
{{{
preformatted (e.g. code)
}}}
<<<
!!Tables
{{{
|CssClass|k
|!heading column 1|!heading column 2|
|row 1, column 1|row 1, column 2|
|row 2, column 1|row 2, column 2|
|>|COLSPAN|
|ROWSPAN| … |
|~| … |
|CssProperty:value;…| … |
|caption|c
}}}
''Annotation:''
* The {{{>}}} marker creates a "colspan", causing the current cell to merge with the one to the right.
* The {{{~}}} marker creates a "rowspan", causing the current cell to merge with the one above.
<<<
|CssClass|k
|!heading column 1|!heading column 2|
|row 1, column 1|row 1, column 2|
|row 2, column 1|row 2, column 2|
|>|COLSPAN|
|ROWSPAN| … |
|~| … |
|CssProperty:value;…| … |
|caption|c
<<<
!!Images /% DEBUG: to do %/
cf. [[TiddlyWiki.com|http://www.tiddlywiki.com/#EmbeddedImages]]
!Hyperlinks
* [[WikiWords|WikiWord]] are automatically transformed to hyperlinks to the respective tiddler
** the automatic transformation can be suppressed by preceding the respective WikiWord with a tilde ({{{~}}}): {{{~WikiWord}}}
* [[PrettyLinks]] are enclosed in square brackets and contain the desired tiddler name: {{{[[tiddler name]]}}}
** optionally, a custom title or description can be added, separated by a pipe character ({{{|}}}): {{{[[title|target]]}}}<br>'''N.B.:''' In this case, the target can also be any website (i.e. URL).
!Custom Styling
* {{{@@CssProperty:value;CssProperty:value;…@@}}}<br>''N.B.:'' CSS color definitions should use lowercase letters to prevent the inadvertent creation of WikiWords.
* {{{{{customCssClass{…}}}}}} /% DEBUG: buggy %/
* raw HTML can be inserted by enclosing the respective code in HTML tags: {{{<html> … </html>}}}
!Special Markers
* {{{<br>}}} forces a manual line break
* {{{----}}} creates a horizontal ruler
* [[HTML entities|http://www.tiddlywiki.com/#HtmlEntities]]
* {{{<<macroName>>}}} calls the respective [[macro|Macros]]
* To hide text within a tiddler so that it is not displayed, it can be wrapped in {{{/%}}} and {{{%/}}}.<br/>This can be a useful trick for hiding drafts or annotating complex markup.
* To prevent wiki markup from taking effect for a particular section, that section can be enclosed in three double quotes: e.g. {{{"""WikiWord"""}}}.
!Table of Contents
{{{<<showtoc>>}}}

<<showtoc>>

!More info
[[Tiddlywiki markup|http://www.tiddlywiki.org/wiki/TiddlyWiki_Markup]]
/***
!Metadata:
|''Name:''|XMLReader|
|''Description:''|This version hacked to hell by AndroidCat|
|''Version:''|2.2.0|
|''Date:''|May 19, 2007|
|''Source:''|http://sourceforge.net/project/showfiles.php?group_id=150646|
|''Author:''|BramChen (bram.chen (at) gmail (dot) com)|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License]]|
|''~CoreVersion:''|2.2.0|
|''Browser:''|Firefox 1.5+; InternetExplorer 6.0|
|''Required:''|As the param "asHtml" is used, [[NestedSlidersPlugin|http://www.tiddlytools.com/#NestedSlidersPlugin]] should be installed|
!Syntax:
{{{<<rssfeed withDesc|noDesc|asHtml rssfeed.xml|http://www.example.com/rssfeed.rdf>>}}}
!Revision History:
|''Version''|''Date''|''Note''|
|2.2.0|May 19, 2007|Atom feeds suppported|
|2.1.1|May 15, 2007|Fixed cache bug|
|2.1.0|May 10, 2007|Fixed bugs:<br>1.missing parameter 'responseText' of processResponse<br>2.Caches failed|
|2.0.0|Mar 08, 2007|Required TW 2.2.0+|
|1.5.0|Mar 04, 2007|Codes reworked, more easier reused|
|1.2.0|Jul 20, 2006|Runs compatibly with TW 2.1.0 (rev #403+)|
|1.1.0|Jul 10, 2006)|change xmlhttp.send(null)/send() to xmlhttp.send("") for more compatibility for some browsers|
|1.0.0|Mar 11, 2006|Initial release|
|~|~|This macro is reworked from RssNewsMacro, but it can be easy to extended to support different structure of xml document from rss feeds|
|~|~|You could uninstall the RssNewsMacro, but still use the original syntax,<<br>>{{{<<rssfeed  withDesc|noDesc|asHtml "rssfeed.xml"|"http://www.example.com/rssfeed.rdf">>}}}|

!Code section:
***/
//{{{
version.extensions.xmlreader = {major: 2, minor: 1, revision: 0,
	date: new Date("May 10, 2007"),
	name: "XMLReader",
	type: "Macro",
	author: "BramChen",
	source: "http://sourceforge.net/project/showfiles.php?group_id=150646"
};

config.messages.XmlReader = {
	fromCache: "^^(//from cache//)^^",
	errorInDataRetriveing: "Problem retrieving XML data: %0",
	invalidXML: "Invalid XML retrieved from: %0",
	urlNotAccessible: "Access to %0 is not allowed,\nPlease check the setting of your browser:\n1.For Gecko based, you should set the 'signed.applets.codebase_principal_support' to be true, in about:config.\n2.For IE, you should add this web site to your trust list."
};

function XmlReader(place,withDesc,xmlURL) {
	this.xmlhttp = null;
	this.place = place;
	this.xmlURL = xmlURL;
	this.withDesc = withDesc;
	this.itemStructure = {author:'author',title:'Title',link:'Link',pubDate:'PubDate',description:'Desc'};
	this.atomStructure = {email:'author',title:'Title',id:'Link',updated:'Updated',summary:'Desc'};
//	this.rsTemplate = function(){var t='';for (var i in itemStructure){t+='_'+itemStructure[i]}};
	this.rsTemplate = '_pubDate\n*_time [[_title|_link]] _author_description';
	this.items = {Elm: "%0Elm", Text: "_%0"};
	this.keyItem = "item";
	this.dateFormat = "DDD, DD MMM YYYY";
	this.groupBy = null;
	return this;
};

XmlReader.prototype.asyncGet = function(xmlURL,callback){
	if(window.Components && window.netscape && window.netscape.security && this.isCrossSite(xmlURL)){
		try {netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");}
		catch (e) {displayMessage(e.description?e.description:e.toString());}
	}
	return doHttp("GET",xmlURL,null,'text/xml',null,null,callback,null,null)
};

XmlReader.prototype.genLists = function(xml){
	var itemStructure;
	if (xml.lastChild.nodeName == 'feed'){
		this.keyItem = 'entry';
		itemStructure = this.atomStructure;
	}
	else {
		itemStructure = this.itemStructure;
	}
	var itemList = xml.getElementsByTagName(this.keyItem);
	var items = this.items;
	var rsLists='', rssItem; this.groupBy='';
	for (var i=0; i<itemList.length; i++){
		var itemElms=[],itemTexts=[];
		var rsTemplate=this.rsTemplate;
		for (var j in itemStructure){
			var itemElm = items.Elm.format([j]);
			var itemText = items.Text.format([j]);
			itemElms[itemElm] = itemList[i].getElementsByTagName(j).item(0);
			if(itemElms[itemElm]){
				var theTitle = itemStructure[j];
				var theText = (itemElms[itemElm].firstChild)?itemElms[itemElm].firstChild.nodeValue:'';
				rsTemplate=this.convertTemplate(rsTemplate,j,theText);
			}
			else {
				rsTemplate = rsTemplate.replace('_'+j, '');
			}
		}
		rsLists += rsTemplate;
	}
	return rsLists;
};
	
XmlReader.prototype.convertTemplate = function(rsTemplate,j,theText){
	switch (j){
		case 'title':
			rsTemplate = rsTemplate.replace(/_title/,theText.replace(/\[|\]/g,''));
			break;
		case 'id':
			j = 'link';
		case 'link' || 'id':
			rsTemplate = rsTemplate.replace('_'+j, theText);
			break;
		case 'updated':
			j = 'pubDate'
		case 'pubDate':
			var myText = this.dateFormatString(this.dateFormat, theText);
			if (this.groupBy == myText){
				rsTemplate = rsTemplate.replace('_'+j, '');
			}
			else{
				rsTemplate = rsTemplate.replace('_'+j, '\n!!! '+myText);
				this.groupBy = myText;
			}
			rsTemplate = rsTemplate.replace('_time', this.dateFormatString2('hh12:0mmam', theText));
			break;
		case 'author':
			var sAuthor = theText.replace(/\n/g,' ');
			sAuthor = sAuthor.trim();
			sAuthor = sAuthor.replace(/\s*\s/g, " ");
			if (this.isBanHammered(sAuthor)){
				rsTemplate = '\n*@@color(green):~BanHammered@@ @@color(red):'+sAuthor+'@@';
			}
			else{
				rsTemplate = rsTemplate.replace('_'+j, sAuthor);
			}
			break;
		case 'summary':
			j = 'description';
		case 'description':
			var regexpDesc = new RegExp("withDesc|asHtml","g");
			if (regexpDesc.exec(this.withDesc)  && theText){
				var _description = theText.replace(/\n/g,' ');
					_description =_description.replace(/<br \/>/ig,'\n');				
				if (version.extensions.nestedSliders){
					_description = ((this.withDesc == "asHtml")?"<html>"+_description+"</html>":_description);
					rsTemplate = rsTemplate.replace('_'+j,'+++[...]'+_description+'\n----\n===\n');
				}
				else {
					rsTemplate = rsTemplate.replace('_'+j,_description+'\n');
				}
			}
			else {
				rsTemplate = rsTemplate.replace('_'+j,'');
			}
			break;
	}
	return (rsTemplate);
};

XmlReader.prototype.dateFormatString = function(template, theDate){
	theDate = theDate.replace(/-/g,'/').replace(/T.UT|T.Z/ ,'');
	var dateString = new Date(theDate);
	template = template.replace(/hh|mm|ss/g,'');
	return dateString.formatString(template);
};

XmlReader.prototype.dateFormatString2 = function(template, theDate){
	theDate = theDate.replace(/-/g,'/').replace(/T.UT|T.Z/ ,'');
	var dateString = new Date(theDate);
	return dateString.formatString(template);
};

XmlReader.prototype.isCrossSite = function (url){
	var result = false;
	var curLoc = document.location;
	if (url.indexOf(":") != -1 && curLoc.protocol.indexOf("http") != -1) {
		var re=/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/;
		var rsURL=url.match(re);
		for (var i=0; i<rsURL.length; i++){
			rsURL[i]=(typeof rsURL[i] == 'undefined')?'':rsURL[i];
		}
		result = (curLoc.protocol == rsURL[1] && curLoc.host == rsURL[2] && curLoc.port == rsURL[3]);
	}
	return (!result);
};

XmlReader.prototype.isBanHammered = function (theAuthor){
	var result = false;
	var sText = store.getTiddlerText('BanHammer');
	if (sText.indexOf(theAuthor) != -1){
		result = true;
	}
	return (result);
};
//}}}
/***
!Macro rssfeed
***/
//{{{
config.macros.rssfeed = {
	cache: {},
	dateFormat: "DDD, DD MMM YYYY"
};

config.macros.rssfeed.handler = function(place,macroName,params){
	var withDesc = params[0];
	var xmlURL = params[1];
	var rss = new XmlReader(place,withDesc,xmlURL);
	rss.dateFormat = this.dateFormat;
	var processResponse = function(status,params,responseText,xmlURL,x){
		if (window.netscape){
			if (rss.isCrossSite(xmlURL)){
				try {netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");}
				catch (e) { displayMessage(e.description?e.description:e.toString()); }
			}
		}
		if (x.responseXML){
			xmlURL = xmlURL.replace(/[\?|\&]nocache.*/,'');
			config.macros.rssfeed.cache[xmlURL] = x;
			wikify(rss.genLists(x.responseXML),place);
		}
		else {
			wikify("<html>"+ x.responseText+"</html>", place);
			displayMessage(config.messages.XmlReader.invalidXML.format([xmlURL]));
		}
	};
	if (this.cache[xmlURL]) {
		wikify(config.messages.XmlReader.fromCache,place);
		var status = false;
		var x=this.cache[xmlURL];
		processResponse(status,null,x.responseText,xmlURL,x);
	}
	else {
		rss.xmlhttp = rss.asyncGet(xmlURL, processResponse);
	}
};
//}}}
Type the text for 'plugininfo'