JavaScript is turned off in your web browser. Turn it on to view TW Help

TiddlyWiki help file for beginners is loading
please wait....

Assembled and Built by Morris Gray


Douglas Adams «Hitchhiker's Guide to the Galaxy»
TwHelp -
<!--{{{-->
<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 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>

<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>

<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[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>>
These InterfaceOptions for customising TiddlyWiki are saved in your browser

Your username for signing your edits. Write it as a WikiWord (eg JoeBloggs)

<<option txtUserName>>
<<option chkSaveBackups>> SaveBackups

<<option chkAutoSave>> AutoSave
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
<<option chkAnimate>> EnableAnimations

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[Any format of a journal you want|JournalTemplate]]^^<<tiddler CloseThisOpen with: "Macros Built-in"  '« back'>>|<<toolbar editTiddler>>» ^^>>
!!!<<gradient horiz #abf #fff>>&nbsp;Goals>>

Dear Journal,

Today is @@color:#C06;''<<today "YYYY.0MM.0DD 0hh:0mm:0ss week 0WW">>''@@ and I am going to dance at the slightest sound of music I hear played.  It might sound funny but that's my goal for today.
!!!<<gradient horiz #abf #fff>>&nbsp;Tasks>>
Completed every task. Am very proud and bored.

!!!<<gradient horiz #abf #fff>>&nbsp;Day's end>>


!!!<<gradient horiz #fc3 #fff>>&nbsp;[[22SafeColors]]^^<<tiddler CloseThisOpen with: UsingColor  '« back'>>|<<toolbar editTiddler>>» ^^>>

{{borderless{
|vertical-align:bottom;<<fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.webmonkey.com/reference/Color_Charts]]&nbsp;&raquo;|

<html><div align="center"><iframe src ="http://www.webmonkey.com/reference/Color_Charts" width="100%" align="center" height="600"></iframe></div></html>}}}
{{textcenter{
''[[List of tiddlers sorted by Modified Date.|25TiddlersByModifiedDate]]''
(25 only)
}}}
{{tablecenter{
<<forEachTiddler 
 where
 'tiddler.modified'
 sortBy
 'tiddler.modified'
 descending
 write
 '(index < 25) ? "|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |"+tiddler.modified.formatString("YYYY.0MM.0DD"+" @ "+"0hh:0mm:0ss")+"|\n" : ""'

>>
}}}
<<gradient horiz #fc3 #ffffff>>&nbsp;[[2BL 702AM|2BL 702AM]]>>
{{borderless{
| <<tiddler ./player>> | &nbsp;&nbsp;&nbsp; |<<tiddler ./702am>> |
}}}

<part 702am hidden>
{{textleft{
[img[http://img299.imageshack.us/img299/5325/abclogoot5.gif]][img[http://img340.imageshack.us/img340/9374/abcbannerlocalii6.gif]]
@@color:#c06;''&raquo;''@@ [[Go to Web Site|http://abc.net.au/sydney/]]
@@color:#c06;''&bull;''&nbsp; @@ [[Media Player|http://abc.net.au/streaming/702/702stream.asx]]
@@color:#c06;''&bull;''&nbsp; @@ [[RealPlayer|http://www.abc.net.au/streaming/702/702stream.ram]]
}}}
</part>
<part player hidden>
@@color:#c06;''&bull;''@@&nbsp; @@color:#00f;Streaming ABC Radio 702AM@@[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]]
<html><embed type="video/x-ms-asf" id="player_FF" name="player_FF" displaysize="4" autosize="0"

  bgcolor="white" showcontrols="true" showtracker="1" showdisplay="1" showstatusbar="1" videoborder3d="0" width="300" height="142" src="http://abc.net.au/streaming/702/702stream.asx" autostart="true" designtimesp="5311" loop="false" volume="100"></embed></html>

</part>
[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]][[Listen 2CBA 103.2FM |mms://202.147.105.45/fm1032]] - [[Go to Web Site|http://fm1032.relate.com.au/]]
[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]] [[Listen 2CH 1170AM|http://2ch.com/cgi-bin/listenlive.pl]] - [[ Go to Web Site|http://2ch.com.au/welcome.shtml]]
<<gradient horiz #fc3 #ffffff>>&nbsp;[[2PB 630AM|2PB 630AM]]>>
{{borderless{
| <<tiddler ./player>> | &nbsp;&nbsp;&nbsp; |<<tiddler ./630am>> |
}}}

<part 630am hidden>
{{textleft{
[img[http://img143.imageshack.us/img143/3461/newsradiokv8.gif]]
@@color:#c06;''&raquo;''@@ [[Go to Web Site|http://www.abc.net.au/newsradio/]]
@@color:#c06;''&bull;''&nbsp; @@ [[Media Player|http://www.abc.net.au/newsradio/audio/winplayer.htm]]
@@color:#c06;''&bull;''&nbsp; @@ [[RealPlayer|http://www.abc.net.au/newsradio/audio/realplayer.htm]]
}}}
</part>
<part player hidden>
@@color:#c06;''&bull;''@@&nbsp; @@color:#00f;Streaming ABC News Radio 630AM @@[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]]
<html><embed type="video/x-ms-asf" id="player_FF" name="player_FF" displaysize="4" autosize="0"

  bgcolor="white" showcontrols="true" showtracker="1" showdisplay="1" showstatusbar="1" videoborder3d="0" width="300" height="142" src="http://www.abc.net.au/streaming/newsradio.asx" autostart="true" designtimesp="5311" loop="false" volume="100"></embed></html>

</part>
<<gradient horiz #fc3 #ffffff>>&nbsp;[[2RN-576AM|2RN-576AM]]>>
{{borderless{
|<<gradient horiz #abf #ffffff>> <<tiddler ./player>>>> |&nbsp;&nbsp;&nbsp;|<<gradient horiz #abf #ffffff>><<tiddler ./576am>>>> |
}}}

<part 576am hidden>

{{textleftpad5{
[img[http://img176.imageshack.us/img176/882/abcsb3.gif]][img[http://img72.imageshack.us/img72/7418/rnhn0.gif]]

@@color:#c06;''&raquo;''@@ [[Go to Web Site|http://www.abc.net.au/rn/]]
@@color:#c06;''&bull;''&nbsp; @@ [[Media Player|http://www.abc.net.au/rn/listen/wmp.htm]]
@@color:#c06;''&bull;''&nbsp; @@ [[RealPlayer|http://www.abc.net.au/rn/listen/real.htm]]
}}}
</part>
<part player hidden>
{{textleftpad5{
@@color:#c06;''&bull;''@@&nbsp; @@color:#00f;Streaming ABC Radio National 576AM@@&nbsp;~~[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]]~~

<html><embed type="video/x-ms-asf" id="player_FF" name="player_FF" displaysize="4" autosize="0"
  bgcolor="white" showcontrols="true" showtracker="1" showdisplay="1" showstatusbar="1" videoborder3d="0" width="300" height="142" src="http://www.abc.net.au/streaming/RN.asx" autostart="true" designtimesp="5311" loop="false" volume="100"></embed></html>

}}}
</part>
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("a")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fdf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fdf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"| sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
!!!Color Wheel
http://www.ficml.org/jemimap/style/color/wheel.html
!!!Color Names
http://coloria.net/bonus/colornames.htm
!!!CSS Tools awesome
[[CSS Tools|http://www.realsoftwaredevelopment.com/2006/10/the_complete_li.html]]
<<gradient horiz #fc3 #ffffff>>&nbsp;[[ABC 92.9FM|ABC 92.9FM]]>>
{{borderless{
| <<tiddler ./player>> | &nbsp;&nbsp;&nbsp; |<<tiddler ./92.9FM>> |
}}}

<part 92.9FM hidden>
{{textleft{
[img[www.abc.net.au_FM.jpg]]
@@color:#c06;''&raquo;''@@ [[Go to Web Site|http://www.abc.net.au/classic/]]
@@color:#c06;''&bull;''&nbsp; @@ [[Media Player|http://www.abc.net.au/classic/audio/streaming_wmp.htm]]
@@color:#c06;''&bull;''&nbsp; @@ [[RealPlayer|http://www.abc.net.au/streaming/classic/classicfm.ram]]
}}}
</part>
<part player hidden>
@@color:#c06;''&bull;''@@&nbsp; @@color:#00f;Streaming ABC Classic FM 92.9FM@@[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]]
<html><embed type="video/x-ms-asf" id="player_FF" name="player_FF" displaysize="4" autosize="0"

  bgcolor="white" showcontrols="true" showtracker="1" showdisplay="1" showstatusbar="1" videoborder3d="0" width="300" height="142" src="http://www.abc.net.au/streaming/classic/classicfm.asx" autostart="true" designtimesp="5311" loop="false" volume="100"></embed></html>

</part>
!!!<<gradient horiz #fc3 #fff>>&nbsp;ABetterIntro^^<<tiddler CloseThisOpen with: NestedStyles  '« back'>>|<<toolbar editTiddler>>» ^^>>
These tabs represent the nested stylesheets that are located at the bottom of ~StyleSheet.  The tabs were created using a script that makes a set of tabs based on a tag. In this case the tag is "nestedstyle".

Reference:
NestedStyleSheets
[[Create tabs with a script|tabs]]
Clicking this will load an operational ~ImportTiddlersPlugin from a remote location.
<script label="Load ImportTiddlersPlugin" title="Load
ImportTiddlersPlugin from www.TiddlyTools.com">
        var script=document.createElement('script');
        script.src='http://svn.tiddlywiki.org/Trunk/contributors/EricShulman/plugins/ImportTiddlersPlugin.js';
        script.onload=function()
{ story.displayTiddler(null,'ImportTiddlers');
displayMessage('ImportTiddlersPlugin has been loaded.'); };
        document.getElementsByTagName('head')[0].appendChild(script);
        return false;
</script> 
{{textcenter{
AS TIME GOES BY
Words and Music by Herman Hupfeld
}}}
| !Verse<br><script label="(memorize)">return Mem.start(place)</script> | !Words<br><script label="(memorize)">return Mem.start(place)</script> |
|You must remember this |a kiss is still a kiss, A sigh is just a sigh, the fundamental things apply, As time goes by.....|
|An' when two lovers woo |they still say "I love you," On that you can rely, no matter what the future brings, As time goes by......|
|Moonlight an' love songs |never out of date, Hearts full of passion, jealousy an' hate, Woman needs man and man must have his mate, That no one can deny.....|
|It's still the same old story |a fight for love an' glory, A case of do or die, the world will always welcome lovers, As time goes by.....|

!!!<<gradient horiz #fc3 #fff>>&nbsp;ASCII-HTMLTable^^<<tiddler CloseThisOpen with: Entities-Codes  '« back'>>|<<toolbar editTiddler>>» ^^>>
*<<toggleSideBar>>
*[[ Open in a new window|http://img406.imageshack.us/img406/7268/webpt9.gif]]&nbsp;&raquo;<html>

{{textjustify{
@@color:#090;
To get special characters to show on an HTML web page, special codes can be used (ascii code or word) and are interpretted by the web browser.@@

}}}<div align="center"><iframe src ="http://img406.imageshack.us/img406/7268/webpt9.gif" width="100%" align="center" height="600"></iframe></div></html>


<script src="ASCIIMathML.js"></script>
!!!!!ASCIITable ^^&bull;[[Detach this|ASCIITable]]^^
*<<toggleSideBar>>
*&nbsp;[[Open in a new window|http://img244.imageshack.us/img244/1193/asciifullyq6.gif]]&nbsp;&raquo;<html>

{{textleft{

+++[ASCII stands for American Standard Code for Information Interchange. Click for more] @@color:#090;Computers can only understand numbers, so an ASCII code is the numerical representation of a character such as 'a' or '@' or an action of some sort. ASCII was developed a long time ago and now the non-printing characters are rarely used for their original purpose. 

Below is the ASCII character table and this includes descriptions of the first 32 non-printing characters. ASCII was actually designed for use with teletypes and so the descriptions are somewhat obscure. 

If someone says they want your CV however in ASCII format, all this means is they want 'plain' text with no formatting such as tabs, bold or underscoring - the raw format that any computer can understand. This is usually so they can easily import the file into their own applications without issues. Notepad.exe creates ASCII text, or in MS Word you can save a file as 'text only'@@
===
}}}<div align="center"><iframe src ="http://img244.imageshack.us/img244/1193/asciifullyq6.gif" width="100%" align="center" height="600"></iframe></div></html>








!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[DefaultTiddlers|AboutDefaultTiddlers]]^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>

''DefaultTiddlers'' is simply a tiddler that contains the names of the tiddlers that you wish ~TiddlyWiki to load on startup; such as ''Start Here'' or ''Welcome''.  

Tiddlers listed there that contain spaces in their title should be enclosed in square brackets
 {{{[[Start Here]]}}}; in fact I enclose all tiddlers there in square brackets.

From version 2.3 you can use:
{{{<<list filter [tag[css]]>>}}} tag css* (any tag)*
{{{<<list filter "[tag[css]] [tag[list]]">>}}} tag css and tag list
{{{<<list filter "[tag[css]] [!tag[list]]">>}}} tag css and not tag list
!!!End
!Welcome to your ''tiddlyspot.com'' ~TiddlyWiki!
''[[tiddlyspot.com|http://tiddlyspot.com]]'' gives you an instant [[TiddlyWiki|http://tiddlywiki.com]] hosted on our ''tiddlyspot.com'' servers.

Want to work online?  No problem, you can go to your ''tiddlyspot.com'' URL (which is http://tiddlyspot.com/twhelp/ ) and start editing.  Click "save to web" and your changes are saved directly to your ''tiddlyspot.com'' home -- no messing about with local files or ftp.

Want to work offline?  No problem, your ''tiddlyspot.com'' ~TiddlyWiki is a real, fully functioning ~TiddlyWiki that you can save onto your hard drive or USB stick.  Use the link below to save to your local computer.  As you make changes, use the "save to disk" button to save to your local file.  Whenever you're ready to sync up again, just click "save to web".

!To save online
Enter the upload password provided when you created your ~TiddlyWiki.  Then click the "save to web" button below (or in the right side column) to save your ~TiddlyWiki.
Upload Password: <<option pasUploadPassword>>

<<upload http://tiddlyspot.com/science/store.cgi index.html . .  twhelp>>

!To save offline
To take this ~TiddlyWiki offline, click [[Download|http://tiddlyspot.com/?action=download&site=twhelp]]. Save the file locally then open it in your browser.


!Learn more about ~TiddlyWiki
Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]].  Also visit [[TiddlyWiki Guides|http://tiddlywikiguides.org]] for documentation on learning and using ~TiddlyWiki.

The [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]] is an excellent place to ask questions and get help.

!Enjoy!
We hope you like using your ''tiddlyspot.com'' ~TiddlyWiki.  Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments.

----
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;Sites mentioning or linked to TW Help>>
{{textcenter{
http://www.wholinks2me.com/}}}
*[[HeadSpace|http://headspace.esui.org/index.php/2009/02/23/p811]]
*[[NetworkWorld|http://www.networkworld.com/newsletters/web/2009/011209web1.html?page=1]] 2009
*[[LifeHacker on TWT-Notes|http://lifehacker.com/5132115/actionoutline-is-a-blazing-fast-hierarchical-note-organizer#viewcomments]] +++[more...] Free and cross platform, usable from a jumpdrive, the net, or even a floppy disk. Can even be e-mailed. Runs in your web browser.  Simple enough to be used by a class of 6-8 year-olds.
Fully customizable (With a little CSS knowledge) if you don't like the looks.
http://twt-notes.tiddlyspot.com
Oh, and it has search and tagging built in. ~Pan_theFrog    
===

*[[TiddlySpot FAQ|http://faq.tiddlyspot.com/#%5B%5BHow%20many%20sites%20do%20you%20have%3F%5D%5D]]


----
A case of copying ~Science-Matters for another purpose @@color:#C06;''&raquo; &raquo;''@@ http://projectneutral.tiddlyspot.com/ Mexico
----
+++[Мать честная... тут:]
<<<
Мать честная... тут: http://tiddlyspot.com/twhelp/ туева хуча плагов и макросов! Тока я ни фига пока не понимаю, как это всё работает...
 
Добавлено:
А с макросами-то - как работать???
 
Добавлено:
Мдааа... походила по этому сайту - мама моя родная же ж! Такие возможности, а я НИЧЕГО не понимаю! Ну почему! ПОЧЕМУ??? я не учила английский в школе!!! Дура...
----
Translation:
Mother is honest... here: http://tiddlyspot.com/twhelp/ is white-cedar khucha of plagov and macros! Current 4 not figs I thus far understand, as this all works... It is added: But macro- that - as to work??? It is added: However, Mdaaa... resembled on this site - mom my native zh! Such possibilities, but 4 nothing I understand! Well why! WHY??? 4 she did not teach English in the school!!! Fool...

<<<
===
----
+++[Taiwanese copies]
<<<
[img[http://img74.imageshack.us/img74/1894/taiwanflagtkj1.png]]&nbsp;&nbsp;@@color:#C06;''&raquo; &raquo;'' @@ Taiwanese copies
http://54nc.com/jane/twhelp.html
http://54nc.com/olivia/twhelp.html
<<<
===
----
<<<
http://www.earlham.edu/markp/socped/#%5B%5BOU%20Pedagogy%20Profiler%5D%5D
http://edubook.tiddlyspot.com/
http://tinyurl.com/cq8s8c @@color:#C06;''&raquo; &raquo;'' @@ Beautiful Chinese
http://scottlabnotebook.tiddlyspot.com/ @@color:#C06;''&raquo; &raquo;'' @@ Excellent examples of working ~TiddlyWikis
http://ashmousestocks.tiddlyspot.com/  @@color:#C06;''&raquo; &raquo;'' @@ Keep trak of your meeces :-)
http://scottlabnotebook.tiddlyspot.com/#TableTemplates @@color:#C06;''&raquo; &raquo;'' @@ TableTemplates

<<<
http://com4.iie-online.nl/ @@color:#c06;(Netherlands)@@
http://www.infodisiac.com/twiki/ http://www.infodisiac.com/
http://132.229.51.112/~zandee/news/archives/2008/04/10/tiddlywiki_als_onderwijsplatform.html (Science Matters: Een prachtig voorbeeld van een vrij complexe webstek gemaakt met ~TiddlyWiki.@@color:#C06; {Science Matters: A splendid example of a rather complex web site made with ~TiddlyWiki.}@@)
http://huili.online.googlepages.com/index.html#Welcome
http://wiki.livedoor.jp/mobilememobiz/d/GTD-GtdStyleWiki  @@color:#C06;''&raquo; &raquo;'' Japanese@@
http://tinyurl.com/ytb5er @@color:#C06;''&raquo; &raquo;'' @@ Chinese copied most of TW Help
http://leftclickblog.blogspot.com/2008/02/tiddlywiki-for-left-journoes-and.html @@color:#C06;''&raquo; &raquo;'' @@ Science Matters highlighted
http://www.answers.com/topic/tiddlywiki @@color:#C06;''&raquo; &raquo;''  answers.com @@
http://swik.net/tiddlywiki/TiddlyWiki%20Changes%20RSS/GettingStarted/cyx2
http://www.xingangfang.net/
http://groups.diigo.com/groups/Tiddlers
http://jermolene.wordpress.com/category/tiddlywiki/
http://anthologyoi.com/computers/software/tiddlywiki-is-both-good-and-bad.html
http://ieditor.tiddlyspot.com/ @@color:#C06;''&raquo; &raquo;''  TiddlyWiki在线帮助@@
http://wikis.healthwealthandmusic.co.uk/worldwideweb.html
http://www.toolblog.de/index.php?paged=3 @@color:#c06;(Deutsche)@@
http://www.missmopi.net/IMG/html/twpourtous-V1-0.html @@color:#C06;''&raquo; &raquo;'' en français@@
http://www.oraltradition.org/otclass/
http://www.ruiz-tapiador.com/ @@color:#C06;''&raquo; &raquo;''  en español @@
http://earpriority.tiddlyspot.com/ @@color:#C06;''&raquo; &raquo;''  Good start to a nice site@@
http://www.marvincable.com/lWiki/index.php?
http://wiki.famvisser.net/
http://bbz-dormagen.de/wennmann/TWGeschaeftskorrespondenz/TWGeschaeftskorrespondenz.html @@color:#c06;(Deutsche)@@
http://www.youthwork.co.uk/magazine/resourcebox/webs0708.html
http://www.appxweb.com/applications/tiddlers/tiddlers.html @@color:#c06;Interesting application site@@
http://www.comp.nus.edu.sg/~chengwe2/index2.html @@color:#c06;I suggest a comprehensive help site here TW Help@@
http://almostporn.net/ @@color:#c06;It is... almost@@
http://keith.tiddlyspot.com/ @@color:#c06;copied origami, radio, iframes@@
http://thetwilightkid.tiddlyspot.com/index.html @@color:#c06;Very heavily loaded with flash@@
http://www.healthwealthandmusic.co.uk/wikis/princewiki/worldwideweb.html @@color:#c06;twhelp - extremely comprehensive - everything you need to know@@
http://alexa.chinaz.com/Cache/2007/5/14/tiddlyspot.com@Alexa_More.asp @@color:#c06;(Chinese)@@
http://bbz-dormagen.de/wennmann/twexe/twexe.html @@color:#c06;(Deutsche Handbuch engl. = Manual ) (copied stylesheet)@@
http://conversadigital.blogspot.com/feeds/posts/default @@color:#c06;(Portuguese)@@
http://csandro.tiddlyspot.com/index.html @@color:#c06;(Italian)@@
http://dariomor.com/ @@color:#c06;(Portuguese)@@
http://de.wikipedia.org/wiki/TiddlyWiki @@color:#c06;(German - Deutsche)@@
http://earpriority.tiddlyspot.com/
http://en.wikipedia.org/wiki/Tiddlywiki
http://euicho.com/index.php?p=123 @@color:#c06;(Good description about ~TiddlyWiki)@@
[[http://faq.tiddlyspot.com/|http://tinyurl.com/2gd4st]]
http://groups.google.com/group/TiddlyWiki/msg/dc97dd924cf902fb?dmode=print
http://luceatlux.net/wikimath/wikimathhelp.html#Welcome
http://ma.gnolia.com/people/seanabrady/tags/wiki?page=3
http://technology-escapades.net/PDA.htm
http://technology-escapades.net/qualitative.htm
http://tiddlyspot.com/?page=gallery
http://tiddlywikiguides.org/index.php?title=TiddlyWiki_Guides
http://tidhelp.tiddlyspot.com/
http://tvphoto.eml.cc/ @@color:#c06;(Beautiful photography site) @@
http://www.amospalla.es/wiki/wiki.html @@color:#c06;(Spanish)@@
http://www.blinklist.com/tag/tiddlywiki/
http://www.climate-change-summer.net/
http://www.euicho.com/wiki/
http://www.fdresa.org/ettc/tiddlywiki/
http://www.giffmex.org/twfortherestofus.html
http://www.johngelling.co.uk/rgu/
http://www.kultofbubb.net/tiddlywiki/
http://www.missmopi.net/IMG/html/twpourtous-V1-0.html @@color:#c06;(French)@@
http://www.nullfeld.de/
http://www.redhotchilli.com/australian-radio-stations-online.htm
http://www.the-bizness.co.uk/wikis/princewiki/miscellany.html#TiddlyWikiHelp
http://www.tiddlywiki.com/
http://www.wikicreole.org/wiki/ListOfWikiMarkup @@color:#c06;(Text Formatting Rules across all wikis)@@
----
From: http://www.repairmanjack.com/forum/showthread.php?t=9071&page=3
That's a good description of how I think of this TiddlyWiki. I don't know everything that it can do, though. It came pre-made, and I just put my content into it. If you have a million years of free time, you could try getting info from TW Help. 

This (http://science.tiddlyspot.com/) shows what a real TiddlyWiki can do. Now do you understand how simple mine is?
Stephanie
http://everythingfpaulwilson.tiddlyspot.com
----
!!!Netherlands about Science Matters
@@color:#c06;''What the Dutch are saying about Science Matters'' @@

Wow! Een zeer mooie TW, en ook nog informatief!
(Wow! Very beautiful TW, and also still informative!)

__Another Dutch__
@@color:#04b;"Een prachtig voorbeeld van een vrij complexe webstek gemaakt met ~TiddlyWiki."<br>A splendid example of a rather complex web site made with TiddlyWiki.@@
http://132.229.51.112/~zandee/news/archives/2008/04/10/tiddlywiki_als_onderwijsplatform.html

!!!Google Groups
Josef   	

Thanks for the training!  BTW, your TwHelp site is awesome.  The
WhatsInATiddler should be required reading. 
----

BJ
I think any site that displays quotes by Douglas Adams should
automatically be required viewing, but that's just my opinion... 

!!!Haloscan
#+++[The most treasured comment yet!]
Your TW Help is absolutely marvelous. I have been a professional programmer for more than 30 years and I feel that you have created a "master Piece!"

Suggestion: Pseudo classes - CSS it would benefit me and I suspect others if you included examples of the usage of these items. Both the code and the effect it has on the page.

Again, my complements on the results of what has to have been many weeks of effort for this most useful demonstation of TW.

Regards,
IanO
===

#+++[Alexandra]
Wow that is an awesome site, so much good information and especially the color wheel is great!

Alexandra
===

!!!codecraft.proboards59.com
+++[Here's a little better tutorial: Jerry Muelver]
<<<
From:http://codecraft.proboards59.com/index.cgi?board=osp&action=display&thread=1167142626

Re: TiddlyWiki

Here's a little better tutorial:
http://tiddlyspot.com/twhelp/

Use the menu items in the left column for navigation. Remember that most TiddlyWikis open new tiddlers (pages) by appending them to the top or bottom of the displayed tiddlers, so you may have to scroll down after selecting a menu item. You can use the scroll-over-pop-up toolbar (new the top right of each tiddler) to close all the other open tiddlers if you wish. Also note the use of tabs -- horizontal menu items -- across the top of tiddles like the "Formatting Tiddlers" entry.

Click on the "MyGroup" menu item (left column) to get a nifty set of core topic tiddlers, each with a set of tabs, for a quick-reference guide.

Who'd have thunk you could do this kind of stuff in realtime in a browser with simple markup?

Jerry Muelver
Administrator
----
Re: TiddlyWiki

lol yeah, that's the part that got me clicking there in the first place...makes one wonder what the heck php, pearl, cgi and all that other stuff is fer! lol.

you're right, that tutorial is like THE tutorial to read first man...straighforward, to the point, just how I like em. ;-).

mystikshadows
Developer
<<<
===

!!!del.icio.us
http://bluedot.us/users/Information-Ecologist/dot/76880678000
jeremyruston's bookmarks on del.icio.us

~TwHelp - ~TiddlyWiki help file for beginners
Extensive ~TiddlyWiki documentation project, nicely built with good use of tabs and diagrams
to tiddlywiki help ... on dec 27

!!!Google Groups
Morris, this "experiment" is really, really, really nice! I'm pointing
all tiddlywiki inquiries on my several forums to your help page.

Did I mention that it is a really nice job?

---- Jerry Muelver 

!!!http://tiddlywiki.com/
GettingStarted
The easiest way to learn about TiddlyWiki is to use it! Try clicking on various links and see what happens - you cannot damage tiddlywiki.com or your browser. One tip is to use the close all button over on the right to clear all the displayed tiddlers and start again. Dave Gifford has prepared a new beginners guide: "~TiddlyWiki for the Rest of Us". There's also MorrisGray's excellent TW Help - ~TiddlyWiki help file for beginners.

!!!http://www.fdresa.org/ettc/tiddlywiki/
If you're still trying to get your head around what TiddlyWiki is all about:

    * Dave Gifford has prepared a new beginners guide: "TiddlyWiki for the Rest of Us".
    * There's also Morris Gray's excellent TW Help - TiddlyWiki help file for beginners.
    * If you're totally confused, you might find Leon Kilat's video tutorial useful.

!!!http://es.blinklist.com/tag/tutorial/
Descubre lo mejor tutorial y tutorial manual sitios en BlinkList
TwHelp - TiddlyWiki help file for beginners. http://tiddlyspot.com/twhelp/.
(votos:0) Marcar como spam. guardado en tiddlywiki, tutorial por rdeheras ...
es.blinklist.com

!!!Google Groups
Nice page, by the way. I hadn't checked it out before because I am now
fairly comfortable with TW, but there's tons of stuff in there I
didn't know (or things I once learned how to do, but promptly forgot).

Hope this is of some help

Andrew 
http://groups.google.com/group/TiddlyWiki/browse_thread/thread/5c4ea575bed1f504/#
----
Re the ethical considerations of linking to a site that you weren't
explicitly invited to link to, on the one hand you wouldn't think twice
about linking to any regular web page. But with a TW because it's commonly
used to for private or personal details the likelyhood of non-tech savvy
users unintentionally putting their private journal or their bank account
details online is higher. So it's kind of a <div macro="gradient #555 #888
#222"> I mean grey ish area. (I have pondered this in relation to making a
site directory on tiddlyspot).

So I hesitate before sharing this, a very beautiful TW:
http://science.tiddlyspot.com/

I believe it's one or Morris Gray's (he's a list member and author of
http://twhelp.tiddlyspot.com so I hope he doesn't mind me posting it), if so
Morris I apologise.
----
Wow, what a stunning site! Way to go, Morris! I(I will have to e-mail
him tomorrow to beg him to include it.)

Dave Gifford 

!!!RPG Forum
PostPosted: Mon Apr 16, 2007 1:13 pm    Post subject:  	Reply with quote
different wikis have different formatting rules. What may work for TiddlyWiki may not work for Matt's Age of Worms wiki.

that said, here's the site I use to figure out tiddlywiki formatting:

http://tiddlyspot.com/twhelp/
_________________
{{accordionEffect{
<<slider2 GettingStarted '1. GettingStarted'>>
<<slider2 BrowserDetails '2. BrowserDetails'>>
<<slider2 CreateTabsScript '3. CreateTabsScript'>>
<<slider2 ListTenTiddlersScript***** '4. List Ten' SiteTitle>>
}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[AccordionEffect]]^^<<toolbar editTiddler>>» ^^>>

Website http://tinyurl.com/4e4j6a

{{accordionEffect{
<<slider2 forGettingStarted GettingStarted '1. GettingStarted(click here)'>><<slider2 forStyleSheet   StyleSheet  '2. StyleSheet'>><<slider2 forSiteTitle SiteTitle '3. SiteTitle' SiteTitle>>
}}}
<html><div style=text-align:center><img src="http://img262.imageshack.us/img262/9619/deliciousxd7.png" border="0"> <a class="previewlink" href="http://del.icio.us/post?url=http%3A%2F%2Ftwhelp.tiddlyspot.com&amp;title=TiddlyWiki%20help%20file%20for%20beginners" target="_blank">Bookmark TW Help at del.icio.us here.</a></div></html>
----
[[Detach Advanced Options|AdvancedOptions]]
<<slider chkSliderOptionsPanel OptionsPanel +options 'Change TiddlyWiki advanced options'>>
----
<<option chkGenerateAnRssFeed>> GenerateAnRssFeed
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
<<option chkHttpReadOnly>> Hide Editing Features 

<<option chkSearchTitles>> Search tiddler titles
<<option chkSearchText>> Search tiddler text
<<option chkSearchTags>> Search in tiddler tags
<<option chkSearchTitlesFirst>> Show title matches first
<<option chkSearchList>> Show list of matching tiddlers
<<option chkIncrementalSearch>> Incremental (key-by-key) searching

<<option chkHoldSearches>> Hold search results
<<option chkOpenInNewWindow>> ~OpenLinksInNewWindow
<<option chkSaveEmptyTemplate>> ~SaveEmptyTemplate
<<option chkSinglePageMode>> Display one tiddler at a time
<<option chkToggleLinks>> Click open links to close
^^(override with Control or other modifier key)^^
Maximum number of lines in a tiddler edit box: <<option txtMaxEditRows>>

|>|>|>|+++[Go to tiddler »]<<gotoTiddler>>===|
|>|>|>|<<search>> |
|>|>|{{unboldlink{[[look for in|NewPathFinder]]}}} |>|>|
| <<option chkSearchTitles>> | <<option chkSearchText>> | <<option chkSearchTags>> | <<option chkHoldSearches>> |
| titles |  text  | tags | hold |
|borderlessL0|k
----
+++[Display Options]

<<option chkDisableTabsBar>> Disable the tabs bar
<<option chkSinglePageMode>> Display one tiddler at a time
<<option chkTopOfPageMode>> Open tiddlers at the top
===
----
<<permaview>>
<<tiddler MakeTiddlers>>
@@{{locLink{<<tiddler ShowUnsavedChanges>>}}}@@
<<saveChanges>>+++[QuickView »]<<tiddler RefreshStyles>>

|>|>|>|<<popup [[quick edit]] [[<<forEachTiddler where 'tiddler.tags.containsAny(["quickedit"])'$))]]>> |
|>|>|>|<<popup [[hidden tiddlers]] [[<<forEachTiddler where 'tiddler.tags.containsAny(["excludeLists","excludeSearch"])'$))]]>> |
|>|>|>|<<popup [[systemConfig tiddlers]] [[<<forEachTiddler where 'tiddler.tags.containsAny(["systemConfig"])'$))]]>> |
===
+++[TspotControls »]
Upload Password: <<option pasUploadPassword>>

<<upload http://tiddlyspot.com/twhelp/store.cgi index.html . .  twhelp>>
<html><a href="http://tiddlyspot.com/?action=download&site=twhelp" target="_blank">download from server</a></html>
[[control panel|http://tiddlyspot.com/twhelp/controlpanel.cgi?]]
[[Tspot FAQ|http://faq.tiddlyspot.com/]]
[[Comment Control|http://www.haloscan.com/members/posts.php]]
[[StatCounter|http://my2.statcounter.com/project/]]
===

<<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>>
<<slider chkAdvancedOptions AdvancedOptions 'AdvancedOptions »' 'AdvancedOptions'>>
+++[Box - CSS]
<<tiddler [[Box - CSS]]>>
===
+++[Box Properties]
<<tiddler [[Box Properties - CSS]]>>
===
----
<<tiddler  [[A Few Helpful Links - CSS]]>>
<<tiddler  [[Box - CSS]]>>
<<tiddler  [[Box Properties - CSS]]>>
<<tiddler  [[Classification Properties - CSS]]>>

<<tiddler  [[Color and Background Properties - CSS]]>>
<<tiddler  [[Cursor Property - CSS]]>>
<<tiddler  [[Font Properties - CSS]]>>
<<tiddler  [[List-style-type Property - CSS]]>>
<<tiddler  [[Margin Properties - CSS]]>>
<<tiddler  [[Positioning Properties - CSS]]>>
<<tiddler  [[Printing Properties - CSS]]>>
<<tiddler  [[Pseudo Classes - CSS]]>>
<<tiddler  [[Selectors - CSS]]>>

<<tiddler  [[Text Properties - CSS]]>>
<<tiddler  [[Units - CSS]]>>
!!!<<gradient horiz #fc3 #fff>>&nbsp; [[AllTags]]^^<<tiddler CloseThisOpen with: Tags  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{{
<<allTags excludeLists>>

}}}
{{fourcolumns{
<<allTags excludeLists>>
}}}
<<forEachTiddler
    where
       'tiddler.tags.contains("script")'
    sortBy
       'tiddler.title.toUpperCase()'
    write '" [["+tiddler.title+" ]] \"view ["+tiddler.title+"]\" [["+tiddler.title+"]] "'
        begin '"<<tabs txtMyAutoTab "'
        end '">"+">"'
        none '"//No tiddler tagged with \"script\"//"'

>>
{{textcenter scrollauto{
<<tabs "" [[Intro ]] "A" [[AlphaIntro]] [[A ]] "A" [[A]] [[B ]] "B" [[B]] [[C ]] "C" [[C]] [[D ]] "D" [[D]] [[E ]] "E" [[E]] [[F ]] "F" [[F]] [[G ]] "G" [[G]] [[H ]] "H" [[H]] [[I ]] "I" [[I]] [[J ]] "J" [[J]] [[K ]] "K" [[K]] [[L ]] "L" [[L]] [[M ]] "M" [[M]] [[N ]] "N" [[N]] [[O ]] "O" [[O]]  [[P ]] "P" [[P]] [[Q ]] "Q" [[Q]] [[R ]] "R" [[R]] [[S ]] "S" [[S]] [[T ]] "T" [[T]] [[U ]] "U" [[U]]  [[V ]] "V" [[V]] [[W ]] "W" [[W]] [[X ]] "X" [[X]] [[Y ]] "Y" [[Y]] [[Z ]] "Z" [[Z]] >>

}}}
{{textleft{
|width:45%;<<tiddler ./alphaintro>>|width:45%;<<tiddler ./alphacode>>|

<part alphaintro hidden>
!!!<<gradient horiz #abf #fff>>&nbsp;[[Find Tiddlers By Alpha|AlphaIntro]]>>
This code finds tiddlers by their first letter. Click on a tab.
	
@@position:relative;+++^50em^[Code by Saq Imtiaz]
<<<

Saq Imtiaz of
~TiddlyThemes.com ( http://tiddlythemes.com ) : a gallery of ~TiddlyWiki themes.
~TiddlySnip ( http://tiddlysnip.com ) : a firefox extension that turns ~TiddlyWiki into a scrapbook!
~LewcidTW ( http://tw.lewcid.org ) : a repository of extensions for ~TiddlyWiki
<<<
===@@
</part>

<part alphacode hidden>
{{{<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("a")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
 write
 '"|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |"+tiddler.tags+"|\n"'>>}}}

</part>
!!!<<gradient horiz #fc3 #fff>>&nbsp;AlphaTabs^^<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>
<<tiddler Alpha>>

Find all tiddlers tagged with 'A' but keep only tiddlers also tagged with 'B'.
See TaggedWith
{{{
<script>
// get all tiddlers tagged with "systemConfig"
var tids=store.getTaggedTiddlers("systemConfig");
// keep only tiddlers *also* tagged with New
var list=[];
for (var t=0; t<tids.length; t++)
   if (tids[t].isTagged("excludeSearch")) list.push(tids[t]);
// create output list of tiddler titles, one per line
var out="";
for (var t=0; t<list.length; t++) out+="#[["+list[t].title+"]]\n";
return out;

</script>
}}}
Put this in ~StyleSheet
{{{
.alt { background-color:#abf;}
}}}

<script>
// Declare and populate array with content
var arrContent = new Array;
arrContent[0] = "First row";
arrContent[1] = "Second row";
arrContent[2] = "Third row";
arrContent[3] = "Fourth row";
arrContent[4] = "Fifth row";
// Declare variable and start saving table code
var strOutput = "<table>";
for(var i=0;i<arrContent.length;i++)
{  if(i%2==0)   
       // If remainder is even, output tr with class="alt"

       {  strOutput += "<tr class='alt'><td>" + arrContent[i] + "</td>";   
  }
      else  // Else, output tr with no class
      {  strOutput += "<tr><td>" + arrContent[i] + "</td>";
       }
}
// Close table
strOutput += "</table>";     
// Write out table code to HTML page 
document.write(strOutput); </script>
!!!<<gradient horiz #fc3 #fff>>&nbsp;AlternateViews^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>

There is an excellent plugin called TaggedTemplateTweak from [[TiddlyTools|http://www.TiddlyTools.com/#TaggedTemplateTweak]] that allows you to use a different ViewTemplate or EditTemplate to view a tiddler depending on how it is tagged.
<<<
Briefly; to use this plugin, you create a new ~ViewTemplate or ~EditTemplate to represent the display for a tiddler (or set of tiddlers) that require a special presentation. These special templates have a prefix (the same name as the tag) attached to them e.g. @@color:#C06;tagnameViewTemplate@@
<<<
<<<
For example in TW Help most of the tiddlers have a bookmark icon for a quick link or bookmark.  Obviously the results of a ~TiddlyWiki search should not be bookmarked.@@color:#C06;^^[1}^^@@ So a new template was created to apply only to those tiddlers that should not display a bookmark icon.  

<<<
<<<
Those tiddlers that should not have a bookmark icon have a tag of @@color:#C06;killbookmark@@; therefore, the template to display those tiddlers is named @@color:#C06;killbookmarkViewTemplate@@ that does not contain the code to display the bookmark icon.
<<<
@@color:#C06;^^[1}^^@@''Just for fun, or possibly a warning'', TW Help has a ''systemConfigViewTemplate'' that colors the background of all plugins gradient gold try it here: Click here to see all the tags marked<<tag systemConfig>>.
|bgcolor:#fcf;Note that the bookmark icon is gone as well.  This is to prevent people bookmarking a plugin at TW Help that should properly be obtained from the sites of the authors of those plugins.|

You can obtain the plugin and complete instructions on how to use it here:
http://www.TiddlyTools.com/#TaggedTemplateTweak


!!!<<gradient horiz #abf #fff>>&nbsp;End
''One can obtain a full sized version and the program to make your own [[here|http://www.pocketmod.com/]]''

[img[http://img160.imageshack.us/img160/7850/shopweeklyfoldaf9.jpg]]
!!!<<gradient horiz #abf #fff>>&nbsp;[[Another type of slider]]^^<<tiddler CloseThisOpen with: SlidersOther  '« back'>>|<<toolbar editTiddler>>» ^^>>

''There is a very good slider plugin it's called the'' NestedSlidersPlugin that allows you to create many versatile sliders. You will see it used a lot in ~TWHelp.  

''This slider does not use tiddlers for the content.''  All the necessary information is located in the tiddler that contains the slider. They can be nested and you can create as many as you need in the same tiddler. 


NestedSlidersPlugin also has lots of other powerful features, including the ability to
display alternative 'slider labels' when the slider is opened vs. closed, like this:
{{{
+++[+Header][- Header]
   content goes here
===
}}}
The first label, "+Header", is shown when the slider is closed.  The
second label, "- Header", is shown when the slider is open. 

They can be already open on load or closed as normal.
!!!!!<<gradient horiz #aaa #fff>>&nbsp;Example 1>>
*+++[This Slider was closed on Loading (click to open)]
<<<
Its now been opened+++[click here to see the code.]
{{{
+++[This slider was Closed on loading]
You will see it used a lot in TWHelp.  
===
}}}
===
<<<
===

!!!!!<<gradient horiz #aaa #fff>>&nbsp;Example 2>>
*++++[This Slider was Opened on Loading (click to close)]

<<<
This slider is open+++[click here to see the code.]
{{{
++++[This slider was Opened on loading]
To have this slider default to being opened upon 
loading use 4 plus signs instead of three.
===
}}}
===
<<<
===

!!!!!<<gradient horiz #aaa #fff>>&nbsp;Example 3>>
@@position:relative;+++^45em^[A floating slider]
To have a slider float instead displacing the following text
use a caret (^) with the plus signs like this
{{{
+++^[slider label]
slider content
===
}}}

===  @@ 
!!!!Summary:
*~NestedSliderPlugin syntax allows you to wrap the "label" portion of
the definition in a """{{class wrapper{...}}}""", like this:
{{{
+++*{{someclass{[relevantInfo]}}}<<tiddler SideBarTabs>>=== 
}}}
+++[more about class wrapper...]

From: http://tinyurl.com/3dc9dr

> Using TiddlyPedia as my style.  The MainMenu and SideBarOptions are

> boxed with a 1px gray line.  I put my SideBarTabs in a dropdown, like
> <pre>+++*[relevantInfo]===</pre>.  It is in a separate box, and only
> has a gray line around it <u>when it is selected</u>.
> What is the CSS object that the NestedSlider is referencing here?  How
> can I change the formatting so it doesn't look funny next to the other

> two boxes?

NestedSliderPlugin syntax allows you to wrap the "label" portion of
the definition in a {{class wrapper{...}}}, like this:

+++*{{someclass{[relevantInfo]}}}<<tiddler SideBarTabs>>===

Where "someclass" is any custom or pre-defined core classname (or
combination of several classnames) that you want use.  Also, the
plugin "panel" styles use a CSS class of either "sliderPanel" OR
"floatingPanel", where "sliderPanel" is defined by the TW core, while

"floatingPanel" is added by NestedSliderPlugin.

In addition to specifying the CSS style for the panels, these class
names are also used programmatically by the plugin to provide some of
its enhanced features (such as "transient" behavior, where only one
slider remains open at a time).

Because of this, you have to be careful not to change some of the
required attributes values or the classnames themselves.  Nonetheless,
you can still 'tweak' many different CSS styles for these class
definitions to customize the look-and-feel of the sliding/floating
panels to match the rest of your page content.

The first step is to figure out what styles are being used for that
other content.  Then, enter that same CSS syntax into your
[[StyleSheet]], to override some of the styles for "sliderPanel" and/
or "floatingPanel", like this:

.sliderPanel { border:1px solid #ccc; }
   (I think this will match the TiddlyPedia look)
.floatingPanel { border:5px solid blue; background-color:green; } ===

*Using 3 plus signs {{{e.g. +++[Sliders - Nested]}}} causes the slider to remain closed on loading (i.e. click to slide open)
*Using 4 plus signs {{{e.g. ++++[Sliders - Nested]}}} causes the slider to be executed open on loading (i.e. click to close)
*Using a caret (^) with the plus signs {{{e.g. +++^[slider name etc.]}}} creates a slider that floats over text.
*For very detailed instructions see the actual plugin doumentation+++[slide it down here.]
!!!!The Nested Slider Plugin Documentation
<<tiddler NestedSlidersPlugin>>
===

*You can obtain the plugin at: http://www.TiddlyTools.com/#NestedSlidersPlugin
!!!The Lazy Slider
+++[The Lazy Slider]
<<tiddler LazySlider>>
===


!!!Tame wandering or stranded ~NestedSliders floating panel
+++[Slider position tweak]

Sometimes under certain conditions the floating slider panel can stray out of position.  By adding {{{@@position:relative;...@@}}} it resets the position of the floating panel so it stays beside its link.

{{{
@@position:relative;+++^35em^[What's In A Tiddler]
This is a tabbed list of some of the common things you can put into a tiddler.  They include text, images, CSS, HTML,  JavaScript, Plugins etc.
[[Go there...|WhatsInATiddler]]
===@@
}}}

@@position:relative;+++^35em^[What's In A Tiddler]
This is a tabbed list of some of the common things you can put into a tiddler.  They include text, images, CSS, HTML,  JavaScript, Plugins etc.
[[Go there...|WhatsInATiddler]]
===@@

===
!!!&nbsp; End

This tiddler shows some more complex effects that can be obtained with cunning use of CSS. Not all of these will work properly on all browsers because of differences in CSS implementation, but they should fail gracefully.

You can have special formatting for a specific, named tiddler like this:
{{{
#tiddlerHelloThere .title {
background-color: #99aaee;
}
}}}

Or for the first displayed tiddler:
{{{
div.tiddler:first-child .title {
font-size: 28pt;
}
}}}

Or just for the first line of every tiddler:
{{{
.viewer:first-line {
background-color: #999999;
}
}}}

Or just for the first letter of every tiddler:
{{{
.viewer:first-letter {
float: left;
font-size: 28pt;
font-weight: bold;
}
}}}

Or just for tiddlers tagged with a particular tag (note that this won't work for tags that contain spaces):
{{{
div[tags~="welcome"].tiddler .viewer {
background-color: #ffccaa;
}

div[tags~="features"].tiddler .viewer {
background-color: #88aaff;
}
}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;AnswerMacro^^<<tiddler CloseThisOpen with: 'Macros Other'  '« back'>>|<<toolbar editTiddler>>» ^^>>

''Displays answers and feedback for online questions.''

* displays an answer or other feedback either
**inserted in content like the standard slider or
**floated above existing tiddler content on a panel
* provides default feedback for correct and incorrect responses
* uses no cookies to remember its open or closed state; defaults to closed, so a new user on a shared machine always gets hidden answers
* offers three interfaces
**the standard tiddlybutton
**checkboxes for questions with multiple correct answers
**radio buttons for questions with a single correct answer
* provides option to display default feedback plus a tiddler button for more information [NEW in v1.2]

Get it here:
http://luceatlux.net/macros/answer/index.html
!!!<<gradient horiz #abf #fff>>&nbsp;End
{{tablecenter{
|>|>|>|>| !April 2007 Statistics |
|&nbsp;|Page Loads|Unique Visitors|First Time Visitors|Returning Visitors|
|Total | 4,447| 3,713| 2,596| 1,117|
|Average | 148| 124| 87| 37|
}}}
{{tablecenter{
|>|>|>|>| !August 2007 Statistics |
|&nbsp;|Page Loads|Unique Visitors|First Time Visitors |Returning Visitors|
|Total 	| 6,510| 5,488| 3,843| 1,645|
|Average| 203| 172| 120| 51|
}}}
To automatically clear the message/alert box put the following into a tiddler tagged with systemConfig:

!!!<<gradient horiz #fc3 #fff>>&nbsp;[[AutoClearMessage]]^^<<tiddler CloseThisOpen with: Macros Other  '« back'>>|<<toolbar editTiddler>>» ^^>>
/***
|Name:|AutoClearMessageMacro|
|Description|It auto closes the pop-up messages after 3 seconds.Change the 3000 to modify the time.|
***/

{{{
window.oldDisplayMessage = displayMessage;
displayMessage = function (text,linkText)
{ oldDisplayMessage(text,linkText);
setTimeout( 'clearMessage()', 3000 );}
}}}
/%
|Name|AutoRefresh|
|Source|http://www.TiddlyTools.com/#AutoRefresh|
|Version|0.6.0|
|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|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|enable/disable auto-refresh of selected content to force/prevent re-rendering when tiddler changes occur|

usage:
	<<tiddler AutoRefresh with: mode id>>

where:
	mode - (optional) is one of:
		off (or disable) - prevent refresh of rendered content (except when PageTemplate is changed!)
		on (or enable)- re-render content whenever corresponding tiddler source is changed
		force - re-render content whenever ANY tiddler content is changes (or refreshDisplay() is triggered)
	id - (optional)
		is a unique DOM element identifier on which to operate.
		If not specified, the current tiddler (or containing parent if not in a tiddler) is used.

%/<script>
	var here=story.findContainingTiddler(place);
	if (here) { // in a tiddler, get containing viewer element
		var here=place; while (here && here.className!='viewer') here=here.parentNode;
		if (!here) return; // no 'viewer' element (perhaps a custom template?)
	}
	else here=place.parentNode; // not in a tiddler, use immediate parent container

	// if DOM id param, get element by ID instead of using container
	if ("$2"!="$"+"2") var here=document.getElementById("$2");

	if (!here) return; // safety check

	var mode="$1"; if (mode=="$"+"1") mode="on";

	switch (mode.toLowerCase()) {
		case 'on':
		case 'enable':
		case 'force':
			var title=here.getAttribute("tiddler");
			if (!title) { // find source tiddler title
				var tid=story.findContainingTiddler(place);
				if (!tid) return; // can't determine source tiddler
				title=tid.getAttribute("tiddler");
			}
			here.setAttribute("tiddler",title);
			here.setAttribute("refresh","content");
			here.setAttribute("force",(mode=='force')?"true":"");
			break;
		case 'off':
		case 'disable':
			here.setAttribute("refresh","");
			here.setAttribute("force","");
			break;
	}

</script>
<html><a href="javascript:;" onclick="var tid=story.findContainingTiddler(this); if (tid) story.refreshTiddler(tid.getAttribute('tiddler'),null,true); return false;">refresh</a></html>
<script>
function calcHeight()
{
var the_height=document.getElementById('ifsample1').contentWindow.document.body.scrollHeight;//find the height of the internal page
document.getElementById('ifsample1').style.height=the_height;//change the height of the iframe
}

</script>
<html>
<iframe id="ifsample1" onLoad="calcHeight();" name="ifsample1" width="600" scrolling="no" frameborder="0" marginheight=0 marginwidth=0 src="file:///I:\TiddlySpot\TiddlyWiki2.1\ifsample1.htm" target="ifsample1"><noframes>Your browser doesn't support Iframes</noframe></iframe>

  </html>
<html><a href="javascript:;" onclick="var tid=story.findContainingTiddler(this); if (tid) story.refreshTiddler(tid.getAttribute('tiddler'),null,true); return false;">refresh</a></html>
<script>

function calcHeight()
{
var the_height=document.getElementById('ifsample1').contentWindow.document.body.scrollHeight;//find the height of the internal page
document.getElementById('ifsample1').style.height=the_height;//change the height of the iframe
}
</script>
<html>
<iframe id="ifsample1" onLoad="calcHeight();" name="ifsample1" width="600" scrolling="no" frameborder="0" marginheight=0 marginwidth=0 src="file:///I:\TiddlySpot\TiddlyWiki2.1\ifsample2.htm" target="ifsample1"><noframes>Your browser doesn't support Iframes</noframe></iframe>

  </html>
<html><div style="width:600px;">
<<forEachTiddler
    where
       'tiddler.tags.contains("ft")'
    sortBy
       'tiddler.title.toUpperCase()'
    write '" [["+tiddler.title+" ]] \"view ["+tiddler.title+"]\" [["+tiddler.title+"]] "'
        begin '"<<tabs txtMyAutoTab "'
        end '">"+">"'
        none '"//No tiddler tagged with \"ft\"//"'

>>
</div></html>
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("b")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
 write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
<html><a href="http://twhelp.tiddlyspot.com/" target="_blank" title="Click here to see who's linking to my site.">Who links to my website?</a></html>
config.options.txtBackupFolder="BackupTwHelp"; 
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[BackstageButtonConfig]]^^<<tiddler CloseThisOpen with: BackstageTweaks '« back'>>|<<toolbar editTiddler>>» ^^>>
This code in a tiddler  tagged with 'systemConfig' removes the word "backstage" and leaves only the little bent arrow. (or straight in the case of IE)
{{{
config.messages.backstage = {
	open: {text: " ", tooltip: "Open the backstage tools."},
	close: {text: " ", tooltip: "Close the backstage area"},
	prompt: "backstage: ",
	decal: {
		edit: {text: "edit", tooltip: "Edit the tiddler '%0'"}
	}
};
}}}
config.messages.backstage = {
	open: {text: " ", tooltip: "Open the backstage tools."},
	close: {text: " ", tooltip: "Close the backstage area"},
	prompt: " ",
decal: {
		edit: {text: "edit", tooltip: "Edit the tiddler '%0'"}
}
};

!!!<<gradient horiz #fc3 #fff>>&nbsp;BackstageCSS^^<<tiddler CloseThisOpen with: BackstageTweaks  '« back'>>|<<toolbar editTiddler>>» ^^>>

/***
<<tiddler RefreshStyles>>&nbsp;BackstageCSS>>/%==================================================%/
***/
#backstageArea {background-color:#00a;}
#backstageArea a {background-color:#abf;color:#000; border:none;}
#backstageArea a:hover {background:#fff; color:#f00; }
#backstageArea a.backstageSelTab {background:#abf; color:#fff;}
#backstageButton {background:transparent; }
#backstageButton a {background:transparent; color:#000; border:none;}
#backstageButton a:hover {background:#fff;color:#f00; border:none;}
#backstagePanel {background:#abf; color:#000; border-color:#fcf ;width:50em;}
#backstagePanel a {color:#00f;}
#backstagePanel a:hover {background:#eee;color:#f00;  border:#f00 solid 1px;}
.backstagePanelFooter .button {border:none; color:#fcf ;}
.backstagePanelFooter .button:hover {color:#0f0;}


#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.5; filter:'alpha(opacity:50)';}
#backstageArea { width:100%;display:none; position:relative; overflow: hidden; z-index:150; padding:0.2em 0.5em 0.2em 0.5em;margin-left:auto;margin-right:auto;}

#backstageToolbar {position:relative; width:60%;margin-left:0;margin-right:auto;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; margin-right:auto;margin-left:auto; padding:0.1em 0.5em 0.2em 0.5em;}

#backstageArea a {font-weight:normal; margin-left:0.5em; padding:0.2em 0.5em 0.2em 0.5em;}

#backstage {position:relative; width:100%;}

#backstagePanel {display:none; z-index:100; position:absolute; margin:0em 3em 0em 0.2em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
#backstageCloak {display:none; z-index:50; position:absolute; width:100%; height:100px;}

/%.contentWrapper {margin-top:0em;}%/



.popup {position: absolute;  z-index:0; font-size:.9em; padding:0; list-style-type: decimal; margin:-1.0em;}

!!!<<gradient horiz #fc3 #fff>>&nbsp;BackstageEditATiddlerTab^^<<tiddler CloseThisOpen with: BackstageTweaks  '« back'>>|<<toolbar editTiddler>>» ^^>>

Puts a tab in backstage to call up the EditATiddler tiddler in case of emergencies caused by bad code.

{{{
config.tasks.editTab = {
	text: "editTiddler",
	tooltip: "A custom backstage tab",
	content: "|width:18em;<<tiddler EditATiddler>>|"

};
config.backstageTasks.splice(config.backstageTasks.indexOf("save")+0,0,"editTab");
}}}
!!!<<gradient horiz #fc3 #fff>>[[BackstageOff]]^^<<tiddler CloseThisOpen with: BackstageTweaks  '« back'>>|<<toolbar editTiddler>>» ^^>>

Turn backstage off depending whether online or not.  Change the {{{protocol!="file:"}}} or {{{protocol!="http:"}}} to true or false
{{{
if (window.location.protocol!="file:") showBackstage=false;
}}}
|>|>|>|+++[Go to tiddler »]<<gotoTiddler>>===|
|>|>|>|<<search>> |
|>|>|{{unboldlink{[[look for in|NewPathFinder]]}}} |>|>|
| <<option chkSearchTitles>> | <<option chkSearchText>> | <<option chkSearchTags>> | <<option chkHoldSearches>> |
| titles |  text  | tags | hold |
|borderlessL0|k

<<permaview>>
<<tiddler MakeTiddlers>>@@{{locLink{<<tiddler ShowUnsavedChanges>>}}}@@<<saveChanges>>
+++[QuickView »]<<tiddler RefreshStyles>>
|>|>|>|<<popup [[quick edit]] [[<<forEachTiddler where 'tiddler.tags.containsAny(["quickedit"])'$))]]>> |
|>|>|>|<<popup [[hidden tiddlers]] [[<<forEachTiddler where 'tiddler.tags.containsAny(["excludeLists","excludeSearch"])'$))]]>> |
|>|>|>|<<popup [[systemConfig tiddlers]] [[<<forEachTiddler where 'tiddler.tags.containsAny(["systemConfig"])'$))]]>> |
===

+++[TspotControls »]
Upload Password: <<option pasUploadPassword>>

<<upload http://tiddlyspot.com/twhelp/store.cgi index.html . .  twhelp>>
<html><a href="http://tiddlyspot.com/?action=download&site=twhelp" target="_blank">download from server</a></html>
[[control panel|http://tiddlyspot.com/twhelp/controlpanel.cgi?]]
[[Tspot FAQ|http://faq.tiddlyspot.com/]]
[[Comment Control|http://www.haloscan.com/members/posts.php]]
[[StatCounter|http://my2.statcounter.com/project/]]
===

<<slider chkSliderOptionsPanel OptionsPanel {{locLink{'options »'}}} 'Change TiddlyWiki advanced options'>>
<<slider chkAdvancedOptions AdvancedOptions 'AdvancedOptions »' 'AdvancedOptions'>>

config.tasks.sidebaroptions = {
	text: "SideBarOptions",
	tooltip: "SideBarOptions in backstage",
	content: "|width:30em;<<tiddler BackstageSideBarOptions>><<tiddler SideBarTabs>>|"
};
config.backstageTasks.push("sidebaroptions");
!!!<<gradient horiz #fc3 #fff>>&nbsp;BackstageTabTweak^^<<tiddler CloseThisOpen with: BackstageTweaks  '« back'>>|<<toolbar editTiddler>>» ^^>>

This is how to add a tab to backstage; put in a configSystem tagged tiddler.

''Show ~SidebarOptions'' @@color:#C06;''&raquo; &raquo;'' @@
<<<
{{{
config.tasks.sidebaroptions = {
	text: "SideBarOptions",
	tooltip: "A custom backstage tab",
	content: "<<tiddler SideBarOptions>>"

};
config.backstageTasks.push("sidebaroptions");
}}}
<<<
''~ToggleSidebar'' @@color:#C06;''&raquo; &raquo;'' @@
<<<
{{{
config.tasks.sidebarToggle = {
     text: "Sidebar",
     tooltip: "Toggle Sidebar",
     content: "<<toggleSideBar 'Toggle Sidebar' 'show/hide' hide>>"
};

config.backstageTasks.push("sidebarToggle"); 
}}}

<<<
''Make new tiddlers'' @@color:#C06;''&raquo; &raquo;'' @@
<<<
{{{
config.tasks.makeTiddlers = {
text: "MakeTiddlers",
tooltip: "Make a variety of different tiddlers",
content: "makeTiddlers
new tiddler
new journal
new tiddler (with systemConfig)
new tiddler(with example)
new tiddler(with table)
new tiddler(with tabs)
new tiddler(with Tweak)
new tiddler(with iframe)
new tiddler(with object)
"
};
config.backstageTasks.push("makeTiddlers");
}}}
<<<
<<tabs tabsCookie 
[[BackstageButtonConfig ]] "" [[BackstageButtonConfig]]
[[BackstageCSS ]] "" [[BackstageCSS]]
[[BackstageTabTweak ]] "" [[BackstageTabTweak]]
[[BackstageEditATiddlerTab ]] "" [[BackstageEditATiddlerTab]]   
[[BackstageSidebarTab ]] "" [[BackstageSidebarTab]]
[[BackstageOff  ]] "" [[BackstageOff]]
>>
http://newportcommunitybank.tiddlyspot.com/
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.floppymoose.com/]]&nbsp;&raquo;|
----
<html><div align="center"><iframe  src ="http://www.floppymoose.com/" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[BidiXPlugins]]^^<<tiddler CloseThisOpen with: ThirdPartyPlugins  '« back'>>|<<toolbar editTiddler>>» ^^>>
Plugins at http://tiddlywiki.bidix.info/BidiXTW.html

|bgcolor(#8cf): @@color(#000080): ''Titles'' @@ |bgcolor(#8cf): @@color(#000080):  ''Size'' (bytes)@@ |bgcolor(#8cf): @@color(#000080): ''Tags''@@ |
|[[.BidiX.Ajax]]| 1419|systemConfig,systemLib,GroupAuthoring,systemConfigDisable|
|[[ConfigTweaks]]| 326|systemConfig|
|[[GenerateRssHijack]]| 5169|systemConfig,plugin,RSSExtensions|
|[[GroupAuthoringPlugin]]| 8767|systemConfig,GroupAuthoring,plugin|
|[[HideWhenMacro]]| 729|systemConfig,SimonBaird|
|[[HttpGetMacro]]| 2006|systemConfig,GroupAuthoring,plugin|
|[[InlineJavascriptPlugin]]| 10214|systemConfig,EricShulman|
|[[LegacyStrikeThroughPlugin]]| 827|systemConfig,systemConfigDisable|
|[[LoadRemoteFileHijack]]| 1098|ProxyService,systemConfig,toRSS,plugin|
|[[NestedSlidersPlugin]]| 16536|systemConfig,EricShulman|
|[[NewHereCommand]]| 1447|systemConfig,TagglyTagging,Plugins|
|[[NoSaveOnDiskOverHttpHijack]]| 1071|plugin,systemConfig,systemConfigDisable,toRSS|
|[[PositionAdsense]]| 704|systemConfig,plugin|
|[[QuickOpenTagPlugin]]| 3549|systemConfig,TagglyTagging,Plugins|
|[[RSSReaderPlugin]]| 11226|systemConfig,plugin,RSSExtensions|
|[[RenameTagsPlugin]]| 2467|systemConfig,Plugins,TagglyTagging|
|[[RunMacroIfTagged]]| 1073|systemConfig,SimonBaird|
|[[SplashScreenPlugin]]| 2382|SaqImtiaz,systemConfig|
|[[TagglyListPlugin]]| 17405|TagglyTagging,systemConfig,Plugins|
|[[TestMacro]]| 1218|systemConfig,Cross-SubDomain|
|[[UploadPlugin]]| 24149|systemConfig,Upload,plugin|
|[[UploadToFileMacro]]| 4027|systemConfig,plugin|
First: Bill
Last: Jones
Born: 1954-04-01
Place: Girltown, Indiana, USA
Father: Big Lastname
Mother: Mrs Lastname
!!!<<gradient horiz #fc3 #fff>>&nbsp;THISTIDDLERTITLEHERE^^<<tiddler CloseThisOpen with: HOMETABSNAMEHERE  '« back'>>|<<toolbar editTiddler>>» ^^>>

!!!!!<<gradient horiz #abf #fff>>&nbsp;Example>>

!!!!!<<gradient horiz  #abf #fff>>&nbsp;Code>>

!!!!!<<gradient horiz #abf #fff>>&nbsp;@@color:#fff;End@@>>
<html><hide linebreaks>

</html>
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;Open in a new window[img[Open outside link in a new window|http://img229.imageshack.us/img229/1687/extlink7226466sx5.gif][TYPE URL HERE]]|
----

<html><div align="center"><iframe  src ="TYPE URL HERE" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
<html><div align="center"> <object width="425" height="350"><param name="movie" value="TYPE URL HERE"></param><param name="wmode" value="transparent"></param><embed src="TYPE URL HERE" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></div></html>
<<slider "chkCookieName" "TiddlerName" "title text" "tooltip" >>
{{niceTable{
|!Title/link|[[TW Help|http://twhelp.tiddlyspot.com]]|
|!Creator|Morris Gray|
|!Subject matter|Tutorial|
|!Description/notes|A beginners to intermedate level help file|
|!Screenshot|[img[http://www.giffmex.org/twinactionimgs/twhelp.png]]|
}}}
<<tabs tabsCookie [[Intro ]] "tooltip 1" [[MakeTabsIntro]]  [[TabTwoName]] "" [[tiddler two]]  [[TabThreeName]] "" [[Tiddler three]] [[TabFourName]] "" [[Tiddler four]] >>
----
&darr;+++[Create a tiddler like this:]
----
@@color(#C06):&nbsp;''Title:''@@<html><input type="text" size="40" value="" /></html>

@@color(#00f):''Body:''@@<html><textarea rows="10" cols="30"></textarea>  </html>
@@color(#0a0):''Tags:''@@<html><input type="text" size="40" value="systemConfig " /></html>

===

----
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;BlockQuotes^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>
''To emphasize text that needs to stand out you can use ~BlockQuotes.''
!!!!!<<gradient horiz #aaaaaa #ffffff>>&nbsp;Example>>
>''Eheu, litteras istas reperire non possum''^^[1]^^

>>''Estne tibi forte magna feles fulva et planissima''^^[2]^^
>>''Etiam capillus unus habet umbram''^^[3]^^
>>>^^[1]^^Unfortunately, I can't find those particular documents
>>>^^[2]^^Do you by chance happen to own a large, yellowish, very flat cat?
>>>^^[3]^^Even one hair has a shadow.
>>>level 3
>>level 2
>level 1

!!!!!<<gradient horiz #aaaaaa #ffffff>>&nbsp;Code>>
{{{
>''Eheu, litteras istas reperire non possum''^^[1]^^
>>''Estne tibi forte magna feles fulva et planissima''^^[2]^^
>>''Etiam capillus unus habet umbram''^^[3]^^
>>>^^[1]^^Unfortunately, I can't find those particular documents
>>>^^[2]^^Do you by chance happen to own a large, yellowish, very flat cat?

>>>^^[3]^^Even one hair has a shadow.
>>>level 3
>>level 2
>level 1
}}}
*@@color(#00A000):''Tip:'' The angle brackets (>) must be the first character on the left margin.@@




<<relLink "_phone" "Go to Phone">>

<html><ul><li><img src="social/delicious.png" border="0"> <a class="previewlink" href="http://del.icio.us/post?url=http%3A%2F%2Ftwhelp.tiddlyspot.com&amp;title=TiddlyWiki%20help%20file%20for%20beginners" target="_blank">Add to del.icio.us</a></li><li><img src="social/digg.png" border="0"> <a class="previewlink" href="http://digg.com/programming/Ultimate_Website_Snapshot_Service">Add to Digg</a></li><li><img src="social/reddit.png" border="0"> <a class="previewlink" href="http://reddit.com/submit?url=http://websnapr.com&amp;title=Website%20Snapshot%20Service">Add to reddit</a></li><li><img src="social/mister-wong.gif" border="0"> <a class="previewlink" href="http://www.mister-wong.de/add_url/" onclick="location.href='http://www.mister-wong.de/index.php?action=addurl&bm_url='+encodeURIComponent(location.href)+'&bm_description='+encodeURIComponent(document.title);return false" title="Add to Mister Wong" target="_top">Add to Mister Wong</a></li><li><img src="social/furl.png" border="0"> <a class="previewlink" href="http://furl.net/storeIt.jsp?t=Website%20Snapshot%20Service&amp;u=http://websnapr.com">Add to Furl</a></li></ul></html>
!!!<<gradient horiz #fc3 #fff>>&nbsp;BookMarklets^^<<tiddler CloseThisOpen with: Scripts  '« back'>>|<<toolbar editTiddler>>» ^^>>
''These bookmarklets allow you to'' drag them to your browser bookmarks toolbar.

PluginIdentScript allows you to see a list of plugins installed in any ~TiddlyWiki
ScriptIdentScript allows you to see a list of scripts installed in any ~TiddlyWiki

''Drag them to your bookmarks toolbar now and try them.''
!!!!!<<gradient horiz #abf #fff>>&nbsp;@@color:#fff;End@@>>
{{tablecenter table{


<script>

if (!window.story) window.story=window;var url=store.getTiddlerText("SiteUrl");
var title=story.findContainingTiddler(place).id.substr(7);
var permalink=encodeURIComponent(String.encodeTiddlyLink(title));
return "|bookmark this» » [["+title+"|"+url+"#"+permalink+"]]|";

</script>

}}}
<html><a href="javascript:;" onclick="var tid=story.findContainingTiddler(this); if (tid) story.refreshTiddler(tid.getAttribute('tiddler'),null,true); return false;">refresh</a></html><html><table width="96%" style="border:none;margin:1px;background:transparent;clear:both;"><iframe id="ifsample1" src="http://www.symbex.net.au/Wiki/ifsample1.htm" width="100%" height="0" scrolling="no" frameborder="0" allowtransparency style="border:none;"></iframe></table></html>

/%http://www.symbex.net.au/Wiki/ifsample1.htm file:///I:\TiddlySpot\TiddlyWiki2.1\ifsample1.htm%/

!!!<<gradient horiz #fc3 #fff>>&nbsp;BorderlessTable^^<<tiddler CloseThisOpen with: Tables  '« back'>>|<<toolbar editTiddler>>» ^^>>
!!!!Method1
Put in StyleSheet
{{{.viewer table.borderless,.viewer table.borderless * {border: 0;}}}}

Put in tiddler
{{{
|!column1|column2|
|borderless|k
}}}
!!!!Method2
!!!!!1: Put this in your ~StyleSheet for a ''centered'' borderless table
(Change padding and alignment as required)
<<<
{{{.borderless, .borderless table, .borderless td, .borderless tr, .borderless th, .borderless tbody
	{ border:0 !important; margin:0 !important; padding:2px !important; td.vertical-align:top !important;margin-left: auto !important; margin-right: auto !important;}}}}
<<<

!!!!!1a: Put this in your ~StyleSheet for a ''left aligned'' borderless table.
(Notice the the only thing changed is the margin-left has been set to zero) 
<<<
{{{.borderlessL, .borderlessL table, .borderlessL td, .borderlessL tr, .borderlessL th, .borderlessL tbody
	{ border:0 !important; margin:0 !important; padding:2px !important; td.vertical-align:top !important;margin-left: 0 !important; margin-right: auto !important;}}}}
<<<

!!!!!Example
|bgcolor:#abf;width:30%; Normal Border |bgcolor:#abf;width:30%; Surround your table like this |bgcolor:#abf; Borderless table |
|vertical-align:middle; <<tiddler ./normalborder>> |<<tiddler ./noborder>> |vertical-align:middle; <<tiddler ./borderExp>>|


<part normalborder hidden>
|!Col1|!Col2|!Col3|
|r1c1| r1r2c2 |r1c3|
|r2c1|~|r2c3|

</part>
<part noborder hidden>
{{{
{{borderless{
}}}
{{{
|!Col1|!Col2|!Col3|
|r1c1| r1r2c2 |r1c3|
|r2c1|~|r2c3|
}}}
{{{
}}}
}}}
!!!a better way
Add the custom class to the bottom of the table like this:
{{{
|!Col1|!Col2|!Col3|
|r1c1| r1r2c2 |r1c3|
|r2c1|~|r2c3|
|borderless|k
}}}
0r
{{{
|borderlessL|k
}}}
</part>
<part borderExp hidden>

{{borderless{
|!Col1|!Col2|!Col3|
|r1c1| r1r2c2 |r1c3|
|r2c1|~|r2c3|
}}}
</part>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[BorderlessTables]]^^<<tiddler CloseThisOpen with: Tables  '« back'>>|<<toolbar editTiddler>>» ^^>>

Put in StyleSheet
{{{.viewer table.borderless,.viewer table.borderless * {border: 0;}}}}

Put in tiddler
{{{
|!column1|column2|
|borderless|k
}}}
''Table heading links to w3schools references on this subject.''
| !The CSS Box [[Border|http://www.w3schools.com/css/css_border.asp]] [[Margin|http://www.w3schools.com/css/css_margin.asp]] [[Padding|http://www.w3schools.com/css/css_padding.asp]] |
<html>
<div style="color:black;background-color:#FFFFCC;padding:1em;border:thin solid black;text-align:center;width=30%">margin
<div style="color:white;background-color:black;padding:1em;border:thin solid black;text-align:center;width=100%">border
<div style="color:black;background-color:#FFCC99;padding:1em;border:thin solid black;text-align:center;width=100%">padding

<div style="color:black;background-color:white;border:thin solid black;text-align:center;width=100%">content<br/>
<div style="float:left">&lt;-</div><div style="float:right">-&gt;</div>CSS 'width'
</div>

</div>
</div>
</div>
</html>
''Table heading links to w3schools references on this subject.''
|!Box Properties| ![[Border|http://www.w3schools.com/css/css_border.asp]] | ![[Margin|http://www.w3schools.com/css/css_margin.asp]] | ![[Padding|http://www.w3schools.com/css/css_padding.asp]] |
| ''Property'' | ''Valid Values'' | ''Example'' | ''Inherited?'' |
| margin-top |//length//, //percentage//, auto | margin-top:5px | N |
| margin-right |//length//, //percentage//, auto | margin-right:5px | N |
| margin-bottom |//length//, //percentage//, auto | margin-bottom:1em | N |
| margin-left |//length//, //percentage//, auto | margin-left:5pt | N |
| margin |//length//, //percentage//, auto {1,4}| margin: 10px 5px 10px 5px | N |
| padding-top |//length//, //percentage// | padding-top:10%| N |
| padding-right |//length//, //percentage// | padding-right:15px | N |
| padding-bottom |//length//, //percentage// | padding-bottom:1.2em | N |
| padding-left |//length//, //percentage// | padding-left:10pt; } | N |
| padding |//length//, //percentage// {1,4}| padding: 10px 10px 10px 15px | N |
| border-top-width |thin, medium, thick, //length// | border-top-width:thin | N |
| border-right-width |thin, medium, thick, //length// | border-right-width:medium | N |
| border-bottom-width |thin, medium, thick, //length// | border-bottom-width:thick | N |
| border-left-width |thin, medium, thick, //length// | border-left-width:15px | N |
| border-width |thin, medium, thick, //length// {1,4}| border-width: 3px 5px 3px 5px | N |
| border-top-color |//color // | border-top-color:navajowhite | N |
| border-right-color |//color// | border-right-color:whitesmoke | N |
| border-bottom-color |//color// | border-bottom-color:black | N |
| border-left-color |//color// | border-left-color:#C0C0C0 | N |
| border-color |//color// {1,4} | border-color: green red white blue; } | N |
| border-top-style |none, solid, double, groove, ridge, inset, outset | border-top-style:solid | N |
| border-right-style |none, solid, double, groove, ridge, inset, outset | border-right-style:double | N |
| border-bottom-style |none, solid, double, groove, ridge, inset, outset | border-bottom-style:groove | N |
| border-left-style |none, solid, double, groove, ridge, inset, outset | border-left-style:none | N |
| border-style |none, solid, double, groove, ridge, inset, outset | border-style:ridge; }| N |
| border-top |//border-width//, //border-style//, //border-color// | border-top: medium outset red | N |
| border-right |//border-width//, //border-style//, //border-color// | border-right: thick inset maroon | N |
| border-bottom |//border-width//, //border-style//, //border-color// | border-bottom: 10px ridge gray | N |
| border-left |//border-width//, //border-style//, //border-color// | border-left: 1px groove red | N |
| border |//border-width//, //border-style//, //border-color// | border: thin solid blue | N |
| float |none, left, right | float:none | N |
| clear |none, left, right, both | clear:left | N |
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.afb.org/braillebug/braille_print.asp]]&nbsp;&raquo;|

<html><div align="center"><iframe src ="http://www.afb.org/braillebug/braille_print.asp" width="100%" align="center" height="600"></iframe></div></html>}}}
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://users.qldnet.com.au/~ajay/FileXch/B.pdf]]&nbsp;&raquo;|
----
<html><div align="center"><iframe  src ="http://users.qldnet.com.au/~ajay/FileXch/B.pdf" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
{{borderless{
<html><hide linebreaks><TABLE width=100px border="0" align=center><tr><TD><font size="-1"><font size="-1"><FORM action on="file:///a:/"><INPUT type=submit value="a:\ drive" name="button" class="btn"></FORM></TD><TD><font size="-1"><FORM action="file:///c:/"><INPUT type=submit value="c:\ drive" name="button" class="btn" name=submit2></FORM></TD><TD><font size="-1"><FORM action="file:///d:/"><INPUT type=submit value="d:\ drive" name="button" class="btn" name=submit2></FORM></TD><TD><font size="-1"><FORM action="file:///e:/"><INPUT type=submit value="e:\ drive" name="button" class="btn" name=submit2></FORM></TD><TD><font size="-1"><FORM action="file:///f:/"><INPUT type=submit value="f:\ drive" name="button" class="btn" name=submit2> </FORM></TD></font></tr><tr><TD><font size="-1"><FORM action="file:///g:/"><INPUT type=submit value="g:\ drive" name="button" class="btn" name=submit2></FORM></TD><TD><font size="-1"><FORM action="file:///h:/"><INPUT type=submit value="h:\ drive" name="button" class="btn" name=submit2></FORM><TD><font size="-1"><FORM action="file:///i:/"><INPUT type=submit value="i:\ drive" name="button" class="btn" name=submit2></FORM></TD><TD><font size="-1"><FORM action="file:///j:/"><INPUT type=submit value="j:\ drive" name="button" class="btn" name=submit2></FORM></TD><TD><font size="-1"><FORM action="file:///k:/"><INPUT type=submit value="k:\ drive" name="button" class="btn" name=submit2></FORM></TD></TR></TABLE></html>

}}}
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|file:///I:/TiddlySpot/Tiddlywiki2.1/BrowseDrives.htm]]&nbsp;&raquo;|
<html><div align="center"><<tiddler BrowseFilesTry>><iframe src ="file:///I:/TiddlySpot/Tiddlywiki2.1/BrowseDrives.htm" width="100%" align="center" height="800"></iframe></div></html>}}}
<html><div align="center"><FORM name=form1><TABLE align="center" border="0"><TBODY><TR BGCOLOR="#CCC"><TD ALIGN=CENTER STYLE="padding-left: 5px; padding-top: 2px; padding-bottom: 2px;">Open File</TD></TR><TR BGCOLOR="#CCCCCC"><TD ALIGN=CENTER STYLE="padding-left: 5px; padding-top: 2px; padding-bottom: 5px;"><FONT face="Arial, Helvetica, sans-serif" color="#ffffff" size=-1></FONT><INPUT type=file name=cmuds> <INPUT onclick="whatFile()" target="_blank" type=button value=OpenFile name=button></TD></TR></TBODY></TABLE></FORM></div></html>

''NOTE: this only works offline.''
This requires an additional tiddler 'WhatFileScript' containing this script, tagged with 'systemConfig' and http://www.tiddlytools.com/#InlineJavascriptPlugin
{{{
function whatFile() {
window.open ('file:///' + document.form1.cmuds.value)
}
}}}
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>>|<<tiddler NavButtons>>|<<toggleSideBar>>|
----
@@position:relative;+++^45em^[See the code here]...
<<<
{{{
<html><hide linebreaks>
<!-- extra psuedo-tag from HTMLFormattingPlugin -->

	<form target="theFrameID">
	<input type=file name=whichfile>
	<input type=button value="open"
		onclick="var f=this.form;
			f.action='file:///'+f.whichfile.value;
			try { f.submit(); }
			catch(e) { alert(e.description?e.description:e.toString()); }">
	</form>

	<iframe src="" name="theFrameID" id="theFrameID"
		style="background:#fff;width:100%;height:600px">
	</iframe>
</html>

}}}
<<<
===@@

<html><hide linebreaks>
<!-- extra psuedo-tag from HTMLFormattingPlugin -->
	<form target="theFrameID">
	<input type=file name=whichfile>
	<input type=button value="open"

		onclick="var f=this.form;
			f.action='file:///'+f.whichfile.value;
			try { f.submit(); }
			catch(e) { alert(e.description?e.description:e.toString()); }">
	</form>
	<iframe src="" name="theFrameID" id="theFrameID"
		style="background:#fff;width:100%;height:600px">

	</iframe>
</html>
}}}
!!!!<<gradient horiz #fc3 #ffffff>>&nbsp;BrowseForFiles^^<<tiddler CloseThisOpen with: NavigationWithTW  '« back'>>|<<toolbar editTiddler>>» ^^>>

<html><div align="center"><FORM name=form1><INPUT type=file name=cmuds> <INPUT onclick="whatFile()" type=button value=OpenFile name=button></FORM></div></html>
''Note:'' You can see your files but can only open them after you save a ~TiddlyWiki to your disk drive.
!!!!<<gradient horiz #abf #ffffff>>&nbsp;Code for Form>>

{{{<html><div align="center"><FORM name=form1><INPUT type=file name=cmuds> <INPUT onclick="whatFile()" type=button value=OpenFile name=button></FORM></div><br></html>}}}
!!!!<<gradient horiz #abf #ffffff>>&nbsp;Code for Script>>

<<tiddler WhatFileScriptDemo>>
''Then save the ~TiddlyWiki and reload.''
!!!End

<html><hide linebreaks> <!-- extra psuedo-tag from HTMLFormattingPlugin -->
	<form target="theFrameID">
	<input type=file name=whichfile>

	<input type=button value="open"
		onclick="var f=this.form;
			f.action='file:///'+f.whichfile.value;
			try { f.submit(); }
			catch(e) { alert(e.description?e.description:e.toString()); }">
	</form>
	<iframe src="" name="theFrameID" id="theFrameID"

		style="background:#fff;width:100%;height:400px">
	</iframe>
</html>
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[Browse Drives|BrowseYourHardDisk]]^^<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>

''These methods work after you save a ~TiddlyWiki to your disk drive''
{{borderless{
|<html><FORM action="file:///c:/" target="_blank"><INPUT type=submit value="c:\ drive" name="button" class="btn" name=submit2></FORM></html>|<html><FORM action="file:///d:/" target="_blank"><INPUT type=submit value="d:\ drive" name="button" class="btn" name=submit2></FORM></html>|<html><FORM action="file:///e:/" target="_blank"><INPUT type=submit value="e:\ drive" name="button" class="btn" name=submit2></FORM></html>|<html><FORM action="file:///f:/" target="_blank"><INPUT type=submit value="f:\ drive" name="button" class="btn" name=submit2></FORM></html>|
}}}
!!!<<gradient horiz #abf #ffffff>>&nbsp;Code>>

{{{|<html><FORM action="file:///c:/" target="_blank"><INPUT type=submit value="c:\ drive" name="button" class="btn" name=submit2></FORM></html>|<html><FORM action="file:///d:/" target="_blank"><INPUT type=submit value="d:\ drive" name="button" class="btn" name=submit2></FORM></html>|<html><FORM action="file:///e:/" target="_blank"><INPUT type=submit value="e:\ drive" name="button" class="btn" name=submit2></FORM></html>|<html><FORM action="file:///f:/" target="_blank"><INPUT type=submit value="f:\ drive" name="button" class="btn" name=submit2></FORM></html>|}}}


!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[Browse your computer drives in an iframe|BrowseYourHardDisk]]>>

@@color(#c06):Here is something for someone who hates to leave their ~TiddlyWiki.@@

This only works when ~TiddlyWiki is running on your local disk drive BrowseDrives

''Create a normal html web page like this.'' You can create a button for each of your drives. Save it where you wish e.g. C:/~BrowseDrives.htm

{{{<HTML><HEAD><TITLE>BrowseDrives.htm</TITLE></HEAD>
<BODY><FORM action="file:///c:/"><INPUT type=submit value="c:\ drive" name="button" class="btn" name=submit2></FORM></BODY></HTML>}}}

''Now create a tiddler with an iframe in it.''

{{{

<html><div align="center"><iframe src ="file:///C:/BrowseDrives.htm" width="100%" align="center" height="600"></iframe></div></html>

}}}

Clicking on the button will bring up your computer directory in the iframe and you can browse your whole hard drive.  If you are using ~FireFox set up right-click @@color(#C06):"view source with"^^&dagger;^^@@ with your favourite editors.  Now if you see a file that needs editing simply right click and ''view frame source with'' then edit the file with the appropriate editor. @@color(#C06):Note: Make sure you click ''view __frame__ source with'' or you will get the ~TiddlyWiki code.@@
|@@color(#C06):^^&dagger;^^@@ ''~ViewSourceWith'' is an add-on for ~FireFoxYou can get it here https://addons.mozilla.org/en-US/firefox/addons/versions/394 |
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;Getting fancy with browsing>>
''You can get quite carried away with this'' and add some navigation buttons with NavButtons; add styling to the buttons with ButtonStyle; Expand the viewing window <<toggleSideBar>> or move the whole thing outside of the ~TiddlyWiki into a new window or tab..
!!!&nbsp;The full monty
{{{
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|TYPE URL HERE]]&nbsp;&raquo;|

<html><div align="center"><iframe src ="TYPE URL HERE" width="100%" align="center" height="600"></iframe></div></html>}}}
}}}
For the full monty you will need:
Put your button html page in the two places marked "TYPE URL HERE"

http://tw.lewcid.org/#ToggleSideBarMacro
To tidy it up put this in ~StyleSheet.
{{{
.borderless, .borderless table, .borderless td, .borderless tr, .borderless th, .borderless tbody
	{ border:0 !important; margin:0 !important; padding:0 !important; td.vertical-align:top !important;margin-left: auto !important; margin-right: auto !important; padding:7px !important;}
}}}

!!!&nbsp;End of browse drives
<script>
document.write("Browser: ")
document.write(navigator.appName + "<br>")

document.write("Browserversion: ")
document.write(navigator.appVersion + "<br>")

document.write("Code: ")
document.write(navigator.appCodeName + "<br>")

document.write("Platform: ")
document.write(navigator.platform + "<br>")

document.write("Cookies enabled: ")
document.write(navigator.cookieEnabled + "<br>")

document.write("Browser's user agent header: ")
document.write(navigator.userAgent + "<br>")

</script>
<script>
var x = navigator;
document.write("CodeName=" + x.appCodeName);
document.write("<br />");
document.write("MinorVersion=" + x.appMinorVersion);
document.write("<br />");
document.write("Name=" + x.appName);
document.write("<br />");
document.write("Version=" + x.appVersion);
document.write("<br />");
document.write("CookieEnabled=" + x.cookieEnabled);
document.write("<br />");
document.write("CPUClass=" + x.cpuClass);
document.write("<br />");
document.write("OnLine=" + x.onLine);
document.write("<br />");
document.write("Platform=" + x.platform);
document.write("<br />");
document.write("UA=" + x.userAgent);
document.write("<br />");
document.write("BrowserLanguage=" + x.browserLanguage);
document.write("<br />");
document.write("SystemLanguage=" + x.systemLanguage);
document.write("<br />");
document.write("UserLanguage=" + x.userLanguage);

</script>
<script>
if (document.all)
var version=/MSIE \d+.\d+/
if (!document.all)
document.write("You are using "+navigator.appName+" "+navigator.userAgent)
else
document.write("You are using "+navigator.appName+" "+navigator.appVersion.match(version))
</script>
<html><hide linebreaks>
<style>
.rolodex table {
border: 0px solid;
background-color:#FFFF99;
}

.rolodex tr, .rolodex td {
border: 0px solid;
}
</style>
<span class="rolodex">
 <table>
 <tr>

 <td align="right"><b>Project:</b></td>
 <td ><select name=project ><option><option>DataTiddlerProject<option>ForEachTiddlerProject<option>FormTiddlerProject</select ></td>

 <td align="right"><b>Reported By:</b></td>
 <td ><input name=reportedBy type=text style="width:100%" /></td>
 <td align="right"><b>Date:</b></td>

 <td ><input name=reportDate type=text style="width:100%" /></td>
 </tr>
 <tr>
 <td colspan="6"><sub><b>Description:</b></sub><br>

 <textarea name=description rows="8" cols="40" style="width:100%" ></textarea></td></tr>
 <tr>

 <td colspan="6"><sub><b>Cause:</b></sub><br>
 <textarea name=cause rows="6" cols="40" style="width:100%" ></textarea></td></tr>

 <tr>
 <td align="right"><b>State:</b></td>
 <td ><select name=state ><option>new<option>in progress<option>info pending<option>fixed<option>closed</select ></td>

 <td align="right"><b>Fixed in:</b></td>
 <td colspan = "4"><input name=fixedIn type=text style="width:100%" /></td></tr>

</table>
</span>
</html>
!!!Preview
<<tiddler [[Macros Built-in/macbuiltin]]>>
/***
!!!<<gradient horiz #fc3 #fff >><<tiddler RefreshStyles>>&nbsp;ButtonStyle>>/%==================================================%/
***/


input.btn{
   color:#008;
   font-family:Trebuchet MS,aerial,helvetica,sans-serif;
   font-size:100%;
   font-weight:normal;
   background-color:#eee;
   background:url("http://img520.imageshack.us/img520/8688/mainmenugray7ef.gif") repeat-x top left;top left;
   border:1px solid;
   border-top-color:#009;
   border-left-color:#009;
   border-right-color:#009;
   border-bottom-color:#009;
   -moz-border-radius : .25em 0.25em 0.25em 0.25em;
}


input.btnhov{
   color:#a00;
   background:#fff;
   background:url("http://img520.imageshack.us/img520/8688/mainmenugray7ef.gif") repeat-x top left;top left;
   border-top-color:#c06;
   border-left-color:#c06;
   border-right-color:#c06;
   border-bottom-color:#c06;
   -moz-border-radius : .25em 0.25em 0.25em 0.25em;
}

----
{{textcenter{
''[[Lists of all files excluded from lists and searches|ByFilesExcluded]]''
}}}
@@position:relative;+++^45em^[See the code here]
!!!!!Code for List of all excluded from lists and searches
<<<
{{{
<<forEachTiddler
 where
'tiddler.tags.containsAny(["excludeLists","excludeSearch"])'
write
 '"|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |"+tiddler.tags+"|\n"'

>>
}}}
<<<
===@@

----
{{tablecenter{
<<forEachTiddler
 where
'tiddler.tags.containsAny(["excludeLists","excludeSearch"])'
write
 '"|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |"+tiddler.tags+"|\n"'

>>
}}}
----
{{textcenter{
''[[List of all tiddlers with no tags sorted by Title.|ByNoTags]]''
}}}
@@position:relative;+++^45em^[See the code here]
!!!!!Code for List of tiddlers sorted by Title with No Tags
<<<
{{{
<<forEachTiddler 
 where
 'tiddler.tags.length == 0'
 sortBy
 'tiddler.title'
 ascending
 write
 '"|"+(index+1)+"|[["+tiddler.title+"]] |"+tiddler.tags+"|\n"'
   begin '"|No.| Title | Tags |h\n"'

>>
}}}
<<<
===@@

----
{{tablecenter{
<<forEachTiddler 
 where
 'tiddler.tags.length == 0'
 sortBy
 'tiddler.title'
 ascending
 write
 '"|"+(index+1)+"|[["+tiddler.title+"]] |"+tiddler.tags+"|\n"'
   begin '"|No.| Title | Tags |h\n"'
>>
}}}
----
{{textcenter{
[[List of all tiddlers with a particular tag.|ByTag]]
}}}
@@position:relative;+++^45em^[See the code here]
<<<
{{{
<<forEachTiddler 
 where 
 'tiddler.tags.contains("memorize")'
>>
}}}
<<<
===@@

''Tiddlers with the tag 'memorize'.''
<<forEachTiddler 
 where 
 'tiddler.tags.contains("memorize")'
>>
----
{{textcenter{
''[[List of all tiddlers sorted by Tag ("ft") by First Line.|ByTagFirstLine]]''
( Tag ("ft") is ~FormattingTiddlers )
}}}
@@position:relative;+++^45em^[See the code here]
!!!!!Code for List of all tiddlers sorted by Tag ("ft") by First Line
<<<
{{{
<<forEachTiddler
 where
 'tiddler.tags.contains("ft")'
 script
 '
 function getFirstLine(s) {
 var m = s.match(/\s*(.*)/);
 return m != null && m.length >= 1 ? m[1] : "";
 }
 '
 write
 '"#[["+tiddler.title+"]] "+getFirstLine(tiddler.text) + " "+"\n"' 

>>
}}}
<<<
===@@

----
<<forEachTiddler
 where
 'tiddler.tags.contains("ft")'
 script
 '
 function getFirstLine(s) {
 var m = s.match(/\s*(.*)/);
 return m != null && m.length >= 1 ? m[1] : "";
 }
 '
 write
 '"[["+tiddler.title+"]] "+getFirstLine(tiddler.text) + " "+"\n"' 

>>
!!!<<gradient horiz #fc3 #fff>>&nbsp;ByTheTagCSSRef^^<<tiddler CloseThisOpen with: ListTiddlersBy  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{textcenter{
''[[List of  tiddlers with the tag 'CSSRef'|ByTheTagCSSRef]]''
}}}
@@position:relative;+++^45em^[See the code here]
!!!!!Code for List of tiddlers with the tag 'CSSRef'
<<<
{{{
<<forEachTiddler 
 where 
 'tiddler.tags.contains("CSSRef")'
sortBy '(tiddler.title)' 
 ascending
write
 '"|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |"+tiddler.tags+"|\n"'

>>
}}}
<<<
===@@

{{tablecenter{
<<forEachTiddler 
 where 
 'tiddler.tags.contains("CSSRef")'
sortBy '(tiddler.title)' 
 ascending
write
 '"|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |"+tiddler.tags+"|\n"'
 begin '"| sort &raquo;| Title |>| Tags |h\n"'

>>
}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;ByTheTagIframe^^<<tiddler CloseThisOpen with: ListTiddlersBy  '« back'>>|<<toolbar editTiddler>>» ^^>>

{{textcenter{
''[[List of  tiddlers with the tag 'iframe'|ByTheTagIframe]]''
}}}
@@position:relative;+++^45em^[See the code here]
!!!!!Code for List of tiddlers with the tag 'iframe'
<<<
{{{

<<forEachTiddler 
 where 
 'tiddler.tags.contains("iframe")'
sortBy '(tiddler.title)' 
 ascending
write
 '"|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |"+tiddler.tags+"|\n"'
>>
}}}
<<<
===@@

{{tablecenter{

<<forEachTiddler 
 where 
 'tiddler.tags.contains("iframe")'
sortBy '(tiddler.title)' 
 ascending
write
 '"|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |"+tiddler.tags+"|\n"'
 begin '"| sort &raquo;| Title |>| Tags |h\n"'

>>
}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;ByTheTagScript^^<<tiddler CloseThisOpen with: ListTiddlersBy  '« back'>>|<<toolbar editTiddler>>» ^^>>
@@color:#C06;''&raquo; &raquo;'' @@ +++[See Requirments here]
<<<

#To run ~JavaScript in ~TiddlyWiki tiddlers requires: http://www.tiddlytools.com/#InlineJavascriptPlugin
#A brief summary of some of the differences between "inline scripts" and "plugins": http://tiddlytools.com/#FAQ_ScriptsAndPlugins
''Note: That in TW Help the Tag 'script' is also applied to macros that use the following plugins:''
*ForEachTiddlerPlugin
*ForEachTiddlerMacro
Get them from: http://tiddlywiki.abego-software.de/
<<<
===
----
{{textcenter{
''[[List of  tiddlers with the tag 'script'|ByTheTagScript]]''
}}}
@@position:relative;+++^45em^[See the code here]
!!!!!Code for List of tiddlers with the tag 'script'
<<<
{{{
<<forEachTiddler 
 where 
 'tiddler.tags.contains("script")'
sortBy '(tiddler.title)' 
 ascending
write
 '"|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |"+tiddler.tags+"|\n"'

>>
}}}
<<<
===@@

{{tablecenter{
<<forEachTiddler 
 where 
 'tiddler.tags.contains("script")'
sortBy '(tiddler.title)' 
 ascending
write
 '"|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |"+tiddler.tags+"|\n"'
 begin '"| sort &raquo;| Title |>| Tags |h\n"'

>>
}}}
----
{{textcenter{
''[[First Line of all tiddlers with the tag TiddlySnip sorted by Title.|ByTheTagTiddlySnip]]''
}}}
@@position:relative;+++^45em^[See the code here]
!!!!!Code for First Line of all tiddlers sorted by Title by The Tag TiddlySnip
<<<
{{{
<<forEachTiddler
 where 'tiddler.tags.contains("TiddlySnip")'
 sortBy '(tiddler.title)'
 script 'function getFirstLine(s) {
           var m = s.match(/\s*(.*)/);
           return m != null && m.length >= 1 ? m[1] : "";}'
 write '"[["+tiddler.title+"]] &rarr; "+getFirstLine(tiddler.text)
+"\n"' >> 

}}}
<<<
===@@

----

<<forEachTiddler
 where 'tiddler.tags.contains("TiddlySnip")'
 sortBy '(tiddler.title)'
 script 'function getFirstLine(s) {
           var m = s.match(/\s*(.*)/);
           return m != null && m.length >= 1 ? m[1] : "";}'
 write '"[["+tiddler.title+"]] &rarr; "+getFirstLine(tiddler.text)
+"\n"' >> 
!!!<<gradient horiz #fc3 #fff>>&nbsp;ByTheTagsystemConfig^^<<tiddler CloseThisOpen with: ListTiddlersBy  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{textcenter{
''[[List of  tiddlers with the tag 'systemConfig'|ByTheTagsystemConfig]]''
}}}
@@position:relative;+++^45em^[See the code here]
!!!!!Code for List of tiddlers with the tag 'systemConfig'
<<<
{{{
<<forEachTiddler 
 where 
 'tiddler.tags.contains("systemConfig")'
sortBy '(tiddler.title)' 
 ascending
write
 '"|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |"+tiddler.tags+"|\n"'

>>
}}}
<<<
===@@

{{tablecenter{
<<forEachTiddler 
 where 
 'tiddler.tags.contains("systemConfig")'
sortBy '(tiddler.title)' 
 ascending
write
 '"|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |"+tiddler.tags+"|\n"'
 begin '"| sort &raquo;| Title |>| Tags |h\n"'

>>
}}}
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("c")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[CSS]]^^<<tiddler CloseThisOpen with: WebPageCodes  '« back'>>|<<toolbar editTiddler>>» ^^>>

@@color(#C06):''For detailed information on CSS go here:''<<tiddler CSSMenu>>''or here'' [[CSS2 Reference|CSS2Reference]] <br> ''or here'' [[CSS Tools|http://www.realsoftwaredevelopment.com/2006/10/the_complete_li.html]]@@

''There are three main tiddlers'' built into ~TiddlyWiki that are used for styling.
*[[StyleSheet|styleSheet]] (this is for your own use and overrides the other two)
**[[NestedStyles]] These are sub-stylesheet tiddlers also with CSS that reside in ~StyleSheet.
----
*[[StyleSheetColors|styleSheetColors]]@@color(#C06):^^[1]^^@@
*[[StyleSheetLayout|styleSheetLayout]]@@color(#C06):^^[1]^^@@
@@color(#C06):^^[1]^^@@@@position:relative;+++^35em^[It is best NOT to modify these two style sheets - click here]
|bgcolor:#FFF;''NOTE:'' It is best that all modifications you make should be done to ''~StyleSheet'' because new core updates sometimes modify ''~StyleSheetLayout'' and ''~StyleSheetColors'' . So if you have modified your ~StyleSheetLayout and ~StyleSheetColors they are no longer virgin //shadow tiddlers// consequentially any new core changes to ~TiddlyWiki for these stylesheets will ''NOT'' be implemented.  It is best to leave them original and only use them for reference.|
===@@
----
*''You can change the style of a'' tiddler by putting the CSS styling right inside it. See ChangingStyles


!!!<<gradient horiz #abf #fff>>&nbsp;Example>>

''By putting this CSS code in StyleSheet the viewer has been set to __underline__ all links in a tiddler.''
{{{
.viewer a {
color:#04b;
text-decoration:underline;
}
}}}
Unfortunately Tabs are treated as links so to prevent them from being underlined
this CSS has been put in StyleSheet to modify a particular tiddler, ~OverView, in this case.  The first sets unselected tabs to'' @@background-color:#99AAEE;color:#000;&nbsp;this color&nbsp;@@ ''and prevents unselected tabs from showing an underline. The second just prevents the underline on the selected tab.

!!!<<gradient horiz #abf #fff>>&nbsp;The Code>>
{{{
#tiddlerOverView .tabUnselected {
	color: #000;
	background: #99AAEE;
        text-decoration:none;
}

#tiddlerOverView .tabSelected{
	text-decoration:none;
}
}}}
!!!<<gradient horiz #abf  #fff>>&nbsp;Here is the tab>>
<<tabs tabsClass [[tab name]] "tool tip" [[tiddler to be displayed]][[ Here is another tab hr ]] "Another Tab" [[hr]] >>

!!!!!<<gradient horiz #abf #fff>>&nbsp;@@color:#c06;End of CSS@@>>
<html><h2>Examples</h2>
<a target="_blank" href="http://www.w3schools.com/css/tryit.asp?filename=trycss_display">How to display an element</a><br>This example demonstrates how to display an element.


<a target="_blank" href="http://www.w3schools.com/css/tryit.asp?filename=trycss_float">A simple use of the float property</a><br>Let an image float to the right in a paragraph.

<a target="_blank" href="http://www.w3schools.com/css/tryit.asp?filename=trycss_float2">An image with border and margins that floats to the right in a paragraph</a><br>Let an image float to the right in a paragraph. Add border and margins to the image.


<a target="_blank" href="http://www.w3schools.com/css/tryit.asp?filename=trycss_float3">An image with a caption that floats to the right</a><br>Let an image with a caption float to the right.

<a target="_blank" href="http://www.w3schools.com/css/tryit.asp?filename=trycss_float4">Let the first letter of a paragraph float to the left</a><br>Let the first letter of a paragraph float to the left and style the letter.


<a target="_blank" href="http://www.w3schools.com/css/tryit.asp?filename=trycss_float5">Creating a horizontal menu</a><br>Use float with a list of hyperlinks to create a horizontal menu.

<a target="_blank" href="http://www.w3schools.com/css/tryit.asp?filename=trycss_float6">Creating a homepage without tables</a><br>Use float to create a homepage with a header, footer, left content and main content.


<a target="_blank" href="http://www.w3schools.com/css/tryit.asp?filename=trycss_position_relative">Position:relative</a><br>This example demonstrates how to position an element relative to its normal position.

<a target="_blank" href="http://www.w3schools.com/css/tryit.asp?filename=trycss_position_absolute">Position:absolute</a><br>This example demonstrates how to position an element using an absolute value.


<a target="_blank" href="http://www.w3schools.com/css/tryit.asp?filename=trycss_visibility">How to make an element invisible</a><br>This example demonstrates how to make an element invisible. Do you want the element to show or not?

<a target="_blank" href="http://www.w3schools.com/css/tryit.asp?filename=trycss_cursor">Change the cursor</a><br>This example demonstrates how to change the cursor.


</html>
!!!''CSS Properties''
<<tag "CSSRef">>
{{borderless textcenter{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.w3schools.com/css/css_reference.asp]]&nbsp;&raquo;|
URL:http://www.w3schools.com/css/css_reference.asp

<html><div align="center"><iframe src ="http://www.w3schools.com/css/css_reference.asp" width="100%" align="center" height="600"></iframe></div></html>}}}
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.w3schools.com/css/css_reference.asp]]&nbsp;&raquo;|
}}}<html><div align="center"><iframe src ="http://www.w3schools.com/css/css_reference.asp" width="100%" align="center" height="600"></iframe></div></html>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[216 Cross Platform Colors|CSSColors]]^^<<tiddler CloseThisOpen with: UsingColor  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.symbex.net.au/Wiki/htmltablecolors.htm]]&nbsp;&raquo;|
}}}<html><iframe src="http://www.symbex.net.au/Wiki/htmltablecolors.htm" width=100% height=600></iframe></html>
<<popup [[CSS Reference]] [[<<forEachTiddler where 'tiddler.tags.contains("CSSRef")'$))]]>>
!!!<<gradient horiz #fc3 #fff>>&nbsp;CamelCase>>
CamelCase (also spelled camel case) or medial capitals is the practice of writing compound words or phrases in which the words are joined without spaces and are capitalized within the compound. The term's name comes from the uppercase "bumps" in the middle of the compound word, suggestive of the humps of a camel. An example is @@color:#00f;''~BackColor.''@@

More at http://en.wikipedia.org/wiki/CamelCase



<html><div align="center"> <embed src="http://www.metacafe.com/fplayer/1923836/capacitor_replacement_tutorial.swf" width="400" height="345" wmode="transparent" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"> </embed><br><font size = 1><a href="http://www.metacafe.com/watch/1923836/capacitor_replacement_tutorial/">Capacitor Replacement Tutorial</a> - <a href="http://www.metacafe.com/">Funny bloopers are a click away</a></font></div></html>

!!!<<gradient horiz #fc3 #fff>>&nbsp;ChangePageTitle^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>

@@color:#000;In http://www.TiddlyTools.com/#CoreTweaks there is facility for over-riding the SiteTitle/SiteSubtitle to display another title that will appear in the browser's title bar. Install CoreTweaks and simply put your desired page title in a tiddler named PageTitle.

Here is the relevant code:@@
<<<
{{{
window.coreTweaks_getPageTitle=window.getPageTitle;
window.getPageTitle=function() { 
	var txt=wikifyPlain("PageTitle"); if (txt.length) return txt;
	return window.coreTweaks_getPageTitle.apply(this,arguments);
}
store.addNotification("PageTitle",refreshPageTitle); // so title stays in sync with tiddler changes
}}}

<<<
<script>
   place.style.color="#c06"; /* set text color */
</script>
!!!!End

!!!<<gradient horiz #fc3 #fff>>&nbsp;[[ChangingStyles]]^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>

#You can change the style of a tiddler by putting the CSS styling right inside it.
#You can change the style of ''another tiddler'' see [[ChangingStyles Demo]] when this tiddler is open for display. Open and close this tiddler to see [[ChangingStyles Demo]] change text color.

*@@color:#090;font-size:12pt;Note: This could cause great confusion and should be used very carefully!@@

*+++[View the code]
{{{
<html>
    <style type="text/css">

   /*Override StyleSheet*/
    #tiddlerChangingStyles .viewer {
        background:#efe;
        border:0px solid #F6F;
        -moz-border-radius: 0em;
        }
     

     /*Modify the tiddler itself by name*/
        #tiddlerChangingStyles {
            color: #c06;
            background:#ccc;
            border: 1px solid #090;
            font: bold 10pt times;
        }



     /*Modify another tiddler with a space in its name*/
        #tiddlerChangingStyles\000020Demo {
            color: #090;
            
        }

/*Modify all tiddlers*/
/*
.tiddler {color:#090;}
*/

/*Hides tiddler title or tiddler body*/
/*  
.tiddler .title{display:none;}
.viewer {display:none;}
*/
    </style>
</html>
}}}
===

/*{{{*/
Active code below here
/*}}}*/


<html>

    <style type="text/css">



   /*Override StyleSheet*/
    #tiddlerChangingStyles .viewer {
        background:#efe;
        border:0px solid #F6F;
        -moz-border-radius: 0em;
        }
     

     /*Modify the tiddler itself by name*/
        #tiddlerChangingStyles {
            color: #c06;
            background:#ccc;
            border: 1px solid #090;
            font: bold 10pt times;
        }



     /*Modify another tiddler with a space in its name*/
        #tiddlerChangingStyles\000020Demo {
            color: #090;
            
        }
#tiddlerChangingStyles .title{display:none;}


/*Modify all tiddlers*/
/*
.tiddler {color:#090;}
*/

/*Hides tiddler title or tiddler body*/
/*  
.tiddler .title{display:none;}
.viewer {display:none;}
*/
    </style>
</html>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[ChangingStyles Demo]]^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>

This tiddler's style has been changed by the CSS in another tiddler called ChangingStyles.  It demonstrates not only how you can change the style of a tiddler by putting code directly in it but also that you can change any number of other tiddlers the same way.

* ''Note: This tiddlers style (text color green in this case) is only changed when ChangingStyles tiddler is being rendered.
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[CheckBoxes]]^^<<tiddler CloseThisOpen with: FormattingTiddlers '« back'>>|<<toolbar editTiddler>>» ^^>>

There is a simple but effective checkbox ~ToDoTogglePlugin here: 
http://tinyurl.com/6qsg82 
It's simple but it toggles the tiddlers tag from todo to done when all boxes are ticked. 

You also might want to try one or more of these:
http://www.TiddlyTools.com/#ChecklistScript
http://www.TiddlyTools.com/#ToDoList
http://www.TiddlyTools.com/#TaskPackage

And, if you want to create your own ~ToDo application, you might find
this helpful:

http://www.TiddlyTools.com/#CheckboxPlugin
http://www.tiddlytools.com/#CheckboxPluginInfo 

!!!!End
''Table heading links to w3schools references on this subject.''
|>|>|>| ![[Classification Properties|http://www.w3schools.com/css/css_classification.asp]] |
| ''Property'' | ''Valid Values'' | ''Example'' | ''Inherited?'' |
| display |none, block, inline, list-item | display:none | N |
| list-style-type |disk, circle, square, decimal, lower-roman, upper-roman, lower-alpha, upper-alpha, none | list-style-type:upper-alpha | Y |
| list-style-image |//url//, none | list-style-image:url(icFile.gif) | Y |
| list-style-position |inside, outside | list-style-position:inside | Y |
| list-style |//keyword// -or- //position// -or- //url// | list-style: square outside url(icFolder.gif) | Y |
config.commands.closeAll ={
text:"close all",
tooltip:"close all"};

config.commands.closeAll.handler = function(event,src,title)
{story.closeAllTiddlers();return false;}
----
''To Add 'close all' to toolbar in ViewTemplate''

&darr;+++[Create a tiddler like this:]
----

@@color(#C06):&nbsp;''Title:''@@<html><input type="text" size="40" value="CloseAllMacro" /></html>
@@color(#00f):''Body:''@@<html><textarea rows="10" cols="30">

config.commands.closeAll ={
text:"close all",
tooltip:"close all"};

config.commands.closeAll.handler = function(event,src,title)
{story.closeAllTiddlers();return false;}
</textarea></html>

@@color(#0a0):''Tags:''@@<html><input type="text" size="40" value="systemConfig tweaks" /></html>

Add closeAll to your toolbar in ViewTemplate like this:
<<<
{{{<div class='toolbar' macro='toolbar fullscreen jump top -closeTiddler closeOthers closeAll +editTiddler permalink references'></div>}}}
<<<
===

----
/%
|Name|CloseSlider|
|Source|http://www.TiddlyTools.com/#CloseSlider|
|Version|0.0.0|
|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|script|
|Requires|InlineJavascriptPlugin, NestedSlidersPlugin|
|Overrides||
|Description|embed a 'close' link floating in upper right corner of slider.  closes current slider panel.|
%/<script label="[x]" title="hide this section">

	var panel=place;
	while (panel && panel.className!='sliderPanel' && panel.className!='floatingPanel')
		{ panel=panel.parentNode; }
	if (!panel) { alert('not in a slider'); return false; }
	panel.style.display='none';
	var cookie=panel.button.sliderCookie;
	if (cookie && cookie.length) {
		config.options[cookie]=false;
		if (config.options[cookie]!=panel.button.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();
		}
	}
	return false;
</script><script>
	place.lastChild.style.fontWeight="normal";
	if (story.findContainingTiddler(place))
		place.lastChild.className="toolbar button";
	else {
		var s=place.lastChild.style
		s.fontSize="90%"; s.float="right";
	}

</script>
<script label="$2">
	var tiddler=story.findContainingTiddler(place);
	story.displayTiddler(tiddler,"$1");
	story.closeTiddler(tiddler.id.substr(7)); // close self
	return false;
</script>
<<tabs "" [[Intro ]] "tooltip 1" [[CodeReferenceIntro]]  [[CSS Ref ]] "" [[CSS2Reference]]  [[CSSPlay ]] "" [[cssplay]]    [[HTMLQuickList    ]] "" [[HTMLQuickList]] [[HTML-DOMReference ]] "" [[HTML-DOMReference]] [[JavaScriptReference ]] "" [[JavaScriptReference]]  [[JavaScriptQuickList ]] "" [[JavaScriptQuickList]] >>
#tiddlerCodeReferenceAll .tabUnselected {background:#ccc;border: 1px #fc3 solid; border-bottom:0px;}
#tiddlerCodeReferenceAll .tabUnselected .tabButton {background:#f00; padding : 0px 2px 0px 2px; margin: 0 0 0 4px;}

#tiddlerCodeReferenceAll .tabSelected {background:#fc3;border: 1px #999 solid;border-bottom:0px;}
#tiddlerCodeReferenceAll .tabSelected .tabButton {background:#f00;padding : 0px 2px 0px 2px; margin: 0 0 0 4px;}
!!!<<gradient horiz #fc3 #ffff>>[[Indepth Reference|CodeReferenceIntro]]&nbsp;^^<<tiddler CloseThisOpen with: CodeReferenceAll  '« back'>>|<<toolbar editTiddler>>» ^^>>
''These are the codes used in the construction and styling of all ~TiddlyWikis''

Some interesting  links:
<<<

http://www.tizag.com/ @@color:#C06;''&raquo; &raquo;'' @@ HTML and CSS Tutorial
http://developer.yahoo.com/
http://developer.yahoo.com/performance/rules.html @@color:#C06;''&raquo; &raquo;'' @@ @@Thirteen Simple Rules for Speeding Up Your Web Site@@
http://wellstyled.com/index.html
http://alistapart.com/articles/
http://www.dyn-web.com/dhtml/iframes/
<<<
+++[+Minify your Javascript]...
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://developer.yahoo.com/performance/rules.html#minify]]&nbsp;&raquo;|
----
<html><div align="center"><iframe  src ="http://developer.yahoo.com/performance/rules.html#minify" width="100%" align="center" height="400" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
===


[img[http://img178.imageshack.us/img178/7698/uphg6.gif][WebPageCodes]]<<gradient horiz #fc3 #ffffff>>[[Codes used in TiddlyWiki|CodesIntro]]>>
''These are the codes used in the construction and styling of all ~TiddlyWikis''

Here is more reference material

<<tiddler CodeReferenceAll>>
''Table heading links to w3schools references on this subject.''
|>|>|>| ![[Color and Background Properties|http://www.w3schools.com/css/css_background.asp]] |
| ''Property'' | ''Valid Values'' | ''Example'' | ''Inherited?'' |
|color |//color // |color: red |Y |
|background-color |//color//, transparent |background-color: yellow |N* |
|background-image |//url//, none |background-image: url(house.jpg)|N* |
|background-repeat |repeat, repeat-x, repeat-y, no-repeat |background-repeat: no-repeat |N* |
|background-attachment |scroll, fixed |background-attachment: fixed |N* |
|background-position |[ //position// , //length// ], {1,2}, [ top, center, bottom ] -or- [ left, center, right ] |background-position: top center |N* |
|background |transparent, //color// -or- //url// -or- repeat -or- scroll -or- //position// |background: silver url(house.jpg) repeat-y |N* |
|>|>|>|!*Starting in CSS2, these properties are inherited. |

Background: #2B2521
Foreground: #FFCD91
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
!!!<<gradient horiz #fc3 #fff>>&nbsp;ColorCalculator^^<<tiddler CloseThisOpen with: UsingColor  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://stuff.debugger-blog.net/coca/]]&nbsp;&raquo;|

<html><div align="center"><iframe src ="http://stuff.debugger-blog.net/coca/" width="100%" align="center" height="600"></iframe></div></html>}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;ColorHarmony^^<<tiddler CloseThisOpen with: UsingColor  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.easyrgb.com/harmonies.php]]&nbsp;&raquo;|

<html><iframe name="content" src="http://www.easyrgb.com/harmonies.php" width=100% height=600></iframe></html>}}}
!!!!!<<gradient horz  #fc3 #ffdddd #ffffff>>@@color:white;&nbsp;'' [[Using Colors|ColorHints]]''@@^^<<tiddler CloseThisOpen with: ColorHints  '« back'>>|<<toolbar editTiddler>>» ^^>>

{{borderless{
| <<tiddler ColorHints##colourintro>> |<<tiddler ColorHints##colours>>|
}}}
/%
!colours
[img[http://img152.imageshack.us/img152/489/4colorpagetf0qe8.jpg]]

''Important'':

Once you chose color harmony, don't forget to harmonize together the colored volumes and surfaces. Always choose a dominant color (to fulfil big surfaces) and one  tonic color - I call it  interactive - (to fulfil little surfaces as clickable elements, information area to highlight...etc.).


Successful graphics convey a high level of professionalism and inspire internauts with respect.
!End
%/


/%
!colourintro
[img[http://img167.imageshack.us/img167/554/huegt8.gif]]
{{textleft{
*[[216 Cross Platform Colors|CSSColors]]
*[[Color Harmony|ColorHarmony]]
*[[Coloria Color Names|ColorNames]]
*[[Color Wheel|ColorWheel]]


''To hang above your screen in a big size!!'' In web design,  graphics and ergonomics should serve the contents. A good graphic web interface attracts internauts, sets your site among the most "promising" ones. Don't disappoint the internauts : The contents will make them come back.

[img[http://img250.imageshack.us/img250/4768/rouemr7.gif]]
}}}
!End
%/
!!!<<gradient horiz #fc3 #fff>>&nbsp;ColorNames^^<<tiddler CloseThisOpen with: UsingColor  '« back'>>|<<toolbar editTiddler>>» ^^>>

{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.coloria.net/bonus/colornames.htm]]&nbsp;&raquo;|
}}}<html><iframe src="http://www.coloria.net/bonus/colornames.htm" width=100% height=600></iframe></html>
Background: @@bgcolor:#fff;Background@@:#fff
Foreground: @@bgcolor:#000;Foreground: @@:#000
PrimaryPale: @@bgcolor:#8cf;PrimaryPale:@@:#8cf
PrimaryLight: @@bgcolor:#18f;PrimaryLight:@@:#18f
PrimaryMid: @@bgcolor:#04b;PrimaryMid@@:#04b
PrimaryDark: @@bgcolor:#014;PrimaryDark:@@:#014
SecondaryPale: @@bgcolor:#ffc;SecondaryPale: @@:#ffc
SecondaryLight: @@bgcolor:#fe8;SecondaryLight: @@:#fe8
SecondaryMid: @@bgcolor:#db4;SecondaryMid: @@:#db4
SecondaryDark: @@bgcolor:#841;SecondaryDark:@@ :#841
TertiaryPale: @@bgcolor:#eee;TertiaryPale: @@:#eee
TertiaryLight: @@bgcolor:#ccc;TertiaryLight: @@:#ccc
TertiaryMid: @@bgcolor:#999;TertiaryMid: @@:#999
TertiaryDark: @@bgcolor:#666;TertiaryDark: @@:#666
Error: @@bgcolor:#f88;Error: @@:#f88


|Background:|@@bgcolor:#fff;Background: #fff@@|
|Foreground:|@@bgcolor:#000;color:#fff;Foreground: #000@@|
|~PrimaryPale:|@@bgcolor:#8cf;~PrimaryPale: #8cf@@|
|~PrimaryLight:|@@bgcolor:#18f;~PrimaryLight: #18f@@|
|~PrimaryMid:|@@bgcolor:#04b;color:#fff;~PrimaryMid: #04b@@|
|~PrimaryDark:|@@bgcolor:#014;color:#fff;~PrimaryDark: #014@@|
|~SecondaryPale:|@@bgcolor:#ffc;~SecondaryPale:#ffc @@|
|~SecondaryLight:|@@bgcolor:#fe8;~SecondaryLight: #fe8@@|
|~SecondaryMid:|@@bgcolor:#db4;~SecondaryMid: #db4@@|
|~SecondaryDark:|@@bgcolor:#841;color:#fff;~SecondaryDark: #841@@|
|~TertiaryPale:|@@bgcolor:#eee;~TertiaryPale: #eee@@|
|~TertiaryLight:|@@bgcolor:#ccc;~TertiaryLight: #ccc @@|
|~TertiaryMid:|@@bgcolor:#999;~TertiaryLight: #999@@|
|~TertiaryDark:|@@bgcolor:#666;~TertiaryDark: #666@@|
|Error:|@@bgcolor:#f88;Error: #f88@@|
|Background:|bgcolor:#fff;Background: #fff|
|Foreground:|bgcolor:#000;color:#fff;Foreground: #000|
|~PrimaryPale:|bgcolor:#8cf;~PrimaryPale: #8cf|
|~PrimaryLight:|bgcolor:#18f;~PrimaryLight: #18f|
|~PrimaryMid:|bgcolor:#04b;color:#fff;~PrimaryMid: #04b|
|~PrimaryDark:|bgcolor:#014;color:#fff;~PrimaryDark: #014|
|~SecondaryPale:|bgcolor:#ffc;~SecondaryPale:#ffc |
|~SecondaryLight:|bgcolor:#fe8;~SecondaryLight: #fe8|
|~SecondaryMid:|bgcolor:#db4;~SecondaryMid: #db4|
|~SecondaryDark:|bgcolor:#841;color:#fff;~SecondaryDark: #841|
|~TertiaryPale:|bgcolor:#eee;~TertiaryPale: #eee|
|~TertiaryLight:|bgcolor:#ccc;~TertiaryLight: #ccc |
|~TertiaryMid:|bgcolor:#999;~TertiaryLight: #999|
|~TertiaryDark:|bgcolor:#666;~TertiaryDark: #666|
|Error:|bgcolor:#f88;Error: #f88|
|Background:|<<wikify [[@@background:%0;%0@@]] 'ColorPalette::Background'>>|
|Foreground:|color:#ccc;<<wikify [[@@background:%0;%0@@]] 'ColorPalette::Foreground'>>|
|~PrimaryPale:|<<wikify [[@@background:%0;%0@@]] 'ColorPalette::PrimaryPale'>>|
|~PrimaryLight:|<<wikify [[@@background:%0;%0@@]] 'ColorPalette::PrimaryLight>>|
|~PrimaryMid: |<<wikify [[@@background:%0;%0@@]] 'ColorPalette::PrimaryMid'>>|
|~PrimaryDark:|color:#ccc;<<wikify [[@@background:%0;%0@@]] 'ColorPalette::PrimaryDark'>>|
|~SecondaryPale:|<<wikify [[@@background:%0;%0@@]] 'ColorPalette::SecondaryPale'>>|
|~SecondaryLight:|<<wikify [[@@background:%0;%0@@]] 'ColorPalette::SecondaryLight'>>|
|~SecondaryMid:|<<wikify [[@@background:%0;%0@@]] 'ColorPalette::SecondaryMid'>>|
|~SecondaryDark:|<<wikify [[@@background:%0;%0@@]] 'ColorPalette::SecondaryDark'>>|
|~TertiaryPale:|<<wikify [[@@background:%0;%0@@]] 'ColorPalette::TertiaryPale'>>|
|~TertiaryLight:|<<wikify [[@@background:%0;%0@@]] 'ColorPalette::TertiaryLight'>>|
|~TertiaryMid:|<<wikify [[@@background:%0;%0@@]] 'ColorPalette::TertiaryMid'>>|
|~TertiaryDark:|<<wikify [[@@background:%0;%0@@]] 'ColorPalette::TertiaryDark'>>|
|Error:|<<wikify [[@@background:%0;%0@@]] 'ColorPalette::Error'>>|

!!!<<gradient horiz #fc3 #fff>>&nbsp;ColorWheel^^<<tiddler CloseThisOpen with: UsingColor  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.ficml.org/jemimap/style/color/wheel.html]]&nbsp;&raquo;|
}}}<html><iframe name="content" src="http://www.ficml.org/jemimap/style/color/wheel.html" width=100% height=600></iframe></html>



/* multi-column tiddler content (not supported in Internet Explorer) */
.twocolumns { display:block;
	-moz-column-count:2; -moz-column-gap:1em; -moz-column-width:50%; /* FireFox */
	-webkit-column-count:2; -webkit-column-gap:1em; -webkit-column-width:50%; /* Safari */
	column-count:2; column-gap:1em; column-width:50%; /* Opera */
}
.threecolumns { display:block;
	-moz-column-count:3; -moz-column-gap:1em; -moz-column-width:33%; /* FireFox */
	-webkit-column-count:3; -webkit-column-gap:1em; -webkit-column-width:33%; /* Safari */
	column-count:3; column-gap:1em; column-width:33%; /* Opera */
}
.fourcolumns { display:block;
	-moz-column-count:4; -moz-column-gap:1em; -moz-column-width:25%; /* FireFox */
	-webkit-column-count:4; -webkit-column-gap:1em; -webkit-column-width:25%; /* Safari */
	column-count:4; column-gap:1em; column-width:25%; /* Opera */
}
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[ColumnsAndRows]]^^<<tiddler CloseThisOpen with: Tables  '« back'>>|<<toolbar editTiddler>>» ^^>>

!!!&nbsp;Spanning rows
|bgcolor:#E0FAE1;@@color:#000;span rows@@|content|content|
|~| content | content |
|~| content | content |
<<<
Use the tilde (~) to span rows it is equal to the rowspan in HTML
Notice how the first tilde causes the content of the first row to be spanned as well.
<<<
{{{
|!span rows|content|content|
|~| content | content |
|~| content | content |
}}}
!!!&nbsp;Spanning columns
| !heading1| !heading1 | !heading1 |
|>| span two columns | content |
|>| span two columns | content |
<<<
Use the right angle bracket (>) to span columns it is equal to colspan in HTML
<<<
{{{
| !heading1| !heading1 | !heading1 |
|>| span two columns | content |
|>| span two columns | content |
}}}
!!!&nbsp;Spanning rows and columns
|bgcolor:#abf; heading1 |bgcolor:#abf; heading2 |vertical-align:middle;  span rows |
|span columns |>|~|
|span columns |>|~|

<<<
Use the right angle bracket (>) to span columns and the tilde (~) to span rows.
Notice how the first tilde causes the information in the first row/last column to be included in the span.
Note the use of {{{vertical-align:middle;}}} to center the text vertically. It can be used for 'top' and 'bottom' as well.
<<<
{{{
| heading1 | heading2 |vertical-align:middle; span rows |
|span columns |>|~|
|span columns |>|~|
}}}
----
|bgcolor:#F7D8A0;vertical-align:middle;  speaker |bgcolor:#abf; turntable |bgcolor:#F7D8A0;vertical-align:middle;  speaker |
|~|bgcolor:#94EDD6; CD Player |~|
|~|bgcolor:#cfc; {{twLink{[[AM/FM Radio|Radio]]}}} |~|
{{{
|bgcolor:#F7D8A0;vertical-align:middle;  speaker |bgcolor:#abf; turntable |bgcolor:#F7D8A0;vertical-align:middle;  speaker |
|~|bgcolor:#94EDD6; CD Player |~|
|~|bgcolor:#cfc; AM/FM Radio |~|
}}}
!!!&nbsp;End
{{textcenter{
[img[http://img395.imageshack.us/img395/1108/rsslogo25xr9.jpg][http://www.haloscan.com/members/rss.php?user=twhelp]]}}}
----
++++[Comment]
<<<
07.07.31 - 7:59 am
IP: 72.188.101.2
It might be good to note that putting triple curly braces {{{ {{{ }}} around text escapes formatting.
<<<
===

+++[+Response]
<<<

Thanks for the suggestion Cy. Your comment is very welcome as it was a glaring omission. I have added a tab to [[FormattingText]] called [[CommentingAndEscapes]].
<<<
===

----
++++[Comment]
<<<
07.07.05 - 2:27 pm
IP: 189.146.238.184
For HowToUpgrade, I suggest a note about deleting the StyleSheetLayout tiddler if that has been modified, since that is a common source of headaches for upgrading.
<<<
===

+++[+Response]
<<<
Thanks to Dave Gifford for his excellent suggestion. I have modified HowToUpgrade to warn of this pitfall and to illustrate how to restore your ~TiddlyWiki in case of such an event.
<<<
===


----
++++[Comment]
<<<
07.06.26 - 9:47 pm
IP: 194.237.142.6
Could you add an example on how to get the tabs on several rows?
I couldn't find anything indicating how to do that. It just happens but not in the the format I would like.
Otherwise a GREAT job.
<<<
===

+++[+Response]
<<<
Thank you for your excellent suggestion. I have modified the [[tabs]] in FormattingTiddlers to illustrate how to cause tabs to wrap to the viewer width.

<<<
===


----
++++[Comment]
<<<
07.06.16 - 8:55 pm
IP: 72.8.96.13
It would be nice to have a section on how to change the font size in just part of a tiddler, rather than doing the whole thing in the stylesheet, or at least to address the issue if it's not a current feature.
<<<
===

+++[+Response]
<<<
Thank you for your comment. I have added a tab to FormattingText called FontPropertiesDemo that demonstrates how to change text within a tiddler using HTML or CSS.
<<<
===


----
++++[Comment]
<<<
07.06.10 - 7:54 pm
IP: 72.8.96.13
I suggest telling how to put tooltips on regular text (not just links and images).
<<<
===

+++[+Response]
<<<
Thank you for your comment.  I have added a Tab about how to put a Tooltip on plain text here at FormattingText 
<<<

===


----
++++[Comment]
<<<
07.06.06 - 9:37 pm
IP: 72.8.96.13
Hello, I would like to see a section here for turning off the wiki syntax - i.e. for those who want to use hypens in normal words and such without . . . you know. This would be particularly helpful for those using Tiddlywiki to write hypertext fiction.
<<<
===

+++[+Response]
<<<
Thank you for your comment. I have added a Tab about WikiWords and how to turn them off manually and with a plugin here FormattingText and here FormattingTiddlers
<<<
===


----
++++[Comment]
<<<
07.06.06 - 12:43 pm
IP: 68.215.27.131
Your TW Help is absolutely marvelous. I have been a professional programmer for more than 30 years and I feel that you have created a "master Piece!" Suggestion: Pseudo classes - CSS it would benefit me and I suspect others if you included examples of the usage of these items. Both the code and the effect it has on the page. Again, my complements on the results of what has to have been many weeks of effort for this most useful demonstation of TW.
<<<
===

+++[+Response]
<<<

Thank you for your very kind compliment.  It is much appreciated.

I have added some examples as per your suggestion to [[Pseudo Classes - CSS]]
<<<
===


----
++++[Comment]
<<<
07.05.29 - 7:09 am
IP: 69.62.160.117
I have no knowledge of html or java or script - can I use the tiddly wikky for research. I am having a huge problem understanding your tutorial - can ordinaru people with no knowledge of computer langs. use tiddly wikky for research. I am presently working on my doctorate and someone showed me how usefule the tiddly can be for research. What advice do you have for me?
<<<
===

+++[+Response]
<<<
07.05.29 - 3:29 pm
IP: 124.183.249.40

''Note:'' this was left as a response and also sent as an email.

Shabana, TW Help is more for reference than a tutorial. Here is a user friendly tutorial for neophytes: http://www.giffmex.org/twfortherestofus.html There are many preformatted TiddlyWikis that you can use for research without having to know code. This first link displays many TiddlyWikis, look first under TiddlyWiki used for to-do lists and productivity at: http://giffmex.tiddlyspot.com/ Then work your way down. http://www.dcubed.ca/gtd-sample.html http://monkeygtd.tiddlyspot.com/ http://shared.snapgrid.com/index.html http://tiddlyspot.com/ http://www.giffmex.org/organizertw.html And you can get very friendly advice from the TiddlyWiki discussion group. Don't be afraid to ask the most basic questions at: http://groups.google.com/group/TiddlyWiki I hope this helps.
<<<
=== 
----
/%
|Name|CommentScript|
|Source|http://www.TiddlyTools.com/#CommentScript|
|Version|1.2.0|
|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|script|
|Requires|InlineJavascriptPlugin, NestedSlidersPlugin, MoveablePanelPlugin, ExpandSlidersScript (optional)|
|Overrides||
|Description|form to enter feedback/comments that are automatically added to tiddler content|

Usage:

<<tiddler CommentScript with: reverse>>

To indicate the location within the containing tiddler where new comments are to be saved, embed the keyword "comment", enclosed in TW begin/end comment syntax in the containing tiddler source.  If you omit the comment marker from your tiddler source, new comments are automatically appended to the end of the tiddler.  'reverse' is an optional keyword that causes all new comments to be inserted AFTER the comment marker instead of before the marker (producing reverse chronological order).  If there is no comment marker in your tiddlers source, the 'reverse' option is ignored and new comments are automatically appended to the end of the tiddler.

You can customize the format of the comment by redefining:
	config.options.txtCommentFormat="format string"
The default format string is:
	+++!!!!![%0 (%1): %2]>\n%3===\n
where: %0=date/timestamp, %1=username, %2=subject, and %3 is the body of the comment

You can further customize the date/timestamp format by defining:
	config.options.txtCommentDateFormat
When no custom format is defined, it defaults to current system-specific "locale" format.

Revisions:
2008.10.24 [1.2.0] added config.options.txtCommentDateFormat
2007.07.05 [1.1.0] added 'view all/close all' toolbar item plus code cleanup
2007.06.28 [1.0.2] added tiddler.fields to saveTiddler() call (preserves custom fields)
2007.05.26 [1.0.1] added support for optional 'reverse' keyword.
2006.04.20 [1.0.0] initial release

%/@@position:relative;+++^40em^{{small{[add a note|add a new note to this tiddler]}}}...
	<<moveablePanel>>add a note
----
	{{smallform small center{<html><form><!--
		--><input type="text" id="subject" name="subject" title="enter a short 'headline'" style="width:100%">

		<textarea id="body" name="body" rows="7" title="enter the text of your note" style="width:100%;font-family:helvetica,sans"></textarea>

		<i>Please enter your information and then press</i> <!--
		--><input type="button" value="post" onclick="addTiddlerComment(this.form.subject,this.form.body);"><!--
	--></form></html>}}}===
@@ |{{small{<<tiddler ExpandSlidersScript with: here "view all" "close all">>}}}<script>

window.addTiddlerComment = function(subject,body) { 
	// get the tiddler source and locate insertion marker (if present)
	var here=story.findContainingTiddler(subject); if (!here) return;
	var t=store.getTiddler(here.getAttribute("tiddler"));
	var marker="/%"+"comment"+"%/"; var pos=t.text.indexOf(marker); if (pos==-1) pos=t.text.length;
	if ("$1".toLowerCase()=="reverse") pos+=marker.length; // reverse order by inserting AFTER comment marker
	// update source and refresh tiddler display
	if (config.options.txtCommentDateFormat)
		var when=new Date().formatString(config.options.txtCommentDateFormat);
	else
		var when=new Date().toLocaleString();
	var who=config.options.txtUserName;
	if (config.options.txtCommentFormat==undefined)
		config.options.txtCommentFormat="+++[%0 (%1): %2]>\n%3===\n";
	var out=config.options.txtCommentFormat.format([when,who,subject.value,body.value]);
	var newtxt=t.text.substr(0,pos)+out+t.text.substr(pos);
	store.saveTiddler(t.title,t.title,newtxt,t.modifier,t.modified,t.tags,t.fields);
	story.refreshTiddler(t.title,1,true);
}

</script>
+++!!!!![Monday, 25 February, 2008 21:25:13 (MorrisGray): this is a note ]>
This is the note===
/%comment%/





!!!<<gradient horiz #fc3 #ffffff>>CommentingAndEscapes^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>

Here's how to put comment in a tiddler. More here http://www.tiddlywiki.org/wiki/Dev:Comments
*Also see ViewingCode

|bgcolor:#fff;<<tiddler ./comments>> |

<part comments hidden>
*{{{/% Invisible comment in a tiddler%/}}}

*{{{ {{{ triple braces creates monospace text }}} }}}

*{{{ """ triple Quote marks prevents wikifying without monospace text """ }}}

*{{{ <nowiki> also prevents wikifying without monospace text </nowiki> }}}

*{{{<!----- HTML comment ------>}}}
~StyleSheets and Javascript

*{{{ /* multi-line comment */ }}}

*{{{ /*** wikified multi-line comment ***/ }}}


</part>
*@@color:#C06;''Important note about trailing charactors submitted by Doug Edmunds''@@+++[here]
<<<
{{{
About monospaced text {{{ and }}}
In current version, the ending
}}} must have nothing except a return char after it.  I was going crazy trying to figure out why some text wouldn't format, until I realized there was an invisible tab character on the same
line after the }}}.  This should be noted in your info on this page.

try this:
{{{
one 
two
three
}}} 

and 

{{{
one
two
three
}}} a b c

The second one won't be formatted as monospaced. Similarly if you replace "a b c" with a tab.

HTH
}}}
<<<
===

!!!!&nbsp;Triple braces
Enclosing code in triple braces @@color:#c06;"""{{{...}}}"""@@ produces text which is monospaced and keeps it's formatting, but prevents wiki processing. (the same as <pre>...</pre> in HTML)

You can enclose text formatting, script, CSS, HTML with triple braces to prevent it from executing and make it visible for demonstrations and instruction inside tiddlers. e.g. @@color:#c06;"""{{{MonospacedText}}}"""@@

''For example below is the code for '' @@color:#C06;~TiddlyWiki is great! @@&nbsp;  ''enclosed in triple braces''

<<<
{{{@@color:#C06;''~TiddlyWiki is great!'' @@}}}

{{{ {{{@@color:#C06;''~TiddlyWiki is great!'' @@}}} }}}
<<<
!!!!&nbsp;{{{<nowiki>...</nowiki>}}}
Using triple double-quotes ( " " " ) or {{{<nowiki>...</nowiki>}}} produces plain text and prevents wiki formatting, but does not produce monospacing.

''For example below is the code for '' @@color:#C06;~TiddlyWiki is great! @@ ''enclosed in {{{<nowiki>...</nowiki>}}}''

<<<
{{{<nowiki>}}}<nowiki>@@color:#C06;~TiddlyWiki is wonderful!@@</nowiki>{{{</nowiki>}}}

Produces @@color:#C06;''&raquo; &raquo;'' @@

<nowiki>@@color:#C06;~TiddlyWiki is wonderful! @@</nowiki>
<<<

!!!!!&nbsp;''Using'' triple double-quotes ( " " " )
''For example below is the code for '' @@color:#C06;~TiddlyWiki is great! @@ ''enclosed in triple double-quotes.''
<<<
{{{"""}}}"""@@color:#C06;''~TiddlyWiki is great!'' @@"""{{{"""}}}

Produces @@color:#C06;''&raquo; &raquo;'' @@

"""@@color:#C06;~TiddlyWiki is great! @@"""

<<<
!!!!&nbsp;End



|>|>|>|>|>|>|>|>|>|>|>|bgcolor(#39c):color(#fff): ''Compact Calendar 2009'' |
|>|>|>|>|>|>|>|>|>|>|>||
|bgcolor(#666):color(#fff): ''#'' ||bgcolor(#666):color(#fff): ''Month'' ||bgcolor(#666):color(#fff): ''M'' |bgcolor(#666):color(#fff): ''T'' |bgcolor(#666):color(#fff): ''W'' |bgcolor(#666):color(#fff): ''T'' |bgcolor(#666):color(#fff): ''F'' |bgcolor(#999):color(#fff): ''S'' |bgcolor(#999):color(#fff): ''S''|width(40em):bgcolor(#666):color(#fff): ''Notes'' |
|>|>|>|>|>|>|>|>|>|>|>||
| 01 ||bgcolor(#39c):color(#fff): ''January'' || 29 | 30 | 31 |bgcolor(#39c): 01 | 02 |color(#ccc): 03 |color(#ccc): 04 ||
| 02 |~||~|bgcolor(#eaeaea): 05 |bgcolor(#eaeaea): 06 |bgcolor(#eaeaea): 07 |bgcolor(#eaeaea): 08 |bgcolor(#eaeaea): 09 |bgcolor(#eaeaea):color(#ccc): 10 |bgcolor(#eaeaea):color(#ccc): 11 |bgcolor(#eaeaea):|
| 03 |~||~| 12 | 13 | 14 | 15 | 16 |color(#ccc): 17 |color(#ccc): 18 ||
| 04 |~||~|bgcolor(#eaeaea): 19 |bgcolor(#eaeaea): 20 |bgcolor(#eaeaea): 21 |bgcolor(#eaeaea): 22 |bgcolor(#eaeaea): 23 |bgcolor(#eaeaea):color(#ccc): 24 |bgcolor(#eaeaea):color(#ccc): 25 |bgcolor(#eaeaea):|
| 05 |~|bgcolor(#39c):color(#fff): ''February'' |~| 26 | 27 | 28 | 29 | 30 |color(#ccc): 31 |bgcolor(#39c):color(#ccc): 01 ||
| 06 |~||~|bgcolor(#eaeaea): 02 |bgcolor(#eaeaea): 03 |bgcolor(#eaeaea): 04 |bgcolor(#eaeaea): 05 |bgcolor(#eaeaea): 06 |bgcolor(#eaeaea):color(#ccc): 07 |bgcolor(#eaeaea):color(#ccc): 08 |bgcolor(#eaeaea):|
| 07 |~||~| 09 | 10 | 11 | 12 | 13 |color(#ccc): 14 |color(#ccc): 15 ||
| 08 |~||~|bgcolor(#eaeaea): 16 |bgcolor(#eaeaea): 17 |bgcolor(#eaeaea): 18 |bgcolor(#eaeaea): 19 |bgcolor(#eaeaea): 20 |bgcolor(#eaeaea):color(#ccc): 21 |bgcolor(#eaeaea):color(#ccc): 22 |bgcolor(#eaeaea):|
| 09 |~|bgcolor(#39c):color(#fff): ''March'' |~| 23 | 24 | 25 | 26 | 27 |color(#ccc): 28 |bgcolor(#39c):color(#ccc): 01 ||
| 10 |~||~|bgcolor(#eaeaea): 02 |bgcolor(#eaeaea): 03 |bgcolor(#eaeaea): 04 |bgcolor(#eaeaea): 05 |bgcolor(#eaeaea): 06 |bgcolor(#eaeaea):color(#ccc): 07 |bgcolor(#eaeaea):color(#ccc): 08 |bgcolor(#eaeaea):|
| 11 |~||~| 09 | 10 | 11 | 12 | 13 |color(#ccc): 14 |color(#ccc): 15 ||
| 12 |~||~|bgcolor(#eaeaea): 16 |bgcolor(#eaeaea): 17 |bgcolor(#eaeaea): 18 |bgcolor(#eaeaea): 19 |bgcolor(#eaeaea): 20 |bgcolor(#eaeaea):color(#ccc): 21 |bgcolor(#eaeaea):color(#ccc): 22 |bgcolor(#eaeaea):|
| 13 |~||~| 23 | 24 | 25 | 26 | 27 |color(#ccc): 28 |color(#ccc): 29 ||
| 14 |~|bgcolor(#39c):color(#fff): ''April'' |~|bgcolor(#eaeaea): 30 |bgcolor(#eaeaea): 31 |bgcolor(#39c): 01 |bgcolor(#eaeaea): 02 |bgcolor(#eaeaea): 03 |bgcolor(#eaeaea):color(#ccc): 04 |bgcolor(#eaeaea):color(#ccc): 05 |bgcolor(#eaeaea):|
| 15 |~||~| 06 | 07 | 08 | 09 | 10 |color(#ccc): 11 |color(#ccc): 12 ||
| 16 |~||~|bgcolor(#eaeaea): 13 |bgcolor(#eaeaea): 14 |bgcolor(#eaeaea): 15 |bgcolor(#eaeaea): 16 |bgcolor(#eaeaea): 17 |bgcolor(#eaeaea):color(#ccc): 18 |bgcolor(#eaeaea):color(#ccc): 19 |bgcolor(#eaeaea):|
| 17 |~||~| 20 | 21 | 22 | 23 | 24 |color(#ccc): 25 |color(#ccc): 26 ||
| 18 |~|bgcolor(#39c):color(#fff): ''May'' |~|bgcolor(#eaeaea): 27 |bgcolor(#eaeaea): 28 |bgcolor(#eaeaea): 29 |bgcolor(#eaeaea): 30 |bgcolor(#39c): 01 |bgcolor(#eaeaea):color(#ccc): 02 |bgcolor(#eaeaea):color(#ccc): 03 |bgcolor(#eaeaea):|
| 19 |~||~| 04 | 05 | 06 | 07 | 08 |color(#ccc): 09 |color(#ccc): 10 ||
| 20 |~||~|bgcolor(#eaeaea): 11 |bgcolor(#eaeaea): 12 |bgcolor(#eaeaea): 13 |bgcolor(#eaeaea): 14 |bgcolor(#eaeaea): 15 |bgcolor(#eaeaea):color(#ccc): 16 |bgcolor(#eaeaea):color(#ccc): 17 |bgcolor(#eaeaea):|
| 21 |~||~| 18 | 19 | 20 | 21 | 22 |color(#ccc): 23 |color(#ccc): 24 ||
| 22 |~||~|bgcolor(#eaeaea): 25 |bgcolor(#eaeaea): 26 |bgcolor(#eaeaea): 27 |bgcolor(#eaeaea): 28 |bgcolor(#eaeaea): 29 |bgcolor(#eaeaea):color(#ccc): 30 |bgcolor(#eaeaea):color(#ccc): 31 |bgcolor(#eaeaea):|
| 23 |~|bgcolor(#39c):color(#fff): ''June'' |~|bgcolor(#39c): 01 | 02 | 03 | 04 | 05 |color(#ccc): 06 |color(#ccc): 07 ||
| 24 |~||~|bgcolor(#eaeaea): 08 |bgcolor(#eaeaea): 09 |bgcolor(#eaeaea): 10 |bgcolor(#eaeaea): 11 |bgcolor(#eaeaea): 12 |bgcolor(#eaeaea):color(#ccc): 13 |bgcolor(#eaeaea):color(#ccc): 14 |bgcolor(#eaeaea):|
| 25 |~||~| 15 | 16 | 17 | 18 | 19 |color(#ccc): 20 |color(#ccc): 21 ||
| 26 |~||~|bgcolor(#eaeaea): 22 |bgcolor(#eaeaea): 23 |bgcolor(#eaeaea): 24 |bgcolor(#eaeaea): 25 |bgcolor(#eaeaea): 26 |bgcolor(#eaeaea):color(#ccc): 27 |bgcolor(#eaeaea):color(#ccc): 28 |bgcolor(#eaeaea):|
| 27 |~|bgcolor(#39c):color(#fff): ''July'' |~| 29 | 30 |bgcolor(#39c): 01 | 02 | 03 |color(#ccc): 04 |color(#ccc): 05 ||
| 28 |~||~|bgcolor(#eaeaea): 06 |bgcolor(#eaeaea): 07 |bgcolor(#eaeaea): 08 |bgcolor(#eaeaea): 09 |bgcolor(#eaeaea): 10 |bgcolor(#eaeaea):color(#ccc): 11 |bgcolor(#eaeaea):color(#ccc): 12 |bgcolor(#eaeaea):|
| 29 |~||~| 13 | 14 | 15 | 16 | 17 |color(#ccc): 18 |color(#ccc): 19 ||
| 30 |~||~|bgcolor(#eaeaea): 20 |bgcolor(#eaeaea): 21 |bgcolor(#eaeaea): 22 |bgcolor(#eaeaea): 23 |bgcolor(#eaeaea): 24 |bgcolor(#eaeaea):color(#ccc): 25 |bgcolor(#eaeaea):color(#ccc): 26 |bgcolor(#eaeaea):|
| 31 |~|bgcolor(#39c):color(#fff): ''August'' |~| 27 | 28 | 29 | 30 | 31 |bgcolor(#39c):color(#ccc): 01 |color(#ccc): 02 ||
| 32 |~||~|bgcolor(#eaeaea): 03 |bgcolor(#eaeaea): 04 |bgcolor(#eaeaea): 05 |bgcolor(#eaeaea): 06 |bgcolor(#eaeaea): 07 |bgcolor(#eaeaea):color(#ccc): 08 |bgcolor(#eaeaea):color(#ccc): 09 |bgcolor(#eaeaea):|
| 33 |~||~| 10 | 11 | 12 | 13 | 14 |color(#ccc): 15 |color(#ccc): 16 ||
| 34 |~||~|bgcolor(#eaeaea): 17 |bgcolor(#eaeaea): 18 |bgcolor(#eaeaea): 19 |bgcolor(#eaeaea): 20 |bgcolor(#eaeaea): 21 |bgcolor(#eaeaea):color(#ccc): 22 |bgcolor(#eaeaea):color(#ccc): 23 |bgcolor(#eaeaea):|
| 35 |~||~| 24 | 25 | 26 | 27 | 28 |color(#ccc): 29 |color(#ccc): 30 ||
| 36 |~|bgcolor(#39c):color(#fff): ''September'' |~|bgcolor(#eaeaea): 31 |bgcolor(#39c): 01 |bgcolor(#eaeaea): 02 |bgcolor(#eaeaea): 03 |bgcolor(#eaeaea): 04 |bgcolor(#eaeaea):color(#ccc): 05 |bgcolor(#eaeaea):color(#ccc): 06 |bgcolor(#eaeaea):|
| 37 |~||~| 07 | 08 | 09 | 10 | 11 |color(#ccc): 12 |color(#ccc): 13 ||
| 38 |~||~|bgcolor(#eaeaea): 14 |bgcolor(#eaeaea): 15 |bgcolor(#eaeaea): 16 |bgcolor(#eaeaea): 17 |bgcolor(#eaeaea): 18 |bgcolor(#eaeaea):color(#ccc): 19 |bgcolor(#eaeaea):color(#ccc): 20 |bgcolor(#eaeaea):|
| 39 |~||~| 21 | 22 | 23 | 24 | 25 |color(#ccc): 26 |color(#ccc): 27 ||
| 40 |~|bgcolor(#39c):color(#fff): ''October'' |~|bgcolor(#eaeaea): 28 |bgcolor(#eaeaea): 29 |bgcolor(#eaeaea): 30 |bgcolor(#39c): 01 |bgcolor(#eaeaea): 02 |bgcolor(#eaeaea):color(#ccc): 03 |bgcolor(#eaeaea):color(#ccc): 04 |bgcolor(#eaeaea):|
| 41 |~||~| 05 | 06 | 07 | 08 | 09 |color(#ccc): 10 |color(#ccc): 11 ||
| 42 |~||~|bgcolor(#eaeaea): 12 |bgcolor(#eaeaea): 13 |bgcolor(#eaeaea): 14 |bgcolor(#eaeaea): 15 |bgcolor(#eaeaea): 16 |bgcolor(#eaeaea):color(#ccc): 17 |bgcolor(#eaeaea):color(#ccc): 18 |bgcolor(#eaeaea):|
| 43 |~||~| 19 | 20 | 21 | 22 | 23 |color(#ccc): 24 |color(#ccc): 25 ||
| 44 |~|bgcolor(#39c):color(#fff): ''November'' |~|bgcolor(#eaeaea): 26 |bgcolor(#eaeaea): 27 |bgcolor(#eaeaea): 28 |bgcolor(#eaeaea): 29 |bgcolor(#eaeaea): 30 |bgcolor(#eaeaea):color(#ccc): 31 |bgcolor(#39c):color(#ccc): 01 |bgcolor(#eaeaea):|
| 45 |~||~| 02 | 03 | 04 | 05 | 06 |color(#ccc): 07 |color(#ccc): 08 ||
| 46 |~||~|bgcolor(#eaeaea): 09 |bgcolor(#eaeaea): 10 |bgcolor(#eaeaea): 11 |bgcolor(#eaeaea): 12 |bgcolor(#eaeaea): 13 |bgcolor(#eaeaea):color(#ccc): 14 |bgcolor(#eaeaea):color(#ccc): 15 |bgcolor(#eaeaea):|
| 47 |~||~| 16 | 17 | 18 | 19 | 20 |color(#ccc): 21 |color(#ccc): 22 ||
| 48 |~||~|bgcolor(#eaeaea): 23 |bgcolor(#eaeaea): 24 |bgcolor(#eaeaea): 25 |bgcolor(#eaeaea): 26 |bgcolor(#eaeaea): 27 |bgcolor(#eaeaea):color(#ccc): 28 |bgcolor(#eaeaea):color(#ccc): 29 |bgcolor(#eaeaea):|
| 49 |~|bgcolor(#39c):color(#fff): ''December'' |~| 30 |bgcolor(#39c): 01 | 02 | 03 | 04 |color(#ccc): 05 |color(#ccc): 06 ||
| 50 |~||~|bgcolor(#eaeaea): 07 |bgcolor(#eaeaea): 08 |bgcolor(#eaeaea): 09 |bgcolor(#eaeaea): 10 |bgcolor(#eaeaea): 11 |bgcolor(#eaeaea):color(#ccc): 12 |bgcolor(#eaeaea):color(#ccc): 13 |bgcolor(#eaeaea):|
| 51 |~||~| 14 | 15 | 16 | 17 | 18 |color(#ccc): 19 |color(#ccc): 20 ||
| 52 |~||~|bgcolor(#eaeaea): 21 |bgcolor(#eaeaea): 22 |bgcolor(#eaeaea): 23 |bgcolor(#eaeaea): 24 |bgcolor(#eaeaea): 25 |bgcolor(#eaeaea):color(#ccc): 26 |bgcolor(#eaeaea):color(#ccc): 27 |bgcolor(#eaeaea):|
| 01 |~|bgcolor(#39c):color(#fff): ''January 10'' |~| 28 | 29 | 30 | 31 |bgcolor(#39c): 01 |color(#ccc): 02 |color(#ccc): 03 ||
|noBorder|k
<script>

var arr = new Array(3)
arr[0] = "Jani"
arr[1] = "Tove"
arr[2] = "Hege"

var arr2 = new Array(3)
arr2[0] = "John"

arr2[1] = "Andy"
arr2[2] = "Wendy"

document.write(arr.concat(arr2))

</script>
<<configOptions
chkOpenInNewWindow=true
chkIncrementalSearch=
chkAutoSave=false
txtUserName=MsgRay
chkSaveBackups=true
chkRegExpSearch=true
chkCaseSensitiveSearch=
chkAnimate=false
chkGenerateAnRssFeed=
chkCaseSensitiveSearch=
chkHttpReadOnly=
chkSearchTitles=true
chkSearchText=true
chkSearchTags=false
chkSearchTitlesFirst=false
chkSearchList=true
chkHoldSearches=false
chkSaveEmptyTemplate=false
chkSinglePageMode=false
chkToggleLinks=false
txtMaxEditRows=30
txtBackupFolder=BackupTwHelp
>>
/***
|''Name:''|ConfigOptionsMacro|
|''Version:''|0.1 (31 May 2007)|
|''Source''|http://jackparke.googlepages.com/jtw.html#ConfigOptionsMacro ([[del.icio.us|http://del.icio.us/post?url=http://jackparke.googlepages.com/jtw.html%23ConfigOptionsMacro]])|
|''Author:''|Jack|
!Description
This plugin allows you to store TiddlyWiki options in a tiddler. This means the options are part of the store and are not shared among TiddlyWiki files. The options are also more robust and persist when cookies are loaded.
!Usage
*After installation, enter the options you want persisted into the [[ConfigOptions]] tiddler
*In view mode of this tiddler you can see and modify the options
*Changes are effective and written immediately to the ConfigOptions tiddler as you modify them
*The options are loaded from ConfigOptions on startup of TiddlyWiki overriding any cookie settings
!Revision History
* Original by Jack 31 May 2007

!Code
***/
//{{{
version.extensions.configOptions = {major: 0, minor: 0, revision: 1, date: new Date('May 31, 2007')};

config.shadowTiddlers.ConfigOptions = '<<configOptions\nchkAutoSave=false\ntxtUserName=Your Name\n>>'

config.macros.configOptions = {};
config.macros.configOptions.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
 var resultText = this.parseOptions(paramString);
 if (resultText) {
  resultText = '|!Option|!Value|\n' + resultText;
  wikify(resultText, place)
  //createTiddlyButton(place,'Update','Saves your current options to the ConfigOptions tiddler.',this.update);
  applyHtmlMacros(place,tiddler)
 }
}

config.macros.configOptions.init = function() {
 var txtConfigOptions = store.getValue('ConfigOptions', 'text') || config.shadowTiddlers.ConfigOptions; 
 txtConfigOptions = txtConfigOptions.substr(txtConfigOptions.indexOf('\n')).substr(0, txtConfigOptions.length-2);
 this.parseOptions(txtConfigOptions);
}
config.macros.configOptions.parseOptions = function (paramString) {
 var resultText = ''
 var options = paramString.split(/\n/);
 for(var i=0; i < options.length; i++) {
  var opt = options[i].split('=');
  if(opt.length > 1) {
   if (opt[1] != 'true' && opt[1] != 'false' && !opt[1].match(/^\d+$/))
    opt[1] = '\'' + opt[1].replace(/'/, '\\\'') + '\'';
    resultText += '|' + opt[0].replace(/^[a-z]{2,3}/,'') + '|<<option ' + opt[0] + '>>|\n'
   try {
    eval('config.options.' + opt[0] + ' = ' + opt[1] + ';');
    //alert('config.options.' + opt[0] + ' = ' + opt[1] + ';')
   } catch (e) {
    debugger
   }
  }
 }
 return resultText;
}
config.macros.option.propagateOption = function(opt,valueField,value,elementType)
{
	config.options[opt] = value;
//	saveOptionCookie(opt);
	//if (opt=='txtUserName') debugger;
	if ((new RegExp('\n' + opt + '=','g')).test(store.getValue('ConfigOptions','text'))) {
	 config.macros.configOptions.updateOption(opt, decodeCookie(config.optionHandlers[opt.substr(0,3)].get(opt)))
	}
	
	var nodes = document.getElementsByTagName(elementType);
	for(var t=0; t<nodes.length; t++) {
		var optNode = nodes[t].getAttribute("option");
		if(opt == optNode)
			nodes[t][valueField] = value;
		}

}
config.macros.configOptions.updateOption = function(name, value) {
 var txtConfigOptions = store.getValue('ConfigOptions', 'text'); 
 var t1 = txtConfigOptions.indexOf('\n' + name + '=');
 var t2 = txtConfigOptions.indexOf('\n', t1+1);
 txtConfigOptions = txtConfigOptions.substr(0,t1) + '\n' + name + '=' + value + txtConfigOptions.substr(t2)
 store.setValue('ConfigOptions', 'text', txtConfigOptions)
}
//}}}
config.options.chkHideTabsBarWhenSingleTab=true;
config.options.txtSelectedTiddlerTabButton="jump";

config.options.chkHttpReadOnly = false;
/***
|Name|ConfirmSavePlugin|
|Source|http://www.TiddlyTools.com/#ConfirmSavePlugin|
|Documentation|http://www.TiddlyTools.com/#ConfirmSavePlugin|
|Version|1.1.0|
|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|window.saveChanges()|
|Description|if tiddlers are being edited, or there are no unsaved changes, ask before saving|
When <<saveChanges>> command link is clicked, if there are tiddlers still being edited or there are no changes unsaved changes, then ask for confirmation before saving the document to the file.
!!!!!Configuration

<<<
:
<<option chkConfirmSaveIfEditing>> confirm saving if tiddlers are still being edited
<<option chkConfirmSaveIfNoChanges>> confirm saving if there are no unsaved tiddler changes
<<<
!!!!!Revisions
<<<
2008.03.15 [1.1.0] added option settings and check for 'no unsaved changes'
2008.03.15 [1.0.0] Initial Release.
<<<
!!!!!Code
***/
//{{{
version.extensions.ConfirmSave= {major: 1, minor: 1, revision: 0, date: new Date(2008,3,15)};
//}}}
//{{{
if (config.options.chkConfirmSaveIfEditing==undefined) config.options.chkConfirmSaveIfEditing=true;
if (config.options.chkConfirmSaveIfNoChanges==undefined) config.options.chkConfirmSaveIfNoChanges=true;
//}}}
//{{{
if (config.macros.saveChanges.confirmSave_onClick==undefined) 
	config.macros.saveChanges.confirmSave_onClick=config.macros.saveChanges.onClick
config.macros.saveChanges.onClick=function(e) {
	var msg="";
	var editing=[];	// check for tiddlers being edited
	if (config.options.chkConfirmSaveIfEditing)
		story.forEachTiddler(function(tid,elem) { if (elem.getAttribute("dirty")=="true") editing.push(tid);});
	if (editing.length) {
		msg+="There "+(editing.length>1?"are ":"is ")+editing.length;
		msg+=" tiddler"+(editing.length>1?"s":"")+" currently being edited:\n\n";
		msg+=editing.join(", ")+"\n\n";
		msg+="Changes to "+(editing.length>1?"these tiddlers":"this tiddler");
		msg+=" cannot be saved until editing is completed.";
	} else if (config.options.chkConfirmSaveIfNoChanges && !store.isDirty())
		msg+="There are no unsaved tiddler changes";
	if (msg.length) {
		msg+="\n\nPress OK to save the document anyway.";
		if (!confirm(msg)) return false;
	}
	return config.macros.saveChanges.confirmSave_onClick.apply(this,arguments); // let core save
}
//}}}
|vertical-align:top;<<tiddler FooterContent##column1>>|&nbsp;&nbsp;|vertical-align:top;<<tiddler FooterContent##column2>>|
|borderlessL|k


{{textcenter{
<<tiddler [[lastModified]]>>
TW Help - Symbex Australasia Pty.Ltd. © 2006 - <<today YYYY>>
}}}
Convert double-hyphen ("""--""") to &mdash;

{{{
(function() {
for (var i = 0; i < config.formatters.length; i++)
    if (config.formatters[i].name == "strikeByChar")
        break;
if (i < config.formatters.length)
    config.formatters.splice(i,1);
})(); 
}}}
(function() {
for (var i = 0; i < config.formatters.length; i++)
    if (config.formatters[i].name == "strikeByChar")
        break;
if (i < config.formatters.length)
    config.formatters.splice(i,1);
})(); 
!!!<<gradient horiz #fc3 #fff>>[[ConvertEmPxPt]]^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;Open in a new window[img[Open outside link in a new window|http://img229.imageshack.us/img229/1687/extlink7226466sx5.gif][http://sureshjain.wordpress.com/2007/07/06/53/]]|
----
<html><div align="center"><iframe  src ="http://sureshjain.wordpress.com/2007/07/06/53/" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
/***
|Name|CookieManagerPlugin|
|Source|http://www.TiddlyTools.com/#CookieManagerPlugin|
|Version|2.0.0|
|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|review/add/delete option cookies and save current option values to CookieJar tiddler for 'sticky' settings|

!!!!!Usage
<<<
View/set/delete your current TiddlyWiki option/cookie values, as well as "bake cookies", which automatically generates the contents of a [[CookieJar]] tiddler for all current cookie-based options.   You can then edit the [[CookieJar]] to remove any lines that set unwanted fixed-value options (so that the normal cookie-based values will still be used for those options).  The code contained in the [[CookieJar]] is wrapped in a conditional so that the fixed-value options are only applied for a specific username.  That way, when you publish or share your document with others, YOUR fixed-value options are not applied, and the normal cookie-based options will still be used for everyone else.

Also, each time you "bake cookies", they are *appended* to the [[CookieJar]], so that any previous values are not automatically discarded, but are instead simply *overridden* by the newer values. After you bake a new batch of cookies, you should edit the [[CookieJar]] to remove any "stale cookies" or merge the old and new options into a single block to simplify code (for readability as well as saving a little tiddler storage space). 
<<<
!!!!!Examples
<<<

{{{<<cookieManager>>}}}
{{smallform{<<cookieManager>>}}}
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
CookieManagerPlugin
<<<
!!!!!Revision History
<<<
''2007.08.02 [2.0.0]'' converted from inline script
''2007.04.29 [1.0.0]'' initial release
<<<
!!!!!Credits
<<<
This feature was developed by Eric L Shulman / ELS Design Studios

<<<
!!!!!Code
***/
//{{{
version.extensions.cookieManager= {major: 2, minor: 0, revision: 0, date: new Date(2007,8,2)};

config.macros.cookieManager = {
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var span=createTiddlyElement(place,"span");
		span.innerHTML=this.html;
		this.setCookieEditorList(span.firstChild.list); 
	},
	html: '<form style="display:inline;margin:0;padding:0" onsubmit="return false"><!--\
		--><select style="width:99%" name="list" \
			onchange="this.form.val.value=this.value.length?config.options[this.value]:\'\';"><!--\
		--></select><br>\
		<input type="text" style="width:98%;margin:0;" name="val" title="enter an option value"><br>\
		<input type="button" style="width:33%;margin:0;" value="get" title="refresh list" \
			onclick="config.macros.cookieManager.setCookieEditorList(this.form.list);"><!--\
		--><input type="button" style="width:33%;margin:0;" value="set" title="save cookie value" \
			onclick="var opt=this.form.list.value; var v=this.form.val.value; \
				config.options[opt]=opt.substr(0,3)==\'txt\'?v:(v.toLowerCase()==\'true\'); \
				saveOptionCookie(opt);config.macros.cookieManager.setCookieEditorList(this.form.list);"><!--\
		--><input type="button" style="width:33%;margin:0;" value="del" title="remove cookie" \
			onclick="var ex=new Date(); ex.setTime(ex.getTime()-1000); \
				document.cookie=this.form.list.value+\'=novalue; path=/; expires=\'+ex.toGMTString(); \
				config.macros.cookieManager.setCookieEditorList(this.form.list);"><br>\
		<input type="button" style="width:50%;margin:0;" value="bake cookies" \
			title="save current cookie-based option values into the CookieJar tiddler" \
			onclick="return config.macros.cookieManager.bakeCookies(this,false)"><!--\
		--><input type="button" style="width:50%;margin:0;" value="bake all options" \
			title="save ALL option values (including NON-COOKIE values) into the CookieJar tiddler" \
			onclick="return config.macros.cookieManager.bakeCookies(this,true)"><!--\
		--></form>\
	',
	bakeCookies: function(here,all) {
		var title='CookieJar';
		var tid=store.getTiddler(title);
		var who=config.options.txtUserName;
		var when=new Date();
		var tags=['systemConfig'];
		if (all) { 
			var opts=new Array();
			for (var i in config.options) if (i.substr(0,3)=='chk'||i.substr(0,3)=='txt') opts.push(i);
			opts.sort();
		}
		else var opts=this.getCookieList();
		var text=tid?tid.text:'';
		text+='\n// '+opts.length+(all?' options':' cookies')+' saved ';
		text+=when.formatString('on DDD, MMM DDth YYYY at 0hh:0mm:0ss');
		text+=' by '+who+'//\n';
		text+='//^^(edit/remove username check and/or individual option settings as desired)^^//\n';
		text+='//{{{\n';
		text+='if (config.options.txtUserName=="'+who+'") {\n';
		for (i=0; i<opts.length; i++) {
			if (opts[i].substr(0,3)=='chk')
				text+='\tconfig.options.'+opts[i]+'='+config.options[opts[i]]+';\n';
			if (opts[i].substr(0,3)=='txt')
				text+='\tconfig.options.'+opts[i]+'="'+config.options[opts[i]]+'";\n';
		}
		text+='}\n//}}}\n';
		store.saveTiddler(title,title,text,who,when,tags,tid?tid.fields:null);
		story.displayTiddler(story.findContainingTiddler(this),title);
		story.refreshTiddler(title,null,true);
		displayMessage(opts.length+(all?' options':' cookies')+' have been saved in '+title+'.  Please review all stored settings.');
		return false;
	},
	getCookieList: function() {
		var cookies = { };
		if (document.cookie != "") {
			var p = document.cookie.split("; ");
			for (var i=0; i < p.length; i++) {
				var pos=p[i].indexOf("=");
				if (pos==-1) cookies[p[i]]="";
				else cookies[p[i].substr(0,pos)]=unescape(p[i].slice(pos+1));
			}
		}
		var opt=new Array(); for (var i in config.options) if (cookies[i]) opt.push(i); opt.sort();
		return opt;
	},
	setCookieEditorList: function(list) {
		var opt=this.getCookieList();
		var sel=list.selectedIndex;
		while (list.options.length > 1) { list.options[1]=null; } // clear list (except for header item)
		list.options[0]=new Option("There are "+opt.length+" cookies...","",false,false);
		if (!opt.length) { list.form.val.value=""; return; } // no cookies
		var c=1;
		for(var i=0; i<opt.length; i++) {
			var txt="";
			if  (opt[i].substr(0,3)=="chk")
				txt+="["+(config.options[opt[i]]?"x":"_")+"] ";
			txt+=opt[i];
			list.options[c++]=new Option(txt,opt[i],false,false);
		}
		list.selectedIndex=sel>0?sel:0;
		list.form.val.value=sel>0?config.options[list.options[sel].value]:"";
	}
}
//}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[CorePlugins]]^^<<tiddler CloseThisOpen with: ThirdPartyPlugins  '« back'>>|<<toolbar editTiddler>>» ^^>>

Core Plugins  plugins previously in the core
http://www.tiddlywiki.com/coreplugins.html

http://www.tiddlywiki.com/coreplugins.html#DeprecatedFunctionsPlugin
http://www.tiddlywiki.com/coreplugins.html#LegacyStrikeThroughPlugin
http://www.tiddlywiki.com/coreplugins.html#SparklinePlugin

window.findScrollOffsetX=function(obj) {
	var x=0;
	while(obj) {
		if (obj.scrollLeft && obj.nodeName!='HTML')
			x+=obj.scrollLeft;
		obj=obj.parentNode;
	}
	return -x;
}

window.findScrollOffsetY=function(obj) {
	var y=0;
	while(obj) {
		if (obj.scrollTop && obj.nodeName!='HTML')
			y+=obj.scrollTop;
		obj=obj.parentNode;
	}
	return -y;
}

var fn=Popup.place.toString();
if (fn.indexOf('findScrollOffsetX')==-1) { // only once
	fn=fn.replace(/var\s*rootLeft\s*=/,'var rootLeft = window.findScrollOffsetX(root) +');
	fn=fn.replace(/var\s*rootTop\s*=/,'var rootTop = window.findScrollOffsetY(root) +');
	eval('Popup.place='+fn);
}

/***
|Name|CoreTweaks|
|Source|http://www.TiddlyTools.com/#CoreTweaks|
|Version|n/a|
|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.2.4|
|Type|plugin|
|Requires||
|Overrides|various|
|Description|a small collection of overrides to TW core functions|
This tiddler contains some quick tweaks and modifications to TW core functions to provide minor changes in standard features or behavior.  It is hoped that some of these tweaks may be incorporated into later versions of the TW core, so that these adjustments will be available without needing these add-on definitions. ''Note: the changes contained in this tiddler are generally applicable for the current version of TiddlyWiki (<<version>>)./% Please view [[CoreTweaksArchive]] for tweaks and modifications that may be used with earlier versions of TiddlyWiki.%/''

To install //all// of these tweaks, import (or copy/paste) this tiddler into your document.  To include only //some// of the tweaks, you can edit the imported tiddler to remove the tweaks that you don't want.  Alternatively, you could copy/paste a few selected tweaks from this tiddler into a tiddler that you create in your own document.  Be certain to tag that tiddler with<<tag systemConfig>> (i.e., a plugin tiddler) and then save-and-reload for the tweaks to take effect.
***/

// // {{block{
/***
!!!784 allow tiddler sections in TiddlyLinks to be used as anchor points for intra-tiddler scrolling.  
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/784 - OPEN
You can currently use the tiddler section syntax within the {{{<<tiddler>>}}} macro to //transclude// a subsection of one tiddler into another (e.g., {{{<<tiddler SomeTiddler##SomeSection>>}}}).  However, when the same section syntax is used in a TiddlyLink (e.g., {{{[[SomeTiddler##SomeSection]]}}}), the entire reference is treated as a link to a (non-existent) tiddler that includes the section reference in the tiddler title itself.

This tweak extends the TiddlyLink processing to separate the section reference from the tiddler name and use that reference to auto-scroll to the indicated section heading (if present) within that tiddler (i.e., the same behavior as {{{<a name="foo">}}} and {{{<a href="#foo">...</a>}}} HTML syntax).  
***/
//{{{
Story.prototype.scrollToSection = function(title,section) {
	if (!title||!section) return;
	var t=this.getTiddler(title); if (!t) return;
	var s=[];
	var h=t.getElementsByTagName("H1"); for (var i=0;i<h.length;i++) s.push(h[i]);
	var h=t.getElementsByTagName("H2"); for (var i=0;i<h.length;i++) s.push(h[i]);
	var h=t.getElementsByTagName("H3"); for (var i=0;i<h.length;i++) s.push(h[i]);
	var h=t.getElementsByTagName("H4"); for (var i=0;i<h.length;i++) s.push(h[i]);
	var h=t.getElementsByTagName("H5"); for (var i=0;i<h.length;i++) s.push(h[i]);
	var h=t.getElementsByTagName("H6"); for (var i=0;i<h.length;i++) s.push(h[i]);
	for (var i=0; i<s.length; i++) if (s[i].innerHTML.substr(0,section.length)==section)
		setTimeout("window.scrollTo(0,"+findPosY(s[i])+")",
			config.options.chkAnimate?config.animDuration+100:0);
}
window.createTiddlyLink_sectionanchor=window.createTiddlyLink;
window.createTiddlyLink=function(place,title) {
	var parts=title.split(config.textPrimitives.sectionSeparator);
	if (parts[0].length && parts[1]) arguments[1]=parts[0]; // trim section from tiddler title
	var btn=createTiddlyLink_sectionanchor.apply(this,arguments);
	btn.setAttribute('section',parts[1]); // save section
	return btn;
}
window.onClickTiddlerLink_sectionanchor=window.onClickTiddlerLink;
window.onClickTiddlerLink=function(ev) {
	var r=onClickTiddlerLink_sectionanchor.apply(this,arguments);
	var e=ev||window.event;	var target=resolveTarget(e); var title=null;
	while (target!=null && title==null) {
		title=target.getAttribute("tiddlyLink");
		section=target.getAttribute("section");
		target=target.parentNode;
	} 
	story.scrollToSection(title,section);
	return r;
}
Story.prototype.displayTiddler_sectionanchor=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler)
{
	var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
	var parts=title.split(config.textPrimitives.sectionSeparator);
	if (parts[0].length && parts[1]) arguments[1]=parts[0]; // trim section from tiddler title
	this.displayTiddler_sectionanchor.apply(this,arguments);
	story.scrollToSection(parts[0],parts[1]);
}
//}}}
// // }}}}}}// // {{block{

/***
!!! Ticketed Tweaks
***/
// // {{groupbox small{
http://trac.tiddlywiki.org/ticket/675 - OPEN
// // This tweak adds a URL paramifier, "#recent:N", to automatically display the N most recently changed tiddlers.  N is, of course, an integer number.  If N=0 (or is not a numeric value), the regular [[DefaultTiddlers]] will be displayed.
//{{{
config.paramifiers.recent= {
	onstart: function(v) {
		var titles=[];
		var tids=store.getTiddlers("modified","excludeLists").reverse();
		for (var t=0; t<v && t<tids.length; t++) titles.push(tids[t].title);
		story.displayTiddlers(null,titles); 
	}
};
//}}}
// // }}}
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/664 - OPEN
This tweak provides "loose" matching of tiddler titles so that text using variations of mixed-case and/or added/omitted spaces can still be used to create links enclosed in {{{[[...]]}}}.  This permits normal prose-style text to be easily linked to tiddler titles, without requiring use of the "pretty link" syntax.  For example:
{{{
[[CoreTweaks]], [[coreTweaks]], [[core tweaks]],
[[CORE TWEAKS]], [[CoRe TwEaKs]], [[coreTWEAKS]]
}}}

>[[CoreTweaks]], [[coreTweaks]], [[core tweaks]],
>[[CORE TWEAKS]], [[CoRe TwEaKs]], [[coreTWEAKS]]
Configuration:
><<option chkLooseLinks>> Allow case-folded and/or space-folded text to link to existing tiddler titles
>{{{usage: <<option chkLooseLinks>>}}}
***/
//{{{
if (!config.options.chkLooseLinks)
	config.options.chkLooseLinks=false; // default to standard behavior
window.caseFold_createTiddlyLink = window.createTiddlyLink;
window.createTiddlyLink = function(place,title,includeText,className) {
	var btn=window.caseFold_createTiddlyLink.apply(this,arguments); // create core link
	if (!config.options.chkLooseLinks) return btn;
	if (store.getTiddlerText(title)) return btn; // matching tiddler (or shadow) exists
	var target=title.toLowerCase().replace(/\s/g,"");
	var tids=store.getTiddlers("title");
	for (var t=0; t<tids.length; t++) {
		if (tids[t].title.toLowerCase().replace(/\s/g,"")==target) {
			var i=getTiddlyLinkInfo(tids[t].title,className);
			btn.setAttribute("tiddlyLink",tids[t].title);
			btn.title=i.subTitle;
			btn.className=i.classes;
			break;
		}
	}
	return btn;
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/657 - OPEN
// // This tweak inserts an extra space element following each tab, allowing them to wrap onto multiple lines if needed.
//{{{
config.macros.tabs.handler = function(place,macroName,params)
{
	var cookie = params[0];
	var numTabs = (params.length-1)/3;
	var wrapper = createTiddlyElement(null,"div",null,"tabsetWrapper " + cookie);
	var tabset = createTiddlyElement(wrapper,"div",null,"tabset");
	tabset.setAttribute("cookie",cookie);
	var validTab = false;
	for(var t=0; t<numTabs; t++) {
		var label = params[t*3+1];
		var prompt = params[t*3+2];
		var content = params[t*3+3];
		var tab = createTiddlyButton(tabset,label,prompt,this.onClickTab,"tab tabUnselected");
		createTiddlyElement(tab,"span",null,null," ",{style:"font-size:0pt;line-height:0px"}); // ELS
		tab.setAttribute("tab",label);
		tab.setAttribute("content",content);
		tab.title = prompt;
		if(config.options[cookie] == label)
			validTab = true;
	}
	if(!validTab)
		config.options[cookie] = params[1];
	place.appendChild(wrapper);
	this.switchTab(tabset,config.options[cookie]);
};
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/635 - FIXED (not yet released) http://trac.tiddlywiki.org/changeset/5116
// // When using backstage>import "browse" button, resulting URL is improperly formed with "file://" prefix instead of "file:///" prefix.  This causes errors when using Firefox 3 (beta) or when running under Windows Vista OS.
// // http://trac.tiddlywiki.org/ticket/638 - FIXED (not yet released) http://trac.tiddlywiki.org/changeset/5080
// // When entering text directly into path/file field, each keystroke is displayed and then discarded, preventing manual entry of path/file.
// // http://trac.tiddlywiki.org/ticket/639 - FIXED (not yet released) http://trac.tiddlywiki.org/changeset/5113
// // Pressing "enter" from URL or Browse input field immediately reloads the current document.  Instead, it should trigger the "open" button for the import wizard (if a URL has been entered)
//{{{
// #635 and #638
config.macros.importTiddlers.onBrowseChange = function(e)
{
	var wizard = new Wizard(this);
	var fileInput = wizard.getElement("txtPath");
	fileInput.value = config.macros.importTiddlers.getURLFromLocalPath(this.value); // #635
	var serverType = wizard.getElement("selTypes");
	serverType.value = "file";
	return true; // #638
};
// #635 - fixup local path/file to form absolute URL reference
config.macros.importTiddlers.getURLFromLocalPath = function(v)
{
	if (!v||!v.length) return v;
	v=v.replace(/\\/g,"/"); // use "/" for cross-platform consistency
	var t=v.split(":"); p=t[1]||t[0]; // remove drive letter (if any)
	if (t[1] && (t[0]=="http"||t[0]=="https"||t[0]=="file")) { // input is already a URL
		var u=v;
	} else if (p.substr(0,1)=="/") { // path is absolute, add protocol+domain+extra slash (if drive letter)
		var u=document.location.protocol+"//"+document.location.hostname+(t[1]?"/":"")+v;
	} else { // path is relative, add current document protocol+domain+path
		var c=document.location.href.replace(/\\/g,"/");
		var pos=c.lastIndexOf("/"); if (pos!=-1) c=c.substr(0,pos); // remove filename
		var u=c+"/"+p;
	}
	return u;
}
// #639 - prevent form action and click "open" button if ENTER is pressed
config.macros.importTiddlers.coreTweaks_restart = config.macros.importTiddlers.restart;
config.macros.importTiddlers.restart = function(wizard)
{
	config.macros.importTiddlers.coreTweaks_restart.apply(this,arguments);
	wizard.formElem.action="javascript:;"

	wizard.formElem.onsubmit=function() {
		if (this.txtPath.value.length)
			this.lastChild.firstChild.onclick();  // press "open" button
	}
};
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/637 - OPEN
// // This tweak modifies the tooltip format that appears when you mouseover a link to a tiddler.  It adds an option to control the date format, as well as displaying the size of the tiddler (in bytes)
// //
// // Tiddler link tooltip format:
// // {{stretch{<<option txtTiddlerLinkTootip>>}}}
// // ^^where: %0=title, %1=username, %2=modification date, %3=size in bytes^^
// // Tiddler link tooltip date format:
// // {{stretch{<<option txtTiddlerLinkTooltipDate>>}}}
//{{{
config.messages.tiddlerLinkTooltip="%0 - %1, %2 (%3 bytes)";
config.messages.tiddlerLinkTooltipDate="DDD, MMM DDth YYYY 0hh12:0mm AM";

config.options.txtTiddlerLinkTootip=
	config.options.txtTiddlerLinkTootip||config.messages.tiddlerLinkTooltip;
config.options.txtTiddlerLinkTooltipDate=
	config.options.txtTiddlerLinkTooltipDate||config.messages.tiddlerLinkTooltipDate;

Tiddler.prototype.getSubtitle = function() {
	var modifier = this.modifier;
	if(!modifier) modifier = config.messages.subtitleUnknown;
	var modified = this.modified;
	if(modified) modified = modified.formatString(config.options.txtTiddlerLinkTooltipDate);
	else modified = config.messages.subtitleUnknown;
	return config.options.txtTiddlerLinkTootip.format([this.title,modifier,modified,this.text.length]);
};
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/628 - OPEN
// // When invoking a macro that is not defined, this tweak prevents the display of the "error in macro... no such macro" message.  This is useful when rendering tiddler content or templates that reference macros that are defined by //optional// plugins that have not been installed in the current document.
// //
// // <<option chkHideMissingMacros>> hide "no such macro" error messages
//{{{
if (config.options.chkHideMissingMacros===undefined)
	config.options.chkHideMissingMacros=false;

window.coreTweaks_missingMacro_invokeMacro = window.invokeMacro;
window.invokeMacro = function(place,macro,params,wikifier,tiddler) {
	if (!config.macros[macro] || !config.macros[macro].handler)
		if (config.options.chkHideMissingMacros) return;
	window.coreTweaks_missingMacro_invokeMacro.apply(this,arguments);
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/623 - FIXED (not yet released) http://trac.tiddlywiki.org/changeset/5143
/***
This tweak allows date format strings to contain backslash-quoted characters that bypass date format replacement.  This allows sequences such as "s\s", "m\m" or "a\m" to be used so that "ss", "mm" or "am" can appears as literal text within journal titles or other date-formatted values.

For example:

>{{{<<today "withhold less hummingbirds - YYYY.0MM.0DD 0hh:0mm:0ss">>}}}
>results in: <<today "withhold less hummingbirds - YYYY.0MM.0DD 0hh:0mm:0ss">>
while:
>{{{<<today "with\hold les\s hum\mingbirds - YYYY.0MM.0DD 0hh:0mm:0ss">>}}}
>results in: <<today "with\hold les\s hum\mingbirds - YYYY.0MM.0DD 0hh:0mm:0ss">>

***/
//{{{
Date.prototype.coreTweaks_formatString = Date.prototype.formatString;
Date.prototype.formatString = function(template) {
	var t = Date.prototype.coreTweaks_formatString.apply(this,arguments);
	t = t.replace(/\\/g,""); // strip backslashes used to quote formats
	return t;
};
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/609 - OPEN (separators)
// // http://trac.tiddlywiki.org/ticket/610 - OPEN (wikify tiddler/slice/section content)
// // These tweaks extend the {{{<<toolbar>>}}} macro to permit use of "|" as separators, as well as recognizing references to tiddlernames, slices, or sections and rendering their content inline within the toolbar
// // ''see [[ToolbarCommands]] for examples of how these features can be used''
//{{{
merge(config.macros.toolbar,{
	separator: "|"
	});
config.macros.toolbar.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
	for(var t=0; t<params.length; t++) {
		var c = params[t];
		switch(c) {
			case '|':  // ELS - SEPARATOR
			case '!':  // ELS - SEPARATOR (alternative for use in tiddler slices)
				createTiddlyText(place,this.separator); // ELS
				break; // ELS
			case '>':
				var btn = createTiddlyButton(place,this.moreLabel,this.morePrompt,config.macros.toolbar.onClickMore);
				addClass(btn,"moreCommand");
				var e = createTiddlyElement(place,"span",null,"moreCommand");
				e.style.display = "none";
				place = e;
				break;
			default:
				var theClass = "";
				switch(c.substr(0,1)) {
					case "+":
						theClass = "defaultCommand";
						c = c.substr(1);
						break;
					case "-":
						theClass = "cancelCommand";
						c = c.substr(1);
						break;
				}
				if(c in config.commands)
					this.createCommand(place,c,tiddler,theClass);
				else { // ELS - WIKIFY TIDDLER/SLICE/SECTION
					if (c.substr(0,1)=="~") c=c.substr(1); // ignore leading ~
					var txt=store.getTiddlerText(c);
					if (txt) {
						txt=txt.replace(/^\n*/,"").replace(/\n*$/,""); // trim any leading/trailing newlines
						txt=txt.replace(/^\{\{\{\n/,"").replace(/\n\}\}\}$/,""); // trim PRE format wrapper if any
						wikify(txt,createTiddlyElement(place,"span"),null,tiddler);
					}
				} // ELS - end WIKIFY CONTENT
				break;
		}
	}
};
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/608 - OPEN
// // This tweak extends the {{{<<toolbar>>}}} macro to make the ">" (more) a //toggle// between more/less with the additional toolbar commands displayed on a separate line.
//{{{
merge(config.macros.toolbar,{
	moreLabel: 'more',
	morePrompt: "Show additional commands",
	lessLabel: 'less',
	lessPrompt: "Hide additional commands"

});
config.macros.toolbar.onClickMore = function(ev)
{
	var e = this.nextSibling;
	var showing=e.style.display=="block";
	e.style.display = showing?"none":"block";
	this.innerHTML=showing?config.macros.toolbar.moreLabel:config.macros.toolbar.lessLabel;
	this.title=showing?config.macros.toolbar.morePrompt:config.macros.toolbar.lessPrompt;
	return false;
};
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/607 - OPEN
// // This tweak automatically sets the HREF for the 'permaview' sidebar command link so you can use the 'right click' context menu for faster, easier bookmarking.  Note that this does ''not'' automatically set the permaview in the browser's current location URL... it just sets the HREF on the command link.  You still have to click the link to apply the permaview.
//{{{
config.macros.permaview.handler = function(place)
{
	var btn=createTiddlyButton(place,this.label,this.prompt,this.onClick);
	addEvent(btn,"mouseover",this.setHREF);
	addEvent(btn,"focus",this.setHREF);
};
config.macros.permaview.setHREF = function(event){
	var links = [];
	story.forEachTiddler(function(title,element) {
		links.push(String.encodeTiddlyLink(title));
	});
	var newURL=document.location.href;
	var hashPos=newURL.indexOf("#");
	if (hashPos!=-1) newURL=newURL.substr(0,hashPos);
	this.href=newURL+"#"+encodeURIComponent(links.join(" "));
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/529 - OPEN
// // This tweak hijacks the standard browser function, document.getElementById(), to work-around the case-INsensitivity error in Internet Explorer (all versions up to and including IE7) //''Note: This tweak is only applied when using IE, and only for lookups of rendered tiddler elements within the containing "tiddlerDisplay" element.''//
//{{{
if (config.browser.isIE) {
document.coreTweaks_coreGetElementById=document.getElementById;
document.getElementById=function(id) {
	var e=document.coreTweaks_coreGetElementById(id);
	if (!e || !e.parentNode || e.parentNode.id!="tiddlerDisplay") return e;
	for (var i=0; i<e.parentNode.childNodes.length; i++)
		if (id==e.parentNode.childNodes[i].id) return e.parentNode.childNodes[i];
	return null;
};
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/471 - OPEN
// // This tweak HIJACKS the core's saveTiddler() function to automatically add a "creator" field to a tiddler when it is FIRST created. You can use {{{<<view creator>>}}} (or {{{<<view creator wikified>>}}} if you prefer) to show this value embedded directly within the tiddler content, or {{{<span macro="view creator"></span>}}} in the ViewTemplate and/or EditTemplate to display the creator value in each tiddler.  
//{{{
// hijack saveTiddler()
TiddlyWiki.prototype.CoreTweaks_creatorSaveTiddler=TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler=function(title,newTitle,newBody,modifier,modified,tags,fields)
{
	var existing=store.tiddlerExists(title);
	var tiddler=this.CoreTweaks_creatorSaveTiddler.apply(this,arguments);
	if (!existing) store.setValue(title,"creator",config.options.txtUserName);
	return tiddler;
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/458 - CLOSED: WON'T FIX
// // This tweak assigns a "permalink"-like HREF to internal Tiddler links (which normally do not have any HREF defined).  This permits the link's context menu (right-click) to include 'open link in another window/tab' command.  Based on a request from Dustin Spicuzza.
//{{{
window.coreTweaks_createTiddlyLink=window.createTiddlyLink;
window.createTiddlyLink=function(place,title,includeText,theClass,isStatic,linkedFromTiddler,noToggle)
{
	// create the core button, then add the HREF (to internal links only)
	var link=window.coreTweaks_createTiddlyLink.apply(this,arguments);
	if (!isStatic)
		link.href=document.location.href.split("#")[0]+"#"+encodeURIComponent(String.encodeTiddlyLink(title));
	return link;
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/444 - OPEN
// // When invoking a macro, this tweak makes the current containing tiddler object and DOM rendering location available as global variables (window.tiddler and window.place, respectively).  These globals can then be used within "computed macro parameters" to retrieve tiddler-relative and/or DOM-relative values or perform tiddler-specific side-effect functionality.
//{{{
window.coreTweaks_invokeMacro = window.invokeMacro;
window.invokeMacro = function(place,macro,params,wikifier,tiddler) {
	var here=story.findContainingTiddler(place);
	window.tiddler=here?store.getTiddler(here.getAttribute("tiddler")):null;
	window.place=place;
	window.coreTweaks_invokeMacro.apply(this,arguments);
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/401 - CLOSED: WON'T FIX
// // This tweak allows definition of an optional [[PageTitle]] tiddler that, when present, provides alternative text for display in the browser window's titlebar, instead of using the combined text content from [[SiteTitle]] and [[SiteSubtitle]] (which will still be displayed as usual in the TiddlyWiki document header area)
//{{{
window.coreTweaks_getPageTitle=window.getPageTitle;
window.getPageTitle=function() { 
	var txt=wikifyPlain("PageTitle"); if (txt.length) return txt;
	return window.coreTweaks_getPageTitle.apply(this,arguments);
}
store.addNotification("PageTitle",refreshPageTitle); // so title stays in sync with tiddler changes
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/67 - OPEN
// // The "missing links" list includes items contained within "quoted" text (i.e., content that will not render as wiki-syntax, and so CANNOT create any tiddler links, even if the quoted text matches valid link syntax).  This tweak removes content contained between certain delimiters before scanning tiddler source for possible links.
/***
Delimiters include:
{{{
/%...%/
{{{...}}}

"""..."""
<nowiki>...</nowiki>
<html>...</html>
<script>...</script>
}}}
***/
//{{{
Tiddler.prototype.coreTweaks_changed = Tiddler.prototype.changed;
Tiddler.prototype.changed = function()
{
	var savedtext=this.text;
	// remove 'quoted' text before scanning tiddler source
	this.text=this.text.replace(/\/%((?:.|\n)*?)%\//g,""); // /%...%/
	this.text=this.text.replace(/\{{3}((?:.|\n)*?)\}{3}/g,""); // {{{...}}}
	this.text=this.text.replace(/"{3}((?:.|\n)*?)"{3}/g,""); // """..."""

	this.text=this.text.replace(/\<nowiki\>((?:.|\n)*?)\<\/nowiki\>/g,""); // <nowiki>...</nowiki>
	this.text=this.text.replace(/\<html\>((?:.|\n)*?)\<\/html\>/g,""); // <html>...</html>

	this.text=this.text.replace(/\<script((?:.|\n)*?)\<\/script\>/g,""); // <script>...</script>
	this.coreTweaks_changed.apply(this,arguments);
	// restore quoted text to tiddler source
	this.text=savedtext;
};
//}}}
// // }}}
/***
!!! Fixed in TW240
***/
// // {{groupbox small{
// // calculate version number for conditional inclusion of tweaks below...
//{{{
var ver=version.major+version.minor/10;
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/578 - FIXED IN TW240
// // This tweak trims any leading whitespace/newline and the trailing newline from tiddler sections
//{{{
if (ver<2.4) {
TiddlyWiki.prototype.coreTweaks_getTiddlerText = TiddlyWiki.prototype.getTiddlerText;
TiddlyWiki.prototype.getTiddlerText = function(title,defaultText)
{
	var r=TiddlyWiki.prototype.coreTweaks_getTiddlerText.apply(this,arguments);
	if (r&&title.indexOf(config.textPrimitives.sectionSeparator)!=-1)
		r=r.replace(/^[ \t]*\n/,"").replace(/\n$/,""); // trim any leading/trailing newlines
	return r;
};
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/541 - FIXED IN TW240
// // This tweak adds a conditional check to the core's 'open' paramifier, so that when the document is viewed in readOnly mode, non-existent tiddlers specified using a permalink/permaview (i.e. "#TiddlerName" in the document URL) will not be displayed as an empty tiddler (which shows the "double-click to create" default text).
//{{{
if (ver<2.4) {
config.paramifiers.open = { 
onstart: function(v) { 
		if(!readOnly || store.tiddlerExists(v) || store.isShadowTiddler(v)) 
			story.displayTiddler("bottom",v,null,false,null); 
	} 
}; 
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/470 - FIXED IN TW240
// // This tweak lets you set an alternative initial focus field when editing a tiddler (default field is "text")
// // Enter initial focus field name: <<option txtEditorFocus>> (//usage:// {{{<<option txtEditorFocus>>}}})
//{{{
if (ver<2.4) {
config.commands.editTiddler.coreTweaks_handler = config.commands.editTiddler.handler;
config.commands.editTiddler.handler = function(event,src,title)
{
	if (config.options.txtEditorFocus==undefined) config.options.txtEditorFocus="text";
	this.coreTweaks_handler.apply(this,arguments);
	story.focusTiddler(title,config.options.txtEditorFocus);
	return false;
};
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/468 - FIXED IN TW240
// // This tweak extends the core's {{{<<tag>>}}} macro to accept additional parameters for specifying alternative label and tooltip text for the tag popup "button" link (i.e., "`PrettyTags").  Based on a suggestion by ~PBee.
//{{{
// hijack tag handler()
if (ver<2.4) {
config.macros.tag.CoreTweaks_handler=config.macros.tag.handler;
config.macros.tag.handler = function(place,macroName,params)
{
	this.CoreTweaks_handler.apply(this,arguments);
	var btn=place.lastChild;
	if (params[1]) btn.innerHTML=params[1];
	if (params[2]) btn.title=params[2];
}
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/320 - FIXED IN TW240
// // This tweak updates the core's forceReflow() function to fix a Firefox rendering problem, whereby the contents of the a tiddler editor text area can be incorrectly displayed (overlapping other content) when more than one tiddler is in edit mode.
//{{{
if (ver<2.4) {
function forceReflow()
{
	if(config.browser.isGecko) {
		setStylesheet("body {top:-0px;margin-top:0px;}");
		setTimeout('setStylesheet("")',1); // invoke async to bypass browser optimization
	}
}
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/42 - FIXED IN TW240
// // This tweak adjusts the left position of a TW popup so that it won't overlap with the browser window's vertical scrollbar, when present.
//{{{
if (ver<2.4) {
Popup.place = function(root,popup,offset)
{
	if(!offset) var offset = {x:0, y:0};
	var rootLeft = findPosX(root);
	var rootTop = findPosY(root);
	var rootHeight = root.offsetHeight;
	var popupLeft = rootLeft + offset.x;
	var popupTop = rootTop + rootHeight + offset.y;
	var winWidth = findWindowWidth();
	if(popup.offsetWidth > winWidth*0.75)
		popup.style.width = winWidth*0.75 + "px";
	var popupWidth = popup.offsetWidth;
	// ELS: leave space for vertical scrollbar
	var scrollWidth=winWidth-document.body.offsetWidth;
	if(popupLeft+popupWidth > winWidth-scrollWidth-1)
		popupLeft = winWidth-popupWidth-scrollWidth-1;
	popup.style.left = popupLeft + "px";
	popup.style.top = popupTop + "px";
	popup.style.display = "block";
};
}
//}}}
// // }}}
/***
!!!Unticketed Tweaks
***/
// // {{groupbox small{
// // This tweak adds an optional 'sortby' parameter to the {{{<<tag tagname label tip sortby>>}}} macro, as well as the {{{<<allTags excludeTag sortby>>}}} macro used to generate the sidebar contents 'tags' list.  Specify the field on which the contents of each tag popup is to be sorted, with a "+" or "-" prefix to indicate ascending/descending order, respectively.

// // Example: {{{<<tag systemConfig "plugins" "list plugins by date, most recent first" "-modified">>}}}
// // Try it: <<tag systemConfig "plugins" "list plugins by date, most recent first" "-modified">>

// // Similarly, to change the sort order used by the popups from all tags shown in the sidebar contents, edit the [[TagTags]] shadow tiddler and enter: {{{<<allTags excludeLists -modified>>}}}

//{{{
// hijack tag handler() to add 'sortby' attribute to tag button
config.macros.tag.CoreTweaksSortTags_handler=config.macros.tag.handler;
config.macros.tag.handler = function(place,macroName,params)
{
	this.CoreTweaksSortTags_handler.apply(this,arguments);
	var btn=place.lastChild;
	if (params[3]) btn.setAttribute("sortby",params[3]);
}

// TWEAK <<allTags>> macro to add 'sortby' attribute to each tag button
var fn=config.macros.allTags.handler;
var lines=fn.toString().split("\n");
lines.splice(lines.length-2,0,['if(params[1]) btn.setAttribute("sortby",params[1]);']);
fn=lines.join("\n");
eval("config.macros.allTags.handler="+fn);

// TWEAK event handler for clicking on a tiddler tag to use 'sortby' attribute
var fn=onClickTag;
fn=fn.toString().replace(
	/store.getTaggedTiddlers\(tag\);/g,
	'store.getTaggedTiddlers(tag);'
	+'var sortby=this.getAttribute("sortby");'
	+'if(sortby&&sortby.length) store.sortTiddlers(tagged,sortby);'
);
eval(fn);
//}}}
// // }}}
// // {{groupbox small{
// // This HIJACK tweak pre-processes source content to convert "double-backslash-newline" into {{{<br>}}} before wikify(), so that literal newlines can be embedded in line-mode wiki syntax (e.g., tables, bullets, etc.).  Based on a suggestion from Sitaram Chamarty.
//{{{
window.coreWikify = wikify;
window.wikify = function(source,output,highlightRegExp,tiddler)
{
	if (source) arguments[0]=source.replace(/\\\\\n/mg,"<br>");
	coreWikify.apply(this,arguments);
}
//}}}
// // }}}
/***
|Name|CoreTweaks|
|Source|http://www.TiddlyTools.com/#CoreTweaks|
|Version|n/a|
|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.2.0|
|Type|plugin|
|Requires||
|Overrides|various|
|Description|a small collection of overrides to TW core functions|
This tiddler contains some quick tweaks and modifications to TW core functions to provide minor changes in standard features or behavior.  It is hoped that some of these tweaks may be incorporated into later versions of the TW core, so that these adjustments will be available without needing these add-on definitions.
>''Note: the changes contained in this tiddler are generally applicable for the current version of TiddlyWiki (<<version>>). Please view [[CoreTweaksArchive]] for tweaks and modifications that may be used with earlier versions of TiddlyWiki.''
----
***/
// // {{block{
/***
!!!757 add removeOptionCookie() function
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/757 - OPEN
When a TW option is reset to it's hard-coded default value, the corresponding browser cookie is usually just set to that default value, which results in an accumulation of unnecessary cookies.  Unfortunately, there is a browser-imposed limit on the number of cookies that are stored for any given domain and, when that limit is reached, the browser starts removing cookies on it's own, thereby unexpectedly discarding some TW settings.  In order to allow core and/or plugin code to 'clean up after themselves' and remove unneeded cookies, this tweak provides a new 'core' function, removeOptionCookie() that is the inverse of the existing saveOptionCookie(), and results in the actual deletion of the browser cookie associated with the specified TW option.
***/
//{{{
if (window.removeOptionCookie===undefined) {
window.removeOptionCookie=function(cookie) {
	var ex=new Date();
	ex.setTime(ex.getTime()-1000);  // immediately expire cookie
	document.cookie = cookie+"=novalue; path=/; expires="+ex.toGMTString();
}
}
//}}}
// // }}}}}}// // {{block{
/***
!!!749 ieCreatePath fixup for handling / in UNC paths
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/749 - OPEN
***/
//{{{
// tweak ieCreatePath to add fallback check for / (in addition to current check for \)
var fn=window.ieCreatePath;
fn=fn.toString().replace(/function ieCreatePath\(path\)/,'window.ieCreatePath=function(path)');
fn=fn.toString().replace(/var pos = path.lastIndexOf\("\\\\"\);/,
	'var pos=path.lastIndexOf("\\\\"); if(pos==-1) pos=path.lastIndexOf("/");');
eval(fn);
//}}}
// // }}}}}}// // {{block{
/***
!!!742 #animate:... paramifier
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/742 - OPEN
Occasionally, when using some low-end browser/hardware combinations, TiddlyWiki documents can "bog down" and become almost unusable due to poor responsiveness.  Fortunately, disabling animation effects (via <<option chkAnimate>>) often makes a big difference in performance.  Unfortunately, clearing this checkbox can be nearly impossible if the document in question is already bogged down due to animations.  The "#animate:true/false" paramifier avoids this problem by allowing the user to set/clear the 'chkAnimate' flag on-the-fly while the URL is being initially loaded into the browser.
***/
//{{{
config.paramifiers.animate= {
	onstart: function(v) {
		config.options.chkAnimate=eval(v);
	}
};
//}}}
// // }}}}}}// // {{block{
/***
!!!741 allow """<hr>""" directly in wiki-formatted content
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/741 - OPEN
This tweak extends the 'horizontal rule' formatter to recognize {{{<hr>}}} (or {{{<hr />}}}) directly in tiddler content without being enclosed within an HTML block (i.e., {{{<html><hr></html>}}}).  This allows HR elements to be used within table cell content, bullet items and other ''line-mode'' syntax, where the required use of newlines surrounding the """----""" syntax would interfere with the enclosing line-mode formatting.
***/
//{{{
config.formatters[config.formatters.findByField("name","rule")].match+="|<hr ?/?>\\n?";
//}}}
// // }}}}}}// // {{block{
/***
!!!683 FireFox3 Import bug: "browse" button replacement
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/683 - OPEN
The web standard "type=file" input control that has been used as a local path/file picker for TiddlyWiki no longer works as expected in FireFox3, which has, for "security" reasons, limited javascript access to this control so that *no* local filesystem path information can be revealed, even when it is intentional and necessary, as it is with TiddlyWiki.  This tweak provides alternative HTML source that patches the backstage import panel.  It replaces the "type=file" input control with a text+button combination of controls that invokes a system-native secure 'file-chooser' dialog box to provide TiddlyWiki with access to a complete path+filename so that TW functions properly locate user-selected local files.

>Note: ''This tweak also requires http://trac.tiddlywiki.org/ticket/604 - cross-platform askForFilename()''
***/
//{{{
if (window.Components) {
	var fixhtml='<input name="txtBrowse" style="width:30em"><input type="button" value="..."'
		+' onClick="window.browseForFilename(this.previousSibling,true)">';
	var cmi=config.macros.importTiddlers;
	cmi.step1Html=cmi.step1Html.replace(/<input type='file' size=50 name='txtBrowse'>/,fixhtml);
}

merge(config.messages,{selectFile:"Please enter or select a file"}); // ready for I18N translation

window.browseForFilename=function(target,mustExist) { // note: both params are optional
	var msg=config.messages.selectFile;
	if (target && target.title) msg=target.title; // use target field tooltip (if any) as dialog prompt text
	// get local path for current document
	var path=getLocalPath(document.location.href);
	var p=path.lastIndexOf("/"); if (p==-1) p=path.lastIndexOf("\\"); // Unix or Windows
	if (p!=-1) path=path.substr(0,p+1); // remove filename, leave trailing slash
	var file=""

	var result=window.askForFilename(msg,path,file,mustExist); // requires #604
	if (target && result.length) // set target field and trigger handling
		{ target.value=result; target.onchange(); }
	return result; 
}
//}}}
// // }}}}}}// // {{block{
/***
!!!604 cross-platform askForFilename()
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/604 - OPEN
invokes a system-native secure 'file-chooser' dialog box to provide TiddlyWiki with access to a complete path+filename so that TW functions properly locate user-selected local files.
***/
//{{{
window.askForFilename=function(msg,path,file,mustExist) {
	var r = window.mozAskForFilename(msg,path,file,mustExist);
	if(r===null || r===false)
		r = window.ieAskForFilename(msg,path,file,mustExist);
	if(r===null || r===false)
		r = window.javaAskForFilename(msg,path,file,mustExist);
	if(r===null || r===false)
		r = prompt(msg,path+file);
	return r||"";
}

window.mozAskForFilename=function(msg,path,file,mustExist) {
	if(!window.Components) return false;
	try {
		netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
		var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
		var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
		picker.init(window, msg, mustExist?nsIFilePicker.modeOpen:nsIFilePicker.modeSave);
		var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
		thispath.initWithPath(path);
		picker.displayDirectory=thispath;
		picker.defaultExtension='html';
		picker.defaultString=file;
		picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
		if (picker.show()!=nsIFilePicker.returnCancel)
			var result=picker.file.persistentDescriptor;
	}
	catch(ex) { displayMessage(ex.toString()); }
	return result;
}

window.ieAskForFilename=function(msg,path,file,mustExist) {
	if(!config.browser.isIE) return false;
	try {
		var s = new ActiveXObject('UserAccounts.CommonDialog');
		s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|';
		s.FilterIndex=3; // default to HTML files;
		s.InitialDir=path;
		s.FileName=file;
		return s.showOpen()?s.FileName:"";
	}
	catch(ex) { displayMessage(ex.toString()); }
	return result;
}

window.javaAskForFilename=function(msg,path,file,mustExist) {
	if(!document.applets["TiddlySaver"]) return false;
	// TBD: implement java-based askFile(...) function
	try { return document.applets["TiddlySaver"].askFile(msg,path,file,mustExist); } 
	catch(ex) { displayMessage(ex.toString()); }
}
//}}}
// // }}}}}}// // {{block{
/***
!!!676 #story:... paramifier
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/676 - OPEN
scan the specified 'story' tiddler content for embedded links, rather than simply parsing the content as a space-separated bracketed list.  This allows links from ''any'' tiddler to be used as a story, regardless of other wiki-syntax contained in that tiddler.  If specified tiddler is a shadow, fallback to using parseParams() to extract the list of links.
***/
//{{{
config.paramifiers.story = {
	onstart: function(v) {
		var t=store.getTiddler(v); if (t) t.changed();
		var list=t?t.links:store.getTiddlerText(v,"").parseParams("open",null,false);
		story.displayTiddlers(null,list);
	}
};
//}}}
// // }}}}}}// // {{block{
/***
!!!664 Loose links (case-folded/space-folded wiki words)
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/664 - OPEN
This tweak matches non-WikiWord variations of mixed-case and/or added/omitted spaces within double-bracketed text with titles of //existing// tiddlers, using a "loose" (case-folded/space-folded) comparison.  This allows text that occurs in normal prose to be more easily linked to tiddler titles by using double-brackets without the full "pretty link" syntax.  For example:
{{{
[[CoreTweaks]], [[coreTweaks]], [[core tweaks]],
[[CORE TWEAKS]], [[CoRe TwEaKs]], [[coreTWEAKS]]
}}}

>[[CoreTweaks]], [[coreTweaks]], [[core tweaks]],
>[[CORE TWEAKS]], [[CoRe TwEaKs]], [[coreTWEAKS]]
Configuration:
><<option chkLooseLinks>> Allow case-folded and/or space-folded text to link to existing tiddler titles
>"""<<option chkLooseLinks>>"""
***/
//{{{
if (!config.options.chkLooseLinks)
	config.options.chkLooseLinks=false; // default to standard behavior
window.caseFold_createTiddlyLink = window.createTiddlyLink;
window.createTiddlyLink = function(place,title,includeText,className) {
	var btn=window.caseFold_createTiddlyLink.apply(this,arguments); // create core link
	if (!config.options.chkLooseLinks) return btn;
	if (store.getTiddlerText(title)) return btn; // matching tiddler (or shadow) exists
	var target=title.toLowerCase().replace(/\s/g,"");
	var tids=store.getTiddlers("title");
	for (var t=0; t<tids.length; t++) {
		if (tids[t].title.toLowerCase().replace(/\s/g,"")==target) {
			var i=getTiddlyLinkInfo(tids[t].title,className);
			btn.setAttribute("tiddlyLink",tids[t].title);
			btn.title=i.subTitle;
			btn.className=i.classes;
			break;
		}
	}
	return btn;
}
//}}}
// // }}}}}}// // {{block{
/***
!!!657 wrap tabs onto multiple lines
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/657 - OPEN
This tweak inserts an extra space element following each tab, allowing them to wrap onto multiple lines if needed.
***/
//{{{
config.macros.tabs.handler = function(place,macroName,params)
{
	var cookie = params[0];
	var numTabs = (params.length-1)/3;
	var wrapper = createTiddlyElement(null,"div",null,"tabsetWrapper " + cookie);
	var tabset = createTiddlyElement(wrapper,"div",null,"tabset");
	tabset.setAttribute("cookie",cookie);
	var validTab = false;
	for(var t=0; t<numTabs; t++) {
		var label = params[t*3+1];
		var prompt = params[t*3+2];
		var content = params[t*3+3];
		var tab = createTiddlyButton(tabset,label,prompt,this.onClickTab,"tab tabUnselected");
		createTiddlyElement(tab,"span",null,null," ",{style:"font-size:0pt;line-height:0px"}); // ELS
		tab.setAttribute("tab",label);
		tab.setAttribute("content",content);
		tab.title = prompt;
		if(config.options[cookie] == label)
			validTab = true;
	}
	if(!validTab)
		config.options[cookie] = params[1];
	place.appendChild(wrapper);
	this.switchTab(tabset,config.options[cookie]);
};
//}}}
// // }}}}}}// // {{block{
/***
!!!637 TiddlyLink tooltip - custom formatting
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/637 - OPEN
This tweak modifies the tooltip format that appears when you mouseover a link to a tiddler.  It adds an option to control the date format, as well as displaying the size of the tiddler (in bytes)

Tiddler link tooltip format:
{{stretch{<<option txtTiddlerLinkTootip>>}}}
^^where: %0=title, %1=username, %2=modification date, %3=size in bytes, %4=description slice^^
Tiddler link tooltip date format:
{{stretch{<<option txtTiddlerLinkTooltipDate>>}}}
***/
//{{{
config.messages.tiddlerLinkTooltip="%0 - %1, %2 (%3 bytes) - %4";
config.messages.tiddlerLinkTooltipDate="DDD, MMM DDth YYYY 0hh12:0mm AM";

config.options.txtTiddlerLinkTootip=
	config.options.txtTiddlerLinkTootip||config.messages.tiddlerLinkTooltip;
config.options.txtTiddlerLinkTooltipDate=
	config.options.txtTiddlerLinkTooltipDate||config.messages.tiddlerLinkTooltipDate;

Tiddler.prototype.getSubtitle = function() {
	var modifier = this.modifier;
	if(!modifier) modifier = config.messages.subtitleUnknown;
	var modified = this.modified;
	if(modified) modified = modified.formatString(config.options.txtTiddlerLinkTooltipDate);
	else modified = config.messages.subtitleUnknown;
	var descr=store.getTiddlerSlice(this.title,"Description")||"";
	return config.options.txtTiddlerLinkTootip.format([this.title,modifier,modified,this.text.length,descr]);
};
//}}}
// // }}}}}}// // {{block{
/***
!!!628 hide "no such macro" errors
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/628 - OPEN
When invoking a macro that is not defined, this tweak prevents the display of the "error in macro... no such macro" message.  This is useful when rendering tiddler content or templates that reference macros that are defined by //optional// plugins that have not been installed in the current document.


<<option chkHideMissingMacros>> hide "no such macro" error messages
***/
//{{{
if (config.options.chkHideMissingMacros===undefined)
	config.options.chkHideMissingMacros=false;

window.coreTweaks_missingMacro_invokeMacro = window.invokeMacro;
window.invokeMacro = function(place,macro,params,wikifier,tiddler) {
	if (!config.macros[macro] || !config.macros[macro].handler)
		if (config.options.chkHideMissingMacros) return;
	window.coreTweaks_missingMacro_invokeMacro.apply(this,arguments);
}
//}}}
// // }}}}}}// // {{block{
/***
!!!609/610 toolbars - separators and transclusion
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/609 - OPEN (separators)
http://trac.tiddlywiki.org/ticket/610 - OPEN (wikify tiddler/slice/section content)
These tweaks extend the """<<toolbar>>""" macro to permit use of "|" as separators, as well as recognizing references to tiddlernames, slices, or sections and rendering their content inline within the toolbar
''see [[ToolbarCommands]] for examples of how these features can be used''
***/
//{{{
merge(config.macros.toolbar,{
	separator: "|"
	});
config.macros.toolbar.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
	for(var t=0; t<params.length; t++) {
		var c = params[t];
		switch(c) {
			case '|':  // ELS - SEPARATOR
			case '!':  // ELS - SEPARATOR (alternative for use in tiddler slices)
				createTiddlyText(place,this.separator); // ELS
				break; // ELS
			case '>':
				var btn = createTiddlyButton(place,this.moreLabel,this.morePrompt,config.macros.toolbar.onClickMore);
				addClass(btn,"moreCommand");
				var e = createTiddlyElement(place,"span",null,"moreCommand");
				e.style.display = "none";
				place = e;
				break;
			default:
				var theClass = "";
				switch(c.substr(0,1)) {
					case "+":
						theClass = "defaultCommand";
						c = c.substr(1);
						break;
					case "-":
						theClass = "cancelCommand";
						c = c.substr(1);
						break;
				}
				if(c in config.commands)

					this.createCommand(place,c,tiddler,theClass);
				else { // ELS - WIKIFY TIDDLER/SLICE/SECTION
					if (c.substr(0,1)=="~") c=c.substr(1); // ignore leading ~
					var txt=store.getTiddlerText(c);
					if (txt) {
						txt=txt.replace(/^\n*/,"").replace(/\n*$/,""); // trim any leading/trailing newlines
						txt=txt.replace(/^\{\{\{\n/,"").replace(/\n\}\}\}$/,""); // trim PRE format wrapper if any
						wikify(txt,createTiddlyElement(place,"span"),null,tiddler);
					}
				} // ELS - end WIKIFY CONTENT
				break;
		}
	}
};
//}}}
// // }}}}}}// // {{block{
/***
!!!608 toolbar - more/less toggle
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/608 - OPEN
This tweak extends the """<<toolbar>>""" macro to make the ">" (more) a //toggle// between more/less with the additional toolbar commands displayed on a separate line.
***/
//{{{
merge(config.macros.toolbar,{
	moreLabel: 'more',
	morePrompt: "Show additional commands",
	lessLabel: 'less',
	lessPrompt: "Hide additional commands"

});
config.macros.toolbar.onClickMore = function(ev)
{
	var e = this.nextSibling;
	var showing=e.style.display=="block";
	e.style.display = showing?"none":"block";
	this.innerHTML=showing?config.macros.toolbar.moreLabel:config.macros.toolbar.lessLabel;
	this.title=showing?config.macros.toolbar.morePrompt:config.macros.toolbar.lessPrompt;
	return false;
};
//}}}
// // }}}}}}// // {{block{
/***
!!!607 add HREF link on permaview command
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/607 - OPEN
This tweak automatically sets the HREF for the 'permaview' sidebar command link so you can use the 'right click' context menu for faster, easier bookmarking.  Note that this does ''not'' automatically set the permaview in the browser's current location URL... it just sets the HREF on the command link.  You still have to click the link to apply the permaview.
***/
//{{{
config.macros.permaview.handler = function(place)
{
	var btn=createTiddlyButton(place,this.label,this.prompt,this.onClick);
	addEvent(btn,"mouseover",this.setHREF);
	addEvent(btn,"focus",this.setHREF);
};
config.macros.permaview.setHREF = function(event){
	var links = [];
	story.forEachTiddler(function(title,element) {
		links.push(String.encodeTiddlyLink(title));
	});
	var newURL=document.location.href;
	var hashPos=newURL.indexOf("#");
	if (hashPos!=-1) newURL=newURL.substr(0,hashPos);
	this.href=newURL+"#"+encodeURIComponent(links.join(" "));
}
//}}}
// // }}}}}}// // {{block{
/***
!!!529 IE fixup - case-sensitive element lookup of tiddler elements
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/529 - OPEN
This tweak hijacks the standard browser function, document.getElementById(), to work-around the case-INsensitivity error in Internet Explorer (all versions up to and including IE7) //''Note: This tweak is only applied when using IE, and only for lookups of rendered tiddler elements within the containing "tiddlerDisplay" element.''//
***/
//{{{
if (config.browser.isIE) {
document.coreTweaks_coreGetElementById=document.getElementById;
document.getElementById=function(id) {
	var e=document.coreTweaks_coreGetElementById(id);
	if (!e || !e.parentNode || e.parentNode.id!="tiddlerDisplay") return e;
	for (var i=0; i<e.parentNode.childNodes.length; i++)
		if (id==e.parentNode.childNodes[i].id) return e.parentNode.childNodes[i];
	return null;
};
}
//}}}
// // }}}}}}// // {{block{
/***
!!!471 'creator' field for new tiddlers
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/471 - OPEN
This tweak HIJACKS the core's saveTiddler() function to automatically add a "creator" field to a tiddler when it is FIRST created. You can use """<<view creator>>""" (or """<<view creator wikified>>""" if you prefer) to show this value embedded directly within the tiddler content, or {{{<span macro="view creator"></span>}}} in the ViewTemplate and/or EditTemplate to display the creator value in each tiddler.  
***/
//{{{
// hijack saveTiddler()
TiddlyWiki.prototype.CoreTweaks_creatorSaveTiddler=TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler=function(title,newTitle,newBody,modifier,modified,tags,fields)
{
	var existing=store.tiddlerExists(title);
	var tiddler=this.CoreTweaks_creatorSaveTiddler.apply(this,arguments);
	if (!existing) store.setValue(title,"creator",config.options.txtUserName);
	return tiddler;
}
//}}}
// // }}}}}}// // {{block{
/***
!!!458 add permalink-like HREFs on internal TiddlyLinks
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/458 - CLOSED: WON'T FIX
This tweak assigns a "permalink"-like HREF to internal Tiddler links (which normally do not have any HREF defined).  This permits the link's context menu (right-click) to include 'open link in another window/tab' command.  Based on a request from Dustin Spicuzza.
***/
//{{{
window.coreTweaks_createTiddlyLink=window.createTiddlyLink;
window.createTiddlyLink=function(place,title,includeText,theClass,isStatic,linkedFromTiddler,noToggle)
{
	// create the core button, then add the HREF (to internal links only)
	var link=window.coreTweaks_createTiddlyLink.apply(this,arguments);
	if (!isStatic)
		link.href=document.location.href.split("#")[0]+"#"+encodeURIComponent(String.encodeTiddlyLink(title));
	return link;
}
//}}}
// // }}}}}}// // {{block{
/***
!!!444 'tiddler' and 'place' - global variables for use in computed macro parameters
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/444 - OPEN
When invoking a macro, this tweak makes the current containing tiddler object and DOM rendering location available as global variables (window.tiddler and window.place, respectively).  These globals can then be used within "computed macro parameters" to retrieve tiddler-relative and/or DOM-relative values or perform tiddler-specific side-effect functionality.
***/
//{{{
window.coreTweaks_invokeMacro = window.invokeMacro;
window.invokeMacro = function(place,macro,params,wikifier,tiddler) {
	var here=story.findContainingTiddler(place);
	window.tiddler=here?store.getTiddler(here.getAttribute("tiddler")):null;
	window.place=place;
	window.coreTweaks_invokeMacro.apply(this,arguments);
}
//}}}
// // }}}}}}// // {{block{
/***
!!!401 PageTitle - alternative to combined ~SiteTitle/~SiteSubtitle in window titlebar
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/401 - CLOSED: WON'T FIX
This tweak allows definition of an optional [[PageTitle]] tiddler that, when present, provides alternative text for display in the browser window's titlebar, instead of using the combined text content from [[SiteTitle]] and [[SiteSubtitle]] (which will still be displayed as usual in the TiddlyWiki document header area)
***/
//{{{
window.coreTweaks_getPageTitle=window.getPageTitle;
window.getPageTitle=function() { 
	var txt=wikifyPlain("PageTitle"); if (txt.length) return txt;
	return window.coreTweaks_getPageTitle.apply(this,arguments);
}
store.addNotification("PageTitle",refreshPageTitle); // so title stays in sync with tiddler changes
//}}}
// // }}}}}}// // {{block{
/***
!!!67 Missing links - ignore non-wiki syntax source content
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/67 - OPEN
The "missing links" list includes items contained within "quoted" text (i.e., content that will not render as wiki-syntax, and so CANNOT create any tiddler links, even if the quoted text matches valid link syntax).  This tweak removes content contained between certain delimiters before scanning tiddler source for possible links.

Delimiters include:
{{{
/%...%/
{{{...}}}

"""..."""
<nowiki>...</nowiki>
<html>...</html>
<script>...</script>
}}}
***/
//{{{
Tiddler.prototype.coreTweaks_changed = Tiddler.prototype.changed;
Tiddler.prototype.changed = function()
{
	var savedtext=this.text;
	// remove 'quoted' text before scanning tiddler source
	this.text=this.text.replace(/\/%((?:.|\n)*?)%\//g,""); // /%...%/
	this.text=this.text.replace(/\{{3}((?:.|\n)*?)\}{3}/g,""); // {{{...}}}
	this.text=this.text.replace(/"{3}((?:.|\n)*?)"{3}/g,""); // """..."""

	this.text=this.text.replace(/\<nowiki\>((?:.|\n)*?)\<\/nowiki\>/g,""); // <nowiki>...</nowiki>
	this.text=this.text.replace(/\<html\>((?:.|\n)*?)\<\/html\>/g,""); // <html>...</html>

	this.text=this.text.replace(/\<script((?:.|\n)*?)\<\/script\>/g,""); // <script>...</script>
	this.coreTweaks_changed.apply(this,arguments);
	// restore quoted text to tiddler source
	this.text=savedtext;
};
//}}}
// // }}}}}}// // {{block{
/***
!!!(no ticket) """<<tag>>""" macro - sortby parameter
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/TBD - TBD
This tweak adds an optional 'sortby' parameter to the """<<tag tagname label tip sortby>>""" macro, as well as the """<<allTags excludeTag sortby>>""" macro used to generate the sidebar contents 'tags' list.  Specify the field on which the contents of each tag popup is to be sorted, with a "+" or "-" prefix to indicate ascending/descending order, respectively.

Example: """<<tag systemConfig "plugins" "list plugins by date, most recent first" "-modified">>"""

Try it: <<tag systemConfig "plugins" "list plugins by date, most recent first" "-modified">>

Similarly, to change the sort order used by the popups from all tags shown in the sidebar contents, edit the [[TagTags]] shadow tiddler and enter: """<<allTags excludeLists -modified>>"""
***/
//{{{
// hijack tag handler() to add 'sortby' attribute to tag button
config.macros.tag.CoreTweaksSortTags_handler=config.macros.tag.handler;
config.macros.tag.handler = function(place,macroName,params)
{
	this.CoreTweaksSortTags_handler.apply(this,arguments);
	var btn=place.lastChild;
	if (params[3]) btn.setAttribute("sortby",params[3]);
}

// tweak <<allTags>> macro to add 'sortby' attribute to each tag button
var fn=config.macros.allTags.handler;
var lines=fn.toString().split("\n");
lines.splice(lines.length-2,0,['if(params[1]) btn.setAttribute("sortby",params[1]);']);
fn=lines.join("\n");
eval("config.macros.allTags.handler="+fn);

// tweak event handler for clicking on a tiddler tag to use 'sortby' attribute
var fn=onClickTag;
fn=fn.toString().replace(
	/store.getTaggedTiddlers\(tag\);/g,
	'store.getTaggedTiddlers(tag);'
	+'var sortby=this.getAttribute("sortby");'
	+'if(sortby&&sortby.length) store.sortTiddlers(tagged,sortby);'
);
eval(fn);

//}}}
// // }}}}}}// // {{block{
/***
!!!(no ticket) backslash-quoting for embedding newlines in 'line-mode' formats
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/TBD - TBD
This HIJACK tweak pre-processes source content to convert "double-backslash-newline" into {{{<br>}}} before wikify(), so that literal newlines can be embedded in line-mode wiki syntax (e.g., tables, bullets, etc.).  Based on a suggestion from Sitaram Chamarty.
***/
//{{{
window.coreWikify = wikify;
window.wikify = function(source,output,highlightRegExp,tiddler)
{
	if (source) arguments[0]=source.replace(/\\\\\n/mg,"<br>");
	coreWikify.apply(this,arguments);
}
//}}}
// // }}}}}}
// // <<foldHeadings>>
!!!<<gradient horiz #fc3 #fff>>&nbsp;CreateTabsScript^^<<tiddler CloseThisOpen with: tabs  '« back'>>|<<toolbar editTiddler>>» ^^>>
|bgcolor:#fcf; ''Note: It is possible to create endless loops with this script. Be careful!!''|
Udo Borkowski of http://www.abego-software.de 
created this little script that creates a set of tabs based on a particular tag.
Requires: ForEachTiddlerPlugin

Here is a direct link to the script http://tinyurl.com/2yhf5p

Below is the script reproduced. Just change the tag 'glossar' to your tag.
*+++[See the code]
<<<
{{{
<<forEachTiddler
    where
       'tiddler.tags.contains("glossar")'
    sortBy
       'tiddler.title.toUpperCase()'
    write '" [["+tiddler.title+" ]] \"view ["+tiddler.title+"]\" [["+tiddler.title+"]] "'
        begin '"<<tabs txtMyAutoTab "'
        end '">"+">"'
        none '"//No tiddler tagged with \"glossar\"//"'

>>
}}}
<<<
===

!!!!End ~CreateTabsScript
/***
|''Name:''|CryptoFunctionsPlugin|
|''Description:''|Support for cryptographic functions|
***/
//{{{
if(!version.extensions.CryptoFunctionsPlugin) {
version.extensions.CryptoFunctionsPlugin = {installed:true};

//--
//-- Crypto functions and associated conversion routines
//--

// Crypto "namespace"
function Crypto() {}

// Convert a string to an array of big-endian 32-bit words
Crypto.strToBe32s = function(str)
{
	var be = Array();
	var len = Math.floor(str.length/4);
	var i, j;
	for(i=0, j=0; i<len; i++, j+=4) {
		be[i] = ((str.charCodeAt(j)&0xff) << 24)|((str.charCodeAt(j+1)&0xff) << 16)|((str.charCodeAt(j+2)&0xff) << 8)|(str.charCodeAt(j+3)&0xff);
	}
	while (j<str.length) {
		be[j>>2] |= (str.charCodeAt(j)&0xff)<<(24-(j*8)%32);
		j++;
	}
	return be;
};

// Convert an array of big-endian 32-bit words to a string
Crypto.be32sToStr = function(be)
{
	var str = "";
	for(var i=0;i<be.length*32;i+=8)
		str += String.fromCharCode((be[i>>5]>>>(24-i%32)) & 0xff);
	return str;
};

// Convert an array of big-endian 32-bit words to a hex string
Crypto.be32sToHex = function(be)
{
	var hex = "0123456789ABCDEF";
	var str = "";
	for(var i=0;i<be.length*4;i++)
		str += hex.charAt((be[i>>2]>>((3-i%4)*8+4))&0xF) + hex.charAt((be[i>>2]>>((3-i%4)*8))&0xF);
	return str;
};

// Return, in hex, the SHA-1 hash of a string
Crypto.hexSha1Str = function(str)
{
	return Crypto.be32sToHex(Crypto.sha1Str(str));
};

// Return the SHA-1 hash of a string
Crypto.sha1Str = function(str)
{
	return Crypto.sha1(Crypto.strToBe32s(str),str.length);
};

// Calculate the SHA-1 hash of an array of blen bytes of big-endian 32-bit words
Crypto.sha1 = function(x,blen)
{
	// Add 32-bit integers, wrapping at 32 bits
	add32 = function(a,b)
	{
		var lsw = (a&0xFFFF)+(b&0xFFFF);
		var msw = (a>>16)+(b>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	};
	// Add five 32-bit integers, wrapping at 32 bits
	add32x5 = function(a,b,c,d,e)
	{
		var lsw = (a&0xFFFF)+(b&0xFFFF)+(c&0xFFFF)+(d&0xFFFF)+(e&0xFFFF);
		var msw = (a>>16)+(b>>16)+(c>>16)+(d>>16)+(e>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	};
	// Bitwise rotate left a 32-bit integer by 1 bit
	rol32 = function(n)
	{
		return (n>>>31)|(n<<1);
	};

	var len = blen*8;
	// Append padding so length in bits is 448 mod 512
	x[len>>5] |= 0x80 << (24-len%32);
	// Append length
	x[((len+64>>9)<<4)+15] = len;
	var w = Array(80);

	var k1 = 0x5A827999;
	var k2 = 0x6ED9EBA1;
	var k3 = 0x8F1BBCDC;
	var k4 = 0xCA62C1D6;

	var h0 = 0x67452301;
	var h1 = 0xEFCDAB89;
	var h2 = 0x98BADCFE;
	var h3 = 0x10325476;
	var h4 = 0xC3D2E1F0;

	for(var i=0;i<x.length;i+=16) {
		var j,t;
		var a = h0;
		var b = h1;
		var c = h2;
		var d = h3;
		var e = h4;
		for(j = 0;j<16;j++) {
			w[j] = x[i+j];
			t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=16;j<20;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=20;j<40;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k2);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=40;j<60;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),(b&c)|(d&(b|c)),w[j],k3);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=60;j<80;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k4);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}

		h0 = add32(h0,a);
		h1 = add32(h1,b);
		h2 = add32(h2,c);
		h3 = add32(h3,d);
		h4 = add32(h4,e);
	}
	return Array(h0,h1,h2,h3,h4);
};


}
//}}}
!!!CSS cursor Property
|>| !Hover to over the right column to see cursor|
|cursor:auto|<html><span style="cursor:auto">Auto</span></html>|
|cursor:crosshair|<html><span style="cursor:crosshair">Crosshair</span></html>|
|cursor:default|<html><span style="cursor:default">Default</span></html>|
|cursor:pointer|<html><span style="cursor:pointer">Pointer</span></html>|
|cursor:move|<html><span style="cursor:move">Move</span></html>|
|cursor:e-resize|<html><span style="cursor:e-resize">e-resize</span></html>|
|cursor:ne-resize|<html><span style="cursor:ne-resize">ne-resize</span></html>|
|cursor:nw-resize|<html><span style="cursor:nw-resize">nw-resize</span></html>|
|cursor:n-resize|<html><span style="cursor:n-resize">n-resize</span></html>|
|cursor:se-resize|<html><span style="cursor:se-resize">se-resize</span></html>|
|cursor:sw-resize|<html><span style="cursor:sw-resize">sw-resize</span></html>|
|cursor:s-resize|<html><span style="cursor:s-resize">s-resize</span></html>|
|cursor:w-resize|<html><span style="cursor:w-resize">w-resize</span></html>|
|cursor:text|<html><span style="cursor:text">text</span></html>|
|cursor:wait|<html><span style="cursor:wait">wait</span></html>|
|cursor:help|<html><span style="cursor:help">help</span></html>|
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;Example>>

<html><span style="cursor:help">@@color:#00f;Put your cursor here to see help cursor@@</span></html>  See more in the table above.
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;Code>>
''If you require a tool tip on plain text using HTML, you can write:''
{{{<html><span title="Mouseover tooltip. Your text here" style="cursor:pointer>Try it here</span></html>}}}


<html><span title="Mouseover tooltip. Your text here" style="cursor:pointer>Try it here</span></html>


/***
!!!<<gradient horiz #fc3 #fff >><<tiddler RefreshStyles>>&nbsp;CustomCSS>>/%==================================================%/
***/
/***CustomCSS is a style sheet that contains the "custom class" CSS to customize special features in TW Help.  It is placed in StyleSheet as a [[NestedStyleSheet|NestedStyleSheets]] and is an essential component.***/

/***There may be extra nested stylesheets at the end of this stylesheet***/



/***
!!!<<gradient horiz #FF8888 #ffffff >>&nbsp;~CustomTable>>/%==================================================%/
***/
/*{{{*/

.scrollTWTweets {
align:center;
height: auto;
width: 400px;
position:relative;
overflow: auto;
margin:auto;
margin-left:1.2em;
padding:0.2em;
!important;margin-left: auto !important; margin-right: auto !important;
background-color: #eef;
}





.topMenu{
background:#eee;
}

#tiddlerShowUnsavedChanges a {
color:#c06;
}


 .toolbar {
         visibility: hidden;
     }
     .selected .toolbar {
         visibility: visible;
     } 

.systemcontents {
 height: 150px; 
 width: auto; 
 position:relative;
 overflow: auto;
 margin:auto;
 margin-left:0em;
 }

.scrollcontents {
 height: 225px; 
 width: auto; 
 position:relative;
 overflow: auto;
 margin:auto;
 margin-left:0em;
 }

.popup {
 max-height:275px;
 min-height:auto;
 width: auto; 
 overflow: auto;
 margin:auto;
-moz-border-radius : 0.65em 0.2em 0.2em 0.65em;
background:#eee;
color:#900;
}



backstagePanel {background-color:#abf; border-color:#fcf ;}

.doubleborder {
    border: 4px double #fcf;
    margin: 8px;
}

.doublebordermap {
    width:400px;
    border: 4px double #fcf;
    margin: 8px;
left-margin:auto;
right-margin:auto;
}

.tableright  table {border:0 !important;td.vertical-align:top;margin-left:auto ; margin-right:0  auto !important; text-align:left; padding:0px;}


.tablecenter  table { border:0 !important;td.vertical-align:top;margin-left: auto; margin-right: auto; text-align:left; padding:0px;}
.tablecenterpad17 table { td.vertical-align:top;margin-left: auto; margin-right: auto; text-align:
left; padding:17px;}

.borderless, .borderless table, .borderless td, .borderless tr, .borderless th, .borderless tbody
	{ border:0 !important; margin:0 !important; padding:3px !important; td.vertical-align:top !important;margin-left: auto !important; margin-right: auto !important;}

.borderless5px, .borderless5px table, .borderless5px td, .borderless5px tr, .borderless5px th, .borderless5px tbody { border:0 !important; margin:0 !important; padding:5px !important; td.vertical-align:top !important;margin-left: auto !important; margin-right: auto !important;}

.borderlessL, .borderlessL table, .borderlessL td, .borderlessL tr, .borderlessL th, .borderlessL tbody
	{ border:0 !important; margin:0 !important; padding:7px !important; td.vertical-align:top !important;margin-left: 0 !important; margin-right: auto !important;}

.borderlessL0, .borderlessL 0table, .borderlessL0 td, .borderlessL0 tr, .borderlessL0 th, .borderlessL0 tbody
	{ border:0 !important; margin:0 !important; padding:0px !important; td.vertical-align:top !important;margin-left: 0 !important; margin-right: auto !important;}

.borderlessR, .borderlessR table, .borderlessR td, .borderlessR tr, .borderlessR th, .borderlessR tbody
	{ border:0 !important; margin:0 !important; padding:7px !important; td.vertical-align:top !important;margin-left: auto !important; margin-right: 0 !important;}

.viewer tr.oddRow { background-color: #eaeaea;}
.viewer tr.evenRow { background-color:#fff; } 


/%row code for html%/
tr.d0 td {background-color: #ccc; color: black;}
tr.d1 td {background-color: #eaeaea; color: black;}


/*}}}*/
/***
!!!<<gradient horiz #FF8888 #ffffff >>&nbsp;~CustomText>>/%==================================================%/
***/
/*{{{*/

.textleft { display:block;text-align:left; }
.textright { display:block;text-align:right; }
.textcenter { display:block;text-align:center; }
.textjustify { display:block;text-align:justify; }
.textindent { display:block;margin:0;padding:0;border:0;margin-left:2em; }

.wrap { white-space:normal; }
.nowrap	{ white-space:nowrap; }

.headingcolor{color:#FFF;background:#ff8888;}
.wrappingClass{padding: 0px 0.5em 0px 0.5em;color: #FFF; background: #06f;}



.firstletter{
display:block;
float:left;
width:1.0em;
font-size:400%;
font-family:times,courier;
line-height:80%;
}

.firstletterK{
display:block;
float:left;
width:0.75em;
font-size:400%;
font-family:times,courier;
line-height:80%;
}

.firstletterT{
display:block;
float:left;
width:0.65em;
font-size:300%;
font-family:times,courier;
line-height:95%;
}

.headline{
color:#c06;
font-size:180%;
font-family:times,arial;
line-height:60%;
}

.headline120 {
color:#009;
font-size:150%;
font-family:times,arial;
line-height:60%;
}


/*}}}*/
/***
!!!<<gradient horiz #FF8888 #ffffff >>&nbsp;Layout>>/%==================================================%/
***/
/*{{{*/


/* Anything with the tag "multicolumn" gets a new multi-column format */

div[tags~="multicolumn"] .viewer {-moz-column-width:30em; -moz-column-gap:2em; padding-top:
0em;}


/* multi-column tiddler content (not supported in Internet Explorer) */
.twocolumns { display:block;
	-moz-column-count:2; -moz-column-gap:1em; -moz-column-width:50%; /* FireFox */
	-webkit-column-count:2; -webkit-column-gap:1em; -webkit-column-width:50%; /* Safari */
	column-count:2; column-gap:1em; column-width:50%; /* Opera */
}
.threecolumns { display:block;
	-moz-column-count:3; -moz-column-gap:1em; -moz-column-width:33%; /* FireFox */
	-webkit-column-count:3; -webkit-column-gap:1em; -webkit-column-width:33%; /* Safari */
	column-count:3; column-gap:1em; column-width:33%; /* Opera */
}
.fourcolumns { display:block;
	-moz-column-count:4; -moz-column-gap:1em; -moz-column-width:25%; /* FireFox */
	-webkit-column-count:4; -webkit-column-gap:1em; -webkit-column-width:25%; /* Safari */
	column-count:4; column-gap:1em; column-width:25%; /* Opera */
}

.doubleborder {
    border: 4px double #fcf;
    margin: 8px;
}

.floatboxright {
    float: right;
    width: 20em;
    border: solid 1px;
    padding:3px;
    background-color:#fcf;
    /* whatever other styling you want.. */
} 


.floatboxleft {
    float: left;
    width: 20em;
    border: solid 1px;
    padding:3px;
    background-color:#fcf;
    /* whatever other styling you want.. */
} 

.floatleft{ float:left; }
.floatright{ float:right; }

.moveovermainmenu{margin-left:7px;}
.textleftpad5{text-align:left;padding: 0px 5px 0px 5px;}
.textindent25 {text-indent:25px;}
.smallform{ white-space:nowrap; }

.imgfloatright{display:block;float:right;padding:0.3em;}
.imgfloatleft{display:block;float:left;padding:0.3em;}
.imgfloatcenter{display:block;margin-left: auto;margin-right: auto;padding:0.3em;}

.imgfloatrightM{display:block;float:right;margin-left:0em;padding-right:1.3em;}

.alt { background-color:#abf; }
.fdfbackground {background:#fdf;} 

/*}}}*/
/***
!!!<<gradient horiz #FF8888 #ffffff >>&nbsp;Links>>/%==================================================%/
***/
/*{{{*/

.boldLink a {font-weight:bold;}
.unboldlink a {font-weight:normal;}

.bigLink a { font-size:10pt;font-weight:bold;}
.whiteLink a { color: #fff;font-weight:normal; } 
.twLink a { color: #090;font-weight:normal; }
.locLink a { color: #f6f;font-weight:normal; }
.remLink a { color: #c90;font-weight:normal; } 
.blueLink a {color:#00f;}
.grayLink a {color:#ccc;}
.redLink a {color:#d00;}
.menublueLink a {color:#3cf;} 

.wrappingLinks{color: #000; background: #B3FFB3;}
.wrappingLinksAlt{color: #000; background: #C0FFFF;}

/*}}}*/
/***
!!!<<gradient horiz #FF8888 #ffffff >>Tiddler Specific Custom CSS>>/%=================================================%/
***/
/*{{{*/

{{{
#tiddlerNew\000020Tiddler a {
	color: #f00;
}
}}}

#tiddlerEditTemplate .button {color: #000;text-decoration:none;}

#tiddlerTWHelp-SearchResults .viewer {
overflow: auto;
}

#tiddlerTranslate .viewer {
overflow: auto;
}

#tiddlerSlantedMenu {
border-top: 1px solid #fcf:
}

#tiddlerSideBarOptions {
color:#ffc;
background: transparent;
}

#tiddlerNewWelcome .viewer .tabContents {
background: white;
border-top: 1px solid #999;
border-right: 0px solid #999;
border-bottom: 0px solid #999;
border-left: 0px solid #999;
}

#tiddlerTWHelpSiteLinks ol { list-style-type: decimal }

#tiddlerIndex .title {
visibility: hidden; 
}


#tiddlerBorderlessIframe .viewer {
background:#fff;
}



#mainMenu a:hover{
	background: #FFF;
	color: #F00;
}

#tiddlerMargin_Properties.viewer th{
        border: 1px solid #000;
	padding: 0px;
        vertical-align:top;
}

#tiddlerFormattingPageIntro .viewer th, .viewer td, .viewer tr,.viewer caption{
        border: 1px solid #F6F;
	padding: 0px;
        vertical-align:top;
}

#tiddlerTWHelp-SearchResults .viewer table, .viewer td{
border: 1px solid #F6F;
padding-left: 5px;
padding-right: 5px;
vertical-align:top;
td.vertical-align:top;
margin-left: auto;
margin-right: auto;
}

#tiddlerTables .viewer td.even{
background:#ccc;
}

#tiddlerTWHelp-SearchResults .viewer a {
color:#04b;
text-decoration:none;

}


#tiddlerAlpha .viewer tr.oddRow { background-color: #abf;}
#tiddlerAlpha .viewer tr.evenRow { background-color:#eaeaea; } 

#tiddlerNewWelcome .viewer tr.oddRow { background-color: #eaeaea;}
#tiddlerNewWelcome .viewer tr.evenRow { background-color:#fff; } 

#tiddlerImages img {
    border: 5px double #999;
    margin: 4px;

} 

#searchBar {
	float: right;
	font-size: 0.9em;
        padding-right: 1.5em;
        padding-bottom: 0em;
}

#searchBar .button {
	padding-right: 0.5em;
	border: none;
}

.gotoBar {
	float: right;
	font-size: 0.9em;
        padding-right: 1.5em;
        padding-top: 1.0em;
}


/*}}}*/
/***
!!!<<gradient horiz #FF8888 #ffffff >>Footer >>/%==================================================%/
***/
/*{{{*/

#ContentFooter {

 clear: both;
 color:#000;
 background: #ADAFFF;
 padding: 1em 2em;
 font-weight:normal;
 margin-right:0.0em;
 border-top: solid 1px #008;
 border-bottom: solid 1px #008;
}


#ContentFooter a {
 color:#009;
}


#ContentFooter .viewer{
background:#000;
color:#fff;
 }


/*}}}*/
/***
!!!<<gradient horiz #090 #fff>>&nbsp;@@color:#fff;End@@>>/%==================================================%/
***/
/*{{{*/


!!!<<gradient horiz #fc3 #ffffff>>CustomCSSClass ^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{textleft{
''You can wrap any text in an HTML {{{<span>}}} or {{{<div>}}} with a specified CSS class.'' This allows custom CSS styling in a nice, modular way. By placing a rule in your StyleSheet tiddler like this:
----
!!!!&nbsp;Code for ~StyleSheet
{{{
.wrappingClass{color: #666; background: #bbb}
}}}
----
!!!!&nbsp;Code for the markup
You can markup a piece of text in the tiddler using this code:
{{{
{{wrappingClass{Text that is now accentuated}}}
}}}

So that...By default, the text is placed in a {{{<span>}}}. 
{{wrappingClass{Text that is now accentuated
}}}
To use a {{{<div>}}} instead, insert a line break before the text:
{{{
{{wrappingClass{
Text that is now accentuated}}}
}}}

{{wrappingClass{
Text that is now accentuated}}}

/***
!!!CustomMozTableCSS /%==================================================%/
***/

.MozTable table {
	border-width: 0px 0px 0px 0px;
	border-spacing: 4px;
	border-style: dotted dotted dotted dotted;
	border-color: blue blue blue blue;
	border-collapse: separate;
	background-color: white;
}


.MozTableTh th {
border-width: 1px 1px 1px 1px;
	padding: 2px 2px 2px 2px;
	border-style: solid solid solid solid;
	border-color: magenta magenta magenta magenta;
	background-color: rgb(255, 255, 240);
	-moz-border-radius: 12px 12px 12px 12px;
}

.MozTableTd td {
	padding: 2px 2px 2px 2px;
padding: 1px 1px 1px 1px;
border-style: solid solid solid solid;
border-color: magenta magenta magenta magenta;
background-color: rgb(255, 255, 240);
-moz-border-radius: 12px 12px 12px 12px;
}
+++[Try a custom web search here]<<tiddler [[Search Google Co-op]]>>===
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("d")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
<html><embed type="video/x-ms-asf" id="player_FF" name="player_FF" displaysize="2" autosize="0"

  bgcolor="white" showcontrols="true" showtracker="0" showdisplay="0" showstatusbar="1" videoborder3d="0" width="300" height="50" src="http://abc.net.au/streaming/digjazz/digjazz.m3u" autostart="true" designtimesp="5311" loop="false" volume="100"></embed></html>

<html><embed type="video/x-ms-asf" id="player_FF" name="player_FF" displaysize="2" autosize="0"

  bgcolor="white" showcontrols="true" showtracker="0" showdisplay="0" showstatusbar="0" videoborder3d="0" width="300" height="25" src="http://abc.net.au/streaming/digradio/digradio.m3u" autostart="true" designtimesp="5311" loop="false" volume="100"></embed></html>



!!!<<gradient horiz #fc3 #fff>>&nbsp;[[Date]]^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>
/%
!out
$1
!end
%/
|Last Modified on <<tiddler {{tiddler.title+'##out'}} with: {{new Date(document.lastModified).formatString('YYYY.0MM.0DD - DDD 0hh:0mm:0ss')}} >>|
|Today is <script> var d = new Date();return '<<today "YYYY.0MM.0DD 0hh:0mm:0ss">>'+" -week "+d.getWeek()+" -day "+(d.getDay()==0?7:d.getDay())+" (<<today 'ddd'>>)";</script>|

Here is an example on how to change the ''created'' and ''modified'' date format.  Normally the date format for a ~TiddlyWiki is ''Day/Month/Year''.  Certain places in the world the convention is ''Month/Day/Year''. Here is how you change it.

In ViewTemplate there is the following line: 
~~(ViewTemplate is located in the right sidebar tabs under ''More''  @@color:#C06;''&raquo;'' @@ ''Shadowed'')~~
{{{

<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>
}}}

Change it by adding "0MM/0DD/YYYY" two places.  NOTE the nested double quote marks inside the
single quote marks.

{{{

<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date "0MM/0DD/YYYY" '></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date "0MM/0DD/YYYY" '></span>)</div>

}}}


<<tiddler today>><html><div style="text-align:right;color:#3cf;"> ~TiddlyWiki Version <<version>></style></html>
<script>
var today=new Date()
document.write('<center>'+'<font style="color:#c06">'+today.toString()+'</font><br>'+'<font style="color:green">'+'URL='+window.location+'</font></center>')

</script>
@@text-align:left;color:#3cf;<<today "ddd DD MMM YYYY">><br><script>
function dayofyear(d) {   // d is a Date object
var yn = d.getFullYear();
var mn = d.getMonth();
var dn = d.getDate();
var d1 = new Date(yn,0,1,12,0,0); // noon on Jan. 1
var d2 = new Date(yn,mn,dn,12,0,0); // noon on input date
var ddiff = Math.round((d2-d1)/864e5);
return ddiff+1; }

var curdate=new Date(); // gets today's date
var cdnum=dayofyear(curdate);
        var tiddlers=store.getTiddlers("modified");
        var last=tiddlers[tiddlers.length-1];
        var when=last.modified.formatString("YY0hh0mm0ss");
        return "Day of the year: "+cdnum

</script><br>TW Ver: <<version>> @@
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[DatedFooter]]^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>

''For a last modified date footer:''

1: Create this tiddler [[lastModified]]
2: In a tiddler ContentFooter put the contents you want plus:
{{{
{{textcenter{
<<tiddler [[lastModified]]>>}}}
}}}
3: In PageTemplate put at the bottom: 
(For a footer at the end of every tiddler: put within header div)
(For a footer at the end of the page put outside header div)
{{{
<div id='contentFooter' refresh='content' tiddler='ContentFooter'></div>
}}}
4: In StyleSheet styling examples:
{{{
#contentFooter {
 background: transparent;
 padding: 1em 2em;
 font-weight:normal;
}

#contentFooter a {
 color:#009;
} 
}}}
function onClickDefaultHome(e) {
story.closeAllTiddlers();
config.options.txtDefaultTiddlers = "";
saveOptionCookie('txtDefaultTiddlers');
var start = store.getTiddlerText("DefaultTiddlers");
if(start)
story.displayTiddlers(null,start.readBracketedList());
}
config.macros["defaultHome"] = {label: "Home", prompt: "Close all open tiddlers show the home page", title: "Home"};
config.macros.defaultHome.handler = function(place) {
createTiddlyButton(place,this.label,this.prompt,onClickDefaultHome);
}

[[Welcome]]
/***
|''Name:''|DeprecatedFunctionsPlugin|
|''Description:''|Support for deprecated functions removed from core|
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};

//--
//-- Deprecated code
//--

// @Deprecated: Use createElementAndWikify and this.termRegExp instead
config.formatterHelpers.charFormatHelper = function(w)
{
	w.subWikify(createTiddlyElement(w.output,this.element),this.terminator);
};

// @Deprecated: Use enclosedTextHelper and this.lookaheadRegExp instead
config.formatterHelpers.monospacedByLineHelper = function(w)
{
	var lookaheadRegExp = new RegExp(this.lookahead,"mg");
	lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = lookaheadRegExp.exec(w.source);
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var text = lookaheadMatch[1];
		if(config.browser.isIE)
			text = text.replace(/\n/g,"\r");
		createTiddlyElement(w.output,"pre",null,null,text);
		w.nextMatch = lookaheadRegExp.lastIndex;
	}
};

// @Deprecated: Use <br> or <br /> instead of <<br>>

config.macros.br = {};
config.macros.br.handler = function(place)
{
	createTiddlyElement(place,"br");
};

// Find an entry in an array. Returns the array index or null
// @Deprecated: Use indexOf instead
Array.prototype.find = function(item)
{
	var i = this.indexOf(item);
	return i == -1 ? null : i;
};

// Load a tiddler from an HTML DIV. The caller should make sure to later call Tiddler.changed()
// @Deprecated: Use store.getLoader().internalizeTiddler instead
Tiddler.prototype.loadFromDiv = function(divRef,title)
{
	return store.getLoader().internalizeTiddler(store,this,title,divRef);
};

// Format the text for storage in an HTML DIV
// @Deprecated Use store.getSaver().externalizeTiddler instead.
Tiddler.prototype.saveToDiv = function()
{
	return store.getSaver().externalizeTiddler(store,this);
};

// @Deprecated: Use store.allTiddlersAsHtml() instead
function allTiddlersAsHtml()
{
	return store.allTiddlersAsHtml();
}

// @Deprecated: Use refreshPageTemplate instead
function applyPageTemplate(title)
{
	refreshPageTemplate(title);
}

// @Deprecated: Use story.displayTiddlers instead
function displayTiddlers(srcElement,titles,template,unused1,unused2,animate,unused3)
{
	story.displayTiddlers(srcElement,titles,template,animate);
}

// @Deprecated: Use story.displayTiddler instead
function displayTiddler(srcElement,title,template,unused1,unused2,animate,unused3)
{
	story.displayTiddler(srcElement,title,template,animate);
}

// @Deprecated: Use functions on right hand side directly instead
var createTiddlerPopup = Popup.create;
var scrollToTiddlerPopup = Popup.show;
var hideTiddlerPopup = Popup.remove;

// @Deprecated: Use right hand side directly instead
var regexpBackSlashEn = new RegExp("\\\\n","mg");
var regexpBackSlash = new RegExp("\\\\","mg");
var regexpBackSlashEss = new RegExp("\\\\s","mg");
var regexpNewLine = new RegExp("\n","mg");
var regexpCarriageReturn = new RegExp("\r","mg");

}
//}}}
----
<html><div align="center"><FORM name=form1><INPUT type=file name=cmuds> <INPUT onclick="whatFile()" type=button value=OpenFile name=button></FORM></div><br></html><html><div align="center">{{borderless{
|[img[http://img267.imageshack.us/img267/4228/copyau2.gif][run:C:\Documents and Settings\All Users\Application Data\GlobalSCAPE\CuteHTML\CuteHTML.exe]]edit |&nbsp;&nbsp;&nbsp;[img[http://img526.imageshack.us/img526/3424/brushbz6.gif][run:C:\Program Files\Paint Shop Pro 6\Psp.exe]]psp|&nbsp;&nbsp;&nbsp; [img[http://img468.imageshack.us/img468/2811/emailxi4.gif][run:C:\Pegasus\winpm-32.exe]]pmail|&nbsp;&nbsp;&nbsp;[img[http://img442.imageshack.us/img442/9443/openfilekf3.gif][BrowseDrives]]open|


<a href="run:C:\Program Files\Ontrack\PowerDesk\PDEXPLO.EXE"> Power Desk</a> @@color(#C06):|@@ <a href="run:C:\Documents and Settings\symbex\Desktop\UnitConverter.exe">Units Converter</a> @@color(#C06):|@@ <a href="run:I:/VERNAM.EXE">Vernam</a></div></html>

{{textcenter{
<<slider chkBrowse "BrowseDrives" "MyComputer" "ToolTip: More Help Sites">>
[img[http://img406.imageshack.us/img406/6816/uaquo3ab8.gif]]<<slider chkMyLink "General_Links" "My Links" "ToolTip: More Help Sites">>
}}}


> Greetings all - I'm running v2.1.3 and am wondering if there's any easy
> way to disable the double-click to edit feature.

In the ViewTemplate tiddler (which starts out as a built-in 'shadow'
tiddler), find this line:

<div class='toolbar' macro='toolbar closeTiddler closeOthers
+editTiddler sendTiddler permalink references jump'></div>

and change "+editTiddler" to just "editTiddler" (i.e., remove the "+").
 The "+" indicates which action on the toolbar will be triggered by the
double-click. If no item has the "+", then no action is performed

Alternatively, if you only want to disable double-clicking in specific
selected tiddlers, you can include a little bit of inline javascript
directly in that tiddler's content that will remove the ondblclick
handling for that tiddler:

   http://www.TiddlyTools.com/#DoubleClickDisable
   (note: requires http://www.TiddlyTools.com/#InlineJavascriptPlugin)

To quickly incorporate this script into any desired tiddler, use:
   <<tiddler DisableDoubleClick>>

HTH,
-e
Eric Shulman
TiddlyTools / ELS Design Studios 

Source: [[TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/cb4058e210e770a1]]
config.options.chkAnimate=false; 
<html><a href="javascript:;" onclick="config.options.chkDisableTabsBar=!config.options.chkDisableTabsBar;refreshPageTemplate();return false;">toggle tiddler tabs</a></html>
/***
|''Name:''|DoBackupMacro|
|''Version:''|2.0 (9-Apr-2006)|
|''Author:''|[[Jack]]|
|''Type:''|Macro|
|Description|Creates a button which allows you to backup your TiddlyWiki on demand.|
!Usage
Add the following command to your SideBarOptions tiddler:
{{{<<doBackup>>}}}
!Revision History
* Original by [[Jack]] 9-Apr-2006
!To Do
* List non-explicit links (e.g. from tagging macro)

!Code
***/
//{{{
version.extensions.doBackup= {major: 2, minor: 0, revision: 0, date: new Date("Apr 9, 2006")};
config.macros.doBackup={label: "backup", prompt: "Backup this TiddlyWiki"}
config.macros.doBackup.handler = function(place)
{
 if(!readOnly)
 createTiddlyButton(place,this.label,this.prompt,function ()
{doBackup(); return false;},null,null,this.accessKey);
}

doBackup = function() {
 var optSaveBackups = config.options.chkSaveBackups
 config.options.chkSaveBackups = true
 saveChanges()
 config.options.chkSaveBackups = optSaveBackups
}

//}}}
<html><form action="https://www.paypal.com/cgi-bin/webscr" method="post">

<input type="hidden" name="cmd" value="_s-xclick">
<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-butcc-donate.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">

<img alt="" border="0" src="https://www.paypal.com/en_AU/i/scr/pixel.gif" width="1" height="1">
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIHLwYJKoZIhvcNAQcEoIIHIDCCBxwCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYBPekjYcXEe2QI0ptut+27r11reSO3v3jAIoa97p/mX33nbc23BYbD5stzbvX6TI41MGO7cmBGcwAuIXbDVD2Fe9bxgnL9YUZdb2LVynPNV9psA6Jkckws+0PPcoK1obpZLLeUcoiLjrU48uSxpM4VlZEENfaqhUOpuQx3rPQTzezELMAkGBSsOAwIaBQAwgawGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQIPR/n1xnluh2AgYiH0hn0u7YEUCK+WuIrHwF0NT9xvyHT+02DmGrzgyUrQym3AwZDT+9QxyexVCCZVvsEvifxwZm/IrtXDO4sYAEX9r14JMaZw++pUllR1ZDyiyFPIkW9s2hsSSwwG5DKMe12hQo6bLquthj4j60owDK4J1JK3tV0Nb0lm6k7AgsqAUoNpEXTM5HaoIIDhzCCA4MwggLsoAMCAQICAQAwDQYJKoZIhvcNAQEFBQAwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tMB4XDTA0MDIxMzEwMTMxNVoXDTM1MDIxMzEwMTMxNVowgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBR07d/ETMS1ycjtkpkvjXZe9k+6CieLuLsPumsJ7QC1odNz3sJiCbs2wC0nLE0uLGaEtXynIgRqIddYCHx88pb5HTXv4SZeuv0Rqq4+axW9PLAAATU8w04qqjaSXgbGLP3NmohqM6bV9kZZwZLR/klDaQGo1u9uDb9lr4Yn+rBQIDAQABo4HuMIHrMB0GA1UdDgQWBBSWn3y7xm8XvVk/UtcKG+wQ1mSUazCBuwYDVR0jBIGzMIGwgBSWn3y7xm8XvVk/UtcKG+wQ1mSUa6GBlKSBkTCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb22CAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCBXzpWmoBa5e9fo6ujionW1hUhPkOBakTr3YCDjbYfvJEiv/2P+IobhOGJr85+XHhN0v4gUkEDI8r2/rNk1m0GA8HKddvTjyGw/XqXa+LSTlDYkqI8OwR8GEYj4efEtcRpRYBxV8KxAW93YDWzFGvruKnnLbDAF6VR5w/cCMn5hzGCAZowggGWAgEBMIGUMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbQIBADAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMDcwMjA1MDc1NzM0WjAjBgkqhkiG9w0BCQQxFgQUYJoNKXvpeN6udg4/avyItdHJAuUwDQYJKoZIhvcNAQEBBQAEgYB4N/3ldyOXI7LhP59umwdQpgYvHBJUE6YcMHEh9WsncGOAuFq7cwTapPJZIMf65tMinrv/tWkaX5UMd+XauVihOUoZabk9UPEEW1tJo8omLGwP0l030LVuOFvAAyay3/Omj8efU9NA8AiwOoa3UFN+2mdPSIPVedC6YREZ5ockSQ==-----END PKCS7-----

">
</form></html>

<html><form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">

<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but21.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
<img alt="" border="0" src="https://www.paypal.com/en_AU/i/scr/pixel.gif" width="1" height="1">

<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIHLwYJKoZIhvcNAQcEoIIHIDCCBxwCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYBhCDdop6k26kLjAqxsvHaKkTVZ1ERiLNUJ5kRkzezFko7xX69KYblxLZh7QSG8/8IohinwM6BZ8XLxD4wHRxLSsBHwqKzZRldgPP6K5prTdkLhXuycftr46U20Xa5Yg3qqN4hdCn+5DYLP0kwSI7ihulgp7GP1///mmBDnwvhE6jELMAkGBSsOAwIaBQAwgawGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQIj6wWqSwh0FOAgYiqH2oO60dSZWdY9YNfaIST6vBYm68/v2miPCLnkTX6DIwfUD+kh8uMyaAnhFLgMLFkncVmsaYcNyaFpOtUXYqCibn7PKGvqUKV3x4ABKMfAdww0W3/sFe4JrgNFGcOKS9lQNEIztKc78XpXzX2VTlaoFE/FZJq1GTXWb9+Q+fpQfW+MNfmgap9oIIDhzCCA4MwggLsoAMCAQICAQAwDQYJKoZIhvcNAQEFBQAwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tMB4XDTA0MDIxMzEwMTMxNVoXDTM1MDIxMzEwMTMxNVowgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBR07d/ETMS1ycjtkpkvjXZe9k+6CieLuLsPumsJ7QC1odNz3sJiCbs2wC0nLE0uLGaEtXynIgRqIddYCHx88pb5HTXv4SZeuv0Rqq4+axW9PLAAATU8w04qqjaSXgbGLP3NmohqM6bV9kZZwZLR/klDaQGo1u9uDb9lr4Yn+rBQIDAQABo4HuMIHrMB0GA1UdDgQWBBSWn3y7xm8XvVk/UtcKG+wQ1mSUazCBuwYDVR0jBIGzMIGwgBSWn3y7xm8XvVk/UtcKG+wQ1mSUa6GBlKSBkTCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb22CAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCBXzpWmoBa5e9fo6ujionW1hUhPkOBakTr3YCDjbYfvJEiv/2P+IobhOGJr85+XHhN0v4gUkEDI8r2/rNk1m0GA8HKddvTjyGw/XqXa+LSTlDYkqI8OwR8GEYj4efEtcRpRYBxV8KxAW93YDWzFGvruKnnLbDAF6VR5w/cCMn5hzGCAZowggGWAgEBMIGUMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbQIBADAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMDcwMjA1MDgwNjU1WjAjBgkqhkiG9w0BCQQxFgQUUuCFIIkha1Qvp5bcbhrEQxzjIYkwDQYJKoZIhvcNAQEBBQAEgYBM2JteMC0KqY3zwJa+R6iq3tKu0JaPQfHOu/uG3wmX6WKvMiHvd1v87jT9RULxianyAjCVBh+rinFDS7V3gAzcW5lnYLhrRrmsDGqqwiIg6cav3/dSZKHQVfso+7ac5I38BWVuOM42m/tExhoz78X/burm5+ueNFI5NMIn+HsH8g==-----END PKCS7-----
">
</form></html>
/%[img[http://img244.imageshack.us/img244/9546/job2hl5.jpg]]
<html><form action="https://www.paypal.com/cgi-bin/webscr" method="post"><input type="hidden" name="cmd" value="_xclick"><input type="hidden" name="business" value="msgray@symbex.net.au"><input type="hidden" name="item_name" value="For coding TWHelp"><input type="hidden" name="item_number" value="20070417"><input type="hidden" name="no_shipping" value="0"><input type="hidden" name="no_note" value="1"><input type="hidden" name="currency_code" value="AUD"><input type="hidden" name="tax" value="0"><input type="hidden" name="lc" value="AU"><input type="hidden" name="bn" value="PP-DonationsBF"><input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but21.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!"><img alt="" border="0" src="https://www.paypal.com/en_AU/i/scr/pixel.gif" width="1" height="1"></form></html>%/
<html><div align="center"> <object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/L_aDpmfAzxI"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/L_aDpmfAzxI" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></div></html>
----
{{threecolumns{
University Of Alabama At Birmingham
Birmingham, Alabama,
United States

The Boeing Company	
Saint Louis, Missouri,
United States

Dbs Vickers Securities (s) Pte Ltd
Singapore, Singapore

Deutsche Telekom Ag 
Bendorf, Rheinland-pfalz,
Germany

Emory University
Atlanta, Georgia,
United States

Google
Mountain View, California,
United States

Deutsche Telekom Ag
Großheppach, Baden-wurttemberg,
Germany

Bellsouth.net
Gadsden, Alabama,
United States

Universidade De Aveiro
Aveiro, Portugal

Shaw Communications
Victoria, British Columbia,
Canada

British Telecommunications
Thatcham, Berkshire,
United Kingdom

Deutsche Telekom Ag
Wolnzach, Bayern,
Germany

Shatel Dsl NetworkTehran,
Esfahan,
Iran, Islamic Republic Of

Communication Solutions Ltd.
Nairobi, Nairobi Area,
Kenya

University Of Waterloo 
Waterloo, Ontario,
Canada

The Boeing Company
Chicago, Illinois,
United States

University Of South Bohemia
Ceske Budejovice, Jihocesky Kraj,
Czech Republic

Navy Network Information Center (nnic)
Pensacola, Florida, United States

Fidelity Investments
Boston, Massachusetts,
United States

Bibliothek Fuer Bildungsgeschichtliche Forschung
Berlin, Germany

Infraestructura Red Y Servicios Ip
Barcelona, Catalonia,
Spain

Nokia Group Networks
Europe

Deutsche Telekom Ag
Neuwied, Rheinland-pfalz,
Germany

Chello
Roosendaal, Gelderland,
Netherlands

Imperial College London
London, United Kingdom

Hungarian Telecommunications Company Limited
Kalocsa, Bacs-kiskun,
Hungary

Thales Service
Surrey, United Kingdom
}}}




/***
|''Name:''|''dropTags''|
|''Version:''|0.5 (12-May-2006)|
|''Created by:''|SaqImtiaz|
|''Location:''|http://tw.lewcid.org/#DropTagsMacro|
|''Description:''|provides a drop down list of tags in the current tiddler,<<br>> a replacement for the core tags macro.|
|''Documentation:''|DropTagsMacroDocumentation |
|''Source Code:''|DropTagsMacroSource |
|''Requires:''|~TW2.07|

!About
*provides a drop down list of tags in the current tiddler, a replacement for the core tags macro.

''I recommend using either TaggerPlugin or monkeyTagger, with dropTags and dropTagging in the toolbar:''


!Usage
{{{<<dropTags>>}}} for <<dropTags>>
or {{{<<dropTags 'custom label'>>}}} for <<dropTags 'custom label'>>

!Installation:
*Copy this tiddler to your TW with the systemConfig tag
* copy the following to your ViewTemplate:
#either {{{<div class='tagged' macro='dropTags'></div>}}} to add to next to the tags macro in the viewer area, or
#{{{<div class='toolbar' >
<span style="padding-right:8.75em;" macro='dropTags "current tags: "+config.macros.dropTags.dropdownchar}}'></span>
<span macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump'></span>

</div>}}}


!History
*May 12th, version 0.5, fixed some nesting bugs, added support for IntellitaggerPlugin.
*May 3rd, version 0.41, made compatible with CustomPopups.

!Source Code
***/
//{{{
config.macros.dropTags={};
config.macros.dropTags.dropdownchar = (document.all?"▼":"▾"); // the fat one is the only one that works in IE
config.macros.dropTags.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
    var arrow=config.macros.dropTags.dropdownchar;
    var droptaglabel= (params[0] && params[0] !='.')? params[0]+arrow: 'tags'+arrow;
    var droptagtooltip="current tags for this tiddler";

    var droptag = function(e){
        if (!e) var e = window.event;
        var popup = Popup.create(this);
        var lingo = config.views.wikified.tag;
        if (tiddler.tags.length==0)
           createTiddlyElement(popup,"li",null,"listTitle",lingo.labelNoTags);
        else
            for(var t=0; t<tiddler.tags.length; t++)
                    {createTagButton(createTiddlyElement(popup,"li"),tiddler.tags[t],tiddler.title);}
        if (version.extensions.IntelliTaggerPlugin)
            {createTiddlyElement(createTiddlyElement(popup,"li"),"hr");
             abego.IntelliTagger.createEditTagsButton(tiddler, createTiddlyElement(popup,"li"),"[IntelliEdit]","Edit tags with Intellitagger");}
        Popup.show(popup,false);
        e.cancelBubble = true;
        if (e.stopPropagation)
           e.stopPropagation();
        return(false);
        };
    createTiddlyButton(place,droptaglabel,droptaglabel,droptag,"button","dropTagBtn");
};

setStylesheet(

".popup .highlight{background: #fe8; color:#000;}\n"+
"#nestedtagger {background:#abf; border: 1px solid #0331BF;}\n"+
 "",
"DropTagsStyles");

if (!config.macros.tagger)
   window.onClickTag=function(e){
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);

        var nested = (!isNested(theTarget));
        if ((Popup.stack.length > 1)&&(nested==true)) {Popup.removeFrom(1);}
        else if(Popup.stack.length > 0 && nested==false) {Popup.removeFrom(0);};

        var theId = (nested==false)? "popup" : "nestedtagger";
        var popup = createTiddlyElement(document.body,"ol",theId,"popup",null);
        Popup.stack.push({root: this, popup: popup});

	var tag = this.getAttribute("tag");
	var title = this.getAttribute("tiddler");
	if(popup && tag)
		{
		var tagged = store.getTaggedTiddlers(tag);
		var titles = [];
		var li,r;
		for(r=0;r<tagged.length;r++)
			if(tagged[r].title != title)
				titles.push(tagged[r].title);
		var lingo = config.views.wikified.tag;
		if(titles.length > 0)
			{
			var openAll = createTiddlyButton(createTiddlyElement(popup,"li"),lingo.openAllText.format([tag]),lingo.openAllTooltip,onClickTagOpenAll);
			openAll.setAttribute("tag",tag);
			createTiddlyElement(createTiddlyElement(popup,"li"),"hr");
			for(r=0; r<titles.length; r++)
				{
				createTiddlyLink(createTiddlyElement(popup,"li"),titles[r],true);
				}
			}
		else
			createTiddlyText(createTiddlyElement(popup,"li",null,"disabled"),lingo.popupNone.format([tag]));
		createTiddlyElement(createTiddlyElement(popup,"li"),"hr");
		var h = createTiddlyLink(createTiddlyElement(popup,"li"),tag,false);
		createTiddlyText(h,lingo.openTag.format([tag]));
		}
	Popup.show(popup,false);
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
	return(false);
   }

if (!window.isNested)
   window.isNested = function(e) {
        while (e != null) {
                var contentWrapper = document.getElementById("contentWrapper");
                if (contentWrapper == e) return true;
                e = e.parentNode;
                }
        return false;
   };

config.shadowTiddlers.DropTagsMacroDocumentation="The documentation is available [[here.|http://tw.lewcid.org/#DropTagsMacroDocumentation]]";

config.shadowTiddlers.DropTagsMacroSource="The documentation is available [[here.|http://tw.lewcid.org/#DropTagsMacroDocumentation]]";

//}}}
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;DualEditToolbars ^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>
''Have an editing toolbar at the bottom of your tiddlers as well as the top.''

Your EditTemplate will look something like this: (it is found in the shadow tiddlers under ''Tabs>More>Shadowed'' in the right sidebar column.)
<<<
{{{
<div class='toolbar' macro='toolbar +jump +top +saveTiddler -cancelTiddler deleteTiddler autosizeEditor'</div>

<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div class="editLabel">.</div>
<div class='editor' macro='edit tags'></div>
<div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>

<div class='editor' macro='edit text'></div><span macro='resizeEditor'></span>
}}}
<<<

Simply copy the top line of code i.e. toolbar <div ...> and paste it in as the bottom line of code as well.  This should give you an edit toolbar at both the top and bottom of the edit screen.
<<<
{{{
<div class='toolbar' macro='toolbar +jump +top +saveTiddler -cancelTiddler deleteTiddler autosizeEditor'</div>

<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div class="editLabel">.</div>
<div class='editor' macro='edit tags'></div>
<div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>

<div class='editor' macro='edit text'></div><span macro='resizeEditor'></span>
<div class='toolbar' macro='toolbar +jump +top +saveTiddler -cancelTiddler deleteTiddler autosizeEditor'</div>
}}}
<<<
!!!End
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("e")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[EditASpecificTiddler]]^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>

<script label="edit">
   story.displayTiddler(null,'TiddlerName',2);

</script>

''Code''
{{{
<script label="edit">
   story.displayTiddler(null,'TiddlerName',2);
</script>
}}}
<script label="edit a tiddler">

   var title=prompt("Enter the title of a tiddler to edit (case sensitive)");
   while (title && title.length && !store.tiddlerExists(title)) {
      displayMessage("The tiddler '%0' doesn't exist".format([title]));
      var title=prompt("Please enter a tiddler title",title);
   }
   if (!title||!title.length) return; /* cancelled by user */
   story.displayTiddler(null,title,2);
</script> 
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[EditEmbeddedTiddler]]^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>
''This macro allows you to open an embedded/nested (transcluded) tiddler for editing.  ''

Just put this in a tiddler. It will show the contents of tiddler ''~LoremIpsum'' and place an edit button at the right right of the contents.
{{{
{{toolbar floatright{<<editTiddler LoremIpsum edit>> &nbsp;}}}<<tiddler LoremIpsum>>
}}}

''Put this macro in a tiddler and tag it systemConfig.''
{{{
config.macros.editTransclude = {
	layout: "{{toolbar floatright{<<editTiddler [%0] edit>> &nbsp; }}}<<tiddler [%0]>>",
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var msg = config.macros.editTransclude.layout.format([params[0]]);
		wikify(this.msg,place);
	}
}

}}}
config.macros.editTransclude = {
	layout: "{{toolbar floatright{<<editTiddler [%0] edit>> &nbsp; }}}<<tiddler [%0]>>",
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var msg = config.macros.editTransclude.layout.format([params[0]]);
		wikify(this.msg,place);
	}
}

<div class='toolbar' macro='toolbar +jump +top +saveTiddler -cancelTiddler deleteTiddler </div>
<div class='title' macro='view title'></div>

<div class='editor' macro='edit title'></div>
<div class="editLabel">.</div>
<div class='editor' macro='edit tags'></div>
<div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>

<div class='editor' macro='edit text'></div>



/***
!!!EditWelcomeStyle /%==================================================%/
***/



#tiddlerWelcome .viewer .tabContents {
background: transparent;
border-top: 1px solid #999;
border-right: 0px solid #999;
border-bottom: 0px solid #999;
border-left: 0px solid #999;
}

#tiddlerWelcome .viewer .tabSelected {  
        background:#fcf;
	color: #C06;
}

#tiddlerWelcome .title {visibility: hidden; }

/%#tiddlerWelcome .toolbar { visibility: hidden; }%/

#tiddlerWelcome .toolbar  {color: #fff;}
#tiddlerWelcome .toolbar a {color: #fff;}

#tiddlerWelcome ol { list-style-type: decimal }


#tiddlerWelcome .viewer {
        background: white;
        border:0px solid #F6F;
	padding-left: 0.8em;
        padding-right: 0.8em;
	padding-top: 0.5em;
        -moz-border-radius: 1em;
        position:relative;
        /%top: -4em; %/
}



#tiddlerWelcome .viewer a {
color:#04b;
text-decoration:none;
}

!!!<<gradient horiz #fc3 #fff>>&nbsp;[[Editing]]^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>

''Note: this script can be used to __create__ new tiddlers as well as __edit__ existing tiddlers.''

<script label="edit a tiddler">
    var title=prompt("Enter a tiddler title");
    if (!title||!title.length) return; /* cancelled by user */
    story.displayTiddler(null,title,2);
</script>
{{{
<script label="edit a tiddler">
    var title=prompt("Enter a tiddler title");
    if (!title||!title.length) return; /* cancelled by user */
    story.displayTiddler(null,title,2);

</script>
}}}
''To limit it to only editing __existing tiddlers__ write:''

<script label="edit a tiddler">
   var title=prompt("Please enter a tiddler title");
   while (title && title.length && !store.tiddlerExists(title)) {displayMessage("The tiddler '%0' doesn't exist".format([title]));
      var title=prompt("Please enter a tiddler title",title);
   }
   if (!title||!title.length) return; /* cancelled by user */
   story.displayTiddler(null,title,2);

</script>
{{{
<script label="edit a tiddler">
   var title=prompt("Please enter a tiddler title");
   while (title && title.length && !store.tiddlerExists(title)) {displayMessage("The tiddler '%0' doesn't exist".format([title]));
      var title=prompt("Please enter a tiddler title",title);
   }
   if (!title||!title.length) return; /* cancelled by user */
   story.displayTiddler(null,title,2);

</script>
}}}

The 'while' loop will repeatedly ask for another title until you
either enter one that exists, or press the cancel button.  By default,
the prompt box will contain the last title you entered so it is easy
to modify the input and try again (in case you simply made a typo the
first time) 
''The options under the options slider and in AdvancedOptions are stored in browser cookies.'' So if you sometimes lose your cookies or you are working on your ~TiddlyWiki on several computers then it can be tiresome to have to enter your options time and time again.

This page explains how you can set the default options in your ~TiddlyWiki once and for all.  The way it's done is to create your own little "plugin" that contains some javascript code to set the default options.

!!!!!A small example
For example, say you always wanted ~AutoSave to be switched on.

* Create a new tiddler.
* Give it some appropriate name, for example "~ConfigTweaks" or "~SetDefaultOptions".
* Add the following line:

{{{ config.options.chkAutoSave = true;}}}

* Give the tiddler a tag of {{{systemConfig}}}
* Click Done to save the tiddler and click 'save changes' to save your ~TiddlyWiki.

Now, once you save and reload your ~TiddlyWiki, ~AutoSave will default to "on". You can still switch off ~AutoSave with the normal checkbox, and your browser will remember that in a cookie, but you've changed the default, so if you use a different computer, or your browser loses it's cookies, ~AutoSave will be "on".

!!!!!Set multiple options
You can set multiple options in your ~SetDefaultOptions tiddler.  This example sets my user name to ~MisterT, switches off backups, switches on auto-saving and switches off the read only over http option:
{{{
 config.options.txtUserName = "MisterT";  // instead of "YourName"

 config.options.chkHttpReadOnly = false;  // allow edit buttons when viewed over http
 // options for saving..
 config.options.chkSaveBackups = false;   // don't do backups
 config.options.chkAutoSave = true;       // AutoSave whenever I edit
}}}
You can see that many options are set to either true or false.  Some options, like txtUserName, should be set to a string in "double quotes".

This example also shows that you can add comments to the tiddler using two backslashes{{{//}}}.  Anything that follows two slashes, up to the end of the line, will be ignored.

!!!!!Options that can be set
This list shows all the options available in ~TiddlyWiki 2.1.x, and shows their defaults.  Later versions might use other options. You can see what they all are by doing a "view source" on your ~TiddlyWiki an scrolling down about a page until you see {{{config.options = {}}}
{{{
 config.options.chkRegExpSearch        = false;         // default false
 config.options.chkCaseSensitiveSearch = false;         // default false
 config.options.chkAnimate             = true;          // default true
 config.options.txtUserName            = "YourName";    // default "YourName"
 config.options.chkSaveBackups         = true;          // default true
 config.options.chkAutoSave            = false;         // default false
 config.options.chkGenerateAnRssFeed   = false;         // default false
 config.options.chkSaveEmptyTemplate   = false;         // default false
 config.options.chkOpenInNewWindow     = true;          // default true
 config.options.chkToggleLinks         = false;         // default false
 config.options.chkHttpReadOnly        = true;          // default true
 config.options.chkForceMinorUpdate    = false;         // default false
 config.options.chkConfirmDelete       = true;          // default true
 config.options.chkInsertTabs          = false;         // default false
 config.options.txtBackupFolder        = "";            // default ""
 config.options.txtMainTab             = "tabTimeline"; // default "tabTimeline"

 config.options.txtMoreTab             = "moreTabAll";  // default "moreTabAll"
 config.options.txtMaxEditRows         = "30";          // default "30"
 config.options.chkAnimate             = false;         // default true
}}}
!!!!!Cookies still count
Note that any cookies set in your brower will over-ride these settings. These settings are only used when there are no cookies set. So to test properly you need to clear all your browser cookies (or just the applicable ones if you know how to do that), then re-open your ~TiddlyWiki.


Source: [[Editing Changing default options - TiddlyWikiGuides|http://tiddlywikiguides.org/index.php?title=Changing_default_options&action=edit]]
<<tabs "" [[Intro ]] "tooltip 1" [[EditingAndSavingIntro]]  [[Editing]] "" [[tiddler two]]  [[Saving]] "" [[Tiddler three]] [[BackingUp]] "" [[Tiddler four]] >>
!!!<<gradient horiz #fc3 #fff>>&nbsp;EditingAndSavingIntro^^<<tiddler CloseThisOpen with: EditingAndSaving  '« back'>>|<<toolbar editTiddler>>» ^^>>

@@color:#00c;''~TiddlyWikis''@@ are used on both online servers and on a drive on your local computer.  Therefore there are separate requirements and procedures for each.

|width:270px;<<tiddler ./online>>Therefore there are separate requirements and procedures for each.|width:50%;<<tiddler ./local>>|
|borderless|k


|width:270px;<<tiddler ./online>>Therefore there are separate requirements and procedures for each.|width:570px;<<tiddler ./local>>|
|borderless|k

|width:50%;<<tiddler ./online>>Therefore there are separate requirements and procedures for each.|width:50%;<<tiddler ./local>>|
|borderless|k





<part online hidden>
!!!Local Computer


</part>

<part local hidden>
!!!Online Server
~HideEditFeaturesOverHttp

</part>
<script>
/*<![CDATA[*/

/***********************************************
* Encrypt Email script- Please keep notice intact
* Tool URL: http://www.dynamicdrive.com/emailriddler/
* **********************************************/
<!-- Encrypted version of: tiddlywikihelp [at] *****.***.** //-->

var emailriddlerarray=[116,105,100,100,108,121,119,105,107,105,104,101,108,112,64,121,97,104,111,111,46,99,111,109,46,97,117]
var encryptedemail_id69='' //variable to contain encrypted email 
for (var i=0; i<emailriddlerarray.length; i++)
 encryptedemail_id69+=String.fromCharCode(emailriddlerarray[i])

document.write('<a href="mailto:'+encryptedemail_id69+'?subject=From TW Help Page">Email Us</a>')

/*]]>*/
</script>
!!!<<gradient horiz #fc8 #ffffff>>&nbsp;[[Embed|Embed]]&nbsp;^^<<tiddler CloseThisOpen with: WhatsInATiddler  '«« back'>>|^^^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>

----
*[[Test your computer and web browser for all major media plugins here.|http://services.tacc.utah.edu/mphc/]]
----
[img[http://img241.imageshack.us/img241/1678/playerbadgesza0.jpg][http://services.tacc.utah.edu/mphc/]]
!!!<<gradient horiz #abf #fff>>&nbsp;Example Media Player>>
Embedded Media Player 
@@color:#C06;''&raquo; &raquo;''@@+++[Play Streaming Radio]...
<html><embed type="video/x-ms-asf" id="player_FF" name="player_FF" displaysize="4" autosize="0"

  bgcolor="white" showcontrols="true" showtracker="1" showdisplay="1" showstatusbar="1" videoborder3d="0" width="300" height="142" src="http://www.abc.net.au/streaming/classic/classicfm.asx" autostart="true" designtimesp="5311" loop="false" volume="100"></embed></html>

===

@@color:#C06;''&raquo; &raquo;''@@@@position:relative;+++^35em^[See the code]
{{{<html><embed type="video/x-ms-asf" id="player_FF" name="player_FF" displaysize="4" autosize="0"

  bgcolor="white" showcontrols="true" showtracker="1" showdisplay="1" showstatusbar="1" videoborder3d="0" width="300" height="142" src="http://www.abc.net.au/streaming/classic/classicfm.asx" autostart="true" designtimesp="5311" loop="false" volume="100"></embed></html>}}}
===@@

!!!<<gradient horiz #abf #fff>>&nbsp;Example Flash Player>>

''You can embed'' an object e.g. Flash player like ~YouTube in a tiddler

Link it with a graphic
~~[img[http://img182.imageshack.us/img182/4135/videotextul4.gif][DoveBeauty]]~~ or +++[+Slide down an example here]...
<<tiddler DoveBeauty>>
===

+++[+Play another]...
<<tiddler [[Capacitor Replacement Tutorial]]>>
===

+++[+Play and another]...
<<tiddler Engineer>>
===
!!!!!<<gradient horiz #abf #fff>>&nbsp;Code>>
{{{<html><div align="center"> <object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/L_aDpmfAzxI"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/L_aDpmfAzxI" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></div></html>}}}
----
You should be able to simply replace the URLs in the above code with the URL of your choice.
----
!!!!!<<gradient horiz #abf #fff>>&nbsp;End of embed>>
/%
|Name|EmbedTiddlers|
|Source|http://www.TiddlyTools.com/#EmbedTiddlers|
|Version|1.2.2|
|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|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|transclude a list of tiddlers in a specific order|

usage:
   <<tiddler EmbedTiddlers with: "TiddlerName [[TiddlerName with spaces]] TiddlerName ...">>
or
   <<tiddler EmbedTiddlers with: @TiddlerName>>
or
   <<tiddler EmbedTiddlers with: =tagValue sortby>>

where
	@TiddlerName
		specifies a //separate// tiddler containing the space-separated,
		bracketed list of tiddlers to transclude (e.g., DefaultTiddlers)
	=tagValue
		embeds all tiddlers tagged with the indicated value
	sortby (optional - default is sort by tiddler title)
		sort tagged tiddlers by any tiddler field.  Use "+" or "-" prefix
		to indicate sort direction (ascending/descending), e.g., "-modified"

		sorts by tiddler modification date, most recent first

Note: if MatchTagsPlugin is installed, you can use FULL BOOLEAN LOGIC EXPRESSIONS
in place of the "tagValue" (following the leading "=").  However, because the boolean
expression will contain spaces, it MUST be enclosed in [[...]], like this:

<<tiddler EmbedTiddlers with: [[=settings AND NOT systemConfig]]>>

%/<script>
	var list='$1';
	var sortby='title'; if ('$2'!='$'+'2') sortby='$2';
	var tids=[];
	if (list.substr(0,1)=='=') {
		var fn=store.getMatchingTiddlers||store.getTaggedTiddlers;
		var tagged=store.sortTiddlers(fn.apply(store,[list.substr(1)]),sortby);
		for (var t=0; t<tagged.length; t++) tids.push(tagged[t].title);
	} else {
		if (list.substr(0,1)=='@') list=store.getTiddlerText(list.substr(1),'');
		var tids=list.readBracketedList();
	}
	var out='';
	for (var i=0; i<tids.length; i++) out+='<<tiddler [['+tids[i]+']]>>';
	return out;

</script>
{{borderless{
|<html><a href="javascript:;" onclick="var tid=story.findContainingTiddler(this); if (tid) story.refreshTiddler(tid.getAttribute('tiddler'),null,true); return false;">refresh</a></html>|vertical-align:bottom;<<toolbar fullscreen>>|<<toggleSideBar>>||vertical-align:bottom;[[Open in a new window|http://www.symbex.net.au/Wiki/frenchwiki.htm]]&nbsp;&raquo;|

}}}<html><table width="96%" style="border:none;margin:1px;background:transparent;clear:both;"><iframe  id="threeflags" name="threeflags"  src="http://www.symbex.net.au/Wiki/threeflags.htm" width="100%" height="110" scrolling="no" frameborder="0" allowtransparency style="border:none;"></iframe></table></html>

/%file:///D:\Wiki\frenchwiki.htm%/
{{borderless{
|<html><a href="javascript:;" onclick="var tid=story.findContainingTiddler(this); if (tid) story.refreshTiddler(tid.getAttribute('tiddler'),null,true); return false;">refresh</a></html>|vertical-align:bottom;<<toolbar fullscreen>>|<<toggleSideBar>>||vertical-align:bottom;[[Open in a new window|http://www.symbex.net.au/Wiki/frenchwiki.htm]]&nbsp;&raquo;|


}}}<html><table width="96%" style="border:none;margin:1px;background:transparent;clear:both;"><iframe  id="threeflags" name="threeflags"  src="http://www.symbex.net.au/Wiki/threeflags.htm" width="100%" height="110" scrolling="no" frameborder="0" allowtransparency style="border:none;"></iframe></table></html>

/%file:///D:\Wiki\frenchwiki.htm%/
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;<<tiddler ./hide>>|
<script>
document.write(unescape('%3C%68%74%6D%6C%3E%3C%64%69%76%20%61%6C%69%67%6E%3D%22%63%65%6E%74%65%72%22%3E%3C%69%66%72%61%6D%65%20%73%72%63%20%3D%22%68%74%74%70%3A%2F%2F%77%77%77%2E%61%62%63%2E%6E%65%74%2E%61%75%2F%72%6E%2F%6F%63%6B%68%61%6D%73%72%61%7A%6F%72%2F%64%65%66%61%75%6C%74%2E%68%74%6D%22%20%77%69%64%74%68%3D%22%31%30%30%25%22%20%61%6C%69%67%6E%3D%22%63%65%6E%74%65%72%22%20%68%65%69%67%68%74%3D%22%36%30%30%22%3E%3C%2F%69%66%72%61%6D%65%3E%3C%2F%64%69%76%3E%3C%2F%68%74%6D%6C%3E'));
</script>}}}

<part hide hidden>
<script> document.write(unescape('%3C%68%74%6D%6C%3E%3C%61%20%68%72%65%66%3D%22%68%74%74%70%3A%2F%2F%77%77%77%2E%61%62%63%2E%6E%65%74%2E%61%75%2F%72%6E%2F%6F%63%6B%68%61%6D%73%72%61%7A%6F%72%2F%64%65%66%61%75%6C%74%2E%68%74%6D%22%20%74%61%72%67%65%74%3D%22%5F%62%6C%61%6E%6B%22%3E%4F%70%65%6E%20%69%6E%20%61%20%6E%65%77%20%77%69%6E%64%6F%77%3C%2F%61%3E%3C%2F%68%74%6D%6C%3E%0A'));
</script>
</part>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[Encryption]]^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>

''Links to various encryption sources.''
!!!!!encryptionlinks
+++[+Encryption Links]
{{moveovermainmenu{
[[Tiddler Encrypt|http://www.remotely-helpful.com/TiddlyWiki/TiddlerEncryptionPlugin.html]]
[[TiddlyWiki Encrypt|http://visualtw.ouvaton.org/VisualTW.html#EncryptedVaultPlugin]]
''[[TrueCrypt|http://www.truecrypt.org/]]''
[[Encrypt Email Address|http://www.dynamicdrive.com/emailriddler/]]
[[Encrypt HTML|http://www.iwebtool.com/html_encrypter]]
[[eMail-Hivelogic|http://hivelogic.com/enkoder/form]]
[[Clipperz (OnlineSafe)|http://www.clipperz.com/]]
''[[Password Safe|http://passwordsafe.sourceforge.net/]]''
<br><br><br><br>
}}}
===

!end
<html><div align="center"><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/KaHm1ecBCgw"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/KaHm1ecBCgw" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></div></html>
<<tabs "" 
[[Intro ]] "" [[EntitiesCodeIntro]] 
[[ASCIITable ]] "" [[ASCIITable]] 
[[ASCII-HTMLTable ]] "" [[ASCII-HTMLTable]] 
[[Braille ]] "" [[Braille]] 
[[GreekHtmlEntities ]] "" [[GreekHtmlEntities]] 
[[HtmlEntities ]] "" [[HtmlEntities]] 
[[ LatinHtmlEntities ]] "" [[LatinHtmlEntities]] 
[[MathHtmlEntities ]] "" [[MathHtmlEntities]] 
[[PhoneticAlphabet ]] "" [[NATO phonetic alphabet]] 
[[UTF-8 ]] "" [[UTF-8]]  
[[UnicodeResources ]] "" [[UnicodeResources]] 
[[URL_Encoding ]] "" [[URL_Encoding]]
[[URLEncoding/DecodingTool ]] "" [[URLEncoding/DecodingTool]] 
[[GeometricShapes ]] "" [[GeometricShapes]]

>>

!!!<<gradient horiz #fc3 #ffffff>>[[Intro|EntitiesCodeIntro]]^^<<tiddler CloseThisOpen with: Entities-Codes  '« back'>>|<<toolbar editTiddler>>» ^^>>
These tabs contain many of the codes for non-keyboard characters such as :

*ASCII
*Greek {&omega; &psi;}
*Html {&pound; &euro;}
*Latin {&auml; &atilde; &aelig;} 
*Mathematics {&sum; &asymp; &le;}
!!!!&nbsp;Code
{{{
*Greek {&omega; &psi;}
*Html {&pound; &euro;}
*Latin {&auml; &atilde; &aelig;} 
*Mathematics {&sum; &asymp; &le;}
}}}
*[[Character entities defined in HTML 4.01|http://www.eki.ee/letter/chardata.cgi?HTML4=1]] (decimal and ~UTF-8 values)
*Also see http://www.htmlhelp.com/reference/html40/entities/symbols.html


<html><br>This WebRing Community's Navbar:<table border="0" cellpadding="1" cellspacing="0" width="250"><tbody><tr>    <td align="center" nowrap="nowrap" valign="middle" width="1%"><a href="http://B.webring.com/t/The-Esoteric-Programming-Languages-Ring" target="_top"><img src="http://img1.webring.com/logo3.gif" alt="The Esoteric Programming Languages Ring" border="0"></a><font color="" face="arial" size="-2"><br>© 2007 <font color=""><a href="http://www.webring.com">WebRing Inc.</a></font></font></td><td nowrap="nowrap"><table border="0" cellpadding="0" cellspacing="2" width="100%"><tbody><tr><td nowrap="nowrap"><font color=""><b>The Esoteric Programming Languages Ring</b></font></td></tr><tr><td colspan="2" nowrap="nowrap"><font color="" size="-1"><b><a href="http://B.webring.com/go?ring=esolang;id=1;prev" target="_top"><font color="">&lt;&lt; Prev</font></a></b>|<a href="http://B.webring.com/t/The-Esoteric-Programming-Languages-Ring" target="_top"><font color="">Ring Hub</font></a>|<a href="http://B.webring.com/wrman?ring=esolang;addsite" target="_top"><font color="">Join</font></a>|<b><a href="http://B.webring.com/go?ring=esolang;id=1;next" target="_top"><font color="">Next &gt;&gt;</font></a></b></font></td></tr><tr><form method="post" action="http://B.webring.com/cgi-bin/Hubsearch?ringsearch"></form><td colspan="2" nowrap="nowrap"><input name="query" size="18" style="height: 19px;" type="text"><input name="Submit" value="Search" style="height: 19px;" type="submit"><input name="ring" value="esolang" type="hidden"></td></tr>

</tbody></table></td></tr></tbody></table></html>




<html><a href="javascript:;" onclick="var tid=story.findContainingTiddler(this); if (tid) story.refreshTiddler(tid.getAttribute('tiddler'),null,true); return false;">refresh</a></html>

<html><table width="96%" style="border:none;margin:1px;background:transparent;clear:both;"><iframe id="MagicLastUpdate" src="file:///I:\TiddlySpot\TiddlyWiki2.1\LastUpdate.htm" width="100%" height="0" scrolling="no" frameborder="0" allowtransparency style="border:none;"></iframe></table></html>

!!!<<gradient horiz #fc3 #fff>>&nbsp;[[ExperimentalWikify]]^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>

<<wikify [[This tiddler is: %0 using %1 bytes (last author: %2)]] title {{tiddler.text.length}} modifier>>
<<wikify [[The source of this plugin is: %0]] 'here::Source'>>
<<wikify [[The tiddler has been changed %0 times]] changecount@here>>

<<wikify [[The Primary Mid color is: @@background:%0;%0@@]] 'ColorPalette::PrimaryMid'>>
<<wikify [[The current user is: %0]] {{config.options.txtUserName}}>>
<<wikify [[The current Backup Folder is: %0]] {{config.options.txtBackupFolder}}>>
<<wikify [[The current WhatsInATiddler tab is:%0]] {{config.options.chkWhatsInATiddler}}>>
<<wikify [[The current FormattingThePage @@color:#C06;tab is:@@%0]] {{config.options.chkFormattingThePage}}>>
<<wikify [[The current NavigationWithTW tab is:%0]] {{config.options.chkNavigationWithTW}}>>
<<wikify [[The current FormattingText tab is:%0]] {{config.options.chkFormattingText}}>>
<<wikify [[The current Entities-Codes tab is:%0]] {{config.options.chkEntitiesCodes}}>>
<<wikify [[The current HowToUseLinks tab is:%0]] {{config.options.chkHowToUseLinks}}>>

<<wikify [[The current MacrosBuiltin tab is:%0]] {{config.options.chkMacrosBuiltin}}>>
<<wikify [[The current MacrosOther tab is:%0]] {{config.options.chkMacrosOther}}>>
<<wikify [[The current MacrosOther tab is:%0 %1 %2 %3 %4 %5 %6]] title {{tiddler.text.length}}   {{config.options.txtBackupFolder}} {{store.getTiddlerText('BlankTable')}} {{config.macros.search.handler}}>>







!!!<<gradient horiz #fc3 #fff>>&nbsp;Built-in slider method>>

<<slider "CookieName" "Folder1" "Folder1" "tooltip">>
<<slider "CookieName2" "Folder2" "Folder2" "tooltip">>

!!!<<gradient horiz #fc3 #fff>>&nbsp;[[TableSliderTest|ExplorerSliderTest]]>>
|width:45em; !File Explorer |>|>|
|padding-left:1em;Name | Date| Size|
|<<tiddler ./file1>>| 07.07.07| 1024kb|
|<<tiddler ./file2>>| 08.07.07| 230kb|
<part file1 hidden>
+++[Folder1]

|Name| Date| Size|
|File1| 08.07.07| 230kb|
|borderless|k
===
</part>
<part file2 hidden>

+++[Folder2]

|Name| Date| Size|
|File2| 08.07.09| 1230kb|
|File3| 18.07.09| 230kb|
|File4| 20.07.09| 3230kb|
|borderless|k
===
</part>
!!!<<gradient horiz #abf #fff>>&nbsp;Code>>
To see the code click<<toolbar editTiddler>>

!!!<<gradient horiz #fc3 #fff>>&nbsp;[[ExternalLinkButton]]^^<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>

Also see: TargetingLinks

<html><input type='button' value='SydneyTV' onclick='window.open("http://www.yourtv.com.au/guide/?action=tonight&region_id=73","_blank")'></html> 

!!!!!<<gradient horiz #fcb #fff>>&nbsp;Code for Button>>
{{{
<html><input type='button' value='SydneyTV' onclick='window.open("http://www.yourtv.com.au/guide/?action=tonight&region_id=73","_blank")'></html> 

}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[ExternalTiddlers]]^^<<tiddler CloseThisOpen with: WhatsInATiddler  '« back'>>|<<toolbar editTiddler>>» ^^>>

''The following plugins allow loading tiddlers from external sources.''  They provide limited support for on-demand loading. They vary in functionality so check the documentation included with each.
 
[[IncludePlugin|http://tiddlywiki.abego-software.de/#IncludePlugin]]
[[LoadTiddlersPlugin|http://www.tiddlytools.com/#LoadTiddlersPlugin]]
[[ExternalTiddlersPlugin|http://www.tiddlytools.com/#ExternalTiddlersPlugin]] 
[[MasterIncludesPlugin|http://svn.tiddlywiki.org/Trunk/contributors/FND/plugins/MasterIncludesPlugin/]] somewhat unpolished

{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("f")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
!!!<<gradient horiz #fc3 #fff>>&nbsp;FFKeyStrokes^^<<tiddler CloseThisOpen with: KeyStrokes  '« back'>>|<<toolbar editTiddler>>» ^^>>
The following Ctrl- characters are already used by FireFox:

A - select all
B - show bookmarks
C - copy
D - bookmark this page
E - moves focus to GoogleSearch in toolbar
F - Find
G - Find Again
H - show history
I - (shift) DOM Inspector
J - download manager
K - web search
L - open location
M
N - new window
O - open file
P - print
Q
R - reload
S - save page as
T - new tab
U - view page source
V - paste
W - close tab (shift - close window)
X - cut
Y - redo
Z - undo
ctrl-0, ctrl-+ ctrl-minus - adjust text size

In addition, various FireFox plugins (such as Firebug) also assign key
bindings to ctrl+shift+letter and, because these plugins are
implemented at a browser-native level (as opposed to TW javascript),
their key bindings are likely to take precedent, even if you could
capture the keystrokes in TW. 
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;Open in a new window[img[Open outside link in a new window|http://img229.imageshack.us/img229/1687/extlink7226466sx5.gif][http://www.tiddlytools.com/faq.html]]|
----

<html><div align="center"><iframe  src ="http://www.tiddlytools.com/faq.html" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[FavIcon]]^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>

Would you like to display your own icon [img[http://img99.imageshack.us/img99/1614/kittyiconrc9.jpg]] on the browser address bar and browser tabs when visitors view your web pages?

Now it's easy to create icons and marquees for your web pages with ~FavIcon from Pics. Simply select a picture, logo or other graphic (of any size/resolution) for the "Source Image" then...

#Go here @@color:#C06;''&raquo; &raquo;'' @@ <html><a href="http://www.chami.com/html-kit/services/favicon/" target="_blank"

>~FavIcon from Pics</a></html> to make your ''~FavIcon'' from the picture of your choice.
#Then add the following code containing the link to your new ''~FavIcon'' to the Shadow Tiddler MarkupPreHead 
{{{<link rel="shortcut icon" href="http://LinkToYourFavIcon.jpg">}}}
!!!End



{{tablecenter{
|>|>|>|>| !February 2007 Statistics |
|&nbsp;|''Page Loads'' |''Unique Visitors''|''First Time Visitors''| ''Returning Visitors''|
|Total 	| 4,050| 3,319| 2,432| 887|
|Average| 145| 119| 87| 32|
|>|>|>|>|<<tiddler ./feb>>|
}}}

<part feb hidden>
*''~StatsCounter Hits for the month of'': @@color:#c06;06 Feb <<sparkline 0 0 0 0 0 0 0 0 16 0 150 0 162 0 157 0 194 0 146 0 193 0 257 0 216 0 320 0 161 0 164 0 102 0 190 0 161 0 159 0 205 0 168 0 181 0 96 0 144 0 210 0 203 0 >> 28 Feb 2007@@
**[Feb 24-min (96) ] 
**[Feb 15-max (320)] 
**grand total (''4050'') as of @@color:#04f; ''&raquo;'' 28.02.07 16:14@@
</part>
|<<tiddler ./refreshit>>|@@color:#C06;''&raquo; &raquo;'' @@|<<tiddler ./randomtid>>|
|borderless|k


<part refreshit hidden>
<script label="I'm feeling lucky">
        var here=story.findContainingTiddler(place);
        if (here)
story.refreshTiddler(here.getAttribute("tiddler"),null,true);
</script> 
</part>

<part randomtid hidden>
<script>

  var tids=store.getTaggedTiddlers("ft");
  if (tids.length)
    return "[["+tids[Math.floor(Math.random()*tids.length)].title+"]]";
</script>
</part>
{{menublueLink {
<html><hide linebreaks>

<form action="http://www.fileinfo.net/extension/" method="post" name="FileInfo" target="_blank">
<tr><td align="center" valign="middle" bgcolor="white"><a href="http://www.fileinfo.net/" target="_blank">Search for File Ext.</a><br/></td></tr>

<tr height="28"><td align="center" valign="middle" nowrap bgcolor="white" height="28"><input type="text" name="extension" size="10" maxlength="30"><img src="http://www.fileinfo.net/images/main/offsite.gif" alt="" width="4" height="4" border="0"><input type="submit" name="submit" value="Go">

</td></tr></form></html>
}}}
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.fileinfo.net/]]&nbsp;&raquo;|
----

<html><div align="center"><iframe  src ="http://www.fileinfo.net/" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[FireFox Tips]]^^ <<toolbar editTiddler>>» ^^>>
----
<<<
Are you looking for a simple interface to manage per-file privileges in Firefox »
* Get the code and instructions at An interface to manage per-file privileges in Firefox
See http://firefoxprivileges.tiddlyspot.com/

There is a bookmarklet you can drag to your Firefox
toolbar.  It's on the above site but you might not find it.  You can
easily set privileges for any of your ~TiddlyWikis
http://icanhaz.com/firefoxprivileges

''Html code for this bookmarklet link''<html><a href='javascript:void(eval(decodeURIComponent("(function()%250A%257B%250Avar%2520script%253Ddocument.createElement(%2522script%2522)%253B%250Ascript.src%253D%2522http%253A%252F%252Ftrac.tiddlywiki.org%252Fbrowser%252FTrunk%252Fcontributors%252FXavierVerges%252Fplugins%252FFirefoxPrivilegesPlugin.js%253Fformat%253Draw%2522%253B%250Ascript.onload%253Dfunction()%257Bvar%2520b%253Dbackstage%253B%2520var%2520fp%253D%2522firefoxPrivileges%2522%253B%250Avar%2520bt%253DcreateTiddlyButton(b.toolbar%252C%2522security%2522%252Bglyph(%2522downTriangle%2522)%252C%2522%2522%252Cb.onClickTab%252C%2522backstageTab%2522)%253B%250Abt.setAttribute(%2522task%2522%252Cfp)%253Bb.switchTab(fp)%253B%257D%253B%250Adocument.getElementsByTagName(%2522head%2522)%255B0%255D.appendChild(script)%253B%250A%257D)()")))'>~FirefoxPrivileges</a></textarea></html>

<html><textarea cols="60" rows ="3" ><a href='javascript:void(eval(decodeURIComponent("(function()%250A%257B%250Avar%2520script%253Ddocument.createElement(%2522script%2522)%253B%250Ascript.src%253D%2522http%253A%252F%252Ftrac.tiddlywiki.org%252Fbrowser%252FTrunk%252Fcontributors%252FXavierVerges%252Fplugins%252FFirefoxPrivilegesPlugin.js%253Fformat%253Draw%2522%253B%250Ascript.onload%253Dfunction()%257Bvar%2520b%253Dbackstage%253B%2520var%2520fp%253D%2522firefoxPrivileges%2522%253B%250Avar%2520bt%253DcreateTiddlyButton(b.toolbar%252C%2522security%2522%252Bglyph(%2522downTriangle%2522)%252C%2522%2522%252Cb.onClickTab%252C%2522backstageTab%2522)%253B%250Abt.setAttribute(%2522task%2522%252Cfp)%253Bb.switchTab(fp)%253B%257D%253B%250Adocument.getElementsByTagName(%2522head%2522)%255B0%255D.appendChild(script)%253B%250A%257D)()")))'>FirefoxPrivileges</a></textarea></html>

''Bookmarklet code''

<html><textarea cols="60" rows ="15" >(function()
{
var script=document.createElement("script");
script.src="http://trac.tiddlywiki.org/browser/Trunk/contributors/XavierVerges/plugins/FirefoxPrivilegesPlugin.js?format=raw";
script.onload=function(){var b=backstage; var fp="firefoxPrivileges";
var bt=createTiddlyButton(b.toolbar,"security"+glyph("downTriangle"),"",b.onClickTab,"backstageTab");
bt.setAttribute("task",fp);b.switchTab(fp);};
document.getElementsByTagName("head")[0].appendChild(script);
})()</textarea></html>

<<<
----
{{textleft{
@@color(#C06):''Links''@@

<<<
*+++[Better Ad Blocking in FireFox]...
<<tiddler BetterAdBlocking>>
===

*In Firefox 3 the script for loading an HTML page into the sidebar {{{<a href="#" target="_search">}}} has been considered an exploit and is now disabled!
*[[Quicktime/Real/Windows Media Player Issues (Windows)|http://forums.mozillazine.org/viewtopic.php?t=206216]]
*+++[General: speed up your web pages]...
<<tiddler SpeedUpWebPages>>
===

*2008.04 If you're sick of Firefox 2 eating up over a gigabyte of memory only to freeze up and crash, it may be time to move onto Firefox 3. The new version of our favorite browser has seen its fifth and final beta release, and Mozilla says its for testing purposes only. However, the Firefox 3 beta is leaner, meaner, faster, and just plain better than Firefox 2—and don't tell Daddy Mozilla, but even at this early stage, we've found it to be stable enough for full-time use. There are a few ways you can start using Firefox 3 without blowing your browser setup to hell or losing your most important extensions. Here's how. http://tinyurl.com/6699x2
*[[FireFox - Editing configuration|http://kb.mozillazine.org/Editing_configuration]]
*[[Lifehacker Firefox 2 config tweaks|http://www.lifehacker.com/software/firefox-2/geek-to-live-top-firefox-2-config-tweaks-209941.php]]
*~FireFox memory leak
**http://kb.mozillazine.org/Memory_Leak
* reduce memory consumption (using browser.sessionhistory.max_entries)
**http://www.ghacks.net/2007/02/25/reduce-firefox-memory-consumption/
* fixing access keys
**http://jrandomhacker.info/Firefox/how_to_fix_FireFox2_accesskeys
* Firefox Quick Find as it should (and used to) be
**http://mozillalinks.org/wp/2006/10/firefox-quick-search-as-it-should-and-used-to-be/

<<<
@@color(#C06):Tweaks Implemented at ~TWHelp@@
<<<
@@color(#C06):''Fetch only what you click''@@

Fx .6 and up: Firefox has this wacky little feature that downloads pages from links it thinks you may click on pages you view, like the top result on a page of Google results. This means you use up bandwidth and CPU cycles and store history for web pages you may not have ever viewed. Creepy, eh? To stop that madness, set the network.prefetch-next key to false.

   1. Type "about:config" the address bar.
   2. Scroll down to the setting "network.prefetch-next" and set the value to "False".

    * Key: network.prefetch-next
    * Modified Value: false
----
@@color(#C06):''Limit RAM usage''@@

All versions: Goodness knows I've done a good amount of belly-aching about Firefox's voracious appetite for RAM. (It's consistently the most memory-intensive process on both my PC and Mac.) Happily a simple config tweak got Mem Use right back down to a more comfortable number. Along with the previous prefetch mod, set your browser.cache.disk.capacity browser.cache.memory.capacity to a value that fits your total RAM.

    * Key: browser.cache.memory.capacity
    * Modified Value: Depends on your system's total memory. According to Computerworld:

          For RAM sizes between 512BM and 1GB, start with 15000. For RAM sizes between 128MB and 512M, try 5000.

----
@@color(#C06):''Spellcheck''@@
1. Type "about:config" the address bar.
2. Scroll down to the setting
layout.spellcheckDefault = 2 turns on Firefox 2's spell-checking in input fields as well as text areas. 
<<<
@@color(#C06):Other tweaks Implemented  at ~TWHelp@@

<<<
@@color(#C06):''Save RAM''@@
Someone sent me a link to an interesting ~FireFox tweak that could save
~FireFox users a LOT of working memory overhead.

# Type 'about:config' in Firefox address bar and press Enter.
# Right click in the page and select 'New > Boolean'.
# Type 'config.trim_on_minimize' in the box that pops up. Press Enter.
# Select 'True' and then press Enter.
# Restart Firefox.

What this does is cause FireFox to automatically its reduce working
memory whenever the  browser window is minimized.  I tested this under
FF2002 on WinXPSP2 using a local copy of TiddlyTools, and the
browser's memory usage (as shown by the Task Manager "Processes" tab)
went from around 38Mb down to around 5Mb, just by minimizing the
window!!

In addition, not only does this setting dramatically reduce the memory
used by FireFox while it is minimized, but after you restore the
browser window, it appears that FireFox continues to use significantly
less memory than before (though more than when minimized).  I've also
noticed that FireFox seems to run a bit quicker after a minimize/
restore, especially if it has been running all day with an actively
edited TW document.

These side-effects are most likely the result of some *global* garbage
collection process that is apparently being performed to reclaim
wasted memory space each time the window is minimized. 

Eric Shulman 
----
@@color(#C06):''Reduce Firefox Memory Consumption''@@

Firefox seems to need more memory when I have it open for a long time and surf to many different websites. I was never able to find out why it behaved this way and assumed that it was either a memory leak or an extension which would be responsible for this behavior.

It seems that my assumption was wrong. Firefox saves the last 50 visited websites of a single session in memory which means that it could add up quickly if you visit lots of content filled websites. The reason behind this is that it is faster to access a already visited website if it still resides in memory instead of loading it from disk cache or from the server.

50 sites on the other hand seems a lot to me. I usually do not visit sites again that I visited a while ago - I tend to visit many different sites and only a few ones more than once daily. The fix is relatively simple. Type about:config in the Firefox address bar and search for the term:

browser.sessionhistory.max_entries

Right-click the entry, select modify from the list and change it to a lower value. I set it to 5 which works well for my surfing habits. Other values might be better for yours.
<<<
----
''FireFox Tweek'' Is there any way to configure FF so that I don't get the "unresponsive script" messages on complex tiddlers?
<<<
1) enter "about:config" into the address field in FF
2) search for dom.max_script_run_time in the resulting list of
configuration parameters
3) double-click that entry to change the value

The default is 5 seconds...
I recommend increasing it in 5 second increments until the
'unresponsive' messages disappear.

-e
Eric Shulman
TiddlyTools / ELS Design Studios

<<< 
}}}
===

----
&darr;+++[Windows UNSAFE Message]
> When I try to save [from FireFox], I get this message:
> A script from "file://" is requesting enhanced abilities
> that are UNSAFE and could be used to compromise
> your machine or data
> Allow or Deny
> But what exactly is it doing? Am I opening up any kind of security

> hole by allowing this? Is there a way I can view the setting in
> Firefox that is being changed?

It is asking for permission to READ the existing TW document file from
your local hard drive, so it can then insert the changed tiddlers from
the currently loaded document into that file content, and then WRITE
that file content back to your hard drive... In other words: it's
saving the changes in your document!!!

So... why does this create a warning?  Because, underneath the hood,
TiddlyWiki is still just a web page, and ALL web pages running in your
browser MUST ask for permission before accessing your local hard
drive.  That's just basic, common-sense security.  You don't want
random web sites that you visit to start reading/writing your locally-
stored files!

However, while TiddlyWiki is a web page, and CAN be opened from a
*remotely-hosted* document (i.e., an "http" URL), it is mostly
designed to opened and used as a *locally-stored file* (i.e., a "file"
URL), and NEEDS to be granted permission to access the local hard
drive in order for some key TW core functions (such as saving changes)
to work properly.

Unfortunately, even though one could presume that "file://" is, by
definition, a "trusted source" -- after all, it is YOUR drive, and YOU
opened the TW document in the first place -- the browser still asks
for permission to access the local hard drive from that locally-loaded
document.

I suggest that, once you are comfortable with the idea, you simply
"Allow" the file:// access and also [x] "remember this decision", so
you aren't nagged to death with security warnings.

Fortunately, the browser treats "file://" as a separate domain from
all other remote domains, so granting permissions to locally-stored
documents won't create any security holes when accessing remote web
sites.

To find the internal FireFox setting:
1) look for "prefs.js", a file that is automatically written by
FireFox to store your current browser settings.  Under Windows, this
is generally located at:
-----
C:\Documents and Settings\Your Name\Application Data\Mozilla\Firefox
\Profiles\abcdef12345.default\prefs.js
-----
2) Open that file with a plain text editor (make sure FireFox is NOT
running at the time!), and find these two lines (or similar):
-----
user_pref("capability.principal.codebase.p0.granted",

"UniversalXPConnect  UniversalBrowserRead");
user_pref("capability.principal.codebase.p0.id", "file://");
-----
3) Delete those lines to restore FireFox's default "ask for
permission" state for the "file://" domain

HTH,
-e
Eric Shulman
TiddlyTools / ELS Design Studios 
===

!!!!!End
^^[[Top|FireFox Tips]]^^
!!!<<gradient horiz #fc3 #ffffff>>FirstLetter ^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>

|>|bgcolor:#abf; <<gradient horiz #abf #fff #abf>>font-family:Verdana, Arial; @@color:#000; ''Large First Letter''@@>> |
|<<tiddler ./firstletter>>|<<tiddler ./code>>|



<part firstletter hidden>

{{textjustify{
{{firstletterK{
@@color:#c06;K@@
}}}''arl Popper'' CH, MA, Ph.D., D.LITT, FBA, FRS (July 28, 1902 to September 17, 1994), was an Austrian and British philosopher {{imgfloatright{
[img[Click to go to a web page on Popper.|http://img391.imageshack.us/img391/362/kpopperqk2.jpg][http://www.eeng.dcu.ie/~tkpw/]]  
}}}and a professor at the London School of Economics. He is counted among the most influential philosophers of science of the 20th century, and also wrote extensively on social and political philosophy. Popper is perhaps best known for repudiating the classical observationalist-inductivist account of scientific method by advancing ''empirical falsifiability'' as the criterion for distinguishing scientific theory from non-science.
}}}
Source: http://science.tiddlyspot.com
</part>

<part code hidden>
!!!<<gradient horiz #ccc #ffffff>>Code in ~StyleSheet>>

{{{ .firstletter{
 float:left;
 width:0.75em;
 font-size:400%;
 font-family:times,arial;
 line-height:60%;
 }}}}

!!!<<gradient horiz #ccc #ffffff>>In Use>>
{{{
 {{firstletter{
 @@color:#c06;K@@
 }}}
}}}
</part>
<<forEachTiddler
 where
 'tiddler.tags.length == 0'
 script
 '
 function getFirstLine(s) {
 var m = s.match(/\s*(.*)/);
 return m != null && m.length >= 1 ? m[1] : "";
 }
 '
 write
 '"*[["+tiddler.title+"]] &rarr; "+getFirstLine(tiddler.text)+"\n"' 
>>
!~GiveMeTheFirstLine
{{{
<<forEachTiddler
 where 
 'tiddler.tags.containsAny(["ft"]) && ! tiddler.tags.containsAny([""])'
   script
        '
                function giveMeTheFirstLine(s) {
                    var m = s.match(/\s*(.*)/);
                    return m != null && m.length >= 1 ? m[1] : "";
                }
        '
    write
'"*"+giveMeTheFirstLine(tiddler.text)+"   &rarr; [["+tiddler.title+"]]\n"'
 >> 

}}}
{{{

/***
|Name:|FitWindowPlugin|
|Source:|http://tiddlyyap.tiddlyspot.com/|
|License:|Public domain|
|~CoreVersion:|2.3|
|Browser:|Tested on Firefox 2, IE7|
|Type:|script|
|Requires:|none|
|Overrides:|none|
|Description:|Set tiddler height to fit browser window and add vertical scrollbar when needed|
|References:|http://tinyurl.com/2srh4y|
!Usage
*This plugin determines the height of the user's browser window and sets the maximum height of tiddlers to fit, with a vertical scrollbar displayed as needed.
*Using the plugin only makes sense if you are also using the [[SinglePageModePlugin|http://www.tiddlytools.com/#SinglePageModePlugin]] so that only one tiddler is displayed at a time.
*The variable windowDiff set near the top of the script can be changed to accommodate shorter or taller TW heading panels. If tiddlers extend below the bottom of the browser window, increase this number; if they don't extend far enough, decrease the number.
*Note that if the //height// or //overflow// property is set for the //.tiddler// class in ~StyleSheet, that setting will override this script.

!Code
***/
//{{{

function getHeight()
 { var windowHeight = 0;
   var windowDiff = 110;
   if (typeof(window.innerHeight)=='number')
    { windowHeight=window.innerHeight; }
   else
    { if (document.documentElement && document.documentElement.clientHeight)
       { windowHeight=document.documentElement.clientHeight; }
      else
       { if (document.body&&document.body.clientHeight)
          { windowHeight=document.body.clientHeight; }
         }
      }
   if(readOnly) {tiddlerHeight = windowHeight - windowDiff + 17;}
    else {tiddlerHeight = windowHeight - windowDiff;}
   return tiddlerHeight;
   }
setStylesheet(".tiddler {max-height:"+getHeight()+"px; overflow: auto;}","ScrollStyle")

//}}}

}}}
<html><table width="96%" style="border:none;margin:1px;background:transparent;clear:both;"><div align="center"><iframe id="threeflags" name="threeflags" src="http://www.symbex.net.au/Wiki/threeflags.htm" width="120" height="25"  scrolling="no" frameborder="0" allowtransparency style="border:none;"></iframe></div></table></html>

+++^30em^[click here to see LatinHtmlEntities in a floating panel]
	<<moveablePanel>>LatinHtmlEntities
----
	<<tiddler LatinHtmlEntities>>
===
|Name| Date| Size|
|File2| 08.07.09| 1230kb|
|File3| 18.07.09| 230kb|
|File4| 20.07.09| 3230kb|
|Name| Date| Size|
|File A| 08.07.09| 1230kb|
|File C| 18.07.09| 230kb|
|File F| 20.07.09| 3230kb|
{{textcenter{
@@color:#c06;Table heading links to w3schools references on this subject.@@}}}
|>|>|>| ![[Font Properties|http://www.w3schools.com/css/css_font.asp]] |
| ''Property'' | ''Valid Values'' | ''Example'' | ''Inherited?'' |
| font-family |[font name or type] | font-family: Verdana, Arial; | Y |
| font-style |normal, italic, oblique | font-style:italic; | Y |
| font-variant |normal, small-cap | font-variant:small-caps; | Y |
| font-weight |normal, bold | font-weight:bold; | Y |
| font-size |[ xx-large, x-large, large, medium, small, x-small, xx-small ], [ larger, smaller ], \\percentage'\\, //length// | font-size:12pt; | Y |
| font |[//font-style// / //font-variant// / //font-weight//] ? //font-size// [//line-height//] ? //font-family// | font: bold 12pt Arial; | Y |
!!!<<gradient horiz #fc3 #ffffff>>FontPropertiesDemo ^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>

You can change font sizes any time within a tiddler using HTML or CSS.
*+++[See the avaiable font properties here]
<<<
<<tiddler [[Font Properties - CSS]]>>
<<<
===

|<<tiddler ./inline>>|<<tiddler ./inlinecss>>|
|<<tiddler ./html>>|<<tiddler ./htmlcode>>|
|<<tiddler ./fontstyledemo>>|<<tiddler ./democode>>|
|vertical-align:middle;Put this in your<br> StyleSheet @@color:#C06;''&raquo; &raquo;'' @@|<<tiddler ./stylesheetdemo>>|
See [[Font Properties - CSS]]


<part inline hidden>
!!!!!<<gradient horiz #9ae #ffffff>>&nbsp;Example>>
@@font-size:12pt;12pt text@@
@@font-variant:small-caps;Font Varient Small Caps@@
@@font-weight:bold;Font weight is bold@@
</part>

<part inlinecss hidden>
!!!!!<<gradient horiz #9ae #ffffff>>&nbsp;Code inline CSS>>
"""@@font-size:12pt;''12pt text''@@"""

"""@@font-variant:small-caps;FontVarient Small Caps@@"""
"""@@font-weight:bold;Font weight is bold@@"""
</part>





<part html hidden>
!!!!!<<gradient horiz #9ae #ffffff>>&nbsp;Example>>

<html><div align="center">
<font size="3" color="#00f">This is font size 3</font>
<font size="-1" color="#00f">This is font size -1</font>

<font size="-2" color="#00f">This is font size -2</font>
</div></html>
</part>

<part htmlcode hidden>
!!!!!<<gradient horiz #9ae #ffffff>>&nbsp;Code>>

{{{
<html><div align="center">
<font size="3" color="#00f">This is font size 3</font>
<font size="-1" color="#00f">This is font size -1</font>

<font size="-2" color="#00f">This is font size -2</font>
</div></html>
}}}
</part>

<part fontstyledemo hidden>

!!!!!<<gradient horiz #9ae #ffffff>>&nbsp;Example CSS>>
{{fontsize18pt{This is a demo}}}
{{fontboldTimes{This is a demo}}}
{{smallcaps{This Is Small Caps}}}
</part>

<part democode hidden>
!!!!!<<gradient horiz #9ae #ffffff>>&nbsp;Code CSS>>
@@color(#00F):Put this in your tiddler.@@
{{{
{{fontsize18pt{This is a demo}}}
{{fontboldTimes{This is a demo}}}
{{smallcaps{This Is Small Caps}}}
}}}
</part>

<part stylesheetdemo hidden>
{{{
.fontsize18pt {font-size:18pt;}
.fontboldTimes {font: bold 12pt Times;}
.smallcaps {font-variant:small-caps;}
}}}
</part>


/***
|Name|FontSizePlugin|
|Created by|SaqImtiaz|
|Location|http://lewcid.googlepages.com/lewcid.html#FontSizePlugin|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Resize tiddler text on the fly. The text size is remembered between sessions by use of a cookie.
You can customize the maximum and minimum allowed sizes.
(only affects tiddler content text, not any other text)

Also, you can load a TW file with a font-size specified in the url.
Eg: http://lewcid.googlepages.com/lewcid.html#font:110

!Demo:
Try using the font-size buttons in the sidebar, or in the MainMenu above.

!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
Then put {{{<<fontSize "font-size:">>}}} in your SideBarOptions tiddler, or anywhere else that you might like.

!Usage
{{{<<fontSize>>}}} results in <<fontSize>>

{{{<<fontSize font-size: >>}}} results in <<fontSize font-size:>>

!Customizing:
The buttons and prefix text are wrapped in a span with class fontResizer, for easy css styling.
To change the default font-size, and the maximum and minimum font-size allowed, edit the config.fontSize.settings section of the code below.

!Notes:
This plugin assumes that the initial font-size is 100% and then increases or decreases the size by 10%. This stepsize of 10% can also be customized.

!History:
*27-07-06, version 1.0 : prevented double clicks from triggering editing of containing tiddler.
*25-07-06,  version 0.9

!Code
***/

//{{{
config.fontSize={};

//configuration settings
config.fontSize.settings =
{
            defaultSize : 100,  // all sizes in %
            maxSize : 200,
            minSize : 40,
            stepSize : 10
};

//startup code
var fontSettings = config.fontSize.settings;

if (!config.options.txtFontSize)
            {config.options.txtFontSize = fontSettings.defaultSize;
            saveOptionCookie("txtFontSize");}
setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
setStylesheet("#contentWrapper .fontResizer .button {display:inline;font-size:105%; font-weight:bold; margin:0 1px; padding: 0 3px; text-align:center !important;}\n .fontResizer {margin:0 0.5em;}","fontResizerButtonStyles");

//macro
config.macros.fontSize={};
config.macros.fontSize.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{

               var sp = createTiddlyElement(place,"span",null,"fontResizer");
               sp.ondblclick=this.onDblClick;
               if (params[0])
                           createTiddlyText(sp,params[0]);
               createTiddlyButton(sp,"+","increase font-size",this.incFont);
               createTiddlyButton(sp,"=","reset font-size",this.resetFont);
               createTiddlyButton(sp,"–","decrease font-size",this.decFont);
}

config.macros.fontSize.onDblClick = function (e)
{
             if (!e) var e = window.event;
             e.cancelBubble = true;
             if (e.stopPropagation) e.stopPropagation();
             return false;
}

config.macros.fontSize.setFont = function ()
{
               saveOptionCookie("txtFontSize");
               setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
}

config.macros.fontSize.incFont=function()
{
               if (config.options.txtFontSize < fontSettings.maxSize)
                  config.options.txtFontSize = (config.options.txtFontSize*1)+fontSettings.stepSize;
               config.macros.fontSize.setFont();
}

config.macros.fontSize.decFont=function()
{

               if (config.options.txtFontSize > fontSettings.minSize)
                  config.options.txtFontSize = (config.options.txtFontSize*1) - fontSettings.stepSize;
               config.macros.fontSize.setFont();
}

config.macros.fontSize.resetFont=function()
{

               config.options.txtFontSize=fontSettings.defaultSize;
               config.macros.fontSize.setFont();
}

config.paramifiers.font =
{
               onstart: function(v)
                  {
                   config.options.txtFontSize = v;
                   config.macros.fontSize.setFont();
                  }
};
//}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;FontTextStyleWizard^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{borderless textcenter{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.somacon.com/p334.php]]&nbsp;&raquo;|
''This tiddler is best viewed <<toolbar fullscreen>>''
----

<html><div align:center;><A HREF="http://www.somacon.com/p357.php" target="wizard" title="CSS List Style Wizard">List Style</A>&nbsp;|&nbsp;<A HREF="http://www.somacon.com/p141.php" target="wizard" title="HTML and CSS Table Border Style Wizard">Table Border Style</A>&nbsp;|&nbsp;<A HREF="http://www.somacon.com/p334.php" target="wizard" title="CSS Font and Text Style Wizard">Font and Text Style</A></div></html>

<html><div align="center"><iframe  id="wizard" name="wizard" src ="http://www.somacon.com/p334.php" width="100%" align="center" height="1200" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
/%
!column1
''Other ~TiddlyWikis by TW Help''

[[Science|http://science.tiddlyspot.com]] A Personal Science Site
[[SideMinder|http://sideminder.tiddlyspot.com]] Track your time
[[SideSnips|http://sidesnips.tiddlyspot.com]] Snips From Discussion Group
[[SidebarPluginVault|http://sidebarpluginvault.tiddlyspot.com]] List of TW Plugins
[[SidebarRadio|http://sidebarradio.tiddlyspot.com]] Personal Embedded Radio/Video
[[TWT-Blackicity|http://twt-blackicity.tiddlyspot.com/index.html]] @@color:#c06; NEW! Menu System@@
[[TW Equation|http://twequation.tiddlyspot.com/]] Empty TW with Equations
[[TW Math|http://twmath.tiddlyspot.com/]] Equations for ~TiddlyWiki
[[TW Math|http://twligninger.tiddlyspot.com/]] @@color:#c06; (Danish)@@  Skrive Ligninger 
[[TW Notes|http://twnotes.tiddlyspot.com/]] Note taking made easy
[[TWT-Treeview|http://twt-treeview.tiddlyspot.com/index.html]] @@color:#c06; NEW! Menu System@@
[[TW TuDu|http://twtudu.tiddlyspot.com/]] Personal Organizer
[[TWT-Notes|http://twt-notes.tiddlyspot.com/]] Tabbed Notes
[[TWT-Notes|http://gdsskole.tiddlyspot.com/]] @@color:#c06; (Danish)@@ Sygemelding & weekendlister
[[TW Help|http://twhelp.tiddlyspot.com/]] Help for Beginners
!end
%/

/%
!column2
''Other Helpful ~TiddlyWiki Sites''

[[tiddlywiki.com|http://tiddlywiki.com]]
[[Discussion Group|http://groups.google.com/group/TiddlyWiki/]]
[[Developers Group|http://groups.google.com/group/TiddlyWikiDev?lnk=]] 
[[Sidebar Group|http://groups.google.com/group/sidebarnews?lnk=]]
[[TiddlySnip Group|http://groups.google.com/group/TiddlySnip?lnk=]]
[[tiddlywiki.org|http://www.tiddlywiki.org/]]
!end
%/
!!!<<gradient horiz #fc3 #fff>>&nbsp;ForEachGroupByTag^^<<tiddler CloseThisOpen with: ListTiddlersBy  '« back'>>|<<toolbar editTiddler>>» ^^>>
@@color:#00a;This code will sort all tiddlers by tag into groups.  It can be quite time consuming if there are a lot of tiddlers so it is not demonstrated here.@@

{{{


<<forEachTiddler
	sortBy 
		'getSortedTagsText(tiddler)+"###"+tiddler.title'
	
	script
		'
		function getSortedTagsText(tiddler) {
			var tags = tiddler.tags; 
			if (!tags || !tags.length) 
				return "{no tags}"; 
			tags.sort(); 
			var result = ""; 
			for (var i = 0; i < tags.length;i++) {
				result += tags[i]+ " ";
			} 
			return result;
		} 

		function getGroupTitle(tiddler, context) {
			if (!context.lastGroup || context.lastGroup != getSortedTagsText(tiddler)) {
				context.lastGroup = getSortedTagsText(tiddler); 
				return "{{{"+(context.lastGroup?context.lastGroup:"no tags")+"}}}";
			} else 
				return "";
		}
		'
	
	write
		'"|"+(index+1)+"|"+ getGroupTitle(tiddler, context)+"|[[" + tiddler.title+"]]|\n"'

>>
}}}


<script>
      place.style.color="#c06"; /* set text color */
</script>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[ForEachInAnotherTW]]^^<<tiddler CloseThisOpen with: ListTiddlersBy  '« back'>>|<<toolbar editTiddler>>» ^^>>

''Lists tiddlers from another ~TiddlyWiki.''
{{{
<<forEachTiddler
 in 
 'file:///F:/TiddlyWiki/TW%20Help/twhelp.html'
 write
 '"|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;@@ |"+tiddler.tags+"|\n"'
>>
}}}


''Lists plugins from another ~TiddlyWiki.''
{{{
<<forEachTiddler
 in 
'file:///F:/TiddlyWiki/TW%20Help/twhelp.html'
where 
 'tiddler.tags.contains("systemConfig")'
sortBy '(tiddler.title)' 
 ascending
write
 '"|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;@@ |"+tiddler.tags+"|\n"'

>>
}}}
{{textcenter{
This script calls the first line of each tiddler with the tag 'help'.
}}}
<<forEachTiddler
 where
 'tiddler.tags.contains("help")'
 script
 '
 function getFirstLine(s) {
 var m = s.match(/\s*(.*)/);
 return m != null && m.length >= 1 ? m[1] : "";
 }
 '
 write
 '"*[["+tiddler.title+"]] &raquo;&raquo; "+getFirstLine(tiddler.text)+"\n"' 

>>
//~~(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 {{{$)}}}.



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.
***/

<<tabs tabsClass [[TextMarkup]] "" [[TextMarkup]]  [[TextColor]] "" [[TextColor]]  [[TextAlignment]] "" [[TextAlignment]] [[FirstLetter]] "" [[FirstLetter]] [[Font Properties]] "" [[Font Properties - CSS]] [[FontPropertiesDemo]] "" [[FontPropertiesDemo]] [[Links ]] "" [[HowToUseLinks]] [[TextProperties ]] "" [[Text Properties - CSS]]  [[ Entities-Codes]] "" [[Non-Keyboard]] [[ToolTips]] "" [[PlainTextTooltip]]  [[WikiWords]] "" [[WikiWords]] >>

<<tabs tabsCookie [[Intro ]] "tooltip 1" [[IntroImages]]  [[ResizingImages ]] "" [[ResizingImages]]  [[TBA]] "" [[Tiddler three]] [[TBA ]] "" [[Tiddler four]] >>
!!!<<gradient horiz #fc3 #ffffff>>[[Intro|FormattingIntro]]^^<<tiddler CloseThisOpen with:FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>

''There are a number of formatting techniques available for tiddlers- click on a tab to view them.''

''Examples''
|color:#008; !Blockquote |color:#008; !Ordered List |color:#008; !Slider |
|bgcolor:white;width:20%;<<tiddler FormattingIntro##block>>|bgcolor:white;padding-right:5px;<<tiddler FormattingIntro##ordered>>|vertical-align:top;text-align:left;bgcolor:white; <<tiddler FormattingIntro##slider>> |

/%
!slider
+++[This an example of a slider try it]
Get the slider plugin at [[tiddlytools.com|http://www.tiddlytools.com#NestedSlidersPlugin]]

{{{
+++[This is a slider try it]
This is the code for it.
===
}}}
===
!end
%/

/%
!unordered
*Entry One
**Sub-entry A
***Sub-sub-entry i
***Sub-sub-entry ii
**Sub-entry B
*Entry Two
*Entry Three
!end
%/

/%
!ordered
#Entry One
##Sub-entry A
###Sub-sub-entry i
###Sub-sub-entry ii
##Sub-entry B
#Entry Two
#Entry Three
!end
%/

/%
!block
>This is a blockquote
>>For emphasizing text
>>Quite effective
>Use sparingly
!end
%/
<<tabs ""  

[[CommentingAndEscapes ]] "" [[CommentingAndEscapes]]
[[CustomCSSClass ]] "" [[CustomCSSClass]]
[[Encryption ]] "" [[Encryption]]
[[Entities-Codes ]] "" [[Non-Keyboard]]
[[FirstLetter ]] "" [[FirstLetter]]
[[Font Properties ]] "" [[Font Properties - CSS]]
[[FontPropertiesDemo ]] "" [[FontPropertiesDemo]]
[[FontTextStyleWizard ]] "" [[FontTextStyleWizard]]
[[FormattingDates ]] "" [[Date]]
[[Links ]] "" [[HowToUseLinks]]
[[PixelsToEmConverter ]] "" [[PixelsToEmConverter]]
[[ConvertEmPxPt ]] "" [[ConvertEmPxPt]]
[[TextAlignment ]] "" [[TextAlignment]]
[[TextArea ]] "" [[TextArea]]
[[TextColor ]] "" [[TextColor]]
[[TextMarkup ]] "" [[TextMarkup]]
[[TextProperties ]] "" [[Text Properties - CSS]]
[[ToolTips ]] "" [[ToolTips]]
[[VariableSpacing ]] "" [[VariableSpacing]]
[[ViewingCode ]] "" [[ViewingCode]]
[[WikiWords ]] "" [[WikiWords]]
[[WysiwygEditors ]] "" [[WysiwygEditors]] >>

<<tabs "" [[Intro ]] "" [[IntroFormattingPage]]
 [[AlternateViews ]] "AlternateViews" [[AlternateViews]] 
[[BackstageTweaks ]] " " [[BackstageTweaks]] 
[[ChangePageTitle ]] " " [[ChangePageTitle]]
[[DatedFooter ]] "" [[DatedFooter]]  
[[DualEditToolbars ]] "DualEditToolbars" [[DualEditToolbars]] 
[[FavIcon ]] " " [[FavIcon]] 
[[NestedStyleSheets ]] "NestedStyleSheets" [[NestedStyleSheets]] 
[[SideBarTabsScroll ]] "" [[SideBarTabsScroll]] 
[[StyleSheet ]] " " [[styleSheet]]  
[[StyleSheetColors ]] "" [[styleSheetColors]] 
[[StyleSheetLayout ]] "" [[styleSheetLayout]] 
[[ PageTemplate ]] "" [[pageTemplate]]  
[[ViewTemplate ]] "" [[viewTemplate]] 
[[EditTemplate ]] "" [[editTemplate]]  
[[StyleSheetPrint ]] "" [[styleSheetPrint]]
[[TagDisplayModifcation ]]  "" [[TagDisplayModifcation]]
[[Themes ]] "" [[TiddlyWikiThemes]]
[[ToggleTiddlersBarTabs ]] "" [[ToggleTiddlersBarTabs]] 
[[ToggleSideBars ]] "" [[ToggleSideBars]] 
[[TiddlyBar ]] " " [[TiddlyBar]]>>

<<tabs "" 
[[Intro ]]""[[FormattingIntro]] [[BlockQuotes ]]""[[BlockQuotes]] [[CheckBoxes ]] "" [[CheckBoxes]] [[DefaultTiddlers ]]"DefaultTiddlers"[[AboutDefaultTiddlers]] [[EmbedObject ]]""[[Embed]][[Editing ]] "" [[Editing]] [[FormattingText ]]""[[FormattingText]] [[Headings ]]""[[Headings]] [[HorizontalRule ]]""[[hr]] [[iframes ]]""[[iframes]] [[Images ]]"Images"[[FormattingImages]] [[Links ]]""[[HowToUseLinks]] [[ListsOrdered ]]""[[ListsOrdered]] [[ListsUnordered ]]""[[ListsUnordered]] [[ListsMixed ]] "mixed ordered and unordered" [[ListsMixed]] [[PartPlugin ]]"PartPlugin"[[PartPlugin]] [[ShadowTiddlers ]]"ShadowTiddlers"[[ShadowTiddlers]] [[SlidersOther ]]""[[SlidersOther]]  [[StylingSpecificTiddlers ]]""[[StylingSpecificTiddlers]] [[Tables ]]""[[Tables]] [[Tabs ]]""[[tabs]] [[Tags ]]""[[Tags]] [[TiddlerSections ]]"TiddlerSections"[[TiddlerSections]] [[TiddlerSlicing ]]"TiddlerSlicing"[[TiddlerSlicing]] [[TiddlerBookmark ]]"TiddlerBookmark"[[TiddlerBookmark]] [[TextArea ]] "" [[TextArea]][[TwoColumns ]]""[[TwoColumns]] [[TwoColumnsCSS ]] "TwoColumns using CSS" [[TwoColumnsCSS]] [[WikiWords ]]""[[WikiWords]]>>





!!!<<gradient horiz #fc3 #fff>>&nbsp;Forms^^<<tiddler CloseThisOpen with: WhatsInATiddler  '« back'>>|<<toolbar editTiddler>>» ^^>>
The two plugins you would need are DataTiddlersPlugin and
FormTiddlerPlugin:

http://tiddlywiki.abego-software.de/#DataTiddlerPlugin
http://tiddlywiki.abego-software.de/#FormTiddlerPlugin

Abego extension has some documentation on how to use these two. 
/***
|Name|FullScreenPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#FullScreenPlugin|
|Version|1.1|
|Requires|~TW2.x|
!Description:
Toggle between viewing tiddlers fullscreen and normally. Very handy for when you need more viewing space.

!Demo:
Click the ↕ button in the toolbar for this tiddler. Click it again to turn off fullscreen.

!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
Edit the ViewTemplate to add the fullscreen command to the toolbar.

!History:
*25-07-06: ver 1.1
*20-07-06: ver 1.0

!Code
***/
//{{{
var lewcidFullScreen = false;

config.commands.fullscreen =
{
            text:" «FullScreen» ",
            tooltip:"Fullscreen mode"
};

config.commands.fullscreen.handler = function (event,src,title)
{
            if (lewcidFullScreen == false)
               {
                lewcidFullScreen = true;
                setStylesheet('#sidebar, .header ,  #mainMenu{display:none;} #displayArea{margin:0em 0 0 0 !important;}',"lewcidFullScreenStyle");
               }
            else
               {
                lewcidFullScreen = false;
                setStylesheet(' ',"lewcidFullScreenStyle");
               }
}

config.macros.fullscreen={};
config.macros.fullscreen.handler =  function(place,macroName,params,wikifier,paramString,tiddler)
{
        var label = params[0]||" «Screen» ";
        var tooltip = params[1]||"Fullscreen mode";
        createTiddlyButton(place,label,tooltip,config.commands.fullscreen.handler);
}

var lewcid_fullscreen_closeTiddler = Story.prototype.closeTiddler;
Story.prototype.closeTiddler =function(title,animate,slowly)
{
           lewcid_fullscreen_closeTiddler.apply(this,arguments);
           if (story.isEmpty() && lewcidFullScreen == true)
              config.commands.fullscreen.handler();
}


Slider.prototype.lewcidStop = Slider.prototype.stop;
Slider.prototype.stop = function()
{
           this.lewcidStop();
           if (story.isEmpty() && lewcidFullScreen == true)
              config.commands.fullscreen.handler();
}
//}}}
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("g")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
<script>
<!-- hide from old browsers
  var curDateTime = new Date()
  var curHour = curDateTime.getHours() 
     + curDateTime.getTimezoneOffset()/60
  if (curHour > 24)  curHour -= 24
  if (curHour < 0) curHour += 24
  var curMin = curDateTime.getMinutes()
  var curSec = curDateTime.getSeconds()
  var curTime = 
    ((curHour < 10) ? "0" : "") + curHour + ":" 
    + ((curMin < 10) ? "0" : "") + curMin + ":" 
    + ((curSec < 10) ? "0" : "") + curSec 
  document.write(curTime + " GMT") 
//-->

</script>
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;Open in a new window[img[Open outside link in a new window|http://img229.imageshack.us/img229/1687/extlink7226466sx5.gif][http://theorem.ca/~mvcorks/cgi-bin/unicode.pl.cgi?start=25A0&end=25FF]]|
----
<html><div align="center"><iframe  src ="http://theorem.ca/~mvcorks/cgi-bin/unicode.pl.cgi?start=25A0&end=25FF" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
<script>
var tids=store.getTaggedTiddlers("CSSRef","modified").reverse();
var now=new Date();
var limit=10000*60*60*24*7; // one week, in 100/sec
var out="";
for (i=0; i<tids.length; i++) {
        if (now-tids[i].modified>limit) break;
        out+="[["+tids[i].title+"]]\n";
}
return out;
</script>
!!!<<gradient horiz #fc3 #fff>>[[GetPersonsAge]]^^<<tiddler CloseThisOpen with: ListTiddlersBy  '« back'>>|<<toolbar editTiddler>>» ^^>>

Prompts for day/month/year
{{{
<script>
        var now=new Date();
        var then=new Date(prompt('enter a date',"1/1/2009"));
        var age=now.getTime()-then.getTime();
        var hs=3600000; var ds=24*hs; var ms=30.4*ds; var ys=365*ds;
        var y=Math.floor(age/ys);
        var m=Math.floor((age-y*ys)/ms);
        var d=Math.floor((age-y*ys-m*ms)/ds)+1;
        return '%0 years, %1 months, %2 days'.format([y,m,d]); 

</script>
}}}
{{textleft{
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[Glossary]]>>
*@@color(#00F):''CCS''@@ - Cascading Style Sheets
**Cascading Style Sheets (CSS) is a simple mechanism for adding style (@@color(#C06):e.g. fonts, colors, spacing@@) to Web documents. Tutorials, books, mailing lists for users, etc. can be found on the “[[learning CSS|http://www.w3.org/Style/CSS/learning]]” page. For tutorial on style sheets see:  http://www.w3schools.com/css/default.asp
*@@color(#00F):''HTML''@@ stands for Hyper Text Markup Language
** An HTML file is a text file containing small markup tags
** The markup tags tell the Web browser how to display the page
** An HTML file must have an htm or html file extension
** An HTML file can be created using a simple text editor
** http://www.w3schools.com/html/html_intro.asp
*@@color(#00F):''~JavaScript''@@
**~JavaScript is a prototype-based scripting language with a syntax loosely based on C. Like C, the language has no input or output constructs of its own. Where C relies on standard I/O libraries, a ~JavaScript engine relies on a host environment into which it is embedded. There are many such host environment applications, of which web technologies are the best-known examples. These are examined first.
**One major use of web-based ~JavaScript is to write functions that are embedded in or included from HTML pages and interact with the Document Object Model (DOM) of the page to perform tasks not possible in HTML alone.
**+++[See some JavaScript]
<<tiddler script>>
===

**&nbsp; [[Learn JavaScript|http://www.w3schools.com/js/default.asp]]
<part permalink>

*@@color(#00F):''perma''@@@@color(#C06):''link''@@
**''S''uppose you wish to send a link to a friend to show them your latest tiddler named OverView. Just call up your ~TiddlyWiki online e.g. http://tiddlyspot.com/twhelp/index.html load the tiddler you wish your friend to see then click on @@color(#00F):''perma''@@@@color(#C06):''link''@@ on the __toolbar__.
**''N''otice in your ''browser's'' address box the address is now something like this: http://tiddlyspot.com/twhelp/index.html#OverView. Now copy and paste this link into your email program and send it. When your friend clicks on the link they will see exactly what you were seeing (all other things being equal of course.)
</part>
<part permaview>
*@@color(#00F):''perma''@@@@color(#C06):''view''@@
**''S''uppose you wish your friend to see two (or more) tiddlers e.g. OverView and [[JavaScript]].  Just call up your ~TiddlyWiki online e.g. http://tiddlyspot.com/twhelp/index.html load the tiddlers you wish your friend to see. After you have both tiddlers showing in your ~TiddlyWiki then click on @@color(#00F):''perma''@@@@color(#C06):''view''@@ on the __right sidebar__.
**''N''ow from your browser's address box copy and paste this link <http://tiddlyspot.com/twhelp/index.html#OverView%20JavaScript> into your email program and send it.
</part>
*@@color(#00F):''tiddler''@@
**A tiddler is the basic building block of a ~TiddlyWiki. The web page you are viewing is called a ~TiddlyWiki. The ~TiddlyWiki structure can be considered similiar to a card file used for recipes or an address book but does much, much more. In a ~TiddlyWiki the 'cards' are called tiddlers. You are presently reading the contents of a tiddler entitled Glossary.+++[Read more...]
The big difference compared to a card file is that putting code such as HTML, CSS or Javascript on these tiddlers they can run as programs as well as changing styling and recording your data. There is also a large number of 'plugins' that can be placed on tiddlers to extend its capabilities to cater for almost anything one could dream up.
===
+++[See more..]
<<tiddler WhatsInATiddler>>
===

*@@color(#00F):''shadow tiddler''@@
**A misnomer if there ever was one, I suppose they are so named because they are lurking in the shadows.  Shadow tiddlers are simply tiddlers built into the core of ~TiddlyWiki.  They are hard-coded into ~TiddlyWiki to provide the basic structure.
**You can modify them all you want but if something goes wrong simply deleting the tiddler will cause it to default to the core value. Shadow tiddlers cannot be deleted and probably should be understood to be ''default tiddlers''.  Unfortunately ~DefaultTiddlers is reserved for the tiddlers that are designated to load when ~TiddlyWiki first starts. 
**You can find shadow tiddlers listed in the tabs in the right margin under More>Shadowed or you can see them+++[here].
<<tiddler ListShadowed>>

===

*@@color(#00F):''Sparklines''@@
**''Sparklines are a format developed by Edward Tufte'' for small graphic charts which can be inserted within text on a page.
**[[See more here|Sparklines]]
*@@color(#00F):''~TiddlyWiki''@@
**''~TiddlyWiki'' is a wiki-modeled client-side application written by Jeremy Ruston that is designed to be used as a personal notebook.+++[Read more..]
<<tiddler [[./tw]]>>
===

*@@color(#00F):''~WikiWords''@@
**''~WikiWords'' are words that are more than one normal word capitalized and combined with no spaces in between @@color(#00F):~ThisIsAWikiWord@@.  ~WikiWords automatically become links to tiddlers if their title is a ~WikiWord.  Reluctant ~WikiWords such as MacBeth can be de-wikified by preceeding it with a tilde ( ~ ) i.e.{{{~MacBeth}}} results in @@color(#00F):~MacBeth@@. Tiddlers with normal words or spaces in the title can be made into links by enclosing them in square brackets {{{[[Tiddler Title]]}}}.
----
}}}
<<toolbar jump>>
merge(config.commands.jump,{
	text: "goto",
	tooltip: "Go to another open tiddler"});
/***
|Name|GotoPlugin|
|Source|http://www.TiddlyTools.com/#GotoPlugin|
|Documentation|http://www.TiddlyTools.com/#GotoPluginInfo|
|Version|1.6.1|
|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|view any tiddler by entering it's title - displays list of possible matches|
''View a tiddler by typing its title and pressing //enter//.''  As you type, a list of possible matches is displayed.  You can scroll-and-click (or use arrows+enter) to select/view a tiddler, or press //escape// to close the listbox to resume typing.  When the listbox is ''//not//'' being displayed, press //escape// to clear the current text input and start over.
!!!!!Documentation
>see [[GotoPluginInfo]]
!!!!!Revisions
<<<
2008.10.02 [1.6.1] for IE, wrap controls in a table.  Corrects placement of listbox so it is below input field.
|please see [[GotoPluginInfo]] for additional revision details|
2006.05.05 [0.0.0] started
<<<
!!!!!Code
***/
//{{{
version.extensions.GotoPlugin= {major: 1, minor: 6, revision: 1, date: new Date(2008,10,2)};

// automatically tweak shadow SideBarOptions to add <<gotoTiddler>> macro above <<search>>
config.shadowTiddlers.SideBarOptions=config.shadowTiddlers.SideBarOptions.replace(/<<search>>/,"{{button{goto}}}\n<<gotoTiddler>><<search>>");

config.macros.gotoTiddler= { 
	listMaxSize: 10,
	listHeading: 'Found %0 matching title%1...',
	searchItem: "Search for '%0'...",
	handler:
	function(place,macroName,params) {
		var quiet=(params[0] && params[0]=="quiet"); if (quiet) params.shift();
		var insert=(params[0] && params[0]=="insert"); if (insert) params.shift();
		var search=(params[0] && params[0]=="search"); if (search) params.shift();
		var instyle=params.shift(); if (!instyle) instyle="";
		var liststyle=params.shift(); if (!liststyle) liststyle="";
		var keyevent=window.event?"onkeydown":"onkeypress";

		var html=this.html;
		html=html.replace(/%keyevent%/g,keyevent);
		html=html.replace(/%search%/g,search);
		html=html.replace(/%insert%/g,insert);
		html=html.replace(/%quiet%/g,quiet);
		html=html.replace(/%instyle%/g,instyle);
		html=html.replace(/%liststyle%/g,liststyle);
		if (config.browser.isIE) html=this.IEtableFixup.format([html]);
		createTiddlyElement(place,"span").innerHTML=html;
	},

	html:
	'<form onsubmit="return false" style="display:inline;margin:0;padding:0">\
		<input name=gotoTiddler type=text autocomplete="off" accesskey="G" style="%instyle%"\
			title="enter a tiddler title"\
			onclick="this.form.list.style.display=\'none\';"\
			onfocus="this.select(); this.setAttribute(\'accesskey\',\'G\');"\
			%keyevent%="return config.macros.gotoTiddler.inputEscKeyHandler(event,this,this.form.list);"\
			onkeyup="return config.macros.gotoTiddler.inputKeyHandler(event,this,this.form.list,%quiet%,%insert%,%search%);">\
		<select name=list style="%liststyle%;display:none;position:absolute"\
			onchange="if (!this.selectedIndex) this.selectedIndex=1;"\
			onblur="this.style.display=\'none\';"\
			%keyevent%="return config.macros.gotoTiddler.selectKeyHandler(event,this,this.form.gotoTiddler,%insert%);"\
			onclick="return config.macros.gotoTiddler.processItem(this.value,this.form.gotoTiddler,this,%insert%);">\
		</select>\
	</form>',

	IEtableFixup:
	"<table style='width:100%;display:inline;padding:0;margin:0;border:0;'>\
		<tr style='padding:0;margin:0;border:0;'><td style='padding:0;margin:0;border:0;'>\
		%0</td></tr></table>",

	getItems:
	function(val) {
		if (!this.items.length || val.length<2) { // starting new search, refresh cached list of tiddlers/shadows/tags
			this.items=new Array();
			var tiddlers=store.getTiddlers("title","excludeLists");
			for(var t=0; t<tiddlers.length; t++) this.items.push(tiddlers[t].title);
			for (var t in config.shadowTiddlers) this.items.pushUnique(t);
			var tags=store.getTags();
			for(var t=0; t<tags.length; t++) this.items.pushUnique(tags[t][0]);
		}
		var found = [];
		var match=val.toLowerCase();
		for(var i=0; i<this.items.length; i++)
			if (this.items[i].toLowerCase().indexOf(match)!=-1) found.push(this.items[i]);
		return found;
	},
	items: [], // cached list of tiddlers/shadows/tags

	getItemSuffix:
	function(t) {
		if (store.tiddlerExists(t)) return "";  // tiddler
		if (store.isShadowTiddler(t)) return " (shadow)"; // shadow
		return " (tag)"; // tag 
	},

	keyProcessed:
	function(ev) { // utility function: exits handler and prevents browser from processing the keystroke
		ev.cancelBubble=true; // IE4+
		try{event.keyCode=0;}catch(e){}; // IE5
		if (window.event) ev.returnValue=false; // IE6
		if (ev.preventDefault) ev.preventDefault(); // moz/opera/konqueror
		if (ev.stopPropagation) ev.stopPropagation(); // all
		return false;
	},

	inputEscKeyHandler:
	function(event,here,list) {
		var key=event.keyCode;
		// escape... hide list (2nd esc=clears input)
		if (key==27) {
			if (list.style.display=="none")
				here.value=here.defaultValue;
			list.style.display="none";
			return this.keyProcessed(event);
		}
		return true; // key bubbles up
	},

	inputKeyHandler:
	function(event,here,list,quiet,insert,search) {
		var key=event.keyCode;
		// non-printing chars... bubble up, except: backspace=8, enter=13, space=32, down=40, delete=46
		if (key<48) switch(key) { case 8: case 13: case 32: case 40: case 46: break; default: return true; }
		// blank input... if down/enter... fall through (list all)... else, and hide list
		if (!here.value.length && !(key==40 || key==13))
			{ list.style.display="none"; return this.keyProcessed(event); }
		// find matching items...
		var found = this.getItems(here.value);
		// non-blank input... enter key... show/create tiddler
		if (key==13) return this.processItem(here.value,here,list,insert);
		// make sure list is shown (unless quiet option)
		list.style.display=!quiet?"block":"none";
		// down key... shows/moves to list...
		if (key==40)  { list.style.display="block"; list.focus(); }
		// if list is showing, fill it with found results...
		var indent='\xa0\xa0\xa0';
		if (list.style.display!="none") {
			while (list.length > 0) list.options[0]=null; // clear list
			found.sort(); // alpha by title
			var hdr=this.listHeading.format([found.length,found.length==1?"":"s"]);
			list.options[0]=new Option(hdr,"",false,false);
			for (var t=0; t<found.length; t++) list.options[list.length]=
				new Option(indent+found[t]+this.getItemSuffix(found[t]),found[t],false,false);
			if (search)
				list.options[list.length]=new Option(this.searchItem.format([here.value]),"*",false,false);
			list.size=(list.length<this.listMaxSize?list.length:this.listMaxSize); // resize list...
			list.selectedIndex=(key==40 || key==13)?1:0;
		}
		return true; // key bubbles up
	},

	selectKeyHandler:
	function(event,list,editfield,insert) {
		if (event.keyCode==27) // escape... hide list, move to edit field
			{ editfield.focus(); list.style.display="none"; return this.keyProcessed(event); }
		if (event.keyCode==13 && list.value.length) // enter... view selected item
			{ this.processItem(list.value,editfield,list,insert); return this.keyProcessed(event); }
		return true; // key bubbles up
	},

	processItem:
	function(title,here,list,insert) {
		if (!title.length) return;
		list.style.display='none';
		if (title=="*")	{ story.search(here.value); return false; } // do full-text search
		here.value=title;
		if (insert) {
			var tidElem=story.findContainingTiddler(here); if (!tidElem) { here.focus(); return false; }
			var e=story.getTiddlerField(tidElem.getAttribute("tiddler"),"text");
			if (!e||e.getAttribute("edit")!="text") return false;
			var txt=prompt(this.askForText,title); if (!txt||!txt.length) { here.focus(); return false; }
			e.focus(); // put focus on target field before setting selection
			replaceSelection(e,"[["+txt+"|"+title+"]]"); // insert selected tiddler as a PrettyLink
		}
		else
			story.displayTiddler(null,title); // show selected tiddler
		return false;
	},
	askForText: "Enter the text to display for this link"

}
//}}}
/***
|Name|GotoPluginInfo|
|Source|http://www.TiddlyTools.com/#GotoPlugin|
|Documentation|http://www.TiddlyTools.com/#GotoPluginInfo|
|Version|1.6.1|
|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 GotoPlugin|
''View a tiddler by typing its title and pressing //enter//.''  As you type, a list of possible matches is displayed.  You can scroll-and-click (or use arrows+enter) to select/view a tiddler, or press //escape// to close the listbox to resume typing.  When the listbox is ''//not//'' being displayed, press //escape// to clear the current text input and start over.
!!!!!Usage/Examples
<<<
| //IMPORTANT NOTE:// ''As of version 1.4.0 (2007.04.25),<br>to avoid conflict with javascript reserved keywords<br>the {{{<<goto>>}}} macro has been renamed to {{{<<gotoTiddler>>}}}'' |
syntax: {{{<<gotoTiddler quiet insert search inputstyle liststyle>>}}}
All parameters are optional.
* ''quiet'' prevents //automatic// display of the list as each character is typed.  To view the list when ''quiet'', use //down// or //enter//.
* ''insert'' causes the selected tiddler title to be inserted into the tiddler source currently being edited (use with EditTemplate)
* ''search'' adds an extra 'command item' to the list that can be used to invoke a full-text search using the entered value.  This can be especially useful when no matching tiddler titles have been found.
* ''inputstyle'' and ''liststyle'' are CSS declarations that modify the default input and listbox styles.  Note: styles containing spaces must be surrounded by ({{{"..."}}} or {{{'...'}}}) or ({{{[[...]]}}}).
{{{<<gotoTiddler>>}}}

<<gotoTiddler>>
{{{<<gotoTiddler search>>}}}
<<gotoTiddler search>>
{{{<<gotoTiddler quiet>>}}}
<<gotoTiddler quiet>>
{{{<<goto width:20em width:20em>>}}}
<<gotoTiddler width:20em width:20em>>

You can also invoke the macro with the "insert" keyword.  When used in the [[EditTemplate]], like this:
{{{
<span macro="gotoTiddler insert"></span>
}}}
it allows you to type/select a tiddler title, and instantly insert a link to that title (e.g. {{{[[TiddlerName]]}}}) into the tiddler source being edited.
<<<
!!!!!Configuration
<<<
You can create a tiddler tagged with <<tag systemConfig>> to control the maximum height of the listbox of tiddlers/shadows/tags. //The default values are shown below://
//{{{
config.macros.gotoTiddler.listMaxSize=10;
//}}}

<<<
!!!!!Revisions
<<<
2008.10.02 [1.6.1] for IE, wrap controls in a table.  Corrects placement of listbox so it is below input field.
2008.10.02 [1.6.0] added 'search' param for optional "Search for:" item that invokes full text search (especially useful when no title matches are found)
2008.02.17 [1.5.0] ENTER key always displays tiddler based on current input regardless of whether input matches any existing tiddler
2007.10.31 [1.4.3] removed extra trailing comma on last property of config.macros.gotoTiddler object.  This fixes an error under InternetExplorer that was introduced 6 days ago... sure, I should have found it sooner, but... WHY DON'T PEOPLE TELL ME WHEN THINGS ARE BROKEN!!!!
2007.10.25 [1.4.2] added onclick handler for input field, so that clicking in field hides the listbox.
2007.10.25 [1.4.1] re-wrote getItems() to cache list of tiddlers/shadows/tags and use case-folded simple text match instead of regular expression to find matching tiddlers.  This *vastly* reduces processing overhead between keystrokes, especially for documents with many (>1000) tiddlers.  Also, removed local definition of replaceSelection(), now supported directly by the TW2.2+ core, as well as via backward-compatible plugin
2007.04.25 [1.4.0] renamed macro from "goto" to "gotoTiddler".  This was necessary to avoid a fatal syntax error in Opera (and other browsers) that require strict adherence to ECMAScript 1.5 standards which defines the identifier "goto" as "reserved for FUTURE USE"... *sigh*
2007.04.21 [1.3.2] in html definition, removed DIV around droplist (see 1.2.6 below).  It created more layout problems then it solved. :-(
2007.04.01 [1.3.1] in processItem(), ensure that correct textarea field is found by checking for edit=="text" attribute
2007.03.30 [1.3.0] tweak SideBarOptions shadow to automatically add {{{<<goto>>}}} when using default sidebar content
2007.03.30 [1.2.6] in html definition, added DIV around droplist to fix IE problem where list appears next to input field instead of below it.  
2007.03.28 [1.2.5] in processItem(), set focus to text area before setting selection (needed for IE to get correct selection 'range')
2007.03.28 [1.2.4] added prompt for 'pretty text' when inserting a link into tiddler content
2007.03.28 [1.2.3] added local copy of core replaceSelection() and modified for different replace logic
2007.03.27 [1.2.2] in processItem(), use story.getTiddlerField() to retrieve textarea control
2007.03.26 [1.2.1] in html, use either 'onkeydown' (IE) or 'onkeypress' (Moz) event to process <esc> key sooner, to prevent <esc> from 'bubbling up' to the tiddler (which will close the current editor).
2007.03.26 [1.2.0] added support for optional "insert" keyword param. When used in [[EditTemplate]], (e.g. {{{<span macro="goto insert"></span>}}}) it triggers alternative processing: instead of displaying the selected tiddler, that tiddler's title is inserted into a tiddler's textarea edit field surrounded by {{{[[...]]}}}.
2006.05.10 [1.1.2] when filling listbox, set selection to 'heading' item... auto-select first tiddler title when down/enter moves focus into listbox
2006.05.08 [1.1.1] added accesskey ("G") to input field html (also set when field gets focus).  Also, inputKeyHandler() skips non-printing/non-editing keys. 
2006.05.08 [1.1.0] added heading to listbox for better feedback (also avoids problems with 1-line droplist)
2006.05.07 [1.0.0] list matches against tiddlers/shadows/tags.  input field auto-completion... 1st enter=complete matching input (or show list)... 2nd enter=view tiddler.  optional "quiet" param controls when listbox appears.
2006.05.06 [0.5.0] added handling for enter (13), escape(27), and down(40) keys.   Change 'ondblclick' to 'onclick' for list handler to view tiddlers (suggested by Florian Cauvin - prevents unintended trigger of tiddler editor).  shadow titles inserted into list instead of appended to the end.
2006.05.05 [0.0.0] started

<<<
!!!<<gradient horiz #Fc3  #fff>>[[GradientMacro]]^^<<tiddler CloseThisOpen with: "Macros Built-in"  '« back'>>|<<toolbar editTiddler>>» ^^>>
<<gradient horiz #bbbbbb #ffffff>>The new ~GradientMacro allows simple horizontal and vertical coloured gradients. They are constructed from coloured HTML elements, and don't require any images to work.>>

The ~GradientMacro is an ~ExtendedMacro that processes the text after it up until the next '>>' sequence. It looks like this:
{{{
<<gradient vert #ffffff #ff8888>>gradient fill>>
}}}
The first parameter can be ''vert'' or ''horiz'' to indicate the direction of the gradient. The following parameters are two or more colours (CSS RGB(r,g,b) format is also acceptable). The GradientMacro constructs a smooth linear gradient between each of the colours in turn.

|padding:0;<<gradient vert #ffffff #ff8888>>No images were harmed in the making of this gradient fill>>|padding:0;<<gradient vert #ffffff #88ff88>>No images were harmed in the making of this gradient fill>>|padding:0;<<gradient vert #ffffff #8888ff>>No images were harmed in the making of this gradient fill>>|

Inline CSS definitions can be added to gradient filles like this:

<<gradient vert #000000 #aa2222>>color:#ffffff;font-size:12pt;Darkness>>

{{{
<<gradient vert #000000 #aa2222>>color:#ffffff;font-size:12pt;Darkness>>
}}}
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;GreekHtmlEntities^^<<tiddler CloseThisOpen with: Entities-Codes  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{twocolumns{
|>|>| !Greek Letters [[^|GreekHtmlEntities]] |
| !Symbol | !upper-case | !lower-case |
| {{{&Alpha;}}} | &Alpha; | &alpha; |
| {{{&Beta;}}} | &Beta; | &beta; |
| {{{&Gamma;}}} | &Gamma; | &gamma; |
| {{{&Delta;}}} | &Delta; | &delta; |
| {{{&Epsilon;}}} | &Epsilon; | &epsilon; |
| {{{&Zeta;}}} | &Zeta; | &zeta; |
| {{{&Eta;}}} | &Eta; | &eta; |
| {{{&Theta;}}} | &Theta; | &theta; |
| {{{&Thetasym;}}} | &thetasym; | |
| {{{&Iota;}}} | &Iota; | &iota; |
| {{{&Kappa;}}} | &Kappa; | &kappa; |
| {{{&Lambda;}}} | &Lambda; | &lambda; |
| {{{&Mu;}}} | &Mu; | &mu; |
| {{{&Nu;}}} | &Nu; | &nu; |
| {{{&Xi;}}} | &Xi; | &xi; |
| {{{&Omicron;}}} | &Omicron; | &omicron; |
| {{{&Pi;}}} | &Pi; | &pi; |
| {{{&Pi;}}} | &pi; | |
| {{{&Rho;}}} | &Rho; | &rho; |
| {{{&Sigma;}}} | &Sigma; | &sigma; |
| {{{&Tau;}}} | &Tau; | &tau; |
| {{{&Upsilon;}}} | &Upsilon; | &upsilon; |
| {{{&Upsilon;}}} | &upsih; | |
| {{{&Phi;}}} | &Phi; | &phi; |
| {{{&Chi;}}} | &Chi; | &chi; |
| {{{&Psi;}}} | &Psi; | &psi; |
| {{{&Omega;}}} | &Omega; | &omega; |
}}}
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("h")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
!!!<<gradient horiz #fc3 #eeefff>>&nbsp;[[HTML]]^^<<tiddler CloseThisOpen with: WhatsInATiddler  '« back'>>|<<toolbar editTiddler>>» ^^>>

''You can put HTML in a tiddler between these tags {{{<html>... </html>}}}''
*+++[About how TiddlyWiki normally treats HTML processing]

<<<
The TW core support for HTML simply passes content inside the
<html>...</html> block directly to the browser for rendering.  However,
this does not allow you to use wiki-formatting syntax *within* the HTML
block.

The HTMLFormattingPlugin extends the core's HTML formatting handler so
that after the browser renders the HTML, it recursively locates all the
resulting TEXT nodes in the block and then passes each of them through
wikify() to parse and render any embedded wiki-syntax they contain.

For example, suppose you want to create a complex HTML table that
contains links to tiddlers in the table cells...

{{{<html><table><tr><td>TiddlerTitle</td></tr></table></html>}}}

Without using HTMLFormattingPlugin, the core just treats ~WikiWords as
regular text and "~TiddlerTitle" is not linked to the desired tiddler.
With the plugin installed, you get the results you want (i.e.,
~TiddlerTitle is a clickable link that opens a tiddler).

Eric Shulman
~TiddlyTools / ELS Design Studios

<<<
===

*+++[About pasting HTML into  TiddlyWiki and line breaks]
<<<
One major difference between Wiki formatting and HTML formatting is how "line breaks" are processed. Wiki formatting treats all line breaks as literal content to be displayed //as-is//. However, because HTML normally ignores line breaks and actually processes them as simple "word separators" instead, many people who write HTML include extra line breaks in their documents, just to make the "source code" easier to read.

Even though you can use HTML tags within your tiddler content, the default treatment for line breaks still follows the Wiki-style rule (i.e., all new lines are displayed as-is). When adding HTML content to a tiddler (especially if you cut-and-paste it from another web page), you should take care to avoid adding extra line breaks to the text.

If removing all the extra line breaks from your HTML content would be a big hassle, you can quickly //override the default Wiki-style line break rule// so that the line breaks use the standard HTML rules instead.  Placing a ''<{{{hide linebreaks}}}>'' tag within the tiddler's HTML content changes all line breaks to spaces before rendering the content, so that the literal line breaks will be processed as simple word-breaks instead.

Note: this does //not// alter the actual tiddler content that is stored in the document, just the manner in which it is displayed. Any line breaks contained in the tiddler will still be there when you edit its content. Also, to include a literal line break when the ''<{{{hide linebreaks}}}>'' tag is present, you will need to use a ''<{{{br}}}>'' or ''<{{{p}}}>'' HTML tag instead of simply typing a line break.

<<<
Eric Shulman
~TiddlyTools / ELS Design Studios
===

*+++[HTML Quick Reference List]
<<<
<<tiddler HTMLQuickList>>
<<<
===
----
*[[Hints about HTML and JavaScript|http://www.cryer.co.uk/resources/htmljavascript.htm]]
*For HTML Tutorial go here: http://www.w3schools.com/html/default.asp
*Get non-keyboard ~HTML-MATH-Greek-Latin symbols [[here|Entities-Codes]].

@@color(#C06):''TW Help is enhanced by the HTMLFormattingPlugin which allows mixing of HTML and ~TiddlyWiki formatting.''@@<<tiddler HTMLFormattingPlugin/HTMLFormatting>>

!!!<<gradient horiz #abf #fff>>&nbsp;Example>>

|<html><a href="http://img480.imageshack.us/img480/6435/CastleOnDanube.jpg" target="_blank"><img src="http://img480.imageshack.us/img480/7203/ParliamentHouseBudapest.jpg" border="0" alt="Free Image Hosting at www.ImageShack.us" /></a></html>|vertical-align:middle;padding:1em;This HTML example uses a picture from a remote server as a link to another picture that is on a remote server.<html><br> <br></html> ''To use HTML in a tiddler put it between tags'' {{{<html>.....   </html>}}}|

!!!<<gradient horiz #abf #fff>>&nbsp;Code>>

''Note'' that the table is constructed using the ~TiddlyWiki method   that uses the 
vertical bar ( | ) i.e. @@{{{|cell 1|cell 2|}}}@@ and is mixed with the HTML code. There is CSS embedded in the table as well @@{{{vertical-align:top;padding:1em;}}}@@

@@background-color: #ffc;{{{|<html><a href="http://img480.imageshack.us/img480/6435/CastleOnDanube.jpg" target="_blank"><img src="http://img480.imageshack.us/img480/7203/ParliamentHouseBudapest.jpg" border="0" alt="Free Image Hosting at www.ImageShack.us" /></a></html>|vertical-align:top;padding:1em;This HTML example uses a picture from a remote server as a link to another picture that is on a remote server. To use HTML in a tiddler put it between tags<html> </html>|}}}@@
!!!<<gradient horiz #abf #fff>>&nbsp;Another Table in HTML>>

{{{
''Table heading links to w3schools references on this subject.''
<HTML><table><tr align="center" bgcolor="#99AAEE"><td colspan="3"><b>[[Margin Properties|http://www.w3schools.com/css/css_margin.asp]]</b></td></tr><tr align="center"><td>''Property''</td><td>''Description'' </td><td>''Value'' </td></tr><tr valign="top"><td rowspan="4"> margin </td><td rowspan="4"> A shorthand property for setting the margin properties in one declaration<br><br>margin: 1em 1em 2em 2em; </td><td> margin-top </td></tr><tr><td> margin-right </td></tr><tr><td>margin-bottom</td></tr><tr><td> margin-left </td></tr><tr align="left"><td>margin-top</td><td>Sets the top margin of an element</td><td> auto
length
% </td></tr><tr align="left"><td>margin-right</td><td>Sets the right margin of an element</td><td> auto
length

%</td></tr><tr align="left"><td>margin-bottom</td><td>Sets the bottom margin of an element</td><td> auto
length
%</td></tr><tr align="left"><td>margin-left</td><td> Sets the left margin of an element</td><td> auto
length
% </td></tr></table></HTML>

}}}
+++[Click here to see the table this code represents]
<<tiddler [[Margin Properties - CSS]]>>
===

!!!!!<<gradient horiz #abf #fff>>&nbsp;End of HTML>>


[[top|HTML]]
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.w3schools.com/htmldom/dom_reference.asp]]&nbsp;&raquo;|

<html><div align="center"><iframe src ="http://www.w3schools.com/htmldom/dom_reference.asp" width="100%" align="center" height="600"></iframe></div></html>}}}
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.w3schools.com/HTML/html_colornames.asp]]&nbsp;&raquo;|
----
<html><div align="center"><iframe  src ="http://www.w3schools.com/HTML/html_colornames.asp" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
/***
|Name|HTMLFormattingPlugin|
|Source|http://www.TiddlyTools.com/#HTMLFormattingPlugin|
|Documentation|http://www.TiddlyTools.com/#HTMLFormattingPluginInfo|
|Version|2.3.0|
|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|'HTML' formatter|
|Description|embed wiki syntax formatting inside of HTML content|
The ~HTMLFormatting plugin allows you to ''mix wiki-style formatting syntax within HTML formatted content'' by extending the action of the standard TiddlyWiki formatting handler.
!!!!!Documentation
>see [[HTMLFormattingPluginInfo]]
!!!!!Revisions
<<<
2008.10.02 [2.3.0] added use of {{{<nowiki>}}} marker to bypass all wikification inside a specific HTML block
2008.09.19 [2.2.0] in wikifyTextNodes(), don't wikify the contents of STYLE nodes (thanks to MorrisGray for bug report)
| see [[HTMLFormattingPluginInfo]] for additional revision details |
2005.06.26 [1.0.0] Initial Release (as code adaptation - pre-dates TiddlyWiki plugin architecture!!)
<<<
!!!!!Code
***/
//{{{
version.extensions.HTMLFormattingPlugin= {major: 2, minor: 3, revision: 0, date: new Date(2008,10,2)};

// find the formatter for HTML and replace the handler
initHTMLFormatter();
function initHTMLFormatter()
{
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="html"; i++);
	if (i<config.formatters.length)	config.formatters[i].handler=function(w) {
		if (!this.lookaheadRegExp)  // fixup for TW2.0.x
			this.lookaheadRegExp = new RegExp(this.lookahead,"mg");
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var html=lookaheadMatch[1];
			// if <nowiki> is present, just let browser handle it!
			if (html.indexOf('<nowiki>')!=-1)
				createTiddlyElement(w.output,"span").innerHTML=html;
			else {
				// if <hide linebreaks> is present, suppress wiki-style literal handling of newlines
				if (html.indexOf('<hide linebreaks>')!=-1) html=html.replace(/\n/g,' ');
				// remove all \r's added by IE textarea and mask newlines and macro brackets
				html=html.replace(/\r/g,'').replace(/\n/g,'\\n').replace(/<</g,'%%(').replace(/>>/g,')%%');
				// create span, let browser parse HTML
				var e=createTiddlyElement(w.output,"span"); e.innerHTML=html;
				// then re-render text nodes as wiki-formatted content
				wikifyTextNodes(e);
			}
			w.nextMatch = this.lookaheadRegExp.lastIndex; // continue parsing
		}
	}
}

// wikify #text nodes that remain after HTML content is processed (pre-order recursion)
function wikifyTextNodes(theNode)
{
	function unmask(s) { return s.replace(/\%%\(/g,'<<').replace(/\)\%%/g,'>>').replace(/\\n/g,'\n'); }
	switch (theNode.nodeName.toLowerCase()) {
		case 'style': case 'option': case 'select':
			theNode.innerHTML=unmask(theNode.innerHTML);
			break;
		case 'textarea':
			theNode.value=unmask(theNode.value);
			break;
		case '#text':
			var txt=unmask(theNode.nodeValue);
			var newNode=createTiddlyElement(null,"span");
			theNode.parentNode.replaceChild(newNode,theNode);
			wikify(txt,newNode);
			break;
		default:
			for (var i=0;i<theNode.childNodes.length;i++)
				wikifyTextNodes(theNode.childNodes.item(i)); // recursion
			break;
	}
}
//}}}
[img[http://img178.imageshack.us/img178/7698/uphg6.gif]] ^^<<tiddler CloseThisOpen with: CodeReferenceAll  'back'>>|<<toolbar editTiddler>>� ^^
{{headline{
HTML Quick List from ~W3Schools.
}}}
{{{
<html>
<head>
<link rel="stylesheet" type="text/css" href="theme.css" />

<script src="iframecss.js"></script>
<title>Document name goes here</title>
<style>... </style>
</head>

<BODY
  BACKGROUND="bgURL"  BGCOLOR="color"  TEXT="color"  LINK="color"  ALINK="color"

  VLINK="color"  ONLOAD="loadJScode"  ONUNLOAD="unloadJScode"  ONBLUR="blurJScode" 
  INFOCUS="focusJScode"  CLASS="styleClass"  ID="namedPlaceOrStyle" 
  LANG="ISO"  STYLE="style">

Visible text goes here

</body>
</html>

Heading Elements
<h1>Largest Heading</h1>
<h2> . . . </h2>

<h3> . . . </h3>
<h4> . . . </h4>
<h5> . . . </h5>
<h6>Smallest Heading</h6>

Text Elements
<p>This is a paragraph</p>
<br> (line break)
<hr> (horizontal rule)
<pre>This text is preformatted</pre>

Logical Styles
<em>This text is emphasized</em>
<strong>This text is strong</strong>
<code>This is some computer code</code>

Physical Styles
<b>This text is bold</b>

<i>This text is italic</i>

Links, Anchors, and Image Elements
<a href="http://www.example.com/">This is a Link</a>
<a href="http://www.example.com/"><img src="URL" alt="Alternate Text"></a>

<a href="mailto:webmaster@example.com">Send e-mail</a>

Link Target-Calling specific frames 
The four reserved names are �_blank�, �_parent�, �_self� and �_top�.
<a href="http://www.example.com/" target=�_blank�>This opens in a new window/tab</a>
<a href="http://www.example.com/" target=�_top�>This opens new window (breaks out of frame)</a>

<a href="http://www.example.com/" target=�_self�>This opens in the same frame as the link</a>

A named anchor:
<a name="tips">Useful Tips Section</a>
<a href="#tips">Jump to the Useful Tips Section</a>

Unordered list
<ul>
<li>First item</li>
<li>Next item</li>
</ul>

Ordered list
<ol>

<li>First item</li>
<li>Next item</li>
</ol>

Definition list
<dl>
<dt>First term</dt>

<dd>Definition</dd>
<dt>Next term</dt>
<dd>Definition</dd>
</dl>

Tables
<table border="1">

<tr>
<th>someheader</th>
<th>someheader</th>
</tr>
<tr>
<td>sometext</td>

<td>sometext</td>
</tr>
</table>

Frames
<frameset cols="25%,75%">
  <frame src="page1.htm">

  <frame src="page2.htm">
</frameset>

Forms
---------
<form action="http://www.example.com/test.asp" method="post/get">
<input type="text" name="lastname" value="Nixon" size="30" maxlength="50">

<input type="password">
<input type="checkbox" checked="checked">
<input type="radio" checked="checked">
<input type="submit">

<input type="reset">
<input type="hidden">

<select>
<option>Apples
<option selected>Bananas
<option>Cherries
</select>

<textarea name="Comment" rows="60" cols="20"></textarea>
</form>
-----------
Entities
&lt; is the same as <
&gt; is the same as >

&#169; is the same as �
Other Elements

<!-- This is a comment -->

<blockquote>
Text quoted from some source.
</blockquote>

<address>
Address 1<br>
Address 2<br>

City<br>
</address>

}}}
Source : http://www.w3schools.com/html/html_quick.asp
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|file:///D:/Wiki/animatedcollapse.htm]]&nbsp;&raquo;|

<html><div align="center"><iframe src ="file:///D:/Wiki/animatedcollapse.htm" width="100%" align="center" height="600"></iframe></div></html>}}}
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|file:///D:/Wiki/SliderExample.htm]]&nbsp;&raquo;|
<html><div align="center"><iframe src ="file:///D:/Wiki/SliderExample.htm" width="100%" align="center" height="600"></iframe></div></html>}}}
/***
|Name|HaloscanMacro|
|Created by|JimSpeth|
|Location|http://end.com/~speth/HaloscanMacro.html|
|Version|1.1.0|
|Requires|~TW2.x|

!Description
Comment and trackback support for TiddlyWiki (via Haloscan).

!History
* 16-Feb-06, version 1.1.0, drastic changes, now uses settings from haloscan account config
* 31-Jan-06, version 1.0.1, fixed display of counts for default tiddlers
* 30-Jan-06, version 1.0, initial release

!Examples
|!Source|!Output|h
|{{{<<haloscan comments>>}}}|<<haloscan comments>>|
|{{{<<haloscan trackbacks>>}}}|<<haloscan trackbacks>>|

!Installation
Register for a [[Haloscan|http://www.haloscan.com]] account.  It's free and painless.
Install the HaloscanMacro in a new tiddler with a tag of systemConfig (save and reload to activate).
In the macro configuration code (below), change //YourName// to your Haloscan account name.
Use the macro somewhere in a tiddler (see ViewTemplate for an example).

!Settings
You can adjust various options for your account in the member configuration area of Haloscan's web site.  The macro will use these settings when formatting the links.

!Code
***/
//{{{

/* change "YourName" to your Haloscan account name only here!!! Leave "YourName" as "YourName" in all other places further down */
config.macros.haloscan = {account: "twhelp", baseURL: "http://www.haloscan.com/load/"};

var haloscanLoaded = 0;
config.macros.haloscan.load = function ()
{
    if (haloscanLoaded == 1)
        return;
    
    account = config.macros.haloscan.account;
    if (!account || (account == "YourName"))
        account = store.getTiddlerText("SiteTitle");
    
    var el = document.createElement('script');
    el.language = 'JavaScript'; 
    el.type = 'text/javascript'; 
    el.src = config.macros.haloscan.baseURL + account;
    document.documentElement.childNodes[0].appendChild(el);
    
    haloscanLoaded = 1;
}
config.macros.haloscan.load();

/* this totally clobbers document.write, i hope that's ok */
var safeWrite = function(s)
{
    document.written = s;
    return s;
};
document.write = safeWrite;

config.macros.haloscan.refreshDefaultTiddlers = function ()
{
    var start = store.getTiddlerText("DefaultTiddlers");
    if (start)
    {
        var titles = start.readBracketedList();
        for (var t=titles.length-1; t>=0; t--)
            story.refreshTiddler(titles[t], DEFAULT_VIEW_TEMPLATE, 1);
    }
}

var haloscanRefreshed = 0;
config.macros.haloscan.handler = function (place, macroName, params, wikifier, paramString, tiddler)
{
    if (typeof HaloScan == 'undefined')
    {
        if (haloscanRefreshed == 0)
        {
            setTimeout("config.macros.haloscan.refreshDefaultTiddlers()", 1);
            haloscanRefreshed = 1;
        }
        return;
    }
    
    var id = story.findContainingTiddler(place).id.substr(7);
    var hs_search = new RegExp('\\W','gi');
    id = id.replace(hs_search,"_");
    
    account = config.macros.haloscan.account;
    if (!account || (account == "YourName"))
        account = store.getTiddlerText("SiteTitle");
    
    var haloscanError = function (msg)
    {
        createTiddlyError(place, config.messages.macroError.format(["HaloscanMacro"]), config.messages.macroErrorDetails.format(["HaloscanMacro", msg]));
    }
    
    if (params.length == 1)
    {
        if (params[0] == "comments")
        {
            postCount(id);
            commentsLabel = document.written;
            commentsPrompt = "Comments on this tiddler";
            var commentsHandler = function(e) { HaloScan(id); return false; };
            var commentsButton = createTiddlyButton(place, commentsLabel, commentsPrompt, commentsHandler);
        }
        else if (params[0] == "trackbacks")
        {
            postCountTB(id);
            trackbacksLabel = document.written;
            trackbacksPrompt = "Trackbacks for this tiddler";
            var trackbacksHandler = function(e) { HaloScanTB(id); return false; };
            var trackbackButton = createTiddlyButton(place, trackbacksLabel, trackbacksPrompt, trackbacksHandler);
        }
        else
            haloscanError("unknown parameter: " + params[0]);
    }
    else if (params.length == 0)
        haloscanError("missing parameter");
    else
        haloscanError("bad parameter count");
}

//}}}

/***
!!!HaloscanWidgetStyling /%==================================================%/
***/

#haloscan-recent { padding: 2px; margin: 2px; }
#haloscan-recent a { text-decoration: none; color: #333333;}
#haloscan-recent ul {  list-style: none; width: 100%; overflow: hidden; margin: 0; padding: 0;}
#haloscan-recent li { text-align: justify; list-style: none; margin: 1px;}
#haloscan-recent li span.hsrname { color: #06c; font-weight: bold; }
#haloscan-recent li span.hsrmsg { font-weight: normal; }
!!!<<gradient horiz #fc3 #ffffff>>[[Headings]]^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>
''Start a heading with one or more exclamation marks e.g.'' {{{!!!A Heading}}}
@@Code@@
{{{
!Heading 1
Something Important
!!Heading 2
More details
!!!Heading 3
Even more details
!!!!Heading 4
Oh
!!!!!Heading 5
Pedantic
}}}
@@Examples@@
!<<gradient horiz #aaa #fff>>&nbsp;Heading 1>>

Something Important
!!<<gradient horiz #aaa #fff>>&nbsp;Heading 2>>
More details
!!!<<gradient horiz #aaa #fff>>&nbsp;Heading 3>>
Even more details
!!!!<<gradient horiz #aaa #fff>>&nbsp;Heading 4>>
Oh
!!!!!<<gradient horiz #aaa #fff>>&nbsp;Heading 5>>
Pedantic



This is an advanced option that lets you choose whether editing features are shown when a TiddlyWiki file is viewed over {{{http:}}} (as opposed to {{{file:}}}).

To publish a TiddlyWiki with the editting features hidden you'll need to create a tiddler tagged with 'systemConfig' and include in it the line:
!!!Code
{{{
config.options.chkHttpReadOnly = true;
}}}
''If it is not already there this must be added to AdvancedOptions''
<<option chkHttpReadOnly>> Hide Editing Features
!!!Code
{{{
<<option chkHttpReadOnly>> Hide Editing Features
}}}

End users can then override the setting using the AdvancedOptions panel.

Maybe of interest: UnHideEditingOverHTTP

Source: [[TiddlyWiki - a reusable non-linear personal web notebook|http://tiddlywiki.com/]]
config.options.chkHideTabsBarWhenSingleTab  = config.options.chkHideTabsBarWhenSingleTab  ? config.options.chkHideTabsBarWhenSingleTab  : true;
/%
|Name|HideTiddlerBackground|
|Source|http://www.TiddlyTools.com/#HideTiddlerBackground|
|Version|0.0.0|
|Author|Eric Shulman|
|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|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|hide a tiddler's background and border (if any)|

Usage: <<tiddler HideTiddlerBackground>>

%/<script>
	var t=story.findContainingTiddler(place);
	if (!t || t.id=="HideTiddlerBackground") return;
	var nodes=t.getElementsByTagName("*");
	for (var i=0; i<nodes.length; i++) if (hasClass(nodes[i],"viewer")) {
		var s=nodes[i].style;
		s.backgroundImage="none";
		s.backgroundColor="transparent"

		s.borderColor="transparent";
		s.borderWidth=0;
		s.margin=0;
		s.padding=0;
		break;
	}
</script>
/%
|Name|HideTiddlerTags|
|Source|http://www.TiddlyTools.com/#HideTiddlerTags|
|Version|0.0.0|
|Author|Eric Shulman|
|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|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|hide a tiddler's tagged/tagging display elements|

Usage: <<tiddler HideTiddlerTags>>

%/<script>

	var t=story.findContainingTiddler(place);
	if (!t || t.id=="tiddlerHideTiddlerTags") return;
	var nodes=t.getElementsByTagName("div");
	for (var i=0; i<nodes.length; i++)
		if (hasClass(nodes[i],"tagged"))
			nodes[i].style.display="none";
</script>
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;HideTiddlers^^<<tiddler CloseThisOpen with: WhatsInATiddler  '« back'>>|<<toolbar editTiddler>>» ^^>>

These tags in a tiddler will hide the tiddler from various lists and searches.
* ''excludeSearch'': excludes a tiddler from search results
* ''excludeLists'': excludes a tiddler from the lists in the sidebar tabs
* ''excludeMissing'': excludes a tiddler from the processing that generates the ~MissingTiddlers list. Use it when you have a tiddler that contains links to missing tiddlers and you don't want those missing links to appear in the `~MissingTiddlers list.
!!!<<gradient horiz #abf #ffffff>>&nbsp;Special Tags>>
* ''systemConfig'': marks tiddlers that contain ~JavaScript that should be executed once ~TiddlyWiki has loaded

!!!<<gradient horiz #fc3 #fff>>&nbsp;HideURLifLocationFile^^<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>

----
This will hide a URL link (when online) that is only used when the ~TiddlyWiki is offline.

Basically, this contains the external link within a CSS class wrapper
(any classname will do), along with a little inline script that hides
the container ('place') if the document protocol isn't "file:". 

{{{
{{span{[[Local TW Help|file:///F:/TiddlyWiki/TW%20Help/twhelp.html]]<script>
  if (document.location.protocol!='file:')
      place.style.display='none';
</script>}}} 

}}}

{{span{[[Local TW Help|file:///F:/TiddlyWiki/TW%20Help/twhelp.html]]<script>
  if (document.location.protocol!='file:')
      place.style.display='none';
</script>}}} 

!!!<<gradient horiz #fc3 #fff>>&nbsp;HidingSidebarTabs^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>

You can hide the tabs in the right sidebar under a slider to be dropped down only when you need them. This is an advantage when using 'Find in this Page' searches in ~FireFox.  It prevents hits on everything listed in tabs showing.

1: Copy the shadow tiddler ''~SideBarTabs'' and put it into a tiddler named "~SideBarTabsSlider"
{{{
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>

}}}
.
 2: Creat a new tiddler named ''~SideBarTabs'' and put this new slider in it: 
{{{
<<slider txtMainTabSlider SideBarTabsSlider 'tabs »' 'tiddlers, timeline, all, tags, and more'>>
}}}

!!!End



''A random collection of bits and pieces of CSS code.''

It depends on your use but there is a comment plugin that uses Haloscan
http://www.haloscan.com/ the plugin is at:
http://end.com/~speth/HaloscanMacro.html 
http://tinyurl.com/3cs69x
HaloscanMacro
<<<
!!!!!&nbsp;Tables
<<<
How can I have a new line in a text inside a cell of a table. If I
do a newline it destroys table format!
<<<
+++[Answer]
TW wiki-syntax supports use of {{{<br>}}} without requiring {{{<html>...</html>}}}
surrounding it.  Thus, a table with multi-line content can be written
this way:
{{{
|foo|line1<br>line2>|
|bar|mumble|
|gronk|snork<br>snerfle|
}}}

|foo|line1<br>line2>|
|bar|mumble|
|gronk|snork<br>snerfle|

HTH,
-e
Eric Shulman 
===
!!!!!Printing
+++[Printing]

> Is there an easy way to select different stylesheets for use when printing?
!!!!!Answer
http://www.TiddlyTools.com/#SelectStylesheetPlugin

in addition to switching between alternative stylesheets, it can also
switch between alternative templates (PageTemplate, ViewTemplate,
EditTemplate), so that custom combinations of CSS *and* HTML layouts
(a.k.a, "themes") can be selected with a single-click.

HTH,
-e
Eric Shulman

> This is cool and provides a way to switch between stylesheets, but how
> does this affect printing? Forgive my lack of understanding on
> stylesheets and 3x5 printing in particular; but is printing and
> display covered by the same stylesheet? I was guessing they were
> different stylesheets.
!!!!!Answer
The standard TW CSS is defined in several shadow (default) tiddlers:
   StyleSheetLayout
   StyleSheetColors
   StyleSheetPrint
These stylesheets are used in combination with an optional fourth
tiddler:
   StyleSheet
in which you can place any additional CSS definitions to supplement or
*override* the defaults contained in the shadow stylesheets.

[[StyleSheetPrint]] uses the following statement:
   @media print { ... }
so that CSS contained inside the  {...} will only be applied when
sending output to printing devices.  This allows TW to format things
differently for hard-copy vs. screen display, without having to switch
stylesheets at all!

To optimize for printing on 3x5 cards, you can just place your own
@media print {...} definitions into [[StyleSheet]].  Since
[[StyleSheet]] is an OVERLAY, any print-related CSS it contains will
simply override the standard CSS in [[StyleSheetPrint]] and whenever
you print the document, it will use your customized 3x5 styles by
default.

Even so, you asked for a way to have TWO different print formats: one
for 3x5 card stock, and another for 8.5x11 paper stock.  Using
SelectStylesheetPlugin makes this easy:

First, create an alternative stylesheet, e.g. [[8.5x11Paper]].  Then,
add the appropriate "@media print {...}" definitions for printing to
full-sized paper, and tag the tiddler with "stylesheet".  Then, when
you want to switch from your default 3x5 print format, you can use the
droplist control provided by SelectStylesheetPlugin to select the

"8.5x11Paper" stylesheet just before printing.

HTH,
-e
Eric Shulman  

===


!!!!Multiple Columns
+++[Multiple Columns in TiddlyWiki]
<<tiddler [[Multiple Columns in TW]]>>
===

!!!!&nbsp;Curly Quotes
+++[Curly Quotes]

 CSS Curly Quotes
January 3rd, 2006

Source: http://www.designmeme.com/articles/csscurlyquotes/

Simon Collison recently explained how to create [[Swooshy Curly Quotes Without Images|http://24ways.org/2005/swooshy-curly-quotes-without-images]] using CSS.  It's a nice technique that works cross-browser, but you have to add <span> tags to your markup for it to work.  Here is an alternate technique that requires no changes to your markup that will work in modern CSS2 compatible browsers like Firefox.

''The HTML''

We'll start with some regular markup for our quote.  Nothing fancy here.
<blockquote>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus dignissim, purus a blandit cursus, nulla erat cursus mauris, a dignissim est ante et arcu. Vivamus sollicitudin porttitor justo. Nunc at leo quis arcu ultrices placerat. Quisque eget justo at nisi tempus vehicula. Nullam a odio eu orci sodales varius. </p>
</blockquote>

''The CSS''

We're going to be setting a width for the blockquote and leave some padding that the quotes will be positioned into.
blockquote {
display: block;
padding: 0 60px;
width: 350px;
}

Next we'll use the CSS :before and :after pseudo-elements to generate the curly quotes.  Since we're setting the quotes to use display: block, we'll need to set widths for them as well.  We'll define the common attributes first...
blockquote:before, blockquote:after {
color: #69c;
display: block;
font-size: 700%;
width: 50px;
}

Next we'll define the specific attributes for the opening and closing quotes.  We'll control the position of the quotes with the margin attributes, and in the case of the opening quote -- the height.

blockquote:before {
content: open-quote;
height: 0;
margin-left: -0.55em;
}
blockquote:after {
content: close-quote;
height: 50px;
margin-top: -70px;   
margin-left: 360px;
}

Note: You may need to adjust the margins depending on the typeface you're using and the width you've set for your blockquote.

''The Curly Quotes''

Here we have the curly quotes on our blockquote elements created using only CSS and without editing any of our markup.  How nice.

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus dignissim, purus a blandit cursus, nulla erat cursus mauris, a dignissim est ante et arcu. Vivamus sollicitudin porttitor justo. Nunc at leo quis arcu ultrices placerat. Quisque eget justo at nisi tempus vehicula. Nullam a odio eu orci sodales varius.

If you're unable to see the curly quotes in this article, you might want to give Firefox a try. It's free and makes browsing the web even better.

If you haven’t tried it already— Firefox is free, easy to use, and a relatively small download.
===

!!!&nbsp;Is there any way to avoid the tooltips on links and buttons?
Add this line to a systemConfig tiddler (e.g., "ConfigTweaks")
{{{
config.messages.tiddlerLinkTooltip = ""; 
}}}
!!!&nbsp;New Table Template
{{{
 <<newTiddler title:'New Table' text:{{store.getTiddlerText('BlankTable')}}>> 
}}}
Example: NewTableFromTemplate
Put this in StyleSheet: SimonsNiceTable
Then put this template in BlankTable. 
Simon Baird

!!!&nbsp;ocat's slider button
{{accordionEffect{
<<slider forGettingStarted GettingStarted '1. GettingStarted(click here)'>><<slider forStyleSheet   StyleSheet  '2. StyleSheet'>><<slider forSiteTitle SiteTitle '3. SiteTitle' SiteTitle>>
}}}
You can see the example showing http://oldcat.googlegroups.com/web/AccordionEffect.html.
!!!&nbsp;Code
/*{{{*/
{{accordionEffect{

<<slider forGettingStarted GettingStarted '1. GettingStarted(click here)'>><<slider forStyleSheet   StyleSheet  '2. StyleSheet'>><<slider forSiteTitle SiteTitle '3. SiteTitle' SiteTitle>>
}}}

StyleSheet

.accordionEffect .button{ display: block; color: #fff; text-align: left;
font-weight: bold; line-height: 140%;
border-top: solid 1px #bbb;
border-left: solid 1px #bbb;
border-right: solid 1px #888;
border-bottom: solid 1px #888;
background: #999;
margin-left: -0.3em;
padding: 0 1px 1px 20px;
}

.accordionEffect .button:hover{
border-top: solid 1px #777;
border-left: solid 1px #777;
border-right: solid 1px #bbb;
border-bottom: solid 1px #bbb;
background: #888;
padding: 1px 0 0 21px;
}

Here is the example by using Eric Shulman's NestedSlidersPlugin with the same CSS.
 
{{accordionEffect{
+++[1. GettingStarted(click here)]<<tiddler GettingStarted>>===
+++[2. StyleSheet]<<tiddler StyleSheet>>===
+++[3. SiteTitle]<<tiddler SiteTitle>>===
}}}



/*}}}*/
/*{{{*/
/*AccordionEffect, Designed by oc ( http://b-oo-k.net/blog/ ). */
/*}}}*/

!!!Change spacing above and below Headings
{{{
h3 { margin-top: 0em; margin-bottom: 0em; } 
}}}
!!!Change link colors
{{{
Put in StyleSheet
.locLink a { color: #c0c; }
.remLink a { color: #c90; }
}}}
{{locLink{
[[Local link color #c0c|Hints and Kinks - CSS]]
}}}
{{remLink {
''[[Remote link color #c90|http://google.com]]''
}}}
!!!~AnotherExampleStyleSheet
+++[See it here]
<<tiddler AnotherExampleStyleSheet>>
===

!!!Make Lists double spaced or more
<<<
{{{
li {
    margin-top: .25em;
    margin-bottom: .25em;
}
}}}
{{{
.viewer li {
   padding-top: 0.25em;
   padding-bottom: 0.25em;

} 
}}}

<<<

!!!Random CSS
<<<
CustomCSSClass
TabsSpecificTiddlers
Image-Hints
<<<
!!!Plain text tooltip
<<<
*Using HTML, you can write:
{{{<html><span title="mouseover tooltip text">...</span></html> }}}

<html><span title="mouseover tooltip text">Try it here</span></html>

*Change the cursor too
{{{<html><span title="mouseover tooltip text"style="cursor:help>Try it here</span></html>}}}

<html><span title="mouseover tooltip text and the cursor is changed"style="cursor:help>Try it here</span></html>


<<<

!!!Bullet Point Hint
<<<
Numbered bullets use "line-mode" syntax, which means that ALL the
content of each numbered item must occur between the # and a trailing
newline (\n).  Unfortunately,  the TW syntax for block quotes ALSO use
line-mode, requiring that the {{{ and }}} sequences occur on lines by
themselves.

Thus, it is not possible to use BOTH types of line-mode formatting in
combination...

but wait.... there is a workaround (that doesn't use
NestedSlidersPlugin)...

First, define a CSS class that looks like a blockquote:
(add this to your StyleSheet tiddler)
----------
.embeddedblockquote
   { display:block; background:#ffe; border:1px solid; padding:.5em; }
----------

Then, in your numbered items, use this syntax:
----------
# point 1
# point 2 {{embeddedblockquote{
this is a test
wow, this really works!!!}}}
# point 3
----------

Because of the way the {{classname{...}}} syntax is processed, the
newlines that occur *inside* the block are NOT seen by the numbered
bullet processing, and numbered bullets are displayed without a break
in sequence.

enjoy,
-e
Eric Shulman 
<<<

''Table Alignment CSS:''
<<<
!!!Center table
{{{
1) Add the following to your StyleSheet tiddler:
.tablecenter { text-align: center; }
.tablecenter table { margin-left: auto; margin-right: auto; text-align:
left; }

2) Around the table place the block / style, as folows:
{{tablecenter{
| !Name | !Number | !Rate |
|Joe's | 800-555-1212 | $25|
|ESL, Inc. | 866-555-1234 | $35|
|Quality Stuff | 888-555-3344 | $34|

Other text that needs to be centered.

}}} 
}}}


!!!Code:
*Put in tiddler table:vertical-align:top;
{{{
|[img[http://img480.imageshack.us/img480/7466/
RainbowOverDanube.jpg]] |vertical-align:top;This 
HTML example uses a picture from a remote 
server as a link to a larger picture that is 
on a different remote server.|
}}}

!!!Example
|[img[http://img480.imageshack.us/img480/7466/RainbowOverDanube.jpg]] |vertical-align:top;This HTML example uses a picture from a remote server as a link to a larger picture that is on a different remote server.|
<<<

Put in StyleSheet
<<<
.moveover{
margin-left:120px;
}

.viewer td { vertical-align: bottom; } 
 
.viewer td { vertical-align: top; }
<<<
Specific Tiddler:
<<<
{{{#tiddlerTiddlerTitle td { vertical-align:top; } }}}

{{{#tiddlerSearchResults {font-size:1em;}}}}

{{{#tiddlerWeather .viewer table {height:380px;} }}}
<<<
!!!!!Layout Tweaks
<<<
> what value sets the width of the displayArea when the sidebar is
> collapsed?  displayArea doesnt seem to affect this?

The #mainMenu, #displayArea, and #sidebar DOM elements are all
siblings of each other, and share the same space.  To keep them from
overlapping, the #displayArea **margins** have to be set accordingly.
For example, suppose your #mainMenu is "10em" wide and the #sidebar is

"15em" wide, you might set the #displayArea margins this way:

#displayArea { marginLeft:11em; marginRight:16em; }

(note extra 1em added to each margin to leave a 1em 'gutters' between
menu, displayarea, and sidebar)

HTH,
-e
Eric Shulman 
<<<
!!!!!Here's Jon Scully's style tweaks.
<<<
  Add these to your StyleSheet tiddler and adjust to taste: 

Differentiate between local and external links
Add the following lines to your StyleSheet tiddler: 
.locLink a { color: #0f0; } 
.remLink a { color: #f00; } 

To see the effects, create a "Test" twiddler, for example, with the following content: 
{{locLink{
[[Local Link|file:///D:/Digital Photos/100_0008.JPG]]
}}} 
{{remLink{
[[Remote Link|http://www.google.com/]]
}}} 

Adjust #0f0 and #f00 to taste. 

Jon Scully


.toolbar { vertical-align: bottom; line-height: 2.5em; float: right; } 
.tagged { visibility: hidden; position: absolute; } 
.tagging { visibility: hidden; position: absolute; } 
.viewer .button { border: 0px solid #db4; } 
.viewer tr { vertical-align: top; } 

More detailed (i.e. with comments): 

/* streamlines the viewer template */ 
.toolbar { 
    vertical-align: bottom; 
    line-height: 2.5em; 
    float: right; 

} 

/* hide the tags and tagging blocks */ 
.tagged { visibility: hidden; position: absolute; } 
.tagging { visibility: hidden; position: absolute; } 

Or better

.tagged {display: none;}
.tagging {display: none;} 

/* hide button border (when inside viewer only) */ 
.viewer .button { border: 0px; } 

(Why? I embed *lots* of 'slders' -- nested sliders, in fact -- to help 
organize goals, projects, clients, tasks, etc.  The border adds lots of 
visual noise to the viewers.) 

/* pushes text to top of table cells (where applicable) */ 
.viewer tr { vertical-align: top; } 

(Why?  Purely a preference.) 

Also, when editing, I like the tags menu at the top (and I don't need 
the helpful comment that goes with it).  So have changed the 
EditTemplate twiddler, as follows: 

<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler 
deleteTiddler'><span macro='tagChooser'></span></div> 
<div class='title' macro='view title'></div> 

<div class='editor' macro='edit title'></div> 
<div class='editor' macro='edit text'></div> 
<div class='editor' macro='edit tags'></div> 

<<<

''SideBar Adjust to taste. The defaults are: 17em, 16em and 15em, respectively.'' 
<<<
 #displayArea { margin-right: 22em; }
    #sidebar { width: 21em; }
    #sidebarTabs .tabContents { width: 20em; } 
<<<
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[Tweaks|Hints and Kinks - Tweaks]]^^<<tiddler CloseThisOpen with: WhatsInATiddler  '« back'>>|<<toolbar editTiddler>>» ^^>>
''A tweak is a modification that is used'' to change a function or a style to override what may be standard in a ~TiddlyWiki.

All tweaks should be done by putting them in tiddlers; you should never modify the core. A tweak can be a snippet of code that is used to customise to a particular personal taste of the user. It's usually done in JavaScript, but can be CSS added or changed in StyleSheet or using HTML in a tiddler.  Sometimes you can tweak your PageTemplate, EditTemplate or ViewTemplate by rearranging elements or adding marcos.

|bgcolor:#fcf;@@color:#C06;''&raquo; &raquo;'' @@ @@color:#c06; ''Note:'' At all times tweaks are done through tiddlers; you should never modify the core.@@|

(Sometimes a tweak is erronously called a macro if it needs a systemConfig tag but a macro is usually expressed like this: {{{<<a macro>>}}} so most of the "macros" below are really tweaks) <<smiley ;-)>>

<<tiddler SavingEmptyTemplate>>
!!!&nbsp;Random Tiddler Script
RandomTiddlerScript
!!!&nbsp;Refresh iframe
{{{<html><a href="javascript:;" onclick="var
tid=story.findContainingTiddler(this); if (tid)
story.refreshTiddler(tid.getAttribute('tiddler'),null,true); return
false;">refresh</a></html>}}} 

!!!&nbsp;Add a tab to Backstage
+++[See how]
<<<

<<tiddler BackstageTabTweak>>
<<<
===

!!!&nbsp;Dual Edit Toolbars
+++[Have an edit toolbar at both the top and bottom of your tiddlers in edit mode]
<<tiddler DualEditToolbars>>
===
 
!!!&nbsp;Double-click to edit tweaks
#+++[Is it possible to turn off the ability over http to edit a tiddler by double clicking?]
<<<
The TW default (shadow) ViewTemplate defines the tiddler toolbar this way:
---------------
<div class='toolbar' macro='toolbar -closeTiddler closeOthers
+editTiddler permalink references jump'></div>
---------------
When you double-click on a tiddler, it triggers whatever toolbar command has a "+" prefix.  If no command has a "+", then double-click does nothing.  Changing "+editTiddler" to just "editTiddler", will allow you to retain the menu item without the associated double-click action.

See discussion here:http://tinyurl.com/2rq8j8 

<<<
===

#+++[Shift click to edit]
<<<
Try this:
   http://www.TiddlyTools.com/#ShiftClickToEdit
(requires InlineJavascriptPlugin)

The script hijacks the double-click handler ('onDblClick') for the
tiddler background and defines a single-click handler ('onClick') that
calls the hijacked double-click handler only if the shift key is held
down.  It also removes the existing double-click handler, so that
double-clicks can be processed by the browser's default handler.

<<tiddler ShiftClickToEditDoc>>

You can incorporate this script into each tiddler by adding the
following to your ViewTemplate:

<span macro='tiddler ShiftClickToEdit'></span>

enjoy,
-e
Eric Shulman 
<<<
===

!!!!<<gradient horiz #abf #ffffff>>Example of how to set up a tweak>>

<<slider "chkcloseAllTweak" "CloseAllTweak" "Set up a Tweak Tiddler" "">>
!!!!Tiddler Background change on hover
All of my tiddlers have the same background color. (#FAFAD2)
When I hover over a tiddler I would like the background color to
change to something else. (say #336633 or whatever.)

+++[How do I implement this?]
{{{
.tiddler {
        border-top:1px solid #ccc;
        border-left:1px solid #ccc;
        border-bottom: 3px solid #ccc;
        border-right:  3px solid #ccc;
        margin: 0.5em;
        -moz-border-radius: 1em;
} 
{{{
{{{
.tiddler.selected{background:#336633;}
}}}
Note: don't have a space between the .tiddler and the .selected.

".tiddler .selected" will find things that have class "selected" and
are also inside a thing with the class "tiddler".


".tiddler.selected" will find things that have BOTH classes,
"selected" and "tiddler".

Cheers
;Daniel 
=== 

!!!! &nbsp;[[TWVersion_2.2.x Tweaks]]
+++[Add new here]
<<tiddler [[TWVersion_2.2.x Tweaks]]>>
===

----
!!!!!Home buttons
+++[Home buttons that clear the screen and loads a list of tiddlers]
<<tiddler HomeButtons>>
===


+++[Another home button macro Tag: systemConfig]
<<tiddler DefaultHome>>

===

!!!!!Multi Column Display
{{{
.viewer {-moz-column-width:30em; -moz-column-gap:2em; padding-top:
0em;}

div[tags~="singlecolumn"] .viewer, div[tags~="systemConfig"] .viewer,
div[tags~="quickedit"] .viewer, div[tags~="css"] .viewer,
div[tags~="lyrics"] .viewer, div[tags~="l"] .viewer,
div[tags~="tablenoborder"] .viewer {-moz-column-count:1;padding-top:
0em;} 

}}}
----
*&darr;+++[Change search to Go button]
{{{var macros =config.macros;
macros.search.label="GO";
}}}

Tag: systemConfig
===

----
*[[Editing - Changing default options in TiddlyWiki|Editing Changing default options]]
----
*[[FireFox Tips]]
----
''Slider Cookies''

<<<
Each slider state is tracked with a cookie (the first parameter in the
macro).  So, in order to force the slider to be closed, you can use a
systemConfig tiddler (e.g., "ConfigTweaks") to set the internal copy
of the cookie value, which is stored in the config.options object:
   config.options.slidercookiename = false;
or
   config.options["slidercookiename"] = false;

HTH,
-e
Eric Shulman
TiddlyTools / ELS Design Studios 
<<<

''Keep a tiddler open no matter what''
<<<
Put into ~PageTemplate
{{{
<div id='stayopentiddlername' refresh='content' tiddler='StayOpenTiddlerName'></div>
}}}
<<<
''Force ~BackUp Folder for multiple ~TiddlyWikis''

<<<
{{{
<<tiddler BackUpTweak>>

Tag: systemConfig
}}}
<<<
''Disable the double-click to edit''
<<<
[[Disable the double-click to edit]]
<<<
''Hide Editing over HTTP''
<<<
HideEditingOverHTTP
<<<
''Start in safe mode''
<<<

{{{file:///I:/TiddlySpot/twhelp.html#start:safe}}}
<<<
''Last Modified Date''
<<<
{{{
<script>return document.lastModified</script> 
}}}
another script - last modified tiddler
{{{
<script>
        var tiddlers=store.getTiddlers("modified");
        var last=tiddlers[tiddlers.length-1];
        var when=last.modified.formatString("YYYY/MM/DD at 0hh:0mm:0ss GMT");
        return "Last tiddler change ('"+last.title+"') was on "+when

</script> 
}}}
<<<
Date & URL script
<<<
{{{
<script>
var today=new Date()
document.write('<center>'+today.toString()+'<br>'+window.location+'</center>')

</script>
}}}
<<<

<<<
''Adds 'close all' to toolbar in ViewTemplate''
<<<
CloseAllMacro
{{{
config.commands.closeAll ={
text:"close all",
tooltip:"close all"};

config.commands.closeAll.handler = function(event,src,title)
{story.closeAllTiddlers();return false;}

tag=systemConfig
}}}
<<<

''Causes New Tiddler to be empty of the annoying 'type your text here' nonsense''
<<<

NewEmptyTiddlerMacro

config.views.editor.defaultText = ""; (tag with systemConfig Note: core version updates may obsolete this code)
<<<
''Disables the even more annoying and useless transition animation.''
<<<
DisableAnimationMacro
{{{
config.options.chkAnimate=false;

tag=systemConfig
}}}
<<<

''Adds 'goto' to toolbar in ViewTemplate''
<<<
''This actually hijacks the core code for the 'jump' command and renames it 'goto'.''

GoToMacro
{{{
merge(config.commands.jump,{
	text: "goto",
	tooltip: "Go to another open tiddler"});

tag=systemConfig
}}}
<<<
''Adds 'top' to toolbar in ViewTemplate''

<<<
JumpToTopMacro
{{{
config.commands.top ={
text:"top",
tooltip:"jump to top"
};

config.commands.top.handler = function(event,src,title){
window.scrollTo(0,0);
}

tag=systemConfig
}}}
<<<

!!!ToggleLeftSidebar and ToggleRightSidebar
<<<
Because the ToggleLeftSidebar and ToggleRightSidebar inline scripts
adjust the displayArea margins programmatically, modifying the CSS
definition for #displayArea will have no net effect.  Instead, to tell
the scripts how much margin to leave for the sidebars, you can add the
following lines to a "DisplayMarginsTweak" tiddler (tagged with systemConfig):
{{{
config.options.txtDisplayAreaLeftMargin="xxxx";
config.options.txtDisplayAreaRightMargin="yyyy";
}}}

<<<
''Prevent editing online''
<<<
{{{
config.options.chkHttpReadOnly = true;
tag=systemConfig
}}}
<<<
!!!End of Tweaks
<html><a
 href="javascript:void(0)"
 onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('DefaultTiddlers').readBracketedList())"

><span title="Close all tiddlers and open Welcome" style="cursor:pointer">Home</span></a></html> 
Source: http://twfaq.tiddlyspot.com/
As posted by Bradley Meck on the mailing list, 18-Jul-2006

{{{
<html><a
 href="javascript:void(0)"

 onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('DefaultTiddlers').readBracketedList())"
>Home</a></html> 
}}}

I think it could be adapted to open any set of tiddlers, eg
{{{
<html><a
 href="javascript:void(0)"
 onclick="story.closeAllTiddlers();story.displayTiddlers(null,['This','That'])"

>This and That</a></html> 
}}}

A variation suggested by Eric Shulman:
{{{
<html><a href="javascript:;" onclick="story.closeAllTiddlers();restart();">home</a></html>
}}}
This one will read permalink/permaview urls and other [[URL Commands]] to determine what tiddlers to display.
Suggested by Eric Shulman on the mailing list:
<<<
Add {{{"@@display:none;udigrudi@@"}}} to your SiteTitle tiddler.  No need to
hack stylesheets for this "one-off tweak".  After save-and-reload, the
text WILL show up in the titlebar, but will NOT appear in the TW
header.

SiteTitle:
------------------------
{{{@@display:none;TwHelp@@[img[http://twhelplogo.gif]]}}}

<<<
/%Display a tiddler in a floating, moveable, sizeable panel%/
{{menubox{{{small{
__Display a tiddler in a floating, moveable, sizeable panel__

Using a combination of NestedSlidersPlugin and MoveablePanelPlugin, you can quickly turn any tiddler into a floating panel that can be moved/sized/folded/maximized in response to simple mouse actions (drag, shift-drag, double-click) and/or menu commands.

!!!!! example
{{{
syntax:
+++^width^[label]
	<<moveablePanel>>TiddlerTitle
----
	<<tiddler TiddlerTitle>>

===
}}}
+++^30em^[click here to see SiteSubtitle in a floating panel]
	<<moveablePanel>>SiteSubtitle
----
	This is the site subtitle:

	<<tiddler SiteSubtitle>>
===
{{{
+++^30em^[click here to see SiteSubtitle in a floating panel]
	<<moveablePanel>>SiteSubtitle
----
	This is the site subtitle:

	<<tiddler SiteSubtitle>>
===
}}}
*the {{{^width^}}} portion of the slider syntax declares the start of a "floating slider" panel, where //width// is any valid CSS measurement (e.g., "30em", "200px", "60%", "3in", etc.).  Use ^auto^, {{{^^}}}, or just {{{^}}} to allow the panel to resize as needed to fit the contents.

>{{fine{hint: if you use 'auto' sizing, the panel width can change unexpectedly due to the 'float:right' properties of the moveable panel dynamic menus.  To bypass this behavior, always specify a fixed panel size when including the {{{<<moveablePanel>>}}} macro}}}
*The {{{<<moveablePanel>>}}} macro adds move/size functions (mouse actions and menus) to the floating slider panel, and should be the first item in the slider panel contents, immediately following the "start slider" syntax.
>{{fine{hint: you can follow the {{{<<moveablePanel>>}}} macro with some "title text" for the panel and then a horizontal line (----) to create a "titlebar" appearance for the panel.  When appropriate, this panel "title" should include a link to the tiddler containing the source for the panel content, so that the reader can easily view that content using a standard tiddler display.}}}
*Use the {{{<<tiddler TiddlerName>>}}} macro to insert contents from another tiddler.  You can put //any// tiddler content you want inside a floating panel: e.g. ''add formatting or other content //surrounding// the included tiddler'', or just ''enter content directly, without including another tiddler'' at all...
}}}}}}
!!!<<gradient horiz #fc3 #ffffff>>HowToUpgrade>>
''The core ~TiddlyWiki code is regularly updated'' with bug fixes and new features. If you're using an earlier revision of ~TiddlyWiki, there's a simple way to upgrade to the latest version.  This is the official site for new releases:
[[Master TiddlyWiki Site|http://tiddlywiki.com/]] @@color:#C06;''&raquo; &raquo;'' @@Jeremy Ruston's Official TW Information Source
----
{{tablecenter table{
|bgcolor:#fdf;Note that from version 2.3, the advice for HowToUpgrade to new versions has changed.|
}}}
!!!!Upgrade to Version 2.3 as of 2007.12.05
The core TiddlyWiki code is regularly updated with bug fixes and new features. If you're using an earlier revision of TiddlyWiki, here's the simple way to upgrade to the latest version:
* Download a fresh, empty version of TiddlyWiki by right-clicking on [[this link|http://www.tiddlywiki.com/empty.html]], selecting 'Save target' or 'Save link' and saving it in a convenient location as (say) "mynewtiddlywiki.html"
* Open the new TiddlyWiki file in your browser
* Choose ''import'' from the BackstageArea at the top of the window (you may need to click the 'backstage' button at the upper right to show the BackstageArea)
* Click the ''browse'' button and select your original TiddlyWiki file (say, "mytiddlywiki.html") from the file browser
* Click the ''open'' button on the import wizard; a list of all of your tiddlers is displayed
* Click on the top-left checkbox to select all the tiddlers in the list
* Scroll down to the bottom of the wizard and ensure that the checkbox labelled //Keep these tiddlers linked to this server...// is ''clear''
* Click the ''import'' button
The most likely cause of the upgrade process not working properly is that one of the [[Plugins|ThirdPartyPlugins]]you're using is not compatible with a change in the new release. If so, you can repeat the process omitting the troublesome plugins.
----
!!!!Upgrade for all versions before 2.3
# Open your ~TiddlyWiki file in ~FireFox (say it's called "mystuff.html")
# ~SaveChanges (with ~SaveBackups switched on) to make sure that you've got a backup of it
# Without closing that page, right-click on the link containing the pre-Version 2.3 empty ~TiddlyWiki, select 'Save target' or 'Save link' and save it as "mystuff.html", replacing your existing file
# Now go back to the previously opened copy of "mystuff.html" in your browser and ~SaveChanges again. It will inherit the newly saved code
# Refresh the page in the browser to verify that the upgrade has worked.
*@@color:#C06; @@''Special Note:''@@
|bgcolor:#fcf;Sometimes upgrades to the core also involve changes to StyleSheetColors and StyleSheetLayout.  If you have modified either of these tiddlers the core upgrades that involve these tiddlers may not take place. As advised in FormattingThePage it should be your policy to never modify these two style sheets.|

*''Emergency fix for the above''

|bgcolor:#fcf;If you have modified the above tiddlers, to get your ~TiddlyWiki working for the new core changes; you can do the following.  First rename StyleSheetColors and StyleSheetLayout to ''~StyleSheetColorsOld'' and ''~StyleSheetLayoutOld''. Then put them in StyleSheet as {{{[[}}}''~StyleSheetColorsOld''{{{]]}}}  {{{[[}}}''~StyleSheetLayoutOld''{{{]]}}}  this should restore your ~TiddlyWiki to something you recognize.  From there you can seek help if you don't know what to do next.|

Another likely cause of the upgrade process not working properly is that one of the [[Plugins|ThirdPartyPlugins]] you're using is not compatible with a change in the new release. If so, you can use the ''~PluginManager'' to disable plugins and reinstate them selectively to determine which if any are the cause of the problem.  Always remember that the friendly and helpful [[TiddlyWiki Discussion Group|http://groups.google.com/group/TiddlyWiki/topics]]is there to help you through any problems you may have.

Original Source: [[TiddlyWiki - a reusable non-linear personal web notebook|http://tiddlywiki.com/]] 


!!!<<gradient horiz #fc3 #fff>>&nbsp;HowToUseBookmarks^^<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>
''To use bookmarks in TW Help'' right click on the icon at the top of each tiddler then save the tiddler location to your bookmarks or you can copy the link location and paste it wherever you wish; such as an email.
<<<
This is a result of a copy and paste operation on this tiddler
{{{
http://twhelp.tiddlyspot.com/#HowToUseBookmarks
}}}

This is the result of a save bookmark operation:
{{{
External link to http://twhelp.tiddlyspot.com/#HowToUseBookmarks
}}}
<<<
|bgcolor:#fcf;TW Help uses many tabs; each of these tabs is a separate tiddler.  @@color:#C06;''In order to bookmark a single tiddler that is part of a tabset''@@ simply click on the top heading bar @@(usually yellow)@@ and it will open that individual tiddler. You can then bookmark that single tiddler.|

If you wish to use bookmarks in your ~TiddlyWiki go here TiddlerBookmark

!!!<<gradient horiz #abf #fff>>&nbsp;End
<<tabs "" 
[[Intro ]] "" [[IntroLinks]] 
[[AlphaTabs ]] "tooltip 2" [[AlphaTabs]] 
[[BrowseYourHardDisk ]] "tooltip 2" [[BrowseYourHardDisk]] 
[[ExternalLinkButton ]]"ExternalLinkButton"[[ExternalLinkButton]]
[[HideURLifLocationFile ]] "" [[HideURLifLocationFile]] 
[[HowToUseBookmarks ]]"HowToUseBookmarks"[[HowToUseBookmarks]] 
[[LaunchApplicationPlugin ]] "tooltip 2" [[Launch Application Plugin]] 
[[LinkingTips ]] "" [[LinkingTips]] 
[[LinkingIframes ]] "" [[LinkingIframes]]
[[NavigationWithTW ]]"NavigationWithTW"[[NavigationWithTW]]
[[NewHere ]] "" [[NewHere]]  
[[PermalinkList ]] "" [[PermalinkList]]
[[PrettyLinks ]] "" [[PrettyLinks]]  
[[PrettyPermalinks ]] "" [[PrettyPermalinks]] 
[[RelativeLinks ]] "" [[RelativeLinks]]
[[SectionLinks ]] "" [[SectionLinks]]
[[TagCloud ]] "" [[TagCloud]] 
[[TiddlerBookmark ]]"TiddlerBookmark"[[TiddlerBookmark]] 
[[TargetingLinks ]]"TargetingLinks"[[TargetingLinks]] 
[[ToolTips ]]"ToolTips"[[ToolTips]]
[[UsingLinks ]] "" [[UsingLinks]] 

>>
{{textleft{
|<<gradient vert #fcf #fff #fcf>>&nbsp;''The information here is based on the modular structure of a ~TiddlyWiki from the page down to the foundation made of tiddlers.''>>|
*A ~TiddlyWiki page is @@color:#C06;''&raquo; &raquo;'' @@ made of tiddlers 
*A tiddler contains @@color:#C06;''&raquo; &raquo;'' @@Text, Images, CSS, HTML, or Javascript
There are several ways of finding something in TW Help.  These methods can be applied to any ~TiddlyWiki

1: The search box will search on any or all of titles, text and tags.
2: The GoTo tiddler will search all tiddlers as you type narrowing the search as you go.
3: The table of Contents lists the major divisions with a dropdown box of details It also has the GoTo tiddler.
4. The Alphabetical tabs display all tiddlers by alphabetic order by tab.
5: The MyGroup macro opens most of the major divisions with the details being listed on tabs which display the details.

+++[Finding what you want]
<<tiddler MyGroupList/mygroup>>
===
}}}
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;HtmlEntities Check this out &#x2713; ^^<<tiddler CloseThisOpen with: Entities-Codes  '« back'>>|<<toolbar editTiddler>>» ^^>>

{{twocolumns{
|>|>|width:96%; !Whitespace |
|vertical-align:middle; !Symbol | !~~Character<br>(spaces marked with i)~~ |vertical-align:middle; !Description |
| {{{&nbsp;}}} | i&nbsp;i |non-breaking space |
| {{{&ensp;}}} | i&ensp;i |en space |
| {{{&emsp;}}} | i&emsp;i |em space |
| {{{&thinsp;}}} | i&thinsp;i |thin space |
| {{{&zwnj;}}} | i&zwnj;i |zero width non-joiner (ignored by ~FireFox)  |
| {{{&zwj;}}} | i&zwj;i |zero width joiner (ignored by ~FireFox)  |
| {{{&lrm;}}} | i&lrm;i |left-to-right mark (ignored by ~FireFox)  |
| {{{&rlm;}}} | i&rlm;i |right-to-left mark (ignored by ~FireFox)  |
| {{{&shy;}}} | i&shy;i |soft hyphen (ignored by ~FireFox) |

|>|>|width:96%; !Money |
| !Symbol | !Character | !Description |
| {{{&cent;}}} | &cent; |cent sign |
| {{{&pound;}}} | &pound; |pound sign |
| {{{&curren;}}} | &curren; |currency sign |
| {{{&yen;}}} | &yen; |yen sign |
| {{{&euro;}}} | &euro; |euro sign |

|>|>|width:96%; !Symbols |
| !Symbol | !Character | !Description |
| {{{&copy;}}} | &copy; |copyright sign |
| {{{&deg;}}} | &deg; |degree sign |
| {{{&reg;}}} | &reg; |registered trade mark |
| {{{&trade;}}} | &trade; |trade mark sign |
| {{{&ordm;}}} | &ordm; |masculine ordinal indicator |
| {{{&ordf;}}} | &ordf; |feminine ordinal indicator |
| {{{&dagger;}}} | &dagger; |dagger |
| {{{&Dagger;}}} | &Dagger; |double dagger |
| {{{&bull;}}} | &bull; |bullet |
| {{{&spades;}}} | &spades; |spade |
| {{{&clubs;}}} | &clubs; |club |
| {{{&hearts;}}} | &hearts; |heart |
| {{{&diams;}}} | &diams; |diamond |

|>|>|width:96%; !Lines |
| !Symbol | !Character | !Description |
| {{{&macr;}}} | &macr; |overline |
| {{{&brvbar;}}} | &brvbar; |broken vertical bar |
| {{{&ndash;}}} | &ndash; |en dash |
| {{{&mdash;}}} | &mdash; |em dash |
| {{{&oline;}}} | &oline; |overline |
| {{{&lceil;}}} | &lceil; |left ceiling |
| {{{&rceil;}}} | &rceil; |right ceiling |
| {{{&lfloor;}}} | &lfloor; |left floor |
| {{{&rfloor;}}} | &rfloor; |right floor |

|>|>|width:96%; !Arrows |
| !Symbol | !Character | !Description |
| {{{&larr;}}} | &larr; |left arrow |
| {{{&uarr;}}} | &uarr; |up arrow |
| {{{&rarr;}}} | &rarr; |right arrow |
| {{{&darr;}}} | &darr; |down arrow |
| {{{&harr;}}} | &harr; |left right arrow |
| {{{&crarr;}}} | &crarr; |down arrow with corner leftwards / carriage return |
| {{{&lArr;}}} | &lArr; |left double arrow |
| {{{&uArr;}}} | &uArr; |up double arrow |
| {{{&rArr;}}} | &rArr; |right double arrow |
| {{{&dArr;}}} | &dArr; |down double arrow |
| {{{&hArr;}}} | &hArr; |left right double arrow |

|>|>|width:96%; !Punctuation |
| !Symbol | !Character | !Description |
| {{{&iexcl;}}} | &iexcl; |inverted exclamation mark |
| {{{&iquest;}}} | &iquest; |inverted question mark |
| {{{&uml;}}} | &uml; |diaeresis |
| {{{&acute;}}} | &acute; |acute accent |
| {{{&para;}}} | &para; |paragraph sign |
| {{{&sect;}}} | &sect; |section sign |
| {{{&cedil;}}} | &cedil; |cedilla |
| {{{&amp;}}} | &amp; |ampersand |
| {{{&apos;}}} | &apos; |apostrophe mark |
| {{{&circ;}}} | &circ; |circumflex accent |
| {{{&tilde;}}} | &tilde; |small tilde |
| {{{&hellip;}}} | &hellip; |horizontal ellipsis |

|>|>|width:96%; !Quotations |
| !Symbol | !Character | !Description |
| {{{&quot;}}} | &quot; |quotation mark |
| {{{&raquo;}}} | &raquo; |right double angle quotation mark |
| {{{&laquo;}}} | &laquo; |left double angle quotation mark |
| {{{&lsquo;}}} | &lsquo; |left single quotation mark|
| {{{&rsquo;}}} | &rsquo; |right single quotation mark |
| {{{&sbquo;}}} | &sbquo; |single low-9 quotation mark |
| {{{&ldquo;}}} | &ldquo; |left double quotation mark |
| {{{&rdquo;}}} | &rdquo; |right double quotation mark |
| {{{&bdquo;}}} | &bdquo; |double low-9 quotation mark |
| {{{&lsaquo;}}} | &lsaquo; |single left-pointing angle quotation mark |
| {{{&rsaquo;}}} | &rsaquo; |single right-pointing angle quotation mark |
}}}

{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("i")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
!!![[Image-Hints]]
{{{
img { margin:1em; } 
img { padding:1em; }
img { margin-left:3px;margin-right:3px } 
img { float:right }
}}}
!!!Tiddler Specific
{{{
#tiddlerHTML img { margin-left:3em;margin-right:3em }
}}}
!!!CSS Code in the tiddler
''This is CSS for vertical alignment and padding for the text put directly into a table cell in the tiddler itself as opposed to putting it in the ~StyleSheet''

{{{|<html><a href="http://img480.imageshack.us/img480/6435/CastleOnDanube.jpg" target="_blank"><img src="http://img480.imageshack.us/img480/7203/ParliamentHouseBudapest.jpg" border="0" alt="Free Image Hosting at www.ImageShack.us" /></a></html>|vertical-align:top;padding:1em;This HTML example uses a picture from a remote server as a link to a larger picture that is on a different remote server.|}}}

!!!Example
|<html><a href="http://img480.imageshack.us/img480/6435/CastleOnDanube.jpg" target="_blank"><img src="http://img480.imageshack.us/img480/7203/ParliamentHouseBudapest.jpg" border="0" alt="Free Image Hosting at www.ImageShack.us" /></a></html>|vertical-align:top;padding:1em;This HTML example uses a picture from a remote server as a link to a larger picture that is on a different remote server.|

/***
|Name|ImageSizePlugin|
|Source|http://www.TiddlyTools.com/#ImageSizePlugin|
|Version|1.2.1|
|Author|Eric Shulman|
|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,formatter|
|Requires||
|Overrides|'image' formatter|
|Description|adds support for resizing images|
This plugin adds optional syntax to scale an image to a specified width and height and/or interactively resize the image with the mouse.
!!!!!Usage
<<<
The extended image syntax is:
{{{
[img(w+,h+)[...][...]]
}}}
where ''(w,h)'' indicates the desired width and height (in CSS units, e.g., px, em, cm, in, or %). Use ''auto'' (or a blank value) for either dimension to scale that dimension proportionally (i.e., maintain the aspect ratio). You can also calculate a CSS value 'on-the-fly' by using a //javascript expression// enclosed between """{{""" and """}}""". Appending a plus sign (+) to a dimension enables interactive resizing in that dimension (by dragging the mouse inside the image). Use ~SHIFT-click to show the full-sized (un-scaled) image. Use ~CTRL-click to restore the starting size (either scaled or full-sized).
<<<
!!!!!Examples
<<<
{{{
[img(100px+,75px+)[images/meow2.jpg]]
}}}
[img(100px+,75px+)[images/meow2.jpg]]
{{{
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
}}}
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
{{tagClear{
}}}

<<<
!!!!!Revisions
<<<
2009.02.24 [1.2.1] cleanup width/height regexp, use '+' suffix for resizing
2009.02.22 [1.2.0] added stretchable images
2008.01.19 [1.1.0] added evaluated width/height values
2008.01.18 [1.0.1] regexp for "(width,height)" now passes all CSS values to browser for validation
2008.01.17 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.ImageSizePlugin= {major: 1, minor: 2, revision: 1, date: new Date(2009,2,24)};
//}}}
//{{{
var f=config.formatters[config.formatters.findByField("name","image")];
f.match="\\[[<>]?[Ii][Mm][Gg](?:\\([^,]*,[^\\)]*\\))?\\[";
f.lookaheadRegExp=/\[([<]?)(>?)[Ii][Mm][Gg](?:\(([^,]*),([^\)]*)\))?\[(?:([^\|\]]+)\|)?([^\[\]\|]+)\](?:\[([^\]]*)\])?\]/mg;
f.handler=function(w) {
	this.lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var floatLeft=lookaheadMatch[1];
		var floatRight=lookaheadMatch[2];
		var width=lookaheadMatch[3];
		var height=lookaheadMatch[4];
		var tooltip=lookaheadMatch[5];
		var src=lookaheadMatch[6];
		var link=lookaheadMatch[7];

		// Simple bracketted link
		var e = w.output;
		if(link) { // LINKED IMAGE
			if (config.formatterHelpers.isExternalLink(link)) {
				if (config.macros.attach && config.macros.attach.isAttachment(link)) {
					// see [[AttachFilePluginFormatters]]
					e = createExternalLink(w.output,link);
					e.href=config.macros.attach.getAttachment(link);
					e.title = config.macros.attach.linkTooltip + link;
				} else
					e = createExternalLink(w.output,link);
			} else 
				e = createTiddlyLink(w.output,link,false,null,w.isStatic);
			addClass(e,"imageLink");
		}

		var img = createTiddlyElement(e,"img");
		if(floatLeft) img.align="left"; else if(floatRight) img.align="right";
		if(width||height) {
			var x=width.trim(); var y=height.trim();
			var stretchW=(x.substr(x.length-1,1)=='+'); if (stretchW) x=x.substr(0,x.length-1);
			var stretchH=(y.substr(y.length-1,1)=='+'); if (stretchH) y=y.substr(0,y.length-1);
			if (x.substr(0,2)=="{{")
				{ try{x=eval(x.substr(2,x.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			if (y.substr(0,2)=="{{")
				{ try{y=eval(y.substr(2,y.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			img.style.width=x.trim(); img.style.height=y.trim();
			config.formatterHelpers.addStretchHandlers(img,stretchW,stretchH);
		}
		if(tooltip) img.title = tooltip;

		// GET IMAGE SOURCE
		if (config.macros.attach && config.macros.attach.isAttachment(src))
			src=config.macros.attach.getAttachment(src); // see [[AttachFilePluginFormatters]]
		else if (config.formatterHelpers.resolvePath) { // see [[ImagePathPlugin]]
			if (config.browser.isIE || config.browser.isSafari) {
				img.onerror=(function(){
					this.src=config.formatterHelpers.resolvePath(this.src,false);
					return false;
				});
			} else
				src=config.formatterHelpers.resolvePath(src,true);
		}
		img.src=src;
		w.nextMatch = this.lookaheadRegExp.lastIndex;
	}
}

config.formatterHelpers.addStretchHandlers=function(e,stretchW,stretchH) {
	e.title=((stretchW||stretchH)?'DRAG=stretch/shrink, ':'')
		+'SHIFT-CLICK=show full size, CTRL-CLICK=restore initial size';
	e.statusMsg='width=%0, height=%1';
	e.style.cursor='move';
	e.originalW=e.style.width;
	e.originalH=e.style.height;
	e.minW=Math.max(e.offsetWidth/20,10);
	e.minH=Math.max(e.offsetHeight/20,10);
	e.stretchW=stretchW;
	e.stretchH=stretchH;
	e.onmousedown=function(ev) { var ev=ev||window.event;
		this.sizing=true;
		this.startX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
		this.startY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
		this.startW=this.offsetWidth;
		this.startH=this.offsetHeight;
		return false;
	};
	e.onmousemove=function(ev) { var ev=ev||window.event;
		if (this.sizing) {
			var s=this.style;
			var currX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
			var currY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
			var newW=(currX-this.offsetLeft)/(this.startX-this.offsetLeft)*this.startW;
			var newH=(currY-this.offsetTop )/(this.startY-this.offsetTop )*this.startH;
			if (this.stretchW) s.width =Math.floor(Math.max(newW,this.minW))+'px';
			if (this.stretchH) s.height=Math.floor(Math.max(newH,this.minH))+'px';
			clearMessage(); displayMessage(this.statusMsg.format([s.width,s.height]));
		}
		return false;
	};
	e.onmouseup=function(ev) { var ev=ev||window.event;
		if (ev.shiftKey) { this.style.width=this.style.height=''; }
		if (ev.ctrlKey)  { this.style.width=this.originalW; this.style.height=this.originalH; }
		this.sizing=false;
		clearMessage();
		return false;
	};
	e.onmouseout=function(ev) { var ev=ev||window.event;
		this.sizing=false;
		clearMessage();
		return false;
	};
}
//}}}
!!!&nbsp;ImagesExternal
{{tablecenter{{{borderless{
|vertical-align:middle;[img[http://img407.imageshack.us/img407/6205/40pxbroomiconsvgyo3.png]]|vertical-align:middle;[img[http://img407.imageshack.us/img407/4586/mergearrowsmp9.gif]]|vertical-align:middle;[img[http://img131.imageshack.us/img131/7268/spotlightclockuw7.gif]]|
}}}
!!!Code
{{{
{{tablecenter{{{borderless{
|vertical-align:middle;[img[http://img407.imageshack.us/img407/6205/40pxbroomiconsvgyo3.png]]|vertical-align:middle;[img[http://img407.imageshack.us/img407/4586/mergearrowsmp9.gif]]|vertical-align:middle;[img[http://img131.imageshack.us/img131/7268/spotlightclockuw7.gif]]|
}}}
<<importTiddlers inline>>
/%<<include "http://tiddlyspot.com/science/index.html">>%/
@@color:#C06;''&raquo; &raquo;'' @@@@color:#60F;''For newcomers to ~TiddlyWiki have a look at OverView.''@@ @@color:#C06;''&raquo; &raquo;'' @@
<part index2>
{{tablecenter{
<HTML><table align="center" cellpadding="1" bgcolor="white"><tr align="center"><td colspan="3"> @@color:#C06;''Quick Reference''@@</td></tr><tr align="left" valign="top"><td> [[OverView]] 

[[Formatting the Page|FormattingThePage]]
[[Formatting Tiddlers|FormattingTiddlers]]
[[FormattingText]]

[[HowToUseLinks]]
[[How To Use Tags|Tags]]</td><td>'' [[Glossary]] ''

[[Plugins|ThirdPartyPlugins]]
[[Macros Built-in]]
[[Macros Other]]

[[HTML]] ''&raquo;<<tag non-keyboard>>''
[[JavaScript]]

</td><td>''<<tiddler CSSMenu>>''

[[Hints and Kinks - CSS]]
[[Hints and Kinks - Tweaks]]
[[CSSColors]


''<<MyGroup>>&raquo; [[Explained|MyGroupExplained]]''
</td></tr></table></HTML>}}}</part>@@color:#C06;''&laquo; &laquo;'' @@@@color:#60F;''For those who just need reference material all of this is in the ~MainMenu at left''@@ @@color:#C06;''&laquo; &laquo;''@@
{{tablecenter{
|+++[More TiddlyWiki Help Sites]<<tiddler [[TWHelpSiteLinks]]>>===|
}}}

{{twocolumns{<html><hide linebreaks><ul><li><a href="http://tiddlywiki.org/wiki/Category:Activities" target="_blank" title="Category:Activities">Activities</a> (1 member)</li>

<li><a href="http://tiddlywiki.orghttp://tiddlywiki.org/wiki/Category:Adaptations" target="_blank" target="_blank" title="Category:Adaptations">Adaptations</a> (13 members)</li>

<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Adaptors&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Adaptors (not yet written)">Adaptors</a> (12 members)</li>

<li><a href="http://tiddlywiki.orghttp://tiddlywiki.org/wiki/Category:Approved" target="_blank" title="Category:Approved">Approved</a> (3 members)</li>
<li><a href="http://tiddlywiki.orghttp://tiddlywiki.org/wiki/Category:Basics" target="_blank" title="Category:Basics">Basics</a> (7 members)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Browser_Issues" target="_blank" title="Category:Browser Issues">Browser Issues</a> (7 members)</li>
<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Browsers&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Browsers (not yet written)">Browsers</a> (3 members)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Color" target="_blank" title="Category:Color">Color</a> (2 members)</li>
<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Community&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Community (not yet written)">Community</a> (2 members)</li>

<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Concepts&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Concepts (not yet written)">Concepts</a> (1 member)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Configuration" target="_blank" title="Category:Configuration">Configuration</a> (13 members)</li>
<li><a href="http://tiddlywiki.org/wiki/Category:Coordination" target="_blank" title="Category:Coordination">Coordination</a> (2 members)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Core_Macros" target="_blank" title="Category:Core Macros">Core Macros</a> (16 members)</li>
<li><a href="http://tiddlywiki.org/wiki/Category:Custom_Macros" target="_blank" title="Category:Custom Macros">Custom Macros</a> (2 members)</li>

<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Customization&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Customization (not yet written)">Customization</a> (3 members)</li>

<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Customization_Plugins&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Customization Plugins (not yet written)">Customization Plugins</a> (1 member)</li>

<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Design_Patterns&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Design Patterns (not yet written)">Design Patterns</a> (1 member)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Developer_Tools" target="_blank" title="Category:Developer Tools">Developer Tools</a> (5 members)</li>
<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Development&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Development (not yet written)">Development</a> (1 member)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Disambiguation" target="_blank" title="Category:Disambiguation">Disambiguation</a> (8 members)</li>
<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Discussion_Templates&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Discussion Templates (not yet written)">Discussion Templates</a> (1 member)</li>

<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Display_FAQ&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Display FAQ (not yet written)">Display FAQ</a> (1 member)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Errors" target="_blank" title="Category:Errors">Errors</a> (5 members)</li>
<li><a href="http://tiddlywiki.org/wiki/Category:FAQ" target="_blank" title="Category:FAQ">FAQ</a> (60 members)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:FAQ_Section" target="_blank" title="Category:FAQ Section">FAQ Section</a> (9 members)</li>
<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Formatting&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Formatting (not yet written)">Formatting</a> (1 member)</li>

<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:GTD&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:GTD (not yet written)">GTD</a> (3 members)</li>

<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Generated_Content&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Generated Content (not yet written)">Generated Content</a> (1 member)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Getting_Started" target="_blank" title="Category:Getting Started">Getting Started</a> (4 members)</li>
<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Hacks&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Hacks (not yet written)">Hacks</a> (1 member)</li>

<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Help&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Help (not yet written)">Help</a> (4 members)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:How_To" target="_blank" title="Category:How To">How To</a> (17 members)</li>
<li><a href="http://tiddlywiki.org/wiki/Category:Icon_Templates" target="_blank" title="Category:Icon Templates">Icon Templates</a> (6 members)</li>

<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Images_without_source&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Images without source (not yet written)">Images without source</a> (1 member)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Incomplete" target="_blank" title="Category:Incomplete">Incomplete</a> (99 members)</li>
<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:InfoBox_Templates&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:InfoBox Templates (not yet written)">InfoBox Templates</a> (1 member)</li>

<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:MPTW_Plugins&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:MPTW Plugins (not yet written)">MPTW Plugins</a> (1 member)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Macros" target="_blank" title="Category:Macros">Macros</a> (29 members)</li>
<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:MediaWiki&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:MediaWiki (not yet written)">MediaWiki</a> (2 members)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Meta-Templates" target="_blank" title="Category:Meta-Templates">Meta-Templates</a> (2 members)</li>
<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Navigation&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Navigation (not yet written)">Navigation</a> (1 member)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Needs_Review" target="_blank" title="Category:Needs Review">Needs Review</a> (54 members)</li>
<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Platforms&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Platforms (not yet written)">Platforms</a> (1 member)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Plugin" target="_blank" title="Category:Plugin">Plugin</a> (1 member)</li>
<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:PluginIdea&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:PluginIdea (not yet written)">PluginIdea</a> (1 member)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Plugins" target="_blank" title="Category:Plugins">Plugins</a> (25 members)</li>
<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Portals&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Portals (not yet written)">Portals</a> (2 members)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Project_Ideas" target="_blank" title="Category:Project Ideas">Project Ideas</a> (2 members)</li>
<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Server-Sides&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Server-Sides (not yet written)">Server-Sides</a> (9 members)</li>

<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Server_Adaptors&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Server Adaptors (not yet written)">Server Adaptors</a> (2 members)</li><li><a href="http://tiddlywiki.org/wiki/Category:Shadow_Tiddlers" target="_blank" title="Category:Shadow Tiddlers">Shadow Tiddlers</a> (18 members)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Stakeholders" target="_blank" title="Category:Stakeholders">Stakeholders</a> (2 members)</li>
<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:System&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:System (not yet written)">System</a> (1 member)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Templates" target="_blank" title="Category:Templates">Templates</a> (34 members)</li>
<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:TiddlyWiki_Markup&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:TiddlyWiki Markup (not yet written)">TiddlyWiki Markup</a> (1 member)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Tips_%26_Tricks" target="_blank" title="Category:Tips &amp; Tricks">Tips &amp; Tricks</a> (5 members)</li>

<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:Tools&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:Tools (not yet written)">Tools</a> (7 members)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Troubleshooting" target="_blank" title="Category:Troubleshooting">Troubleshooting</a> (6 members)</li>
<li><a href="http://tiddlywiki.org/index.php?target="_blank" title=Category:UI&amp;action=edit&amp;redlink=1" class="new" target="_blank" title="Category:UI (not yet written)">UI</a> (1 member)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:User_Templates" target="_blank" title="Category:User Templates">User Templates</a> (1 member)</li>
<li><a href="http://tiddlywiki.org/wiki/Category:Using_TiddlyWiki" target="_blank" title="Category:Using TiddlyWiki">Using TiddlyWiki</a> (24 members)</li>

<li><a href="http://tiddlywiki.org/wiki/Category:Wiki_Markup" target="_blank" title="Category:Wiki Markup">Wiki Markup</a> (5 members)</li>
</ul></html>

/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.5|
|Author|Eric Shulman|
|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|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2009.04.11 [1.9.5] pass current tiddler object into wrapper code so it can be referenced from within 'onclick' scripts
2009.02.26 [1.9.4] in $(), handle leading '#' on ID for compatibility with JQuery syntax
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 5, date: new Date(2009,4,11)};

config.formatters.push( {
	name: "inlineJavascript",
	match: "\\<script",
	lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\n)*?)\\\")?(?: key=\\\"((?:.|\\n)*?)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",

	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) {
			var src=lookaheadMatch[1];
			var label=lookaheadMatch[2];
			var tip=lookaheadMatch[3];
			var key=lookaheadMatch[4];
			var show=lookaheadMatch[5];
			var code=lookaheadMatch[6];
			if (src) { // external script library
				var script = document.createElement("script"); script.src = src;
				document.body.appendChild(script); document.body.removeChild(script);
			}
			if (code) { // inline code
				if (show) // display source in tiddler
					wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
				if (label) { // create 'onclick' command link
					var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",wikifyPlainText(label));
					var fixup=code.replace(/document.write\s*\(/gi,'place.bufferedHTML+=(');
					link.code="function _out(place,tiddler){"+fixup+"\n};_out(this,this.tiddler);"

					link.tiddler=w.tiddler;
					link.onclick=function(){
						this.bufferedHTML="";
						try{ var r=eval(this.code);
							if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)
								var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);
							if(this.bufferedHTML.length)
								s.innerHTML=this.bufferedHTML;
							if((typeof(r)==="string")&&r.length) {
								wikify(r,s,null,this.tiddler);
								return false;
							} else return r!==undefined?r:false;
						} catch(e){alert(e.description||e.toString());return false;}
					};
					link.setAttribute("title",tip||"");
					var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
					URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
					URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
					link.setAttribute("href",URIcode);
					link.style.cursor="pointer";
					if (key) link.accessKey=key.substr(0,1); // single character only
				}
				else { // run script immediately
					var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
					var c="function _out(place,tiddler){"+fixup+"\n};_out(w.output,w.tiddler);";
					try	 { var out=eval(c); }
					catch(e) { out=e.description?e.description:e.toString(); }
					if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
				}
			}
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
	}
} )
//}}}

// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
	if(limit > 0) text = text.substr(0,limit);
	var wikifier = new Wikifier(text,formatter,null,tiddler);
	return wikifier.wikifyPlain();
}
//}}}

// // GLOBAL FUNCTION: $(...) -- 'shorthand' convenience syntax for document.getElementById()
//{{{
if (typeof($)=='undefined') { function $(id) { return document.getElementById(id.replace(/^#/,'')); } }
//}}}
This is a list of plugins installed on the ~TiddlyTools site http://www.tiddlytools.com/
''Plugins listed below in bold are installed on this site.''

!!!!basics
* HTMLFormattingPlugin - formatter changes
* InlineJavascriptPlugin
* NestedSlidersPlugin
!!!!navigation
* SinglePageModePlugin
* CollapseTiddlersPlugin and CollapsedTemplate
* RearrangeTiddlersPlugin
* BreadcrumbsPlugin
* TiddlerGroupsPlugin
* GotoPlugin
* TableOfContentsPlugin
* SearchOptionsPlugin
!!!!editing
* TextAreaPlugin
* CopyTiddlerPlugin
* SaveOnExitPlugin
!!!!file I/O
* NewDocumentPlugin
* ImportTiddlersPlugin
* ExportTiddlersPlugin
* _ UploadPlugin
!!!!authoring
* AliasPlugin
* AttachFilePlugin - formatter changes
* AttachFilePluginFormatters - formatter changes
* AutoTaggerPlugin
* CalendarPlugin
* CheckboxPlugin
* DatePlugin
* DeliciousPlayTaggerPlugin
* DisableWikiLinksPlugin
* EditTiddlerPlugin
* PlayerPlugin
* QuoteOfTheDayPlugin
* TagCloudPlugin
* UnformattedTextPlugin
!!!!themes
* SelectStylesheetPlugin
* [[StyleSheet]]
* [[StyleSheetAdjustments]] - add {{{viewer pre background/border}}}
* [[BrightText]]
* [[Edge of Night]] (and backgrounds)
* [[Blackout]]
* [[KubrickStyleSheet]] and [[KubrickPageTemplate]]
* [[Let's Get Tanked!]]
* [[Plain]]
* [[Textures]] (and backgrounds)
* [[TotallyTiddlers]] and [[TotallyTiddlersInit]]
* [[Woodshop]] (and backgrounds)
* PageTemplate
* ViewTemplate
* EditTemplate
!!!!extras
* _ TidIDEPlugin (tag:TidIDEPackage)
* _ TiddlyCardsPlugin (tag: TiddlyCardsPackage)
* _ ReminderMacros
!!!!scripts
* TBD
!!!!content
* _ [[Welcome]]
* _ [[About]]
* _ [[Download]]
* _ [[Contact]]
* _ [[LegalStatements]]
* _ faq
* _ news
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;InstallingPlugins^^<<tiddler CloseThisOpen with: ThirdPartyPlugins  '« back'>>|<<toolbar editTiddler>>» ^^>>
Plugins are JavaScript and after you save and reload they will be installed and running on your ~TiddleyWiki.  It is advisable to install them one at a time and test them thoroughly before installing another. You can use the import facility if the ~TiddlyWiki versions are compatible but it is still best to install them one at a time.
<<<
To install manually (recommended)
#Put the selected plugin tiddler into 'edit'  or 'view' mode.
#Right click in the body section and click 'Select All' from the menu.
#Right click in the body section again and Click 'Copy'
#Paste this into your own new tiddler'
#Do the same with the Title and the tag 'systermConfig' if you wish.
#Save your ~TiddlyWiki and reload; the new plugin is now installed and running.

<<<
Note: if you have any trouble contact the author or Google Groups http://groups.google.com/group/TiddlyWiki for help.
!!!<<gradient horiz #abf #ffffff>>&nbsp;A handy tool for copying and pasting>>
<<<
''Clipomatic is a clipboard cache program. It remembers what was copied to the clipboard and allows you to retrieve it, even after you've copied something else to the clipboard.''  It has a working cache that can be adjusted to hold any number of cuts or copies, and a permanent clipset to hold your favorite bits and pieces of text. It is perfect for ~TiddlyWiki where copying and pasting is done so often.  It works on any modern version of Windows.

http://www.mlin.net/Clipomatic.shtml
<<<
+++[read more...]
<<<
There is a maximum number of items that can be cached. By default, this is 10. It can be changed in the Settings DIalog. When the maximum number of items has been reached and a new item is copied, the last item falls off a cliff as the other items get pushed down.

''Clip Sets''
Clip sets are a powerful feature of Clipomatic that allow you to save the cache to a file or load other caches. This allows you to switch the entire cache as needed. For instance, I keep a set of clips useful for HTML authoring and a separate set for regular clips. When I go to write a web page, I switch to the HTML authoring cache. When I’ve finished, I switch back.

''The Permanent Clipset''
The Permanent Clipset is a clipset that will be separately displayed in Clipomatic’s menu. The items in this clipset will not be affected by changes in the clipboard; they merely allow you to quickly paste common items. For instance, you could save your name, address, and phone number, and be able to paste them very quickly.
<<<
===

!!!<<gradient horiz #abf #ffffff>>&nbsp;&nbsp;End>>
/***
|Name:|InstantTimestampPlugin|
|Source|http://instanttimestamp.tiddlyspot.com/|
|Documentation|TBA|
|Version|1.0.5 (17-Jan-2007)|
|Author|SimonBaird|
|License|Creative Commons Attribution-ShareAlike 2.5 License|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|NA|
|Overrides|NA|
|Description|Date Stamp|
!Description
If you enter {ts} in your tiddler content (without the spaces) it will be replaced with a timestamp when you save the tiddler. Full list:
{{{
* {ts} or {t} -> timestamp
* {ds} or {d} -> datestamp
* !ts or !t at start of line -> !!timestamp
* !ds or !d at start of line -> !!datestamp
}}}
(I added the extra ! since that's how I like it. Remove it from translations below if required)
!Notes
* Change the timeFormat and dateFormat below to suit your preference.
* See also AutoCorrectPlugin
!History
* 17-Jan-07, version 1.0.5
** added fields param to saveTiddler method needed in TW 2.1+
* 06-Apr-06, version 1.0.4
** removed the AutoCorrect stuff and put it in AutoCorrectPlugin
* 05-Apr-06, version 1.0.3
** now have exclusion by tag and tiddler name, probably less important here than in AutoCorrectPlugin
* 05-Apr-06, version 1.0.2
** put matches into array to and eval them to allow generic substitutions
* 05-Apr-06, version 1.0.1
** added ds for datestamp as suggested by DanielBaird
** made case insensitive
** Added translation for !t at start of line
* 05-Apr-06, version 1.0.0
** written after suggestion by Achim Wessling 
!Code
***/
//{{{

config.InstantTimestamp = {

	// adjust to suit
	timeFormat: '0DD.0MM.YY 0hh:0mm',
	dateFormat: '0DD.0MM.YY',

	translations: [
		[/^!ts?$/img,  "'!!'+now.formatString(config.InstantTimestamp.timeFormat)"],
		[/^!ds?$/img,  "'!!'+now.formatString(config.InstantTimestamp.dateFormat)"],
		[/\{ts?\}/ig, "now.formatString(config.InstantTimestamp.timeFormat)"],
		[/\{ds?\}/ig, "now.formatString(config.InstantTimestamp.dateFormat)"]
	],

	excludeTags: [
		"noAutoCorrect",
		"html",
		"CSS",
		"css",
		"systemConfig",
		"zsystemConfig",
		"Plugins",
		"Plugin",
		"plugins",
		"plugin",
		"javascript",
		"code"

	],

	excludeTiddlers: [
		"StyleSheet",
		"StyleSheetLayout",
		"StyleSheetColors",
		"StyleSheetPrint"
	]

}; 

if (!Array.prototype.contains)
	Array.prototype.contains = function(item) {
		return (this.find(item) != null);
	};

if (!Array.prototype.containsAny)
	Array.prototype.containsAny = function(items) {
		for (var i=0;i<items.length;i++)
			if (this.contains(items[i]))
				return true;
		return false;
	};

TiddlyWiki.prototype.saveTiddler_mptw_instanttimestamp = TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags,fields) {

	tags = (typeof(tags) == "string") ? tags.readBracketedList() : tags;
	var conf = config.InstantTimestamp;

	if ( !tags.containsAny(conf.excludeTags) && !conf.excludeTiddlers.contains(newTitle) ) {

		var now = new Date();
		var trans = config.InstantTimestamp.translations;
		for (var i=0;i<trans.length;i++) {
			newBody = newBody.replace(trans[i][0], eval(trans[i][1]));
		}
	}

	return this.saveTiddler_mptw_instanttimestamp(title,newTitle,newBody,modifier,modified,tags,fields);
}

//}}}
<<<
http://tinyurl.com/yqbsjz @@color:#C06;''&raquo; &raquo;'' @@ Rotating Images
http://tinyurl.com/2jqxm2 @@color:#C06;''&raquo; &raquo;'' @@  Customizing Print Styles
http://tinyurl.com/37u6ho @@color:#C06;''&raquo; &raquo;'' @@  Eric comparing pure script and ForEach methods
http://tinyurl.com/38drm6 @@color:#C06;''&raquo; &raquo;'' @@ Dynamic Default Tiddler
http://tinyurl.com/3xm3jw @@color:#C06;''&raquo; &raquo;'' @@ No editing in TW possible after upload?
http://tinyurl.com/2y5r2a @@color:#C06;''&raquo; &raquo;'' @@  Parse a tiddler's content an create a file from it.
http://tinyurl.com/3dexgy @@color:#C06;''&raquo; &raquo;'' @@ Timeline question
http://tinyurl.com/2bwb9e @@color:#C06;''&raquo; &raquo;'' @@ Scrollbars for tiddlers and popups
http://tinyurl.com/3xj6bo @@color:#C06;''&raquo; &raquo;'' @@ Dynamic Tiddler Titles
http://tinyurl.com/2xvow6 @@color:#C06;''&raquo; &raquo;'' @@ E.A.S.E and  easyFormat plugins
http://tinyurl.com/2utgpp @@color:#C06;''&raquo; &raquo;'' @@  Close one tiddler open another
http://tinyurl.com/5y5678 @@color:#C06;''&raquo; &raquo;'' @@  Macro in <div>

http://tinyurl.com/4oqmum @@color:#C06;''&raquo; &raquo;'' @@ Disable strikethrough plugin
http://firefoxprivileges.tiddlyspot.com/  @@color:#C06;''&raquo; &raquo;'' @@ Will soon be important!!
<<<
<<slider 1 [[AdvancedOptions]] '+advanced options'>>

[img[http://img512.imageshack.us/img512/3925/iconflagfrancewe3.jpg][http://fr.wikipedia.org/wiki/TiddlyWiki]]~~+++[français]
http://groups.google.com/group/TiddlyWikiFR
===

[img[http://img517.imageshack.us/img517/8656/iconflaggermanybp5.jpg]]&nbsp;&nbsp;[img[http://img512.imageshack.us/img512/3925/iconflagfrancewe3.jpg][http://fr.wikipedia.org/wiki/TiddlyWiki]]&nbsp;&nbsp;[img[http://img509.imageshack.us/img509/1978/spainflagiconjk5.jpg][http://es.wikipedia.org/wiki/TiddlyWiki]]




!!!<<gradient horiz #fc3 #fff>>[[Intro|IntroFormattingPage]]^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>

''Cascading Style Sheets (CSS) is a simple mechanism for adding style (e.g. fonts, colors, spacing) to Web documents.''

@@color:#04b;''These are actual style sheets and templates that determine the overall look of this page.'' @@
|vertical-align:middle;[img[http://img154.imageshack.us/img154/8302/processingorderdoneio3.jpg]]|padding:0px;<<gradient horiz #fff #FCF>><<tiddler [[./para2]]>>>>|

@@color:#04b;''For information on CSS go here:''<<tiddler CSSMenu>>''or here'' http://www.w3schools.com/css/@@


<part para2 hidden>
*The ~TiddlyWiki page is processed roughly in the order shown.
*~StyleSheet is for user customization so that the default style sheets need not be changed.
*~StyleSheetColors allows for easy color style changes while ~StyleSheetLayout is self-explanatory.
*~ViewTemplate controls the look of the tiddler display.
*~PageTemplate pulls all of the elements of the page together to create a pleasant visual effect.
*~EditTemplate controls the look of the editing screen for all.




</part>
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[IntroImages]]^^<<tiddler CloseThisOpen with: FormattingImages  '« back'>>|<<toolbar editTiddler>>» ^^>>
!!!!!<<gradient horiz #abf #ffffff>>&nbsp;Images and text>>

 @@color:#C06;''&raquo; &raquo;'' @@ +++[See padding around images]
----
This will automatically add left AND right padding to every image that
appears inside a tiddler's 'viewer' area.(floating or otherwise).
<<<
In your [[StyleSheet]] add this:
   {{{.viewer img { padding-left:1em; padding-right:1em; }}}}
or
   {{{.viewer img { padding:0em 1em 0em 1em; }}}}
<<<
To adjust right and left padding independently of one another put the below in your ~StyleSheet
<<<
{{{.leftpad img { padding-left:1em; padding-right:0em; }}}}
{{{.rightpad img { padding-right:1em; padding-left:0em; } }}}

Then in the tiddler put:
{{{
{{rightpad{[img[yourimage.jpg]]}}}
}}}
<<<
===

----
Image in a borderless table@@position:relative;+++^35em^[see the code]
!!!!!<<gradient horiz #abf #ffffff>>&nbsp;code>>
<<<
{{{{{borderlessL{
|bgcolor:#fcf;[img[Spiral Galaxy NGC 4414|http://img243.imageshack.us/img243/6527/spiral75hfc9.gif][http://img183.imageshack.us/img183/2406/m81deephallas720ln0.jpg]]<br>&nbsp;&nbsp;@@color:#c06;Spiral Galaxy M81@@|bgcolor:#fcf;width:25em;~TiddlyWiki, being a single file, is best utilized by storing images elsewhere. Below is an image and the code to present it. In this case it also includes a tooltip and link to a larger version of the image.|
}}}

<<<
!!!!!<<gradient horiz #abf #ffffff>>&nbsp;For the ~StyleSheet>>
<<<
Borderless code for left justify
{{{.borderlessL, .borderlessL table, .borderlessL td, .borderlessL tr, .borderlessL th, .borderlessL tbody
	{ border:0 !important; margin:0 !important; padding:0 !important; td.vertical-align:top !important;margin-left: 0 !important; margin-right: auto !important; padding:7px !important;}
}}}
<<<
===@@
{{borderlessL{
|bgcolor:#fcf;[img[Spiral Galaxy NGC 4414|http://img243.imageshack.us/img243/6527/spiral75hfc9.gif][http://img183.imageshack.us/img183/2406/m81deephallas720ln0.jpg]]<br>&nbsp;&nbsp;@@color:#c06;Spiral Galaxy M81@@|bgcolor:#fcf;width:25em;~TiddlyWiki, being a single file, is best utilized by storing images elsewhere. Here is an image and the code to present it. In this case it also includes a tooltip and link to a larger version of the image.|
}}}
|bgcolor:#fcf;width:25em;line-height:12pt;<<tiddler ./roseby>>|<<tiddler ./code>>|
@@color:#C06;''&raquo; &raquo;'' @@ Another way
|bgcolor:#fcf;width:25em;line-height:12pt;<<tiddler ./roseby2>>|<<tiddler ./code2>>|


<part roseby hidden>
{{textjustify{

'Tis but thy name that is my enemy; Thou art thyself, though not a Montague. What's Montague? It is nor hand, nor foot, Nor arm, nor face, nor any other part Belonging to a man. O, be some other name!

{{imgfloatright{[img[Rose-Volksgarten Vienna |http://img405.imageshack.us/img405/6018/therose75hnr9.gif][http://img522.imageshack.us/img522/396/1001351800wrn7.gif]]<br>@@padding:0.8em;@@@@color:#00f;^^Rose of Vienna^^@@}}}[[What's in a name?|http://www.webpdf.com/Download/SHAKESPR/TRAGEDY/RMEOJLET.PDF]] that which we call a rose by any other name would smell as sweet; So Romeo would, were he not Romeo call'd, Retain that dear perfection which he owes without that title Romeo, doff thy name; And for that name, which is no part of thee, Take all myself.
}}}
</part>

<part roseby2 hidden>

{{textjustify{
'Tis but thy name that is my enemy; Thou art thyself, though not a Montague. What's Montague? It is nor hand, nor foot, Nor arm, nor face, nor any other part Belonging to a man. O, be some other name!

[>img[Rose-Volksgarten Vienna |http://img405.imageshack.us/img405/6018/therose75hnr9.gif][http://img522.imageshack.us/img522/396/1001351800wrn7.gif]]What's in a name? that which we call a rose by any other name would smell as sweet; So Romeo would, were he not Romeo call'd, Retain that dear perfection which he owes without that title Romeo, doff thy name; And for that name, which is no part of thee, Take all myself.
}}}
</part>
<part code hidden>

!!!!!<<gradient horiz #abf #ffffff>>&nbsp;CSS Code>>
{{{{{imgfloatright{[img[Rose-Volksgarten Vienna |http://img405.imageshack.us/img405/6018/therose75hnr9.gif]]}}}
}}}
!!!!!<<gradient horiz #abf #ffffff>>For the ~StyleSheet>>
Using CSS allows much more control such as padding, margins, and borders.
{{{.imgfloatleft{float:left;}
.imgfloatright{float:right;padding:5px}
.imgfloatcenter{float:center;}
}}}
</part>
<part code2 hidden>
!!!!!<<gradient horiz #abf #ffffff>>&nbsp;~TiddlyWiki Code>>

{{{[>img[Rose-Volksgarten Vienna |http://img405.imageshack.us/img405/6018/therose75hnr9.gif]]
}}}
!!!!!<<gradient horiz #abf #ffffff>>~TiddlyWiki Styling>>
While this method is quick and easy the result is not as pleasant.
{{{[>img[Rose-Volksgarten Vienna |http://img405.imageshack.us/img405/6018/therose75hnr9.gif]]
[<img[Rose-Volksgarten Vienna |http://img405.imageshack.us/img405/6018/therose75hnr9.gif]]

}}}
</part>
!!!!<<gradient horiz #abf #fff>>&nbsp;From another source>>
^^Or how to keep from doing things more than once^^
''The information below (9: and 10:) is an excerpt from the tiddler'' HowToUseLinks which pertains to images. This method of taking parts of one tiddler to use in another is accomplished by using the PartTiddlerPlugin. You can find an explanation how to do this+++[here.]
<<<
<<tiddler PartPlugin>>

<<<
===


<<tiddler [[UsingLinks/images]]>>
!!!<<gradient horiz #abf #fff>>&nbsp;Image Tips>>
TW Help is enhanced by the HTMLFormattingPlugin which allows mixing of HTML and ~TiddlyWiki formatting.

+++[Resizing images on the fly]
<<<
If you can't control the size of an image, for whatever reason, you can resize it on the fly as below.  Just keep in mind the loading times will be the same as the large image.
<<<
<<tiddler ResizingImages>>
===

+++[A few image hints]
<<tiddler Image-Hints>>

===


<html><a href="http://tools.dynamicdrive.com/imageoptimizer/" target="_blank"><img src="http://tools.dynamicdrive.com/imageoptimizer/export/optimizelogo2.jpg" border="0" alt="Free online tool- optimize your gifs, jpg, and png images" /></a></html>

----
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[Linking in TiddlyWiki|IntroLinks]]^^<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>

!!!!!<<gradient horiz #04b #fff>>&nbsp;@@color:#fff;Launching Programs from ~TiddlyWiki@@>>

|padding:0px;<<gradient horiz #fff #fcf>>&nbsp; @@color:#c06;''&raquo; &raquo;'' @@ Ever wanted to launch a program or document from a ~TiddlyWiki?{{unboldlink{[[Try the launch tab |Launch Application Plugin]]}}}>>|

!!!<<gradient horiz #fc3 #fff>>&nbsp;IntroMemorize^^<<tiddler CloseThisOpen with: MemorizeTables  '« back'>>|<<toolbar editTiddler>>» ^^>>

{{firstletter textright{
@@color:#c06;M@@
}}} ''emorizable tables'' are tables on a web page that assist you with memorizing their content.   This is done by a flashcard process or matching process.

@@color:#c06;''NEW!''@@ [[Memorizable URLs|http://memorizable.com/Memorizable_Urls]]

Requirements: MemorizablePlugin

|Think about the flashcards you've used to study for tests. Memorizable tables work in a very similar way. You look at something, then guess the "answer" in your head. If your guess was correct, you're done with that card. If your guess was incorrect, you put the card aside to use again until you're sure you've memorized it.|
{{tablecenter table{
|''References:'' <br>[[Group discussion|http://tinyurl.com/34fjk6]] <br>  MemorizablePlugin<br> http://memorizable.com/ <br>http://memorizable.com/Help <br> http://memorizable.com/Code <br> http://memorizable.com/Code_Guidelines|

!!!<<gradient horiz #fc3 #fff>>&nbsp; [[IntroTags]]^^<<tiddler CloseThisOpen with: Tags  '« back'>>|<<toolbar editTiddler>>» ^^>>
*''Few people have given tags more thought than Simon Baird with his ''~TagglyTagging'' concept. A look is worth a thousand words'' <<smiley ;-)>> [[TagglyTagging|http://mptw.tiddlyspot.com/#TagglyTagging]]
!!!Viewing tagged tiddlers
+++[+See this]
----
To view a 'popup list' of all tiddlers with a specific tag, you can
write:
   {{{<<tag tagvalue>>}}}
   {{{(e.g., <<tag journal>>)}}}
This creates a command link that, when clicked, shows the list of
tiddlers, along with two additional commands: "open all", and "open
tag XYZ".

Alternatively, if you want to display a bullet list of all tiddlers
with a specific tag, you can write:
{{{<<tagging tagvalue>>}}}
{{{(e.g., <<tagging journal>>)}}}
This generates the bullet list 'inline', so that links to all the
journal tiddlers are immediately displayed.  Note that this macro does
not also include the extra 'open all' and 'open tag XYZ' commands that
are shown in the popup list. 
===

!!!<<gradient horiz #abf #fff>>&nbsp;Basics>>

''When the tidder is in edit mode'' you can see the tags on a tiddler and also a drop down a list of tags that have already been assigned to other tiddlers.  You can then click on 'tags' to see what has been assigned already.  If your tag list is too long to use easily, put the following code in your StyleSheet.
{{{
.popup {
 max-height:275px;
 min-height:auto;
 width: auto;
 overflow: auto;
 margin:auto;
} 
}}}

''Tags should be single spaced and tags with spaces in their name should be enclosed in double square brackets.''

''There are three basic identifiers for'' tiddlers in ~TiddlyWiki that determine the usfulness of the contained information and therefore the success or failure of its use. @@color:#c06;^^See search options at right &#187;^^@@
*''Title'' or name of the tiddler
*''Text'' or content of the tiddler
*''Tags'' to identify classes, groups and relationships of tiddlers

''Tags are most useful and'' important as they determine how the information is used and more importantly how information is related to practical use; assuming of course no fallibilistic presuppositions. Text is best for searches looking for detail most of the time, but can return far too much information at times.  ''It is best to set up your tagging system carefully on complex ~TWs''

''In the end it is you who must decide'' how your information is best organized and the relationships that give it value.  Most of all you need to be able to find what you need and tags are one of the best ways. Here are a few popups on this page that use tags to group tiddlers for various reasons.
<<popup [[CSS Reference]] [[<<forEachTiddler where 'tiddler.tags.contains("CSSRef")'$))]]>><<popup [[quick edit]] [[<<forEachTiddler where 'tiddler.tags.containsAny(["quickedit"])'$))]]>><<popup 'List tag tabs' [[Custom Menu
*MainMenu
----
<<forEachTiddler where 'tiddler.tags.contains("tabs")'$))]] 
>><<popup [[systemConfig tiddlers]] [[<<forEachTiddler where 'tiddler.tags.containsAny(["systemConfig"])'$))]]>> 


''Needless to say we are only talking about'' the theory of information and we do not want to give ourselves an epistemological rupture. <<smiley :-D>>
!!!Special Tags
* ''excludeSearch'': excludes a tiddler from search results
* ''excludeLists'': excludes a tiddler from the lists in the sidebar tabs
* ''systemConfig'': marks tiddlers that contain ~JavaScript that should be executed once ~TiddlyWiki has loaded
* ''excludeMissing'': excludes a tiddler from the processing that generates the ~MissingTiddlers list. Use it when you have a tiddler that contains links to missing tiddlers and you don't want those missing links to appear in the `~MissingTiddlers list.

''NOTE:'' @@color:#C06;''Missing tiddlers are ones that have been linked to, but don't have anything in them yet. Just as likely you used //~WikiWords// without de-wikifing them like this'' {{{~WikiWords}}}. ''They can be found under the More>Missing tab in the right sidebar.''  What ever you do don't worry about them.@@

!!!End Tags
<html><div align="center"> <object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/ezNScBd7_h4&color1=0xb1b1b1&color2=0xcfcfcf&hl=en&feature=player_embedded&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/ezNScBd7_h4&color1=0xb1b1b1&color2=0xcfcfcf&hl=en&feature=player_embedded&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></div></html>

{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("j")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;JavaScript^^<<tiddler CloseThisOpen with: WhatsInATiddler  '« back'>>|<<toolbar editTiddler>>» ^^>>
''You can put ~JavaScript in a tiddler.'' Most Plugins are made with ~JavaScript
|padding:0em;<<gradient horiz #fcf  #fff>>Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated ~TiddlyWiki-formatted output into tiddler content, or perform any other programmatic actions each time the tiddler is rendered using InlineJavascriptPlugin>>|

@@color:#C06;''&raquo; &raquo;'' @@ See a list of [[scripts|Scripts]] in TW Help
@@color:#C06;''&raquo; &raquo;'' @@ See RegularExpressions

''~JavaScript Links:''
*[[orangoo.com*****|http://orangoo.com/labs/Main/]]
*[[Elated|http://www.elated.com/articles/cat/javascript/]]
*[[JavaScript Reference Site: w3schools|http://www.w3schools.com/js/js_examples.asp]]
*[[QuirksMode|http://www.quirksmode.org/resources.html]]
*[[JavaScript ToolBox|http://www.javascripttoolbox.com/lib/table/source.php]]
*[[JavaScript Kit|http://www.javascriptkit.com/]]
*[[Javascript-Coder|http://www.javascript-coder.com/index.php]]
*[[Regular Expression Reference|http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:RegExp]]
*[[Webdeveloper Javascript Tutorial|http://www.webdevelopersnotes.com/tutorials/javascript/global_local_variables_scope_javascript.php3]]

@@color(#006):''TW Help is enhanced by:'' InlineJavascriptPlugin @@

Below is a ~JavaScript that detects the viewer's browser details.
!!!<<gradient horiz #abf #fff>>&nbsp;Example {Detect viewer's browser details}>>

*+++[This is the browser you are viewing this page with; click here.]
<<<
<<tiddler BrowserDetails>>
<<<
===

!!!<<gradient horiz #abf #fff>>&nbsp;Code {Detect viewer's browser details}>>
{{{
<script>
document.write("Browser: ")
document.write(navigator.appName + "<br>")
document.write("Browserversion: ")
document.write(navigator.appVersion + "<br>")
document.write("Code: ")
document.write(navigator.appCodeName + "<br>")
document.write("Platform: ")
document.write(navigator.platform + "<br>")
document.write("Cookies enabled: ")
document.write(navigator.cookieEnabled + "<br>")
document.write("Browser's user agent header: ")
document.write(navigator.userAgent + "<br>")

</script>
}}}

!!!<<gradient horiz #abf #fff>>&nbsp;Another Example>>
This example declares a variable, assigns a value to it, and then displays the variable.
Then the variable is displayed one more time, only this time in bold.
+++[see it here]
<<<
<script>
var name = "VariableExample"
document.write(name)
document.write("<br><b>"+name+"</b>")

</script>
<<<
===

!!!<<gradient horiz #abf #fff>>&nbsp;Code>>
{{{
<script>
var name = "VariableExample"
document.write(name)
document.write("<b>"+name+"</b>")

</script>
}}}
For more see [[Scripts]]

!!!<<gradient horiz #abf #fff>>&nbsp;End of ~JavaScript>>
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.javascriptkit.com/jsref/index.shtml]]&nbsp;&raquo;|
<html><div align="center"><iframe src ="http://www.javascriptkit.com/jsref/index.shtml" width="100%" align="center" height="600"></iframe></div></html>}}}
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.w3schools.com/jsref/default.asp]]&nbsp;&raquo;|
<html><div align="center"><iframe src ="http://www.w3schools.com/jsref/default.asp" width="100%" align="center" height="600"></iframe></div></html>}}}
This is the help alert used on ~TiddlyTools [[Bookmarklets|TiddlyToolsBookmarklets]]

<script label="(How to use help...)">
alert("To create a bookmarklet, simply drag-and-drop any command link below directly onto your browser's toolbar or right-click and use 'bookmark this link' (or 'add to favorites') to add the bookmarklet to your browser's bookmarks menu.  Once installed, you can use the bookmarklet with ANY TiddlyWiki document, even if the command script (and InlineJavascriptPlugin) has not been installed in that document!");
</script>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[JohnDoe]]^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>

|[[JohnDoe##MoreJohn]]|

/***
|''Name:''|JohnDoe|
|''Version:''|n/a|
|''Source:''|n/a|
|''Author:''|msg|
|''Description:''|Test section core feature.|
|''Documentation:''|[[TiddlerSections]]|
|''Source Code:''|n/a|
|''~TiddlyWiki:''|n/a|
|''Requires''|TW ver. 2.4|
|''Stylesheet Changes''|none|
|See Above|n/a|
***/
/%
!!!Main
First name:John
Last name:Doe
Birthday: October
!!!Work
Phone:
!!!Personal
Phone:
Mobile:
Email:
!!!Misc
[img[http://img167.imageshack.us/img167/2677/100pxalchemyearthsymbolyx3.png]]
Earth Rabbit
<<slider cookie JohnDoe##MoreJohn "More about John" tooltip>>
!!!end
%/
/%
!!!MoreJohn
Height: 6' 0"
Weight: 87kgs
!!!end MoreJohn
%/ 
<<tiddler TabsTiddler>>
''Find tag sectiondemo''
<script>
   var out="";
   out= "|bgcolor:#abf; Sort|bgcolor:#abf; Title |bgcolor:#abf; Modified |bgcolor:#abf; Tags |h\n";
   var tids=store.sortTiddlers(store.getTaggedTiddlers("sectiondemo"),"-modified");
   for (var t=0; t<tids.length && t<10; t++)
   out+= "| "+(t+1)+"|[["+tids[t].title+"]]|"+tids[t].modified.formatString("YYYY.0MM.0DD")+"|"+tids[t].tags+"|\n"

   return out;
</script>


!people
First: John
Last: Smith
Born: 1854-04-01
Place: Ghosttown, Spokane, USA
Father: Big Lastname
Mother: Mrs Lastname
!end

Then, you can use macros like:
{{{<<tiddler [[JohnSmith##people]]>>}}}
which displays:
<<<
<<tiddler [[JohnSmith##people]]>>
<<<
{{{<<tiddler [[JohnSmith::Place]]>>}}}
which displays:

<<<
<<tiddler [[JohnSmith::Place]]>>
<<<
Or this script
{{{
<script>
	var plugins=window.store.getTaggedTiddlers('dbase','title');
	var out='| !Name | !Born | !First | !Last| !Place |\n';
	out+=plugins.map(function(t) {
		return '|'+'[['+t.title+']]'
		+'|'+store.getTiddlerSlice(t.title,'Born')
		+'|'+store.getTiddlerSlice(t.title,'First')
		+'|'+store.getTiddlerSlice(t.title,'Last')
		+'|'+store.getTiddlerSlice(t.title,'Place')+'|';
	}).join('\n');
return out;
</script>
}}}
which displays:
<<<
<script>
	var plugins=window.store.getTaggedTiddlers('dbase','title');
	var out='| !Name | !Born | !First | !Last| !Place |\n';
	out+=plugins.map(function(t) {
		return '|'+'[['+t.title+']]'
		+'|'+store.getTiddlerSlice(t.title,'Born')
		+'|'+store.getTiddlerSlice(t.title,'First')
		+'|'+store.getTiddlerSlice(t.title,'Last')
		+'|'+store.getTiddlerSlice(t.title,'Place')+'|';
	}).join('\n');
return out;

</script>
<<<
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[Any format of a journal you want|JournalTemplate]]^^<<tiddler CloseThisOpen with: "Macros Built-in"  '« back'>>|<<toolbar editTiddler>>» ^^>>
!!!<<gradient horiz #abf #fff>>&nbsp;Goals>>

Dear Journal,

Today is @@color:#C06;''<<today "YYYY.0MM.0DD 0hh:0mm:0ss week 0WW">>''@@ and I am going to dance at the slightest sound of music I hear played.  It might sound funny but that's my goal for today.
!!!<<gradient horiz #abf #fff>>&nbsp;Tasks>>
Completed every task. Am very proud and bored.

!!!<<gradient horiz #abf #fff>>&nbsp;Day's end>>

{{tablecenter{
|>|>|>|>| !July 2007 Statistics |
|&nbsp;|Page Loads|Unique Visitors|First Time Visitors|Returning Visitors|
|Total| 5,886| 4,974| 3,587| 1,387|
|Average| 184| 155| 112| 43|
}}}
config.commands.top ={
text:"top",
tooltip:"goto top of page"

};

config.commands.top.handler = function(event,src,title){
window.scrollTo(0,0);

} 
{{tablecenter{
|>|>|>|>| !June 2007 Statistics |
|&nbsp;| Page Loads | Unique Visitors | First Time Visitors | Returning Visitors |
|Total | 5,340| 4,639| 3,372| 1,267|
|Average | 178| 155| 112| 42|
}}}
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("k")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
!!!<<gradient horiz #fc3 #fff>>&nbsp;KeyStrokes^^<<tiddler CloseThisOpen with: KeyStrokes  '« back'>>|<<toolbar editTiddler>>» ^^>>
Click the tabs above as required.
<<tabs tabsCookie [[Intro ]] "tooltip 1" [[KeyStrokeIntro]]  [[TWKeyStrokes ]] "" [[TWKeyStrokes]]  [[FFKeyStrokes ]] "" [[FFKeyStrokes]]>>
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("l")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
{{tablecenter{
<<forEachTiddler 
 where
 'tiddler.modified'
 sortBy
 'tiddler.modified'
 descending
 write
 '(index < 25) ? "|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |"+tiddler.modified.formatString("YYYY.0MM.0DD"+" @ "+"0hh:0mm:0ss")+"|\n" : ""'

>>
}}}
 <script>
         var tiddlers=store.getTiddlers("modified");
         var last=tiddlers[tiddlers.length-1];
         var when=last.modified.formatString("YYYY.0MM.0DD 0hh:0mm:0ss week 0WW");
         return "Last tiddler change ('"+last.title+"') was on "+when

</script> 
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;LatinHtmlEntities^^<<tiddler CloseThisOpen with: Entities-Codes  '« back'>>|<<toolbar editTiddler>>» ^^>>
|>|>| !Latin Letters |
| !Symbol | !upper-case | !lower-case |
| {{{&Agrave;}}} | &Agrave; | &agrave; |
| {{{&Aacute;}}} | &Aacute; | &aacute; |
| {{{&Acirc;}}} | &Acirc; | &acirc; |
| {{{&Atilde;}}} | &Atilde; | &atilde; |
| {{{&Auml;}}} | &Auml; | &auml; |
| {{{&Aring;}}} | &Aring; | &aring; |
| {{{&AElig;}}} | &AElig; | &aelig; |
| {{{&Ccedil;}}} | &Ccedil; | &ccedil; |
| {{{&Egrave;}}} | &Egrave; | &egrave; |
| {{{&Eacute;}}} | &Eacute; | &eacute; |
| {{{&Ecirc;}}} | &Ecirc; | &ecirc; |
| {{{&Euml;}}} | &Euml; | &euml; |
| {{{&Igrave;}}} | &Igrave; | &igrave; |
| {{{&Iacute;}}} | &Iacute; | &iacute; |
| {{{&Icirc;}}} | &Icirc; | &icirc; |
| {{{&Iuml;}}} | &Iuml; | &iuml; |
| {{{&ETH;}}} | &ETH; | &eth; |
| {{{&Ntilde;}}} | &Ntilde; | &ntilde; |
| {{{&Ograve;}}} | &Ograve; | &ograve; |
| {{{&Oacute;}}} | &Oacute; | &oacute; |
| {{{&Ocirc;}}} | &Ocirc; | &ocirc; |
| {{{&Otilde;}}} | &Otilde; | &otilde; |
| {{{&Ouml;}}} | &Ouml; | &ouml; |
| {{{&Oslash;}}} | &Oslash; | &oslash; |
| {{{&Ugrave;}}} | &Ugrave; | &ugrave; |
| {{{&Uacute;}}} | &Uacute; | &uacute; |
| {{{&Ucirc;}}} | &Ucirc; | &ucirc; |
| {{{&Uuml;}}} | &Uuml; | &uuml; |
| {{{&Yacute;}}} | &Yacute; | &yacute; |
| {{{&THORN;}}} | &THORN; | &thorn; |
| {{{&Yuml;}}} | &Yuml; | &yuml; |
| {{{&OElig;}}} | &OElig; | &oelig; |
| {{{&Scaron;}}} | &Scaron; | &scaron; |
| {{{ &szlig;}}} | &szlig; |&szlig; |

!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[Launch Application Plugin]]^^<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{headline120{''Description:'' Launch an application from within TiddlyWiki using a button}}}

The LaunchApplicationPlugin is a plugin that allows you to launch executables (i.e. programs) from your ~TiddlyWiki.  The obvious advantages that a plugin has over a program (as described elsewhere) is that it can be used if your ~TiddlyWiki is on a USB drive because it requires no installation on the computer itself.  After installation of the plugin, you will be able to specify ~URLs of the following kind :
!!!!!<<gradient horiz #abf #ffffff>>&nbsp;Where to get it>>
<<<
|bgcolor:#fcf;''Obtain the plugin here:'' (Version 1.4  ~TWCoreVer:2.3.0+ ) will work with Linux <br/>@@color:#C06;''&raquo; &raquo;'' @@ http://remotely-helpful.com/TiddlyWiki/LaunchApplication.html#LaunchApplicationPlugin|

<<<
!!!!!Usage
{{{<<LaunchApplication "buttonLabel" "tooltip" "application" ["arguments" ...]>>}}}
{{{<<LaunchApplicationButton "buttonLabel" "tooltip" "application" ["arguments" ...]>>}}}
{{{<<LaunchApplicationLink "buttonLabel" "tooltip" "application" ["arguments" ...]>>}}}
* buttonLabel is anything you like
* tooltip is anything you like
* application is a path to the executable (which is Operating System dependant)
* arguments is any command line arguments the application requires.
* You must supply relative path from the location of the TiddlyWiki OR a fully qualified path
* Forward slashes works fine for Windows

{{{<<LaunchApplication...>>}}} functions the same as {{{<<LaunchApplicationButton...>>}}}

!!!@@color:#C06;''&raquo; &raquo;'' @@ ''Examples''

<<LaunchApplicationButton "Open Notepad" "Text Editing" "file:///C:\Windows\System32\notepad.exe">>
{{{
<<LaunchApplicationButton "Open Notepad" "Text Editing" "file:///C:\Windows\System32\notepad.exe">>
}}}

<<LaunchApplicationButton "Calculator" "Windows Calculator" "file:///C:\Windows\System32\calc.exe">>

{{{
<<LaunchApplicationButton "Calculator" "Windows Calculator" "file:///C:\Windows\System32\calc.exe">>
}}}

<<LaunchApplicationLink "C Drive" "Folder" "file:///c:/">>
{{{

<<LaunchApplicationLink "C Drive" "Folder" "file:///c:/">>
}}}

!!!@@color:#C06;''&raquo; &raquo;'' @@ Linux
<<LaunchApplicationButton "Emacs" "Linux Emacs" "file:///usr/bin/emacs">>

{{{
<<LaunchApplicationButton "Emacs" "Linux Emacs" "file:///usr/bin/emacs">>
}}}

<<LaunchApplicationLink "LocalProgram" "Program relative to Tiddly html file" "localDir/bin/emacs">>
{{{

<<LaunchApplicationLink "LocalProgram" "Program relative to Tiddly html file" "localDir/bin/emacs">>
}}}


!!!!&nbsp;End
<<tiddler [[Launch Application Plugin]]>>
/***
|''Name:''|LaunchApplicationPlugin|
|''Author:''|Lyall Pearce|
|''Source:''|http://www.Remotely-Helpful.com/TiddlyWiki/LaunchApplication.html|
|''License:''|[[Creative Commons Attribution-Share Alike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''Version:''|1.4.0|
|''~CoreVersion:''|2.3.0|
|''Requires:''| |
|''Overrides:''| |
|''Description:''|Launch an application from within TiddlyWiki using a button|
!!!!!Usage

<<<
{{{<<LaunchApplication "buttonLabel" "tooltip" "application" ["arguments" ...]>>}}}
{{{<<LaunchApplicationButton "buttonLabel" "tooltip" "application" ["arguments" ...]>>}}}
{{{<<LaunchApplicationLink "buttonLabel" "tooltip" "application" ["arguments" ...]>>}}}
* buttonLabel is anything you like
* tooltip is anything you like
* application is a path to the executable (which is Operating System dependant)
* arguments is any command line arguments the application requires.
* You must supply relative path from the location of the TiddlyWiki OR a fully qualified path
* Forward slashes works fine for Windows

{{{<<LaunchApplication...>>}}} functions the same as {{{<<LaunchApplicationButton...>>}}}

eg.

{{{

<<LaunchApplicationButton "Emacs" "Linux Emacs" "file:///usr/bin/emacs">>
}}}
<<LaunchApplicationButton "Emacs" "Linux Emacs" "file:///usr/bin/emacs">>

{{{

<<LaunchApplicationLink "LocalProgram" "Program relative to Tiddly html file" "localDir/bin/emacs">>
}}}
<<LaunchApplicationLink "LocalProgram" "Program relative to Tiddly html file" "localDir/bin/emacs">>
					     
{{{

<<LaunchApplicationButton "Open Notepad" "Text Editing" "file:///e:/Windows/notepad.exe">>
}}}
<<LaunchApplicationButton "Open Notepad" "Text Editing" "file:///e:/Windows/notepad.exe">>

{{{

<<LaunchApplicationLink "C Drive" "Folder" "file:///c:/">>
}}}
<<LaunchApplicationLink "C Drive" "Folder" "file:///c:/">>


!!!!!Revision History
* 1.1.0 - leveraged some tweaks from from Bradly Meck's version (http://bradleymeck.tiddlyspot.com/#LaunchApplicationPlugin) and the example text.
* 1.2.0 - Make launching work in Linux too and use displayMessage() to give diagnostics/status info.
* 1.3.0 - execute programs relative to TiddlyWiki html file plus fix to args for firefox.
* 1.3.1 - parameters to the macro are properly parsed, allowing dynamic paramters using {{{ {{javascript}} }}} notation.
* 1.4.0 - updated core version and fixed empty tooltip and added launch link capability

<<<
***/
//{{{
version.extensions.LaunchApplication = {major: 1, minor: 4, revision: 0, date: new Date(2007,12,29)};
config.macros.LaunchApplication = {};
config.macros.LaunchApplicationButton = {};
config.macros.LaunchApplicationLink = {};

function LaunchApplication(appToLaunch,appParams) {
    if(! appToLaunch)
	return;
    var tiddlyBaseDir = self.location.pathname.substring(0,self.location.pathname.lastIndexOf("\\")+1);
    if(!tiddlyBaseDir || tiddlyBaseDir == "") {
	tiddlyBaseDir = self.location.pathname.substring(0,self.location.pathname.lastIndexOf("/")+1);
    }
    // if Returns with a leading slash, we don't want that.
    if(tiddlyBaseDir.substring(0,1) == "/") {
	tiddlyBaseDir = tiddlyBaseDir.substring(1);
    }
    if(appToLaunch.indexOf("file:///") == 0) // windows would have C:\ as the resulting file
    {
	tiddlyBaseDir = "";
	appToLaunch = appToLaunch.substring(8);
    }

    if (config.browser.isIE) {
	// want where the tiddly is actually located, excluding tiddly html file

	var theShell = new ActiveXObject("WScript.Shell");
	if(theShell) {
            // the app name may have a directory component, need that too
	    // as we want to start with current working dir as the location
	    // of the app.
	    var appDir = appToLaunch.substring(0, appToLaunch.lastIndexOf("\\"));
	    if(! appDir || appDir == "") {
		appDir = appToLaunch.substring(0, appToLaunch.lastIndexOf("/"));
	    }
	    appParams = appParams.length > 0 ? " \""+appParams.join("\" \"")+"\"" : "";
	    try {
		theShell.CurrentDirectory = decodeURI(tiddlyBaseDir + appDir);
		var commandString = ('"' +decodeURI(tiddlyBaseDir+appToLaunch) + '" ' + appParams);
		pluginInfo.log.push(commandString);
	        theShell.run(commandString);
	    } catch (e) {
		displayMessage("LaunchApplication cannot locate/execute file '"+tiddlyBaseDir+appToLaunch+"'");
		return;
	    }
	} else {
	    displayMessage("LaunchApplication failed to create ActiveX component WScript.Shell");
	}
    } else { // Not IE
	// want where the tiddly is actually located, excluding tiddly html file
	netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
        var launchString;
	try { // try linux/unix format
            launchString = decodeURI(tiddlyBaseDir+appToLaunch);
	    file.initWithPath(launchString);
	} catch (e) {
	    try { // leading slash on tiddlyBaseDir
                launchString = decodeURI("/"+tiddlyBaseDir+appToLaunch);
		file.initWithPath(launchString);
	    } catch (e) {
		try { // try windows format
		    launchString = decodeURI(appToLaunch).replace(/\//g,"\\");
		    file.initWithPath(launchString);
		} catch (e) {
		    try { // try windows format
			launchString = decodeURI(tiddlyBaseDir+appToLaunch).replace(/\//g,"\\");
			file.initWithPath(launchString);
		    } catch (e) {
			displayMessage("LaunchApplication cannot locate file '"+launchString+"' : "+e);
			return;
		    } // try windows mode
		} // try windows mode
	    }; // try with leading slash in tiddlyBaseDir
	}; // try linux/unix mode
	try {
	    if (file.isFile() && file.isExecutable()) {
		displayMessage("LaunchApplication executing '"+launchString+"' "+appParams.join(" "));
		var process = Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess);
		process.init(file);
		process.run(false, appParams, appParams.length);
	    }
	    else
	    {
		displayMessage("LaunchApplication launching '"+launchString+"' "+appParams.join(" "));
		file.launch(); // No args available with this option
	    }
	} catch (e) {
	    displayMessage("LaunchApplication cannot execute/launch file '"+launchString+"'");
	}
    }
};

config.macros.LaunchApplication.handler = function (place,macroName,params,wikifier,paramString,tiddler) {
    // 0=ButtonText, 1=toolTip, 2=AppToLaunch, 3...AppParameters
    if (params[0] && (params[1] || params[1] == "") && params[2]) {
        var theButton = createTiddlyButton(place, getParam(params,"buttonText",params[0]), getParam(params,"toolTip",params[1]), onClickLaunchApplication);
        theButton.setAttribute("appToLaunch", getParam(params,"appToLaunch",params[2]));
        params.splice(0,3);
        theButton.setAttribute("appParameters", params.join(" "));
        return;
    }
}
config.macros.LaunchApplicationButton.handler = function (place,macroName,params,wikifier,paramString,tiddler) {
    config.macros.LaunchApplication.handler (place,macroName,params,wikifier,paramString,tiddler);
}

config.macros.LaunchApplicationLink.handler = function (place,macroName,params,wikifier,paramString,tiddler) {
    // 0=ButtonText, 1=toolTip, 2=AppToLaunch, 3...AppParameters
    if (params[0] && (params[1] || params[1] == "") && params[2]) {
        //var theLink = createExternalLink(place, getParam(params,"buttonText",params[0]));
        var theLink = createTiddlyButton(place, getParam(params,"buttonText",params[0]), getParam(params,"toolTip",params[1]), onClickLaunchApplication,"link");
        theLink.setAttribute("appToLaunch", getParam(params,"appToLaunch",params[2]));
        params.splice(0,3);
        theLink.setAttribute("appParameters", params.join(" "));
        return;
    }
}

function onClickLaunchApplication(e) {
	var theAppToLaunch = this.getAttribute("appToLaunch");
	var theAppParams = this.getAttribute("appParameters").readMacroParams();
	LaunchApplication(theAppToLaunch,theAppParams);
}

//}}}

/%Requires LaunchApplicationPlugin Version: 1.1.0%/
<<LaunchApplication "Outlook Express" "email program" "file:///C:/Program Files/Outlook Express/msimn.exe">> 
<<LaunchApplication "PMail" "Pegasus Email" "file:///C:/Pegasus/winpm-32.exe">> 

<<LaunchApplication "vernam" "Encryption Tool" "file:///I:/vernam.exe">> 
<<LaunchApplication "converter" "Metric Conversions" "file:///C:/Documents and settings/symbex/Desktop/UnitConverter.exe">>
<<LaunchApplication "PowerDesk" "Explorer" "file:///C:/Program Files/Ontrack/PowerDesk/PDEXPLO.EXE">> 

<<LaunchApplication "PSP" "Paint Shop Pro" "file:///C:/Program Files/Paint Shop Pro 6/Psp.exe">> 






!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[LaunchApplicationsProgram]]^^<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>

!!!!!<<gradient horiz #abf #ffffff>>&nbsp;The Protocol Handler>>
The Protocol Handler is a program that you download and install on your Windows computer that allows you to launch applications directly from your ~TiddlyWiki.  After installation, you will be able to specify ~URLs of the following kind :

{{{<html><a href="run:C:\path\filename.exe">Click here to run!</a><html>}}}

''The specified application or document will open immediately'' without asking for confirmation; executables will  run and documents will be opened with their associated program.
<<<
|bgcolor:#fcf;@@color:#C06;''&raquo; &raquo;'' @@[[Install this protocol handler from here: http://www.blackbit.net/frames/software.html|http://www.blackbit.net/frames/software.html]]|
----
|bgcolor:#fcf;@@color:#C06;''&raquo; &raquo;'' @@ [[Read manual here|http://www.symbex.net.au/Wiki/readme.rph2.txt]] Home web site  @@color:#C06;''&raquo; &raquo;'' @@ http://www.blackbit.net/frameset.html|

<<<
!!!!<<gradient horiz #abf #ffffff>>&nbsp;Example @@color:#C06;^^(Works when TW is on local disk only)^^@@>>
<<<
<html><a href="run:C:\Program Files\Paint Shop Pro 6\Psp.exe">Run Paint Shop Pro</a></html>
<<<
!!!!!<<gradient horiz #abf #ffffff>>&nbsp;Code HTML>>

<<<
{{{<html><a href="run:C:\Program Files\Paint Shop Pro 6\Psp.exe">Run Paint Shop Pro</a></html>}}}
<<<
!!!!!<<gradient horiz #abf #ffffff>>&nbsp;Code ~TiddlyWiki Markup>>
<<<
{{{[[Run Paint Shop Pro|run:C:\Program Files\Paint Shop Pro 6\Psp.exe]]}}}
<<<

----
!!!<<gradient horiz #abf #ffffff>>&nbsp;FAQ>>
@@color(#C06):Question:@@ Is there a way to make this open folders and not just files?

+++[Answer: Affirmative. You can open a folder by doing this:]

<<<
{{{
<html><a href="run:[Maximized]C:\Program Files\">Program 
Files</a></html>
}}}
<<<
===

----
@@color(#C06):Question:@@ Is there a way to have an image like a shortcut image that links to the program?

+++[Answer: Yes. You can use an image as the link; do it like this:]


<<<
{{{<html><a href="run:[Maximized]C:\Program Files\Outlook Express\msimn.exe">
<img src="expresstrainwithsquarewheels.gif" alt="Outlook Express" title="start program">
</a></html>}}}

@@color(#00f):Or ~TiddlyWiki Markup@@

{{{[img[expresstrainwithsquarewheels.gif][run:[Maximized]C:\Program Files\Outlook Express\msimn.exe]]}}}

@@color(#00f):Or with a button@@

{{{<html><a href="run:[Maximized]C:\Program Files\Outlook Express\msimn.exe">

<button>Outlook Express</button>
</a></html>}}}
<<<
===

----
!!!!!&nbsp;End
Putting three full stops ... after the slider heading creates what is known as a 'lazy' slider and defers rendering of closed sliders until the first time they are opened. For example it's useful for putting Google Calendar in an iframe where several sections must be loaded.
See group discussion: http://tinyurl.com/2pn5qw
{{{
+++[show calendar]...
}}}

+++[show calendar]...
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.google.com/calendar/render?pli=1]]&nbsp;&raquo;|

<html><div align="center"><iframe src ="http://www.google.com/calendar/embed?src=u7pke58sc91ksbm4h9pf9ofe8c%40group.calendar.google.com" width="100%" align="center" height="600"></iframe></div></html>}}}
===


/***
|''Name:''|LegacyStrikeThroughPlugin|
|''Description:''|Support for legacy (pre 2.1) strike through formatting|
|''Version:''|1.0.2|
|''Date:''|Jul 21, 2006|
|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|
|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|
|''License:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.0|
***/

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

config.formatters.push(
{
	name: "legacyStrikeByChar",
	match: "==",
	termRegExp: /(==)/mg,
	element: "strike",
	handler: config.formatterHelpers.createElementAndWikify
});

} //# end of "install only once"
//}}}
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[Lewcid TW Macros]]^^<<tiddler CloseThisOpen with: ThirdPartyPlugins  '« back'>>|<<toolbar editTiddler>>» ^^>>

Macros at:http://tw.lewcid.org 
|bgcolor(#8cf): @@color(#000080): ''Titles'' @@ |bgcolor(#8cf): @@color(#000080):  ''Size'' (bytes)@@ |bgcolor(#8cf): @@color(#000080): ''Tags''@@ |
|[[BetterTimelineMacro]]| 4756|lewcidExtension,systemConfig|
|[[ConfigTiddler]]| 39|systemConfig|
|[[CustomMenu]]| 175|DemoTiddler|
|[[DropTaggingMacro]]| 2961|systemConfig,lewcidExtension,DropTaggingMacro|
|[[DropTagsMacro]]| 3309|lewcidExtension,systemConfig|
|[[DropTagsMacroDocumentation]]| 5143|Documentation,SourceCode,DropTagsMacro|
|[[FontSizePlugin]]| 4114|systemConfig,lewcidExtension|
|[[FullScreenPlugin]]| 2067|systemConfig,lewcidExtension|
|[[HoverMenuPlugin]]| 10100|lewcidExtension|
|[[IconMacro]]| 1584|systemConfig,lewcidExtension|
|[[InlineJS]]| 10262|systemConfig|
|[[JumpMacro]]| 1916|lewcidExtension|
|[[JumpToTopMacro]]| 1073|systemConfig,lewcidExtension|
|[[MenuEditPlugin]]| 1019|lewcidExtension,systemConfig|
|[[MonkeyTaggerMacro]]| 8158|lewcidExtension,systemConfig|
|[[NavigationMacro]]| 4429|systemConfig,lewcidExtension|
|[[OpenTiddlersMacro]]| 1525|lewcidExtension,systemConfig|
|[[PopupMacro]]| 2516|lewcidExtension,systemConfig|
|[[PopupMacroDocs]]| 2237|Documentation,PopupMacro|
|[[RSSHack]]| 1109|systemConfig,excludeLists|
|[[SaveAndReloadMacro]]| 877|systemConfig,lewcidExtension|
|[[SelectThemePlugin]]| 11498|lewcidExtension,systemConfig|
|[[SplashScreenPlugin]]| 2362|lewcidExtension,systemConfig|
|[[TabEditPlugin]]| 2170|lewcidExtension,systemConfig|
|[[TagAdderMacro]]| 5275|lewcidExtension,systemConfig|
|[[TaggerPlugin]]| 6651|lewcidExtension,systemConfig|
|[[TiddlerWithEditPlugin]]| 1419|lewcidExtension,systemConfig|
|[[TiddlyLightBoxDoc]]| 6083|TiddlyLightBox,Documentation|
|[[TiddlyLightBoxPlugin]]| 8060|TiddlyLightBox,systemConfig,lewcidExtension|
|[[ToggleSideBarMacro]]| 2994|systemConfig,lewcidExtension|
|[[ToolbarIconsPlugin]]| 1928|systemConfig,lewcidExtension|
|[[writeItMacro]]| 791|systemConfig,lewcidExtension|

!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[Lewcid TW Plugins]]^^<<tiddler CloseThisOpen with: ThirdPartyPlugins  '« back'>>|<<toolbar editTiddler>>» ^^>>
Plugins at: http://tw.lewcid.org 

1)http://lewcid.googlepages.com/presentation_empty.html#author:true
This one includes just the PresentationPlugin and an example set of
templates for it to work on. All it does is, it disables and hides editing
features by default, and enables them when the file is opened with
#author:true appended at the end of the url

2)http://lewcid.googlepages.com/presentation_empty_full.html#author:true
This is an 'empty' version of the Tears of the Sun presentation, which
includes PresentationPlugin, SinglePageModePlugin, NavigationMacro and other
goodies. 


|bgcolor(#8cf): @@color(#000080): ''Titles'' @@ |bgcolor(#8cf): @@color(#000080):  ''Size'' (bytes)@@ |bgcolor(#8cf): @@color(#000080): ''Tags''@@ |
|[[BetterTimelineMacro]]| 4756|lewcidExtension,systemConfig|
|[[ConfigTiddler]]| 39|systemConfig|
|[[CustomMenu]]| 175|DemoTiddler|
|[[DropTaggingMacro]]| 2961|systemConfig,lewcidExtension,DropTaggingMacro|
|[[DropTagsMacro]]| 3309|lewcidExtension,systemConfig|
|[[DropTagsMacroDocumentation]]| 5143|Documentation,SourceCode,DropTagsMacro|
|[[FontSizePlugin]]| 4114|systemConfig,lewcidExtension|
|[[FullScreenPlugin]]| 2067|systemConfig,lewcidExtension|
|[[HoverMenuPlugin]]| 10100|lewcidExtension|
|[[IconMacro]]| 1584|systemConfig,lewcidExtension|
|[[InlineJS]]| 10262|systemConfig|
|[[JumpMacro]]| 1916|lewcidExtension|
|[[JumpToTopMacro]]| 1073|systemConfig,lewcidExtension|
|[[MenuEditPlugin]]| 1019|lewcidExtension,systemConfig|
|[[MonkeyTaggerMacro]]| 8158|lewcidExtension,systemConfig|
|[[NavigationMacro]]| 4429|systemConfig,lewcidExtension|
|[[OpenTiddlersMacro]]| 1525|lewcidExtension,systemConfig|
|[[PopupMacro]]| 2516|lewcidExtension,systemConfig|
|[[PopupMacroDocs]]| 2237|Documentation,PopupMacro|
|[[RSSHack]]| 1109|systemConfig,excludeLists|
|[[SaveAndReloadMacro]]| 877|systemConfig,lewcidExtension|
|[[SelectThemePlugin]]| 11498|lewcidExtension,systemConfig|
|[[SplashScreenPlugin]]| 2362|lewcidExtension,systemConfig|
|[[TabEditPlugin]]| 2170|lewcidExtension,systemConfig|
|[[TagAdderMacro]]| 5275|lewcidExtension,systemConfig|
|[[TaggerPlugin]]| 6651|lewcidExtension,systemConfig|
|[[TiddlerWithEditPlugin]]| 1419|lewcidExtension,systemConfig|
|[[TiddlyLightBoxDoc]]| 6083|TiddlyLightBox,Documentation|
|[[TiddlyLightBoxPlugin]]| 8060|TiddlyLightBox,systemConfig,lewcidExtension|
|[[ToggleSideBarMacro]]| 2994|systemConfig,lewcidExtension|
|[[ToolbarIconsPlugin]]| 1928|systemConfig,lewcidExtension|
|[[writeItMacro]]| 791|systemConfig,lewcidExtension|






|bgcolor(#8cf): @@color(#000080): ''Titles'' @@ |bgcolor(#8cf): @@color(#000080):  ''Size'' (bytes)@@ |bgcolor(#8cf): @@color(#000080): ''Tags''@@ |
|[[AutoOpenTiddlersPlugin]]| 1437|lewcidExtension|
|[[AutoOpenTiddlersPlugin ver0.2]]| 65|RecentUpdates|
|[[FontSizePlugin]]| 4154|systemConfig,lewcidExtension|
|[[FontSizePlugin ver 1.0]]| 121|RecentUpdates|
|[[FullScreenPlugin]]| 2087|systemConfig,lewcidExtension|
|[[HoverMenuPlugin]]| 9824|lewcidExtension|
|[[HoverMenuPlugin ver 1.11]]| 58|RecentUpdates|
|[[HoverMenuPlugin ver1.1]]| 194|RecentUpdates|
|[[MenuEditPlugin]]| 1039|lewcidExtension,systemConfig|
|[[MenuEditPlugin ver 0.2]]| 110|RecentUpdates|
|[[New: AutoOpenTiddlersPlugin]]| 170|RecentUpdates|
|[[New: FontSizePlugin]]| 182|RecentUpdates|
|[[New: FullScreenPlugin]]| 127|RecentUpdates|
|[[New: HoverMenuPlugin]]| 161|RecentUpdates|
|[[OpenTopPlugin]]| 662|lewcidExtension|
|[[SelectThemePlugin]]| 10980|lewcidExtension,systemConfig|
|[[SplashScreenPlugin]]| 2382|lewcidExtension,systemConfig|
|[[SplashScreenPlugin Update: version 0.21]]| 154|RecentUpdates|
|[[TabEditPlugin]]| 2190|lewcidExtension,systemConfig|
|[[TaggerPlugin]]| 6711|lewcidExtension,systemConfig|
|[[TaggerPluginDocumentation]]| 2678|Documentation,TaggerPlugin|
|[[TaggerPluginSource]]| 10406|SourceCode,TaggerPlugin|
|[[TiddlerWithEditPlugin]]| 1439|lewcidExtension,systemConfig|
|[[YourSearchPlugin]]| 40671||
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;LinkingIframes^^<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>

First ''id'' and ''name'' your iframe e.g.@@color:green;id="ifsample1" name="ifsample1"@@
Next ''target'' the iframe in the link e.g @@color:green;target="ifsample1"@@
!!!!Link Code
{{{
<html><A HREF="http://news.bbc.co.uk/" target="ifsample1">BBC</A></html>

}}}
!!!!iframe code
{{{
<html><table width="96%" style="border:none;margin:1px;background:transparent;clear:both;"><iframe id="ifsample1" name="ifsample1" src="http://www.abc.net.au/news/default.htm" width="100%" height="500" scrolling="yes" frameborder="0" allowtransparency style="border:none;"></iframe></table></html>

}}}
----
Try it here.
<html><A HREF="http://news.bbc.co.uk/" target="ifsample1">Link to BBC</A></html>

<html><table width="96%" style="border:none;margin:1px;background:transparent;clear:both;"><iframe id="ifsample1" name="ifsample1" src="http://www.abc.net.au/news/default.htm" width="100%" height="500" scrolling="yes" frameborder="0" allowtransparency style="border:none;"></iframe></table></html>
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;LinkingTips^^<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>
Here are a few examples of how to change the appearance of links.
!!!!!<<gradient horiz #abf #fff>>&nbsp;Example>>
<<<
Normal link appearance TiddlyWiki
<<<

<<<
Make the link normal weight font {{unboldlink{TiddlyWiki}}}
A special link for some reason {{twLink{TiddlyWiki}}}
Indicate it is a local link {{locLink{TiddlyWiki}}}
Indicate it is a external link {{remLink{TiddlyWiki}}}
Make a big link {{bigLink{TiddlyWiki}}}
<<<
!!!!!<<gradient horiz  #abf #fff>>&nbsp;Code>>
''Put this in your ~StyleSheet''
<<<
@@{{{.unboldlink a {font-weight:normal;}}}}@@
@@{{{.twLink a { color: #060;font-weight:normal; }}}}@@
@@{{{.locLink a { color: #c06;font-weight:normal; }}}}@@
@@{{{.remLink a { color: #c90;font-weight:normal; } }}}@@
@@{{{.bigLink a { font-size:10pt;font-weight:bold;} }}}@@
<<<
''Put this where you want your link''
<<<
{{{
Normal link appearance TiddlyWiki
Make the link normal weight font {{unboldlink{TiddlyWiki}}}
Indicate it is a local link {{locLink{TiddlyWiki}}}
Indicate it is a external link {{remLink{TiddlyWiki}}}
A special link for some reason {{bigLink{TiddlyWiki}}}
}}}
<<<
!!!!!<<gradient horiz #0a0 #fff>>&nbsp;@@color:#fff;End@@>>
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[LinkingToPrograms|LinkingToPrograms]]^^<<tiddler CloseThisOpen with: NavigationWithTW  '« back'>>|<<toolbar editTiddler>>» ^^>>
@@color(#C06):''Ever wanted to launch a program or document from an HTML page or your ~TiddlyWiki?'' @@ Now you can and there are two ways of doing it.
<<tabs tabsLaunch [[Launch Applications Program]] "tooltip 1" [[LaunchApplicationsProgram]]  [[Launch Applications Plugin]] "tooltip 2" [[Launch Application Plugin]]  >>

!!!<<gradient horiz #fc3 #fff>>&nbsp;[[LinksToTiddlyToolsPlugins]]^^<<tiddler CloseThisOpen with: ThirdPartyPlugins  '« back'>>|<<toolbar editTiddler>>» ^^>>
*''These are direct links to the ~TiddlyTools Plugin Site'' (Last Modified 08.09.08)
{{fourcolumns{
[[AdvancedOptions|http://tiddlytools.com/#AdvancedOptions]]
[[AliasPlugin|http://tiddlytools.com/#AliasPlugin]]
[[AnimationEffectsPlugin|http://tiddlytools.com/#AnimationEffectsPlugin]]
[[AttachFilePlugin|http://tiddlytools.com/#AttachFilePlugin]]
[[AttachFilePluginFormatters|http://tiddlytools.com/#AttachFilePluginFormatters]]
[[AutoTaggerPlugin|http://tiddlytools.com/#AutoTaggerPlugin]]
[[BackstageTweaks|http://tiddlytools.com/#BackstageTweaks]]
[[BreadcrumbsPlugin|http://tiddlytools.com/#BreadcrumbsPlugin]]
[[CalendarPlugin|http://tiddlytools.com/#CalendarPlugin]]
[[CalendarPluginConfig|http://tiddlytools.com/#CalendarPluginConfig]]
[[CheckboxPlugin|http://tiddlytools.com/#CheckboxPlugin]]
[[CloseAllMacro|http://tiddlytools.com/#CloseAllMacro]]
[[CollapseTiddlersPlugin|http://tiddlytools.com/#CollapseTiddlersPlugin]]
[[ColumnCalculatorPlugin|http://tiddlytools.com/#ColumnCalculatorPlugin]]
[[CommentPlugin|http://tiddlytools.com/#CommentPlugin]]
[[CompareTiddlersPlugin|http://tiddlytools.com/#CompareTiddlersPlugin]]
[[ConfigTweaks|http://tiddlytools.com/#ConfigTweaks]]
[[ConfirmSavePlugin|http://tiddlytools.com/#ConfirmSavePlugin]]
[[CookieJar|http://tiddlytools.com/#CookieJar]]
[[CookieManagerPlugin|http://tiddlytools.com/#CookieManagerPlugin]]
[[CopyTiddlerPlugin|http://tiddlytools.com/#CopyTiddlerPlugin]]
[[CoreTweaks|http://tiddlytools.com/#CoreTweaks]]
[[CoreTweaksArchive|http://tiddlytools.com/#CoreTweaksArchive]]
[[DOMTweaksPlugin|http://tiddlytools.com/#DOMTweaksPlugin]]
[[DOMViewerPlugin|http://tiddlytools.com/#DOMViewerPlugin]]
[[DatePlugin|http://tiddlytools.com/#DatePlugin]]
[[DatePluginConfig|http://tiddlytools.com/#DatePluginConfig]]
[[DeliciousPlayTaggerPlugin|http://tiddlytools.com/#DeliciousPlayTaggerPlugin]]
[[DisableAnimationMacro|http://tiddlytools.com/#DisableAnimationMacro]]
[[DisableWikiLinksPlugin|http://tiddlytools.com/#DisableWikiLinksPlugin]]
[[DiscussionPlugin|http://www.tiddlytools.com/#DiscussionPlugin]]
[[DiscussionPluginInfo|http://www.TiddlyTools.com/#DiscussionPluginInfo]]
[[EditFieldPlugin|http://tiddlytools.com/#EditFieldPlugin]]
[[EditTiddlerPlugin|http://tiddlytools.com/#EditTiddlerPlugin]]
[[ExportTiddlersPlugin|http://tiddlytools.com/#ExportTiddlersPlugin]]
[[ExternalTiddlersPlugin|http://tiddlytools.com/#ExternalTiddlersPlugin]]
[[FAQViewerPlugin|http://tiddlytools.com/#FAQViewerPlugin]]
[[FileDropPlugin|http://tiddlytools.com/#FileDropPlugin]]
[[FileDropPluginConfig|http://tiddlytools.com/#FileDropPluginConfig]]
[[FoldHeadingsPlugin|http://tiddlytools.com/#FoldHeadingsPlugin]]
[[ForEachTiddlerPlugin|http://tiddlytools.com/#ForEachTiddlerPlugin]]
[[FramedLinksPlugin|http://tiddlytools.com/#FramedLinksPlugin]]
[[GoToMacro|http://tiddlytools.com/#GoToMacro]]
[[GotoPlugin|http://tiddlytools.com/#GotoPlugin]]
[[GrayTestEverSearch|http://tiddlytools.com/#GrayTestEverSearch]]
[[HTMLFormattingPlugin|http://tiddlytools.com/#HTMLFormattingPlugin]]
[[ImagePathPlugin|http://tiddlytools.com/#ImagePathPlugin]]
[[ImageSizePlugin|http://tiddlytools.com/#ImageSizePlugin]]
[[ImportTiddlersPlugin|http://tiddlytools.com/#ImportTiddlersPlugin]]
[[ImportTiddlersPluginPatch|http://tiddlytools.com/#ImportTiddlersPluginPatch]]
[[InlineJavascriptPlugin|http://tiddlytools.com/#InlineJavascriptPlugin]]
[[Jash.js|http://tiddlytools.com/#Jash.js]]
[[JumpToTopMacro|http://tiddlytools.com/#JumpToTopMacro]]
[[ListboxPlugin|http://tiddlytools.com/#ListboxPlugin]]
[[LoadTiddlersPlugin|http://tiddlytools.com/#LoadTiddlersPlugin]]
[[LoadTiddlersPluginPatch|http://tiddlytools.com/#LoadTiddlersPluginPatch]]
[[MatchTagsPlugin|http://tiddlytools.com/#MatchTagsPlugin]]
[[MiniBrowserPlugin|http://tiddlytools.com/#MiniBrowserPlugin]]
[[MoveablePanelPlugin|http://tiddlytools.com/#MoveablePanelPlugin]]
[[NestedSlidersPlugin|http://tiddlytools.com/#NestedSlidersPlugin]]
[[NewDocumentPlugin|http://tiddlytools.com/#NewDocumentPlugin]]
[[PlayerPlugin|http://tiddlytools.com/#PlayerPlugin]]
[[PopupPreviewPlugin|http://tiddlytools.com/#PopupPreviewPlugin]]
[[PreviewPlugin|http://tiddlytools.com/#PreviewPlugin]]
[[QuickEditPlugin|http://tiddlytools.com/#QuickEditPlugin]]
[[QuoteOfTheDayPlugin|http://tiddlytools.com/#QuoteOfTheDayPlugin]]
[[RearrangeTiddlersPlugin|http://tiddlytools.com/#RearrangeTiddlersPlugin]]
[[RecentChangesPlugin|http://tiddlytools.com/#RecentChangesPlugin]]
[[RelatedTiddlersPlugin|http://tiddlytools.com/#RelatedTiddlersPlugin]]
[[RunTiddlerPlugin|http://tiddlytools.com/#RunTiddlerPlugin]]
[[SaveAsPlugin|http://tiddlytools.com/#SaveAsPlugin]]
[[SaveFromWebConfig|http://tiddlytools.com/#SaveFromWebConfig]]
[[SaveFromWebPlugin|http://tiddlytools.com/#SaveFromWebPlugin]]
[[SaveOnExitPlugin|http://tiddlytools.com/#SaveOnExitPlugin]]
[[SearchOptionsPlugin|http://tiddlytools.com/#SearchOptionsPlugin]]
[[SendTiddlerPlugin|http://tiddlytools.com/#SendTiddlerPlugin]]
[[SetUserNamePlugin|http://tiddlytools.com/#SetUserNamePlugin]]
[[SinglePageModePlugin|http://tiddlytools.com/#SinglePageModePlugin]]
[[SliceGridPlugin|http://tiddlytools.com/#SliceGridPlugin]]
[[SnapshotPluginInfo|http://www.TiddlyTools.com/#SnapshotPlugin]]
[[SortableGridPlugin|http://tiddlytools.com/#SortableGridPlugin]]
[[SplashScreenPlugin|http://tiddlytools.com/#SplashScreenPlugin]]
[[StickyPopupPlugin|http://tiddlytools.com/#StickyPopupPlugin]]
[[StorySaverPlugin|http://tiddlytools.com/#StorySaverPlugin]]
[[StoryViewerPlugin|http://tiddlytools.com/#StoryViewerPlugin]]
[[SwitchThemePlugin|http://tiddlytools.com/#SwitchThemePlugin]]
[[SwitchThemePluginPatch|http://tiddlytools.com/#SwitchThemePluginPatch]]
[[SystemInfoPlugin|http://tiddlytools.com/#SystemInfoPlugin]]
[[TableOfContentsPlugin|http://tiddlytools.com/#TableOfContentsPlugin]]
[[TableSortingPlugin|http://tiddlytools.com/#TableSortingPlugin]]
[[TagCloudPlugin|http://tiddlytools.com/#TagCloudPlugin]]
[[TagGridPlugin|http://tiddlytools.com/#TagGridPlugin]]
[[TaggedTemplateTweak|http://tiddlytools.com/#TaggedTemplateTweak]]
[[TaskTimerPlugin|http://tiddlytools.com/#TaskTimerPlugin]]
[[TaskTimerPluginConfig|http://tiddlytools.com/#TaskTimerPluginConfig]]
[[TemporaryTiddlersPlugin|http://tiddlytools.com/#TemporaryTiddlersPlugin]]
[[TextAreaPlugin|http://tiddlytools.com/#TextAreaPlugin]]
[[TidIDEPlugin|http://tiddlytools.com/#TidIDEPlugin]]
[[TiddlerIconsPlugin|http://tiddlytools.com/#TiddlerIconsPlugin]]
[[TiddlerIconsPluginConfig|http://tiddlytools.com/#TiddlerIconsPluginConfig]]
[[TiddlerPasswordPlugin|http://tiddlytools.com/#TiddlerPasswordPlugin]]
[[TiddlerPasswordPluginConfig|http://tiddlytools.com/#TiddlerPasswordPluginConfig]]
[[TiddlerTweakerPlugin|http://tiddlytools.com/#TiddlerTweakerPlugin]]
[[TiddlyPodPlugin|http://tiddlytools.com/#TiddlyPodPlugin]]
[[TrashPlugin|http://tiddlytools.com/#TrashPlugin]]
[[UnHideEditingOverHTTP|http://tiddlytools.com/#UnHideEditingOverHTTP]]
[[UnformattedTextPlugin|http://tiddlytools.com/#UnformattedTextPlugin]]
[[UnsavedChangesPlugin|http://tiddlytools.com/#UnsavedChangesPlugin]]
[[UploadPlugin|http://tiddlytools.com/#UploadPlugin]]
[[UploadPluginTweak|http://tiddlytools.com/#UploadPluginTweak]]
[[VisitCounterPlugin|http://tiddlytools.com/#VisitCounterPlugin]]
[[WikifyPlugin|http://tiddlytools.com/#WikifyPlugin]]
}}}
<<forEachTiddler
 where
 'tiddler.tags && tiddler.tags.length'
 script
 '
 function getFirstLine(s) {
 var m = s.match(/\s*(.*)/);
 return m != null && m.length >= 1 ? m[1] : "";
 }
 '
 write
 '"*[["+tiddler.title+"]] &rarr; "+getFirstLine(tiddler.text)+"\n"' 

>>
!!!&nbsp;[[List-style-type Property - CSS]]^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^
The list-style-image property replaces the list-item marker with an image.
Note: Always specify a "list-style-type" property in case the image is unavailable.
{{{
ol
{
list-style-image: url(blueball.gif);
list-style-type: circle
}
}}}
| !Value | !Description |
|none |No marker |
|disc |Default. The marker is a filled circle |
|circle |The marker is a circle |
|square |The marker is a square |
|decimal |The marker is a number |
|decimal-leading-zero |The marker is a number padded by initial zeros (01, 02, 03, etc.) |
|lower-roman |The marker is lower-roman (i, ii, iii, iv, v, etc.) |
|upper-roman |The marker is upper-roman (I, II, III, IV, V, etc.) |
|lower-alpha |The marker is lower-alpha (a, b, c, d, e, etc.) |
|upper-alpha |The marker is upper-alpha (A, B, C, D, E, etc.)&nbsp; |
|lower-greek |The marker is lower-greek (alpha, beta, gamma, etc.) |
|lower-latin |The marker is lower-latin (a, b, c, d, e, etc.) |
|upper-latin |The marker is upper-latin (A, B, C, D, E, etc.) |
|hebrew |The marker is traditional Hebrew numbering |
|armenian |The marker is traditional Armenian numbering |
|georgian |The marker is traditional Georgian numbering (an, ban, gan, etc.) |
|cjk-ideographic |The marker is plain ideographic numbers |
|hiragana |The marker is: a, i, u, e, o, ka, ki, etc. |
|katakana |The marker is: A, I, U, E, O, KA, KI, etc. |
|hiragana-iroha |The marker is: i, ro, ha, ni, ho, he, to, etc. |
|katakana-iroha |The marker is: I, RO, HA, NI, HO, HE, TO, etc. |

<<list>>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[ListExcluded]]^^<<tiddler CloseThisOpen with: ListTiddlersBy  '« back'>>|<<toolbar editTiddler>>» ^^>>

{{tablecenter{
<<forEachTiddler
 where 
 'tiddler.tags.containsAny(["excludeLists"])  && ! tiddler.tags.containsAny(["excludeSearch"])'
   script
        '
                function giveMeTheFirstLine(s) {
                    var m = s.match(/\s*(.*)/);
                    return m != null && m.length >= 1 ? m[1] : "";
                }
        '
    write
'"|"+(index+1)+"|[["+tiddler.title+"]]" +"| "+tiddler.text.length+"|"+tiddler.tags+"|\n"'
 begin '"|sortable|k\n"

       + "|!No.|!Title|!Size|!Tags|h\n"'
 >> 
}}}
----
{{textcenter{
''List of all open tiddlers ForEachPlugin''
}}}
@@position:relative;+++^45em^[See the ForEach code here]
!!!!!List of all open tiddlers
<<<
{{{
<<forEachTiddler where 'story.getTiddler(tiddler.title)'>> 
}}}
<<<
===@@


<<forEachTiddler where 'story.getTiddler(tiddler.title)' >> 


{{textcenter{
''List of all open tiddlers Javascript''
}}}
@@position:relative;+++^45em^[See the Javascript code here]
!!!!!List of all open tiddlers
<<<
{{{
<script>
var out = "" ;
story.forEachTiddler(
  function (title, element) {
 out += "[["+title+"]]\n" ;
});
return out ;
</script> 

}}}
<<<
===@@

<script>
var out = "" ;
story.forEachTiddler(
  function (title, element) {
 out += "[["+title+"]]\n" ;
});
return out ;
</script> 


{{threecolumns{
<<list shadowed>>
}}}
Ten Tiddlers with the tag ''__ft__''

<script>
   var out="";
   out= "|bgcolor:#abf; Sort|bgcolor:#abf; Title |bgcolor:#abf; Modified |h\n";
   var tids=store.sortTiddlers(store.getTaggedTiddlers("ft"),"-modified");
   for (var t=0; t<tids.length && t<10; t++)
   out+= "| "+(t+1)+"|[["+tids[t].title+"]]|"+tids[t].modified.formatString("YYYY.0MM.0DD"+" @ "+"0hh:0mm:0ss")+"|\n"

   return out;
</script>

<script>
   var out="";
   out= "|bgcolor:#abf; Sort|bgcolor:#abf; Title |bgcolor:#abf; Size|bgcolor:#abf; Tags |bgcolor:#abf; Modified |h\n";
   var tids=store.sortTiddlers(store.getTaggedTiddlers("script"),"-modified");
   for (var t=0; t<tids.length && t<10; t++)
   out+= "| "+(t+1)+"|[["+tids[t].title+"]]| "+tids[t].text.length+"|"+tids[t].tags+"|"+tids[t].modified.formatString("YYYY.0MM.0DD")+"|\n"

   return out;
</script>


All tiddlers with the tag ''__ft__''

<script>
   var out="";
  out= "|bgcolor:#abf; Sort|bgcolor:#abf; Title |bgcolor:#abf; Modified |bgcolor:#abf; Tags |h\n";
   var tids=store.sortTiddlers(store.getTaggedTiddlers("ft"),"-length");
   for (var t=0; t<tids.length; t++)
      out+= "| "+(t+1)+"|[["+tids[t].title+"]]|"+tids[t].modified.formatString("YYYY.0MM.0DD")+"|"+tids[t].tags+"|\n"

   return out;
</script>

<<tabs ""  
[[Intro]] "tool tip" [[TiddlersByIntro]] 
[[AlphaTabs ]] "tool tip" [[AlphaTabs]]  
[[ByCreateDate ]] "tool tip" [[TiddlersByCreateDate]] 
[[ByFilesExcluded ]] "tool tip" [[ByFilesExcluded]] 
[[ByModifiedDate ]] "tool tip" [[TiddlersByModifiedDate]] 
[[BySize ]] "BySize" [[TiddlersBySize]] 
[[ByTag ]] "ByTag" [[ByTag]] 
[[ByNoTags ]] "ByNoTags" [[ByNoTags]]  
[[ByTagFirstLine ]] "ByTagFirstLine" [[ByTagFirstLine]] 
[[ByTheTagTiddlySnip ]] "ByTheTagTiddlySnip" [[ByTheTagTiddlySnip]]  
[[ByTheTagCSSRef ]] "ByTheTagCSSRef" [[ByTheTagCSSRef]]
[[ByTheTagScript ]] "ByTheTagScript" [[ByTheTagScript]] 
[[ByTheTagIframe ]] "ByTheTagIframe" [[ByTheTagIframe]]  
[[ForEachGroupByTag ]] "ForEachGroupByTag" [[ForEachGroupByTag]] 
[[ForEachInAnotherTW ]] " " [[ForEachInAnotherTW]] 
[[ByTheTagsystemConfig ]] "ByTheTagsystemConfig" [[ByTheTagsystemConfig]] 
[[ListExcluded ]] "" [[ListExcluded]]
[[ListOpenTiddlers ]] "" [[ListOpenTiddlers]]
[[GetPersonsAge ]] "" [[GetPersonsAge]]
[[NestedStyles ]] "NestedStyles" [[NestedStyles]]
[[PluginIdentifierScript ]] "" [[PluginIdentifierScript]]>>






!!!<<gradient horiz #fc3 #fff>>[[ListTiddlersByModifier]]^^<<tiddler CloseThisOpen with: Scripts  '« back'>>|<<toolbar editTiddler>>» ^^>>

{{{
<script>
        var out=[]; var who='';
        var tids=store.getTiddlers('modifier');
        for (i=0; i<tids.length; i++) { var t=tids[i];
                if (who!=t.modifier) {
                        who=t.modifier;
                        out.push('by '+who+':');
                }
                out.push('#[['+t.title+']]');
        }
        return out.join('\n');
</script> 
}}}
<script>
        var out=[]; var who='';
        var tids=store.getTiddlers('modifier');
        for (i=0; i<tids.length; i++) { var t=tids[i];
                if (who!=t.modifier) {
                        who=t.modifier;
                        out.push('by '+who+':');
                }
                out.push('*[['+t.title+']]');
        }
        return out.join('\n');

</script> 
<script>
   var out=[];
   var tids=store.getTiddlers("title","systemConfig");
   for (var t=0; t<tids.length; t++)
      out.push(String.encodeTiddlyLink(tids[t].title));
   return out.join("\n");
</script> 
To create an unordered list put an asterisk (*) at the beginning of each line. If you use two or three asterisks, you'll create second and third levels. Like this:
!!!Example Unordered List
{{{
*Entry One
**Sub-entry A
***Sub-sub-entry i
***Sub-sub-entry ii
**Sub-entry B
*Entry Two
*Entry Three
}}}
!!!Example Executed
*Entry One
**Sub-entry A
***Sub-sub-entry i
***Sub-sub-entry ii
**Sub-entry B
*Entry Two
*Entry Three
----
To create an Ordered List use an octathorpe (#) instead of an asterisk.
!!!Example Ordered Lists
{{{
#Entry One
##Sub-entry A
###Sub-sub-entry i
###Sub-sub-entry ii
##Sub-entry B
#Entry Two
#Entry Three
}}}
!!!Example Executed
#Entry One
##Sub-entry A
###Sub-sub-entry i
###Sub-sub-entry ii
##Sub-entry B
#Entry Two
#Entry Three
----


!!!<<gradient horiz #fc3 #fff>>&nbsp;[[ListsMixedUlOl]]^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>
*''Mixing bullet and numbered lists''
This will result in the 'header' items being numbered consecutively,
rather than restarting with "1" for each header. 

!!!!!<<gradient horiz #fcb #fff>>&nbsp;Code>>

{{{
# header 1
** item 11
** item 12
** item 13
# header 2
** item 21
** item 22
** item 23
#header 3
** item 31
** item 32
** item 33
}}}
!!!!!<<gradient horiz #fcb #fff>>&nbsp;Example>>
# header 1
** item 11
** item 12
** item 13
# header 2
** item 21
** item 22
** item 23
#header 3
** item 31
** item 32
** item 33

Source: [[Mixing bullet and numbered lists - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/b6b24062541d67e0]]
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;ListsOrdered^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>
''To create an Ordered List use an octathorpe (#) at the beginning of each line.  If you use two or three octathorpes, you'll create second and third levels.''
!!!!!<<gradient horiz #aaaaaa #bbbbbb #cccccc #eeeeee #ffffff>>&nbsp;Example>>

#Entry One
##Sub-entry
###Sub-sub-entry
###Sub-sub-entry
##Sub-entry
#Entry Two
#Entry Three
!!!!!<<gradient horiz #aaaaaa #bbbbbb #cccccc #eeeeee #ffffff>>&nbsp;Code>>
|<<tiddler ./ordlist>>|<<tiddler ./OLcode>>|
----
<<<
Sometimes certain content breaks the proper order of numbers like a table so place the table in a CSS class wrapper (div) or (span) that starts on the same line as the numbered bullet item, like this:<<toolbar editTiddler>>to see full code.
# step 1, enter the following values: {{div{
|!name|!value|
|key1|value1|
|key2|value2|
}}}
# step 2, do some stuff 
{{{
# step 1, enter the following values: {{div{
|!name|!value|
|key1|value1|
|key2|value2|
}}}
{{{
# step 2, do some stuff 
}}}
<<<

''Start with a particular number.''
<<<

{{{
<html><hide linebreaks>
<ol start="7"><li>  seventh item </li><li>  eightth item </li></ol> 
</html>

}}}
<<<
<part ordlist hidden>
Ordered List Code

{{{
#Entry One
##Sub-entry A
###Sub-sub-entry i
###Sub-sub-entry ii
##Sub-entry B
#Entry Two
#Entry Three
}}}
</part>

<part OLcode hidden>
Change this in your StyleSheet if you want different list styles.
You can find what is available here [[List-style-type Property - CSS]]
+++[or have a sneak preview here.]<<tiddler [[List-style-type Property - CSS]]>> ===
{{{
ol { list-style-type: upper-alpha }
ol ol { list-style-type: lower-alpha }
ol ol ol { list-style-type: lower-greek }
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-greek }
ol ol ol ol ol ol ol { list-style-type: decimal }
}}}
</part>
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;ListsUnordered^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>
''To create an unordered list put an asterisk (*) at the beginning of each line. If you use two or three asterisks, you'll create second and third levels.''
!!!!!<<gradient horiz #aaa #fff>>&nbsp;Example>>
*Entry One
**Sub-entry A
***Sub-sub-entry i
***Sub-sub-entry ii
**Sub-entry B
*Entry Two
*Entry Three

!!!!!<<gradient horiz  #aaa #fff>>&nbsp;Code>>

{{{
*Entry One
**Sub-entry A
***Sub-sub-entry i
***Sub-sub-entry ii
**Sub-entry B
*Entry Two
*Entry Three
}}}
----
{{textcenter{
@@color:#c06;
<script>
document.write("<font face='Trebuchet MS,Arial' color='#990000' size='-1'>");
document.write("<font color='#666666'size='-1' >Current URL:&nbsp;</font>");
<!-- document.write('<textarea class="myformat" rows="2" cols="75">'); -->

document.write(document.location.href.substring(7));
<!-- document.write('</textarea>'); -->
document.write("</font>");
</script>
@@
}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;LoveStyles^^<<tiddler CloseThisOpen with: MemorizeTables  '« back'>>|<<toolbar editTiddler>>» ^^>>

Think about the flashcards you've used to study for tests. Memorizable tables work in a very similar way. You look at something, then guess the "answer" in your head. If your guess was correct, you're done with that card. If your guess was incorrect, you put the card aside to use again until you're sure you've memorized it.
{{tablecenter{
|References <br> http://memorizable.com/ <br>http://memorizable.com/Help <br> http://memorizable.com/Code <br> http://memorizable.com/Code_Guidelines  <br> ''Click memorize in the table heading''|
}}}
*Try clicking (memorize) in both columns (to decide which side to start with).

<html><hide linebreaks><table class="mem"><tr><th style="white-space:nowrap;"> Love Style <a href="#" onmouseover="showMemorizeHelp();" onmouseout="hideHelp();" id="memorizeLink" onclick="return Mem.start( this )">(memorize)</a></th><th>Definition <a href="#" onmouseover="showMemorizeHelp();" onmouseout="hideHelp();" id="memorizeLink" onclick="return Mem.start( this )">(memorize)</a></th></tr><tr><td>Passionate (Eros) </td><td>Characterized by a search for the ideal mate with emphasis on physical beauty </td></tr><tr><td>Game-playing (Ludus) </td><td>Characterized by playing the field; seeking sexual conquests without personal commitment </td></tr><tr><td>Friendship (Storage) </td><td>  Characterized by slowly developing affection culminating from a long-term relationship</td></tr><tr><td>Logical (Pragma)  </td><td>  Characterized by a practical, rational emphasis on desirable qualities of personality and behavior </td></tr><tr><td>Possessive (Mania) </td><td>  Characterized by extreme emotional involvement that can lead to obsessive jealously </td></tr><tr><td>Selfless (Agape)  </td><td>  Characterized by genuine caring and commitment; a desire to give to another without expectation of the same</td></tr></table></html>
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("m")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
!!!<<gradient horiz #Fc3  #fff>>[[Intro|MacroIntro]]^^<<tiddler CloseThisOpen with: "Macros Built-in"  '« back'>>|<<toolbar editTiddler>>» ^^>>
*On these tabs are the macros that are built into the core code of ~TiddlyWiki.
*Click on a tab to see how they are used.

<<gradient horiz #F7D8A0  #fff>>&nbsp;Preview of contents: @@color:#C06;''&raquo; &raquo;'' @@ Today: <<today>> TW Version: <<version>>>>

<<popup [[Macro Reference]] [[<<forEachTiddler
where
'tiddler.tags.contains("Macros")'$))]]>>
<<tabs "" [[Intro ]] "" [[MacroIntro]] [[today (date) ]] "" [[today]]  [[timeline ]] "" [[TimeLine]] [[tag ]] "" [[tag]]  [[tagging ]] "" [[tagging]] [[newJournal ]] ""  [[newJournal]] [[newTiddler ]] "" [[newTiddler]]  [[tiddler ]] "" [[tiddler]] [[version ]] "" [[version]] [[list ]] "" [[list]]  [[Sliders ]] "" [[Sliders]] [[tabs ]] "" [[tabs]] [[Sparklines ]] "" [[Sparklines]] [[GradientMacro ]] "" [[GradientMacro]] [[ToolbarMacro ]] "" [[ToolbarMacro]]>>
<<tabs "" [[AnswerMacro ]] "" [[AnswerMacro]]
[[AutoClearMessage ]] "" [[AutoClearMessage]]
[[LewcidMacros ]] "" [[Lewcid TW Macros]] 
[[Popup Menu ]] "" [[PopupMacroDocs]] 
[[Smily Macro ]] "" [[smilyMacro]]  
[[WordCount ]] "" [[WordCountMacro]] 
[[ListTiddlersBy]] "" [[ListTiddlersBy]]>>

!!!<<gradient horiz #fc3 #ffffff>>[[Macros|MacrosIntro]]^^<<tiddler CloseThisOpen with: [[Macros Built-in]]  '« back'>>|<<toolbar editTiddler>>» ^^>>

*There are several macros that are built in to the core code of ~TiddlyWiki that perform some important and useful functions.
!!!!!<<gradient horiz #aaaaaa #ffffff>>&nbsp;Preview of contents: >>
*Today: <<today>>

*TW Version: <<version>>
*Sparklines are "data-intense, design-simple, word-sized graphics. <<sparkline 471 0 277 0 440 0 159 0 231 0 344 0 337 0 336 0 305 0 378 0 258 0 495 0 228 0 454 0 456 0 332 0 154 0 438 0 272 0 404 0 395 0 317 0 251 0 242 0 220 0 195 0 112 0 132 0 285 0 116 0 418 0 380 0 324>>

+++[Click here to see a tabbed version of built-in macros]
----
<<tiddler [[Macros Built-in]]>>
===
{{moveovermainmenu textleft{
<<tiddler DateVersion>>

----
[[What's in a Tiddler|WhatsInATiddler]]
[[Formatting the Page|FormattingThePage]]
[[Formatting Tiddlers|FormattingTiddlers]]
[[Formatting Text|FormattingText]]
[[Formatting Dates|Date]]
[[Formatting Tables|Tables]]
[[Formatting Images|FormattingImages]]
[[Non-Keyboard Codes|Entities-Codes]]
----
[[HowToUseBookmarks]]
[[HowToUseLinks / Navigation|HowToUseLinks]]
[[HowToUseTags|Tags]]
[[HowToUpgrade]]
----
UsingColor
----
@@color:#ffffc8;Macros@@ [[Built-in|Macros Built-in]] @@color:#F00;|@@ [[Other|Macros Other]]
ListTiddlersBy
----
[[Plugins|ThirdPartyPlugins]] @@color:#F00;|@@ [[Scripts|Scripts]]
----
<<tiddler CSSMenu>>
[[CSS]] @@color:#F00;|@@ [[HTML]] @@color:#F00;|@@ [[JavaScript]] @@color:#F00;|@@ [[Ref|CodeReferenceAll]]
----
[[Hints and Kinks - CSS]]
[[Hints and Kinks - Tweaks]]
[[Tools For TiddlyWiki|ToolsForTiddlyWiki]]
<<tiddler Encryption##encryptionlinks>>
----
[[Index to tiddlywiki.org]]
[[Server-SideSolutions]]
+++[FileExtensions]
<<tiddler [[File Extensions]]>>
===

[[OtherHelpSites]]
+++[Experimental]
@@color(#ffc):&bull;@@&nbsp;[[Download the Internet|http://www.w3schools.com/downloadwww.htm]]
@@color(#ffc):&bull;@@&nbsp;<<popup [[TiddlySnips]] [[<<forEachTiddler where 'tiddler.tags.containsAny(["TiddlySnip"])'$))]]>>

===

----
[[The Ultimate Bookmark|http://theultimatebookmark.tiddlyspot.com]]
----
{{textcenter{
[[Pegasus|http://www.pmail.gen.nz]]
~~@@position:relative;+++^45em^[more Pmail]
{{locLink{
http://www.vandenbogaerde.net/han_lkfr.htm
http://community.pmail.com/
}}}
===@@~~
[img[http://img264.imageshack.us/img264/2222/statssx1.gif][Statistics-Hits]]

[img[Help stamp out plain paper aeroplanes|http://img89.imageshack.us/img89/8775/out9283845py0.gif][http://zurqui.com/crinfocus/paper/deco/plane.html]]
}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;MakeATiddlerScript^^<<tiddler CloseThisOpen with: Scripts  '« back'>>|<<toolbar editTiddler>>» ^^>>
@@color:#00c;This script when run will generate a new tiddler titled MyTiddler@@
<<<
{{{
<script>

var title="MyTiddler";
var txt="this is a test"; // an empty string
var tags=[]; // an empty array
var fields={}; // an empty object
var who=config.options.txtUserName; // current username
var when=new Date(); // current timestamp
var tid=store.getTiddler(title);
if (tid) { txt=tid.text; tags=tid.tags; fields=tid.fields; }
txt=txt.replace(/Something/g,"SomethingElse");
tags=("something"+" "+"another");
store.saveTiddler(title,title,txt,who,when,tags,fields);
</script>
}}}
<<<

<script>
          place.style.color="#c06"; /* set text color */
</script> 
+++[makeTiddlers]
<<newTiddler "New Tiddler">>
<<newJournal "YYYY.0MM.0DD Week-0WW ddd at 0hh:0mm:0ss">>

<<tiddler NewExampleFromTemplate>>
<<tiddler NewHTMLFromTemplate>>
<<tiddler NewIframeFromTemplate>>
<<tiddler NewObjectFromTemplate>>
<<tiddler NewSliderFromTemplate>>
<<tiddler NewSystemConfigTiddler>>
<<tiddler NewTableFromTemplate>>
<<tiddler NewTabsFromTemplate>>
<<tiddler NewTweakFromTemplate>>

===
<html><hide linebreaks>
 <a href='javascript:void(eval(decodeURIComponent("(function()%250A%257B%250Avar%2520script%253Ddocument.createElement(%2522script%2522)%253B%250Ascript.src%253D%2522http%253A%252F%252Ftrac.tiddlywiki.org%252Fbrowser%252FTrunk%252Fcontributors%252FXavierVerges%252Fplugins%252FFirefoxPrivilegesPlugin.js%253Fformat%253Draw%2522%253B%250Ascript.onload%253Dfunction()%257Bvar%2520b%253Dbackstage%253B%2520var%2520fp%253D%2522firefoxPrivileges%2522%253B%250Avar%2520bt%253DcreateTiddlyButton(b.toolbar%252C%2522security%2522%252Bglyph(%2522downTriangle%2522)%252C%2522%2522%252Cb.onClickTab%252C%2522backstageTab%2522)%253B%250Abt.setAttribute(%2522task%2522%252Cfp)%253Bb.switchTab(fp)%253B%257D%253B%250Adocument.getElementsByTagName(%2522head%2522)%255B0%255D.appendChild(script)%253B%250A%257D)()")))'>~FirefoxPrivileges</a> 
</html>
<html><div align="center"><br><a href="http://www.maploco.com/view.php?id=1038888"><img border=0 src="http://www.maploco.com/vmap/1038888.png" alt="Visitor Map"></a><br><a href="http://www.maploco.com/">Create your own visitor map!</a><br></div></html>
{{tablecenter{
|>|>|>|>| !March 2007 Statistics |
|&nbsp;|''Page Loads'' |''Unique Visitors''|''First Time Visitors''| ''Returning Visitors''|
|Total 	| 5,349| 4,487| 3,145| 1,342|
|Average| 178| 145| 101| 43|
|>|>|>|>|<<tiddler ./mar>>|
}}}
<part mar hidden>
*''~StatsCounter Hits for the month of'': @@color:#c06;01 Mar. <<sparkline 248 0 211 0 217 0 178 0 153 0 149 0 217 0 185 0 185 0 194 0 109 0 179 0 172 0 161 0 173 0 146 0 182 0 125 0 162 0 217 0 225 0 180 0 246 0 135 0 109 0 151 0 174 0 180 0 178 0 208 0 175 0>> 31 March 2007@@
**[Mar 11-min (109) ] 
**[Mar 01-max (248)] 
**grand total (''5524'') as of @@color:#04f; ''&raquo;'' 31.03.07 09:34@@

</part>
''Table heading links to w3schools references on this subject.''
<HTML><table><tr align="center" bgcolor="#99AAEE"><td colspan="3"><b>[[Margin Properties|http://www.w3schools.com/css/css_margin.asp]]</b></td></tr><tr align="center"><td>''Property''</td><td>''Description'' </td><td>''Value'' </td></tr><tr valign="top"><td rowspan="4"> margin </td><td rowspan="4">margin: 1em 1em 2em 2em; </td><td> margin-top </td></tr><tr><td> margin-right </td></tr><tr><td>margin-bottom</td></tr><tr><td> margin-left </td></tr><tr align="left"><td>margin-top</td><td>Sets the top margin of an element</td><td> auto
length
% </td></tr><tr align="left"><td>margin-right</td><td>Sets the right margin of an element</td><td> auto
length
%</td></tr><tr align="left"><td>margin-bottom</td><td>Sets the bottom margin of an element</td><td> auto
length
%</td></tr><tr align="left"><td>margin-left</td><td> <<tiddler ./margin>><br>Sets the left margin of an element</td><td> auto
length
% </td></tr></table></HTML>

<part margin hidden>
<style type="text/css">
p.leftmargin {margin-left: 2cm}
</style>

<p class="leftmargin"></p></part>

<html>
<!-- Start of StatCounter Code -->
<script type="text/javascript" language="javascript">
var sc_project=2253833; 
var sc_invisible=1; 
var sc_partition=20; 
var sc_security="a3f8bb13"; 
</script>

<script type="text/javascript" language="javascript" src="http://www.statcounter.com/counter/counter.js"></script><noscript><a href="http://www.statcounter.com/" target="_blank"><img  src="http://c21.statcounter.com/counter.php?sc_project=2253833&java=0&security=a3f8bb13&invisible=1" alt="page hit counter" border="0"></a> </noscript>

<!-- End of StatCounter Code -->
</html>

<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml'/>
<script type="text/javascript" src="http://latex.codecogs.com/editor.js"></script>

<link rel="shortcut icon" href="http://img99.imageshack.us/img99/1614/kittyiconrc9.jpg">
<!--}}}-->

<SCRIPT LANGUAGE = "JavaScript">


//Display Time of last visit script- Mattias Sjoberg
//Modified by JavaScript Kit (http://javascriptkit.com)
//Visit http://javascriptkit.com for this script

var expDays = 30;
var exp = new Date(); 
exp.setTime(exp.getTime() + (expDays*24*60*60*1000));

function When(info){
	// When
	    	var rightNow = new Date()
		var WWHTime = 0;
		WWHTime = GetCookie('WWhenH')
		
		WWHTime = WWHTime * 1

		var lastHereFormatting = new Date(WWHTime);  // Date-i-fy that number
	        var intLastVisit = (lastHereFormatting.getYear() * 10000)+(lastHereFormatting.getMonth() * 100) + lastHereFormatting.getDate()
	        var lastHereInDateFormat = "" + lastHereFormatting;  // Gotta use substring functions
	        var dayOfWeek = lastHereInDateFormat.substring(0,3)
	        var dateMonth = lastHereInDateFormat.substring(4,10)
		var hours = "" + lastHereFormatting.getHours()
		var year = lastHereFormatting.getYear()
                if (year < 1000) year+=1900
		var minutes = "" + lastHereFormatting.getMinutes()
		if (minutes.substring(0,1) == minutes){
			minutes = "0" + minutes
		}
	        var WWHText = dayOfWeek + ", " + dateMonth + " " + year + " at " +  hours + ":" + minutes// display
	
		SetCookie ("WWhenH", rightNow.getTime(), exp)

	return WWHText;
}

function Count(info){
	var psj=0;
	// How many times
		var WWHCount = GetCookie('WWHCount')
		if (WWHCount == null) {
			WWHCount = 0;
		}
		else{
			WWHCount++;
		}
		SetCookie ('WWHCount', WWHCount, exp);


	return WWHCount+1;
}



function set(){
//	VisitorName = prompt("Who are you?", "Nada");
//	SetCookie ('VisitorName', VisitorName, exp);
	SetCookie ('WWHCount', 0, exp);
	SetCookie ('WWhenH', 0, exp);
}

function getCookieVal (offset) {  
	var endstr = document.cookie.indexOf (";", offset);  
	if (endstr == -1)    
		endstr = document.cookie.length;  
		return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie (name) {  
	var arg = name + "=";  
	var alen = arg.length;  
	var clen = document.cookie.length;  
	var i = 0;  
	while (i < clen) {    
	var j = i + alen;    
	if (document.cookie.substring(i, j) == arg)      
		return getCookieVal (j);    
		i = document.cookie.indexOf(" ", i) + 1;    
		if (i == 0) break;   
	}  
	return null;
}

function SetCookie (name, value) {  
	var argv = SetCookie.arguments;  
	var argc = SetCookie.arguments.length;  
	var expires = (argc > 2) ? argv[2] : null;  
	var path = (argc > 3) ? argv[3] : null;  
	var domain = (argc > 4) ? argv[4] : null;  
	var secure = (argc > 5) ? argv[5] : false;  
	document.cookie = name + "=" + escape (value) + 
	((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + 
	((path == null) ? "" : ("; path=" + path)) +  
	((domain == null) ? "" : ("; domain=" + domain)) +    
	((secure == true) ? "; secure" : "");
}

function DeleteCookie (name) {  
	var exp = new Date();  
	exp.setTime (exp.getTime() - 1);  
	// This cookie is history  
	var cval = GetCookie (name);  
	document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();

}


</SCRIPT> 

<noscript>
JavaScript is turned off in your web browser. Turn it on to view TW Help
</noscript>

<style type="text/css">
#contentWrapper {display:none;}
body {background-color:#000080;background-image: url("http://www.symbex.net.au/Wiki/fistback_bg.jpg");background-repeat: repeat-x top-left;}
</style>

<div id="SplashScreen" style="border: 0px solid #c06; -moz-border-radius:1em; display:block; text-align:center; width:500px; margin:75px auto; padding:1em; color:#ffffc8; font-size:24pt; font-family:verdana,arial,helvetica,sans; background-color:;"><br><span style="font-size: 14px; color:#ffffc8;">TiddlyWiki help file for beginners is loading<br></span><div align="center"><font face="Arial" size="-2" color="#0ff">

<script>
if (Count()==1){
document.write("We welcome you on your 1st visit to our page")
When()
}
else if (Count()>1)
document.write("Welcome back. Your last visit was on " + When() +".")
</script></font></div><span style="font-size: 10px; color:#0ff;">please wait.... <br></span><span style="font-size: 14px; color:#ffffc8;"><br>Assembled and Built by Morris Gray</span><br><div style="font-size: 12px; color:#00f; text-align:left;border:1px solid #c06;-moz-border-radius:1em; display:block; padding:0.8em;background: #ffc"><script type="text/javascript" src="http://mythfolklore.net/calendars/adams/adams.php?encode=js"></script><br>Douglas Adams <span style="font-size: 10px; color:#999;">&laquo;Hitchhiker's Guide to the Galaxy&raquo;</span></div></div>
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml'>
<link rel="shortcut icon" href="http://img99.imageshack.us/img99/1614/kittyiconrc9.jpg">


<noscript>
JavaScript is turned off in your web browser. Turn it on to view Science Matters.
</noscript>

<style type="text/css">

   1. contentWrapper {display:none;}

body { background: #000080 url("http://www.symbex.net.au/Wiki/fistback_bg.jpg") repeat-x top left;top left; }
</style>
<div id="SplashScreen" style="border: 0px solid #ccc; -moz-border-radius:1em; display:block; text-align:center; width:500px; margin:75px auto; padding:1em; color:#ffffc8; font-size:24pt; font-family:verdana,arial,helvetica,sans; background-color:;"><img src="http://img398.imageshack.us/img398/7708/smlogoqr7.gif">

<span style="font-size: 14px; color:#ffffc8; ">Personal Science page of Morris Gray is loading</span>
<span style="font-size: 10px; color:#0ff;">please wait....
<img src="http://img517.imageshack.us/img517/6100/loadingrz5.gif" /></span>
<span style="font-size: 14px; color:#ffffc8; "> Best viewed with FireFox</span>

<div style="font-size: 12px; color:#009; text-align:left;border:1px solid #c06;-moz-border-radius:1em; display:block; padding:0.8em;background: #ffc;">
 <SCRIPT type="text/javascript" src="http://mythfolklore.net/calendars/adams/adams.php?encode=js"></script>
Douglas Adams <span style="font-size: 10px; color:#999;">«Hitchhiker's Guide to the Galaxy»</span></div></div></div>
/***
|Name|MatchTagsPlugin|
|Source|http://www.TiddlyTools.com/#MatchTagsPlugin|
|Documentation|http://www.TiddlyTools.com/#MatchTagsPluginInfo|
|Version|2.0.0|
|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|'tag matching' with full boolean expressions (AND, OR, NOT, and nested parentheses)|
!!!!!Documentation
> see [[MatchTagsPluginInfo]]
!!!!!Revisions
<<<
2008.09.04 [2.0.0] added "report" and "panel" options to generate formatted results and store in a tiddler.  Also, added config.macros.matchTags.formatList(place,fmt,sep) API to return formatted output for use with other plugins/scripts
| please see [[MatchTagsPluginInfo]] for additional revision details |
2008.02.28 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.matchTags= {major: 2, minor: 0, revision: 0, date: new Date(2008,9,4)};

// store.getMatchingTiddlers() processes boolean expressions for tag matching
//    sortfield (optional) sets sort order for tiddlers - default=title
//    tiddlers (optional) use alternative set of tiddlers (instead of current store)
TiddlyWiki.prototype.getMatchingTiddlers = function(tagexpr,sortfield,tiddlers) {

	var debug=config.options.chkDebug; // abbreviation
	var cmm=config.macros.matchTags; // abbreviation
	var r=[]; // results are an array of tiddlers
	var tids=tiddlers||store.getTiddlers(sortfield||"title");
	if (tiddlers && sortfield) store.sortTiddlers(tids,sortfield);
	if (debug) displayMessage(cmm.msg1.format([tids.length]));

	// try simple lookup to quickly find single tags or tags that
	// contain boolean operators as literals, e.g. "foo and bar"

	for (var t=0; t<tids.length; t++)
		if (tids[t].isTagged(tagexpr)) r.pushUnique(tids[t]);
	if (r.length) {
		if (debug) displayMessage(cmm.msg4.format([r.length,tagexpr]));
		return r;
	}
	
	// convert expression into javascript code with regexp tests,
	// so that "tag1 AND ( tag2 OR NOT tag3 )" becomes
	// "/\~tag1\~/.test(...) && ( /\~tag2\~/.test(...) || ! /\~tag3\~/.test(...) )"

	// normalize whitespace, tokenize operators, delimit with "~"
	var c=tagexpr.trim(); // remove leading/trailing spaces
	c = c.replace(/\s+/ig," "); // reduce multiple spaces to single spaces
	c = c.replace(/\(\s?/ig,"~(~"); // open parens
	c = c.replace(/\s?\)/ig,"~)~"); // close parens
	c = c.replace(/(\s|~)?&&(\s|~)?/ig,"~&&~"); // &&

	c = c.replace(/(\s|~)AND(\s|~)/ig,"~&&~"); // AND
	c = c.replace(/(\s|~)?\|\|(\s|~)?/ig,"~||~"); // ||
	c = c.replace(/(\s|~)OR(\s|~)/ig,"~||~"); // OR
	c = c.replace(/(\s|~)?!(\s|~)?/ig,"~!~"); // !
	c = c.replace(/(^|~|\s)NOT(\s|~)/ig,"~!~"); // NOT
	c = c.replace(/(^|~|\s)NOT~\(/ig,"~!~("); // NOT(
	// change tag terms to regexp tests
	var terms=c.split("~"); for (var i=0; i<terms.length; i++) { var t=terms[i];
		if (/(&&)|(\|\|)|[!\(\)]/.test(t) || t=="") continue; // skip operators/parens/spaces
		if (t==config.macros.matchTags.untaggedKeyword)
			terms[i]="tiddlertags=='~~'"; // 'untagged' tiddlers
		else
			terms[i]="/\\~"+t+"\\~/.test(tiddlertags)";
	}
	c=terms.join(" ");
	if (debug) { displayMessage(cmm.msg2.format([tagexpr])); displayMessage(cmm.msg3.format([c])); }

	// scan tiddlers for matches
	for (var t=0; t<tids.length; t++) {
	 	// assemble tags from tiddler into string "~tag1~tag2~tag3~"

		var tiddlertags = "~"+tids[t].tags.join("~")+"~";
		try { if(eval(c)) r.push(tids[t]); } // test tags
		catch(e) { // error in test
			displayMessage(cmm.msg2.format([tagexpr]));
			displayMessage(cmm.msg3.format([c]));
			displayMessage(e.toString());
			break; // skip remaining tiddlers
		}
	}
	if (debug) displayMessage(cmm.msg4.format([r.length,tagexpr]));
	return r;
}
//}}}
//{{{
config.macros.matchTags = {
	msg1: "scanning %0 input tiddlers",
	msg2: "looking for '%0'",
	msg3: "using expression: '%0'",
	msg4: "found %0 tiddlers matching '%1'",
	noMatch: "no matching tiddlers",
	untaggedKeyword: "-",
	untaggedLabel: "no tags",
	untaggedPrompt: "show tiddlers with no tags",
	defTiddler: "MatchingTiddlers",
	defFormat: "%0",
	defSeparator: "\n",
	reportHeading: "Found %0 tiddlers tagged with: '{{{%1}}}'\n----\n",
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var mode=params[0]?params[0].toLowerCase():'';
		if (mode=="inline")
			params.shift();
		if (mode=="report" || mode=="panel") {
			params.shift();
			var target=params.shift()||this.defTiddler;
		}
		if (mode=="popup") {
			params.shift();
			if (params[0]&&params[0].substr(0,6)=="label:") var label=params.shift().substr(6);
			if (params[0]&&params[0].substr(0,7)=="prompt:") var prompt=params.shift().substr(7);
		} else {
			var fmt=(params.shift()||this.defFormat).unescapeLineBreaks();
			var sep=(params.shift()||this.defSeparator).unescapeLineBreaks();
		}
		var sortBy="+title";
		if (params[0]&&params[0].substr(0,5)=="sort:") sortBy=params.shift().substr(5);
		var expr = params.join(" ");
		if (mode!="panel" && (!expr||!expr.trim().length)) return;
		if (expr==this.untaggedKeyword)
			{ var label=this.untaggedLabel; var prompt=this.untaggedPrompt };
		switch (mode) {
			case "popup": this.createPopup(place,label,expr,prompt,sortBy); break;
			case "panel": this.createPanel(place,expr,fmt,sep,sortBy,target); break;
			case "report": this.createReport(target,expr,fmt,sep,sortBy); break;
			case "inline": default: this.createInline(place,expr,fmt,sep,sortBy); break;
		}
	},
	formatList: function(tids,fmt,sep) {
		var out=[];
		for (var t=0; t<tids.length; t++) {
			var title="[["+tids[t].title+"]]";
			var who=tids[t].modifier;
			var when=tids[t].modified.toLocaleString();
			var text=tids[t].text;
			var first=tids[t].text.split("\n")[0];
			var desc=store.getTiddlerSlice(tids[t].title,"description");
			desc=desc||store.getTiddlerSlice(tids[t].title,"Description");
			desc=desc||store.getTiddlerText(tids[t].title+"##description");
			desc=desc||store.getTiddlerText(tids[t].title+"##Description");
			out.push(fmt.format([title,who,when,text,first,desc]));
		}
		return out.join(sep);
	},
	createInline: function(place,expr,fmt,sep,sortBy) {
		wikify(this.formatList(store.sortTiddlers(store.getMatchingTiddlers(expr),sortBy),fmt,sep),place);
	},
	createPopup: function(place,label,expr,prompt,sortBy) {
		var btn=createTiddlyButton(place,
			(label||expr).format([expr]),
			(prompt||config.views.wikified.tag.tooltip).format([expr]),
			function(ev){ return config.macros.matchTags.showPopup(this,ev||window.event); });
		btn.setAttribute("sortBy",sortBy);
		btn.setAttribute("expr",expr);
	},
	showPopup: function(here,ev) {
		var p=Popup.create(here); if (!p) return false;
		var tids=store.getMatchingTiddlers(here.getAttribute("expr"));
		store.sortTiddlers(tids,here.getAttribute("sortBy"));
		var list=[]; for (var t=0; t<tids.length; t++) list.push(tids[t].title);
		if (!list.length) createTiddlyText(p,this.noMatch);
		else {
			var b=createTiddlyButton(createTiddlyElement(p,"li"),
				config.views.wikified.tag.openAllText,
				config.views.wikified.tag.openAllTooltip,
				function() {
					var list=this.getAttribute("list").readBracketedList();
					story.displayTiddlers(null,tids);
				});
			b.setAttribute("list","[["+list.join("]] [[")+"]]");
			createTiddlyElement(p,"hr");
		}
		var out=this.formatList(tids," &nbsp;%0&nbsp; ","\n"); wikify(out,p);
		Popup.show(p,false);
		ev.cancelBubble=true;
		if(ev.stopPropagation) ev.stopPropagation();
		return false;
	},
	createReport: function(target,expr,fmt,sep,sortBy) {
		var tids=store.sortTiddlers(store.getMatchingTiddlers(expr),sortBy);
		if (!tids.length) { displayMessage('no matches for: '+expr); return false; }
		var msg=config.messages.overwriteWarning.format([target]);
		if (store.tiddlerExists(target) && !confirm(msg)) return false;
		var out=this.reportHeading.format([tids.length,expr])
		out+=this.formatList(tids,fmt,sep);
		store.saveTiddler(target,target,out,config.options.txtUserName,new Date(),[],{});
		story.closeTiddler(target); story.displayTiddler(null,target);
	},
	createPanel: function(place,expr,fmt,sep,sortBy,tid) {
		var html="<form style='display:inline'><!-- \
			--><input type='text'    name='expr' style='width:55%' title='tag expression'><!-- \
			--><input type='text'    name='fmt'  style='width:10%' title='list item format'><!-- \
			--><input type='text'    name='sep'  style='width:5%'  title='list item separator'><!-- \
			--><input type='text'    name='tid'  style='width:20%' title='target tiddler title'><!-- \
			--><input type='button'  name='go'   style='width:8%'  value='go' onclick=\" \
				var expr=this.form.expr.value; \
				if (!expr.length) { alert('Enter a boolean tag expression'); return false; } \
				var fmt=this.form.fmt.value; \
				if (!fmt.length) { alert('Enter the list item output format'); return false; } \
				var sep=this.form.sep.value.unescapeLineBreaks(); \
				var tid=this.form.tid.value; \
				if (!tid.length) { alert('Enter a target tiddler title'); return false; } \
				config.macros.matchTags.createReport(tid,expr,fmt,sep,'title'); \
				return false;\"> \
			</form>";
		var s=createTiddlyElement(place,"span"); s.innerHTML=html;
		var f=s.getElementsByTagName("form")[0];
		f.expr.value=expr; f.fmt.value=fmt; f.sep.value=sep.escapeLineBreaks(); f.tid.value=tid;
	}
};
//}}}
//{{{
// SHADOW TIDDLER for displaying default panel input form
config.shadowTiddlers.MatchTags="{{smallform{<<matchTags panel>>}}}";
//}}}
//{{{
// TWEAK core filterTiddlers() for enhanced boolean matching in [tag[...]] syntax:
// use getMatchingTiddlers instead getTaggedTiddlers
var fn=TiddlyWiki.prototype.filterTiddlers;
fn=fn.toString().replace(/getTaggedTiddlers/g,"getMatchingTiddlers");
eval("TiddlyWiki.prototype.filterTiddlers="+fn);
//}}}
//{{{
// REDEFINE core handler for enhanced boolean matching in tag:"..." paramifier
// use filterTiddlers() instead of getTaggedTiddlers() to get list of tiddlers.
config.paramifiers.tag = {
	onstart: function(v) {
		var tagged = store.filterTiddlers("[tag["+v+"]]");
		story.displayTiddlers(null,tagged,null,false,null);
	}
};
//}}}
/***
|Name|MatchTagsPluginInfo|
|Source|http://www.TiddlyTools.com/#MatchTagsPlugin|
|Documentation|http://www.TiddlyTools.com/#MatchTagsPluginInfo|
|Version|2.0.0|
|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 MatchTagsPlugin|
!!!!!Usage
<<<
This plugin extends the {{{[tag[tagname]]}}} macro parameter syntax used by the TiddlyWiki core {{{<<list>>}}} macro so that, instead of a simple tagname value, you can specify a complex combination of tagname values using a //boolean expression// containing AND, OR, and NOT operators, enclosed in nested parentheses if needed.
{{{
<<list filter "[tag[expression]]">>
}}}
In addition, the plugin defines a new macro, {{{<<matchTags ...>>}}} that can be used instead of the core {{{<<list>>}}} macro to output a list of matching tiddlers //using a custom 'item format' and 'separator'//.  You can also use this macro to create a command link that displays the matching tiddlers within a popup list, similar to the standard {{{<<tag tagName>>}}} macro, but matching a combination of tag values rather than a single tag value.
{{{

<<matchTags inline "format" "separator" sort:fieldname tag expression>>
<<matchTags popup "label:..." "prompt:..." sort:fieldname tag expression>>
<<matchTags report TiddlerName "format" "separator" sort:fieldname tag expression>>

<<matchTags panel  Tiddlername "format" "separator" sort:fieldname tag expression>>
}}}
where:
* ''inline'', ''report'', ''panel'', and ''popup''<br>are keywords that indicate the type of output that the macro should produce:
** ''inline'' //(default)// - displays a list of matching tiddlers embedded directly in tiddler content
** ''popup'' - embeds a command button that, when clicked, lists matching tiddlers in a ~TiddlyWiki popup display
** ''report'' - generates a list of matching tiddler in a separate [[MatchingTiddlers]] report tiddler
** ''panel'' - displays an interactive form for generating a [[MatchingTiddlers]] report
* ''format''<br>defines the wiki-syntax for rendering list items.  The following //substitution markers// can be used to insert tiddler-specific information for each matched tiddler:
** {{{%0}}} - title
** {{{%1}}} - modifier (author)
** {{{%2}}} - modified (date of last change)
** {{{%3}}} - text (all tiddler content)
** {{{%4}}} - firstline (tiddler content up to the first newline)
** {{{%5}}} - description (tiddler slice or section content named "description" or "Description")
* ''separator''<br>defines the wiki-syntax to use //between// each matching title (e.g., ", " creates a comma-separated list, while "\n" displays one tiddler per line).
* ''sort:fieldname'' (optional)<br>specifies the sort order for the resulting list of tiddlers.  You can specify any tiddler field name (standard or custom-defined).  Standard tiddler fieldnames include: //title, created, modified, modifier//.  If not specified, tiddlers are sorted by title.  You can prefix the fieldname with "+" or "-" to indicate ascending or descending order, respectively.
* ''tag expression''<br>the remaining parameter(s) are joined together to define the boolean expression to be matched.
When using the ''popup'' option, there are two additional (and optional) parameters you can specify:
* ''"label:..."''(optional)<br> indicates the text for the popup command link.  The default is to display the specified tag expression itself.
* ''"prompt:..."'' (optional)<br>indicates the mouseover 'tooltip' for the popup command link.
When using the ''report'' or ''panel'' option, an additional parameter may be provided:
* ''~TiddlerName''<br>specifies the target tiddler into which the output will be generated (default: [[MatchingTiddlers]])
Notes:
*A tag expression can use any combination of text operators: ''AND'', ''OR'', ''NOT'' (or their equivalent javascript operators: ''&&'', ''||'', ''!''), contained in nested parentheses as needed.
*Operators should be delimited by spaces or parentheses.
*Before matching, leading/trailing spaces are automatically trimmed and multiple spaces are reduced to single spaces.
*Tag values containing embedded spaces do //not// have to be enclosed in {{{[[...]]}}}.
*Tag values that contain boolean operators as ''literal text'' (e.g., {{{"foo and bar"}}} or {{{"foo && bar"}}} cannot be used within a compound boolean expression, but //can// be matched if specified by themselves, without any other tag values or operators.
*To match tiddlers that are untagged, use "-" as a special tag value within the expression.
*You can match "wildcard" tags  by using //regular expression// (i.e., "text pattern") syntax within a tag value, e.g. {{{[Tt]agvalue.*}}}

<<<
!!!!!Examples:
<<<
display a popup list:
{{{
<<matchTags popup sample OR (settings AND systemConfig)>>
}}}
><<matchTags popup sample OR (settings AND systemConfig)>>
display a popup list with custom label:
{{{
<<matchTags popup "label:samples and settings" sample OR (settings AND systemConfig)>>
}}}
><<matchTags popup "label:samples and settings" sample OR (settings AND systemConfig)>>

display a popup list of untagged tiddlers:
{{{
<<matchTags popup ->>
}}}
><<matchTags popup ->>
generate a report using interactive form control panel
{{{
<<matchTags panel "MatchingTiddlers" "%0" "\n" sample OR (settings AND systemConfig)>>
}}}

>{{smallform{<<matchTags panel "MatchingTiddlers" "%0" "\n" sample OR (settings AND systemConfig)>>}}}
comma-separated list:
{{{
<<matchTags "%0" ", " sample OR (settings AND systemConfig)>>

}}}
><<matchTags "%0" ", " sample OR (settings AND systemConfig)>>
numbered list (sorted by modification date, most recent first):
{{{
<<matchTags "#%0 (%2)<br>^^%5^^" "\n" sort:-modified sample OR (settings AND systemConfig)>>

}}}
><<matchTags "#%0 (%2)<br>^^%5^^" "\n" sort:-modified sample OR (settings AND systemConfig)>>
bullet-item list (using the TiddlyWiki core {{{<<list filter ...>>}}} macro):
//(Note: when using the core {{{<<list>>}}} macro, you should always enclose the entire tag filter parameter within quotes)//
{{{
<<list filter "[tag[sample OR (settings AND systemConfig)]]">>

}}}
><<list filter "[tag[sample OR (settings AND systemConfig)]]">>
<<<
!!!!!Revisions
<<<
2008.09.04 [2.0.0] added "report" and "panel" options to generate formatted results and store in a tiddler.  Also, added config.macros.matchTags.formatList(place,fmt,sep) API to return formatted output for use with other plugins/scripts
2008.09.01 [1.9.2] fixed return value from popup button handler so IE doesn't attempt to leave the page
2008.08.31 [1.9.1] improved expression conversion handling to permit use of regular expressions for "wildcard" matching within tag values
2008.06.12 [1.9.0] added support for formatted output of: title, who, when, text, firstline, description (slice or section)
2008.06.05 [1.8.0] in getMatchingTiddlers(), added optional sortfield and tiddlers params to support use of alternative set of tiddlers instead of using current store content (provides filtering support for ImportTiddlersPlugin)
2008.06.04 [1.7.1] in getMatchingTiddlers(), reworked conversion of expression for more robust parsing of whitespace, parentheses and javascript operators and allow use of "-" (untagged) //within// expressions
2008.05.19 [1.7.0] in getMatchingTiddlers(), use reverseLookup() instead of forEachTiddler() to permit access to tiddlers included via [[IncludePlugin|http://tiddlywiki.abego-software.de/#IncludePlugin]]
2008.05.17 [1.6.0] in getMatchingTiddlers(), rewrote expression conversion to handle tags with spaces tag values that are substrings of other tag values.
2008.05.16 [1.5.0] added special case using "-" to find UNTAGGED tiddlers
2008.05.15 [1.4.0] added "popup" output option
2008.05.14 [1.3.4] instead of hijacking getTaggedTiddlers(), added tweak of filterTiddlers() prototype to replace getTaggedTiddlers() with getMatchingTiddler() so that core use of getTaggedTiddlers() does not perform boolean processing of tiddler titles such as [[To Be or not To Be]].  Also, improved "filter error" messages in getMatchingTiddlers() to report tag expression in addition to actual eval error.
2008.04.25 [1.3.3] in getTaggedTiddlers(), fixed handling for "not" embedded within a tag
2008.04.21 [1.3.2] in getTaggedTiddlers(), fixed handling for initial "NOT" and "NOT(expr)" syntax
2008.04.20 [1.3.1] in getTaggedTiddlers(), corrected check for boolean expression to avoid excess processing of tags containing spaces.  Also, improved handling for non-existing tags that contain text of existing tags
2008.04.19 [1.3.0] in filterTiddlers(), use getTaggedTiddlers() instead of matchTags(), and then hijack getTaggedTiddlers() to add matchTags() handling
2008.04.19 [*.*.*] plugin size reduction: moved documentation to [[MatchTagsPluginInfo]]
2008.03.25 [1.2.0] added optional "sort:fieldname" parameter
2008.03.20 [1.1.2] in handler(), replace 'encodeTiddlyLink' with explicit [[...]] brackets to ensure that one-word tiddler titles are properly rendered as TiddlyLinks
2008.02.29 [1.1.1] in matchTags(), added handling to skip remaining tiddlers if expression has an error
2008.02.29 [1.1.0] refactored to define store.matchTags() and extend store.filterTiddlers()
2008.02.28 [1.0.0] initial release

<<<
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;MathHtmlEntities^^<<tiddler CloseThisOpen with: Entities-Codes  '« back'>>|<<toolbar editTiddler>>» ^^>>
|>|>| !Math |
| !Symbol | !Character | !Description |
| {{{&deg;}}} | &deg; |degree sign |
| {{{&plusmn;}}} | &plusmn; |plus or minus sign |
| {{{&times;}}} | &times; |multiplication sign |
| {{{&divide;}}} | &divide; |division sign |
| {{{&lt;}}} | &lt; |less-than sign |
| {{{&gt;}}} | &gt; |greater-than sign |
| {{{&lang;}}} | &lang; |left angle bracket |
| {{{&rang;}}} | &rang; |right angle bracket |
| {{{&not;}}} | &not; |not sign |
| {{{&sup1;}}} | &sup1; |superscript one |
| {{{&sup2;}}} | &sup2; |superscript two |
| {{{&sup3;}}} | &sup3; |superscript three |
| {{{&middot;}}} | &middot; |middle dot |
| {{{&afrac14;}}} | &frac14; |one quarter |
| {{{&frac12;}}} | &frac12; |one half |
| {{{&frac34;}}} | &frac34; |three quarters |
| {{{&permil;}}} | &permil; |per mille sign |
| {{{&fnof;}}} | &fnof; |latin small f with hook (function) |
| {{{&prime;}}} | &prime; |prime / minutes / feet |
| {{{&Prime;}}} | &Prime; |double prime / seconds / inches |
| {{{&frasl;}}} | &frasl; |fraction slash |
| {{{&weierp;}}} | &weierp; |script capital P |
| {{{&image;}}} | &image; |bold I / imaginary part |
| {{{&real;}}} | &real; |bold R / real part |
| {{{&alefsym;}}} | &alefsym; |first transfinite cardinal |
| {{{&micro;}}} | &micro; |micro sign |
| {{{&forall;}}} | &forall; |for all |
| {{{&part;}}} | &part; |partial differential |
| {{{&exist;}}} | &exist; |there exists |
| {{{&empty;}}} | &empty; |empty set / diameter |
| {{{&nabla;}}} | &nabla; |backward difference |
| {{{&isin;}}} | &isin; |element of |
| {{{&notin;}}} | &notin; |not an element of |
| {{{&ni;}}} | &ni; |contains as member |
| {{{&prod;}}} | &prod; |product sign |
| {{{&sum;}}} | &sum; |n-ary sumation |
| {{{&minus;}}} | &minus; |minus sign |
| {{{&lowast;}}} | &lowast; |asterisk operator |
| {{{&radic;}}} | &radic; |square root / radical |
| {{{&prop;}}} | &prop; |proportional to |
| {{{&infin;}}} | &infin; |infinity |
| {{{&ang;}}} | &ang; |angle |
| {{{&and;}}} | &and; |logical and |
| {{{&or;}}} | &or; |logical or |
| {{{&cap;}}} | &cap; |intersection |
| {{{&cup;}}} | &cup; |union |
| {{{&int;}}} | &int; |integral |
| {{{&there4;}}} | &there4; |therefore |
| {{{&sim;}}} | &sim; |similar to |
| {{{&cong;}}} | &cong; |approximately equal to |
| {{{&asymp;}}} | &asymp; |almost equal to |
| {{{&ne;}}} | &ne; |not equal to |
| {{{&equiv;}}} | &equiv; |identical to |
| {{{&le;}}} | &le; |less-than or equal to |
| {{{&ge;}}} | &ge; |greater-than or equal to |
| {{{&sub;}}} | &sub; |subset of |
| {{{&sup;}}} | &sup; |superset of |
| {{{&nsub;}}} | &nsub; |not a subset of |
| {{{&sube;}}} | &sube; |subset of or equal to |
| {{{&supe;}}} | &supe; |superset of or equal to |
| {{{&oplus;}}} | &oplus; |direct sum |
| {{{&otimes;}}} | &otimes; |vector product |
| {{{&perp;}}} | &perp; |orthogonal to / perpendicular |
| {{{&sdot;}}} | &sdot; |dot operator |
{{tablecenter{
|>|>|>|>| !May 2007 Statistics |
|&nbsp;| Page Loads | Unique Visitors | First Time Visitors | Returning Visitors |
|Total | 5,515| 4,603| 3,322| 1,281|
|Average | 178| 148| 107| 37|
}}}
.mem { border-collapse: collapse; border: solid #ccc;
         border-width: 1px 0px 0px 1px; margin: 5px 5px 5px 15px; padding: 0px; }
.mem th {  font-weight: bold;  background-color: #ccc; }
.mem th a { font-size: 9px; }
.mem td {  font-family: ariel;  font-size: 11px; border: solid #ccc;
                 border-width: 0px 1px 1px 0px; padding: 1px 9px 1px 9px; }
.mem th { font-family: ariel; font-size: 11px; border: solid #ccc;
border-width: 0px 1px 1px 0px; padding: 1px 9px 1px 9px; }
/***
!!!<<gradient horiz #fc3 #fff>>&nbsp;MemorizablePlugin^^<<tiddler CloseThisOpen with: ThirdPartyPlugins  '« back'>>|<<toolbar editTiddler>>» ^^>>

|Name|MemorizablePlugin|
|Source|URL: http://memorizable.com|
|Version|1.0.0|
|Author|Craig D. Muth Copyright (c) 2007|
|Description|Creats flashcard like tables for memorizing data|
|For use in TiddlyWiki see|http://tinyurl.com/34fjk6|
***/
//{{{
// License
//
// Note: This is a modified version of the X11 (aka MIT) open source
// license.  It lets you use, modify, distribute and sell, etc.,
// requiring only that you leave the "Help" and "About Memorizable
// Tables" links (under "Options") in tact.  If you desire to use the
// software without these links please contact the author.
//
// COPYRIGHT AND PERMISSION NOTICE for Memorizable Tables
//
// Copyright (c) 2007, Craig D. Muth, memorizable.com
// Author's Website URL: http://memorizable.com
//
// All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
// restriction, including without limitation the rights to use, copy,
// modify, merge, publish, distribute, and/or sell copies of the
// Software, and to permit persons to whom the Software is furnished
// to do so, subject to the following conditions:
//
// The above copyright notice, Author's Website URL, and this
// permission notice shall be included in all copies or substantial
// portions of the Software, and any hyperlinks in the user interface
// in the Software which refer to any page on the Author's Website may
// not be removed, disabled, altered, obscured, or repositioned.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE
// COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR
// ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
// DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
// WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
// OF THIS SOFTWARE.
//
// Except as contained in this notice, the name of a copyright holder
// shall not be used in advertising or otherwise to promote the sale,
// use or other dealings in this Software without prior written
// authorization of the copyright holder.
//

Mem = new Object();

Mem.blankRowCount = 9;
Mem.mGray = "#d8d4c0";
Mem.mGreen = "#fff";
Mem.mClicked = "#b8b4a0";

Mem.myCellIndex = function(th) {
 var cells = th.parentNode.cells;
 var inn = 0;
 for(var x=0; x<cells.length; x++) {
  if(cells.item(x) == th)
   inn = x;
 }
 return inn;
}
Mem.start = function( item ) {
 var columnClicked;

 item.parentNode.parentNode.parentNode.parentNode.isMem = true;
 var t = this.setT( item );

 columnClicked = Mem.myCellIndex(item.parentNode);

 // If already in progress
 if( t.s && t.s.tbodyBackup ) {
  // Kill blinking processes
  this.tChile('directionsDiv').cycles = 1;
  Mem.restore();
 }

 // Create new if necessary
 if( typeof( t.s ) != 'object')
  t.s = new Array();

 t.s.column = columnClicked;

 // Create backup
 var bak = t.tBodies[0].cloneNode( true );
 t.s.tbodyBackup = bak;

 // Init correct count
 t.s.correctCount = 0;

 t.s.pending = new Array();

 var initialLength = t.tBodies[0].rows.length;
 for(var x=1; x<initialLength; x++) {
  // Build up list of indexes
  t.s.pending[t.s.pending.length] = t.tBodies[0].rows[1];
  // Remove from table
  t.tBodies[0].removeChild( t.tBodies[0].rows[1] );
 }

 t.s.totalQuestions = t.s.pending.length;

 var tds = t.s.pending[0].getElementsByTagName("TD");
 var numberOfColumns=tds.length;

 // Add blank rows to end
 for(var x=1; x<t.s.pending.length; x++) {
  if( x <= this.blankRowCount ) {
   var tr = document.createElement("TR");

   // For each column
   for(var y=0; y<numberOfColumns; y++) {
     var td = document.createElement("TD");  td.innerHTML = "&nbsp;";
     tr.appendChild( td );
   }
   t.tBodies[0].appendChild( tr );
  }
 }

 // If hidden blank rows
 if( t.s.pending.length > this.blankRowCount + 1 ) {

   // Add ... row
   var tr = document.createElement("TR");
   var td = document.createElement("TD");
   //   td.innerHTML = ". &nbsp; . &nbsp; .";
   td.innerHTML = "<div style='text-align: center; font-weight: bold; font-size: 6px; font-family: arial black; margin-top: 2px;'>. &nbsp; &nbsp; . &nbsp; &nbsp; .</div>";
   var colspan = document.createAttribute("COLSPAN");
   colspan.nodeValue=numberOfColumns;
   td.setAttributeNode(colspan);
   tr.appendChild( td );
   //numberOfColumns
   t.tBodies[0].appendChild( tr );

 }

 this.shuffle( t.s.pending ); t.s.pending.reverse(); this.shuffle( t.s.pending );

 // Add buttons, etc. to end of table.
 var tr = document.createElement("TR");
 var statusTd = document.createElement("TD");
 statusTd.id = 'statusTd';
 tr.appendChild( statusTd );
 var colspan = document.createAttribute("COLSPAN");
 colspan.nodeValue=numberOfColumns;
 statusTd.setAttributeNode(colspan);
 t.tBodies[0].appendChild( tr );


 // Create placeholders for buttons, etc.
 statusTd.innerHTML = "\
  <div id=mode style='text-align:right; height:19px; font-size:10px; color:#666;'>" + Mem.getModeDiv(0) + "</div>\
  <div id=directionsDiv style='margin-bottom:4px; text-align: left; font-size:10px; font-family:verdana,arial,sans-serif; color:#666;'></div>\
  <div id=buttons style='float:left; height:21px;'></div>\
  <div id=options style='padding: 5px 0px 0px 8px; width:55px; margin-top:0px; float:right;'><a href='#' onclick='return Mem.showOptions(this);' id=optionsLink>Options</a></div>\
  <div id=progress style='margin-top:6px; float:right; font-size:8px; font-family:impact; color:#aaa; text-align:right; vertical-align:middle; '></div>\

" + this.getOptions();

 // Enable options if enabled before
 if( t.s.optionsOn )
  this.showOptions( statusTd );

 this.presentQuestion();

 this.glow(100);
 t.s.mode = "flashcard";

 return false;
}

Mem.addEvent = function( obj, type, fn ) {
 if ( obj.attachEvent ) {
  obj['e'+type+fn] = fn;
  obj[type+fn] = function() {obj['e'+type+fn]( window.event );}
  obj.attachEvent( 'on'+type, obj[type+fn] );
 } else
  obj.addEventListener( type, fn, false );
}

Mem.getQuestionCell = function() {
 return Mem.t.s.pending[0].cells[ Mem.t.s.column ];
}

Mem.createProgressBar = function() {
 var progress = "";
 var progressDups = "";
 var foundAlready = new Array();
 for(var x=0; x<Mem.t.s.pending.length ;x++) {

  // If found already
  if( foundAlready[ Mem.t.s.pending[x].innerHTML ] )
   progressDups += "|";
  else
   progress += "|";

  // Remember we found this one
  foundAlready[ Mem.t.s.pending[x].innerHTML ] = true;
 }
 return progress + "<span style='color:#f00;'>" + progressDups + "</span>";
}


Mem.presentQuestion = function() {

 this.tChile('directionsDiv').innerHTML = 
  "<div style='text-align:center;'>Guess the answer <b style='color:#4d0'>in your head</b>.<span style='font-size:7px;'></span> Then click <b>show answer</b>, or type <b>1</b>.</div>";
 this.tChile('buttons').innerHTML = "<button id=showAnswer style='margin-right:111px; width:11em; margin-bottom:1px; font-family: verdana,arial,sans-serif; font-size:9px;' onclick='Mem.showAnswer( this )' >show answer &nbsp;<span style='color:#aaa;text-decoration:underline;'>1</span></button>";

 var iveGuessed = this.tChile('showAnswer');
 Mem.addEvent( iveGuessed, 'mouseover', function(){ if(typeof( iveGuessedOnMouseOver ) =='function') iveGuessedOnMouseOver() } );
 Mem.addEvent( iveGuessed, 'mouseout', function(){ if(typeof( iveGuessedOnMouseOver ) =='function') iveGuessedOnMouseOut() } );

 // Add pending row
 Mem.t.tBodies[0].insertBefore( Mem.t.s.pending[0], Mem.t.tBodies[0].rows[ Mem.t.s.correctCount + 1 ] );

 // Insert "guess the answer", remembering old value
 var questionCell = this.getQuestionCell();
 Mem.t.s.questionCellOld = questionCell.innerHTML;
 questionCell.innerHTML = "<span style='text-decoration:none; color:#4d0; font-weight:bold; cursor:pointer;' title=\"Guess the answer in your head.  Then, click the 'show answer' button.\">what&nbsp;goes&nbsp;here?</span>";

 // Help alert
 Mem.addEvent( questionCell.getElementsByTagName("SPAN")[0], 'mousedown', function(){ alert('Guess the answer in your head.  Then, click the \'show answer\' button at the bottom of the table.') } );

 this.tChile('progress').innerHTML = this.createProgressBar();
}

Mem.showAnswer = function( button, noScroll ) {
 var t = this.setT( button );

 // Exit if other mode
 if( t.s.mode != "flashcard" )
  return;

 // Exit if no answer to show
 if( t.s.questionCellOld == null )
  return;

 var questionCell = this.getQuestionCell();
 questionCell.innerHTML = t.s.questionCellOld;
 t.s.questionCellOld = null;

 // Default
 var iWasRightText = "I was right";

 // Count how many of this remaining
 var timesFound = 0;
 for(var x=0; x<t.s.pending.length ;x++)
  if( t.s.pending[x].innerHTML == t.s.pending[0].innerHTML )
   timesFound++;

 // If not the last time
 if( timesFound > 1 )
  iWasRightText = "show later";

 this.tChile('directionsDiv').innerHTML = 
  "<div style='text-align:center;'>Press the appropriate button based on your guess, or type <b>1</b> or <b>2</b>.</div>";
 this.tChile('buttons').innerHTML = "\

<button id=iWasWrong style='width:11em; padding:0px; margin: 0px 12px 1px 0px; font-family: verdana,arial,sans-serif; font-size:9px;' onclick='Mem.answer( false, this )'>I was wrong &nbsp;<span style='color:#aaa;text-decoration:underline;'>1</span></button>\
<button id=iWasRight class='iWasRightButton' style='width:10em; margin-bottom:1px; font-family: verdana,arial,sans-serif; font-size:9px;' onclick='Mem.answer( true, this )' >" + iWasRightText + " &nbsp;<span style='color:#aaa;text-decoration:underline;'>2</span></button>\

";
 this.tChile('progress').innerHTML = this.createProgressBar();

 var iWasRight = this.tChile('iWasRight');
 var iWasWrong = this.tChile('iWasWrong');
 Mem.addEvent( iWasRight, 'mouseover', function(){ if(typeof( iWasRightOnMouseOver ) =='function') iWasRightOnMouseOver() } );
 Mem.addEvent( iWasRight, 'mouseout', function(){ if(typeof( iWasRightOnMouseOut ) =='function') iWasRightOnMouseOut() } );
 Mem.addEvent( iWasWrong, 'mouseover', function(){ if(typeof( iWasWrongOnMouseOver ) =='function') iWasWrongOnMouseOver() } );
 Mem.addEvent( iWasWrong, 'mouseout', function(){ if(typeof( iWasWrongOnMouseOut ) =='function') iWasWrongOnMouseOut() } );

 if(! noScroll)
  this.scrollDownIfNecessary( this.tChile('statusTd') );

}

Mem.answer = function( correct, button, noScroll ) {

 var t = this.setT( button );

 // If answer not shown
 if( t.s.questionCellOld != null )
  return;

 // If other mode
 if( t.s.mode != "flashcard" )
  return;

 var dup = this.currentIsDuplicate();
 var last = t.s.pending[0];

 // Remove from front of pending
 t.s.pending.splice( 0, 1 );

 var allRows = t.tBodies[0].rows;

 if( correct ) {
  // If elsewhere in pending, remove from table
  if( dup )
   t.tBodies[0].removeChild( last );

  // If pending is empty, they're finished
  if( t.s.pending.length == 0 ) {
   this.finished();
   return;
  }

  // If not dup, increase count of correct
  if( ! dup ) {
   t.s.correctCount++;

   // If enough rows in table, remove last one (blank or ...)
   if( t.s.correctCount + this.blankRowCount >= t.s.totalQuestions - 1 )
    t.tBodies[0].removeChild( allRows[allRows.length - 2] );
  }
 }
 // If they missed it
 else {

  // Remove from table
  t.tBodies[0].removeChild( last );
  t.s.pending.push( last );
  t.s.pending.splice( 2, 0, last );
 }

 this.presentQuestion();

 if(this.tChile('directionsDiv').cycles >= 3)
  this.tChile('directionsDiv').cycles = 2;

 if(! noScroll)
  this.scrollDownIfNecessary( this.tChile('statusTd') );
}

Mem.currentIsDuplicate = function() {
 for(var x=1; x<Mem.t.s.pending.length ;x++) {
  if( Mem.t.s.pending[x] == Mem.t.s.pending[0] )
   return true;
 }
 return false;
}

Mem.message = function( s ) {
 var d = document.createElement('div');
 var t = document.createTextNode( s );
 d.appendChild(t);
 document.body.appendChild(d);
}

Mem.shuffle = function( list ) {
  var holder, swaps, i, j;
  for (swaps=0; swaps<(list.length*2); swaps++) {
    i = Math.floor(Math.random()*list.length);
    j = Math.floor(Math.random()*list.length);
    holder = list[i];
    list[i] = list[j];
    list[j]=holder;
  }
  return list;
}

Mem.dump = function( o ) {
 var s = "";
 for(m in o)
  s += m + ", ";
 return s;
}

Mem.keyWasPressed = function( keyp ) {

 var pressed;
 if( navigator.appName == "Netscape" ) pressed = keyp.which;
 if( navigator.appVersion.indexOf("MSIE") != -1 ) pressed = event.keyCode;

 // In case no table in progress
 try {
  // Show answer
  if ( ( pressed == "1".charCodeAt(0) ) || ( pressed == 97 ) ) {
   // If answer not shown yet
   if( Mem.t.s.questionCellOld != null )
    Mem.showAnswer();
   else
    Mem.answer( false );
  }

  // TODO make sure there are no modifiers held down (because of ctrl-r)
  // I was right
  if ( ( pressed == "2".charCodeAt(0) ) || ( pressed == 98 ) )
   Mem.answer( true );

 } catch(e) {}
}

Mem.memorizeAllTables = function( item, onlyDoTheseTables ) {

 // If we are a "hide" link
 if( item.innerHTML == "close" ) {
  item.innerHTML = item.innerHTML_old;

  var removeThis = item.parentNode.getElementsByTagName("DIV")[0];
  // Close and exit
  item.parentNode.removeChild( removeThis );
  return false;
 }

 // Change link to 'close'
 item.innerHTML_old = item.innerHTML;
 item.innerHTML = "close";

 // Create table in new div
 var d = document.createElement("div");
 d.innerHTML = "\
 <table class=\"memorizableAll\"><tr> \
   <th>Left Side <a style=\"font-size: 9px;\" href=\"#\" onclick=\"return Mem.start(this)\">(memorize)</a></th> \
   <th>Right Side <a style=\"font-size: 9px;\" href=\"#\" onclick=\"return Mem.start(this)\">(memorize)</a></th>\
 </tr></table>";

 // Get ref to it
 var tb = d.getElementsByTagName("TBODY")[0];

 var memTableCount = 0;

 // Convert list to map
 var onlyMap = [];
 if( onlyDoTheseTables )
  for(var x=0; x<onlyDoTheseTables.length; x++)
   onlyMap[ onlyDoTheseTables[x].toString() ] = true;

 // For each table
 var ts = document.getElementsByTagName("table");
 for(var x=0; x<ts.length; x++) {

  // In case null pointer when seeking anchor
  try {

   // If mem table
   if( ts[x].id == "memTable" ) {
    memTableCount++;

    if( onlyDoTheseTables && ! onlyMap[memTableCount.toString()] )
     continue;

    var rs = ts[x].rows;

    // If in progress, use backup
    if( ts[x].s && ts[x].s.tbodyBackup )
     rs = ts[x].s.tbodyBackup.rows;

    // Add each row to the table    
    for(var z=1; z<rs.length; z++)
     tb.appendChild( rs[z].cloneNode( true ) );
   }
  } catch(e) {}
 }

 // Append div
 item.parentNode.appendChild( d )

 // Start a session, using the 2nd "(memorize)" link
 Mem.start( d.getElementsByTagName("A")[1] );

 return false;
}

// Returns Y coord of top of element.
Mem.findY = function( o ) {
 var curtop = 0;
 if (o.offsetParent) {
  curtop = o.offsetTop
  while (o = o.offsetParent)
   curtop += o.offsetTop
 }
 return curtop;
}

// Get distance from page top to window bottom
Mem.getWindowBottomY = function() {
 // Get scrollY
 var scrollY = document.body.scrollTop;
 if( window.pageYOffset )
  scrollY = window.pageYOffset

 var winY = document.body.clientHeight;
 if( window.innerHeight )
  winY = window.innerHeight;

 return scrollY + winY;
}

Mem.scrollDownIfNecessary = function( obj ) {
 // If last row close to getting off-screen
 if( this.findY( obj ) + 55 > this.getWindowBottomY() ) {
  // Scroll down smoothly
  var myInterval = window.setInterval(function () { window.scrollBy( 0, 2 ); }, 10);
  window.setTimeout(function () { clearInterval(myInterval); },650);
 }
}

Mem.startFirst = function(level) {
 var as = byid('memTable').getElementsByTagName('a');
 var a = as.length == 1 ? as[0] : as[1];
 Mem.start( a );

 // If 2, start another record
 if(level == 2) {
  Mem.showAnswer(this.tChile('showAnswer'), true);
  Mem.answer(true, this.tChile('iWasRightButton'), true);
  this.tChile('directionsDiv').cycles = 100;
 }
}

Mem.parents = function(node, levels) {
 for(x=1;x<=levels;x++) node = node.parentNode;
 return node; 
}

Mem.showOptions = function(node) {

 this.setT(node);
 this.tChile('optionsLink').style.display="none";
 this.tChile('optionsBox').style.display="block";

 Mem.t.s.optionsOn = true;

 // Don't let clicking on options change default table
 this.restoreTBody();

 return false;
}

Mem.hideOptions = function(node) {

 this.setT(node);
 this.tChile('optionsLink').style.display="block";
 this.tChile('optionsBox').style.display="none";

 Mem.t.s.optionsOn = false;

 // Don't let clicking on options change default table
 this.restoreTBody();

 return false;
}

Mem.close = function( node ) {

 var t = this.setT( node );

 // Don't re-open options
 Mem.t.s.optionsOn = false;

 Mem.restore();

 // Invoke hook if reset
 if(node != null) {
  // In case method not there
  try {
   mem_close( t );
  } catch(e) {}
 }

 return false;
}

Mem.finished = function() {

 var directions = this.tChile('directionsDiv');
 var buttons = this.tChile('buttons');
 // Default values
 directions.innerHTML = "<div style='text-align:center;'>Congratulations, you've finished.</div>";
 buttons.innerHTML = "";

 // Restore rows
 this.addRowsFromBackup();

 // Call hook
 try {
  mem_finished( [directions, buttons] );
 } catch(e) {}

 Mem.glow(2, "finished");
 return false;
}

Mem.startOver = function( node ) {

 var t = this.setT( node );

 if( t.s.mode == "flashcard" )
  Mem.start( t.getElementsByTagName('a')[t.s.column] );

 else if( t.s.mode == "matching" )
  Mem.startMatching( t );

 return false;
}


Mem.startMatching = function( node ) {
 var t = this.setT( node );

 t.s.match0 = t.s.match1 = null;

 // Change help text
 this.tChile('mode').innerHTML = Mem.getModeDiv(1);
 this.tChile('directionsDiv').innerHTML = 
  "<div style='text-align:center;'><b>Note:</b> this table has been <i style='font-weight:bold; color:#f90; cursor: pointer;'><span onclick='Mem.startOver(this);'>shuffled</span></i>. Click items to identify matches.</div>";
 this.tChile('buttons').innerHTML = "";
 this.tChile('progress').innerHTML = "";

 var rows = t.rows;

 // Add rows from backup
 this.addRowsFromBackup();

 // Format them
 rows = t.rows;
 for(var x=1; x<(rows.length-1); x++) {
  var tds = rows[x].cells;
  // Add click events
  Mem.addEvent( tds[0], 'click', function(){ Mem.matchingClicked( this, 0 ) } );
  Mem.addEvent( tds[1], 'click', function(){ Mem.matchingClicked( this, 1 ) } );
  tds[0].style.cursor = tds[1].style.cursor = "pointer";
  tds[0].style.background = tds[1].style.background = tds[0].style.endColor = tds[1].style.endColor = Mem.mGray;
  // Add indexes
  tds[0].mIndex = tds[1].mIndex = x;
 }

 // Shuffle columns
 for (swaps=0; swaps<(rows.length*4); swaps++) {
  Mem.swapOnce(rows,0);
  Mem.swapOnce(rows,1);
 }

 this.glow(100);

 t.s.mode = "matching";

 return false; 
}

Mem.matchingClicked = function(cell, side) {

 // Exit if already correct
 if(cell.mState == "correct")
  return;

 var t = this.setT( cell );

 var rows = t.rows;
 // Update colors of others, and count remaining
 var remaining = 0;
 for(var x=1; x<(rows.length-1); x++) {
  var td = rows[x].cells[side];

  // If gray, clear it
  if((cell != td) && (td.mState == "guess")) {
   td.mState = null;
   td.style.background = td.endColor= Mem.mGray;
  }

  if(td.mState != "correct")  remaining++;
 }

 // Remember this was clicked
 if(side == 0)  t.s.match0 = cell;
 else  t.s.match1 = cell;

 // If already guessed
 if(cell.mState == "guess") {
  cell.mState = null;
  cell.style.background = cell.endColor = Mem.mGray;
  // Clear it
  if(side == 0)  t.s.match0 = null;
  else  t.s.match1 = null;

 } else {
  // Make it selected
  cell.mState = "guess";
  cell.style.background = cell.endColor = Mem.mClicked;
 }

 // Exit if neither are selected
 if(! (t.s.match0 && t.s.match1))
  return;

 // Go through backup table and look for matches
 var found = false;
 var backupRows = t.s.tbodyBackup.getElementsByTagName('tr');

 for(var x=1; x<backupRows.length; x++) {
  var tds = backupRows[x].getElementsByTagName('td');
  if((trim(t.s.match0.innerHTML) == trim(tds[0].innerHTML))
  && (trim(t.s.match1.innerHTML) == trim(tds[1].innerHTML)))
   found = true;
 }

 // If match
 if(found) {
  var directions = this.tChile('directionsDiv');
  if(directions.cycles > 2)
   directions.cycles = 2;

  // Make me dark green
  t.s.match0.mState = t.s.match1.mState = "correct";
  t.s.match0.endColor = t.s.match1.endColor = Mem.mGreen;
  t.s.match0.style.cursor = t.s.match1.style.cursor = "";

  // If finished - congrats message, restore rows
  if(remaining == 1) {
   directions.innerHTML = "<div style='text-align:center;'>Congratulations, you've finished. \

&nbsp; Try <a href='#' onclick='return Mem.flashcardMode(this)'>flashcard mode</a>.</div>";
   Mem.glow(2, "finished");
   this.addRowsFromBackup();
  } else {
   cell.style.background = Mem.mGray;
   Mem.glow(1, "green", t.s.match0, Mem.mGreen);
   Mem.glow(1, "green", t.s.match1, Mem.mGreen);
  }
  t.s.match0 = t.s.match1 = null;

  return;
 }

 // Must not have been found
 cell.style.background = Mem.mGray;
 Mem.glow(1, "red", cell, Mem.mClicked);

}

Mem.swapOnce = function( rows, index ) {
 var r1 = rows[Math.floor(Math.random() * (rows.length-2)) + 1];
 var r2 = rows[Math.floor(Math.random() * (rows.length-2)) + 1];
 var c1 = r1.cells[index];
 r1.replaceChild(r2.cells[index], c1);
 if(index == 0)
  r2.insertBefore(c1, r2.cells[0]);
 else
  r2.appendChild(c1);
}

Mem.getModeDiv = function( index ) {

 var r = "\
<span style='width:260px; text-align:right; padding: 0px 0px 2px 10px; letter-spacing:2px;\
border-left: solid #ccc 1px; \
border-bottom: solid #ccc 1px;'>\

";

 var modes = [["flashcard mode", "return Mem.flashcardMode(this)"], ["matching mode", "return Mem.startMatching(this)"]];
 for(var x=0; x<modes.length; x++) {

  if( x > 0 ) r += " | ";

  if(index == x)
   r += "<b>" + modes[x][0] + "</b>";
  else
   r += "<a style='color:#aaa;' href='#' onclick=\"" + modes[x][1] + "\">" + modes[x][0] + "</a>";

 }   
 r += "</span>";

 return r;
}

Mem.getOptions = function() {
 return "\
 <div style='display:none; line-height:17px; margin:27px 6px 4px 6px; padding: 3px 4px 4px 20px; border:dashed #fc0 2px;' id=optionsBox>\
  <a style='float:right; margin-top:-7px; font-size:9px;' href='#' onClick='return Mem.hideOptions(this)'>Hide Options</a>\
  -&nbsp;<a target='_blank' href='http://memorizable.com/Help'>Help</a>\
  &nbsp; &nbsp; -&nbsp;<a onclick='return Mem.startOver(this)' href='#'>Restart</a>\
  &nbsp; &nbsp; -&nbsp;<a onclick='return Mem.close(this)' href='#'>Cancel</a>\
 <br>\
  -&nbsp;<a target='_blank' href='http://memorizable.com/About_Memorizable_Tables'>About Memorizable Tables</a>\
 </div>\
 ";
}

Mem.setT = function(node) {

 // Return current, if no change
 if(! node)
  return this.t;

 // Remember last, for restoreTBody
 if(( typeof( Mem.t ) == 'object'))
   Mem.lastT = Mem.t;

 // Climb up parent until we find table
 while( ! node.isMem )
  node = node.parentNode;

 this.t = node;

 return node;
}

Mem.lookupT = function(nodex) {

 // Climb up parent until we find table
 while(! nodex.isMem)
  nodex = nodex.parentNode;

 return nodex;
}


Mem.restoreTBody = function() {
 Mem.t = Mem.lastT;
}

Mem.restore = function() {
 var orig = Mem.t.s.tbodyBackup;
 Mem.t.replaceChild( orig, Mem.t.tBodies[0] );
 Mem.t = orig.parentNode;
 // Whipe out ref to backup
 Mem.t.s.tbodyBackup = null;
}

Mem.addRowsFromBackup = function() {
 var t = this.t;
 var rows = t.rows;
 // Delete rows - except top and bottom
 var length = rows.length;
 for(var x=1; x<=length-2; x++)
  t.tBodies[0].removeChild( rows[length - (x+1)] );

 // Make copies from backup, add them to table
 var bak = t.s.tbodyBackup.cloneNode( true );
 var backupRows = bak.getElementsByTagName('tr');
 var length = backupRows.length;
 for(var x=1; x<length; x++)
  t.tBodies[0].insertBefore( backupRows[1], rows[rows.length-1] );
}


Mem.glow = function(cycles, color, glowDiv, endColor) {

 // Remember table
 if(!glowDiv) {
  glowDiv = this.tChile('directionsDiv');
  // Do nothing if already going
  if(glowDiv.cycles >= 1)
    return;
 }

 glowDiv.cycles = cycles;

 if(!endColor)
  endColor = "#fff";
 // Set end color to cell
 glowDiv.endColor = endColor;

 var glowLevel = color == "green" ? 35 : 0;
 var glowIncrement = color == "red" ? 8 : 2;
 if(color == "green") glowIncrement = 1;

 var myInterval = window.setInterval(function () {
  // Stop if cycles over
  if(glowDiv.cycles <= 0) {
   clearInterval(myInterval);
   return;
  }

  // Change level
  glowLevel += glowIncrement;
  // Go darker
  if(glowLevel < 0) {
   glowIncrement = 2;
   glowLevel += glowIncrement;
   // If this is the end, set it to the end color
   if(--glowDiv.cycles == 0) {
    glowDiv.style.background = glowDiv.endColor;
    return;
   }
  }
  // Go lighter
  if(glowLevel > 44) {
   glowIncrement = -2;
   glowLevel += glowIncrement;
   if(glowDiv.cycles == 1) {
    glowIncrement = color == "red" ? -6 : -1;
    if(color == "green") glowIncrement = -6;
   }
  }

  if(color == "red")
    Mem.glowColor(glowDiv, glowLevel, 180, 1, -2, -2);
  else if(color == "green")
    Mem.glowColor(glowDiv, glowLevel, 255, -3, 0, -5);
  else if(color == "finished")
    Mem.glowColor(glowDiv, glowLevel, 255, -2, 0, -4);
  else  // Orange
    Mem.glowColor(glowDiv, glowLevel, 255, 0, -1, -4);

 }, 43);
}

Mem.glowColor = function(glowDiv, glowLevel, start, r, g, b) {
  glowDiv.style.background = "rgb(" + (start+glowLevel*r) + "," + (start+glowLevel*g) + "," + (start+glowLevel*b) + ")";
}

Mem.chile = function(root, idName) {

 var maybe = root.getElementsByTagName( '*' );

 for(var x=0; x<maybe.length; x++)
  if( maybe[x].id == idName )
   return maybe[x];
}

Mem.tChile = function(idName) {

 return this.chile(this.t, idName);
}

Mem.flashcardMode = function(node) {

 Mem.setT(node);
 return Mem.start( Mem.t.getElementsByTagName('a')[Mem.t.s.column] );
}


function trim( s ) {
 return s.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
}

function byid( key ) {
  return document.getElementById( key );
}

Mem.addEvent( document, "keydown", Mem.keyWasPressed );

//}}}
{{textleft{
!!!<<gradient horiz #fc3 #fff>>&nbsp;MemorizeIframe^^<<tiddler CloseThisOpen with: MemorizeTables  '« back'>>|<<toolbar editTiddler>>» ^^>>
*These are external memorize tables brought into TW Help via an iframe.
*Try clicking (memorize) in both columns (to decide which side to start with).
----
<html><div align="center"><font size="-2" face="Arial, Helvetica, sans-serif" color="#ff0000">&nbsp; <A HREF="http://www.symbex.net.au/Wiki/memorize.htm" target="mem" title="Love Styles">Love Styles</A>&nbsp;|&nbsp;<A HREF="http://www.symbex.net.au/Wiki/memorizeDoubleSpeak.htm" target="mem" title="DoubleSpeak">Double Speak</A>&nbsp;|&nbsp;<A HREF="http://www.symbex.net.au/Wiki/memorizePhonics.htm" target="mem" title="Phonics">Int'l Phonics</A></html>

{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>>|<<tiddler NavButtons>>|vertical-align:bottom;<<toggleSideBar>>|
----
<html><div align="center"><iframe id="mem" name="mem" src ="http://www.symbex.net.au/Wiki/memorize.htm" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;></iframe></div></html>}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;MemorizePalette^^<<tiddler CloseThisOpen with: MemorizeTables  '« back'>>|<<toolbar editTiddler>>» ^^>>
*This memorize table is done in HTML to show how to possibly copy and modify existing HTML tables;<<toolbar editTiddler>>this tiddler to see the code.  It is the table headings between """<th> and </th>""" that needs to be added to your existing table.
Use:
# Study the relationships in the table below.
# Test your memory of the [[ColorPalette|TiddlyWikiColors]] system by clicking on @@color:#00f;memorize@@ in the desired column heading below.
*Try clicking (memorize) in both columns (to decide which side to start with).

<html><hide linebreaks><table class="mem" align="center"><tbody><tr><th> Palette <br> <a href="#" onmouseover="showMemorizeHelp();" onmouseout="hideHelp();" id="memorizeLink" onclick="return Mem.start( this )">(memorize)</a></th><th>  Definition <br><a href="#" onmouseover="showMemorizeHelp();" onmouseout="hideHelp();" id="memorizeLink" onclick="return Mem.start( this )">(memorize)</a></th></tr><tr><td> Background: </td><td> This controls the color of the background or 'paper', and the text in the title and subtitle. </td></tr><tr><td> Foreground: </td><td> This controls the color of the text. </td></tr><tr><td> ~PrimaryPale: </td><td> This controls the color of the Interface Options box. </td></tr><tr><td> ~PrimaryLight: </td><td> This controls the color of the top of the Header gradient. </td></tr><tr><td> ~PrimaryMid: </td><td> This controls the color of the text in the MainMenu, the color of the text for links, the color of the text in the lists of tiddlers and tags, and the color of the bottom of the Header gradient. </td></tr><tr><td> ~PrimaryDark: </td><td> This controls the color of the text of the items in the top of the right hand menu and the text of the buttons on the tiddlers. </td></tr><tr><td> ~SecondaryPale: </td><td> This controls the color of the background of the boxes in those tiddlers that show snippets of the TiddlyWiki code. </td></tr><tr><td> ~SecondaryLight: </td><td> This controls the color that appears when the tiddler buttons or items in the right hand menu are highlighted. </td></tr><tr><td> ~SecondaryMid: </td><td> This controls the color of the title cells in tables, that is, cells which begin with an exclamation mark (!). It also controls the color of the box that appears when changes have been saved, and the color of the tiddler buttons when they are selected. </td></tr><tr><td> ~SecondaryDark: </td><td> This controls the color of the titles of the tiddlers. </td></tr><tr><td> ~TertiaryPale: </td><td> This controls the color of the right hand menu that shows lists of tags and tiddlers, as well as the color of the tag button on the tiddlers. </td></tr><tr><td> ~TertiaryLight: </td><td> This controls the color of the borders around the right hand menus. </td></tr><tr><td> ~TertiaryMid: </td><td> This controls the color of the unselected tabs behind the list of tags and tiddlers in the bottom right hand menu. </td></tr><tr><td> ~TertiaryDark: </td><td> This controls the color of the subtitle of each tiddler, that is, the author of the tiddler, the most recent date it was modified and date it was created. </td></tr><tr><td> Error: </td><td> @@bgcolor:#f88;Error: #f88@@ </td></tr></table></html>

 

 

 

 

 
!!!<<gradient horiz #fc3 #fff>>&nbsp;MemorizePaletteWikified^^<<tiddler CloseThisOpen with: Tables  '« back'>>|<<toolbar editTiddler>>» ^^>>
|bgcolor:#fcf;''NOTE:'' This memorize table is done in ~TiddlyWiki format/syntax re: Eric Shulman's response to a request in [[this TiddlyWiki Group discussion|http://tinyurl.com/34fjk6]] Edit this tiddler to see the code.|
{{firstletter textright{
@@color:#c06;M@@
}}} ''emorizable tables'' are tables on a web page that assist you with memorizing their content.   This is done by a flashcard process or matching process.

Requirements: MemorizablePlugin

|Think about the flashcards you've used to study for tests. Memorizable tables work in a very similar way. You look at something, then guess the "answer" in your head. If your guess was correct, you're done with that card. If your guess was incorrect, you put the card aside to use again until you're sure you've memorized it.|
{{tablecenter table{
|''References:'' <br>[[Group discussion|http://tinyurl.com/34fjk6]] <br>  MemorizablePlugin<br> http://memorizable.com/ <br>http://memorizable.com/Help <br> http://memorizable.com/Code <br> http://memorizable.com/Code_Guidelines|
| &darr;Click memorize in the table heading |

So for everyone who wants to memorize the ColorPalette system here is the thin end of the wedge :) 
*Try clicking (memorize) in both columns (to decide which side to start with).
| !Palette<br><script label="(memorize)">return Mem.start(place)</script> | !Definition<br><script label="(memorize)">return Mem.start(place)</script> |
|Background: |This controls the color of the background or 'paper', and the text in the title and subtitle.|
|Foreground: |This controls the color of the text.|
|~PrimaryPale: |This controls the color of the Interface Options box.|
|~PrimaryLight: |This controls the color of the top of the Header gradient.|
|~PrimaryMid: |This controls the color of the text in the MainMenu, the color of the text for links, the color of the text in the lists of tiddlers and tags, and the color of the bottom of the Header gradient.|
|~PrimaryDark:|This controls the color of the text of the items in the top of the right hand menu and the text of the buttons on the tiddlers.|
|~SecondaryPale: |This controls the color of the background of the boxes in those tiddlers that show snippets of the TiddlyWiki code.|
|~SecondaryLight:|This controls the color that appears when the tiddler buttons or items in the right hand menu are highlighted.|
|~SecondaryMid: |This controls the color of the title cells in tables, that is, cells which begin with an exclamation mark (!). It also controls the color of the box that appears when changes have been saved, and the color of the tiddler buttons when they are selected.|
|~SecondaryDark:|This controls the color of the titles of the tiddlers.|
|~TertiaryPale: |This controls the color of the right hand menu that shows lists of tags and tiddlers, as well as the color of the tag button on the tiddlers.|
|~TertiaryLight: |This controls the color of the borders around the right hand menus.|
|~TertiaryMid: |This controls the color of the unselected tabs behind the list of tags and tiddlers in the bottom right hand menu.|
|~TertiaryDark: |This controls the color of the subtitle of each tiddler, that is, the author of the tiddler, the most recent date it was modified and date it was created.|
|Error: |Error:  #f88 |
|mem|k
}}}
See MemorizablePlugin
<<tabs tabsMemorize [[Intro ]] "" [[IntroMemorize]]  [[MemorizePaletteHTML ]] "" [[MemorizePalette]]  [[MemorizePaletteWikified ]] "" [[MemorizePaletteWikified]] [[MemorizeIframe ]] "" [[MemorizeIframe]]  [[MemorizeLoveStyles ]] "" [[LoveStyles]] [[StenoTableMemorize ]] "" [[StenoTableMemorize]]>>
#tiddlerWebPage ul
{
float:left;
width:100%;
padding:0;
margin:0;
list-style-type:none;
}
#tiddlerWebPage a
{
float:left;
width:6em;
text-decoration:none;
color:white;
background-color:purple;
padding:0.2em 0.6em;
border-right:1px solid white;
}
#tiddlerWebPage a:hover {background-color:#ff3300}
li {display:inline}
|>|bgcolor(#8cf):<<search>> ver: <<version>>|
|bgcolor(#E3FFE3):<<option chkSearchTitles>> Titles <<option chkSearchText>> Text <<option chkSearchTags>>Tag<<option chkHoldSearches>> Hold|
| PluginIdentifier ScriptIdentifier |
!!!!!<<gradient horiz #fcb #fff>>&nbsp;MissingTagScript>>
''Script to find all tiddlers without a particular tag, Demo = 'basic' '' @@color:#C06;''&raquo; &raquo;'' @@ +++[Try it]
<script>
   var out=[];
   var tids=store.getTiddlers("title","tagToExclude");
   for (var t=0; t<tids.length; t++)
      out.push(String.encodeTiddlyLink(tids[t].title));
   return out.join("\n");

</script> 
===

{{{
 <script>
   var out=[];
   var tids=store.getTiddlers("title","tagToExclude");
   for (var t=0; t<tids.length; t++)
      out.push(String.encodeTiddlyLink(tids[t].title));
   return out.join("\n");
</script> 
}}}
''Dolled up and limited to 10 tiddlers returned and captioned''  @@color:#C06;''&raquo; &raquo;'' @@ +++[Try it]

<script>
   var out="";
   out= "|bgcolor:#abf; Sort|bgcolor:#abf; Title |bgcolor:#abf; Size|bgcolor:#abf; Tags |bgcolor:#abf; Modified |h\n";
   var tids=store.getTiddlers("title","basic");
   for (var t=0; t<tids.length && t<10; t++)
   out+= "| "+(t+1)+"|[["+tids[t].title+"]]| "+tids[t].text.length+"|"+tids[t].tags+"|"+tids[t].modified.formatString("YYYY.0MM.0DD")+"|\n"

   out+= "|@@color:#c06;All tiddlers without the tag 'basic' (limited to 10 for demo)@@|c\n";
   return out;
</script>
===
{{{
<script>
   var out="";
   out= "|>|>|bgcolor:#abf; All tiddlers without the tag 'basic' |
   out+= "|bgcolor:#abf; Sort|bgcolor:#abf; Title |bgcolor:#abf; Size|bgcolor:#abf; Tags |bgcolor:#abf; Modified |h\n";
   var tids=store.getTiddlers("title","basic");
   for (var t=0; t<tids.length && t<10; t++)
   out+= "| "+(t+1)+"|[["+tids[t].title+"]]| "+tids[t].text.length+"|"+tids[t].tags+"|"+tids[t].modified.formatString("YYYY.0MM.0DD")+"|\n"

   return out;
</script>
}}}

!!!<<gradient horiz #fc3 #ffffff>>&nbsp;MonkeyPiratePlugins^^<<tiddler CloseThisOpen with: ThirdPartyPlugins  '« back'>>|<<toolbar editTiddler>>» ^^>>
Plugins at http://mptw.tiddlyspot.com/

|bgcolor(#8cf): @@color(#000080): Titles @@ |bgcolor(#8cf): @@color(#000080):  (bytes)@@ |bgcolor(#8cf): @@color(#000080): Tags@@ |
|[[CloseOnCancelPlugin]]| 655|systemConfig|
|[[ConfigTweaksPlugin]]| 469|systemConfig|
|[[HideWhenPlugin]]| 876|systemConfig|
|[[MptwLayoutPlugin]]| 8018|systemConfig|
|[[NewHerePlugin]]| 1703|systemConfig|
|[[QuickOpenTagPlugin]]| 4169|systemConfig|
|[[RenameTagsPlugin]]| 2093|systemConfig|
|[[TagglyTaggingPlugin]]| 12654|systemConfig|
|[[ToggleTagPlugin]]| 2592|systemConfig|
|[[UploadPlugin]]| 19366|systemConfig|
/***
|Name|MoveablePanelPlugin|
|Source|http://www.TiddlyTools.com/#MoveablePanelPlugin|
|Documentation|http://www.TiddlyTools.com/#MoveablePanelPluginInfo|
|Version|2.1.0|
|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|NestedSlidersPlugin|
|Overrides||
|Description|drag/stretch 'floating sliders' and other page elements|
Adds move and size mouse event handling and fold/unfold, and close/dock toolbar command items to any floating slider panel or tiddler element
!!!!!Documentation
>see [[MoveablePanelPluginInfo]]
!!!!!Revisions
<<<
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info tiddler
2007.12.30 [2.1.0] added 'noedges' option for alternative 'grab handles' (top=move, bottom-right=resize)
|please see [[MoveablePanelPluginInfo]] for additional revision details|
''2006.03.04 [1.0.0]'' Initial public release
<<<
!!!!!Code
***/
//{{{
version.extensions.moveablePanel= {major: 2, minor: 1, revision: 0, date: new Date(2007,12,30)};
//}}}
//{{{
config.macros.moveablePanel= { 
	handler: function(place,macroName,params) {
		var p=this.getPanel(place); if (!p) return;
		var showfold=true; var showclose=true; var showhover=true;
		var noedges=false; var param=null;
		while (param=params.shift()) { param=param.toLowerCase();
			if (param=="noclose") showclose=false;
			if (param=="nofold") showfold=false;
			if (param=="nohover") showhover=false;
			if (param=="noedges") noedges=true;
		}
		if (!p.saved) p.saved= { // remember original panel event handlers, size, location, border
			mouseover: p.onmouseover, mouseout: p.onmouseout, dblclick: p.ondblclick,
			top: p.style.top, left: p.style.left, width: p.style.width, height: p.style.height,
			position: p.style.position, border: p.style.border, title: p.title,
			transient: p.getAttribute("transient")
		};
		// create control menu items
		var html='<div class="toolbar" style="display:none;position:absolute;';
		html+=(hasClass(p,"floatingPanel")?'right:1em;top:1em;':'right:.5em;top:-1em;')+'">';
		var s='border:1px solid #666;background:#ccc;color:#666 !important;padding:0px .25em;-moz-border-radius:0px';
		if (showfold)
			html+='<a href="javascript:;" title="FOLD: reduce panel size" style="'+s+'"'
				+' onclick="return config.macros.moveablePanel.foldPanel(this,event)">&minus;</a>';
		if (showhover)
			html+='<a href="javascript:;" title="SCROLLING: panel moves with page" style="'+s+'"'
				+' onclick="return config.macros.moveablePanel.hoverPanel(this,event)">=</a>';
		if (showclose) {
			if (hasClass(p,"floatingPanel"))
				html+='<a href="javascript:;" title="CLOSE: hide panel and reset size/position" style="'+s+'"'
					+' onclick="return config.macros.moveablePanel.closePanel(this,event)">X</a>';
			else
				html+='<a href="javascript:;" title="DOCK: reset panel size/position" style="'+s+'"'
					+' onclick="return config.macros.moveablePanel.dockPanel(this,event)">&radic;</a>';
		}
		html+='</div>';
		p.menudiv=createTiddlyElement(place,"span");
		p.menudiv.innerHTML=html;

		// init mouse handling and tooltip
		p.setAttribute("noedges",noedges?"true":"false"); // for alternative mouseover/drag handling
		p.onmousemove=function(event) { return config.macros.moveablePanel.setCursorPanel(this,event); };
		p.onmousedown=function(event) { return config.macros.moveablePanel.moveOrSizePanel(this,event); };
		p.ondblclick=function(event) { // DOUBLE-CLICK = DOCK
			if (p.getAttribute("noedges")=="true" && !((isTop&&!isLeft&&!isRight)||(isBottom&&isRight))) // not over grab handles
				return p.saved.dblclick?p.saved.dblclick.apply(this,arguments):true;
			if (!config.macros.moveablePanel.isEdge(this,event)) // not over edge
				return p.saved.dblclick?p.saved.dblclick.apply(this,arguments):true;
			if (config.macros.moveablePanel.dockPanel(this,event)) // not docking
				return p.saved.dblclick?p.saved.dblclick.apply(this,arguments):true;
			else return false; // docked... done.
		};
		p.onmouseover=function(event) { // MOUSEOVER = SHOW MENU ITEMS
			if(addClass instanceof Function)
				addClass(this,"selected"); // so toolbar-classed items will display
			if (this.getAttribute("undocked")=="true"||hasClass(this,"floatingPanel"))
				this.menudiv.firstChild.style.display="inline";
			if (this.saved.mouseover) return this.saved.mouseover.apply(this,arguments);
		};
		p.onmouseout=function(event) { // MOUSEOUT = HIDE MENU ITEMS
			if(removeClass instanceof Function)
				removeClass(this,"selected"); // so toolbar-classed items are hidden again
			if (this.menudiv) this.menudiv.firstChild.style.display="none";
			if (this.saved.mouseout) return this.saved.mouseout.apply(this,arguments);
		};

		// FIXUP for "floating sliders" (see NestedSlidersPlugin)
		// prevent automatic trigger of adjustSliderPos() for mouse events on floating slider panel/button
		// and make sure that slider button causes moveable panel to be close AND docked (if needed)
		if (hasClass(p,"floatingPanel") && p.button) {
			p.saved.mouseover=null; // discard previous mouse event handlers to prevent
			p.saved.mouseout=null; // automatic triggering of adjustSliderPos() for mouseovers
			p.button.onmouseover=null; // on slider panel and slider button
			if(!p.button.saved_onclick) p.button.saved_onclick=p.button.onclick; // HIJACK SLIDER BUTTON
			p.button.onclick=function(ev){
				config.macros.moveablePanel.dockPanel(this.sliderPanel,ev); // DOCK PANEL FIRST...
				return this.saved_onclick.apply(this,arguments); // ...THEN CLOSE IT
			}
		}
	},
	processed: function(event) {
		event.cancelBubble=true; if (event.stopPropagation) event.stopPropagation(); return false;
	},
	getPanel: function(place) {
		// find a floating panel or use containing element
		var p=place; while (p && !(hasClass(p,"floatingPanel")||p.saved)) p=p.parentNode;
		return p||place;
	},
	isEdge: function(place,event) {
		if (!event) var event=window.event;
		var p=this.getPanel(place); if (!p) return false;
		var left=findPosX(p); var top=findPosY(p);
		var width=p.offsetWidth; var height=p.offsetHeight;
		var x=!config.browser.isIE?event.pageX:event.clientX;
		var y=!config.browser.isIE?event.pageY:event.clientY;
		if (x<left||x>=left+width||y<top||y>=top+height) return false;
		var edgeWidth=10; var edgeHeight=10;
		var isTop=(y-top<edgeHeight); var isLeft=(x-left<edgeWidth);
		var isBottom=(top+height-y<edgeHeight); var isRight=(left+width-x<edgeWidth);
		return isTop||isLeft||isBottom||isRight;
	},
	dockPanel: function(place,event) {
		if (!event) var event=window.event;
		var p=this.getPanel(place); if (!p) return true;
		if (p.folded) this.foldPanel(p.foldButton,event); 
		if (p.hover) this.hoverPanel(p.hoverButton,event); 
		if (p.saved) {
			p.style.top=p.saved.top; p.style.left=p.saved.left;
			p.style.width=p.saved.width; p.style.height=p.saved.height;
			p.style.position=p.saved.position;
			if (p.saved.transient) p.setAttribute("transient","true");
			p.setAttribute("undocked","");
		}
		if (hasClass(p,"floatingPanel") && window.adjustSliderPos) // see NestedSlidersPlugin
			window.adjustSliderPos(p.parentNode,p.button,p);
		return this.processed(event);
	},
	closePanel: function(place,event) {
		var p=this.getPanel(place); if (!p) return true;
		// if a slider button exists close the panel by calling slider button handler
		if (p.button) { p.button.focus(); onClickNestedSlider({target:p.button}); }
		return this.dockPanel(place,event); // and then reset panel state
	},
	foldPanel: function(place,event) {
		if (!event) var event=window.event;
		var p=this.getPanel(place); if (!p) return true;
		if (!p.foldButton) p.foldButton=place;
		if (p.folded) {
			p.style.height=p.folded_savedheight;
			p.style.overflow=p.folded_savedoverflow;
			if (!hasClass(p,"floatingPanel")) p.menudiv.firstChild.style.top="-1em";
		} else {
			p.folded_savedheight=p.style.height; p.style.height="1em"; 
			p.folded_savedoverflow=p.style.overflow; p.style.overflow="hidden";
			if (!hasClass(p,"floatingPanel")) p.menudiv.firstChild.style.top="1em";
		}
		p.folded=!p.folded;
		place.innerHTML=p.folded?"+":"&minus;";
		place.title=p.folded?"UNFOLD: restore panel size":"FOLD: reduce panel size";
		return this.processed(event);
	},
	hoverPanel: function(place,event) {
		if (!event) var event=window.event;
		var p=this.getPanel(place); if (!p) return true;
		if (!p.hoverButton) p.hoverButton=place;
		if (p.hover) {
			p.style.position=p.hover_savedposition;
			if (p.getAttribute("undocked")!="true" && p.saved && p.saved.transient)
				p.setAttribute("transient","true"); // see NestedSlidersPlugin
		} else {
			p.hover_savedposition=p.style.position; p.style.position="fixed";
			if (p.saved.transient) p.setAttribute("transient","false");
		}
		p.hover=!p.hover;
		place.innerHTML=p.hover?"^":"=";
		place.title=p.hover?"HOVERING: panel stays in view when scrolling page":"SCROLLING: panel moves with page";
		return this.processed(event);
	},
	setCursorPanel: function(place,event) {
		if (!event) var event=window.event;
		var p=this.getPanel(place); if (!p) return true;
		var left=findPosX(p); var top=findPosY(p);
		var width=p.offsetWidth; var height=p.offsetHeight;
		var x=!config.browser.isIE?event.pageX:event.clientX;
		var y=!config.browser.isIE?event.pageY:event.clientY;
		if (x<left||x>=left+width||y<top||y>=top+height) return true; // not inside panel, let mousedown bubble through
		var edgeWidth=10; var edgeHeight=10;
		var isTop=(y-top<edgeHeight); var isLeft=(x-left<edgeWidth);
		var isBottom=(top+height-y<edgeHeight); var isRight=(left+width-x<edgeWidth);
		p.style.cursor="auto";
		p.title=p.saved?p.saved.title:"";
		if (!(isTop||isLeft||isBottom||isRight)) return true;
		if (p.getAttribute("noedges")=="true") {
			if (isTop&&!isLeft&&!isRight) {
				p.style.cursor="move";
				p.title="MOVE: drag top panel edge"

					+(p.getAttribute("undocked")=="true"?", DOCK: double-click":"");
			} else if (isBottom && isRight) {
				p.style.cursor="se-resize";
				p.title="RESIZE: drag lower right corner"
					+(p.getAttribute("undocked")=="true"?", DOCK: double-click":"");
			}
		} else {
			p.style.cursor=!event.shiftKey?"move":((isTop?'n':(isBottom?'s':''))+(isLeft?'w':(isRight?'e':''))+'-resize');
			p.title="MOVE: drag panel edge, RESIZE: hold shift key"

				+(p.getAttribute("undocked")=="true"?", DOCK: double-click":"");
		}
		return true; // let mouseover event bubble through
	},
	moveOrSizePanel: function(place,event) {
		if (!event) var event=window.event;
		var p=this.getPanel(place); if (!p) return true;
		if (!this.isEdge(place,event)) return true;
		if (!p.saved) p.saved= { // remember original panel event handlers, size, location, border
			mouseover: p.onmouseover, mouseout: p.onmouseout, dblclick: p.ondblclick,
			top: p.style.top, left: p.style.left, width: p.style.width, height: p.style.height,
			position: p.style.position, border: p.style.border, transient: p.getAttribute("transient")
		};
		var left=findPosX(p); var top=findPosY(p);
		var width=p.offsetWidth; var height=p.offsetHeight;
		var x=!config.browser.isIE?event.pageX:event.clientX;
		var y=!config.browser.isIE?event.pageY:event.clientY;
		var edgeWidth=10; var edgeHeight=10;
		var isTop=(y-top<edgeHeight); var isLeft=(x-left<edgeWidth);
		var isBottom=(top+height-y<edgeHeight); var isRight=(left+width-x<edgeWidth);
		var sizing=event.shiftKey; // remember this for use during mousemove tracking
		if (p.getAttribute("noedges")=="true") {
			if (!((isTop&&!isLeft&&!isRight)||(isBottom&&isRight))) return true; // not over grab handle
			var sizing=isBottom&&isRight;
		}
		var adjustLeft=0; var adjustTop=0;
		// adjustment for relative container
		var pp=p.parentNode; while (pp && !(pp.style&&pp.style.position=='relative')) pp=pp.parentNode;
		if (pp) { adjustLeft+=findPosX(pp); adjustTop+=findPosY(pp); }
		// adjustment for floating slider container
		var pp=p.parentNode; while (pp && !hasClass(pp,"floatingPanel")) pp=pp.parentNode;
		if (pp) { adjustLeft+=findPosX(pp); adjustTop+=findPosY(pp); }
	
		// start tracking mousemove events
		this.activepanel=p;
		var target=p; // if 'capture' handling not supported, track within panel only
		if (document.body.setCapture) { document.body.setCapture(); var target=document.body; } // IE
		if (window.captureEvents) { window.captureEvents(Event.MouseMove|Event.MouseUp,true); var target=window; } // moz
		if (target.onmousemove!=undefined) target.saved_mousemove=target.onmousemove;
		target.onmousemove=function(e){
			if (!e) var e=window.event;
			var p=config.macros.moveablePanel.activepanel;
			if (!p) { this.onmousemove=this.saved_mousemove?this.saved_mousemove:null; return; }
	
			// PROBLEM: p.offsetWidth and p.offsetHeight do not seem to account for padding or borders
			// WORKAROUND: subtract padding and border (in px) when calculating new panel width and height
			// TBD: get these values from p.style... convert to px as needed.
			var paddingWidth=10.6667; var paddingHeight=10.6667;
			var borderWidth=1; var borderHeight=1;
			var adjustWidth=-(paddingWidth*2+borderWidth*2);
			var adjustHeight=-(paddingHeight*2+borderHeight*2);
	
			if (p.style.position!="absolute"&&p.style.position!="fixed") {
				// convert static/relative panel to movable absolute panel
				p.style.position="absolute";
				p.style.left=left+"px"; p.style.top=top+"px";
				p.style.width=(width+adjustWidth)+"px"; p.style.top=(height+adjustHeight)+"px";
			}
			var newX=!config.browser.isIE?e.pageX:e.clientX;
			var newY=!config.browser.isIE?e.pageY:e.clientY;
			if (sizing) { // resize panel
				// don't let panel get smaller than edge "grab" zones
				var minWidth=edgeWidth*2-adjustWidth;
				var minHeight=edgeHeight*2-adjustHeight;
				if (p.folded) this.foldPanel(p.foldButton,e); // make sure panel is unfolded
				if (isBottom) var newHeight=height+newY-y+1;
				if (isTop) var newHeight=height-newY+y+1;
				if (isLeft) var newWidth=width-newX+x+1;
				if (isRight) var newWidth=width+newX-x+1;
				if (isLeft||isRight) p.style.width=(newWidth>minWidth?newWidth:minWidth)+adjustWidth+"px";
				if (isLeft) p.style.left=left-adjustLeft+newX-x+1+"px";
				if (isTop||isBottom) p.style.height=(newHeight>minHeight?newHeight:minHeight)+adjustHeight+"px";
				if (isTop) p.style.top=top-adjustTop+newY-y+1+"px";
				p.setAttribute("undocked","true");
			} else { // move panel
				p.style.top=top-adjustTop+newY-y+1+"px";
				p.style.left=left-adjustLeft+newX-x+1+"px";
				if (p.saved && p.saved.transient) p.setAttribute("transient","false");
				p.setAttribute("undocked","true");
			}
			var status=sizing?("size: "+p.style.width+","+p.style.height):("pos: "+p.style.left+","+p.style.top);
			window.status=status.replace(/(\.[0-9]+)|px/g,""); // remove decimals and "px"

			return config.macros.moveablePanel.processed(e);
		};
		// stop tracking mousemove events
		if (target.onmouseup!=undefined) target.saved_mouseup=target.onmouseup;
		target.onmouseup=function(e){
			if (!e) var e=window.event;
			if (this.releaseCapture) this.releaseCapture(); // IE
			if (this.releaseEvents) this.releaseEvents(Event.MouseMove|Event.MouseUp); // moz
			this.onmousemove=this.saved_mousemove?this.saved_mousemove:null;
			this.onmouseup=this.saved_mouseup?this.saved_mouseup:null;
			config.macros.moveablePanel.activepanel=null;
			window.status="";
			return config.macros.moveablePanel.processed(e);
		};
		return this.processed(event); // mousedown handled
	}
};
//}}}
> Is there an easy way to move tiddlers between files?

http://www.TiddlyTools.com/#NewDocumentPlugin
 -- one-click to generate TW documents from current tiddlers
 -- auto-select by tags

http://www.TiddlyTools.com/#ExportTiddlersPlugin
 -- generate TW documents, TW 'export files', or XML files (for RSS
feeds)
 -- advanced selection/filtering options by date/time, tags, text
match, etc.

http://www.TiddlyTools.com/#ImportTiddlersPlugin
 -- multi-select listbox of tiddlers to import
 -- quick select by all/new/changes/differences
 -- handles 'collisions' with existing tiddlers: skip/rename/merge/
replace
 -- "tag-on-import"
 -- generates [[ImportedTiddlers]] cumulative history

http://www.TiddlyTools.com/#LoadTiddlersPlugin
 -- a non-interactive version of ImportTiddlersPlugin, can be used to
automatically pull tiddlers from other files (like IncludePlugin).
See http://www.TiddlyTools.com/#InstallPackages for an example.  Open
any package description and click on "begin installation"...

http://www.TiddlyTools.com/#TemporaryTiddlersPlugin
 -- when used with LoadTiddlersPlugin, this plugin can reproduce
'transient' tiddler effect, so that loaded tiddlers are not saved
locally and are re-imported each time.

HTH,
-e
Eric Shulman 

Source: [[using TiddlyWiki for note taking - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_frm/thread/9e9a179150535b0a]]
!!!<<gradient horiz #fc3 #fff>>&nbsp;MozTable^^<<tiddler CloseThisOpen with: Tables  '« back'>>|<<toolbar editTiddler>>» ^^>>
Below is the TruthTable styled using the [[Proprietary Mozilla CSS Properties|http://www.blooberry.com/indexdot/css/properties/extensions/nsextensions.htm]] (i.e. means it doesn't work in IE)

This nested style sheet MozTableCSS is in StyleSheet to create the table below

|bgcolor:#abf;Premises|bgcolor:#abf;Inference|bgcolor:#abf;Conclusion|
|bgcolor:#fff;vertical-align:middle; True |bgcolor:#fff;vertical-align:middle; Valid |bgcolor:#fff; True |
|~|~|bgcolor:#fcf; @@color:#f00;xxxx@@ |
|~|bgcolor:#fff;vertical-align:middle; Invalid |bgcolor:#fff; True |
|~|~|bgcolor:#fff; False |
|>|>| and if |
|bgcolor:#fff;vertical-align:middle; False |bgcolor:#fff;vertical-align:middle; Valid |bgcolor:#fff; True |
|~|~|bgcolor:#fff; False |
|~|bgcolor:#fff;vertical-align:middle; Invalid |bgcolor:#fff; True |
|~|~|bgcolor:#fff; False |
/***
!!!MozTableCSS /%==================================================%/
***/

#tiddlerMozTable table {
	border-width: 2px 2px 2px 2px;
	border-spacing: 4px;
	border-style: dotted dotted dotted dotted;
	border-color: blue blue blue blue;
	border-collapse: separate;
	background-color: white;
}

#tiddlerMozTable th {
	border-width: 2px 2px 2px 2px;
	padding: 1px 1px 1px 1px;
	border-style: solid solid solid solid;
	border-color: red red red red;
	background-color: rgb(255, 255, 240);
	-moz-border-radius: 12px 12px 12px 12px;
}
#tiddlerMozTable td {
	border-width: 2px 2px 2px 2px;
	padding: 1px 1px 1px 1px;
	border-style: solid solid solid solid;
	border-color: red red red red;
	background-color: rgb(255, 255, 240);
	-moz-border-radius: 12px 12px 12px 12px;
}


<table class="sample">

<tr>
	<th>Header</th>
	<td>Content</td>
</tr>
</table>
!!!<<gradient horiz #fc3 #fff>>&nbsp;MozTableExample^^<<tiddler CloseThisOpen with: Tables  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{boldLink{
This is the+++[TruthTable]<<tiddler TruthTable>>===styled using the Proprietary Mozilla CSS Properties [[see it here|MozTable]]
}}}

----
WOW!  Thank you so much for telling us about those CSS3 attributes!
I've had several people ask about 'multi-column display', and had to
tell them that the browser just doesn't do that... it's nice to know
that I was wrong!

Here's a little something to say thanks:
   http://www.TiddlyTools.com/#SetTiddlerColumns

It's an inline script that presents an <<option txtTiddlerColumns>>

edit field and, whenever you change the value in the field, the CSS
for #tiddlerDisplay is automatically adjusted to match.  Because it's
an <<option>> input, it is tracked by cookie value and is therefore
retained between TW sessions.

I've also added some "convenience classes" in
   http://www.TiddlyTools.com/#StyleSheetShortcuts

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

These CSS classes let you easily use multi-column display *within*
your tiddler content... for example:

{{twocolumns{blah blah blah long block of text with multiple
paragraphs, etc.}}}

enjoy,
-e
Eric Shulman 

Source: [[Multiple Colunms in TW for my tiddlers - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_frm/thread/de66d1e231fc96f6]]
[[MyGroupList]]
[[WhatsInATiddler]]
[[FormattingThePage]]
[[FormattingTiddlers]]
[[FormattingText]]
[[Tables]]
[[Entities-Codes]]
[[HowToUseLinks]]
[[Macros Built-in]]
[[ThirdPartyPlugins]]
[[WebPageCodes]]
[[UsingColor]]
!!!~MyGroup
''~MyGroup'' is a set of tiddlers contained in MyDefaultTiddlers. TW Help comes with certain major help tiddlers already selected. It is your choice what tiddlers you use.  It may be something you use often or it may be a set of tiddlers you have compiled temporarily for a particular project.

Then it's only a matter to fill MyDefaultTiddlers with the tiddlers you want and click on ~MyGroups and all other tiddlers will be cleared and ~MyGroup will be loaded.

@@color:#090;''Tip:''@@ Clicking<<defaultHome>>here or in the ~MainMenu will clear all tiddlers and take you back to the opening screen.
!!!<<gradient horiz #c06 #fff>>&nbsp;@@color:#fff;You have opened the ~MyGroup set of tiddlers@@>>
{{textcenter{

+++[Read about it]
{{textleft{
<part mygroup>
<<<
@@color:#c06;&bull;&nbsp;@@@@color:#04b;''Clicking on ~MyGroup opens a'' pre-selected assortment of tiddlers.@@
@@color:#c06;&bull;&nbsp;@@@@color:#04b;''~MyGroup is a group of tiddlers'' that make up most of the key subjects covered by TW Help. @@
@@color:#c06;&bull;&nbsp;@@@@color:#04b;''Sometimes if you are not sure what heading to look under'' for the help you need....@@
@@color:#C06;''&raquo; &raquo;'' @@@@color:#04b;scrolling through ~MyGroup may prove a quick to find what you are looking for.@@

<<<
</part>
----
@@color:#c06;&bull;&nbsp;@@@@color:#04b;You can change ~MyGroup to reflect your own needs if necessary.@@

+++[MyGroupExplained]
<<<
<<tiddler MyGroupExplained>>
Here is the list of the tiddlers that are presently in ~MyDefaultTiddlers.
<<tiddler MyDefaultTiddlers>>
<<<
===
----
!!!This ~TiddlyWiki is:
http://tiddlyspot.com/twhelp/index.html
file:///I:/TiddlySpot/twhelp.html
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://maps.google.com/maps?]]&nbsp;&raquo;|
}}}<html><div align="center"><iframe src ="http://maps.google.com/maps?" width="100%" align="center" height="600"></iframe></div></html>



file:///I:/MyNotes.htm
file:///I:\TiddlySpot\diane.html
file:///I:\TiddlySpot\twunplugged.html
file:///D:/Web%20Pages/TiddlyWiki2.3/twwebpage/twwebpage.html
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("n")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[NATO phonetic alphabet]]^^<<tiddler CloseThisOpen with: Entities-Codes  '« back'>>|<<toolbar editTiddler>>» ^^>>
+++[As an image here]
[img[http://img527.imageshack.us/img527/2937/300pxfaaphoneticandmorsbc2.png]]
===

{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.symbex.net.au/Wiki/memorizePhonics.htm]]&nbsp;&raquo;|
----
Try clicking (memorize) in both columns (to decide which side to start with).

<html><div align="center"><iframe  src ="http://www.symbex.net.au/Wiki/memorizePhonics.htm" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
{{textcenter{New Earth Time^^&copy;^^ http://www.newearthtime.net/net.htm
<script>document.write(unescape('%3C%68%74%6D%6C%3E%3C%64%69%76%20%61%6C%69%67%6E%3D%22%63%65%6E%74%65%72%22%3E%3C%69%66%72%61%6D%65%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%77%77%77%2E%73%79%6D%62%65%78%2E%6E%65%74%2E%61%75%2F%57%69%6B%69%2F%4E%65%74%54%69%6D%65%57%68%69%74%65%2E%68%74%6D%22%20%66%72%61%6D%65%62%6F%72%64%65%72%3D%22%30%22%20%77%69%64%74%68%3D%22%31%34%37%22%20%68%65%69%67%68%74%3D%22%35%30%22%20%73%63%72%6F%6C%6C%69%6E%67%3D%22%6E%6F%22%20%66%72%61%6D%65%62%6F%72%64%65%72%3D%22%31%22%3E%3C%2F%69%66%72%61%6D%65%3E%3C%2F%64%69%76%3E%3C%2F%68%74%6D%6C%3E'));</script>}}}
<html><div align="center"><font size="-1"><input type="button" value="&laquo; Back" onClick="history.go(-1)" name="button" class="btn" onmouseover="this.className='btn btnhov'" onmouseout="this.className='btn'"/>@@color:#ffe;|@@<a href="javascript:;" onclick="var tid=story.findContainingTiddler(this); if (tid) story.refreshTiddler(tid.getAttribute('tiddler'),null,true); return false;"><input class="btn" type="button"  onmouseover="this.className='btn btnhov'" onmouseout="this.className='btn'" value="Reload " ></a>@@color:#ffe;|@@<input class="btn" type="button"  onmouseover="this.className='btn btnhov'" onmouseout="this.className='btn'" value="Forward &raquo; "onClick="history.forward()"</font></div></html>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[Intro|NavIntro]]^^<<tiddler CloseThisOpen with: NavigationWithTW  '« back'>>|<<toolbar editTiddler>>» ^^>>
----
Here are a few ways to navigate around your computer from your ~TiddlyWiki. Please note that these methods work after you save a ~TiddlyWiki to your disk drive. {{twLink{[[Click on a tab|NavigationWithTW]]}}}
!!!<<gradient horiz #abf #fff>>&nbsp;End>>
<<tabs "" 

[[Intro]] "" [[NavIntro]]
[[UsingLinks ]] "" [[UsingLinks]]
[[BrowseForFiles ]] "" [[BrowseForFiles]] 
[[BrowseFilesInIframe ]]""[[BrowseFilesInIframe]]
[[Linking To Programs ]] "" [[LinkingToPrograms]]
[[BrowseYourDrives]] "" [[BrowseYourHardDisk]]
[[ShowLocalDirectory ]] "" [[ShowLocalDirectory]]
>>
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Version|2.3.2|
|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|Slider.prototype.stop|
|Description|show content in nest-able 'slider' or 'floating' panels, without needing to create separate tiddlers for each panel|

!!!!!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

<<<
!!!!!Usage
<<<
When installed, this plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content.  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===
	===
===
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''NestedSlidersPlugin'' (tagged with <<tag systemConfig>>)

<<<
!!!!!Revision History
<<<
''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.
|please see [[NestedSlidersPluginHistory]] for additional revision details|
''2005.11.03 - 1.0.0'' initial public release
<<<
!!!!!Credits
<<<
This feature was implemented by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]] with initial research and suggestions from RodneyGomes, GeoffSlocock, and PaulPetterson.
<<<

!!!!!Code
***/
//{{{
version.extensions.nestedSliders = {major: 2, minor: 3, revision: 2, date: new Date(2007,11,14)};
//}}}

//{{{
// 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,this.sliderPanel.className); }

				// 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,this.className); }

				// 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,panelClass);
				}
				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 && (theSlider.className!='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,theSlider.className);
	// 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 ((p.className=="floatingPanel"||p.className=="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,panelClass) {
	if (panelClass=="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 && p.className!='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 Morpher animation handler 'stop' handler so overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
	Morpher.prototype.coreStop = Morpher.prototype.stop;
	Morpher.prototype.stop = function()
		{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }
}
//}}}
!!!<<gradient horiz #fc3 #ffffff>>NestedStyleSheets^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>
''You can add modifications of style'' to your ~TiddlyWiki by putting the CSS in a tiddler and then putting the tiddler in @@color(#00f):~StyleSheet@@. 
@@color:#C06;''&raquo; &raquo;'' @@ +++[See a tabset with nested stylesheets used in TW Help]
<<tiddler NestedStyles>>
===
 
!!!Example
Create a tiddler called e.g. @@color(#00f):~MySpecialStyle@@ containing your special styling CSS.
Now put this tiddler in @@color(#00f):~StyleSheet@@  surrounded with double square brackets like this {{{[[MySpecialStyle]]}}}

''Note'': Sometimes your normal CSS in ~StyleSheet can undo this new styling if a similiar CSS follows it in succession so it is best to put all tiddlers containing CSS at the very end of @@color(#00f):~StyleSheet@@. ''Note:'' It is still best to carefully check very throughly for unintended consequences!

''Note 2'': Also sometimes the changes you make to {{{[[MySpecialStyle]]}}} will not take effect until @@color(#00f):~StyleSheet@@ itself is refreshed. Clicking ''edit'' and then ''done'' should refresh it.  Alternatively you can use the following script; just put it in a tiddler and name it say ''RefreshStyles'' then put a link to it somewhere handy like the MainMenu.
!!!&nbsp;Refresh ~StyleSheet Code
{{{

<html><a href="javascript:refreshStyles('StyleSheet');">
refresh styles and layout
</a></html>
}}}
Code courtesy of Saq Imtiaz.   	

<<forEachTiddler
    where
       'tiddler.tags.contains("nestedstyle")'
    sortBy
       'tiddler.title.toUpperCase()'
       write '" [["+tiddler.title+" ]] \"view ["+tiddler.title+"]\" [["+tiddler.title+"]] "'
        begin '"<<tabs NestedStyles "'
        end '">"+">"'
        none '"//No tiddler tagged with \"nestedstyle\"//"'

>>
!!!<<gradient horiz #fc3 #fff>>&nbsp;THISTIDDLERTITLEHERE^^<<tiddler CloseThisOpen with: HOMETABSNAMEHERE  '« back'>>|<<toolbar editTiddler>>» ^^>>

!!!!!<<gradient horiz #abf #fff>>&nbsp;Example>>

!!!!!<<gradient horiz  #abf #fff>>&nbsp;Code>>

!!!!!<<gradient horiz #abf #fff>>&nbsp;@@color:#fff;End@@>>
/***
|Name|NewDocumentPlugin|
|Source|http://www.TiddlyTools.com/#NewDocumentPlugin|
|Version|1.7.0|
|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|Quickly create new TiddlyWiki documents from your existing document, with just one click|

Use the {{{<<newDocument>>}}} macro to place a "new document" link into your sidebar/mainmenu/any tiddler (wherever you like).  Select this command to automatically create a "new.html" document containing a specific set of tagged tiddlers.  Optional parameters let you specify an alternate path/filename for the new file, or different tags to match.  You can also indicate "ask" for either parameter, which will  trigger a prompt for input when the command is selected.

!!!!!Usage

<<<
{{{<<newDocument label:text prompt:text filename tag tag tag...>>}}}
{{{<<newDocument label:text prompt:text filename all>>}}}
{{{<<newDocument label:text prompt:text filename snap ID>>}}}
{{{<<newDocument label:text prompt:text filename snap here>>}}}
{{{<<newDocument label:text prompt:text nofile print ID>>}}}
{{{<<newDocument label:text prompt:text nofile print here>>}}}
 where:
* ''label:text'' defines //optional// alternative link text (replaces default "new document" display)
* ''prompt:text'' defines //optional// alternative tooltip text for 'mouseover' prompting (replaces default hard-coded tooltip text)
* ''filename'' is any local path-and-filename.  If no parameters are provided, the default is to create the file "new.html" in the current directory.  If a filename is provided without a path (i.e., there is no "/" in the input), then the current directory is also assumed.  Otherwise, this parameter is expected to contain the complete path and filename needed to write the file to your local hard disk.  If ''ask'' is used in place of the filename parameter then, when the command link is selected, a message box will be automatically displayed so you can select/enter the path and filename.
* ''tag tag tag...'' is a list of one or more space-separated tags (use quotes or {{{[[]]}}} around tags that contain spaces).  The new document will include all tiddlers that match at least one of the tags in the list.  The default is to include tiddlers tagged with <<tag includeNew>>.    The special value ''all'' may be used to match every tiddler (even those without tags).   If ''ask'' is used in place of the tags then, when the command link is selected, a message box will be automatically displayed so you can enter the desired tags at that time.
* When you use the keyword ''snap'' in place of the tags, you can generate a file containing the //rendered//  CSS-and-HTML that is currently being displayed in browser.  By default, the snapshop uses the 'contentWrapper' DOM element ID to automatically include all the TiddlyWiki elements, such as the sidebars and header, in addition to the center 'story' column containing the tiddler content.
* When you use the keyword ''print'' in place of the tags, a snapshot is generated, but the contents are not written to a file.  Instead, they are displayed in a separate browser tab/window, and the print dialog for that tab/window is automatically invoked.
* You can limit the snapshot to capture only a portion of the rendered TiddlyWiki elements by specifiying an optional alternate DOM element ID, such as "displayArea" (the entire center 'story' column) or even just a single tiddler (e.g., "tidderMyTiddlerTitle", assuming that "MyTiddlerTitle" is currently displayed).  Only the portions of the document that are contained //within// the specified DOM element will be transcribed to the resulting snapshot file.  If ''ask'' is used in place of a DOM element ID, you will be prompted to enter the ID (default is "contentWrapper") when the snapshot is being taken.  This allows you to easily enter the ID of any currently displayed tiddler to make quick snapshots of specific tiddlers.  If ''here'' is used in place of a DOM element ID, the current tiddler id is used.

Note: as of version 1.4.0 of this plugin, support for selecting tiddlers by using tag *expressions* has been replaced with simpler, more efficient "containsAny()" logic.  To create new ~TiddlyWiki documents that contain only those tiddlers selected with advanced AND/OR/NOT Boolean expressions, you can use the filtering features provided by the ExportTiddlersPlugin (see www.TiddlyTools.com/#ExportTiddlersPlugin).

<<<
!!!!!Examples:
<<<
{{{<<newDocument>>}}}
equivalent to {{{<<newDocument new.htm includeNew systemTiddlers>>}}}
creates default "new.html" containing tiddlers tagged with either<<tag includeNew>>or<<tag systemTiddlers>>
try it: <<newDocument>>

{{{<<newDocument empty.html systemTiddlers>>}}}
creates "empty.html" containing only tiddlers tagged with<<tag systemTiddlers>>
//(reproduces old-style (pre 2.0.2) empty file)//
try it: <<newDocument empty.html systemTiddlers>>

{{{<<newDocument "label:create Import/Export starter" ask importexport>>}}}
save importexport tiddlers to a new file, prompts for path/file
try it: <<newDocument "label:create Import/Export starter" ask importexport>>

{{{<<newDocument ask ask>>}}}
prompts for path/file, prompts for tags to match
try it: <<newDocument ask ask>>

{{{<<newDocument ask all>>}}}
save all current TiddlyWiki contents to a new file, prompts for path/file
try it: <<newDocument ask all>>

{{{<<newDocument ask snap>>}}}
generates snapshot of currently displayed document, prompts for path/file
try it: <<newDocument ask snap>>

{{{<<newDocument ask snap here>>}}}
generates snapshot of this tiddler ONLY, prompts for path/file
try it: <<newDocument ask snap here>>

{{{<<newDocument ask print here>>}}}
prints a snapshot of this tiddler ONLY
try it: <<newDocument nofile print here>>

<<<
!!!!!Installation
<<<
Import (or copy/paste) the following tiddlers into your document:
''NewDocumentPlugin'' (tagged with <<tag systemConfig>>)

<<<
!!!!!Revision History
<<<
''2007.12.04 [*.*.*]'' update for TW2.3.0: replaced deprecated core functions, regexps, and macros
''2007.03.30 [1.7.0]'' added support for "print" param as alternative for "snap".  When "print" is used, the filename is ignored and ouput is directed to another browser tab/window, where the print dialog is then automatically triggered.
''2007.03.30 [1.6.1]'' added support for "here" keyword for current tiddler elementID and "prompt:text" param for specifying tooltip text
''2007.02.12 [1.6.0]'' in onClickNewDocument(), reset HTML source 'markup'
''2006.10.23 [1.5.1]'' in onClickNewDocument(), get saved parameter value for snapID instead of using default "contentWrapper" (oops!)
''2006.10.18 [1.5.0]'' new optional param for 'snap'... specify alternative DOM element ID (default is still "contentWrapper").  Based on a suggestion from Xavier Verges.
''2006.08.03 [1.4.3]'' in promptForFilename(), for IE (WinXP only), added handling for UserAccounts.CommonDialog
''2006.07.29 [1.4.2]'' in onClickNewDocument(), okmsg display is now linked to newly created file
''2006.07.24 [1.4.1]'' in promptForFilename(), check for nsIFilePicker.returnCancel to allow nsIFilePicker.returnOK **OR** nsIFilePicker.returnReplace to be processed.
''2006.05.23 [1.4.0]'' due to very poor performance, support for tag *expressions* has been removed, in favor of a simpler "containsAny()" scan for tags.
''2006.04.09 [1.3.6]'' in onClickNewDocument, added call to convertUnicodeToUTF8() to better handle international characters.
''2006.03.15 [1.3.5]'' added nsIFilePicker() handler for selecting filename in moz-based browsers.  IE and other non-moz browsers still use simple prompt() dialog
''2006.03.15 [1.3.0]'' added "label:text" param for custom link text.  added special "all" filter parameter for "save as..." handling (writes all tiddlers to output file)
''2006.03.09 [1.2.0]'' added special "snap" filter parameter to generate and write "snapshot" files containing static HTML+CSS for currently rendered document.
''2006.02.24 [1.1.2]'' Fix incompatiblity with TW 2.0.5 by removing custom definition of getLocalPath() (which is now part of TW core)
''2006.02.03 [1.1.1]'' concatentate 'extra' params so that tag expressions don't have to be quoted.   moved all text to 'formatted' string definitions for easier translation.
''2006.02.03 [1.1.0]'' added support for tag EXPRESSIONS.  plus improved documentation and code cleanup
''2006.02.03 [1.0.0]'' Created.

<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
<<<
!!!!!Code
***/
//{{{
version.extensions.newDocument = {major: 1, minor: 7, revision: 0, date: new Date(2007,3,30)};

config.macros.newDocument = {
	newlabel: "new document",
	newprompt: "Create a new TiddlyWiki 'starter' document",
	newdefault: "new.html",
	allparam: "all",
	saveaslabel: "save as...",
	saveasprompt: "Save current TiddlyWiki to a different file",
	printparam: "print",
	snapparam: "snap",
	snaplabel: "create a snapshot",
	snapprompt: "Create a 'snapshot' of the current TiddlyWiki display",
	snapdefault: "snapshot.html",
	snapID: "contentWrapper",
	snapIDprompt: "Please enter a DOM element ID for the desired content",
	snapIDerrmsg: "Unrecognized document element ID: '%0'",
	askparam: "ask",
	hereparam: "here",
	labelparam: "label:",
	promptparam: "prompt:",
	fileprompt: "Please enter a filename",
	filter: "includeNew",
	filterprompt: "Match one or more tags:\n(space-separated, use [[...]] around tags containing spaces)",
	filtererrmsg: "Error in tag filter '%0'",
	snapmsg: "Document snapshot written to %1",
	okmsg: "%0 tiddlers written to %1",
	failmsg: "An error occurred while creating %0"

};

config.macros.newDocument.handler = function(place,macroName,params) {

	var path=getLocalPath(document.location.href);
	var slashpos=path.lastIndexOf("/"); if (slashpos==-1) slashpos=path.lastIndexOf("\\"); 
	if (slashpos!=-1) path = path.substr(0,slashpos+1); // remove filename from path, leave the trailing slash

	if (params[0] && params[0].substr(0,config.macros.newDocument.labelparam.length)==config.macros.newDocument.labelparam)
		var label=params.shift().substr(config.macros.newDocument.labelparam.length)
	if (params[0] && params[0].substr(0,config.macros.newDocument.promptparam.length)==config.macros.newDocument.promptparam)
		var prompt=params.shift().substr(config.macros.newDocument.promptparam.length)
	var filename=params.shift(); if (!filename) filename=config.macros.newDocument.newdefault;
	if (params[0]==config.macros.newDocument.snapparam || params[0]==config.macros.newDocument.printparam) {
		var printmode=(params[0]==config.macros.newDocument.printparam);
		params.shift();
		if (!label) var label=config.macros.newDocument.snaplabel;
		if (!prompt) var prompt=config.macros.newDocument.snapprompt;
		var defaultfile=config.macros.newDocument.snapdefault;
		var snapID=config.macros.newDocument.snapID;// default to "contentWrapper"
		if (params[0]) var snapID=params.shift(); // alternate DOM element for snapshot
	}
	if (params[0]==config.macros.newDocument.allparam) {
		if (!label) var label=config.macros.newDocument.saveaslabel;
		if (!prompt) var prompt=config.macros.newDocument.saveasprompt;
		var defaultfile=getLocalPath(document.location.href);
		var slashpos=defaultfile.lastIndexOf("/"); if (slashpos==-1) slashpos=defaultfile.lastIndexOf("\\");
		if (slashpos!=-1) defaultfile=defaultfile.substr(slashpos+1); // get filename only
	}
	if (!prompt) var prompt=config.macros.newDocument.newprompt;
	if (!label) var label=config.macros.newDocument.newlabel;
	if (!defaultfile) var defaultfile=config.macros.newDocument.newdefault;

	var btn=createTiddlyButton(place,label,prompt,onClickNewDocument);
	btn.path=path;
	btn.file=filename;
	btn.defaultfile=defaultfile;
	btn.snapID=snapID; // NULL unless snapshot is being taken
	btn.printmode=printmode;
	btn.filter=params.length?params:[config.macros.newDocument.filter]; 
}

// IE needs explicit global scoping for functions called by browser events
window.onClickNewDocument=function(e)
{
	if (!e) var e = window.event; var btn=resolveTarget(e);

	// assemble document content, write file, report result
	var okmsg=config.macros.newDocument.okmsg;
	var failmsg=config.macros.newDocument.failmsg;
	var count=0;
	var out="";
	if (btn.snapID) { // HTML+CSS snapshot
		var snapID=btn.snapID;
		if (btn.snapID==config.macros.newDocument.askparam)
			snapID=prompt(config.macros.newDocument.snapIDprompt,config.macros.newDocument.snapID);
		if (btn.snapID==config.macros.newDocument.hereparam)
			{ var here=story.findContainingTiddler(btn); if (here) snapID=here.id; }
		if (!document.getElementById(snapID)) { // if specified element does not exist
			if (snapID) // ID=null if prompt was cancelled by user
				displayMessage(config.macros.newDocument.snapIDerrmsg.format([snapID]));
			e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); return(false);
		}
		var styles=document.getElementsByTagName("style");
		out+="<html>\n<head>\n<style>\n";
		for(var i=0; i < styles.length; i++)
			out +="/* stylesheet from tiddler:"+styles[i].getAttribute("id")+" */\n"+styles[i].innerHTML+"\n\n";
		out+="</style>\n</head>\n<body>\n\n"+document.getElementById(snapID).innerHTML+"\n\n</body>\n</html>";
		okmsg=config.macros.newDocument.snapmsg;
	} else { // TW starter document
		// get the TiddlyWiki core code source
		var sourcefile=getLocalPath(document.location.href);
		var source=loadFile(sourcefile);
		if(source==null) { alert(config.messages.cantSaveError); return null; }
		// reset existing HTML source markup
		source=updateMarkupBlock(source,"PRE-HEAD");
		source=updateMarkupBlock(source,"POST-HEAD");
		source=updateMarkupBlock(source,"PRE-BODY");
		source=updateMarkupBlock(source,"POST-BODY");
		// find store area
		var posOpeningDiv=source.indexOf(startSaveArea);
		var posClosingDiv=source.lastIndexOf(endSaveArea);
		if((posOpeningDiv==-1)||(posClosingDiv==-1)) { alert(config.messages.invalidFileError.format([sourcefile])); return; }
		// get the matching tiddler divs
		var match=btn.filter;
		if (match[0]==config.macros.newDocument.askparam) { // ask user for tags
			var newfilt=prompt(config.macros.newDocument.filterprompt,config.macros.newDocument.filter);
			if (!newfilt) return;  // cancelled by user
			match=newfilt.readMacroParams();
		}
		var storeAreaDivs=[];
		var tiddlers=store.getTiddlers('title');
		for (var i=0; i<tiddlers.length; i++)
			if (match[0]==config.macros.newDocument.allparam || (tiddlers[i].tags && tiddlers[i].tags.containsAny(match)) )
				storeAreaDivs.push(store.getSaver().externalizeTiddler(store,tiddlers[i]));
		out+=source.substr(0,posOpeningDiv+startSaveArea.length);
		out+=convertUnicodeToUTF8(storeAreaDivs.join("\n"))+"\n\t\t";
		out+=source.substr(posClosingDiv);
		count=storeAreaDivs.length;
	}
	if (btn.printmode) {
		var win=window.open("","_blank","");
		win.document.open();
		win.document.writeln(out);
		win.document.close();
		win.focus(); // bring to front
		win.print(); // trigger print dialog
	} else {
		// get output path/filename
		var filename=btn.file;
		if (filename==config.macros.newDocument.askparam)
			filename=promptForFilename(config.macros.newDocument.fileprompt,btn.path,btn.defaultfile);
		if (!filename) return; // cancelled by user
		// if specified file does not include a path, assemble fully qualified path and filename
		var slashpos=filename.lastIndexOf("/"); if (slashpos==-1) slashpos=filename.lastIndexOf("\\");
		if (slashpos==-1) filename=btn.path+filename;
		var ok=saveFile(filename,out);
		var msg=ok?okmsg.format([count,filename]):failmsg.format([filename]);
		var link=ok?"file:///"+filename.replace(/\\/g,'/'):""; // change local path to link text
		clearMessage(); displayMessage(msg,link);
	}
	e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); return(false);
}
//}}}

//{{{
function promptForFilename(msg,path,file)
{
	if(window.Components) { // moz
		try {
			netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
			var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
			var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
			picker.init(window, msg, nsIFilePicker.modeSave);
			var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
			thispath.initWithPath(path);
			picker.displayDirectory=thispath;
			picker.defaultExtension='html';
			picker.defaultString=file;
			picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
			if (picker.show()!=nsIFilePicker.returnCancel) var result=picker.file.persistentDescriptor;
		}
		catch(e) { alert('error during local file access: '+e.toString()) }
	}
	else { // IE
		try { // XP only
			var s = new ActiveXObject('UserAccounts.CommonDialog');
			s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|';
			s.FilterIndex=3; // default to HTML files;
			s.InitialDir=path;
			s.FileName=file;
			if (s.showOpen()) var result=s.FileName;
		}
		catch(e) { var result=prompt(msg,path+file); } // fallback for non-XP IE
	}
	return result;
}
//}}}
config.views.editor.defaultText = "";
<<newTiddler label:"newExample" title:'New Example' text:{{store.getTiddlerText('BlankExample')}} tag:example>>
[img[http://img518.imageshack.us/img518/4779/newfflogobigux9.jpg]]
<<newTiddler label:"newHTML" title:'New HTML' text:{{store.getTiddlerText('BlankHTML')}} tag:html>>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[NewHere]]^^<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>

To create a new tiddlers with the title of the current tiddler as its tag (i.e. 'new here' ) put this in ViewTemplate.

 {{{<span class='toolbar' macro="newTiddler label:'new here' tag:{{tiddler.title}} tag2 tag3"></span>}}}

To create a 'copy a tiddler' (less tags)  button put this in ViewTemplate.

{{{<span class='toolbar' macro="newTiddler label:'copy this' title:'(COPY)' text:{{store.getTiddlerText(tiddler.title)}}  tag:'copy' "></span>}}}

<<newTiddler label:"newIframe" title:'New iframe' text:{{store.getTiddlerText('BlankIframe')}} tag:'iframe'>>
<<newJournal  title:"YYYY.0MM.0DD at 0hh:0mm:0ss" text:{{store.getTiddlerText('JournalTemplate')}} tag:'journal'>>@@color:#00F;(from template)@@
<<newTiddler
	label:"newObject"
        title:"NewObjectTiddler"

	text:{{store.getTiddlerText('BlankObject')}} 
	tag:"object"
	focus:"title"
>>
{{tablecenter scrollauto{
|>|>|bgcolor(#8cf):Searched in: ''titles'' ''tags''  with options: ''text patterns''  ~TiddlyWiki Ver: <<version>>|
|>|bgcolor(#ccc):@@color(#000080):''Search for tiddlers /{{{your choice}}}/''@@|>|bgcolor(#ccc):  ^^@@color(#008F00):''Sort By'':<<option chkSortTags>> Tag <<option chkSearchTitlesFirst>> Titles First@@^^ |
|>|>|>|bgcolor(#fff):<<search>> [img[http://img338.imageshack.us/img338/2996/greyedboxak5.gif]]@@color(#C000C0): ^^Search as you type^^@@ <<option chkHoldSearches>>@@color(#C000C0):^^Hold Search Results^^@@ |
|>|bgcolor(#ccc): ^^@@color(#000080):''Search In'':<<option chkSearchTitles>> Titles <<option chkSearchText>> Text <<option chkSearchTags>>Tags @@ ^^ |bgcolor(#ccc): ^^@@color(#000080):''Options'':<<option chkCaseSensitiveSearch>> ~CaseSensitive <<option chkRegExpSearch>> ~RegExp@@^^ |
|>|>|bgcolor(#eaeaea): <<tiddler OtherOptions>> |
}}}
/***
|Name|NewSideBarHide|
|Originally Created by|SaqImtiaz converted by Morris Gray|
|Location|TBA|
|Version|007|
|Requires|~TW2.x|
!Description:
Toggle sidebar and header . Very handy for when you need more viewing space.

!Demo:
Click the sidebar» button to toggle sidebar and header..

!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
Edit the ViewTemplate to add the fullscreen command to the toolbar.

!History
*25.03.08: ver 1.1 MG
*25-07-06: ver 1.1
*20-07-06: ver 1.0

!Code
***/
//{{{
var lewcidFullSidebar = false;

config.commands.sidebar =
{
            text:"sidebar» ",
            tooltip:"toggle sidebar mode"
};

config.commands.sidebar.handler = function (event,src,title)
{
            if (lewcidFullSidebar == false)
               {
                lewcidFullSidebar = true;
                setStylesheet('#sidebar, .header {display:none;} #displayArea{margin: 0em 0em 0em 12.5em !important;}',"lewcidFullSidebarStyle");
               }
            else
               {
                lewcidFullSidebar = false;
                setStylesheet(' ',"lewcidFullSidebarStyle");
               }
}

config.macros.sidebar={};
config.macros.sidebar.handler =  function(place,macroName,params,wikifier,paramString,tiddler)
{
        var label = params[0]||" sidebar» ";
        var tooltip = params[1]||"togglesidebar mode";
        createTiddlyButton(place,label,tooltip,config.commands.sidebar.handler);
}

var lewcid_sidebar_closeTiddler = Story.prototype.closeTiddler;
Story.prototype.closeTiddler =function(title,animate,slowly)
{
           lewcid_sidebar_closeTiddler.apply(this,arguments);
           if (story.isEmpty() && lewcidFullSidebar == true)
              config.commands.sidebar.handler();
}


Slider.prototype.lewcidStop = Slider.prototype.stop;
Slider.prototype.stop = function()
{
           this.lewcidStop();
           if (story.isEmpty() && lewcidFullSidebar == true)
              config.commands.sidebar.handler();
}
//}}}
<<newTiddler label:"newSlider" title:'New Slider' text:{{store.getTiddlerText('BlankSlider')}} tag:'slider'>>
<<newTiddler label:"newSystemConfig" title:"New SystemConfig Tiddler" tag:"systemConfig" focus:"text">>
<<newTiddler label:"newTable" title:'New Table' text:{{store.getTiddlerText('BlankTable')}} tag:'table'>>
<<tabs tabsCookie [[Intro ]] "tooltip 1" [[WhatsInATiddlerIntro]]  [[TabTwoName]] "" [[tiddler two]]  [[TabThreeName]] "" [[Tiddler three]] [[TabFourName]] "" [[Tiddler four]] >>
!!!NewTabsCSS

#tiddlerNewTabs .viewer {border: 0px solid #92a9c0;}


#tiddlerNewTabs .viewer .tabContents {
	color: #000;
	
	border: 1px solid #92a9c0;
        margin-bottom: 0em;
      overflow: auto;
}

#tiddlerNewTabs .viewer .tabSelected {
        font-size:0.95em;
        font-weight:bold;
        color: #a00;
	text-decoration:none;
        //background:  #d9e1f0;
        border: 1px 1px 0px 1px solid #92a9c0;
}

#tiddlerNewTabs .viewer .tabUnselected:a {color:#04b;}

#tiddlerNewTabs .viewer .tabUnselected {
        font-size:0.95em;
        font-weight:bold;
	color:#5d7f91;
        background:#eaeef7
        text-decoration:none;
        border:#92a9c0;
        border-left: 1px solid #92a9c0;
	border-top: 1px solid #92a9c0;
	border-right: 1px solid #92a9c0;
}


#tiddlerNewTabs .viewer .tabUnselected:hover {
	color: #f00;
	background: #ffd;
        text-decoration:none;
        border:#000;
        border-left: 1px solid #999;
	border-top: 1px solid #999;
	border-right: 1px solid #999;
}
<<newTiddler label:"newTabs" title:'New Tabs' text:{{store.getTiddlerText('BlankTabs')}} tag:'tab'>>
{{tablecenter{
|>|>|bgcolor:#abf; @@color:#00f;<html><span title="Clicking Home in the mainmenu returns you here" style="cursor:help; color:#000;">Welcome to TW Help Home</span></html>@@ |bgcolor:#abf; ^^<<tiddler [[EmailTWHelp]]>> @@color:#ff00ff;|@@ [[Help with Search|SearchHelp]]^^|>|
|>|>|>|>|bgcolor:#eff;padding-right:1em;<<search>> <<option chkSearchTitles>> Titles <<option chkSearchText>> Text <<option chkSearchTags>>Tags <<option chkHoldSearches>> Hold |
|>|>|>|>|bgcolor:#8af;font-size:8pt;text-align:center;@@color:#fff;&laquo; &laquo; @@@@color:#FFF;Try the left Menu@@ |
|>|>|>|>|padding:0px;font-size:8pt;<<gradient horiz  #fdf #fff>>@@color:#00f;&nbsp; Recommended Viewing: @@ [[OverView|OverView]] ''<<MyGroup>>'' ''[[TW Discussion Group|http://groups.google.com/group/TiddlyWiki]]'' >>|
}}}
<<newTiddler label:"newTweak" title:'New Tweak' text:{{store.getTiddlerText('NewTweakTemplate')}} tag:'tweak'>>
----
&darr;+++[Create a tiddler like this:]
----
@@color(#C06):&nbsp;''Title:''@@<html><input type="text" size="40" value="" /></html>

@@color(#00f):''Body:''@@<html><textarea rows="10" cols="30"></textarea>  </html>
@@color(#0a0):''Tags:''@@<html><input type="text" size="40" value="systemConfig " /></html>

===

----
<<tabs "" [[LatestUpdate ]] "Click here to see the last update" [[]] [[Alphabetical ]] "" [[Alpha]] [[Contents ]] "" [[Table of Contents]]   [[Dependencies ]] "" [[ThisTWDependencies]]  [[Other Help Sites ]] "" [[OtherHelpSites]][[PluginServers ]] "" [[PluginServers]]  [[Translate ]] "" [[Translate]]>>
<html><div align="center"><table bgcolor="#ffffff"><font size="-2" face="Arial, Helvetica, sans-serif" color="#ff0000">&nbsp; <A HREF="http://www.abc.net.au/news/default.htm" target="_blank" title="Australian ABC News">ABC</A>&nbsp;|&nbsp;<A HREF="http://www.countercurrents.org/" target="_blank" title="CounterCurrents">WSW</A>&nbsp;|&nbsp;<A HREF="http://www.theage.com.au/" target="_blank" title="Australian Age">AGE</A>&nbsp;|&nbsp;<A HREF="http://www.smh.com.au/" target="_blank" title="Sydney Morning Herald">SMH</A>&nbsp;&nbsp;<A HREF="http://news.bbc.co.uk/" target="_blank">BBC</A>&nbsp;|&nbsp;<A HREF="http://www.cnn.com/" target="_blank">CNN</A>&nbsp;|&nbsp;<A HREF="http://www.guardian.co.uk/" target="_blank">Guardian</A>&nbsp;|<A HREF="http://www.news.com/" target="_blank"> ~CNet</A>&nbsp;|&nbsp;<A HREF="http://www.wired.com/news/" target="_blank">Wired</A>&nbsp;&nbsp;|<A HREF="http://www.zdnet.com/" target="_blank"> ~ZDNet</A>&nbsp;|&nbsp;<A HREF="http://dailynews.yahoo.com/" target="_blank">Reuters</A>&nbsp;|&nbsp;<A HREF="http://news.google.com/" target="_blank">Google</A>&nbsp;|&nbsp;<A HREF="http://washingtonpost.com/" target="_blank">Wash. Post</A>&nbsp;</font></div></table></html>
{{borderless{
<<tiddler NavButtons>>
<script>
document.write(unescape('%3C%68%74%6D%6C%3E%3C%74%61%62%6C%65%20%77%69%64%74%68%3D%22%39%36%25%22%20%73%74%79%6C%65%3D%22%62%6F%72%64%65%72%3A%6E%6F%6E%65%3B%6D%61%72%67%69%6E%3A%31%70%78%3B%62%61%63%6B%67%72%6F%75%6E%64%3A%74%72%61%6E%73%70%61%72%65%6E%74%3B%63%6C%65%61%72%3A%62%6F%74%68%3B%22%3E%3C%69%66%72%61%6D%65%20%69%64%3D%22%6D%61%67%69%63%74%75%74%31%22%20%73%72%63%3D%22%66%69%6C%65%3A%2F%2F%2F%44%3A%5C%57%69%6B%69%5C%4F%75%74%42%6F%61%72%64%5C%6D%61%67%69%63%74%75%74%31%2E%68%74%6D%22%20%77%69%64%74%68%3D%22%31%30%30%25%22%20%68%65%69%67%68%74%3D%22%30%22%20%73%63%72%6F%6C%6C%69%6E%67%3D%22%6E%6F%22%20%66%72%61%6D%65%62%6F%72%64%65%72%3D%22%30%22%20%61%6C%6C%6F%77%74%72%61%6E%73%70%61%72%65%6E%63%79%20%73%74%79%6C%65%3D%22%62%6F%72%64%65%72%3A%6E%6F%6E%65%3B%22%3E%3C%2F%69%66%72%61%6D%65%3E%3C%2F%74%61%62%6C%65%3E%3C%2F%68%74%6D%6C%3E'));
</script>
}}}
<<forEachTiddler 
 where
 'tiddler.tags.length == 0'
>>
<<tiddler Entities-Codes>>
*[[Samuel Reynolds|http://www.spinwardstars.com/HouseForSale/#%5B%5BAll%20the%20Pictures%5D%5D]]
*[[Business Site Presentation Mode|http://bclearproject.tiddlyspot.com/]]
*[[MelMel's CuddlyWiki|http://melc.vox.com/library/photo/6a00d09e51b8d2be2b00cd97116c214cd5.html]]
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("o")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
{{borderless{
|vertical-align:bottom;<<fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://mediatedcultures.net/phantom/Intro.html]]&nbsp;&raquo;|
}}}<html><div align="center"><iframe src ="http://mediatedcultures.net/phantom/Intro.html" width="100%" align="center" height="600"></iframe></div></html>
[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]][[OldTimeRadio|http://www.otr.com/private.shtml]]
	
function onClickOpenClose(e) {

var title=story.findContainingTiddler(place).id.substr(7);

story.closeTiddler(title);
}
config.macros["openClose"] = {label: "CloseTiddler", prompt: "Close this tiddler", title: "CloseTiddler"};
config.macros.openClose.handler = function(place) {
createTiddlyButton(place,this.label,this.prompt,onClickOpenClose);
}
/***
|Name|OpenTopPlugin|
|Created by|SaqImtiaz|
|Location|http://lewcid.googlepages.com/lewcid.html#OpenTopPlugin|
|Version|0.1|
|Requires|~TW2.x|
!!!Description:
Open new tiddlers at the top of the screen.

!!!Code
***/
//{{{
Story.prototype.coreLewcidDisplayTiddler=Story.prototype.displayTiddler ;
Story.prototype.displayTiddler =
function(srcElement,title,template,unused1,unused2,animate,slowly)
{
       var srcElement=null;
       if (document.getElementById(this.idPrefix + title))
          {story.closeTiddler(title);}
       this.coreLewcidDisplayTiddler(srcElement,title,template,unused1,unused2,animate,slowly);
       window.scrollTo(0,0);
}
//}}}
<script>place.style.backgroundColor="#000080";</script><html><div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div></html>
These InterfaceOptions for customising TiddlyWiki are saved in your browser

Your username for signing your edits. Write it as a WikiWord (eg JoeBloggs)

<<option txtUserName>>
<<option chkSaveBackups>> SaveBackups
<<option chkAutoSave>> AutoSave
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
<<option chkAnimate>> EnableAnimations

 &nbsp;&nbsp;[img[http://img167.imageshack.us/img167/1120/wirebulletc06tk9.gif]]&nbsp;<html><a href='javascript:void(eval(decodeURIComponent("(function()%250A%257B%250Avar%2520script%253Ddocument.createElement(%2522script%2522)%253B%250Ascript.src%253D%2522http%253A%252F%252Ftrac.tiddlywiki.org%252Fbrowser%252FTrunk%252Fcontributors%252FXavierVerges%252Fplugins%252FFirefoxPrivilegesPlugin.js%253Fformat%253Draw%2522%253B%250Ascript.onload%253Dfunction()%257Bvar%2520b%253Dbackstage%253B%2520var%2520fp%253D%2522firefoxPrivileges%2522%253B%250Avar%2520bt%253DcreateTiddlyButton(b.toolbar%252C%2522security%2522%252Bglyph(%2522downTriangle%2522)%252C%2522%2522%252Cb.onClickTab%252C%2522backstageTab%2522)%253B%250Abt.setAttribute(%2522task%2522%252Cfp)%253Bb.switchTab(fp)%253B%257D%253B%250Adocument.getElementsByTagName(%2522head%2522)%255B0%255D.appendChild(script)%253B%250A%257D)()")))'>Firefox Privileges</a></html> 

----
Also see AdvancedOptions
{{textleft{
++++[Fold TWHelpSiteLinks]<<tiddler TWHelpSiteLinks>>===
++++[Fold WatchThisSpace]<<tiddler WatchThisSpace>>===
++++[TWLinkCollection]<<tiddler TWLinkCollection>>===
++++[Fold TWForMath]<<tiddler TWForMath>>===
++++[Fold PluginSites]<<tiddler PluginSites>>===
++++[Fold TWExamples]<<tiddler TWExamples>>===
++++[Fold TiddlyWikiAdaptations]<<tiddler TiddlyWikiAdaptations>>===
}}}
{{scrollauto textleft{
|<<slider 1 [[AdvancedOptions]] '+advanced options'>> |<<slider 2 [[forListHiddenTags]] '+hidden'>> |<<slider 3 [[ListShadowed]] '+shadowed'>> |<<slider 4 [[forListsystemConfigTags]] '+systemConfig'>> |
|{{nowrap{<<slider 5 [[Alpha]] '+alpha'>>}}} |<<newTiddler>>|<<newJournal "YYYY.0MM.0DD at 0hh:0mm:0ss week 0WW">>|<<saveChanges>>|
|>|>|>|<<slider 6 [[ShowRelatedTiddlers]] '+ShowRelatedTiddlers'>> |
}}}
{{textleft{
!!!<<gradient horiz #fc3 #ffffff>>OverView>>
{{floatboxright{
A ~TiddlyWiki contains its own computer programs, the styling information and the editing tools to modify any part of it.
}}}
!!!<<gradient horz  #99AAEE  #ffffff>>@@color:#3300CC;[img[http://img224.imageshack.us/img224/495/arrowblk3op.gif]]'' Simple''@@>>
<<<
''The web page'' you are viewing is called a @@color:#C06;''~TiddlyWiki''@@. The ~TiddlyWiki structure can be considered similiar to a card file used for recipes or an address book but does much, much more.  
In a ~TiddlyWiki the 'cards' are called@@position:relative;+++^25em^[tiddlers.] Don't laugh you will soon come to love your tiddlers everybody does :)===@@ You are presently reading the contents of a tiddler entitled @@color(#3300CC):''~OverView''@@.+++[Read more about TiddlyWiki here]
*[[Read about TiddlyWiki in Wikipedia|http://en.wikipedia.org/wiki/TiddlyWiki]]
*[[See a showcase of what others have done with TiddlyWikis|http://giffmex.tiddlyspot.com/]]
*[[See the tiddlyspot.com gallery|http://tiddlyspot.com/?page=gallery]]
*[[See a collection of themes you can use|http://tiddlythemes.com]]
*[[See a presentation model|http://lewcid.googlepages.com/presentation_empty.html#author:true]]
*[[Wiki For Students|http://tinyurl.com/347xy7]] @@color:#C06;''&raquo; &raquo;'' @@ Lifehack.com
*[[Compare Wikis|http://www.wikimatrix.org/]] @@color:#C06;''&raquo; &raquo;'' @@  
===

<<<

@@color:#C06;''&raquo; &raquo;''@@+++[Open/Close tab demo here to see what can be put into a tiddler.]
<<tiddler WhatsInATiddler>>

===

!!!<<gradient horz  #99AAEE  #ffffff>>@@color:#3300CC;[img[http://img224.imageshack.us/img224/495/arrowblk3op.gif]]'' Unique''@@>>
<<<
''A ~TiddlyWiki is unique because'' it is a single HTML Internet/Intranet type page that is completely self-contained requiring no supporting programs or files.
<<<
!!!<<gradient horz  #99AAEE  #ffffff>>@@color:#3300CC;[img[http://img224.imageshack.us/img224/495/arrowblk3op.gif]]'' Versatile''@@>>

<<<
''The big difference'' compared to a card file is that putting code such as @@color(#C06):''HTML, CSS'' or ''Javascript''@@ on these  tiddlers they can run as programs as well as changing styling and recording your data. There is also a large number of 'plugins' that can be placed on tiddlers to extend its capabilities to cater for almost anything one could dream up.
<<<
!!!<<gradient horz  #99AAEE  '#ffffff>>@@color:#3300CC;[img[http://img224.imageshack.us/img224/495/arrowblk3op.gif]]'' Mobile''@@>>
<<<
''One of the best features'' of ~TiddlyWiki is that it's very portable. Because it is a single HTML page that can be edited within itself without the aid of any supporting files or programs it can be posted to a Web Server, sent by email, kept on a USB thumb drive to make a ~WikiOnAStick, and is usually small enough to even keep on an old fashioned 1.4 meg floppy.
<<<
!!!!!<<gradient horz  #FF8888 #ffdddd #ffffff>>@@color:white;&nbsp;'' You've got it!''@@>>
If you want a brand new TiddlyWiki go to:
*[[Master TiddlyWiki Site|http://tiddlywiki.com/]] @@color:#3300CC;''&raquo; &raquo;'' @@Jeremy Ruston's Official TW Information Source
*[[TiddlySpot|http://tiddlyspot.com/]] @@color:#C06;''&raquo; &raquo;'' @@Free ~TiddlyWikis and  Hosting

<<<
@@color(#C06):''This ~TiddlyWiki is already on your computer and you can save it and modify it for your own use by right clicking ''[[here|http://www.tiddlyspot.com/twhelp]]'' and ''Save target as... ''(IE) or ''Save link as...'' (~FireFox) ''@@
<<<
@@''NOTE:'' Do not save this page, or any ~TiddlyWiki, using your ''browser's'' File>Save As.. feature it may be corrupted in the process.  Use the 'save to disk' feature that appears in the right column after download.@@
<<<
<<<
}}}
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("p")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
<div class='header' macro='gradient vert   #0000C8 #003'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div></div><div id='topMenu' refresh='content'  force='true' tiddler='SlantedMenu'></div>

<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>
<div id='displayArea'>
<div id='mainMenu'>
<div refresh='content' force='true' tiddler='MainMenu'></div>
</div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content'   force='true'  tiddler='SideBarOptions'></div>

<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>

<div id='messageArea'></div>
<div id='tiddlerDisplay'><span style='display:none' macro='tiddler SetTiddlerHeight with:
85%'></span><span style='display:none' macro='tiddler SetPopupsHeight with:
50%'></span>  </div><div id='ContentFooter' refresh='content' tiddler='ContentFooter'></div></div>

</div>
----
{{wrappingClass{As you can see the header is the top-most area; it contains the color gradient, siteTitle, and the siteSubtitle.}}}
<<<
{{{
<div class='header' macro='gradient vert #00c #003'><span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;</div>
<div class='headerForeground'><span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span></div>

}}}
<<<

{{wrappingClass{The ~MainMenu is at the left margin}}}
<<<
{{{
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
}}}
<<<
{{wrappingClass{The Sidebar, the sidebar options and the tiddler tabs is on the right margin.}}}
<<<
{{{
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>

<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
}}}
<<<

{{wrappingClass{The displayArea is between the two side margins.  
The messageArea appears when you save and for other messages such as errors.}}}
<<<
{{{
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>

</div>
}}}
<<<
!!!End 

<script>
   place.style.backgroundColor="#fef"; /* set background color */ 
   place.style.color="#c06"; /* set text color */
</script>
TW Help
<html><div align="center"> <object width="425" height="350"><param name="movie" value="http://newmedia.purchase.edu/~Jeanine/origami/cup2.swf"></param><param name="wmode" value="transparent"></param><embed src="http://newmedia.purchase.edu/~Jeanine/origami/cup2.swf" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></div></html>
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;PartPlugin^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>

*A built-in core feature that now does the same thing [[click here |TiddlerSlicing]]

*There is a most useful plugin from http://tiddlywiki.abego-software.de/#PartTiddlerPlugin
|padding:5px;vertical-align: middle; Example using <part>... </part> |<<tiddler ./Name>>|
!!!<<gradient horiz #abf  #ffffff>>&nbsp;To use 'within' a tiddler Do This>>

''1: Surround some text in a tiddler like this:''
{{{
<part partName hidden> tiddler content </part>
}}}
''2: Then where you want the content to be displayed do this:''
{{{
<<tiddler [[./partName]]>>
}}}
''Example: For the above table...''

''In this tiddler there exists this: (As it says it is hidden from normal view until it is put into the table.)''
{{{
<part partName hidden>
*This plugin allows many things in a table you could not do otherwise like these bullet points.
*This plugin can be used within a tiddler itself or to take sections of content from one tiddler to display in another
*It allows you to make multiple columns in a tiddler using tables.
*It allows you to use certain sections of tiddlers in several places without rewriting them; also editing one edits them all.
</part>
}}}

''The table is constructed so...''
!!!Code
{{{
|padding:5px; This is a most useful plugin|<<tiddler [[./partName]]>>|
}}}
!!!Example
|padding:5px;vertical-align: middle; ''Example using <part>... </part>'' |<<tiddler ./Name>>|
!!!<<gradient horiz #aaaaaa #bbbbbb #cccccc #eeeeee #ffffff>>&nbsp;To use 'between' separate tiddlers Do This:>>

''1: Surround some text in a tiddler (TiddlerName) like this:''
{{{
<part partName> tiddler content </part>
}}}
''2: Then in the tiddler where you want the content to be displayed do this:''
{{{
<<tiddler TiddlerName/partName>>
}}}
''Here is this demonstrated by an excerpt from the Glossary''
<<<
{{{<<tiddler Glossary/permaview>>}}}
<<tiddler Glossary/permaview>>
<<<

<part Name hidden>
*This plugin allows many things in a table you could not do otherwise like these bullet points.
*This plugin can be used within a tiddler itself or to take sections of content from one tiddler to display in another
*It allows you to make multiple columns in a tiddler using tables.
*It allows you to use certain sections of tiddlers in several places without rewriting them; also editing one edits them all.
</part>

/***
|<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>
***/
<<forEachTiddler
    sortBy
        tiddler.modified
    descending
    write
        '(index < 10) ? "\n[["+tiddler.title+"]]@@position:relative;+++^35em^[(peek)]<<tiddler [["+tiddler.title+"]]$))===@@" : ""' >>

































!!![[PeriodicTable]]
The ubiquitous Periodic Table again. If this has sparked your interest in the elements then go [[here|http://science.tiddlyspot.com/#Elements]]
<html><div style="color:#000000;">
|@@color(#D63059):Standard Periodic Table (ref. Wikipedia)@@|c
|bgcolor(#cccccc):| !1 | !2 |!| !3 | !4 | !5 | !6 | !7 | !8 | !9 | !10 | !11 | !12 | !13 | !14 | !15 | !16 | !17 | !18 |
|!1|bgcolor(#a0ffa0): @@color(red):H@@ |>|>|>|>|>|>|>|>|>|>|>|>|>|>|>|>||bgcolor(#c0ffff): @@color(red):He@@ |
|!2|bgcolor(#ff6666): Li |bgcolor(#ffdead): Be |>|>|>|>|>|>|>|>|>|>||bgcolor(#cccc99): B |bgcolor(#a0ffa0): C |bgcolor(#a0ffa0): @@color(red):N@@ |bgcolor(#a0ffa0): @@color(red):O@@ |bgcolor(#ffff99): @@color(red):F@@ |bgcolor(#c0ffff): @@color(red):Ne@@ |
|!3|bgcolor(#ff6666): Na |bgcolor(#ffdead): Mg |>|>|>|>|>|>|>|>|>|>||bgcolor(#cccccc): Al |bgcolor(#cccc99): Si |bgcolor(#a0ffa0): P |bgcolor(#a0ffa0): S |bgcolor(#ffff99): @@color(red):Cl@@ |bgcolor(#c0ffff): @@color(red):Ar@@ |
|!4|bgcolor(#ff6666): K |bgcolor(#ffdead): Ca ||bgcolor(#ffc0c0): Sc |bgcolor(#ffc0c0): Ti |bgcolor(#ffc0c0): V |bgcolor(#ffc0c0): Cr |bgcolor(#ffc0c0): Mn |bgcolor(#ffc0c0): Fe |bgcolor(#ffc0c0): Co |bgcolor(#ffc0c0): Ni |bgcolor(#ffc0c0): Cu |bgcolor(#ffc0c0): Zn |bgcolor(#cccccc): Ga |bgcolor(#cccc99): Ge |bgcolor(#cccc99): As |bgcolor(#a0ffa0): Se |bgcolor(#ffff99): @@color(green):Br@@ |bgcolor(#c0ffff): @@color(red):Kr@@ |
|!5|bgcolor(#ff6666): Rb |bgcolor(#ffdead): Sr ||bgcolor(#ffc0c0): Y |bgcolor(#ffc0c0): Zr |bgcolor(#ffc0c0): Nb |bgcolor(#ffc0c0): Mo |bgcolor(#ffc0c0): Tc |bgcolor(#ffc0c0): Ru |bgcolor(#ffc0c0): Rh |bgcolor(#ffc0c0): Pd |bgcolor(#ffc0c0): Ag |bgcolor(#ffc0c0): Cd |bgcolor(#cccccc): In |bgcolor(#cccccc): Sn |bgcolor(#cccc99): Sb |bgcolor(#cccc99): Te |bgcolor(#ffff99): I |bgcolor(#c0ffff): @@color(red):Xe@@ |
|!6|bgcolor(#ff6666): Cs |bgcolor(#ffdead): Ba |bgcolor(#ffbfff):^^*1^^|bgcolor(#ffc0c0): Lu |bgcolor(#ffc0c0): Hf |bgcolor(#ffc0c0): Ta |bgcolor(#ffc0c0): W |bgcolor(#ffc0c0): Re |bgcolor(#ffc0c0): Os |bgcolor(#ffc0c0): Ir |bgcolor(#ffc0c0): Pt |bgcolor(#ffc0c0): Au |bgcolor(#ffc0c0): @@color(green):Hg@@ |bgcolor(#cccccc): Tl |bgcolor(#cccccc): Pb |bgcolor(#cccccc): Bi |bgcolor(#cccc99): Po |bgcolor(#ffff99): At |bgcolor(#c0ffff): @@color(red):Rn@@ |
|!7|bgcolor(#ff6666): Fr |bgcolor(#ffdead): Ra |bgcolor(#ff99cc):^^*2^^|bgcolor(#ffc0c0): Lr |bgcolor(#ffc0c0): Rf |bgcolor(#ffc0c0): Db |bgcolor(#ffc0c0): Sq |bgcolor(#ffc0c0): Bh |bgcolor(#ffc0c0): Hs |bgcolor(#ffc0c0): Mt |bgcolor(#ffc0c0): Ds |bgcolor(#ffc0c0): Rg |bgcolor(#ffc0c0): @@color(green):Uub@@ |bgcolor(#cccccc): Uut |bgcolor(#cccccc): Uuq |bgcolor(#cccccc): Uup |bgcolor(#cccccc): Uuh |bgcolor(#fcfecc): @@color(#cccccc):Uus@@ |bgcolor(#ecfefc): @@color(#cccccc):Uuo@@ |

| !Lanthanides^^*1^^|bgcolor(#ffbfff): La |bgcolor(#ffbfff): Ce |bgcolor(#ffbfff): Pr |bgcolor(#ffbfff): Nd |bgcolor(#ffbfff): Pm |bgcolor(#ffbfff): Sm |bgcolor(#ffbfff): Eu |bgcolor(#ffbfff): Gd |bgcolor(#ffbfff): Tb |bgcolor(#ffbfff): Dy |bgcolor(#ffbfff): Ho |bgcolor(#ffbfff): Er |bgcolor(#ffbfff): Tm |bgcolor(#ffbfff): Yb |
| !Actinides^^*2^^|bgcolor(#ff99cc): Ac |bgcolor(#ff99cc): Th |bgcolor(#ff99cc): Pa |bgcolor(#ff99cc): U |bgcolor(#ff99cc): Np |bgcolor(#ff99cc): Pu |bgcolor(#ff99cc): Am |bgcolor(#ff99cc): Cm |bgcolor(#ff99cc): Bk |bgcolor(#ff99cc): Cf |bgcolor(#ff99cc): Es |bgcolor(#ff99cc): Fm |bgcolor(#ff99cc): Md |bgcolor(#ff99cc): No |

*Chemical Series of the Periodic Table
**@@bgcolor(#ff6666): Alkali metals@@
**@@bgcolor(#ffdead): Alkaline earth metals@@
**@@bgcolor(#ffbfff): Lanthanides@@
**@@bgcolor(#ff99cc): Actinides@@
**@@bgcolor(#ffc0c0): Transition metals@@
**@@bgcolor(#cccccc): Poor metals@@
**@@bgcolor(#cccc99): Metalloids@@
**@@bgcolor(#a0ffa0): Nonmetals@@
**@@bgcolor(#ffff99): Halogens@@
**@@bgcolor(#c0ffff): Noble gases@@

*State at standard temperature and pressure
**those in @@color(red):red@@ are gases
**those in @@color(green):green@@ are liquids
**those in black are solids

</div></html>
!!!<<gradient horiz #fc3 #fff>>&nbsp;PermalinkList^^<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>
* NOTE: These scripts require InlineJavascriptPlugin
*If you have not already done so, to use this script, you must insert your URL in the shadow tidder SiteUrl
!!!<<gradient horiz #abf #fff>>&nbsp;Generate a list of permalinks>>

This script generates a complete set of """http://""" links to each tiddler in a ~TiddlyWiki.  In other words it creates a list of+++[permalinks]<<tiddler Glossary/permalink>>=== for every tiddler. The original purpose of this script was to generate a list of links to enhance ~TiddlyWiki for Google Listing. (@@color:#C06;Script by Eric Shulman@@)

<<<
To use this script you must insert your URL in the shadow tidder SiteUrl
Or you can insert an actual URL the code below like this:
{{{var url=store.getTiddlerText("http://Your Actual URL");}}}
<<<

+++[1: Generate all pretty permalinks]
Clicking on the links below will take you to the ''online version'' of each tiddler.  Or you could right-click on each link and "Copy link location" and paste it somewhere like an email. (Script courtesy of Eric Shulman)

<script>

var out=""
var tids=store.getTiddlers("title","excludeLists");
for (var t=0; t<tids.length; t++) {
   var url="http://twhelp.tiddlyspot.com/";
   if (!url) url=document.location.href;
   var
permalink=encodeURIComponent(String.encodeTiddlyLink(tids[t].title));
    out+="[["+tids[t].title+"|"+url+"#"+permalink+"]]\n";
   
}
return out;

</script> 
===
----
@@color:#C06;''Script for pretty links''@@
{{{
<script>
var out=""
var tids=store.getTiddlers("title","excludeLists");
for (var t=0; t<tids.length; t++) {
   var url=store.getTiddlerText("SiteUrl");
   if (!url) url=document.location.href;
   var
permalink=encodeURIComponent(String.encodeTiddlyLink(tids[t].title));
    out+="[["+tids[t].title+"|"+url+"#"+permalink+"]]\n";
}
return out;

</script> 
}}}

+++[2: Generate all raw links as text]
<<<
To index your tiddlers for seach engines, you should use the following
script which wraps the output inside a PRE block so that the links are
displayed as literal text, and then copy/paste the resulting output
into a separate "index.html" file that you place in the same directory
as your document. (Script courtesy of Eric Shulman)
<<<
<script>
var out=""
var tids=store.getTiddlers("title");
for (var t=0; t<tids.length; t++) {
   var url="http://twhelp.tiddlyspot.com/";
   if (!url) url=document.location.href;
   var
permalink=encodeURIComponent(String.encodeTiddlyLink(tids[t].title));
     out+=url+"#"+permalink+"\n";
}
return "{{{\n"+out+"\n}}}\n"; 

</script> 
===

----
@@color:#C06;''Script for raw links''@@
{{{
<script>
var out=""
var tids=store.getTiddlers("title","excludeLists");
for (var t=0; t<tids.length; t++) {
   var url=store.getTiddlerText("SiteUrl");
   if (!url) url=document.location.href;
   var
permalink=encodeURIComponent(String.encodeTiddlyLink(tids[t].title));
     out+=url+"#"+permalink+"\n";
}
return "{{{\n"+out+"\n}}}\n"; 

</script> 
}}}

!!!&nbsp;End
<script>
var out=""
var tids=store.getTiddlers("title","excludeLists");
for (var t=0; t<tids.length; t++) {
   var url="http://twhelp.tiddlyspot.com/";
   if (!url) url=document.location.href;
   var
permalink=encodeURIComponent(String.encodeTiddlyLink(tids[t].title));
     out+=url+"#"+permalink+"\n";
}

return "{{{\n"+out+"\n}}}\n"; 

</script> 
!!!<<gradient horiz #fc3 #fff>>[[PixelsToEmConverter]]^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://riddle.pl/emcalc/]]&nbsp;&raquo;|
----

<html><div align="center"><iframe  src ="http://riddle.pl/emcalc/" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;PlainTextTooltip ^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>
<<<
''If you require a tool tip on plain text using HTML, you can write:''
{{{<html><span title="Mouseover tooltip. Your text here" style="cursor:pointer">Try it here</span></html>}}}


<html>@@<span title="Mouseover tooltip. Your text here" style="cursor:pointer">Try it here</span>@@</html>

*Change the cursor too
{{{<html><span title="Mouseover tooltip text and the cursor is changed" style="cursor:help">Try it here with the cursor changed</span></html>}}}


<html><span title="Mouseover tooltip text and the cursor is changed" style="cursor:help">Try it here with the cursor changed</span></html>

Get your cursor here at [[Cursor Property - CSS|Cursor Property - CSS]]

+++[Click here to see a preview]
<<tiddler [[Cursor Property - CSS]]>>
===
<<<
/***
|''Name:''|PlayerPlugin|
|''Source:''|http://www.TiddlyTools.com/#PlayerPlugin|
|''Author:''|Eric Shulman - ELS Design Studios|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|''~CoreVersion:''|2.0.10|

Embed a media player in a tiddler.  

!!!!!Usage
<<<
{{{<<player [type] [URL] [width] [height] [hidecontrols]>>}}}

where ''type'' is optional, and is one of the following: ''windows'', ''realone'', ''quicktime'', or ''flash''.  If the media type is not specified, the plugin automatically renders Windows, Real, QuickTime or Flash player by matching known file extensions and/or specialized streaming-media transfer protocols (such as RTSP:).  For unrecognized media types, the plugin assumes WindowsMedia (the player with the most users... *sigh*)
<<<
!!!!!Configuration
<<<
Default player size:
width: <<option txtPlayerDefaultWidth>> height: <<option txtPlayerDefaultHeight>>
<<<

!!!!!Examples
<<<
+++[Windows Media]...
Times Square Live Webcam
{{{<<player id=1 http://www.earthcam.com/usa/newyork/timessquare/asx/tsq_stream.asx>>}}}
<<player id=1 http://www.earthcam.com/usa/newyork/timessquare/asx/tsq_stream.asx>>
===
+++[RealOne]...
BBC London: Live and Recorded news
{{{<<player id=2 http://www.bbc.co.uk/london/realmedia/news/tvnews.ram>>}}}
<<player id=2 http://www.bbc.co.uk/london/realmedia/news/tvnews.ram>>
===
+++[Quicktime]...
America Free TV: Classic Comedy
{{{<<player id=3 http://www.americafree.tv/unicast_mov/AmericaFreeTVComedy.mov>>}}}
<<player id=3 http://www.americafree.tv/unicast_mov/AmericaFreeTVComedy.mov>>

===
+++[Flash]...
Asteroids arcade game
{{{<<player id=4 http://www.80smusiclyrics.com/games/asteroids/asteroids.swf 400 300>>}}}
<<player id=4 http://www.80smusiclyrics.com/games/asteroids/asteroids.swf 400 300>>
Google Video
{{{<<player id=5 flash http://video.google.com/googleplayer.swf?videoUrl=http%3A%2F%2Fvp.video.google.com%2Fvideodownload%3Fversion%3D0%26secureurl%3DoQAAAIVnUNP6GYRY8YnIRNPe4Uk5-j1q1MVpJIW4uyEFpq5Si0hcSDuig_JZcB9nNpAhbScm9W_8y_vDJQBw1DRdCVbXl-wwm5dyUiiStl_rXt0ATlstVzrUNC4fkgK_j7nmse7kxojRj1M3eo3jXKm2V8pQjWk97GcksMFFwg7BRAXmRSERexR210Amar5LYzlo9_k2AGUWPLyRhMJS4v5KtDSvNK0neL83ZjlHlSECYXyk%26sigh%3Dmpt2EOr86OAUNnPQ3b9Tr0wnDms%26begin%3D0%26len%3D429700%26docid%3D-914679554478687740&thumbnailUrl=http%3A%2F%2Fvideo.google.com%2FThumbnailServer%3Fcontentid%3De7e77162deb04c42%26second%3D5%26itag%3Dw320%26urlcreated%3D1144620753%26sigh%3DC3fqXPPS1tFiUqLzmkX3pdgYc2Y&playerId=-91467955447868774               400 326>>}}}
<<player id=5 flash http://video.google.com/googleplayer.swf?videoUrl=http%3A%2F%2Fvp.video.google.com%2Fvideodownload%3Fversion%3D0%26secureurl%3DoQAAAIVnUNP6GYRY8YnIRNPe4Uk5-j1q1MVpJIW4uyEFpq5Si0hcSDuig_JZcB9nNpAhbScm9W_8y_vDJQBw1DRdCVbXl-wwm5dyUiiStl_rXt0ATlstVzrUNC4fkgK_j7nmse7kxojRj1M3eo3jXKm2V8pQjWk97GcksMFFwg7BRAXmRSERexR210Amar5LYzlo9_k2AGUWPLyRhMJS4v5KtDSvNK0neL83ZjlHlSECYXyk%26sigh%3Dmpt2EOr86OAUNnPQ3b9Tr0wnDms%26begin%3D0%26len%3D429700%26docid%3D-914679554478687740&thumbnailUrl=http%3A%2F%2Fvideo.google.com%2FThumbnailServer%3Fcontentid%3De7e77162deb04c42%26second%3D5%26itag%3Dw320%26urlcreated%3D1144620753%26sigh%3DC3fqXPPS1tFiUqLzmkX3pdgYc2Y&playerId=-91467955447868774               400 326>>
YouTube Video
{{{<<player id=6 flash http://www.youtube.com/v/OdT9z-JjtJk 400 300>>}}}

<<player id=6 flash http://www.youtube.com/v/OdT9z-JjtJk 400 300>>
===
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''PlayerPlugin '' (tagged with <<tag systemConfig>>)
^^documentation and javascript for macro handling^^
<<<
!!!!!Revision History
<<<
''2006.02.26 [0.7.0]''
major re-write.  handles default params better.  create/recreate player objects via loadURL() API for use with interactive forms and scripts.
''2006.01.27 [0.6.0]''
added support for 'extra' macro params to pass through to object parameters
''2006.01.19 [0.5.0]''
Initial ALPHA release
''2005.12.23 [0.0.0]''
Started
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].

<<<
!!!!!Code
***/

// //  macro definition

//{{{
version.extensions.player = {major: 0, minor: 8, revision: 0, date: new Date(2006,3,7)};

config.macros.player = {};
config.macros.player.html = {};
config.macros.player.handler= function(place,macroName,params) {
	var id=null;
	if (params[0].substr(0,3)=="id=") id=params.shift().substr(3);
	var type="";
	if ((params[0]=="windows")||(params[0]=="realone")||(params[0]=="quicktime")||(params[0]=="flash")) type=params.shift();
	var url=params.shift(); if (!url || !url.trim().length) url="";
	var width=params.shift();
	var height=params.shift();
	var show=(params.shift()=='hidecontrols')?"0":"1"; 
	var extras=""; while (params[0]!=undefined) extras+="<param name='"+params.shift()+"' value='"+params.shift()+"'> ";
	this.loadURL(place,id,type,url,width,height,show,extras);
}

if (config.options.txtPlayerDefaultWidth==undefined) config.options.txtPlayerDefaultWidth="100%";
if (config.options.txtPlayerDefaultHeight==undefined) config.options.txtPlayerDefaultHeight="480"; // can't use "100%"... player height doesn't stretch right :-(

config.macros.player.loadURL=function(place,id,type,url,width,height,show,extras) {

	if (id==undefined) id="tiddlyPlayer";
	if (!width) var width=config.options.txtPlayerDefaultWidth;
	if (!height) var height=config.options.txtPlayerDefaultHeight;
	if (url && (!type || !type.length)) {
		if ((url.indexOf('mms')!=-1)||(url.indexOf('.asx')!=-1)||(url.indexOf('.wvx')!=-1)||(url.indexOf('.wmv')!=-1)||(url.indexOf('.mp3')!=-1))
			var type="windows";
		else if ((url.indexOf('rtsp')!=-1)||(url.indexOf('.ram')!=-1)||(url.indexOf('.rpm')!=-1)||(url.indexOf('.rm' )!=-1)||(url.indexOf('.ra' )!=-1))
			var type="realone";
		else if ((url.indexOf('.mov')!=-1)||(url.indexOf('.qt' )!=-1))
			var type="quicktime";
		else if ((url.indexOf('.swf')!=-1)||(url.indexOf('.flv')!=-1))
			var type="flash";
	}
	if (!type) var type="none";
	if (!url) var url="";
	if (show===undefined) var show=true;
	if (!extras) var extras="";
	if (type=="none" && url.trim().length) url="<br>unrecognized media type:<br>"+url;
	if (type=="realone") height-=show?60:0; // leave room for controls
	if (type=="windows") show=show?"1":"0"; // player-specific param value
	if (type=="realone") show=show?"block":"none";
	if (type=="quicktime") show=show?"true":"false";

	// create containing div for player HTML
	// and add or replace player in TW DOM structure
	var newplayer = document.createElement("div");
	newplayer.playerType=type;
	newplayer.setAttribute("id",id+"_div");
	var existing = document.getElementById(id+"_div");
	if (existing && !place) place=existing.parentNode;
	if (!existing)
		place.appendChild(newplayer);
	else {
		if (place==existing.parentNode) place.replaceChild(newplayer,existing)
		else { existing.parentNode.removeChild(existing); place.appendChild(newplayer); }
	}

	var html=config.macros.player.html[type];
	html=html.replace(/%i%/mg,id);
	html=html.replace(/%w%/mg,width);
	html=html.replace(/%h%/mg,height);
	html=html.replace(/%u%/mg,url);
	html=html.replace(/%s%/mg,show);
	html=html.replace(/%x%/mg,extras);
	newplayer.innerHTML=html;
}
//}}}

// // Player-specific API functions: isReady(id), isPlaying(id), toggleControls(id), showControls(id,flag)

//{{{
// status values:
// Windows: 0=Undefined, 1=Stopped, 2=Paused, 3=Playing, 4=ScanForward, 5=ScanReverse
//          6=Buffering, 7=Waiting, 8=MediaEnded, 9=Transitioning, 10=Ready, 11=Reconnecting
// RealOne: 0=Stopped, 1=Contacting, 2=Buffering, 3=Playing, 4=Paused, 5=Seeking
// QuickTime: 'Waiting', 'Loading', 'Playable', 'Complete', 'Error:###'
// Flash: 0=Loading, 1=Uninitialized, 2=Loaded, 3=Interactive, 4=Complete
config.macros.player.isReady=function(id)
{
	var d=document.getElementById(id+"_div"); if (!d) return false;
	var p=document.getElementById(id); if (!p) return false;
	if (d.playerType=='windows') return !((p.playState==0)||(p.playState==7)||(p.playState==9)||(p.playState==11));
	if (d.playerType=='realone') return (p.GetPlayState()>1);
	if (d.playerType=='quicktime') return !((p.getPluginStatus()=='Waiting')||(p.getPluginStatus()=='Loading'));
	if (d.playerType=='flash') return (p.ReadyState>2);
	return true;
}
config.macros.player.isPlaying=function(id)
{
	var d=document.getElementById(id+"_div"); if (!d) return false;
	var p=document.getElementById(id); if (!p) return false;
	if (d.playerType=='windows') return (p.playState==3);
	if (d.playerType=='realone') return (p.GetPlayState()==3);
	if (d.playerType=='quicktime') return (p.getPluginStatus()=='Complete');
	if (d.playerType=='flash') return (p.ReadyState<4);
	return false;
}
config.macros.player.showControls=function(id,flag) {
	var d=document.getElementById(id+"_div"); if (!d) return false;
	var p=document.getElementById(id); if (!p) return false;
	if (d.playerType=='windows') { p.ShowControls=flag; p.ShowStatusBar=flag; }
	if (d.playerType=='realone') { alert('show/hide controls not available'); }
	if (d.playerType=='quicktime')      // if player not ready, retry in one second
		{ if (this.isReady(id)) p.setControllerVisible(flag); else setTimeout('config.macros.player.showControls("'+id+'",'+flag+')',1000); }
	if (d.playerType=='flash') { alert('show/hide controls not available'); }
}
config.macros.player.toggleControls=function(id) {
	var d=document.getElementById(id+"_div"); if (!d) return false;
	var p=document.getElementById(id); if (!p) return false;
	if (d.playerType=='windows') var flag=!p.ShowControls;
	if (d.playerType=='realone') var flag=true; // TBD
	if (d.playerType=='quicktime') var flag=!p.getControllerVisible();
	if (d.playerType=='flash') var flag=true; // TBD
	this.showControls(id,flag);
}
config.macros.player.fullScreen=function(id) {
	var d=document.getElementById(id+"_div"); if (!d) return false;
	var p=document.getElementById(id); if (!p) return false;
	if (d.playerType=='windows') p.DisplaySize=3;
	if (d.playerType=='realone') p.SetFullScreen();
	if (d.playerType=='quicktime') { alert('full screen not available'); }
	if (d.playerType=='flash') { alert('full screen not available'); }
}
//}}}

// // Player HTML

//{{{
// placeholder (no player)
config.macros.player.html.none=' \
	<table id="%i%" width="%w%" height="%h%" style="background-color:#111;border:0;margin:0;padding:0;"> \
	<tr style="background-color:#111;border:0;margin:0;padding:0;"> \
	<td width="%w%" height="%h%" style="background-color:#111;color:#ccc;border:0;margin:0;padding:0;text-align:center;"> \
	&nbsp; \
	%u% \
	&nbsp; \
	</td></tr></table>';
//}}}

//{{{
// Windows Media Player
// v7.1 ID: classid=CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6
// v9	ID: classid=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95
config.macros.player.html.windows=' \
	<object id="%i%" width="%w%" height="%h%" style="margin:0;padding:0;" \
		classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" \
		codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" \
		align="baseline" border="0" \
		standby="Loading Microsoft Windows Media Player components..." \
		type="application/x-oleobject"> \
		<param name="FileName" value="%u%"> <param name="ShowControls" value="%s%"> \
		<param name="ShowPositionControls" value="1"> <param name="ShowAudioControls" value="1"> \
		<param name="ShowTracker" value="1"> <param name="ShowDisplay" value="0"> \
		<param name="ShowStatusBar" value="1"> <param name="AutoSize" value="1"> \
		<param name="ShowGotoBar" value="0"> <param name="ShowCaptioning" value="0"> \
		<param name="AutoStart" value="1"> <param name="AnimationAtStart" value="1"> \
		<param name="TransparentAtStart" value="0"> <param name="AllowScan" value="1"> \
		<param name="EnableContextMenu" value="1"> <param name="ClickToPlay" value="1"> \
		<param name="InvokeURLs" value="1"> <param name="DefaultFrame" value="datawindow"> \
		%x% \
		<embed src="%u%" style="margin:0;padding:0;" \
			align="baseline" border="0" width="%w%" height="%h%" \
			type="application/x-mplayer2" \
			pluginspage="http://www.microsoft.com/windows/windowsmedia/download/default.asp" \
			name="%i%" showcontrols="%s%" showpositioncontrols="1" \
			showaudiocontrols="1" showtracker="1" showdisplay="0" \
			showstatusbar="%s%" autosize="1" showgotobar="0" showcaptioning="0" \
			autostart="1" autorewind="0" animationatstart="1" transparentatstart="0" \
			allowscan="1" enablecontextmenu="1" clicktoplay="0" invokeurls="1" \
			defaultframe="datawindow"> \
		</embed> \
	</object>';
//}}}

//{{{
// RealNetworks' RealOne Player
config.macros.player.html.realone=' \
	<table width="%w%" style="border:0;margin:0;padding:0;"><tr style="border:0;margin:0;padding:0;"><td style="border:0;margin:0;padding:0;"> \
	<object id="%i%" width="%w%" height="%h%" style="margin:0;padding:0;" \
		CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"> \
		<PARAM NAME="CONSOLE" VALUE="player"> \
		<PARAM NAME="CONTROLS" VALUE="ImageWindow"> \
		<PARAM NAME="AUTOSTART" Value="true"> \
		<PARAM NAME="MAINTAINASPECT" Value="true"> \
		<PARAM NAME="NOLOGO" Value="true"> \
		<PARAM name="BACKGROUNDCOLOR" VALUE="#333333"> \
		<PARAM NAME="SRC" VALUE="%u%"> \
		%x% \
		<EMBED width="%w%" height="%h%" controls="ImageWindow" type="audio/x-pn-realaudio-plugin" style="margin:0;padding:0;" \
			name="%i%" \
			src="%u%" \
			console=player \
			maintainaspect=true \
			nologo=true \
			backgroundcolor=#333333 \
			autostart=true> \
		</OBJECT> \
	</td></tr><tr style="border:0;margin:0;padding:0;"><td style="border:0;margin:0;padding:0;"> \
	<object id="%i%_controls" width="%w%" height="60" style="margin:0;padding:0;display:%s%" \
		CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"> \
		<PARAM NAME="CONSOLE" VALUE="player"> \
		<PARAM NAME="CONTROLS" VALUE="All"> \
		<PARAM NAME="NOJAVA" Value="true"> \
		<PARAM NAME="MAINTAINASPECT" Value="true"> \
		<PARAM NAME="NOLOGO" Value="true"> \
		<PARAM name="BACKGROUNDCOLOR" VALUE="#333333"> \
		<PARAM NAME="SRC" VALUE="%u%"> \
		%x% \
		<EMBED WIDTH="%w%" HEIGHT="60" NOJAVA="true" type="audio/x-pn-realaudio-plugin" style="margin:0;padding:0;display:%s%" \
			controls="All" \
			name="%i%_controls" \
			src="%u%" \
			console=player \
			maintainaspect=true \
			nologo=true \
			backgroundcolor=#333333> \
		</OBJECT> \
	</td></tr></table>';
//}}}

//{{{
// QuickTime Player
config.macros.player.html.quicktime=' \
	<OBJECT ID="%i%" WIDTH="%w%" HEIGHT="%h%" style="margin:0;padding:0;" \
		CLASSID="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" \
		CODEBASE="http://www.apple.com/qtactivex/qtplugin.cab"> \
		<PARAM name="SRC" VALUE="%u%"> \
		<PARAM name="AUTOPLAY" VALUE="true"> \
		<PARAM name="CONTROLLER" VALUE="%s%"> \
		<PARAM name="BGCOLOR" VALUE="#333333"> \
		<PARAM name="SCALE" VALUE="aspect"> \
		<PARAM name="SAVEEMBEDTAGS" VALUE="true"> \
		%x% \
		<EMBED name="%i%" WIDTH="%w%" HEIGHT="%h%" style="margin:0;padding:0;" \
			SRC="%u%" \
			AUTOPLAY="true" \
			SCALE="aspect" \
			CONTROLLER="%s%" \
			BGCOLOR="#333333" \
			EnableJavaSript="true" \
			PLUGINSPAGE="http://www.apple.com/quicktime/download/"> \
		</EMBED> \
	</OBJECT>';
//}}}

//{{{
// Flash Player
config.macros.player.html.flash='\
	<object id="%i%" width="%w%" height="%h%" style="margin:0;padding:0;" \
		classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" \
		codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"> \
		<param name="movie" value="%u%"> \
		<param name="quality" value="high"> \
		<param name="SCALE" value="exactfit"> \
		<param name="bgcolor" value="333333"> \
		%x% \
		<embed name="%i%" src="%u%" style="margin:0;padding:0;" \
			height="%h%" width="%w%" quality="high" \
			pluginspage="http://www.macromedia.com/go/getflashplayer" \
			type="application/x-shockwave-flash" scale="exactfit"> \
		</embed> \
	</object>';
//}}}
/%
|Name|ShowPluginInfo|
|Source|http://twhelp.tiddlyspot.com/#PluginIdent|
|Version|1.0.0|
|Author|Morris Gray & Eric Shulman|
|License|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|generates a report of all installed plugins in a [[PluginIdent]] shadow tiddler|
%/<script label="PluginIdent" title="create a list of all installed plugins">
	var plugins=window.store.getTaggedTiddlers('systemConfig','title');
	var out='|>|>|>|>|>|bgcolor:#9ae;!Plugin Information from Headers|h\n';
out+='|bgcolor:#abf;!Plugin|bgcolor:#abf;!Modified|bgcolor:#abf;!Size|bgcolor:#abf;!Author|bgcolor:#abf;!Version|bgcolor:#abf;!CoreVersion|h\n|sortable|k\n';
	out+=plugins.map(function(t) {
		return '|'+'[['+t.title+']]'
		+'|'+t.modified.formatString('YYYY.0MM.0DD')
		+'| '+t.text.length
		+'|'+store.getTiddlerSlice(t.title,'Author')
		+'|'+store.getTiddlerSlice(t.title,'Version')
		+'|'+store.getTiddlerSlice(t.title,'CoreVersion')+'|';
	}).join('\n');
	config.shadowTiddlers.PluginIdent=out;
	story.displayTiddler(null,'PluginIdent');

</script>
<html><hide linebreaks>
<style> .rolodex table {border: 0px solid; background-color:#eeeff;}
.rolodex tr, .rolodex td {border: 0px solid;}
</style><span class="rolodex">
 <table>

<tr>
<td align="right"><b>Author:</b></td>
 <td colspan="3"><select name=author style="width:100%" />

<option>Alan Hecht
<option>Arphen Lin
<option>Anshul Nigham
<option>BidiX
<option>Bob Denny (Red Mt. Vista)
<option>Bob McElrath (Bob's)
<option>Bradley Meck (~PeachTW)
<option>Bram Chen (~PrinceTW)
<option>Bram Chen 

<option>ccTiddly
<option>"Chris" (Gimcrack'd)
<option>Clint Checketts
<option>Conal Elliott
<option>Daniel Baird
<option>Dawn Ahukanna
<option>Doug Compton
<option>Eric Shulman (~TiddlyTools)

<option>Fabrice
<option>Frank Dellaert
<option>FND
<option>George Brackett
<option>Greg Walker
<option>Ido Magal
<option>Jack Parke (Jack's)
<option>Jonathan Lister (jayfresh)
<option>Jeremy Harper

<option>Jeremy Ruston
<option>Jeremy Sheeley
<option>Joeraii
<option>Jon Scully
<option>Julian Knight
<option>Laurence Man
<option>Luke Blanshard
<option>Lyall Pearce
<option>Marc Castejon

<option>Martin Budden
<option>Mike Miller
<option>Morris Gray
<option>Ocat
<option>Pascal
<option>Paul Downey
<option>Paulo Soares
<option>Peter Jipsen
<option>Potto

<option>Riccardo Gherardi 
<option>Richard Hobbis
<option>RodneyGomes
<option>Rodrigo Fonseca
<option>Saq Imtiaz (Lewcid)
<option>Simon Baird (~MonkeyPirate)
<option>Soloport
<option>Speth
<option>Udo Borkowski (Abego)

<option>Steve Rumsby
<option>Unknown
<option>Vincent DiBartolo
<option>Walt Woods
<option>Yann Perrin
<option>Oriol Nieto , Alejandro Moreno, Dídac Calventus & Ludo (Marc Alier)
<option>? (VisualTW)
</select></td></tr>

<tr>
<td align="right"><b>Link:</b></td>
 <td colspan="3"><select name=link style="width:100%" />

<option>http://aiddlywiki.sourceforge.net/wikibar_demo_2.html
<option>http://bob.mcelrath.org/plugins.html#systemConfig
<option>http://bradleymeck.tiddlyspot.com
<option>http://cctiddly.sourceforge.net/
<option>http://conflation.org/#BlogUserPlugin
<option>http://dahukanna.net/wiki/tiddlywiki.htm
<option>http://danielbaird.com/tiddlywinks/
<option>http://devpad.tiddlyspot.com
<option>http://discerningtags.tiddlyspot.com/

<option>http://du180.n77.queensu.ca/TW/ToC.html
<option>http://end.com/~speth/HaloscanMacro.html
<option>http://fnd.lewcid.org/tmp/ToDoTogglePlugin.html#Tasks%20ToDoTogglePlugin
<option>http://fire.atspace.org/
<option>http://genisis329.googlepages.com/TWMath.html
<option>http://gimcrackd.com/etc/src/#%5B%5BWhat's%20this%3F%5D%5D
<option>http://gwsyzygy.googlepages.com/creator.html
<option>http://ido-xp.tiddlyspot.com/
<option>http://jackparke.googlepages.com/jtw.html

<option>http://jnthnlstr.googlepages.com/RelatedTagsPlugin.html 
<option>http://jnthnlstr.googlepages.com/BackstageSidebarPlugin.html 
<option>http://journal.conal.net/#%5B%5Bsite%20map%5D%5D
<option>http://knighjm.googlepages.com/knightnet-default-tw.html#PlugIn-Knightnet
<option>http://labwiki.sourceforge.net/
<option>http://lewcid.googlepages.com/presentation_empty_full.html#Documentation
<option>http://lewcid.org/tiddlywiki-bookmarklets/
<option>http://luceatlux.net/macros/answer
<option>http://math.chapman.edu/~jipsen/asciencepad/asciencepad.html

<option>http://moodle.tiddlyspot.com/
<option>http://mptw.tiddlyspot.com/#systemConfig%20%5B%5BMore%20Plugins%5D%5D
<option>http://mptw2.tiddlyspot.com/#Plugins
<option>http://oldcat.googlegroups.com/web/AccordionEffect.html
<option>http://oldcat.googlegroups.com/web/MenuMoreEn.html
<option>http://oldcat.googlegroups.com/web/Simple2.html
<option>http://oregonstate.edu/~woodswa/tiddlywikiplugs.html
<option>http://paularodrigo.homeip.net/stickydate.html#StickyDatePlugin
<option>http://project.dahukanna.net/tiddlywiki/timeline/sampletimeline220b5.html

<option>http://ptw.sourceforge.net/ptwe.html#Plugins
<option>http://sourceforge.net/project/showfiles.php?group_id=150646&package_id=169974
<option>http://remindermacros.tiddlyspot.com/
<option>http://remotely-helpful.com/TiddlyWiki/ImprovedSlicesPlugin.html#ImprovedSlicesPlugin
<option>http://remotely-helpful.com/TiddlyWiki/LaunchApplication.html#LaunchApplicationPlugin
<option>http://remotely-helpful.com/TiddlyWiki/TiddlerEncryptionPlugin.html#TiddlerEncryptionPlugin
<option>http://rgplugins.tiddlyspot.com/#%5B%5BhideIfshowIf%20plugin%5D%5D
<option>http://solo.dc3.com/tw/#%5B%5BMy%20Plugins%5D%5D

<option>http://soloport.tiddlyspot.com/#ExcludeTimelinePlugin
<option>http://syncoutlooknotes.tiddlyspot.com/#SyncOutlookNotes
<option>http://tiddlysnip.com/#About
<option>http://tiddlystyles.com
<option>http://tiddlythemes.com/#Home
<option>http://www.tiddlywiki.com/coreplugins.html
<option>http://tiddlywiki.abego-software.de/#Plugins
<option>http://tiddlywiki.bidix.info/#%5B%5BExtension%20directory%5D%5D
<option>http://tiddlywiki.ouvaton.org/Demo.html#RichTextPlugin

<option>http://tw.lewcid.org/#%5B%5BExtensions%20Overview%5D%5D
<option>http://twmath.tiddlyspot.com/
<option>http://umibozu.org/en/index.html#Features
<option>http://visualtw.ouvaton.org/VisualTW.html
<option>http://visualtw.ouvaton.org/VisualTW.html#TagsTreePlugin
<option>http://whatfettle.com/2008/07/FixedDisplayPlugin
<option>http://weave.tiddlyspot.com
<option>http://www.anshul.info/blogwiki.html
<option>http://www.blogjones.com/TiddlyWikiTutorial.html#smiley

<option>http://www.cs.utexas.edu/~joeraii/pytw/
<option>http://www.cs.utexas.edu/~joeraii/siglet/
<option>http://www.martinswiki.com
<option>http://www.martinswiki.com/timeline/
<option>http://www.math.ist.utl.pt/~psoares/addons.html#Plugins
<option>http://www.minitiddlyserver.com/
<option>http://www.minormania.com/tiddlylock/tiddlylock.html#TiddlyLockPlugin
<option>http://www.personal.psu.edu/ach12/tiddlywiki/extensions.htm
<option>http://www.potto.client.jp/htmlslidymaker/index.html

<option>http://www.superphysique.net/#%5B%5BSEO%20TiddlyWiki%20Plugin%5D%5D
<option>http://www.tiddlytools.com
<option>http://www.tiddly-twab.com
<option>http://www.zagware.com/tw/plugins.html#DcTableOfContentsPlugin
<option>http://www-static.cc.gatech.edu/~dellaert/dhtml/tiddly.html
<option>http://yann.perrin.googlepages.com/twkd.html
</select></td></tr>
</html>
/%
|Name|PluginIdentifierScript|
|Source|http://twhwelp.tiddlyspot.com#PluginIdentifierScript|
|Version|1.0.0|
|Author|Morris Gray credits :Eric Shulman|
|License|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|List plugin header information|
%/<script label="PluginIdent" title="create a list of all installed plugins">
	var plugins=window.store.getTaggedTiddlers('systemConfig','title');
	var out='|>|>|>|>|>|bgcolor:#abf;color:#006;Delete this tiddler - recommended\<\<toolbar deleteTiddler>>? |h\n';
out+='|bgcolor:#abf;!Plugin|bgcolor:#abf;!Modified|bgcolor:#abf;!Size|bgcolor:#abf;!Author|bgcolor:#abf;!Version|bgcolor:#abf;!CoreVersion|h\n|sortable|k\n';
	out+=plugins.map(function(t) {
		return '|'+'[['+t.title+']]'
		+'|'+t.modified.formatString('YYYY.0MM.0DD')
		+'| '+t.text.length
		+'|'+store.getTiddlerSlice(t.title,'Author')
		+'|'+store.getTiddlerSlice(t.title,'Version')
		+'|'+store.getTiddlerSlice(t.title,'CoreVersion')+'|';
	}).join('\n');
	config.shadowTiddlers.PluginIdent=out;
	story.displayTiddler(null,'PluginIdent');
        config.shadowTiddlers.PluginIdent=null; // « To keep shadow tiddler remove this line

</script>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[PluginHeaderSlices]]^^<<tiddler CloseThisOpen with: FormattingTiddlers '« back'>>|<<toolbar editTiddler>>» ^^>>

''This script finds all active plugins and lists the  size, author and version.''  It creates a shadow tiddler for display.  This shadow tiddler should be deleted for repeated use of the script.

Try it here <script label="PluginIdent" title="create a list of all installed plugins">

	var plugins=window.store.getTaggedTiddlers('systemConfig','title');
	var out='|>|>|>|>|>|bgcolor:#abf;color:#006;Delete this tiddler - recommended\<\<toolbar deleteTiddler>>? |h\n';
out+='|bgcolor:#abf;!Plugin|bgcolor:#abf;!Modified|bgcolor:#abf;!Size|bgcolor:#abf;!Author|bgcolor:#abf;!Version|bgcolor:#abf;!CoreVersion|h\n|sortable|k\n';
	out+=plugins.map(function(t) {
		return '|'+'[['+t.title+']]'
		+'|'+t.modified.formatString('YYYY.0MM.0DD')
		+'| '+t.text.length
		+'|'+store.getTiddlerSlice(t.title,'Author')
		+'|'+store.getTiddlerSlice(t.title,'Version')
		+'|'+store.getTiddlerSlice(t.title,'CoreVersion')+'|';
	}).join('\n');
	config.shadowTiddlers.PluginIdent=out;
	story.displayTiddler(null,'PluginIdent');
</script>
!!!!Code
{{{
<script label="PluginIdent" title="create a list of all installed plugins">

	var plugins=window.store.getTaggedTiddlers('systemConfig','title');
	var out='|>|>|>|>|>|bgcolor:#abf;color:#006;Delete this tiddler - recommended\<\<toolbar deleteTiddler>>? |h\n';
out+='|bgcolor:#abf;!Plugin|bgcolor:#abf;!Modified|bgcolor:#abf;!Size|bgcolor:#abf;!Author|bgcolor:#abf;!Version|bgcolor:#abf;!CoreVersion|h\n|sortable|k\n';
	out+=plugins.map(function(t) {
		return '|'+'[['+t.title+']]'
		+'|'+t.modified.formatString('YYYY.0MM.0DD')
		+'| '+t.text.length
		+'|'+store.getTiddlerSlice(t.title,'Author')
		+'|'+store.getTiddlerSlice(t.title,'Version')
		+'|'+store.getTiddlerSlice(t.title,'CoreVersion')+'|';
	}).join('\n');
	config.shadowTiddlers.PluginIdent=out;
	story.displayTiddler(null,'PluginIdent');
</script>
}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[PluginIdentScript]]^^<<tiddler CloseThisOpen with: 
ThirdPartyPlugins  '« back'>>|<<toolbar editTiddler>>» ^^>>

''This script reads the headers of plugins and returns the author,size and versions.'' It can also be used as a bookmarklet.

Try it here<script label="PluginIdent" title="create a list of all installed plugins">
	var plugins=window.store.getTaggedTiddlers('systemConfig','title');
	var out='|>|>|>|>|>|bgcolor:#abf;color:#006;Delete this tiddler - recommended\<\<toolbar deleteTiddler>>? |h\n';
out+='|bgcolor:#abf;!Plugin|bgcolor:#abf;!Modified|bgcolor:#abf;!Size|bgcolor:#abf;!Author|bgcolor:#abf;!Version|bgcolor:#abf;!CoreVersion|h\n|sortable|k\n';
	out+=plugins.map(function(t) {
		return '|'+'[['+t.title+']]'
		+'|'+t.modified.formatString('YYYY.0MM.0DD')
		+'| '+t.text.length
		+'|'+store.getTiddlerSlice(t.title,'Author')
		+'|'+store.getTiddlerSlice(t.title,'Version')
		+'|'+store.getTiddlerSlice(t.title,'CoreVersion')+'|';
	}).join('\n');
	config.shadowTiddlers.PluginIdent=out;
	story.displayTiddler(null,'PluginIdent');

</script>
{{{
<script label="PluginIdent" title="create a list of all installed plugins">
	var plugins=window.store.getTaggedTiddlers('systemConfig','title');
	var out='|>|>|>|>|>|bgcolor:#abf;color:#006;Delete this tiddler - recommended\<\<toolbar deleteTiddler>>? |h\n';
out+='|bgcolor:#abf;!Plugin|bgcolor:#abf;!Modified|bgcolor:#abf;!Size|bgcolor:#abf;!Author|bgcolor:#abf;!Version|bgcolor:#abf;!CoreVersion|h\n|sortable|k\n';
	out+=plugins.map(function(t) {
		return '|'+'[['+t.title+']]'
		+'|'+t.modified.formatString('YYYY.0MM.0DD')
		+'| '+t.text.length
		+'|'+store.getTiddlerSlice(t.title,'Author')
		+'|'+store.getTiddlerSlice(t.title,'Version')
		+'|'+store.getTiddlerSlice(t.title,'CoreVersion')+'|';
	}).join('\n');
	config.shadowTiddlers.PluginIdent=out;
	story.displayTiddler(null,'PluginIdent');

</script>
}}}
<<forEachTiddler
     where 'tiddler.tags.contains("systemConfig")'
     sortBy 'tiddler.title.toLowerCase()'
     write '"|[[" + tiddler.title +"]]" + "| [[" +tiddler.text.length+"]]" + "|[[" +tiddler.modified.formatString("YYYY.0MM.0DD") + "]]|"

         + store.getTiddlerSlice(tiddler.title, "Author") + "|"
         + store.getTiddlerSlice(tiddler.title, "Version") + "|"
         + store.getTiddlerSlice(tiddler.title, "CoreVersion")+"|\n"'
     begin '"|sortable|k\n"

         + "|!Plugin|!Size|!Modified|!Author|!Version|!CoreVersion|h\n"'
 >> 
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[PluginIdentifierScript]]^^<<tiddler CloseThisOpen with: ListTiddlersBy  '« back'>>|<<toolbar editTiddler>>» ^^>>

''Lists all plugins along with information such as date,author and version.''
*+++[See it work here]<<fullscreen>>
<<tiddler PluginIdentifier>>
===

''With Author''
{{{
<<forEachTiddler
     where 'tiddler.tags.contains("systemConfig")'
     sortBy 'tiddler.title.toLowerCase()'
     write '"|[[" + tiddler.title +"]]" + "|[["+tiddler.text.length+"]]" + "|[[" +tiddler.modified.formatString("YYYY.0MM.0DD") + "]]|"

         + store.getTiddlerSlice(tiddler.title, "Author") + "|"
         + store.getTiddlerSlice(tiddler.title, "Version") + "|"
         + store.getTiddlerSlice(tiddler.title, "CoreVersion")+"|\n"'
     begin '"|sortable|k\n"

         +"|>|>|>|>|>|!Plugin Information from Headers|h\n"
         + "|!Plugin|!Size|!Modified|!Author|!Version|!CoreVersion|h\n"'
 >>
}}}

''With description''
{{{
<<forEachTiddler
     where 'tiddler.tags.contains("systemConfig")'
     sortBy 'tiddler.title.toLowerCase()'
     write '"|[[" + tiddler.title +"]]" + "|[["+tiddler.text.length+"]]" + "|[[" +tiddler.modified.formatString("YYYY.0MM.0DD") + "]]|"

         + store.getTiddlerSlice(tiddler.title, "Description") + "|"
         + store.getTiddlerSlice(tiddler.title, "Version") + "|"
         + store.getTiddlerSlice(tiddler.title, "CoreVersion")+"|\n"'
     begin '"|sortable|k\n"

         +"|>|>|>|>|>|!Plugin Information from Headers|h\n"
         + "|!Plugin|!Size|!Modified|!Description|!Version|!CoreVersion|h\n"'
 >>
}}}
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[Intro|PluginIntro]]^^<<tiddler CloseThisOpen with: ThirdPartyPlugins  '« back'>>|<<toolbar editTiddler>>» ^^>>
|bgcolor:#fcf;@@font-size:10pt;You can find a list of all known plugins here http://sidebarpluginvault.tiddlyspot.com@@|
----
*+++[How to report suspected faults in plugins]
<<<
''1)'' When you encounter a macro error:
Click on the error to see the reported problem.

''2)'' Based on the error text, review the plugin's revision history to see
if any *documented* change seems to relate to the problem.  
Be sure the plugin you are using is the latest version or is appropriate
for the version of ~TiddlyWiki you are using

''3)'' Give precise step-by-step instructions for reproducing the error
''and'' if possible give a link to the ~TiddlyWiki with the problem.

''4)'' Report the above on http://groups.google.com/group/TiddlyWiki
<<<
===

----
''Above are a few tabbed lists of plugins lifted from some important developers.'' They may or may not all be authored by the listed developer.  They contain the name and size of their plugins and macros.

 @@color:#C06;''Note:''@@ Tiddlers listed in bold on these lists are installed in this ~TiddlyWiki.

''Plugins are one of ~TiddlyWiki's strengths.''   By installing Plugins you can implement new features, functions and capabilities to your ~TiddlyWiki.  Here you will find a number of collections of plugins from independent developers.

''Note:''  This is not a comprehensive list of plugins by any means but it will give you an idea of what is available.  Go to the relevant web sites for the correct listing and up to date plugins. Also keep a close eye on the ~TiddlyWiki discussion group here @@color:#C06;''&raquo; &raquo;'' @@ http://groups.google.com/group/TiddlyWiki/

*The community is also using the [[del.icio.us|http://del.icio.us/]] bookmarking service to create a [[PluginDirectory|http://del.icio.us/TiddlyWikiPlugin]]
!!!<<gradient horiz #abf #ffffff>>&nbsp;End>>
http://aiddlywiki.sourceforge.net/wikibar_demo_2.html
http://bob.mcelrath.org/plugins.html#systemConfig
http://bradleymeck.tiddlyspot.com
http://cctiddly.sourceforge.net/
http://conflation.org/#BlogUserPlugin
http://dahukanna.net/wiki/tiddlywiki.htm
http://danielbaird.com/tiddlywinks/
http://devpad.tiddlyspot.com
http://discerningtags.tiddlyspot.com/
http://du180.n77.queensu.ca/TW/ToC.html
http://end.com/~speth/HaloscanMacro.html
http://fnd.lewcid.org/tmp/ToDoTogglePlugin.html#Tasks%20ToDoTogglePlugin
http://fire.atspace.org/
http://genisis329.googlepages.com/TWMath.html
http://gimcrackd.com/etc/src/#%5B%5BWhat's%20this%3F%5D%5D
http://gwsyzygy.googlepages.com/creator.html
http://ido-xp.tiddlyspot.com/
http://jackparke.googlepages.com/jtw.html
http://jnthnlstr.googlepages.com/RelatedTagsPlugin.html 
http://jnthnlstr.googlepages.com/BackstageSidebarPlugin.html 
http://journal.conal.net/#%5B%5Bsite%20map%5D%5D
http://knighjm.googlepages.com/knightnet-default-tw.html#PlugIn-Knightnet
http://labwiki.sourceforge.net/
http://lewcid.googlepages.com/presentation_empty_full.html#Documentation
http://lewcid.org/tiddlywiki-bookmarklets/
http://luceatlux.net/macros/answer
http://math.chapman.edu/~jipsen/asciencepad/asciencepad.html
http://moodle.tiddlyspot.com/
http://mptw.tiddlyspot.com/#systemConfig%20%5B%5BMore%20Plugins%5D%5D
http://mptw2.tiddlyspot.com/#Plugins
http://oldcat.googlegroups.com/web/AccordionEffect.html
http://oldcat.googlegroups.com/web/MenuMoreEn.html
http://oldcat.googlegroups.com/web/Simple2.html
http://oregonstate.edu/~woodswa/tiddlywikiplugs.html
http://paularodrigo.homeip.net/stickydate.html#StickyDatePlugin
http://project.dahukanna.net/tiddlywiki/timeline/sampletimeline220b5.html
http://ptw.sourceforge.net/ptwe.html#Plugins
http://sourceforge.net/project/showfiles.php?group_id=150646&package_id=169974
http://remindermacros.tiddlyspot.com/
http://remotely-helpful.com/TiddlyWiki/ImprovedSlicesPlugin.html#ImprovedSlicesPlugin
http://remotely-helpful.com/TiddlyWiki/LaunchApplication.html#LaunchApplicationPlugin
http://remotely-helpful.com/TiddlyWiki/TiddlerEncryptionPlugin.html#TiddlerEncryptionPlugin
http://rgplugins.tiddlyspot.com/#%5B%5BhideIfshowIf%20plugin%5D%5D
http://solo.dc3.com/tw/#%5B%5BMy%20Plugins%5D%5D
http://soloport.tiddlyspot.com/#ExcludeTimelinePlugin
http://syncoutlooknotes.tiddlyspot.com/#SyncOutlookNotes
http://tiddlysnip.com/#About
http://tiddlystyles.com
http://tiddlythemes.com/#Home
http://www.tiddlywiki.com/coreplugins.html
http://tiddlywiki.abego-software.de/#Plugins
http://tiddlywiki.bidix.info/#%5B%5BExtension%20directory%5D%5D
http://tiddlywiki.ouvaton.org/Demo.html#RichTextPlugin
http://tw.lewcid.org/#%5B%5BExtensions%20Overview%5D%5D
http://twmath.tiddlyspot.com/
http://umibozu.org/en/index.html#Features
http://visualtw.ouvaton.org/VisualTW.html
http://visualtw.ouvaton.org/VisualTW.html#TagsTreePlugin
http://whatfettle.com/2008/07/FixedDisplayPlugin
http://weave.tiddlyspot.com
http://www.anshul.info/blogwiki.html
http://www.blogjones.com/TiddlyWikiTutorial.html#smiley
http://www.cs.utexas.edu/~joeraii/pytw/
http://www.cs.utexas.edu/~joeraii/siglet/
http://www.martinswiki.com
http://www.martinswiki.com/timeline/
http://www.math.ist.utl.pt/~psoares/addons.html#Plugins
http://www.minitiddlyserver.com/
http://www.minormania.com/tiddlylock/tiddlylock.html#TiddlyLockPlugin
http://www.personal.psu.edu/ach12/tiddlywiki/extensions.htm
http://www.potto.client.jp/htmlslidymaker/index.html
http://www.superphysique.net/#%5B%5BSEO%20TiddlyWiki%20Plugin%5D%5D
http://www.tiddlytools.com
http://www.tiddly-twab.com
http://www.zagware.com/tw/plugins.html#DcTableOfContentsPlugin
http://www-static.cc.gatech.edu/~dellaert/dhtml/tiddly.html
http://yann.perrin.googlepages.com/twkd.html
<<plugins>>
{{textleft{
!!!<<gradient horiz #fc3 #fff>>&nbsp;PluginServers^^<<tiddler CloseThisOpen with: ThirdPartyPlugins  '« back'>>|<<toolbar editTiddler>>» ^^>>

There is a proxy method that overcomes the built in security that normally prevents cross domain importing of tiddlers. @@color:#C06;''&raquo; &raquo;'' @@ [[BidiXTW's ProxyService|http://tiddlywiki.bidix.info/#ProxyService]] and @@color:#C06;''&raquo; &raquo;'' @@[[Proxy service available for Tiddlyspot sites|http://tinyurl.com/29x8wk]]
}}}
{{textcenter{
<html><span style="padding-left:2em;align:center;"><input type='button' title="these are contributors who have deposits at tiddlywiki.org svn" style='cursor:pointer;' value='SVN Contributors' onclick='window.open("http://svn.tiddlywiki.org/Trunk/contributors/","_blank")'></span></html><html><span style="padding-left:2em;"><span style="cursor:pointer;"><input type='button' title="Links at tiddlywiki.org" style='cursor:pointer;' value='Other Repositories' onclick='window.open("http://www.tiddlywiki.org/wiki/Plugin_Repositories","_blank")'></span></html><html><span style="padding-left:2em;"><span style="cursor:pointer;"><input type='button' title="Popular Plugin Sites" style='cursor:pointer;' value='Popular Plugin Sites' onclick='window.open("http://www.tiddlywiki.org/wiki/Popular_Plugin_Sites","_blank")'></span></html><html><span style="padding-left:2em;"><span style="cursor:pointer;"><input type='button' title="TiddlyWiki Core Archive" style='cursor:pointer;' value='TiddlyWiki Core Archive' onclick='window.open("http://web.archive.org/web/*/http://www.tiddlywiki.com/empty.html","_blank")'></span></html>

*@@bgcolor:#fcf;color:#C06;Former core functions moved to plugins@@  @@color:#C06;''&raquo; &raquo;'' @@ [[TiddlyWiki Core Plugins|http://www.tiddlywiki.com/coreplugins.html]]
{{tablecenter{
|bgcolor:#abf; Description |bgcolor:#abf; URL |
|bgcolor:#fcf;@@color:#C06;''&raquo; &raquo;'' @@ ''Sidebar Plugin Vault List''|bgcolor:#fcf;http://sidebarpluginvault.tiddlyspot.com|
|bgcolor:#fcf;''Core Plugins'' (previously in the core)|bgcolor:#fcf;http://www.tiddlywiki.com/coreplugins.html|
|~AbegoExtensions|http://tiddlywiki.abego-software.de/|
|~BidiXTWServer|http://tiddlywiki.bidix.info/|
|~BobsPluginsServer|http://bob.mcelrath.org/plugins.html|
|Gimcrack'dServer|http://gimcrackd.com/etc/src/|
|~GoogleGroups|http://groups.google.com/group/TiddlyWiki/topics|
|~JacksTiddlyWikiServer|http://jackparke.googlepages.com/jtw.html|
|~LewcidTWServer|http://tw.lewcid.org/|
|Lyall Pearce|http://remotely-helpful.com/TiddlyWiki/|
|~MartinsPluginsServer|http://www.martinswiki.com/|
|~MonkeyPirateTWServer|http://mptw.tiddlyspot.com/|
|~PeachTWServer	|http://bradleymeck.tiddlyspot.com/|
|Paul Soares|http://www.math.ist.utl.pt/~psoares/addons.html#Plugins|
|~PrinceTiddlyWikiExtensionsServer|http://ptw.sourceforge.net/ptwe.html#Plugins|
|~RedMountainVistaServer|http://solo.dc3.com/tw/|
|~TiddlySpot|http://www.TiddlySpot.com|
|~TiddlyStylesServer|http://tiddlystyles.com/|
|~TiddlyToolsServer [[Links|LinksToTiddlyToolsPlugins]]|http://www.tiddlytools.com/|
|~TiddlyVault Plugin List|http://tiddlyvault.tiddlyspot.com/|
|~TiddlyWikiServer|http://www.TiddlyWiki.com/|
|~VisualTW|http://visualtw.ouvaton.org/VisualTW.html|
|~TinyTiddly|http://tinytiddly.tiddlywiki.org/|
|~TinyTiddly2.4.1|http://tinytiddly.tiddlyspot.com/|
}}}
!!!''PluginSites'' ^^[[Root|ThirdPartyPlugins]]@@color:#C06;&raquo;@@[[Detach this|PluginSites]]^^
----
<<<
*The community is also using the [[del.icio.us|http://del.icio.us/]] bookmarking service to create a [[PluginDirectory|http://del.icio.us/TiddlyWikiPlugin]]
<<tiddler ThirdPartyPlugins/Links>>
<<<
!!!!This is a ~FireFox extention for snipping Internet text to add to your ~TiddlyWiki

<<<
*[[TiddlySnip FireFox Extension|http://tiddlysnip.com]]@@color:#C06;''&raquo; &raquo;'' @@+++[Read more..]
TiddlySnip is a Firefox extension that lets you use your TiddlyWiki as a scrapbook! Simply select text, right click and choose 'TiddlySnip selection'. Next time you open your TiddlyWiki file, your snippets will be there, already tagged and organised.
===

<<<
<<tiddler ThirdPartyPlugins>>



/***
|''Name:''|~PopupMacro|
|''Version:''|1.0.0 (2006-05-09)|
|''Source:''|http://lewcid.googlepages.com/lewcid.html#PopupMacro|
|''Author:''|Saq Imtiaz|
|''Description:''|Create popups with custom content|
|''Documentation:''|[[PopupMacro Documentation|PopupMacroDocs]]|
|''~Requires:''|TW Version 2.0.8 or better|
***/
// /%
{{{
config.macros.popup = {};
config.macros.popup.arrow = (document.all?"▼":"▾");
config.macros.popup.handler = function(place,macroName,params,wikifier,paramString,theTiddler) {

        if (!params[0] || !params[1]) 
             {createTiddlyError(place,'missing macro parameters','missing label or content parameter');
              return false;};
   
        var label = params[0];
        var source = (params[1]).replace(/\$\)\)/g,">>"); 
        var nestedId = params[2]? params[2]: 'nestedpopup';        

	var onclick = function(event) {
	        if(!event){var event = window.event;}
                var theTarget = resolveTarget(event);
                var nested = (!isNested(theTarget));
               
                if ((Popup.stack.length > 1)&&(nested==true)) {Popup.removeFrom(1);}
                else if(Popup.stack.length > 0 && nested==false) {Popup.removeFrom(0);};
                
                var theId = (nested==false)? "popup" : nestedId; 
	        var popup = createTiddlyElement(document.body,"ol",theId,"popup",null);
	        Popup.stack.push({root: button, popup: popup});

                wikify(source,popup);
		Popup.show(popup,true);
	        event.cancelBubble = true;
		if (event.stopPropagation) event.stopPropagation();
		return false;
	}
	var button = createTiddlyButton(place, label+this.arrow,label, onclick, null);
};

window.isNested = function(e) {
        while (e != null) {
                var contentWrapper = document.getElementById("contentWrapper");
                if (contentWrapper == e) return true;
                e = e.parentNode;
                }
        return false;
};

setStylesheet(

".popup, .popup a, .popup a:visited {color: #fff;}\n"+
".popup  a:hover {background: #014; color: #fff; border: none;}\n"+
".popup li , .popup ul, .popup ol {list-style:none !important; margin-left:0.3em !important; margin-right:0.3em; font-size:100%; padding-top:0.5px !important; padding:0px !important;}\n"+
"#nestedpopup {background:#2E5ADF; border: 1px solid #0331BF; margin-left:1em; }\n"+
"",
"CustomPopupStyles");

config.shadowTiddlers.PopupMacroDocs="The documentation is available [[here.|http://lewcid.googlepages.com/lewcid.html#PopupMacroDocs]]";
}}}
//%/
!!!<<gradient horiz #aaa #fff>>&nbsp;[[PopupMacroDocs]]^^<<tiddler CloseThisOpen with: 'Macros Other'  '« back'>>|<<toolbar editTiddler>>» ^^>>

Using the popup macro you can create popups with any wiki text. The wiki text can be written in the macro call, can be generated using a different macro, or included from a tiddler.

!!!<<gradient horiz #aaa #fff>>&nbsp;Usage:>>
*the button label is the first parameter
*the text to put in the popup is the second parameter
**embed macro output like forEachTiddler or tiddlerList
***start macro calls with {{{<<}}} like normal, but end with {{{$))}}}
**define popup content inline, or embed from a tidder using the core tiddler macro {{{<<tiddler$))}}}
*you can nest popups up to one level
**nested popups have an id of 'nestedpopup' for easier styling.
**specify unique id's for nested popups by passing the id as a third parameter.

----
!!!<<gradient horiz #aaa #fff>>&nbsp;Example's>>

''Put a forEachTiddler macro generated list in a popup:''
{{{<<popup forEachTiddlerDemo [[<<forEachTiddler where 'tiddler.tags.contains("systemConfig")']]$))}}}
<<popup forEachTiddlerDemo [[<<forEachTiddler
where
'tiddler.tags.contains("systemConfig")'$))]]>>

''Use the core {{{<<tiddler>>}}} macro to put the contents of a tiddler into a popup:''
MainMenu popup:
{{{<<popup MainMenu [[<<tiddler MainMenu$))]]>>}}}
<<popup MainMenu [[<<tiddler MainMenu$))]]>>

''Or create a custom menu in a tiddler using various macro's and normal tiddlylinks.''
{{{<<popup CustomMenu '<<tiddler CustomMenu$))'>>}}}
<<popup CustomMenu '<<tiddler CustomMenu$))'>>

this menu was created with a combination of forEachTiddler and normal tiddlyLinks!
Note that the 'Plugins' button opens a second nested popup.
Source tiddler: CustomMenu

''Or define your custom menu inline.''
{{{<<popup 'Inline Custom Menu' [[Custom Menu
*MainMenu
----
<<forEachTiddler
 where
 'tiddler.tags.contains("systemConfig")']]$))]] 
>>}}}
<<popup 'Inline Custom Menu' [[Custom Menu
*MainMenu
----
<<forEachTiddler where 'tiddler.tags.contains("systemConfig")'$))]] 
>>

''Note: you can pass a third parameter and it will be set as the id of any nested popups''
By default, nested popups have an id of 'nestedpopup' to facilitate styling.

----
!!!<<gradient horiz #aaa #fff>>&nbsp;Current Issues:>>
*better support for custom classes for popups and nestedpopups
----
!!!<<gradient horiz #aaa #fff>>&nbsp;Code>>

PopupMacro

''Table heading links to w3schools references on this subject.''
|>|>|>|>| ![[Positioning Properties|http://www.w3schools.com/css/pr_class_position.asp]] |
| ''Property'' | ''Valid Values'' | ''Example'' | ''Applies Too'' | ''Inherited?'' |
| clip |//shape//, auto | clip:rect(0px 200px 200px 0px) | all element | N |
| height |//length//, auto | height:200px | DIV, SPAN and replaced element | N |
| left |//length//, //percentage//, auto | left:0px | absolutely and relatively positioned element | N |
| overflow |visible, hidden, scroll, auto | overflow:scroll | all element | N |
| position |absolute, relative, static | position:absolute | all element | N |
| top |//length//, //percentage//, auto | top:0px | absolutely and relatively positioned element | N |
| visibility |visible, hidden, inherit | visibility:visible | all element | N |
| width |//length//, //percentage//, auto | width:80%| DIV, SPAN and replaced element | N |
| z-index |auto, //integer// | z-index:-1| absolutely and relatively positioned element | N |
<script>
var tiddlers=store.getTiddlers("title");
for (var t=0; t<tiddlers.length; t++) {
   var url="http://twhelp.tiddlyspot.com/";
   if (!url) url=document.location.href;
   var permalink=encodeURIComponent(String.encodeTiddlyLink(tiddlers[t].title));
    out+="[["+tiddlers[t].title+"|"+url+"#"+permalink+"]]\n";
}

return out;

</script>
!!!<<gradient horiz #fc3 #fff>>&nbsp;PrettyLinks^^<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>
*PrettyLinks are enclosed in square brackets and contain the desired text to show and the tiddler name separated by a pipe character (|): {{{[[any text |tiddler name]]}}}
* optionally the target can also be any web site {{{[[TW Math|http://twmath.tiddlyspot.com/]]}}}
Example: [[TW Math|http://twmath.tiddlyspot.com/]]
<<<
Alternatively if you have not ticked 'Open external links in a new window' in AdvancedOptions and you wish to force the Prettylink to open in a new window then add this bit of script.
{{{
[[TW Math|http://twmath.tiddlyspot.com/]]<script>place.lastChild.target="_blank"</script> 

}}}
<<<
Note: This is handy if your ~TiddlyWiki is in the Firefox sidebar such as http://sidebarpluginvault.tiddlyspot.com/ or http://sidesnips.tiddlyspot.com/

Also see TargetingLinks.

''~PrettyLinks tips and tricks''
{{{
[[F|Fmax test]]~~[[max|Fmax test]]~~ [[test|Fmax test]] 

[[TextMenu]]<<tiddler {{
        place.lastChild.innerHTML="F<sub>max</sub> test";
"";}}>> 

[[TextMenu]]<<tiddler {{
        place.lastChild.innerHTML='<img src=read_on_read.jpg>';
'';}}>> 

}}}


!!!!!<<gradient horiz #abf #fff>>&nbsp;@@color:#fff;End@@>>
!!!<<gradient horiz #fc3 #fff>>&nbsp;PrettyPermalinks^^<<tiddler CloseThisOpen with: Scripts  '«« back'>>|<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>
Clicking on the links below will take you to the ''online version'' of each tiddler.  Or you could right-click on each link and "Copy link location" and paste it somewhere like an email. (Script courtesy of Eric Shulman)
----
*@@position:relative;+++^35em^[See the code here]

<<<
{{{
{{fourcolumns{
<script>
var out=""
var tids=store.getTiddlers("title");
for (var t=0; t<tids.length; t++) {
   var url="http://twhelp.tiddlyspot.com/";
   if (!url) url=document.location.href;
   var
permalink=encodeURIComponent(String.encodeTiddlyLink(tids[t].title));
    out+="[["+tids[t].title+"|"+url+"#"+permalink+"]]\n";
}

return out;

</script>
}}} 
}}}
<<<
===@@
----
{{fourcolumns{
<script>
var out=""
var tids=store.getTiddlers("title");
for (var t=0; t<tids.length; t++) {
   var url="http://twhelp.tiddlyspot.com/";
   if (!url) url=document.location.href;
   var
permalink=encodeURIComponent(String.encodeTiddlyLink(tids[t].title));
    out+="[["+tids[t].title+"|"+url+"#"+permalink+"]]\n";
}

return out;

</script> 
}}}
@@display:block;text-align:left;border:0px solid #f00;&laquo;&nbsp;[[previous|WhatsInATiddler]]@@
@@display:block;text-align:right;border:0px solid #0f0;margin-top:-3em;[[next|Entities-Codes]]&nbsp;&raquo;@@ 
<<newDocument "label:Print this tiddler" "prompt:print an HTML snapshot of this tiddler" nofilename print here>>
''Table heading links to w3schools references on this subject.''
|>|>|>| ![[Printing Properties|http://www.w3schools.com/css/css_ref_print.asp]] |
| ''Property'' | ''Valid Values'' | ''Example'' | ''Inherited?'' |
| page-break-before |auto, always -or- left, right | page-break-before:alway | N |
| page-break-after |auto, always -or- left, right | page-break-before:auto | N |
{{textcenter{
@@color:#c06;NOTE:@@ ''Table heading links to w3schools references on this subject.''
}}}
|>|>|>| ![[Pseudo Classes|http://www.w3schools.com/css/css_pseudo_classes.asp]] |
| ''Property'' | ''Valid Values'' | ''Example'' | ''Inherited?'' |>|
| cursor |auto, crosshair, default, hand, move, e-resize, ne-resize, nw-resize, n-resize, se-resize, sw-resize, s-resize, w-resize, text, wait, help | { cursor:hand; } | Y |
| active, hover, link, visited | n/a | a:hover { color:red; } | Y |
| first-letter, first-line |any font manipulating declaration | p:first-letter{ float:left;color:blue } | N |
!!!!<<gradient horiz #fc3 #ffffff>>&nbsp;Examples>>

''The Table Heading on all CSS tables in TW Help i.e. [[Pseudo Classes|http://www.w3schools.com/css/css_pseudo_classes.asp]] links to w3schools references on that subject.''

As shown in [[Cursor Property - CSS|Cursor Property - CSS]]
*+++[Click here to see Cursor Property - CSS]
<<tiddler [[Cursor Property - CSS]]>>
===

As shown in FormattingText
*+++[Click here to see FirstLetter]
<<tiddler FirstLetter>>
===

<<forEachTiddler
     where 'tiddler.tags.contains("color")'
     write '" "+ tiddler.created.formatString("0DD-MMM-YYYY") + "\n"+"&nbsp; &nbsp;"+"*"+String.encodeTiddlyLink(tiddler.title) + "\n"  '
 >> 
<<forEachTiddler
 where
 'tiddler.tags && tiddler.tags.length'
 sortBy 
 'getSortedTagsText(tiddler)+"###"+tiddler.title'
 script
 'function getSortedTagsText(tiddler) {var tags = tiddler.tags; if (!tags) return ""; tags.sort(); var result = ""; for (var i = 0; i < tags.length;i++) {result += tags[i]+ " ";} return result;} function getGroupTitle(tiddler, context) {if (!context.lastGroup || context.lastGroup != getSortedTagsText(tiddler)) { context.lastGroup = getSortedTagsText(tiddler); return "* {{{"+(context.lastGroup?context.lastGroup:"no tags")+"}}}\n";} else return "";} '
 write
 'tiddler.created.formatString("0DD-MMM-YYYY") + getGroupTitle(tiddler, context)+"** [[" + tiddler.title+"]]\n"'

>>
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("q")'

sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort| Title | Size | Tags |Modified|h\n"'

>>
/%
|Name|QuickEdit_equation|
|Source|TBA|
|Version|1.0.0|
|Author|Will Bateman - CodeCogs.com & Morris Gray - twhelp.tiddlywiki.com|
|License|http://www.codecogs.com|
|~CoreVersion|2.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|definition for toolbar button for equation editing|

Usage:
QuickEditToolbar: <<tiddler QuickEdit_equation>>
OR
EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_equation'></span>

**** INSERT EQUATION ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"

	title="embed an equation - [img[http://latex.codecogs.com/gif.latex?]]"
	onclick="config.quickEdit.id='eqntarget'; OpenLatexEditor('eqntarget','tw','',true,''); "
>equation</a></html>
<<popup [[QuickHelp]] [[<<forEachTiddler where 'tiddler.tags.contains("mygroup")'$))]]>>
/***
|''Name:''|QuoteOfTheDayPlugin|
|''Source:''|http://www.TiddlyTools.com/#QuoteOfTheDayPlugin|
|''Author:''|Eric Shulman - ELS Design Studios|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|''~CoreVersion:''|2.0.10|

Display a randomly selected "quote of the day"

!!!!!Usage
<<<
{{{<<QOTD //tiddlername//>>}}}
Put your quotations into a tiddler (called //tiddlername//).  Separate each quote by a horizontal rule (use "----" on a line by itself).  Each time the macro is rendered it will display a different quotation, selected at random from the specified tiddler.
<<<
!!!!!Example
<<<

{{{<<QOTD Quotations>>}}}
<<QOTD Quotations>>
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''QuoteOfTheDayPlugin'' (tagged with <<tag systemConfig>>)
^^documentation and javascript for QuoteOfTheDay handling^^
<<<
!!!!!Revision History
<<<
''2005.10.21 [1.0.0]''
Initial Release
<<<
!!!!!Credits

<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].
Based on a suggestion by M.Russula
<<<
!!!!!Code
***/
//{{{
version.extensions.QOTD = {major: 1, minor: 0, revision: 0, date: new Date(2005,10,21)};
config.macros.QOTD = {};
config.macros.QOTD.handler= function(place,macroName,params) {
	var txt=store.getTiddlerText(params[0]); if (!txt) return;
	var quotes=txt.split("\n----\n");
	// then, get a random index number between 0 and N-1 and wikify that text
	wikify(quotes[Math.floor(Math.random()*quotes.length)],place);
}
//}}}
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("r")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
{{wrap{{{textleft{
<<tabs tabsClass [[Intro ]]""[[RadioIntro]] [[2RN-576AM ]]"ABC Radio National"[[2RN-576AM]][[2PB 630AM ]]"ABC News Radio"[[2PB 630AM]][[2BL 702AM ]]"ABC Radio 702"[[2BL 702AM]]  [[ABC-92.9FM ]] "ABC 92.9FM" [[ABC 92.9FM]] [[2CH ]]"2CH Radio 1170 AM"[[2CH]][[RadioOnline ]] "Lists of Australian Radio Stations Online Web Site" [[RadioOnline]] [[RadioLovers ]] "Old time radio programs" [[Radio Lovers]] [[OldTimeRadio ]] "Old time radio programs"[[OldTimeRadio]] [[dig-Radio ]] "dig Radio" [[dig Radio]] [[RadioAustralia ]] "RadioAustralia" [[RadioAustralia]]>>

}}}
[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]][[Radio Lovers|http://www.radiolovers.com/]]
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.1radio.com.au/]]&nbsp;&raquo;|
}}}<html><div align="center"><iframe src ="http://www.1radio.com.au/" width="100%" align="center" height="600"></iframe></div></html>

@@color:#00f;Listen Radio Australia @@&nbsp;&nbsp;[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]]
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[RadioAustralia|RadioAustralia]]>>
[img[http://img440.imageshack.us/img440/7356/ralogomi1.gif]]
@@color:#c06;''&raquo;''@@ [[Go to Web Site| http://www.radioaustralia.net.au/]] 

[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]] Listen Radio Australia using: [[Media Player|http://www.abc.net.au/streaming/ra.asx]] &bull; [[RealPlayer|http://www.abc.net.au/streaming/ra.ram]]


{{borderless{
|[img[http://img295.imageshack.us/img295/9558/whtblkwhtyi3.gif]]|vertical-align:middle;''ABC Radio is a commercial-free public radio network owned by the People of Australia.'' (so far)|
<<gradient horiz #fc3 #fff>>&nbsp;[[Internet Radio|RadioIntro]]>>

}}}[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]] [[Monte-Carlo Monaco|http://www.surfmusic.de/radio-station/monte-carlo-monaco,2220.html]]

[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]] [[Radio around the world|http://www.djstationonline.com/]]

[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]] [[BBC Radio|http://www.bbc.co.uk/radio/]]

[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]] [[Deutsche Welle|http://www.dw-world.de/dw/0,2142,4703,00.html]] 
<html>
[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]] Listen ~ShortWave Radio via the Internet: &bull; [[Media Player|http://64.27.7.251:8000/SWRadio.m3u ]] ~WebSite: &laquo;http://www.ralabs.com/webradio/&raquo;
</html>
[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]] {{locLink{[[Radio1|Radio1]] }}}@@color:#C06;''&raquo; &raquo;'' @@ Australian Radio Stations

&bull;&nbsp;~Non-Radio Web News
<<tiddler NewsSites>>
[[Lists of Australian Radio Stations Online Web Site|http://www.adonline.id.au/radio/]]
!!!<<gradient horiz #fc3 #fff>>&nbsp;Get a random tiddler contents>>
{{{
<script>
  var tids=store.getTaggedTiddlers("ft");
  if (tids.length)
    return "<<tiddler "+tids[Math.floor(Math.random()*tids.length)].title+">>";

</script>
}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;Get random tiddler name>>
{{{
<script>
  var tids=store.getTaggedTiddlers("ft");
  if (tids.length)
    return "[["+tids[Math.floor(Math.random()*tids.length)].title+"]]";

</script>
}}}

!!!<<gradient horiz #fc3 #fff>>&nbsp;Refresh it>>
{{{
<script label="refresh">
        var here=story.findContainingTiddler(place);
        if (here)
story.refreshTiddler(here.getAttribute("tiddler"),null,true);
</script> 
}}}

+++[do random contents (once)]

<script>
  var tids=store.getTaggedTiddlers("ft");
  if (tids.length)
    return "<<tiddler "+tids[Math.floor(Math.random()*tids.length)].title+">>";
</script>
===


+++[do random name (once)]
<script>
  var tids=store.getTaggedTiddlers("ft");
  if (tids.length)
    return "[["+tids[Math.floor(Math.random()*tids.length)].title+"]]";

</script>
===


<script label="refresh">
        var here=story.findContainingTiddler(place);
        if (here)
story.refreshTiddler(here.getAttribute("tiddler"),null,true);
</script>
 
!!!<<gradient horiz #fc3 #fff>>&nbsp;Test Area>>

Using partplugin
|>|bgcolor:#fcf;Find a random tiddler|
|<<tiddler ./refreshit>>|<<tiddler ./randomtid>>|

<part refreshit hidden>
<script label="I'm feeling lucky">
        var here=story.findContainingTiddler(place);
        if (here)
story.refreshTiddler(here.getAttribute("tiddler"),null,true);
</script> 

</part>

<part randomtid hidden>
<script>
  var tids=store.getTaggedTiddlers("ft");
  if (tids.length)
    return "[["+tids[Math.floor(Math.random()*tids.length)].title+"]]";
</script>

</part>

!!!!End
{{borderless{
|<<tiddler ./col1>>|vertical-align:top;<<tiddler ./col2>>|
}}}
<part col1 hidden>
<html><td><FORM action="file:///a:/" target="_blank"><INPUT type=submit value="a:\ drive" name=submit2></FORM></td>

<td><FORM action="file:///c:/" target="_blank"><INPUT type=submit value="c:\ drive" name=submit2> </FORM></td>
<td><FORM action="file:///d:/" target="_blank"><INPUT type=submit value="d:\ drive" name=submit2> </FORM></td>

<td><FORM action="file:///e:/" target="_blank"><INPUT type=submit value="e:\ drive" name=submit2> </FORM></td></html>
</part>

<part col2 hidden>
<html><td><FORM action="file:///f:/" target="_blank"><INPUT type=submit value="f:\ drive" name=submit2> </FORM></td>

<td> <FORM action="file:///g:/" target="_blank"><INPUT type=submit value="g:\ drive" name=submit2> </FORM></td>
<td><FORM action="file:///h:/" target="_blank"><INPUT type=submit value="h:\ drive" name=submit2> </FORM></td>

<td><FORM action="file:///i:/" target="_blank"><INPUT type=submit value="i:\ drive" name=submit2> </FORM></td></html>
</part>
!!!<<gradient horiz #fc3 #fff>>[[ReadFromHRSeparatedFile]]^^<<tiddler CloseThisOpen with: ToolsForTiddlyWiki  '« back'>>|<<toolbar editTiddler>>» ^^>>

<<tiddler ReadFromHRSeparatedFile##script with:[[Tip of the Day]]>>

/%
!script
<script>

var out="";
var items=store.getTiddlerText('$1','') .split("\n----\n");
for (var i=0; i<items.length; i++) {
if (i>0 && i/3==Math.floor(i/3)) out += "|\n"; // start a new row
out += "|"+items[i]; // add item to row
}
out += "|\n"; // end last row
return out;
</script> 
!end
%/

<<tiddler CloseOpen with: WebPageCodes  '« back'>>
/***
|Macro|redirect (alias)|
|Author|[[Clint Checketts]] and Paul Petterson|
|Version|1.1 Jan 26, 2006|
|Location|http://checkettsweb.com/styles/themes.htm#RedirectMacro|
|Description|This macro tells TW to find all instances of a word and makes it point to a different link. For example, whenever I put the word 'Clint' in a tiddler I want TiddlyWiki to turn it into a link that points to a tiddler titled 'Clint Checketts' Or the word 'TW' could point to a tiddler called 'TiddlyWiki' It even matches clint (which is lowercase) [[Clint]] leet lEEt LEET|
|Usage|{{{<<redirect TW TiddlyWiki>>}}} |
|Example|<<redirect TW "TiddlyWiki">> <<redirect Clint "Clint Checketts">> (Nothing should appear, its just setting it all up)<<redirectExact lEEt Elite>>|

!Revisions
1.1- Fixed tiddler refresh so a tiddler declaring a redirect will also render the redirect
1.0- Updated to work with TiddlyWiki 2.0 (thanks to Udo Borkowski)
0.9- Original release October 2005

!Code
***/
//{{{
version.extensions.redirectExact = {major: 1, minor: 2, revision: 0, date: new Date(2005,10,24)};
config.macros.redirectExact = {label: "Pickles Rock!"};
config.macros.redirectExact.handler = function(place,macroName,params,wikifier,paramString,tiddler){
 config.macros.redirect.handler(place,macroName,params,wikifier,paramString,tiddler);
}

version.extensions.redirect = {major: 1, minor: 2, revision: 0, date: new Date(2005,10,24)};
config.macros.redirect = {label: "Pickles Rock!"};

config.macros.redirect.handler = function(place,macroName,params,wikifier,paramString,tiddler){

var redirectExists = false
// Check to see if the wikifier exists
for (var i=0;i<config.formatters.length;i++)
 if (config.formatters[i].name == "redirect"+params[0])
 redirectExists = true;

//If it doesn't exist, add it!
if (!redirectExists){
 for( var i=0; i<config.formatters.length; i++ )
 if ( config.formatters[i].name=='wikiLink') break ;

 if ( i >= config.formatters.length ) {
 var e = "Can't find formatter for wikiLink!" ;
 displayMessage( e ) ;
 throw( e ) ;
 }

var pattern;
 if (macroName == 'redirect'){pattern=params[0].escapeRegExp().replace(/([A-Z])/img, function($1) {return("["+$1.toUpperCase()+$1.toLowerCase()+"]");});
 } else {
 pattern=params[0].escapeRegExp();
 }

 config.formatters.splice( i, 0, {
 name: "redirect"+params[0],
 match: "(?:\\b)(?:\\[\\[)?"+pattern+"(?:\\]\\])?(?:\\b)",
 subst: params[1],
 handler: function(w) {
 var link = createTiddlyLink(w.output,this.subst,false);
 w.outputText(link,w.matchStart,w.nextMatch);
 }
 });
 formatter = new Formatter(config.formatters); //update the tiddler
 if(tiddler) story.refreshTiddler(tiddler.title,null,true); //refresh tiddler so the new rule is applied
} // End if
}
//}}}
<script>store.notifyAll()</script>
<html><input type="button" value="Refresh Styles" onClick="javascript:refreshStyles('StyleSheet');" name="button" class="btn" onmouseover="this.className='btn btnhov'" onmouseout="this.className='btn'"/></html>
/***
|''Name:''|RefreshTiddlerPlugin|
|''Description:''|Refresh an entire tiddler with optional periodic re-refresh|
|''Date:''|Oct 3, 2006|
|''Source:''|http://solo.dc3.com/tw/index.html#RefreshTiddlerPlugin|
|''Author:''|Bob Denny ~DC-3 Dreams, SP|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|''Version:''|1.0.4|
|''~CoreVersion:''|2.0.11, 2.1.0|
|''Browser:''|Firefox 1.5; Internet Explorer 6.0; Safari|
|''Require:''|CheckboxPlugin (http://www.TiddlyTools.com/#CheckboxPlugin)|
This macro provides a tiddler with refresh control. At a minimum, a refresh button appears at the location of the macro invocation. Clicking this button causes the contents of the tiddler to be refreshed. Optionally, a checkbox may also be displayed with which the user can enable and disable automatic periodic refresh of  the tiddler at a specified interval.
There are three optional parameters
|!Parameter|!Description|
|''1''|Button label, default "Refresh"|
|''2''|Button tooltip, default "Refresh this tiddler"|
|''3''|Periodic refresh interval, sec., default 0 (no periodic refresh checkbox)|
!!Revision History
<<<
''2006.09.13 [1.0.1]'' Initial creation, several days
''2006.09.22 [1.0.2]'' Make periodic refresh checkbox optional
''2006.09.29 [1.0.3]'' Refresh checkbox cookie names different from RefreshIframe.
''2006.10.03 [1.0.4]'' Lint check, validate on TW 2.1.0.
<<<
!!Code
***/
//{{{
version.extensions.RefreshTiddler = {
 major: 1, minor: 0, revision: 4,
 date: new Date(2006, 10, 3), 
 type: 'macro',
 source: "#RefreshTiddlerPlugin"
};

config.macros.RefreshTiddler = 
{
	states: { },													// Associative array of refresh states indexed by tiddler name
    
	handler: function(place, macroName, params, wikifier, paramString, tiddler)
	{
		var tidTitle = tiddler.title;								// Shortcut
		if(!this.states[tidTitle]) this.states[tidTitle] = {		// Array of state objects for refreshed tiddlers
				butLabel: "",
				butTooltip: "",
				refInterval: 0,
				doRefresh: false,
				initPerRef: false,
				timerId: 0,
				chkBox: null
				};
		var state = this.states[tidTitle];							// Shortcut
		state.butLabel = params[0] ? params[0] : "RefreshTiddler"; 		// Make these react to edits
		state.butTooltip = params[1] ? params[1] : "Refresh this tiddler";
		state.refInterval = params[2] ? params[2] : 0;				// 0 = no periodic refresh checkbox
		var btn = createTiddlyButton(place, state.butLabel, state.butTooltip, this.onButClick);
		btn.name = tidTitle;										// Set button name to tiddler name (see onButClick())
		if(state.refInterval > 0) 									// If periodic refresh wanted
		{
			wikify(" [ =chkPerRefTid" + tiddler.created.convertToYYYYMMDDHHMM() + // Uniquify chkbox ID
				"{config.macros.RefreshTiddler.states[\"" + tidTitle + "\"].chkBox = this;}" +
				"{config.macros.RefreshTiddler.onChkClick(\"" +  tidTitle + "\");}] " + 
				state.butLabel + " every " + state.refInterval + " seconds", place);
			state.timerId = 0;
			if(!state.initPerRef) this.onChkClick(tidTitle);		// Simulate checkbox click (state already from cookie)
		}
	},
    
	onButClick: function(e) 
	{
		if(!e) e = window.event;
		var tidTitle = resolveTarget(e).name;						// Name is the tiddler name!
		//displayMessage("but " + tidTitle);
		story.refreshTiddler(tidTitle, null, true);
		return false;
	},
    
	onChkClick: function(tidTitle) 
	{
		var state = this.states[tidTitle];
		if(state.chkBox.checked) {
			if(state.timerId) clearTimeout(state.timerId);
			this.startRefresh(tidTitle); 
		} else { 
			state.doRefresh = false;
		}
		state.initPerRef = true;
	},
    
	startRefresh: function(tidTitle) 
	{
		var state = this.states[tidTitle];
		state.doRefresh = true;
		//displayMessage("st " + tidTitle + " " + state.refInterval);
		state.timerId = setTimeout("config.macros.RefreshTiddler.reRefresh(\"" + 
						tidTitle + "\")", state.refInterval * 1000);
	},
    
	reRefresh: function(tidTitle)
	{
		var state = this.states[tidTitle];
		state.timerId = 0;
		if(!state.doRefresh) return;



<script>
	place.insertBefore(document.getElementById(story.idPrefix + tidTitle),null);
	
</script>



		// Kill re-refresh cycle if tiddler closed or edited
		var tidElem = document.getElementById(story.idPrefix + tidTitle);  // DON'T GET CUTE! THIS IS CORRECT!
		//**BUGBUG** Hardwired to EditTemplate!
		if(!tidElem || tidElem.attributes['template'].value == "EditTemplate") // Prevent hidden or editing
		{
			state.initPerRef = false;
			return;
		}
		//displayMessage("re " + tidTitle + " " + state.refInterval);
		story.refreshTiddler(tidTitle, null, true);
		state.timerId = setTimeout("config.macros.RefreshTiddler.reRefresh(\"" + 
						tidTitle + "\")", state.refInterval * 1000);
	}
};
//}}}


!!!<<gradient horiz #fc3 #fff>>&nbsp;[[RefreshTiddlers]]^^<<tiddler CloseThisOpen with: WhatsInATiddler  '« back'>>|<<toolbar editTiddler>>» ^^>>
Refresh all open tiddlers
{{{
<script label="refresh open tiddlers">story.forEachTiddler(function(t,e){story.refreshTiddler(t,null,true)});        refreshDisplay();return false;
</script> 

}}}
''or'' refresh a tiddler.
{{{
<script label="refresh">var here=story.findContainingTiddler(place); if (here)story.refreshTiddler(here.getAttribute("tiddler"),null,true);</script>
}}}
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;Open in a new window[img[Open outside link in a new window|http://img229.imageshack.us/img229/1687/extlink7226466sx5.gif][http://www.javascriptkit.com/jsref/regexp.shtml]]|
----

<html><div align="center"><iframe  src ="http://www.javascriptkit.com/jsref/regexp.shtml" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
<<relatedTiddlers TiddlerName hidecontrols "exclude list">>
/***
|Name|RelatedTiddlersPlugin|
|Source|http://www.TiddlyTools.com/#RelatedTiddlersPlugin|
|Version|1.1.5|
|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|starting from a selected tiddler, display a list and/or tree of linked or transcluded tiddlers|

!!!!!Usage
<<<
//{{{
<<relatedTiddlers TiddlerName hidecontrols "exclude list">>
//}}}
where:
*TiddlerName (optional)<br>sets the initial "root" to the specified tiddler (and hides the 'select a tiddler' form controls).  You can use keyword 'here' to specify the current tiddler.
*'hidecontrols' (optional) or 'showcontrols' (default)<br>keyword value to suppress display of 'select tiddler' droplist and buttons.
*"exclude list" (optional)<br>space-separated list of tiddlers whose links should not be followed.  use quotes or double-square brackets to ensure list is processed as a single parameter

<<<
!!!!!Configuration
<<<
<<option chkRelatedTiddlersZoom>> enable autosizing of tree display //(aka, "zoom" or "shrink-and-grow")//
don't follow links contained in these tiddlers: <<option txtRelatedTiddlersExclude>>
<<<
!!!!!Examples
<<<
{{smallform{<<relatedTiddlers>>}}}

<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
RelatedTiddlersPlugin, InlineJavascriptPlugin, NestedSlidersPlugin, StyleSheetShortcuts
<<<
!!!!!Revision History
<<<
''2007.07.08 [1.1.5]'' extensive code cleanup
''2007.07.08 [1.1.0]'' converted from inline script
''2007.06.29 [1.0.0]'' started (as inline script)
<<<
!!!!!Credits
<<<
This feature was developed by Eric L. Shulman
<<<
!!!!!Code
***/
//{{{
version.extensions.RelatedTiddlersPlugin={major: 1, minor: 1, revision: 5, date: new Date(2007,7,8)};

// initialize 'autozoom' and 'exclude' tree options (defaults are not to zoom, and to follow all links)
if (config.options.chkRelatedTiddlersZoom===undefined)
	config.options.chkRelatedTiddlersZoom=false;
if (config.options.txtRelatedTiddlersExclude===undefined)
	config.options.txtRelatedTiddlersExclude='GettingStarted DefaultTiddlers SiteNews Download';
if (config.options.chkRelatedTiddlersShowList===undefined)
	config.options.chkRelatedTiddlersShowList=true;
if (config.options.chkRelatedTiddlersShowTree===undefined)
	config.options.chkRelatedTiddlersShowTree=false;

config.macros.relatedTiddlers={
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {

		// create form with unique DOM element ID (using current timestamp)... permits multiple form instances
		var now=new Date().getTime();
		var span=createTiddlyElement(place,"span");
		span.innerHTML=this.form.format(["relatedTiddlers_form"+now]);
		var form=span.getElementsByTagName("form")[0]; // find form that we just created
		var target=createTiddlyElement(span,"div"); // create target block in which generated output will be placed

		// initialize droplist contents (all tiddlers)
		var tids=store.getTiddlers('title','excludeLists');
		for (i=0; i<tids.length; i++) form.list.options[form.list.options.length]=new Option(tids[i].title,tids[i].title,false,false);

		// initialize exclude field (space-separated list)
		if (config.options.txtRelatedTiddlersExclude) form.exclude.value=config.options.txtRelatedTiddlersExclude;

		// set starting tiddler, form display, and/or exclude list from macro params (if present) and then show the results!
		var root="";
		var hide=false;
		var exclude=config.options.txtRelatedTiddlersExclude;
		if (params[0]) root=params[0]; // TiddlerName
		if (params[1]) hide=(params[1].toLowerCase()=="hidecontrols"); // keyword: "hidecontrols" or "showcontrols" (default)
		if (params[2]) exclude=params[2]; // list of tiddlers whose links should not be followed
		if (root=="here") { var tid=story.findContainingTiddler(place); if (tid) root=tid.getAttribute("tiddler"); }
		if (store.tiddlerExists(root)) {
			// NOTE:  don't hide form when running IE, where putting initial focus on hidden form creates an error
			if (!config.browser.isIE) form.style.display=hide?"none":"block"; // show/hide the controls
			form.list.value=root; // set the root
			form.exclude.value=exclude; // set 'exclude' field
			form.get.click(); // DISPLAY INITIAL RESULTS (if tiddler is selected)
		}
	},
	form:
		"<form id='%0' action='javascript:;' style='display:inline;margin:0;padding:0;' onsubmit='return false'><!-- \
		--><span class='fine' style='float:left;width:39.5%;'><i>find all tiddlers related to:</i></span><!-- \
		--><span class='fine' style='float:left;'><i>exclude links contained in:</i></span><!-- \
		--><div style='clear:both'><!-- \
		--><select name=list size=1 style='width:39.5%' onchange='this.form.get.click()'><!-- \
		--><option value=''>select a tiddler...</option><!-- \
		--></select><!-- \
		--><input type='text' option='txtRelatedTiddlersExclude' name='exclude' value='' style='width:40%' \
			title='enter the names of tiddlers whose links should NOT be followed' \
			onkeyup='if (event.keyCode==13) { this.blur(); this.form.get.click(); }'  \
			onchange='config.options[this.getAttribute(\"option\")]=this.value;saveOptionCookie(this.getAttribute(\"option\"));'><!-- \
		--><input type=button name=get value='get related' style='width:10%'  \
			onclick='config.macros.relatedTiddlers.show(this.form,this.form.nextSibling);'><!-- \
		--><input type=button name=done value='done' disabled style='width:10%'  \
			onclick='this.form.list.selectedIndex=0; this.form.get.click();'><!-- \
		--></div><!-- \
		--></form>",
	styles:
		".relatedTiddlers blockquote \
			{ border-left:1px dotted #999; margin:0 25px; padding-left:.5em; font-size:%0%; line-height:115%; } \
		.relatedTiddlers .borderleft \
			{ margin:0; padding:0; margin-left:1em; border-left:1px dotted #999; padding-left:.5em; } \
		.relatedTiddlers .fourcolumns \
			{ display:block; -moz-column-count:4; -moz-column-gap:1em; -moz-column-width:25%} \
		.relatedTiddlers a \
			{ font-weight:normal; } \
		.relatedTiddlers .bold, .relatedTiddlers .bold a \
			{ font-weight:bold; } \
		.relatedTiddlers .floatright \
			{ float:right; } \
		.relatedTiddlers .clear \
			{ clear:both; }	",
	toggle:
		"{{floatright{<html><a href='javascript:;' class='button' title='show/hide tiddler selection droplist and buttons' \
		onclick='var here=story.findContainingTiddler(this); var tid=here?here.getAttribute(\"tiddler\"):\"\"; \
			var f=document.getElementById(\"%0\"); var hide=(f.style.display!=\"none\"); \
			f.style.display=hide?\"none\":\"inline\"; this.innerHTML=hide?\"show form\":\"hide form\"; return false;'>%1</a></html>}}}",
	treecheck:
		"{{floatright{@@display:none;<<option chkRelatedTiddlersShowTree>>@@<html><a href='javascript:;' class='button' onclick='this.parentNode.previousSibling.firstChild.click(); return false;'>tree view</a></html>}}}",
	tree:
		"{{clear{\n----\n}}} \
		{{floatright small{<<option chkRelatedTiddlersZoom>>autosize tree display}}} \
		{{%0{\n%1}}}",
	listcheck:
		"{{floatright{@@display:none;<<option chkRelatedTiddlersShowList>>@@<html><a href='javascript:;' class='button' onclick='this.parentNode.previousSibling.firstChild.click(); return false;'>list view</a></html>}}}",
	list:
		"{{clear{\n----\n}}} \
		{{fine{\n''tiddlers containing links to'' [[%0]]\n}}} \
		{{small fourcolumns borderleft{\n%1}}} \
		{{fine{\n''tiddlers linked from or included by'' [[%0]]\n}}} \
		{{borderleft{\n \
			{{fine{\n''bold''=//direct links//, plain=//indirect links//, ''...''=//links not followed//}}} \
			{{small fourcolumns{\n%2}}} \
		}}}",
	skipped:
		"<html><span title='links from %0 have NOT been followed'>...</span></html>",
	mouseover: function(ev) {
		this.saveSize=this.style.fontSize;
		this.style.fontSize='100%';
		this.style.borderLeftStyle='solid';
	},
	mouseout: function(ev) {
		this.style.fontSize=this.saveSize;
		this.style.borderLeftStyle='dotted';
	},
	findRelatedTiddlers: function(tid,tids,treeout,level,exclude) { // recursively build list of related tids 
		// get related tiddlers  (links and includes FROM the root tiddler) and generate listview/treeview output
		var t=store.getTiddler(tid);
		if (!t || tids.contains(tid)) return tids; // tiddler already in results (or missing tiddler)
		tids.push(t.title); // add tiddler to results
		var skip=exclude && exclude.contains(tid);
		treeout.text+=level+"[["+tid+"]]"+(skip?this.skipped.format([tid]):"")+"\n";
		if (skip) return tids; // tiddler is pruned... don't follow excluded links
		// gather child links and sort for breadth-first traversal of the tree
		if (!t.linksUpdated) t.changed();
		var children=[];
		for (var i=0; i<t.links.length; i++) {
			if (t.links[i]==tid) continue; // exclude self
			var c=store.getTiddler(t.links[i]); if (!c) continue; // exclude missing tiddlers
			if (!c.linksUpdated) c.changed();
			children.push({tid:c.title,count:c.links.length}); 
		}
		children.sort(function (a,b){if(a.count==b.count)return(0);else return(a.count<b.count)?+1:-1;});
		for (var i=0; i<children.length; i++)
			tids=this.findRelatedTiddlers(children[i].tid,tids,treeout,level+">",exclude);
		return tids;
	},
	show: function(form,target) {
		removeChildren(target); form.done.disabled=true; // clear any existing output and disable 'done' button
		var start=form.list.value; if (!start.length) return; // get selected starting tiddler.  If blank value (heading), do nothing

		// get related tiddlers and generate blockquote-indented tree output
		var tids=[]; var treeview={text:""}; var level="";
		var exclude=config.options.txtRelatedTiddlersExclude.readBracketedList();
		var tids=this.findRelatedTiddlers(start,tids,treeview,level,exclude);
		tids.shift(); // remove self from list
		tids.sort(); // sort titles alphabetically

		// generate list output
		var tid=store.getTiddler(start);
		var relsview=""; for (t=0; t<tids.length; t++) {
			relsview+=tid.links.contains(tids[t])?("{{bold{[["+tids[t]+"]]}}}"):("[["+tids[t]+"]]");
			if (exclude && exclude.contains(tids[t])) relsview+=this.skipped.format([tids[t]]);
			relsview+="\n";
		}
	
		// get references TO the root tiddler, add to related tiddlers and generate refsview output
		var refs=[]; var referers=store.getReferringTiddlers(start);
		for(var r=0; r<referers.length; r++)
			if(referers[r].title!=start && !referers[r].tags.contains("excludeLists")) refs.push(referers[r].title);
		var refcount=refs.length; var relcount=tids.length; // remember individual counts
		for (var r=0; r<refs.length; r++) tids.pushUnique(refs[r]); // combine lists without duplicates
		var total=tids.length; // get combined total
		var refsview="[["+refs.sort().join("]]\n[[")+"]]\n";
	
		// set custom blockquote styles for treeview
		setStylesheet(this.styles.format([config.options.chkRelatedTiddlersZoom?80:100]),'relatedTiddlers_styles');

		// assemble and render output
		var summary=(total?(total+" tiddler"+(total==1?" is":"s are")):"There are no tiddlers")+" related to: [["+start+"]]";
		var list=this.list.format([start,refsview,relsview.length?relsview:"//no related tiddlers//"]);
		var tree=this.tree.format([config.options.chkRelatedTiddlersZoom?"normal":"small",treeview.text]);
		var hide=this.toggle.format([form.id,(form.style.display=='none'?'show form':'hide form')]);
		var sep="{{floatright{ | }}}";
		var showList=total && config.options.chkRelatedTiddlersShowList;
		var showTree=relcount && config.options.chkRelatedTiddlersShowTree;
		var out="{{relatedTiddlers{"+hide+(relcount?sep+this.treecheck:"")+(total?sep+this.listcheck:"")+summary+(showList?list:"")+(showTree?tree:"")+"}}}";
		wikify(out,target);
		form.done.disabled=false; // enable 'done' button

		// add mouseover/mouseout handling to blockquotes (for autosizing)
		var blocks=target.getElementsByTagName("blockquote");
		for (var b=0; b<blocks.length; b++)
			{ blocks[b].onmouseover=this.mouseover; blocks[b].onmouseout=this.mouseout; }

		// add side-effect to checkboxes so that display is refreshed when a checkbox state is changed
		var checks=target.getElementsByTagName("input");
		for (var c=0; c<checks.length; c++) {
			if (checks[c].type.toLowerCase()!="checkbox") continue;
			checks[c].coreClick=checks[c].onclick; // save standard click handler
			checks[c].formID=form.id; // link checkbox with correponding form
			checks[c].onclick=function() { this.coreClick.apply(this,arguments); document.getElementById(this.formID).get.click(); }
		}
	}
}
//}}}
Relative links depend totally where each file is located relative to one another.  Taking the simplest case let us assume they are in the same directory. (of course we know that if the file is in the same directory it doesn't require all of this, but it is a relative file nevertheless and this is what really happens)
<<<
Suppose the file ~LastUpdate.htm is located here in /~TiddlyWiki2.1

{{{C:/TiddlySpot/TiddlyWiki2.1/LastUpdate.htm}}}

Suppose the file where you want the relative link to ~LastUpdate.htm is here  in /~TiddlyWiki2.1 also:

{{{C:/TiddlySpot/TiddlyWiki2.1/twhelp.html}}}
<<<
In order to make a relative link from twhelp.html to the file ~LastUpdate.htm in the same directory you must do this:

<<<
{{{[[Relative link to LastUpdate.htm|file:../../TiddlySpot/TiddlyWiki2.1/LastUpdate.htm]]}}}
<<<

If twhelp.html was located in the directory /~TiddlySpot instead like this:
<<<
{{{C:/TiddlySpot/twhelp.html}}}

Then the relative link to ~LastUpdate.htm would look like this:

{{{[[Relative link to LastUpdate.htm|file:../TiddlySpot/TiddlyWiki2.1/LastUpdate.htm]]}}}
<<<
----


/***
|''Name''|RelativeLinkMacro|
|''Source''|[[FND's DevPad|http://devpad.tiddlyspot.com/#RelativeLinkMacro]]|
|''Version''|0.2|
|''Author''|FND|
|''License''|[[Creative Commons Attribution-Share Alike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion''|2.1|
|''Type''|macro|
|''Requires''|N/A|
|''Overrides''|N/A|
|''Description''|creates PrettyLinks relative to the current tiddler|
!Usage Notes
{{{
<<relLink "sub-tiddler" ["link title"]>>
}}}
!!Examples
* {{{<<relLink "SubTiddler">>}}}: <<relLink "SubTiddler">>

* {{{<<relLink "SubTiddler" "custom link title">>}}}: <<relLink "SubTiddler" "custom link title">>
!Revision History
!!v0.1 (2007-07-10)
* initial proof-of-concept implementation
!!v0.2 (2007-07-10)
* added optional parameter for link title
!To Do
* rename plugin(?)
* adjust description
!Code
***/
//{{{
config.macros.relLink = {}
config.macros.relLink.handler = function(place, macroName, params, wikifier, paramString, tiddler) {
	if(!params[1])
		var link = "[[" + tiddler.title + params[0] + "]]";
	else
		var link = "[[" + params[1] + "|" + tiddler.title + params[0] + "]]";
	wikify(link, place);
}
//}}}
!!!<<gradient horiz #fc3 #ffffff>>[[RelativeLinks]]^^<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>
''How to make links relative to the Folder ~TiddlyWiki is located in.''

Your Windows Directory is:

Folder > ~SubFolder > ~SubSubFolder


Example 1: assumes the TiddlyWiki is located in ''Folder''
{{{
[[Link to files in Folder|Beret.jpg]]
[[Link to SubFolder|SubFolder/]]
[[Link to file in SubFolder|SubFolder/Beret.jpg]]
}}}


Example 2: assumes the TiddlyWiki is located in ''SubFolder''
{{{
[[Link to file in SubFolder|Beret.jpg]]
[[Link to SubFolder|./SubFolder/]]
[[Link to file in SubFolder|./SubFolder/Beret.jpg]]
}}}

Example 3: assumes the TiddlyWiki is located in ''SubSubFolder''
{{{
[[Link to file in SubSubFolder|Beret.jpg]]
[[Link to SubFolder|././SubFolder/]]
[[Link to file in SubFolder|././SubFolder/Beret.jpg]]
}}}
<html><div align="center"><font size="-1"><a href="javascript:;" onclick="var tid=story.findContainingTiddler(this); if (tid) story.refreshTiddler(tid.getAttribute('tiddler'),null,true); return false;"><input class="btn" type="button"  onmouseover="this.className='btn btnhov'" onmouseout="this.className='btn'" value="Reload "></a></html>
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[ResizingImages]]^^<<tiddler CloseThisOpen with: FormattingImages  '« back'>>|<<toolbar editTiddler>>» ^^>>

Cutting Bertram Russell down to size.

@@color:#C06;''&raquo; &raquo;'' @@ +++[If he is this big]
[img[http://img256.imageshack.us/img256/5853/russell4fj5.jpg]]
!!!!!&nbsp;Code
{{{[img[http://img256.imageshack.us/img256/5853/russell4fj5.jpg]]}}}
===

@@color:#C06;''&raquo; &raquo;'' @@ +++[You can make him this big]

<html><img src="http://img256.imageshack.us/img256/5853/russell4fj5.jpg" style="height: 146px; "/></html>
@@position:relative;+++^35em^[by doing this]
{{{<html><img src="http://img256.imageshack.us/img256/5853/russell4fj5.jpg" style="height: 146px; "/></html>}}}
===@@
===

!!!&nbsp;~~End of <<wikify [[%0]]title>>~~
{{tablecenter{
<<tiddler TWHelp-SearchResults>>
}}}
<html><div align="center"><iframe src ="http://www.reuters.com/news/video/thumbnails?view=thumbs&videoId=65010&videoChannel=2" width="100%" align="center" height="160" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>
----
http://philwhitehouse.blogspot.com/2008/02/ripplerap-update.html
http://www.ripplerap.com/
http://www.ripplerap.com/LeWeb3/
http://twitter.com/laughingsquid
http://laughingsquid.com/timesmachine-70-years-of-the-new-york-times-archives/
[[http://getsatisfaction.com/twitter/|http://tinyurl.com/32wfqp]]
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("s")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
/***
|Name|SaveAsPlugin|
|Source|http://www.TiddlyTools.com/#SaveAsPlugin|
|Documentation|http://www.TiddlyTools.com/#SaveAsPluginInfo|
|Version|2.5.1|
|Author|Eric Shulman|
|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|Save current document to a different path/filename|
Adds 'save as' command to 'backstage' menu and {{{<<saveAs>>}}} macro (to embed command link wherever you like).
>//Note: This plugin replaces functionality previously provided by [[NewDocumentPlugin]], except for the HTML+CSS "snapshot" feature, which has been moved to a separate [[SnapshotPlugin]].//
!!!!!Documentation
<<<
see [[SaveAsPluginInfo]]
<<<
!!!!!Revisions
<<<

2009.04.30 [2.5.1] custom fields in CSV output
| Please see [[SaveAsPluginInfo]] for additional revision details |
2006.02.03 [1.0.0] Created.
<<<
!!!!!Code
***/
//{{{
version.extensions.SaveAsPlugin= {major: 2, minor: 5, revision: 1, date: new Date(2009,4,30)};

config.macros.saveAs = {
	label: "save as...",
	labelparam: "label:",
	prompt: "Save current document to a different path/file",
	promptparam: "prompt:",
	filePrompt: "Please select or enter a target path/filename",
	targetparam: "target:",
	defaultFilename: "new.html",
	filenameparam: "filename:",
	currfilekeyword: "here",
	typeparam: "type:",
	type_TW: "tw", type_PS: "ps", type_TX: "tx", type_CS: "cs", type_NF: "nf", // file type tokens
	type_map: { // map filetype param alternatives/abbreviations to token values
		tiddlywiki:"tw", tw:"tw", wiki: "tw",
		purestore: "ps", ps:"ps", store:"ps",
		plaintext: "tx", tx:"tx", text: "tx",
		comma:     "cs", cs:"cs", csv:  "cs",
		newsfeed:  "nf", nf:"nf", xml:  "nf", rss:"nf"

	},
	replaceparam: "replace",
	mergeparam: "merge",
	quietparam: "quiet",
	openparam: "open",
	askParam: "ask",
	askMsg: "Enter a tag filter (use * for all tiddlers, 'none' for blank document)",
	emptyParam: "none",
	confirmmsg: "Found %0 tiddlers matching\n\n'%1'\n\nPress OK to proceed",
	mergeprompt: "%0\nalready contains tiddler definitions.\n"

		+"\nPress OK to add new/revised tiddlers to current file contents."
		+"\nPress Cancel to completely replace file contents",
	mergestatus: "Merged %0 new/revised tiddlers and %1 existing tiddlers",
	okmsg: "%0 tiddlers written to %1",
	failmsg: "An error occurred while creating %1",
	filter: "",
	handler: function(place,macroName,params) {
		if (params[0] && params[0].substr(0,this.labelparam.length)==this.labelparam)
			var label=params.shift().substr(this.labelparam.length);
		if (params[0] && params[0].substr(0,this.promptparam.length)==this.promptparam)
			var prompt=params.shift().substr(this.promptparam.length);
		if (params[0] && params[0].substr(0,this.targetparam.length)==this.targetparam)
			var target=params.shift().substr(this.targetparam.length);
		if (params[0] && params[0].substr(0,this.filenameparam.length)==this.filenameparam)
			var filename=params.shift().substr(this.filenameparam.length);
		if (params[0] && params[0].substr(0,this.typeparam.length)==this.typeparam)
			var filetype=this.type_map[params.shift().substr(this.typeparam.length).toLowerCase()];
		var q=(params[0] && params[0]==this.quietparam);   if (q) params.shift();
		var o=(params[0] && params[0]==this.replaceparam); if (o) params.shift();
		var m=(params[0] && params[0]==this.mergeparam);   if (m) params.shift();
		var a=(params[0] && params[0]==this.openparam);    if (a) params.shift();
		var btn=createTiddlyButton(place,label||this.label,prompt||this.prompt,
			function(){config.macros.saveAs.go(
				this.getAttribute('target'),
				this.getAttribute('filename'),
				this.getAttribute('filetype'),
				this.getAttribute('filter'),
				this.getAttribute('quiet')=="true",
				this.getAttribute('overwrite')=="true",
				this.getAttribute('merge')=="true",
				this.getAttribute('autoopen')=="true");  return false;}
		);
		if (target) btn.setAttribute("target",target);
		if (filename) btn.setAttribute("filename",filename);
		btn.setAttribute("filetype",filetype||this.type_TW);
		btn.setAttribute("filter",params.join(" "));
		btn.setAttribute("quiet",q?"true":"false");
		btn.setAttribute("overwrite",o?"true":"false");
		btn.setAttribute("merge",m?"true":"false");
		btn.setAttribute("autoopen",a?"true":"false");
	},
	go: function(target,filename,filetype,filter,quiet,overwrite,merge,autoopen) {
		var cm=config.messages; // abbreviation
		var cms=config.macros.saveAs; // abbreviation
		if (window.location.protocol!="file:") // make sure we are local
			{ displayMessage(cm.notFileUrlError); return; }

		// get tidders, confirm filtered results
		var tids=cms.selectTiddlers(filter);
		if (tids===false) return; // cancelled by user
		if (cms.filter!=cms.emptyParam && cms.filter.length && !quiet)
			if (!confirm(cms.confirmmsg.format([tids.length,cms.filter]))) return;

		// get target path/filename
		if (!filetype) filetype=this.type_TW;
		target=target||cms.getTarget(filename,filetype==this.type_TX?'txt':filetype==this.type_CS?'csv':'html');
		if (!target) return; // cancelled by user

		var link="file:///"+target.replace(/\\/g,'/');
		var samefile=link==decodeURIComponent(window.location.href);
		var p=getLocalPath(document.location.href);
		if (samefile) {
			if (config.options.chkSaveBackups) { var t=loadOriginal(p);if(t)saveBackup(p,t); }
			if (config.options.chkGenerateAnRssFeed && saveRss instanceof Function) saveRss(p);
		}
		var notes="";
		var total={val:0};
		var out=this.assembleFile(target,filetype,tids,notes,quiet,overwrite,merge,total);
		var ok=saveFile(target,out);
		if (ok && autoopen) {
			if (!samefile) window.open(link).focus();
			else { store.setDirty(false); window.location.reload(); }
		}
		if (!quiet || !(ok && autoopen))
			displayMessage((ok?this.okmsg:this.failmsg).format([total.val,target]),link);
	},
	selectTiddlers: function(filter) {
		var cms=config.macros.saveAs; // abbreviation
		cms.filter=filter||"";
		if (filter==cms.emptyParam) return [];
		if (!filter||!filter.length) return store.getTiddlers("title");
		// get filtered tiddlers
		if (filter==config.macros.saveAs.askParam) {
			filter=prompt(config.macros.saveAs.askMsg,"");
			if (!filter) return false;  // cancelled by user
			cms.filter=filter=="*"?"":filter;
			if (filter=="*") return store.getTiddlers("title");
		}
		return store.filterTiddlers("[tag["+filter+"]]");
	},
	getTarget: function(defName,defExt) {
		var cms=config.macros.saveAs; // abbreviation
		// get new target path/filename
		var newPath=getLocalPath(window.location.href);
		var slashpos=newPath.lastIndexOf("/"); if (slashpos==-1) slashpos=newPath.lastIndexOf("\\"); 
		if (slashpos!=-1) newPath=newPath.substr(0,slashpos+1); // trim filename
		if (!defName||!defName.length) { // use current filename as default
			var p=getLocalPath(window.location.href);
			var s=p.lastIndexOf("/"); if (s==-1) s=p.lastIndexOf("\\"); 
			if (s!=-1) defName=p.substr(s+1);
		}
		var defFilename=(defName||cms.defaultFilename).replace(/.html$/,'.'+defExt);
		var target=cms.askForFilename(cms.filePrompt,newPath,defFilename,defExt);
		if (!target) return; // cancelled by user
		// if specified file does not include a path, assemble fully qualified path and filename
		var slashpos=target.lastIndexOf("/"); if (slashpos==-1) slashpos=target.lastIndexOf("\\");
		if (slashpos==-1) target=target+(defName||cms.defaultFilename).replace(/.html$/,'.'+defExt);
		return target;
	},
	askForFilename: function(msg,path,file,defExt) {
		if(window.Components) { // moz
			try {
				netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
				var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
				var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
				picker.init(window, msg, nsIFilePicker.modeSave);
				var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
				thispath.initWithPath(path);
				picker.displayDirectory=thispath;
				picker.defaultExtension=defExt||'html';
				picker.defaultString=file;
				picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
				if (picker.show()!=nsIFilePicker.returnCancel) var result=picker.file.persistentDescriptor;
			}
			catch(e) { alert('error during local file access: '+e.toString()) }
		}
		else { // IE
			try { // XP/Vista only
				var s = new ActiveXObject('UserAccounts.CommonDialog');
				s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|';
				s.FilterIndex=(defExt=='txt')?2:3; // default to HTML files;
				s.InitialDir=path;
				s.FileName=file;
				if (s.showOpen()) var result=s.FileName;
			}
			catch(e) { var result=prompt(msg,path+file); } // fallback for non-XP IE
		}
		return result;
	},
	plainTextHeader:
		 'Source:\n\t%0\n'
		+'Title:\n\t%1\n'
		+'Subtitle:\n\t%2\n'
		+'Created:\n\t%3 by %4\n'
		+'Application:\n\tTiddlyWiki %5 / %6 %7\n\n',
	plainTextTiddler:
		'- - - - - - - - - - - - - - -\n'
		+'|     title: %0\n'
		+'|   created: %1\n'
		+'|  modified: %2\n'
		+'| edited by: %3\n'
		+'|      tags: %4\n'
		+'- - - - - - - - - - - - - - -\n'
		+'%5\n',
	plainTextFooter:
		'',
	newsFeedHeader:
		 '<'+'?xml version="1.0"?'+'>\n'
		+'<rss version="2.0">\n'
		+'<channel>\n'
		+'<title>%1</title>\n'
		+'<link>%0</link>\n'
		+'<description>%2</description>\n'
		+'<language>en-us</language>\n'
		+'<copyright>Copyright '+(new Date().getFullYear())+' %4</copyright>\n'
		+'<pubDate>%3</pubDate>\n'
		+'<lastBuildDate>%3</lastBuildDate>\n'
		+'<docs>http://blogs.law.harvard.edu/tech/rss</docs>\n'
		+'<generator>TiddlyWiki %5 / %6 %7</generator>\n',
	newsFeedTiddler:
		'\n%0\n',
	newsFeedFooter:
		'</channel></rss>',
	pureStoreHeader:
		 '<html><body>'
		+'<style type="text/css">'
		+'	#storeArea {display:block;margin:1em;}'
		+'	#storeArea div {padding:0.5em;margin:1em;border:2px solid black;height:10em;overflow:auto;}'
		+'	#pureStoreHeading {width:100%;text-align:left;background-color:#eeeeee;padding:1em;}'
		+'</style>'
		+'<div id="pureStoreHeading">'
		+'	TiddlyWiki "PureStore" export file<br>'
		+'	Source'+': <b>%0</b><br>'
		+'	Title: <b>%1</b><br>'
		+'	Subtitle: <b>%2</b><br>'
		+'	Created: <b>%3</b> by <b>%4</b><br>'
		+'	TiddlyWiki %5 / %6 %7<br>'
		+'	Notes:<hr><pre>%8</pre>'
		+'</div>'
		+'<div id="storeArea">',
	pureStoreTiddler:
		'%0\n%1',
	pureStoreFooter:
		'</div><!--POST-BODY-START-->\n<!--POST-BODY-END--></body></html>',
	assembleFile: function(target,filetype,tids,notes,quiet,overwrite,merge,total) {
		var revised="";
		var now = new Date().toLocaleString();
		var src=convertUnicodeToUTF8(document.location.href);
		var title = convertUnicodeToUTF8(wikifyPlain("SiteTitle").htmlEncode());
		var subtitle = convertUnicodeToUTF8(wikifyPlain("SiteSubtitle").htmlEncode());
		var user = convertUnicodeToUTF8(config.options.txtUserName.htmlEncode());
		var twver = version.major+"."+version.minor+"."+version.revision;
		var v=version.extensions.SaveAsPlugin; var pver = v.major+"."+v.minor+"."+v.revision;
		var headerargs=[src,title,subtitle,now,user,twver,"SaveAsPlugin",pver,notes];
		switch (filetype) {
			case this.type_TX: // plain text
				var header=this.plainTextHeader.format(headerargs);
				var footer=this.plainTextFooter;
				break;
			case this.type_CS: // comma-separated
				var fields={};
				for (var i=0; i<tids.length; i++) for (var f in tids[i].fields) fields[f]=f;
				var names=['title','created','modified','modifier','tags','text'];
				for (var f in fields) names.push(f);
				var header=names.join(',')+'\n';
				var footer='';
				break;
			case this.type_NF: // news feed (XML)
				headerargs[0]=store.getTiddlerText("SiteUrl","");
				var header=this.newsFeedHeader.format(headerargs);
				var footer=this.newsFeedFooter;
				break;
			case this.type_PS: // PureStore (no code)
				var header=this.pureStoreHeader.format(headerargs);
				var footer=this.pureStoreFooter;
				break;
			case this.type_TW: // full TiddlyWiki
			default:
				var currPath=getLocalPath(window.location.href);
				var original=loadFile(currPath);
				if (!original) { alert(config.messages.cantSaveError); return; }
				var posDiv = locateStoreArea(original);
				if (!posDiv) { alert(config.messages.invalidFileError.format([currPath])); return; }
				var header = original.substr(0,posDiv[0]+startSaveArea.length)+"\n";
				var footer = "\n"+original.substr(posDiv[1]);
				break;
		}
		var out=this.getData(target,filetype,tids,quiet,overwrite,merge,fields);
		var revised = header+convertUnicodeToUTF8(out.join("\n"))+footer;
		// if full TW, insert page title and language attr, and reset MARKUP blocks as needed...
		if (filetype==this.type_TW) {
			var newSiteTitle=convertUnicodeToUTF8(getPageTitle()).htmlEncode();
			revised=revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");
			revised=updateLanguageAttribute(revised);
			var titles=[]; for (var i=0; i<tids.length; i++) titles.push(tids[i].title);
			revised=updateMarkupBlock(revised,"PRE-HEAD",
				titles.contains("MarkupPreHead")? "MarkupPreHead" :null);
			revised=updateMarkupBlock(revised,"POST-HEAD",
				titles.contains("MarkupPostHead")?"MarkupPostHead":null);
			revised=updateMarkupBlock(revised,"PRE-BODY",
				titles.contains("MarkupPreBody")? "MarkupPreBody" :null);
			revised=updateMarkupBlock(revised,"POST-SCRIPT",
				titles.contains("MarkupPostBody")?"MarkupPostBody":null);
		}
		total.val=out.length;
		return revised;
	},
	getData: function(target,filetype,tids,quiet,overwrite,merge,fields) {
		// output selected tiddlers and gather list of titles (for use with merge)
		var out=[]; var titles=[];
		var url=store.getTiddlerText("SiteUrl","");
		for (var i=0; i<tids.length; i++) {
			out.push(this.formatItem(store,filetype,tids[i],url,fields));
			titles.push(tids[i].title);
		}
		// if TW or PureStore format, ask to merge with existing tiddlers (if any)
		if (filetype==this.type_TW || filetype==this.type_PS) {
			if (overwrite) return out; // skip merge... forced overwrite
			var text=loadFile(target);
			if (text && text.length) {
				var remoteStore=new TiddlyWiki();
				if (remoteStore.importTiddlyWiki(convertUTF8ToUnicode(text))
					&& (merge||confirm(this.mergeprompt.format([target])))) {
					var existing=remoteStore.getTiddlers("title");
					for (var i=0; i<existing.length; i++)
						if (!titles.contains(existing[i].title))
							out.push(this.formatItem(remoteStore,filetype,existing[i],url));
					if (!quiet) displayMessage(this.mergestatus.format([tids.length,out.length-tids.length]));
				}
			}
		}
		return out;
	},
	formatItem: function(s,f,t,u,fields) {
		if (f==this.type_TW)
			var r=s.getSaver().externalizeTiddler(s,t);
		if (f==this.type_PS)
			var r=this.pureStoreTiddler.format([t.title,s.getSaver().externalizeTiddler(s,t)]);
		if (f==this.type_NF)
			var r=this.newsFeedTiddler.format([t.saveToRss(u)]);
		if (f==this.type_TX)
			var r=this.plainTextTiddler.format([t.title, t.created.toLocaleString(), t.modified.toLocaleString(),
				t.modifier, String.encodeTiddlyLinkList(t.tags), t.text]);
		if (f==this.type_CS) {
			function toCSV(t) { return '"'+t.replace(/"/g,'""')+'"'; } // always encode CSV
			var out=[ toCSV(t.title), toCSV(t.created.toLocaleString()), toCSV(t.modified.toLocaleString()),
				toCSV(t.modifier), toCSV(String.encodeTiddlyLinkList(t.tags)), toCSV(t.text) ];
			for (var f in fields) out.push(toCSV(t.fields[f]||''));
			var r=out.join(',');
		}
		return r||"";
	}
};
//}}}
//{{{
// automatically add saveAs to backstage
config.tasks.saveAs = {
	text: "saveAs",
	tooltip: config.macros.saveAs.prompt,
	action: function(){ clearMessage(); config.macros.saveAs.go(); }
}
config.backstageTasks.splice(config.backstageTasks.indexOf("save")+1,0,"saveAs");
//}}}
|Name|SaveAsPluginInfo|
|Source|http://www.TiddlyTools.com/#SaveAsPlugin|
|Documentation|http://www.TiddlyTools.com/#SaveAsPluginInfo|
|Version|2.2.1|
|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 SaveAsPlugin|
This plugin automatically adds a 'save as' command to the TiddlyWiki 'backstage' menu that allows you to quickly create an exact copy of the current TiddlyWiki document.  The plugin also defines a macro that you can use to place a "save as..." command link into your sidebar/mainmenu/any tiddler (or wherever you like).
>//Note: This plugin now supersedes [[NewDocumentPlugin]], which has been retired and is no longer being distributed.  In addition, the HTML+CSS "snapshot" functionality previous provided by that plugin has been moved to a separate plugin.  Please see [[SnapshotPlugin]] for additional information.//
!!!!!Usage
<<<
When the command link is clicked, a standard system-specific dialog box will be displayed so you can select/enter the desired target path and filename.  The default is to create a file called "new.html" in the same directory as the current document.
Syntax:
{{{

<<saveAs label:text prompt:text quiet open tagfilter>>
}}}
where:
*''label:text'' //(optional)//<br>defines alternative link text (replaces default "save as..." display)
*''prompt:text'' //(optional)//<br>defines alternative tooltip text for 'mouseover' prompting (replaces default hard-coded tooltip text)
*''quiet'' //(optional)//<br>normally, when using tag filtering (see below), the number of matching tiddlers is reported and you are asked to confirm before saving those tiddlers to a new file.  Use the ''quiet'' keyword to suppress this confirmation step.
*''open'' //(optional)//<br>Use the ''open'' keyword to auto-open the newly created document file in a separate browser tab/window.
*''tagfilter'' or ''ask'' or ''none''//(optional)//<br>You can use the tag filter parameter to select a subset of tiddlers to be written into the new document file.  If you specify a single tag value, then only tiddlers that are tagged with that value are included in the resulting file.  To use a combination of tag values, you can install [[MatchTagsPlugin]], which provides full 'boolean' logic with AND, OR, and NOT operators, as well as nested parentheses, to create complex expressions for filtering and selecting the desired set of tiddlers.  If you specify the keyword, ''ask'' in place of the tagfilter, you will be prompted to enter a tag or tag expression whenever you click on the 'save as...' command link.  Alternatively, you can specify the keyword, ''none'' in place of the tagfilter to omit all tiddlers and create a new //empty// document.
*By default, when no tag filter parameter is provided, all tiddlers in the document are written to the new file.
<<<

!!!!!Examples
<<<
save all tiddlers:
>{{{<<saveAs>>}}}<br>try it: <<saveAs>>
save only tiddlers matching a single tag:
>{{{<<saveAs "label:create Import/Export starter" ImportExportPackage>>}}}<br>try it: <<saveAs "label:create Import/Export starter" ImportExportPackage>>

save tiddlers matching a complex combination of tags (requires [[MatchTagsPlugin]]):
>{{{<<saveAs (alpha or settings) and not systemConfig>>}}}<br>try it: <<saveAs (alpha or settings) and not systemConfig>>
prompts for tag or tag expression each time:
>{{{<<saveAs "label:custom save as..." ask>>}}}<br>try it: <<saveAs "label:custom save as..." ask>>

<<<
!!!!!Revisions
<<<
2008.09.06 [2.2.1] corrected handling of autoopen attribute so it only applies when "open" param is specified
2008.08.01 [2.2.0] added "open" param to auto-open newly saved document
2008.07.20 [2.1.3] added "quiet" param to bypass confirmation when using tag filter
2008.04.22 [2.1.2] corrected use of getTarget() to check for "user cancelled"
2008.04.22 [2.1.1] documentation fixes
2008.04.22 [2.1.0] added support for tag filtering to completely replace [[NewDocumentPlugin]] (now retired)
2008.04.12 [2.0.1] automatically add "saveAs" to backstage commands
2008.04.12 [2.0.0] initial release based on [[NewDocumentPlugin]]

__Previous revisions from [[NewDocumentPlugin]]__
2008.04.20 [1.8.0] added support for 'noCSS' and 'viewer' params for alternative snapshot output
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info tiddler
2007.12.04 [*.*.*] update for ~TW2.3.0: replaced deprecated core functions, regexps, and macros
2007.03.30 [1.7.0] added support for "print" param as alternative for "snap".  When "print" is used, the filename is ignored and ouput is directed to another browser tab/window, where the print dialog is then automatically triggered.
2007.03.30 [1.6.1] added support for "here" keyword for current tiddler elementID and "prompt:text" param for specifying tooltip text
2007.02.12 [1.6.0] in onClickNewDocument(), reset HTML source 'markup'
2006.10.23 [1.5.1] in onClickNewDocument(), get saved parameter value for snapID instead of using default "contentWrapper" (oops!)
2006.10.18 [1.5.0] new optional param for 'snap'... specify alternative DOM element ID (default is still "contentWrapper").  Based on a suggestion from Xavier Verges.
2006.08.03 [1.4.3] in promptForFilename(), for IE (~WinXP only), added handling for ~UserAccounts.~CommonDialog
2006.07.29 [1.4.2] in onClickNewDocument(), okmsg display is now linked to newly created file
2006.07.24 [1.4.1] in promptForFilename(), check for nsIFilePicker.returnCancel to allow nsIFilePicker.returnOK **OR** nsIFilePicker.returnReplace to be processed.
2006.05.23 [1.4.0] due to very poor performance, support for tag *expressions* has been removed, in favor of a simpler "containsAny()" scan for tags.
2006.04.09 [1.3.6] in onClickNewDocument, added call to convertUnicodeToUTF8() to better handle international characters.
2006.03.15 [1.3.5] added nsIFilePicker() handler for selecting filename in moz-based browsers.  IE and other non-moz browsers still use simple prompt() dialog
2006.03.15 [1.3.0] added "label:text" param for custom link text.  added special "all" filter parameter for "save as..." handling (writes all tiddlers to output file)
2006.03.09 [1.2.0] added special "snap" filter parameter to generate and write "snapshot" files containing static HTML+CSS for currently rendered document.
2006.02.24 [1.1.2] Fix incompatiblity with TW 2.0.5 by removing custom definition of getLocalPath() (which is now part of TW core)
2006.02.03 [1.1.1] concatentate 'extra' params so that tag expressions don't have to be quoted.   moved all text to 'formatted' string definitions for easier translation.
2006.02.03 [1.1.0] added support for tag EXPRESSIONS.  plus improved documentation and code cleanup
2006.02.03 [1.0.0] Created.

<<<
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[SavingEmptyTemplate]]^^<<tiddler CloseThisOpen with: 'Hints and Kinks - Tweaks'  '« back'>>|<<toolbar editTiddler>>» ^^>>
''Remember:''
#When saving an empty template remember that certain original plugins will not be included in the empty template like depreciated functions.
#Shadowed tiddlers cannot be imported
<<forEachTiddler
 where 'tiddler.tags.contains("script") &&

 ! tiddler.tags.contains("css") &&
 ! tiddler.tags.contains("experimental")'
 sortBy 'tiddler.created'
 write "'[['+ tiddler.created.formatString('0DD-MMM-YYYY') + '\n'+'&nbsp; &nbsp;'+'[['+tiddler.title+'|'+tiddler.title+']]\n\n'">>
+++(chkbycreation)*[Sort By Creation Date|show tiddler sorted by
creation date]...
<<<

 <<forEachTiddler
 where 'tiddler.tags.contains("script") &&
 ! tiddler.tags.contains("notthistag") &&
 ! tiddler.tags.contains("=completed")'
 sortBy 'tiddler.created'
 write "'[['+ tiddler.created.formatString('0DD-MMM-YYYY') + '\n'+'&nbsp; &nbsp;'+'[['+tiddler.title+'|'+tiddler.title+']]\n\n'">>

<<<
=== 

+++(chkbymodification)*[Sort By Modification Date|show tiddler sorted
by modification date]...
<<<
 <<forEachTiddler
 where 'tiddler.tags.contains("script") &&
 ! tiddler.tags.contains("notthistag") &&
 ! tiddler.tags.contains("=completed")'
 sortBy 'tiddler.modified'
 write "'[['+ tiddler.modified.formatString('0DD-MMM-YYYY') + '\n'+'&nbsp; &nbsp;'+'[['+ tiddler.title+'|'+tiddler.title+']]\n\n'">>

<<<
=== 
<script label="ScriptDesc" title="create a list of all installed plugins">
	var plugins=window.store.getTaggedTiddlers('script','title');
	var out='|>|>|>|>|>|bgcolor:#abf;color:#006; Script Description |h\n';
out+='|bgcolor:#abf;!Script|bgcolor:#abf;!Modified|bgcolor:#abf;!Size|bgcolor:#abf;!Description|bgcolor:#abf;!Version|bgcolor:#abf;!CoreVersion|h\n|sortable|k\n';
	out+=plugins.map(function(t) {
		return '|'+'[['+t.title+']]'
		+'|'+t.modified.formatString('YYYY.0MM.0DD')
		+'| '+t.text.length
		+'|'+store.getTiddlerSlice(t.title,'Description')
		+'|'+store.getTiddlerSlice(t.title,'Version')
		+'|'+store.getTiddlerSlice(t.title,'CoreVersion')+'|';
	}).join('\n');
	config.shadowTiddlers.ScriptDesc=out;
	story.displayTiddler(null,'ScriptDesc');
	config.shadowTiddlers.ScriptDesc=null;

</script>
<script label="ScriptIdent" title="create a list of all installed plugins">
	var plugins=window.store.getTaggedTiddlers('script','title');
	var out='|>|>|>|>|>|bgcolor:#9ae;!Script Information from Headers|h\n';
out+='|bgcolor:#abf;!Script|bgcolor:#abf;!Modified|bgcolor:#abf;!Size|bgcolor:#abf;!Author|bgcolor:#abf;!Version|bgcolor:#abf;!CoreVersion|h\n|sortable|k\n';
	out+=plugins.map(function(t) {
		return '|'+'[['+t.title+']]'
		+'|'+t.modified.formatString('YYYY.0MM.0DD')
		+'| '+t.text.length
		+'|'+store.getTiddlerSlice(t.title,'Author')
		+'|'+store.getTiddlerSlice(t.title,'Version')
		+'|'+store.getTiddlerSlice(t.title,'CoreVersion')+'|';
	}).join('\n');
	config.shadowTiddlers.ScriptIdent=out;
	story.displayTiddler(null,'ScriptIdent');

</script>
<<forEachTiddler
     where 'tiddler.tags.contains("script")'
     sortBy 'tiddler.title.toLowerCase()'
     write '"|[[" + tiddler.title +"]]" + "|[["+tiddler.text.length+"]]" + "|[[" +tiddler.modified.formatString("YYYY.0MM.0DD") + "]]|"

         + store.getTiddlerSlice(tiddler.title, "Author") + "|"
         + store.getTiddlerSlice(tiddler.title, "Version") + "|"
         + store.getTiddlerSlice(tiddler.title, "CoreVersion")+"|\n"'
     begin '"|sortable|k\n"

         +"|>|>|>|>|>|!Plugin Information from Headers|h\n"
         + "|!Plugin|!Size|!Modified|!Author|!Version|!CoreVersion|h\n"'
 >> 
+++[see script]<<tiddler script>>===<script>place.lastChild.id="panel1"</script>+++[see HTML]<<tiddler html>>===<script>place.lastChild.id="panel2"</script>+++[see CSS]<<tiddler css>>===

<script>
	place.insertBefore(document.getElementById("panel1"),null);
	place.insertBefore(document.getElementById("panel2"),null);
</script>
!!!<<gradient horiz #fc3 #fff>>&nbsp;ScriptTiddlerAttributes^^<<tiddler CloseThisOpen with: Scripts  '« back'>>|<<toolbar editTiddler>>» ^^>>

*Set background and text color
{{{
<script>
   place.style.backgroundColor="#abf"; /* set background color */ 
   place.style.color="#c06"; /* set text color */
</script>
}}}

<script>
      place.style.backgroundColor="#abf"; /* set background color */
      place.style.color="#c06"; /* set text color */

</script> 
<script>
   if (!window.story) window.story=window;
   var title=story.findContainingTiddler(place).id.substr(7);
   return title+" is using a blue background with pink text.";
</script>
<<tabs "" [[Intro ]] "" [[ByTheTagScript]]
[[ByTheTagScript ]] "" [[ByTheTagScript]]
[[BookMarklets ]] "" [[BookMarklets]]
[[ListTiddlersByModifier ]] "" [[ListTiddlersByModifier]]
[[MakeATiddlerScript ]] "" [[MakeATiddlerScript]] 
[[PermalinkList ]] "" [[PermalinkList]]   
[[PrettyPermalinks ]] "" [[PrettyPermalinks]]
[[RegularExpressions ]] "" [[RegularExpressions]]
[[ScriptsDemo ]] "" [[ScriptsDemo(src=)]]
[[ScriptTiddlerAttributes ]] "" [[ScriptTiddlerAttributes]] 
[[ShowLocalDirectory ]] "" [[ShowLocalDirectory]] 
[[TiddlerModifierDate ]] "" [[TiddlerModifierDate]]
[[WriteTiddlersToFile ]] "" [[WriteTiddlersToFile]] 

>>

!!!<<gradient horiz #fc3 #fff>>&nbsp;[[ScriptsDemo|ScriptsDemo(src=)]]^^<<tiddler CloseThisOpen with: JavaScript  '« back'>>|<<toolbar editTiddler>>» ^^>>
Requires: http://www.tiddlytools.com/#InlineJavascriptPlugin
<<<
<script show>

	return "link to current user: [["+config.options.txtUserName+"]]";
</script>
<<<
<<<
<script show>
	if (!window.story) window.story=window;
	var title=story.findContainingTiddler(place).id.substr(7);
	return title+" is using "+store.getTiddlerText(title).length+" bytes";

</script>
<<<
loading a script from a source url:
<<<
<script src="http://www.TiddlyTools.com/demo.js" show>
	return "loading demo.js..."
</script>
<<<

<<<
<script label="click to execute demo() function" key="D" show>
	demo();
	return false;
</script>
<<<
/%
|Name|ScrollBox|
|Source|http://www.TiddlyTools.com/#ScrollBox|
|Version|0.0.0|
|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|transcluded wiki|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|display the contents of a tiddler in a fixed-height scrolling area|
%//%

Usage: <<tiddler ScrollBox with: TiddlerName height>>

%/@@display:block;height:$2;overflow:auto;<<tiddler $1>>@@@@display:block;text-align:right;^^scroll for more...^^@@
!!!<<gradient horiz #fc3 #fff>>&nbsp;ScrollBoxDemo^^<<tiddler CloseThisOpen with: WhatsInATiddler  '« back'>>|<<toolbar editTiddler>>» ^^>>
|Description|display the contents of a tiddler in a fixed-height scrolling area|
|Requires|InlineJavascriptPlugin|
|Requires|ScrollBox|

|width:50%; !Tags | !~ToolsForTiddlyWiki |
|width:50%;<<tiddler ScrollBox with: Tags 400px>>|width:50%;<<tiddler ScrollBox with: ToolsForTiddlyWiki 400px>>|
{{textcenter{
[img[http://img135.imageshack.us/img135/9148/cooplogopb8.jpg]]<html><form id="searchbox_009953271955546518926:sihzqd-xyr0" action="http://www.google.com/cse" target="_blank"><input type="hidden" name="cx" value="009953271955546518926:sihzqd-xyr0" /><input name="q" type="text" size="40" value=" TiddlyWiki " /><input type="submit" name="sa" value="Search" /><input type="hidden" name="cof" value="FORID:0" /></form><script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=searchbox_009953271955546518926%3Asihzqd-xyr0"></script></html>

[img[http://img511.imageshack.us/img511/1281/poweredbyffffffqs2.gif]] ^^Custom Search^^
@@color:#999;~~Include the word ~TiddlyWiki in your search for best results~~@@

}}}
|>|>|>|<<search>> |
|>|>| look for in |>|>|
| <<option chkSearchTitles>> | <<option chkSearchText>> | <<option chkSearchTags>> | <<option chkHoldSearches>> |
| titles |  text  | tags | hold |
var macros =config.macros;
macros.search.label="GO";
|>|>|bgcolor:#fff; @@color:#008; ''Search Help''@@ |
|bgcolor:#FFF;padding:7px;color:#006;The ~TiddlyWiki search function normally looks in both tiddler titles and tiddler body content ('text'). Carefully choosing the search so that it examines only titles or only text, or expanding the search to include text contained in tiddler tags can be very helpful, especially when searching on common words or phrases. |
|>|bgcolor(#8af):@@color(#fff): &nbsp;'' x tiddlers found matching /search criteria/''@@|
|>|>|bgcolor(#E3FFE3):<<search>> <<option chkSearchTitles>> Titles <<option chkSearchText>> Text <<option chkSearchTags>>Tags <<option chkHoldSearches>> Hold |
|bgcolor:#FFF;padding:7px;<<tiddler [[./helpText]]>>|


<<tiddler ListTiddlersBy>>
<part searchTable hidden>
|>|>|>|<<search>>|
|>|>|look for in|>|
| <<option chkSearchTitles>> | <<option chkSearchText>> | <<option chkSearchTags>> | <<option chkHoldSearches>> |
| titles |  text  | tags | hold |
*<<popup [[see hidden tiddlers]] [[<<forEachTiddler where 'tiddler.tags.containsAny(["excludeLists","excludeSearch"])'$))]]>>

</part>
<part helpText hidden>
!!!Hints
*For ''Quick help with preview'' tick only ''tags'' and search for the word ''__help__''
*Ticking ''hold'' saves your search results and ''//silently//'' adds all subsequent searches to the bottom of the results @@color:#C06;''and will continue to do so until it is unchecked.''@@ (so you will have to scroll down to see them) 
*Because of the ''hold^^1^^'' feature //Incremental Searching// (or search as you type facility) has been ''disabled''. 
*Try searching on a blank/empty search box.  It might take a few seconds but it will bring up all tiddlers along with their size and tags so you can get an idea and a feel for what's here.
*Sortable search - the search results are sortable by title, size or tag.
+++[Note (1)] @@color:#C06;The hold feature if used in conjunction with search-as-you-type would cause a separate ''"returned and held"'' result on each letter; creating much clutter.@@===
</part>
!!!SearchHelp
''Here are a few hints about searching.''
<HTML><table align="center" bgcolor="white" padding:1em><tr align="center"><td colspan="3"> @@color:#c03;''Search Help''@@</td></tr><tr align="left" valign="top"><td>|>|>|>|<<search>>|
|>|>|look for in|>|
| <<option chkSearchTitles>> | <<option chkSearchText>> | <<option chkSearchTags>> | <<option chkHoldSearches>> |
| titles |  text  | tags | hold |
*<<popup [[see hidden tiddlers]] [[<<forEachTiddler where 'tiddler.tags.containsAny(["excludeLists","excludeSearch"])'$))]]>></td><td>*When looking for something specific like how to make ''bold'' text then it would most likely be in ''text'' so untick ''titles'' and ''tags''.
*Try searching on a blank/empty search box.  It might take a minute but it will bring up all tiddlers along with tags.  So you can get an idea what's here.
*Ticking ''hold'' saves your search results and adds all subsequent searches to the bottom of the results and will continue to do so until it is unchecked.
*If you consistently get no results go to @@color:  #04b ;''options&raquo;'' @@AdvancedOptions in the right sidebar and make sure RegExpSearch is ticked

</td></tr></table></HTML>
----


/***
|Name|SearchOptionsPlugin|
|Source|http://www.TiddlyTools.com/#SearchOptionsPlugin|
|Documentation|http://www.TiddlyTools.com/#SearchOptionsPluginInfo|
|Version|2.9.2|
|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|Story.prototype.search, TiddlyWiki.prototype.search, config.macros.search.onKeyPress|
|Options|##Configuration|
|Description|extend core search function with additional user-configurable options|
Extend core search function with additional user-configurable options including selecting which data items to search, enabling/disabling incremental key-by-key searches, and generating a ''list of matching tiddler'' instead of immediately displaying all matches.  This plugin also adds syntax for rendering 'search links' within tiddler content to embed one-click searches using pre-defined 'hard-coded' search terms.
!!!!!Documentation
>see [[SearchOptionsPluginInfo]]
!!!!!Configuration
<<<
Search in:
<<option chkSearchTitles>> titles <<option chkSearchText>> text <<option chkSearchTags>> tags <<option chkSearchFields>> fields <<option chkSearchShadows>> shadows

<<option chkSearchList>> Show list of matches
<<option chkSearchListTiddler>> Write list to [[SearchResults]] tiddler
<<option chkIncrementalSearch>> Incremental (key-by-key) searching
<<option chkSearchTitlesFirst>> Show title matches first
<<option chkSearchByDate>> Sort matching tiddlers by date
<<<
!!!!!Revisions

<<<
2008.08.25 [2.9.2] added animation to #searchResults DIV.  Also, DIV is only auto-created if it does not exist ... and when closed, the DIV is simply hidden rather than removed.  This allows custom placement of search results report in the PageTemplate definition.
|please see [[SearchOptionsPluginInfo]] for additional revision details|
2005.10.18 [1.0.0] Initial Release
<<<
!!!!!Code
***/
//{{{
version.extensions.searchOptions = {major: 2, minor: 9, revision: 2, date: new Date(2008,8,25)};

if (config.options.chkSearchTitles===undefined) config.options.chkSearchTitles=true;
if (config.options.chkSearchText===undefined) config.options.chkSearchText=true;
if (config.options.chkSearchTags===undefined) config.options.chkSearchTags=true;
if (config.options.chkSearchFields===undefined) config.options.chkSearchFields=true;
if (config.options.chkSearchTitlesFirst===undefined) config.options.chkSearchTitlesFirst=true;
if (config.options.chkSearchList===undefined) config.options.chkSearchList=true;
if (config.options.chkSearchListTiddler===undefined) config.options.chkSearchListTiddler=false;
if (config.options.chkSearchByDate===undefined) config.options.chkSearchByDate=false;
if (config.options.chkIncrementalSearch===undefined) config.options.chkIncrementalSearch=true;
if (config.options.chkSearchShadows===undefined) config.options.chkSearchShadows=true;
if (config.macros.search.reportTitle==undefined)
	config.macros.search.reportTitle="SearchResults"; // note: not a cookie!
//}}}

//{{{
// searchLink formatter:
// syntax: [search[text to find]] OR [search[text to display|text to find]]
config.formatters.push( {
	name: "searchLink",
	match: "\\[search\\[",
	lookaheadRegExp: /\[search\[(.*?)(?:\|(.*?))?\]\]/mg,
	prompt: "search for: '%0'",
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var label=lookaheadMatch[1];
			var text=lookaheadMatch[2]||label;
			var prompt=this.prompt.format([text]);
			var btn=createTiddlyButton(w.output,label,prompt,
				function(){story.search(this.getAttribute("searchText"))},"searchLink");
			btn.setAttribute("searchText",text);
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
});
//}}}

//{{{
config.macros.search.searchOptions_onKeyPress = config.macros.search.onKeyPress;
config.macros.search.onKeyPress = function(e)
{
	if(!e) var e = window.event;
	if (config.options.chkIncrementalSearch || e.keyCode==13 || e.keyCode==10 || e.keyCode==27)
		config.macros.search.searchOptions_onKeyPress.apply(this,arguments);
}
//}}}

//{{{
Story.prototype.search = function(text,useCaseSensitive,useRegExp)
{
	highlightHack = new RegExp(useRegExp ? text : text.escapeRegExp(),useCaseSensitive ? "mg" : "img");
	var matches = store.search(highlightHack,config.options.chkSearchByDate?"modified":"title","excludeSearch");
	if (config.options.chkSearchByDate) matches=matches.reverse(); // most recent changes first
	var q = useRegExp ? "/" : "'";
	clearMessage();
	if (!matches.length) {
		if (config.options.chkSearchListTiddler) discardSearchResults();
		displayMessage(config.macros.search.failureMsg.format([q+text+q]));
	} else {
		if (config.options.chkSearchList||config.options.chkSearchListTiddler) 
			reportSearchResults(text,matches);
		else {
			var titles = []; for(var t=0; t<matches.length; t++) titles.push(matches[t].title);
			this.closeAllTiddlers(); story.displayTiddlers(null,titles);
			displayMessage(config.macros.search.successMsg.format([matches.length, q+text+q]));
		}
	}
	highlightHack = null;
}
//}}}

//{{{
TiddlyWiki.prototype.search = function(searchRegExp,sortField,excludeTag)
{
	var candidates = this.reverseLookup("tags",excludeTag,false,sortField);

	// scan for matching titles first...
	var results = [];
	if (config.options.chkSearchTitles) {
		for(var t=0; t<candidates.length; t++)
			if(candidates[t].title.search(searchRegExp)!=-1)
				results.push(candidates[t]);
		if (config.options.chkSearchShadows)
			for (var t in config.shadowTiddlers)
				if ((t.search(searchRegExp)!=-1) && !store.tiddlerExists(t))
					results.push((new Tiddler()).assign(t,config.shadowTiddlers[t]));
	}
	// then scan for matching text, tags, or field data
	for(var t=0; t<candidates.length; t++) {
		if (config.options.chkSearchText && candidates[t].text.search(searchRegExp)!=-1)
			results.pushUnique(candidates[t]);
		if (config.options.chkSearchTags && candidates[t].tags.join(" ").search(searchRegExp)!=-1)
			results.pushUnique(candidates[t]);
		if (config.options.chkSearchFields && store.forEachField!=undefined) // requires TW2.1 or above
			store.forEachField(candidates[t],
				function(tid,field,val) {
					if (val.search(searchRegExp)!=-1) results.pushUnique(candidates[t]);
				},
				true); // extended fields only
	}
	// then check for matching text in shadows
	if (config.options.chkSearchShadows)
		for (var t in config.shadowTiddlers)
			if ((config.shadowTiddlers[t].search(searchRegExp)!=-1) && !store.tiddlerExists(t))
				results.pushUnique((new Tiddler()).assign(t,config.shadowTiddlers[t]));

	// if not 'titles first', or sorting by modification date,  re-sort results to so titles, text, tag and field matches are mixed together
	if(!sortField) sortField = "title";
	var bySortField=function (a,b) {if(a[sortField] == b[sortField]) return(0); else return (a[sortField] < b[sortField]) ? -1 : +1; }
	if (!config.options.chkSearchTitlesFirst || config.options.chkSearchByDate) results.sort(bySortField);

	return results;
}
//}}}

//{{{
// SearchResults REPORT GENERATOR

// hijack core <<search>> macro to add "report" and "simple inline" output
config.macros.search.SOP_handler=config.macros.search.handler;
config.macros.search.handler = function(place,macroName,params)
{
	// if "report", use SearchOptionsPlugin report generator for inline output
	if (params[1]&&params[1].substr(0,6)=="report") {
		var keyword=params[0];
		var options=params[1].split("=")[1]; // split "report=option+option+..."

		var heading=params[2]?params[2].unescapeLineBreaks():"";
		var matches=store.search(new RegExp(keyword.escapeRegExp(),"img"),"title","excludeSearch");
		if (matches.length) wikify(heading+window.formatSearchResults(keyword,matches,options),place);
	} else if (params[1]) {
		var keyword=params[0];
		var heading=params[1]?params[1].unescapeLineBreaks():"";
		var seperator=params[2]?params[2].unescapeLineBreaks():", ";
		var matches=store.search(new RegExp(keyword.escapeRegExp(),"img"),"title","excludeSearch");
		if (matches.length) {
			var out=[];
			for (var m=0; m<matches.length; m++) out.push("[["+matches[m].title+"]]");
			wikify(heading+out.join(seperator),place);
		}
	} else
		config.macros.search.SOP_handler.apply(this,arguments);
};

if (!window.reportSearchResults) window.reportSearchResults=function(text,matches)
{
	// create/update the tiddler
	var body=window.formatSearchResults(text,matches);
	if (config.options.chkSearchListTiddler) {
		var title=config.macros.search.reportTitle;
		var who=config.options.txtUserName;
		var when=new Date();
		var tags="excludeLists excludeSearch temporary";
		var tiddler=store.getTiddler(title); if (!tiddler) tiddler=new Tiddler();
		tiddler.set(title,body,who,when,tags);
		store.addTiddler(tiddler);
		story.closeTiddler(title);
		story.displayTiddler(null,title);
		store.notify(title,true);
	} else {
		var sr=document.getElementById("searchResults");
		if (!sr) {
			sr=createTiddlyElement(null,"div","searchResults","tiddler");
			var da=document.getElementById("displayArea");
			da.insertBefore(sr,da.firstChild);
		}
		addClass(sr,"tiddler");
		sr.onmouseover = function(e){ addClass(this,"selected"); }
		sr.onmouseout = function(e){ removeClass(this,"selected"); }
		sr.style.zIndex = "1000";
		removeChildren(sr);
		if (config.macros.moveablePanel) wikify("<<moveablePanel>>",sr); /* see MoveablePanelPlugin */
		var tb=createTiddlyElement(sr,"div",null,"toolbar");
		var b=createTiddlyButton(tb, "open all", "open all matching tiddlers", function() {
				story.displayTiddlers(null,this.getAttribute("list").readBracketedList());
			},"button");
		var list=""; for(var t=0;t<matches.length;t++) list+='[['+matches[t].title+']] ';
		b.setAttribute("list",list);
		var b=createTiddlyButton(tb, "close", "dismiss search results", function() {
				var sr=document.getElementById("searchResults");
				if(!config.options.chkAnimate) {
					sr.style.display="none";
					removeChildren(sr);
				} else {
					var s=new Slider(sr,false,false,"children");
					anim.startAnimating(s);
				}
			}, "button");
		createTiddlyText(createTiddlyElement(sr,"div",null,"title"),"Search Results");
		wikify(body,createTiddlyElement(sr,"div",null,"viewer"));
		if (sr.style.display!="block") {
			if(!config.options.chkAnimate)
				sr.style.display="block";
			else {
				var s=new Slider(sr,true,false,"none");
				s.callback=function(e,p){e.style.overflow="visible";}
				anim.startAnimating(s);
			}
		}
		window.scrollTo(0,ensureVisible(sr));
	}
}

if (!window.formatSearchResults) window.formatSearchResults=function(text,matches,opt)
{
	var title=config.macros.search.reportTitle
	var q = config.options.chkRegExpSearch ? "/" : "'";
	var body="";
	if (!opt) var opt="all";
	var parts=opt.split("+");
	for (var i=0; i<parts.length; i++) { var p=parts[i].toLowerCase();
		if (p=="summary"||p=="all")
			body+=window.formatSearchResults_summary(text,matches);
		if (p=="list"||p=="all")
			body+=window.formatSearchResults_list(text,matches);
		if (p=="buttons"||p=="all")
			body+=window.formatSearchResults_buttons(text,matches);
		if (p=="again"||p=="all")
			body+=window.formatSearchResults_again(text,matches);
	}
	return body;
}

if (!window.formatSearchResults_summary) window.formatSearchResults_summary=function(text,matches)
{
	// summary: nn tiddlers found matching '...', options used
	var title=config.macros.search.reportTitle
	var q = config.options.chkRegExpSearch ? "/" : "'";
	var body="";
	body+="''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''\n";
	body+="^^//searched in:// ";
	body+=(config.options.chkSearchTitles?"''titles'' ":"");
	body+=(config.options.chkSearchText?"''text'' ":"");
	body+=(config.options.chkSearchTags?"''tags'' ":"");
	body+=(config.options.chkSearchFields?"''fields'' ":"");
	body+=(config.options.chkSearchShadows?"''shadows'' ":"");
	if (config.options.chkCaseSensitiveSearch||config.options.chkRegExpSearch) {
		body+=" //with options:// ";
		body+=(config.options.chkCaseSensitiveSearch?"''case sensitive'' ":"");
		body+=(config.options.chkRegExpSearch?"''text patterns'' ":"");
	}
	body+="^^\n";
	return body;
}

if (!window.formatSearchResults_list) window.formatSearchResults_list=function(text,matches)
{
	// bullet list of links to matching tiddlers
	var body="";
	for(var t=0;t<matches.length;t++) {
		var date=config.options.chkSearchByDate?(matches[t].modified.formatString('YYYY.0MM.0DD 0hh:0mm')+" "):"";
		body+="* "+date+"[["+matches[t].title+"]]\n";
	}
	return body;
}

if (!window.formatSearchResults_buttons) window.formatSearchResults_buttons=function(text,matches)
{
	// embed buttons only if writing SearchResults to tiddler
	if (!config.options.chkSearchListTiddler) return "";

	// open all matches button
	var body="";
	var title=config.macros.search.reportTitle;
	body+="@@diplay:block;<html><input type=\"button\" href=\"javascript:;\" ";
	body+="onclick=\"story.displayTiddlers(null,["

	for(var t=0;t<matches.length;t++)
		body+="'"+matches[t].title.replace(/\'/mg,"\\'")+"'"+((t<matches.length-1)?", ":"");
	body+="],1);\" accesskey=\"O\" value=\"open all matching tiddlers\"></html> ";

	// discard search results button
	body+="<html><input type=\"button\" href=\"javascript:;\" ";
	body+="onclick=\"discardSearchResults()\" value=\"discard "+title+"\"></html>";
	body+="@@\n";
	return body;
}

if (!window.formatSearchResults_again) window.formatSearchResults_again=function(text,matches)
{
	var title=config.macros.search.reportTitle
	var body="";
	// search again
	body+="!!!Search again:\n";
	body+="<<search \""+text+"\">>\n";
	body+="<<option chkSearchTitles>>titles ";
	body+="<<option chkSearchText>>text ";
	body+="<<option chkSearchTags>>tags";
	body+="<<option chkSearchFields>>fields";
	body+="<<option chkSearchShadows>>shadows";
	body+="<br>";
	body+="<<option chkCaseSensitiveSearch>>case-sensitive ";
	body+="<<option chkRegExpSearch>>text patterns";
	body+="<<option chkSearchByDate>>sort by date";
	body+="<br>";
	return body;
}


if (!window.discardSearchResults) window.discardSearchResults=function()
{
	// remove the tiddler
	story.closeTiddler(config.macros.search.reportTitle);
	store.deleteTiddler(config.macros.search.reportTitle);
	store.notify(config.macros.search.reportTitle,true);
}
//}}}
|>|>|bgcolor:#abf; @@color:#00f;<html><span title="Clicking Home in the mainmenu returns you here" style="cursor:help; color:#000;">Welcome to TW Help Home</span></html>@@ |bgcolor:#abf; ^^<<tiddler [[EmailTWHelp]]>> @@color:#ff00ff;|@@ [[Help with Search|SearchHelp]]^^|>|
|>|>|>|>|white-space:nowrap;bgcolor:#eff;padding-right:1em;padding-top:2px;padding-bottom:2px;<<search>> @@color:#04b;font-weight:normal;&nbsp; goto ''&raquo;'' @@<<gotoTiddler>> |
|>|>|>|>|bgcolor:#abf;line-height:5pt; &nbsp;|
|>|>|>|>|bgcolor:#eff;padding-right:1em;font-size:8pt; search in <<option chkSearchTitles>> Titles <<option chkSearchText>> Text <<option chkSearchTags>>Tags <<option chkHoldSearches>> Hold |
|>|>|>|>|bgcolor:#8af;font-size:8pt;text-align:center;@@color:#fff;&laquo; &laquo; @@@@color:#FFF;Try the left Menu@@ |
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[SectionLinks]]^^<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>

*Requires core tweak 784 [[CoreTweaksTW2.4.0]]

You can currently use the tiddler section syntax within the {{{<<tiddler>>}}} macro to //transclude// a subsection of one tiddler into another (e.g., {{{<<tiddler SomeTiddler##SomeSection>>}}}).  However, when the same section syntax is used in a TiddlyLink (e.g., {{{[[SomeTiddler##SomeSection]]}}}), the entire reference is treated as a link to a (non-existent) tiddler that includes the section reference in the tiddler title itself.

This tweak extends the TiddlyLink processing to separate the section reference from the tiddler name and use that reference to auto-scroll to the indicated section heading (if present) within that tiddler (i.e., the same behavior as {{{<a name="foo">}}} and {{{<a href="#foo">...</a>}}} HTML syntax).  

Section equivalent {{{[[Go to Photo|##Photo]]   [[Back to Video|##Video]]}}}

''Example''
{{{
[[Go to Photo|##Photo]]
!!Video

<html><div align="center"> <object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/83TgQykJHBI&hl=en&fs=1&amp;autoplay=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/83TgQykJHBI&hl=en&fs=1&amp;autoplay=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></div></html>

}}}
Allows jumping back and forth within a tiddler
{{{
!!Photo
[[Back to Video|##Video]]
[img[http://img212.imageshack.us/img212/5439/abarthzagatoxv3.jpg]]
}}}

The plugin also adds a macro that generates a "Table of Contents"-style numbered-bullet list with links to all sections within the current tiddler. Simply place the following macro at the end of the tiddler content (or at least following all section headings):

http://www.tiddlytools.com/#SectionLinksPlugin
<<tiddler EmbedTiddlers with: =sectiondemo sortby>>
''Table heading links to w3schools references on this subject.''
|>|>| ![[Selectors|http://www.w3schools.com/css/css_syntax.asp]] |
| ''Selector'' | ''Sample'' | ''Description'' |
| tag | H1 { color: blue ; } |Selects all of the specified HTML tags |
| class | .myClass { color: blue; } |Selects all HTML tags with the attribute class="myClass" specified |
| ID | #tag56 { color: blue; } |Selects the single HTML tag with the attibute ID="tag56" specified |
| Grouping | H1, H2, H3 { color: blue ; } | selects all specified selectors (tags, class, or ID can be specified) |
| Contextual | H1 B { color: red; } |selects all 'B' tags in H1. Context selectors can be tag, class, or ID selectors |
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;Open in a new window[img[Open outside link in a new window|http://img229.imageshack.us/img229/1687/extlink7226466sx5.gif][http://www.tiddlywiki.org/wiki/Server-Side_Solutions]]|
----
<html><div align="center"><iframe  src ="http://www.tiddlywiki.org/wiki/Server-Side_Solutions" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
----
&darr;+++[Create a tiddler like this:]
----
@@color(#C06):&nbsp;''Title:''@@<html><input type="text" size="40" value="Set AutoSave" /></html>

@@color(#00f):''Body:''@@<html><textarea rows="10" cols="30">config.options.chkAutoSave = true; </textarea>  </html>
@@color(#0a0):''Tags:''@@<html><input type="text" size="40" value="systemConfig " /></html>

===

----

/%
|Name|SetTiddlerColumns|
|Source|http://www.TiddlyTools.com/#SetTiddlerColumns|
|Version|1.0.0|
|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|script|
|Requires||
|Overrides||
|Description|use CSS3 "-moz-column-count" to set single or multi-column tiddler layout|

usage: <<tiddler SetTiddlerColumns>>

credits: Much thanks to "maki" (www.makiaea.org) for pointing out the -moz-column-* attributes.
Important note: these CSS3 features are not supported in InternetExplorer.

%/<script>

	// init option value (as needed) and set CSS3 column attribute on tiddlerDisplay/storyDisplay
	if (config.options.txtTiddlerColumns==undefined) config.options.txtTiddlerColumns="1";
	var td=document.getElementById("tiddlerDisplay");  // for TW2.1.x and earlier
	if (!td) td=document.getElementById("storyDisplay");  // for TW2.2+
	td.style.MozColumnCount=config.options.txtTiddlerColumns;
</script># of tiddler columns: {{smallform{<<option txtTiddlerColumns>><script>
	var t=place.lastChild
	t.style.width="2em";
	t.value=config.options.txtTiddlerColumns;
	if (config.browser.isIE) {
		t.disabled=true;
		t.value=1;
		t.title="Sorry, multiple column tiddler display is not supported in Internet Explorer";
		return;
	}
	// hijack onchange for this field so CSS can be updated on the fly
	t.coreOnChange=t.onchange;
	t.onchange=function() {
		// call original core onchange handler
		if (this.coreOnChange) this.coreOnChange();
		// set CSS3 column attribute
		var td=document.getElementById("tiddlerDisplay");  // for TW2.1.x and earlier
		if (!td) td=document.getElementById("storyDisplay");  // for TW2.2+
		td.style.MozColumnCount=this.value;
		// sync any option field that is showing txtTiddlerColumns value
		var nodes = document.getElementsByTagName("input");
		for(var t=0; t<nodes.length; t++) 
			if(nodes[t].getAttribute("option")=="txtTiddlerColumns") nodes[t].value=this.value;
	};

</script>}}}
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;ShadowTiddlers^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>
''You can find shadow tiddlers listed in the tabs in the right margin under More>Shadowed or you can see them''+++^35em^[here.]
<<tiddler ListShadowed>>

===


@@color:#080;Etiam capillus unus habet umbram.@@@@color:#c06;^^[1]^^@@

@@color(#00F):''Shadow tiddler''@@ is a misnomer if there ever was one, I suppose they are so named because they are lurking in the shadows.  Shadow tiddlers are simply tiddlers built into the core of ~TiddlyWiki.  They are hard-coded into ~TiddlyWiki to provide the basic structure for a ready to use ~TiddlyWiki.

''If you call up a shadow tiddler and modify it'' you are only modifying a copy of it which supplants the original that remains unchanged in the core of ~TiddlyWik.

''So in reality if you modify a shadow tiddler you are only modifyng a pseudo-shadow-tiddler that has the same name as a shadow tiddler''. The pseudo-tiddler takes the place of the shadow tiddler once you start modifying it.  The core tiddler always remains the same. You can modify the pseudo-tiddler all you want but if something goes wrong simply deleting the pseudo-tiddler will cause a default to the core value. 

Shadow tiddlers cannot be deleted and probably should be understood to be ''default tiddlers''.  Unfortunately [[DefaultTiddlers|AboutDefaultTiddlers]] is reserved for the tiddlers that are designated to load when ~TiddlyWiki first starts.

@@color:#c06;^^[1]^^@@@@color:#080;Even one hair has a shadow.@@
 


/%
|Name|ShiftClickToEdit|
|Source|http://www.TiddlyTools.com/#ShiftClickToEdit|
|Version|1.0.0|
|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|script|
|Requires||
|Overrides|tiddler background click and doubleclick handler|
|Description|replace tiddler double-click-to-edit with shift-click-to-edit|

Usage:
	in tiddler content:
		<<tiddler ShiftClickToEdit>>
	in ViewTemplate:
		<span macro="tiddler ShiftClickToEdit"></span>
%/


<script>

	var here=story.findContainingTiddler(place); if (!here) return;
	if (here.ondblclick) {
		here.save_dblclick=here.ondblclick;
		here.ondblclick=null;
		here.onclick=function(e) {
			var ev=e?e:window.event;
			if (ev.shiftKey) here.save_dblclick.apply(this,arguments);
		}
	}
</script>
{{{
Usage:
	in tiddler content:
		<<tiddler ShiftClickToEdit>>
	in ViewTemplate:
		<span macro="tiddler ShiftClickToEdit"></span>
}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;ShowLocalDirectory^^<<tiddler CloseThisOpen with: NavigationWithTW  '« back'>>|<<toolbar editTiddler>>» ^^>>
|[img[http://img129.imageshack.us/img129/2990/alerttrianglejl9.gif]]|bgcolor:#fcf;vertical-align:middle;Note: This will only work when the ~TiddlyWiki is located on a drive on your computer.|
*This code shows the contents of the local directory on the drive that contains it.
<<slider "showDirectory" "ShowLocalDirectoryScript" "See it here" "See it here">>

----
/%
|Name|ShowLocalDirectory|
|Source|http://www.TiddlyTools.com/#ShowLocalDirectory|
|Version|1.1.0|
|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|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|view local filesystem directory listings|

usage: <<tiddler ShowLocalDirectory>> or <<tiddler ShowLocalDirectory with: localpath format>>

where:
	"localpath" is the desired directory to view, using system-specific file naming conventions,
	or keyword "here" to view the current document directory.
and
	"format" is a keyword that determines the type of output produced, and is one of:
		"plain"

			show fully-qualified path/filenames AS-IS, without any additional formatting.
		"list"
			show fully-qualified path/filenames using formatted "PrettyLinks", so that the
			local system-specific filename can be *displayed* while linking to a valid
			system-independent "file:" URL for browser navigation.
		"directory" (default when no parameter)
			show header followed by a formatted table, containing PrettyLinks for
			filenames, filesizes (in bytes), and modification dates, plus a summary
			footer reporting the total file and byte counts.

%/<script>

	// FILESYSTEM/FOLDER UTILITY FUNCTIONS

	window.getCurrentFolder=function() {
		var h=document.location.href;
		return getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf("/")+1)));
	}

	window.getParentFolder=function(cwd) {
		var lastchar=cwd.substr(cwd.length-1,1);
		if (lastchar=="/" || lastchar=="\\") cwd=cwd.substr(0,cwd.length-1);
		var pos=cwd.lastIndexOf("/"); if (pos==-1) pos=cwd.lastIndexOf("\\");
		return pos!=-1?cwd.substr(0,pos+1):null;
	}

	window.askForFolder=function(cwd) {
		if (config.browser.isIE) {
			try { // XPSP2 IE only --   // TBD: use "browserForFolder" instead of "select a file"

				var s = new ActiveXObject('UserAccounts.CommonDialog');
				s.InitialDir=cwd.replace(/\//g,"\\");
				s.FileName=''; s.Filter='All files|*.*|'; s.FilterIndex=1;
				var path=s.showOpen()?s.FileName.substr(0,s.FileName.lastIndexOf("\\")+1):null;
			}
			catch(e) { var path=prompt("Enter a directory path:",cwd.replace(/\//g,"\\"));	}
		} else { // FireFox
			// get security access
			if(!window.Components) return;
			try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
			catch(e) { alert(e.description?e.description:e.toString()); return; }
			// prompt to select a different folder
			var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
			var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
			picker.init(window, "Select a folder", nsIFilePicker.modeGetFolder);
			var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
			// if starting directory is not valid, use current document directory
			try { thispath.initWithPath(cwd.replace(/\\/g,"/")); }
			catch(e) { thispath.initWithPath(getLocalPath(decodeURIComponent(document.location.href.substr(0,document.location.href.lastIndexOf("/")+1)))); }
			picker.displayDirectory=thispath;
			picker.appendFilters(nsIFilePicker.filterAll); picker.defaultString=''; picker.defaultExtension=''; 
			var path=picker.show()!=nsIFilePicker.returnCancel?picker.file.persistentDescriptor:null;
		}
	}


	window.getFileList=function(cwd) { // return browser-independent array of file info (path,name,size,isFolder,url,modified)
		var files=[];
		if (config.browser.isIE) {
			cwd=cwd.replace(/\//g,"\\");
			// IE uses ActiveX to read filesystem info
			var fso = new ActiveXObject("Scripting.FileSystemObject");
			if(!fso.FolderExists(cwd)) return [];
			var dir=fso.GetFolder(cwd);
			for(var f=new Enumerator(dir.SubFolders); !f.atEnd(); f.moveNext())
				files.push({ path:f.item().path, name:f.item().name, size:f.item().size,
					url:"file:///"+f.item().path.replace(/\\/g,"/"), isFolder:fso.FolderExists(f.item().path),
					modified:new Date(f.item().DateLastModified).formatString("YYYY.0MM.0DD 0hh:0mm:0ss")});
			for(var f=new Enumerator(dir.Files); !f.atEnd(); f.moveNext())
				files.push({ path:f.item().path, name:f.item().name, size:f.item().size,
					url:"file:///"+f.item().path.replace(/\\/g,"/"), isFolder:fso.FolderExists(f.item().path),
					modified:new Date(f.item().DateLastModified).formatString("YYYY.0MM.0DD 0hh:0mm:0ss")});
		} else {
			// FireFox (mozilla) uses "components" to read filesystem info
			// get security access
			if(!window.Components) return;
			try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
			catch(e) { alert(e.description?e.description:e.toString()); return null; }
			// open/validate directory
			var file=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
			try { file.initWithPath(cwd); } catch(e) { return []; }
			if (!file.exists() || !file.isDirectory()) { return []; }
			var folder=file.directoryEntries;
			while (folder.hasMoreElements()) {
				var f=folder.getNext().QueryInterface(Components.interfaces.nsILocalFile);
				if (f instanceof Components.interfaces.nsILocalFile)
					files.push({path:f.path, name:f.leafName, size:f.fileSize,
						isFolder:f.isDirectory(), url:"file:///"+f.path.replace(/\\/g,"/"),
						modified:new Date(f.lastModifiedTime).formatString("YYYY.0MM.0DD 0hh:0mm:0ss")});
			}
		}
		return files;
	}


</script>{{hidden small{
<script label="select a folder...">
	var path=askForFolder(config.options.txtLocalDirectory);
	if (path) { // not cancelled by user...
		config.options.txtLocalDirectory=path;
		story.refreshTiddler(story.findContainingTiddler(place).getAttribute("tiddler"),null,true);
	}
	return false;
</script> | <script label="use document location...">
	config.options.txtLocalDirectory=getCurrentFolder();
	story.refreshTiddler(story.findContainingTiddler(place).getAttribute("tiddler"),null,true);
	return false;

</script> | <script label="refresh list...">
	story.refreshTiddler(story.findContainingTiddler(place).getAttribute("tiddler"),null,true);
	return false;
</script>
----
}}}<script>
	// default to current location if not already set
	if (config.options.txtLocalDirectory==undefined) config.options.txtLocalDirectory=getCurrentFolder();
	// get working directory from tiddler params (if specified)
	var cwd=config.options.txtLocalDirectory; // use current selected directory
	if ("$1"=="$"+"1") place.lastChild.style.display="block"; // show interactive 'select a folder' commands
	else if ("$1".toLowerCase()=="here") cwd=getCurrentFolder(); // "here" = use document directory
	else cwd="$1"; // use path param as specified
	// get file list
	var files=getFileList(cwd);
	if (!files.length) { // directory could not be read, maybe relative... try again...
		var fixup=getCurrentFolder()+cwd;
		var files=getFileList(fixup);
		if (!files.length) return "{{errorButton{error: can't open "+cwd+"}}}";
		else cwd=fixup;
	}
	// set output formats
	var header=""; var item=""; var folderitem=""; var folderscript=""; var footer="";
	switch ("$2") {
		case "plain": item=folderitem="<nowiki>%0</nowiki>\n"; break;
		case "list": item=folderitem="[[%1|file:///%0]]\n"; break;
		default:
			var header="Index of %0\n^^(as of %1)^^\n|filename&nbsp;&nbsp;| size&nbsp;&nbsp;|modified|h\n";
			var item="|[[%1|%2]]&nbsp;&nbsp;| %3&nbsp;&nbsp;|%4|\n";
			// script for opening another directory via embedded link
			var folderscript='<'+'script label="%1" title="open %1...">';
			folderscript+='		config.options.txtLocalDirectory="%0";';
			folderscript+='		story.refreshTiddler(story.findContainingTiddler(place).getAttribute("tiddler"),null,true);';
			folderscript+='		return false;';
			folderscript+='	</'+'script>';
			var folderitem='|'+folderscript+'&nbsp;&nbsp;| |%4|\n';
			var footer="|>|>|>| !Total of %0 bytes in %1 files |f\n|borderless sortable|k\n";
			var showDirectory=true;
			break;
	}
	// generate header (if any)
	var out=header.format([cwd,new Date().toLocaleString()]);
	// add "parent folder" (if any) - for directory listings
	if (showDirectory) { 
		var p=getParentFolder(cwd);
		if (p) files.unshift({path:p, name:"(parent folder)", size:0, isFolder:true, url:"file:///"+p.replace(/\\/g,"/"),
			modified:new Date().formatString("YYYY.0MM.0DD 0hh:0mm:0ss")});
	}
	// for each file, generate a line item (and add up total size)
	var total=0;
	for (var i=0; i<files.length; i++) {
		var line=(files[i].isFolder?folderitem:item).format([files[i].path,files[i].name,files[i].url,files[i].size,files[i].modified]);
		if (showDirectory) line=line.replace(/\\/g,"\\\\"); // fixup for PC-style file paths embedded in 'folderscript'
		if (!files[i].isFolder) total+=files[i].size;
		out+=line;
	}
	// generate the summary (if any)
	out+=footer.format([total,files.length]);
	return out;

</script>
 <script>

var tidTitle = "titlkokkooe";
		// Kill re-refresh cycle if tiddler closed or edited
		var tidElem = document.getElementById(story.idPrefix + tidTitle);  // DON'T GET CUTE! THIS IS CORRECT!
		


if (!window.story) window.story=window;

var tidElem = document.getElementById(story.idPrefix + tidTitle);
var url=store.getTiddlerText("SiteUrl");
var title=story.findContainingTiddler(place).id.substr(7);
var permalink=encodeURIComponent(String.encodeTiddlyLink(title));
return "[img[Right click to Bookmark or Copy this tiddler Location|http://img117.imageshack.us/img117/6453/socialbookmarkiconcb4.gif]["+url+"#"+permalink+tidTitle+"]]";

</script>
/%
|Name|ShowRelatedTiddlers|
|Source|http://www.TiddlyTools.com/#ShowRelatedTiddlers|
|Version|1.0.0|
|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|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|starting from a selected tiddler, display a list and/or tree of linked or transcluded tiddlers|

%/{{smallform{<html><form action="javascript:;" style="display:inline"><!--
	--><select name=list size=1 style="width:69.5%" 
		onchange="var f=this.form; f.get.disabled=!this.value.length; removeChildren(f.parentNode.nextSibling); f.done.disabled=true; if (!this.value.length) return; var out=window.showRelatedTiddlers(this.value); wikify(out,f.parentNode.nextSibling); f.done.disabled=false;"><!--
	--><option value="">find all tiddlers related to...</option>

	--></select><!--
	--><input type=button name=refresh value='refresh' style="width:10%" 
		onclick="var f=this.form; var list=f.list; while (list.options[1]) list.options[1]=null; var tids=store.getTiddlers('title','excludeLists'); for (i=0; i<tids.length; i++) list.options[list.length]=new Option(tids[i].title,tids[i].title,false,false); list.selectedIndex=0; f.get.disabled=true; f.done.click();"><!--
	--><input type=button name=get value='get related' disabled style="width:10%" 
		onclick="var f=this.form; var list=f.list; var out=window.showRelatedTiddlers(list.value); removeChildren(f.parentNode.nextSibling); wikify(out,f.parentNode.nextSibling); f.done.disabled=false;"><!--
	--><input type=button name=done value='done' disabled style="width:10%" 
		onclick="removeChildren(this.form.parentNode.nextSibling); this.disabled=true;"><!--
--></form></html><script>

	// initialize tiddler list
	place.lastChild.firstChild.refresh.click();
	// adjust blockquote style to eliminate top/bottom margin
	setStylesheet(".relatedTiddlers blockquote { margin-top:0; margin-bottom:0; }","ShowRelatedTiddlers_styles");

	// when a tiddler is selected, recursively find and generate array of related tiddlers and tree view output
	window.showRelatedTiddlers = function(start) {

		// recursively build list of related tids and treeview output
		function findRelatedTiddlers(tid,tids,level) {
			var t=store.getTiddler(tid);
			if (t || store.isShadowTiddler(tid)) treeview+=level+" [["+tid+"]]\n";
			if (!t || tids.contains(tid)) return tids;
			tids.push(t.title);
			if (!t.linksUpdated) t.changed();
			if (t.links.length) for (var i=0; i<t.links.length; i++) if (t.links[i]!=tid) tids=findRelatedTiddlers(t.links[i],tids,level+">");
			return tids;
		}

		// get related tiddlers
		var treeview=listview="";
		var tids=findRelatedTiddlers(start,[],"");
		tids.shift(); // remove self from list
		var listview="[["+tids.sort().join("]], [[")+"]]";

		// generate output
		var out="";
		if (tids.length) {
			out+="+++(ShowRelatedTiddlers_TreeView){{floatright button{[tree view]}}}...";
			out+="\n----\n";
			out+="{{relatedTiddlers{\n"+treeview+"}}}===";
			out+="<"+"script>place.lastChild.id='ShowRelatedTiddlers_treeview';</"+"script>";
			out+="{{floatright{ | }}}";
			out+="++++(ShowRelatedTiddlers_ListView){{floatright button{[list view]}}}...";
			out+="\n----\n";
			out+="{{fine wrap{\n"+listview+"}}}===";
			out+="<"+"script>place.lastChild.id='ShowRelatedTiddlers_listview';</"+"script>";
		}
		out+=!tids.length?"There are no tiddlers":(tids.length+" tiddler"+(tids.length==1?" is":"s are"));
		out+=" related to: [["+start+"]]\n";
		if (tids.length) {
			out+="<"+"script>place.insertBefore(document.getElementById('ShowRelatedTiddlers_listview'),null);</"+"script>"

			out+="<"+"script>place.insertBefore(document.getElementById('ShowRelatedTiddlers_treeview'),null);</"+"script>"
		}
		return out;
	}
</script>@@display:block;@@}}}<<tiddler HideTiddlerTags>>
{{smallform{
<script>

	// hijack store.setDirty() function (force display update after saving the file)
	if (TiddlyWiki.prototype.showUnsavedHijack_setDirty==undefined) {
		TiddlyWiki.prototype.showUnsavedHijack_setDirty=TiddlyWiki.prototype.setDirty;
		TiddlyWiki.prototype.setDirty = function(flag) {
			var refresh=this.isDirty() && !flag; // 'dirty' to 'clean', force a refresh...
			this.showUnsavedHijack_setDirty(flag); // but change the flag first.
			if (refresh) {
				config.options.lastSaved=new Date(); // remember save time
				refreshDisplay(); // finally, update the display
			}
		}
	}

	// get the tiddlers sorted by date - INCLUDE ALL TIDDLERS (even hidden ones!!)
	var tiddlers=store.getTiddlers("modified");

	// track date/time of last file save (initialize to last tiddler change)
	if (config.options.lastSaved==undefined)
//		config.options.lastSaved=new Date(document.lastModified);
		config.options.lastSaved=tiddlers[tiddlers.length-1].modified;

	// If no tiddlers have changed, DO NOTHING.
	if (tiddlers[tiddlers.length-1].modified<=config.options.lastSaved) return;

	// find the unsaved tiddlers
	var count=0; var list="";
	var item='<option value="%0">%1 - %0</option>';
	for (var i=tiddlers.length-1; i>=0; i--) {
		if (tiddlers[i].modified<=config.options.lastSaved) break;
		list+=item.format([tiddlers[i].title,
			tiddlers[i].modified.formatString('0hh:0mm')]);
		count++;
	}
	// display the dropdown list wrapped in a slider
	var out='';
	var label='There %0 %1 unsaved tiddler%2...'.format([count==1?'is':'are',count,count==1?'':'s'])
	out+='+++(unsaved)['+label+'|show/hide a list of changed tiddlers]...';
	out+='<html><form style="display:inline;">';
	out+='<select size="1" name="list" title="select a tiddler to view" ';
	out+='	onchange="var v=this.value; if (!v.length) return;';
	out+='		story.displayTiddler(null,v);';
	out+='		window.scrollTo(0,ensureVisible(document.getElementById(story.idPrefix+v)));">';
	out+=list;
	out+='</select>';
	out+='<br><input type="button" value="goto"';
	out+='	onclick="var v=this.form.list.value; if (!v.length) return; story.displayTiddler(null,v);';
	out+='	var t=document.getElementById(story.idPrefix+v); if (t) window.scrollTo(0,ensureVisible(t));">';
	out+='<input type="button" value="revert" title="import the last saved version of this tiddler"';
	out+='	onclick="var v=this.form.list.value; if (!v.length) return;';
	out+='	var t=\'<\'+\'<loadTiddlers [[tiddler:\'+v+\']] \'+document.location.href+\' confirm force>\'+\'>\';';
	out+='	var e=document.getElementById(\'executeRevert\'); if (e) e.parentNode.removeChild(e);';
	out+='	e=document.createElement(\'span\'); e.id=\'executeRevert\'; wikify(t,e);">';
	out+='</form></html>';
	out+='<'+'script>place.lastChild.style.fontWeight="normal"</'+'script>';
	out+='===';
	return out;

</script>}}}
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|file:///D:/sis/dictionary.htm]]&nbsp;&raquo;|
}}}<html><div align="center"><iframe src ="file:///D:/sis/dictionary.htm" width="100%" align="center" height="600"></iframe></div></html>
|>|>|>|+++[Go to tiddler »]<<gotoTiddler search "display:block" "width:11em">>===|
|>|>|>|<<search>> |
|>|>|{{unboldlink{[[look for in|NewPathFinder]]}}} |>|>|
| <<option chkSearchTitles>> | <<option chkSearchText>> | <<option chkSearchTags>> | <<option chkHoldSearches>> |
| titles |  text  | tags | hold |
|borderlessL0|k
----

<<permaview>><<tiddler MakeTiddlers>>{{locLink{<<tiddler ShowUnsavedChanges>>}}}<<doBackup>><<saveChanges>>+++[QuickView »]<<tiddler RefreshStyles>>
|>|>|>|<<popup [[quick edit]] [[<<forEachTiddler where 'tiddler.tags.containsAny(["quickedit"])'$))]]>> |
|>|>|>|<<popup [[hidden tiddlers]] [[<<forEachTiddler where 'tiddler.tags.containsAny(["excludeLists","excludeSearch"])'$))]]>> |
|>|>|>|<<popup [[systemConfig tiddlers]] [[<<forEachTiddler where 'tiddler.tags.containsAny(["systemConfig"])'$))]]>> |
===+++[TspotControls »]
Upload Password: <<option pasUploadPassword>>

<<upload http://twhelp.tiddlyspot.com/store.cgi  index.html . .  twhelp>>
<html><a href="http://tiddlyspot.com/?action=download&site=twhelp" target="_blank">download from server</a></html>
[[control panel|http://tiddlyspot.com/twhelp/controlpanel.cgi?]]
[[Tspot FAQ|http://faq.tiddlyspot.com/]]
[[Comment Control|http://www.haloscan.com/members/posts.php]]
[[StatCounter|http://my2.statcounter.com/project/]]
===<<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>><<slider chkAdvancedOptions AdvancedOptions 'AdvancedOptions »' 'AdvancedOptions'>>
@@padding:0.3em;@@<<slider chkSliderSideBarTabs SideBarTabsSlider 'index »' 'tiddlers, timeline, all, tags'>>


{{doubleborder textcenter{
[img[http://img260.imageshack.us/img260/4586/bookmarkad3qq2.gif][http://theultimatebookmark.tiddlyspot.com]]
}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;SideBarTabsScroll^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>

You can limit the length and width of SideBarTabs and cause them to scroll by putting the following code in StyleSheet.

{{{
#sidebarTabs .tabContents {
	max-height: 35em; /* not IE6-compatible */
	overflow: auto;
	width: 92.5%;
}

#sidebarTabs .tabContents .tabContents {
	max-height: 30em !important; /* not IE6-compatible */
}

}}}
<<tabs MainTab Timeline 'Timeline' TabTimeline All 'All tiddlers' TabAll "Shadowed" "Shadowed tiddlers" TabMoreShadowed  Tags 'All tags' TabTags  "Missing" "Missing" TabMoreMissing "Orphans" "Orphaned" TabMoreOrphans >>
{{borderless{
[[Open in a new window|http://groups.google.com/group/sidebarnews?lnk=li]]
----
<html><div align="center"><iframe  src ="http://groups.google.com/group/sidebarnews?lnk=li" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
<<slider txtMainTabSlider SideBarTabsSlider 'tabs »' 'tiddlers, timeline, all, tags, and more'>>
/***
!!!SimonsNiceTable /%==================================================%/
***/

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

.niceTable td, .niceTable th, .niceTable tr {
  border-style:none;
}

.niceTable td, .niceTable th {
  vertical-align:top;
  padding:0.5em;
}

.niceTable table {
  border:1px #aaa solid;
  background-color:#f8f8f8;
}

.niceTable td img {
  border:1px solid #555;
  text-align:center;
  margin:0 1em 1em 0;
}

.niceTable th {
  background-color:#f8f8f8;
  color:#555;
  font-size:90%;
  font-weight:bold;
  text-align:right;
}
Now view real math formulas in ~TiddlyWiki with outboard equation machine.

http://doc.yourequations.com/index.html#about
-------------
[img[http://www.yourequations.com/eq.latex?$$f(x)=\displaystyle\frac{(x
+1)^2}{(x+1)}=(x+1)$$]]

{{{
[img[http://www.yourequations.com/eq.latex?$$f(x)=\displaystyle\frac{(x+1)^2}{(x+1)}=(x+1)$$]]
}}}
----
[img[http://www.yourequations.com/eq.latex?$$c^2=\sqrt{a^2+b^2}$$]]

{{{
[img[http://www.yourequations.com/eq.latex?$$c^2=\sqrt{a^2+b^2}$$]]
}}}
----
[img[http://www.yourequations.com/eq.latex?$$f(x)=\displaystyle\frac{(x
+1)^2}{(x+1)}=(x+1)$$]]

Here is the preceeding text  [img[http://www.yourequations.com/eq.latex?$$\int_{-\infty}^{\infty}e^{-x^{2}}\;dx=\sqrt{\pi}
$$]] and here is the following text.


[img[http://www.yourequations.com/eq.latex?$$\int_{0}^{1}\frac{x^{4}\left(1-x\right)^{4}}{1+x^{2}}dx=\frac{22}{7}-\pi$$]]
-------------
(note: GoogleGroups tends to insert word-wrapping linebreaks...the
above should be all one line)

enjoy,
-e 

Source: [[Simpler Math Plugin - TiddlyWikiDev : Google Groups|http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/245b31221ec223a7]]
/***
|Name|SinglePageModePlugin|
|Source|http://www.TiddlyTools.com/#SinglePageModePlugin|
|Version|2.3.1|
|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|Story.prototype.displayTiddler(), Story.prototype.displayTiddlers()|
|Description|Display tiddlers one at a time with automatic update of URL (permalink).  Also, options to always open tiddlers at top/bottom of page|

Normally, as you click on the links in TiddlyWiki, more and more tiddlers are displayed on the page. The order of this tiddler display depends upon when and where you have clicked. Some people like this non-linear method of reading the document, while others have reported that when many tiddlers have been opened, it can get somewhat confusing.

!!!!!Usage

<<<
SinglePageMode allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one item displayed at a time.  When SinglePageMode is enabled, the title of the current tiddler is automatically displayed in the browser window's titlebar and the browser's location URL is updated with a 'permalink' for the current tiddler so that it is easier to create a browser 'bookmark' for the current tiddler.

Even when SinglePageMode is disabled (i.e., displaying multiple tiddlers is permitted), you can reduce the potential for confusion by enable TopOfPageMode, which forces tiddlers to always open at the top of the page instead of being displayed following the tiddler containing the link that was clicked.
<<<
!!!!!Configuration
<<<
When installed, this plugin automatically adds checkboxes in the AdvancedOptions tiddler so you can enable/disable the plugin behavior.  For convenience, these checkboxes are also included here:

<<option chkSinglePageMode>> Display one tiddler at a time
<<option chkTopOfPageMode>> Always open tiddlers at the top of the page
<<option chkBottomOfPageMode>> Always open tiddlers at the bottom of the page
//(note: if both settings are selected, "top of page" is used)//

<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''SinglePageModePlugin'' (tagged with <<tag systemConfig>>)
^^documentation and javascript for SinglePageMode handling^^

When installed, this plugin automatically adds checkboxes in the ''shadow'' AdvancedOptions tiddler so you can enable/disable this behavior.  However, if you have customized your AdvancedOptions, you will need to ''manually add these checkboxes to your customized tiddler.''
<<<
!!!!!Revision History
<<<
''2007.03.03 [2.3.1]'' fix typo when adding BPM option to AdvancedOptions (prevented checkbox from appearing)
''2007.03.03 [2.3.0]'' added support for BottomOfPageMode (BPM) based on request from DaveGarbutt
''2007.02.06 [2.2.3]'' in Story.prototype.displayTiddler(), use convertUnicodeToUTF8() for correct I18N string handling when creating URL hash string from tiddler title (based on bug report from BidiX)
''2007.01.08 [2.2.2]'' use apply() to invoke hijacked core functions
''2006.07.04 [2.2.1]'' in hijack for displayTiddlers(), suspend TPM as well as SPM so that DefaultTiddlers displays in the correct order.
''2006.06.01 [2.2.0]'' added chkTopOfPageMode (TPM) handling
''2006.02.04 [2.1.1]'' moved global variable declarations to config.* to avoid FireFox 1.5.0.1 crash bug when assigning to globals
''2005.12.27 [2.1.0]'' hijack displayTiddlers() so that SPM can be suspended during startup while displaying the DefaultTiddlers (or #hash list).  Also, corrected initialization for undefined SPM flag to "false", so default behavior is to display multiple tiddlers
''2005.12.27 [2.0.0]'' Update for TW2.0
''2005.11.24 [1.1.2]'' When the back and forward buttons are used, the page now changes to match the URL.  Based on code added by Clint Checketts
''2005.10.14 [1.1.1]'' permalink creation now calls encodeTiddlyLink() to handle tiddler titles with spaces in them
''2005.10.14 [1.1.0]'' added automatic setting of window title and location bar ('auto-permalink').  feature suggestion by David Dickens.
''2005.10.09 [1.0.1]'' combined documentation and code in a single tiddler
''2005.08.15 [1.0.0]'' Initial Release
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].
Support for BACK/FORWARD buttons adapted from code developed by Clint Checketts
<<<

!!!!!Code
***/
//{{{
version.extensions.SinglePageMode= {major: 2, minor: 3, revision: 1, date: new Date(2007,3,3)};

if (config.options.chkSinglePageMode==undefined) config.options.chkSinglePageMode=false;
if (config.options.chkTopOfPageMode==undefined) config.options.chkTopOfPageMode=false;
if (config.options.chkBottomOfPageMode==undefined) config.options.chkBottomOfPageMode=false;

if (config.optionsDesc) {
	config.optionsDesc.chkSinglePageMode="Display one tiddler at a time";
	config.optionsDesc.chkTopOfPageMode="Always open tiddlers at the top of the page";
	config.optionsDesc.chkBottomOfPageMode="Always open tiddlers at the bottom of the page";
} else {
	config.shadowTiddlers.AdvancedOptions += "\n<<option chkSinglePageMode>> Display one tiddler at a time";
	config.shadowTiddlers.AdvancedOptions += "\n<<option chkTopOfPageMode>> Always open tiddlers at the top of the page";
	config.shadowTiddlers.AdvancedOptions += "\n<<option chkBottomOfPageMode>> Always open tiddlers at the bottom of the page";
}

config.SPMTimer = 0;
config.lastURL = window.location.hash;
function checkLastURL()
{
	if (!config.options.chkSinglePageMode)
		{ window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }
	if (config.lastURL == window.location.hash)
		return;
	var tiddlerName = convertUTF8ToUnicode(decodeURI(window.location.hash.substr(1)));
	tiddlerName=tiddlerName.replace(/\[\[/,"").replace(/\]\]/,""); // strip any [[ ]] bracketing
	if (tiddlerName.length) story.displayTiddler(null,tiddlerName,1,null,null);
}

if (Story.prototype.SPM_coreDisplayTiddler==undefined) Story.prototype.SPM_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,title,template,animate,slowly)
{
	if (config.options.chkSinglePageMode) {
		window.location.hash = encodeURIComponent(convertUnicodeToUTF8(String.encodeTiddlyLink(title)));
		config.lastURL = window.location.hash;
		document.title = wikifyPlain("SiteTitle") + " - " + title;
		story.closeAllTiddlers();
		if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
	}
	if (config.options.chkTopOfPageMode) { story.closeTiddler(title); srcElement=null; }
	else if (config.options.chkBottomOfPageMode) { story.closeTiddler(title); srcElement="bottom"; }
	this.SPM_coreDisplayTiddler.apply(this,arguments);
	if (config.options.chkTopOfPageMode) window.scrollTo(0,0); // make sure top of page is visible
	else if (config.options.chkBottomOfPageMode) {
		var display=document.getElementById("tiddlerDisplay"); // for TW2.1-
		if (!display) var display=document.getElementById("storyDisplay"); // for TW2.2+
		window.scrollTo(0,ensureVisible(display.lastChild)); // make sure last tiddler is visible
	}
}

if (Story.prototype.SPM_coreDisplayTiddlers==undefined) Story.prototype.SPM_coreDisplayTiddlers=Story.prototype.displayTiddlers;
Story.prototype.displayTiddlers = function(srcElement,titles,template,unused1,unused2,animate,slowly)
{
	// suspend single-page mode (and/or top/bottom display options) when showing multiple tiddlers
	var saveSPM=config.options.chkSinglePageMode; config.options.chkSinglePageMode=false;
	var saveTPM=config.options.chkTopOfPageMode; config.options.chkTopOfPageMode=false;
	var saveBPM=config.options.chkBottomOfPageMode; config.options.chkBottomOfPageMode=false;
	this.SPM_coreDisplayTiddlers.apply(this,arguments);
	config.options.chkBottomOfPageMode=saveBPM;
	config.options.chkTopOfPageMode=saveTPM;
	config.options.chkSinglePageMode=saveSPM;
}
//}}}

{{niceTable{
|!Title/link|@@font-weight:bold;font-size:150%;[[$1|$2]]@@|
|!Creator|$3|
|!Subject matter|$4|
|!Description/notes|$6|
|!Screenshot|[img[screenshot|$5]]|
}}}
@@margin-left:-1em;display:none;TwHelp@@[img[http://img357.imageshack.us/img357/1350/longtwhelplogops5.gif]]
http://twhelp.tiddlyspot.com/
<script>place.style.backgroundColor="#ccc"; /* set background color */ </script><html><hide linebreaks><div id="slantedmenu"><ul><li><<fullscreen>></li><li>&nbsp;<a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('DefaultTiddlers').readBracketedList())"

><span title="Close all tiddlers and open Welcome" style="cursor:pointer">''Home''</span></a></li><li>[[OverView]]</li><li>[[Contents|Table of Contents]]</li><li>[[Glossary]]</li><li><<MyGroup>></li><li>[[Tutorial|TutorialExperiment]]</li><li>[[Forum|http://groups.google.com/group/TiddlyWiki]]</li><li><<tiddler GoTo>></li><li><<toggleSideBar>></li></ul></div></html>{{redLink textcenter{<<tiddler ShowUnsavedChanges>> }}}
/***
!!!SlantedStyle /%==================================================%/
***/

{{{
http://img261.imageshack.us/img261/8603/navbargrayhw1.png
http://img520.imageshack.us/img520/8688/mainmenugray7ef.gif
background-image: url("http://img264.imageshack.us/img264/4134/headbackbgdc6.png");background-repeat: repeat-x top-left;
}}}

/*Credits: Dynamic Drive CSS Library */
/*URL: http://www.dynamicdrive.com/style/ */

{{{
#slantedmenu{
  font-size: 90%;
     position: fixed !important;
         width: 100%;
z-index:1
     } 
}}}

#slantedmenu{

  font-size: 90%;}

#slantedmenu:after{ /*Add margin between menu and rest of content in Firefox*/
content: "."; 
display: block; 
height: 0; 
clear: both; 
visibility: hidden;
}

#slantedmenu ul{
text-indent: 10px;
padding: 3px 0;
margin: 0;
background:url("http://img261.imageshack.us/img261/8603/navbargrayhw1.png") repeat-x top left;top left;
/%background-color: #000; %/
border-top: 0px solid #f6f;
border-bottom: 0px solid #f6f;
text-align: center; /*set value to "center" for example to center items*/
}

#slantedmenu ul li{
display: inline;
}

#slantedmenu ul li a{
font-weight: normal;
color: #00a;
padding: 3px 0;
padding-right: 5px;
padding-left: 5px;
margin: 0;
text-decoration: none;
background: transparent url() top right no-repeat;
}


#slantedmenu ul li a:hover{
color: #f00;
background:#fff;

}
<<forEachTiddler
     where 'tiddler.tags.contains("moon")'
     sortBy 'getDateSlice(tiddler)'
     script 'function getDateSlice(t) {
         return store.getTiddlerSlice(t.title, "Date");
     }'
     write '"|" + getDateSlice(tiddler) + "|"

         + "[[" + tiddler.title + "]]|\n"'
     begin '"|!Date|!Tiddler|h\n"'
 >> 
|Date|1969-07-20 Apollo Eagle lands on the lunar surface.|
|>|Apollo Eagle lands on the lunar surface.|

 
To extract this slice the ForEachTiddler code is below.

{{{
<<forEachTiddler
     where 'tiddler.tags.contains("moon")'
     sortBy 'getDateSlice(tiddler)'
     script 'function getDateSlice(t) {
         return store.getTiddlerSlice(t.title, "Date");
     }'
     write '"|" + getDateSlice(tiddler) + "|"

         + "[[" + tiddler.title + "]]|\n"'
     begin '"|!Date|!Tiddler|h\n"'
 >> 
}}}

Code by FND
/***
!Metadata:
|''Name:''|Slider2Plugin|
|''Description:''||
|''Version:''|1.0.1|
|''Date:''|Mar 20, 2007|
|''Source:''|http://www.sourceforge.net/projects/ptw/|
|''Author:''|BramChen (bram.chen (at) gmail (dot) com)|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 1.5+ (the firefox extension, XTML Ruby support, is required)|
!Syntax:
{{{
	<<slider2 tiddlerTitle sliderTitle toolsip>>

	or {{custClass{<<slider2 tiddlerTitle sliderTitle toolsip>><<slider2 ...>>...<slider2...>>}}}
}}}
<<<
tiddlerTitle: the title of tiddler to include in the slider
sliderTitletitle: text of the slider
toolsip: tooltip text of the slider
custClass: optional, for grouping the sliders and/or assigning a group style.
<<<
!Revision History:
|''Version''|''Date''|''Note''|
|1.0.1|Mar 20, 2007|Added animation collapse|
|1.0.0|Mar 18, 2007|Initial release|
!Code section:
***/
//{{{
config.slider2 = {};
config.macros.slider2 = {
	onClickSlider: function(e){
		if (!e) var e = window.event;
		var n = this.nextSibling;
		var isOpen = n.style.display != "none";
		var nodes = this.parentNode.childNodes;
		for(var i=0; i<nodes.length; i++){
			if(nodes[i].title && nodes[i].title != this.title){
				if(nodes[i].nextSibling.className = "sliderPanel"){
					if(config.slider2[this.parentNode.className] == nodes[i].title){
						if(config.options.chkAnimate)
							anim.startAnimating(new Slider(nodes[i].nextSibling, false,e.shiftKey || e.altKey,"none"));
						else 
							nodes[i].nextSibling.style.display = "none";
					}
				}
			}
		}
		if (config.options.chkAnimate)
			setTimeout(function(){anim.startAnimating(new Slider(n,!
isOpen,null,"none"));},300);
//			anim.startAnimating(new Slider(n,!isOpen,e.shiftKey || e.altKey,"none"));
		else
			n.style.display = isOpen ? "none" : "block";
		config.slider2[this.parentNode.className] = isOpen ? "" : this.title;
		return false;
	},

	createSlider: function(place,title,tooltip){
		var btn = createTiddlyButton(place,title,tooltip,this.onClickSlider);
		var panel = createTiddlyElement(place,"div",null,"sliderPanel",null);
		panel.style.display = "none";
		return panel;
	},

	handler: function(place,macroName,params){
		params[2] = params[2]?params[2]:params[0];
		var panel = this.createSlider(place,params[1],params[2]);
		var text = store.getTiddlerText(params[0]);
		if(text)
			wikify(text,panel,null,store.getTiddler(params[0]));
	}
};
//}}}
<<<
This is the tiddler accuated by the slider.

It is entitled SliderDemoTiddler

End of demo tiddler!
<<<
!!!<<gradient horiz #Fc3  #fff>>&nbsp;[[Sliders]]^^<<tiddler CloseThisOpen with: "Macros Built-in"  '« back'>>|<<toolbar editTiddler>>» ^^>>

*Also see [[Nested Sliders|SlidersOther]]
*[[AccordionEffect]]

''Sliders give a smooth drop down of'' information within a tiddler.  The ''built-in slider'' drops down a prearranged tiddler from the place where the slider resides.

Anatomy of a built-in slider: {{{<<}}}slider @@color:green;"chkCookieName"@@ @@color:blue;"~TiddlerName"@@ @@color:red;"title text"@@ @@color: blue;"tooltip"@@ {{{>>}}}

@@position:relative;+++^45em^[Note: about cookies]
<<tiddler ./cookie>>===@@

<part cookie hidden>
{{{
Note: normally, when a slider is rendered, it uses the previous
display state (opened/closed), as stored in the chkCookieName browser
cookie.  However, if you want the slider to always start closed, you
can leave the 'chk' off of the CookieName, and the slider will still
track its state *during* the current session, but will NOT actually
create a cookie.  Each time you reload the document the slider will be
closed.

Further instead of chkCookieName you can use "" (empty double quotemarks)
and no tracking will be done and the slider will always close during the session.

}}}

</part>
----
*Below we use the exact example as above .
!!!!!<<gradient horiz #Fc3  #fff>>&nbsp;Code>>
{{{
<<slider "chkCookieName" "TiddlerName" "title text" "tooltip">>
}}}
!!!!!<<gradient horiz #Fc3  #fff>>&nbsp;Example>>

<<slider "chkCookieName" "TiddlerName" "title text" "tooltip">>

!!!!!&nbsp;End





!!!<<gradient horiz #fc3 #fff>>&nbsp;SlidersOther^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>

*Also see [[Sliders Built-in|Sliders]]
<<tiddler [[Another type of slider]]>>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[SortForMultipleTags]]^^<<tiddler CloseThisOpen with: Scripts  '« back'>>|<<toolbar editTiddler>>» ^^>>

''Sort for tag 'and not' (&& !) others''

{{{
+++(chkbycreation)*[Sort By Creation Date|show tiddler sorted by
creation date]...
 <<forEachTiddler
 where 'tiddler.tags.contains("thistag") &&

 ! tiddler.tags.contains("notthistag") &&
 ! tiddler.tags.contains("=completed")'
 sortBy 'tiddler.created'
 write "'[['+tiddler.title+'|'+tiddler.title+']]\n'">>===
}}}
{{{
+++(chkbymodification)*[Sort By Modification Date|show tiddler sorted
by modification date]...
 <<forEachTiddler
 where 'tiddler.tags.contains("thistag") &&
 ! tiddler.tags.contains("notthistag") &&

 ! tiddler.tags.contains("=completed")'
 sortBy 'tiddler.modified'
 write "'[['+tiddler.title+'|'+tiddler.title+']]\n'">>=== 
}}}
|''Melbourne Weather''|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|Total|
|Mean number of rain days<br><<sparkline 8.3 0 7.4 0 9.3 0 11.5 0 14.0 0 14.2 0 15.1 0 15.6 0 14.8 0 14.3 0 11.8 0 10.5 >>| 8.3| 7.4| 9.3| 11.5| 14.0| 14.2| 15.1| 15.6| 14.8| 14.3| 11.8| 10.5| 146.7|
|Mean number of clear days<br><<sparkline 6.3 0 6.3 0 5.7 0 4.4 0 3.0 0 2.5 0 2.7 0 2.9 0 3.4 0 3.6 0 3.5 0 4.4 >>| 6.3| 6.3| 5.7| 4.4| 3.0| 2.5| 2.7| 2.9| 3.4| 3.6| 3.5| 4.4| 48.5|
|Mean number of cloudy days<br><<sparkline 11.2 0 9.7 0 13.4 0 14.9 0 18.0 0 16.8 0 17.2 0 16.8 0 15.7 0 16.4 0 15.1 0 14.2>>| 11.2| 9.7| 13.4| 14.9| 18.0| 16.8| 17.2| 16.8| 15.7| 16.4| 15.1| 14.2| 179.5|
/***
|''Name:''|SparklinePlugin|
|''Description:''|Sparklines macro|
***/
//{{{
if(!version.extensions.SparklinePlugin) {
version.extensions.SparklinePlugin = {installed:true};

//--
//-- Sparklines
//--

config.macros.sparkline = {};
config.macros.sparkline.handler = function(place,macroName,params)
{
	var data = [];
	var min = 0;
	var max = 0;
	var v;
	for(var t=0; t<params.length; t++) {
		v = parseInt(params[t]);
		if(v < min)
			min = v;
		if(v > max)
			max = v;
		data.push(v);
	}
	if(data.length < 1)
		return;
	var box = createTiddlyElement(place,"span",null,"sparkline",String.fromCharCode(160));
	box.title = data.join(",");
	var w = box.offsetWidth;
	var h = box.offsetHeight;
	box.style.paddingRight = (data.length * 2 - w) + "px";
	box.style.position = "relative";
	for(var d=0; d<data.length; d++) {
		var tick = document.createElement("img");
		tick.border = 0;
		tick.className = "sparktick";
		tick.style.position = "absolute";
		tick.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
		tick.style.left = d*2 + "px";
		tick.style.width = "2px";
		v = Math.floor(((data[d] - min)/(max-min)) * h);
		tick.style.top = (h-v) + "px";
		tick.style.height = v + "px";
		box.appendChild(tick);
	}
};


}
//}}}
<part sparklines>
!!!<<gradient horiz #Fc3  #fff>>&nbsp;[[Sparklines]]^^<<tiddler CloseThisOpen with: "Macros Built-in"  '« back'>>|<<toolbar editTiddler>>» ^^>>

* ''Please note this facility has been removed from the ~TiddyWiki core.  It is now a plugin you can get from here'' http://www.tiddlywiki.com/coreplugins.html

Sparklines are a format developed by [[Edward Tufte|http://en.wikipedia.org/wiki/Edward_Tufte]] for small graphic charts which can be inserted within text on a page.

Tufte describes sparklines as "data-intense, design-simple, word-sized graphics". <<sparkline 471 0 277 0 440 0 159 0 231 0 344 0 337 0 336 0 305 0 378 0 258 0 495 0 228 0 454 0 456 0 332 0 154 0 438 0 272 0 404 0 395 0 317 0 251 0 242 0 220 0 195 0 112 0 132 0 285 0 116 0 418 0 380 0 324>>  Whereas the typical chart is designed to show as much data as possible, and is set off from the flow of text, sparklines are intended to be succinct, memorable, and located precisely <<sparkline 163 0 218 0 231 0 236 0 232 0 266 0 176 0 249 0 289 0 1041 0 1835 0 2285 0 3098 0 2101 0 1755 0 3283 0 3353 0 3335 0 2898 0 2224 0 1404 0 1354 0 1825 0 1839 0 2142 0 1942 0 1784 0 1145 0 979 0 1328 0 1611>> where appropriate.

''The much maligned Melbourne weather can'' be clarified by judging for yourself the number of rainy days <<sparkline 8.3 0 7.4 0 9.3 0 11.5 0 14.0 0 14.2 0 15.1 0 15.6 0 14.8 0 14.3 0 11.8 0 10.5 >> compared to the number of clear days <<sparkline 6.3 0 6.3 0 5.7 0 4.4 0 3.0 0 2.5 0 2.7 0 2.9 0 3.4 0 3.6 0 3.5 0 4.4 >>.  The number of cloudy days by comparison looks like this <<sparkline 11.2 0 9.7 0 13.4 0 14.9 0 18.0 0 16.8 0 17.2 0 16.8 0 15.7 0 16.4 0 15.1 0 14.2>>.



<<tiddler SparklineMelbourneWeather>>
*[[Sparklines found in the wild WebPage|http://sparkline.wikispaces.com/Examples]] +++[more...]
<<<
He is hoping to keep a running list of web sparklines found 'in the wild'. If possible, note the technology used to create the sparklines.
<<<
===


@@color:#090;''Tip:''@@ Separating the data stream with a zeros spreads out the bars and makes a cleaner ,easy to read sparkline. 
!!!<<gradient horiz #Fc3  #fff>>&nbsp;Code>>
{{{
<<sparkline 163 0 218 0 231 0 236 0 232 0 266 0 176 0 249 0 289 0 1041 0 1835 0 2285 0 3098 0 2101 0 1755 0 3283 0 3353 0 3335 0 2898 0 2224 0 1404 0 1354 0 1825 0 1839 0 2142 0 1942 0 1784 0 1145 0 979 0 1328 0 1611>>
}}}
</part>

!!!<<gradient horiz #Fc3  #fff>>&nbsp;Tweaks>>
If you want to doll up the standard ~TiddlyWiki sparklines add the following to your ~StyleSheet with the colors of your choice.
{{{
.sparkline {
	background: #f9f;
}

.sparktick {
	background: #00f;
}
}}}
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://developer.yahoo.com/performance/rules.html]]&nbsp;&raquo;|
----
<html><div align="center"><iframe  src ="http://developer.yahoo.com/performance/rules.html" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
/***

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

|Name|SplashScreenPlugin|
|Created by|SaqImtiaz|
|Location|http://lewcid.googlepages.com/lewcid.html#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;
}
//}}}
<<tiddler SiteTemplate2 with:
  'E Springer'
  'http://espringer.web.wesleyan.edu'
  'E Springer'
  'Philosophy, ethics'
  'http://www.giffmex.org/twinactionimgs/espringer.GIF'
  'my basic site, with a web of philosophical ideas'
>>
This is a single HTML page that can be edited within itself without the aid of any web editing programs. It can be posted to a Web Server, sent by email or kept on a USB thumb drive to make a ~WikiOnAStick. It's called a ~TiddlyWiki and is described in detail ''[[here|http://www.tiddlywiki.com]]'' and you can browse a tutorial ''[[here|http://www.blogjones.com/TiddlyWikiTutorial.html]]''.

You can go to http://tiddlyspot.com and get a blank ~TiddlyWiki or several different styles you can download and modify yourself and be able to save it on their server as well as on your own computer.

@@color(#c06):''This ~TiddlyWiki is already on your computer and you can save it and modify it for your own use by right clicking ''[[here|http://www.tiddlyspot.com/twhelp]]'' and ''Save target as... ''(IE) or ''Save link as...'' (~FireFox) ''@@
<<<
@@NOTE: Do not save this page, or any ~TiddlyWiki, using your ''browser's'' File>Save As.. feature it may be corrupted in the process.  Use the 'save to disk' feature that appears in the right column after download.@@
<<<
You can modify the following tiddlers to suit yourself:
* 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>>

Here are a few hints about [[FormattingText]].

It's good for the sciences because you can use Greek letters like alpha ''&alpha;'', beta ''&beta;'', Psi  ''&Psi;'' or Omega ''&Omega;'' 
{{{

<<forEachTiddler where
'tiddler.tags.startsWith("list").length > 0'
script '
   Array.prototype.startsWith=function(txt) {
      var out=[];
      for (var i=0;i<this.length;i++)
         if (this[i].substr(0,txt.length)==txt)
            out.push(this[i]);
      return out;
   }' >> 

}}}

startsWith("kill")


<<forEachTiddler where
'tiddler.tags.startsWith("kill").length > 0'
script '
   Array.prototype.startsWith=function(txt) {
      var out=[];
      for (var i=0;i<this.length;i++)
         if (this[i].substr(0,txt.length)==txt)
            out.push(this[i]);
      return out;
   }' >> 
{{textcenter{
''6 February to 13 February  2007''
[img[http://img468.imageshack.us/img468/3676/stats20070212hu3.gif]]
}}}
!!!<<gradient horz  #c06 #ffffff>>@@color:white;&nbsp;Hits on TW Help@@>>

<<tiddler [[August 2007 Statistics]]>>
<<tiddler [[July 2007 Statistics]]>>
<<tiddler [[June 2007 Statistics]]>>
<<tiddler [[May 2007 Statistics]]>>
<<tiddler [[April 2007 Statistics]]>>
<<tiddler [[March 2007 Statistics]]>>
<<tiddler [[February 2007 Statistics]]>>
----
{{textcenter{
@@color:#00c;__''~TiddlySpot Hit Records''__@@
}}}
@@color:#00c;
*''Hits for the month of'':@@color:#c06; 1 Feb <<sparkline  187 0 185 0 132 0 106 0 184 0 155 0 151 0 192 0 194 0 150 0 168 0 243 0 217 0 283 0 210 0 187 0 125 0 172 0 194 0 182 0 191 0 235 0 185 0 208 0 198 0 0 0 0 0 0>> 26 Feb 2007@@
**[Feb 4-min (106) ] 
**[Feb 18-max (283)] 
**grand total (''4634'') as of @@color:#04f; ''&raquo;'' 26.02.07 16:15@@
----
*''Hits for the month of'':@@color:#c06; 1 Jan <<sparkline 1 0 7 0 16 0 22 0 26 0 6 0 9 0 137 0 189 0 146 0 233 0 179 0 81 0 104 0 142 0 165 0 175 0 199 0 151 0 106 0 108 0 179 0 147 0 164 0 129 0 149 0 113 0 121 0 131 0 209 0 169>> 30 Jan 2007@@
**[Jan 1-min (1) ] 
**[Jan11-max (233)] 
**grand total (''3713'')
----
*''Hits for the month of'':@@color:#c06; 1 Dec <<sparkline  3 0 2 0 2 0 1 0 7 0 1 0 8 0 13 0 6 0 26 0 17 0 2 0 12 0 4>> 31 Dec 2006@@
**[Dec 11-min (1) ] 
**[Dec 27-max (26)] 
**grand total (''104'')
@@

<<<
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[StenoTableMemorize]]^^<<tiddler CloseThisOpen with: MemorizeTables  '« back'>>|<<toolbar editTiddler>>» ^^>>
*Try clicking (memorize) in both columns to decide which side to start with.
| !English<br><script label="(memorize)">return Mem.start(place)</script> | !Steno<br><script label="(memorize)">return Mem.start(place)</script> |
|This is a dog|/THEUS /S- /A /DAUG /-FPLT -|
|to be|TAO*B|
|This is a cat|/THEUS /S- /A /KATT /-FPLT -|
/***
!!!<<gradient horiz #fc3 #fff >>&nbsp;StyleSheet>>/%==================================================%/
***/
/***There are extra nested stylesheets at the end of this stylesheet***/

/*{{{*/



* html .tiddler {height:1%;}

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

.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a, .popup li a:visited {color:#090; border: none;}
.popup li {list-style:none;}

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

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

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

h1,h2,h3,h4,h5 {
	color:  #008;
	background: #99AAEE;
        padding-left: 0.4em;
        padding-top:-0.5em;
        border-bottom:hidden;
}


hr {height:1px;color:#c06;}
.viewer hr {border: 0px;border-top: solid 1px #c06;color: #c06;}

a {color: #ffc;text-decoration:none;}
a:hover{background: #fff;color: #D00;}

.button {color: #ffc;border: 0px solid #fff;}
.button:hover {color: #ffc;background: #60F;border-color: #db4;}
.button:active {color: #fff;background: #18f;border: 0px solid #841;}

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;}

.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:normal; font-style:normal;}

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

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


#mainMenu {background-color:#008;}

#mainMenu {
        background-image: url("http://www.symbex.net.au/Wiki/fistback_bg.jpg");background-repeat: repeat-x top-left;
	position: absolute;
	left: 0em;
	width: 14em;
	text-align: right;
	line-height: 1.2em;
	padding:2px 0em 0.5em 0.0em;
        margin: 0em 0em;
	font-size: 0.9em;

        border-top:0px solid #F6F;
        border-left:0px solid #F6F;
}

/*}}}*/
/***
!!!~SideBar/%==================================================%/
***/
/*{{{*/

#sidebar  {background-color:#008;}

#sidebar {
position:absolute;
background-image:url("http://www.symbex.net.au/Wiki/fistback_bg.jpg"); background-repeat: repeat-x top-left;
width: 15em;
padding:7px 0em 0.5em 0.0em;
color:#ffc;
font-size:.9em;
line-height: 1.1em;
border-top:0px solid #F6F;
border-right:0px solid #F6F;
right: 0px;

}

#sidebar a:hover {
 background: #ffd /*#ef9*/;
 color: #F00;
}

/*}}}*/
!!!~SideBarOptions /%==================================================%/
/*{{{*/


#sidebarOptions {
	padding-top: 0em;
}

#sidebarOptions a {
	margin: 0em 0.2em;
	padding: 0.2em 0.3em;
	display: block;
}



#sidebarOptions input {
	margin: 0.4em 0.5em;
}



#sidebarOptions .sliderPanel {
        width:15.5em;
	margin-left: 0.75em;
        margin-right: 0.75em;
	padding-top: 2em;
	padding: 0.5em;
	font-size: .85em;
        background: #89d;
}

#sidebarOptions .sliderPanel a:hover {
 background: #ffd /*#ef9*/;
 color: #F00;
}

#sidebarOptions .sliderPanel input {
	margin: 0 0 .3em 0;
}

/*}}}*/
/***
!!!~SideBarTabs/%==================================================%/
***/
/*{{{*/

#sidebarTabs .tabContents {
	max-height: 35em; /* not IE6-compatible */
	overflow: auto;
	width: 92.5%;
}

#sidebarTabs .tabContents .tabContents {
	max-height: 30em !important; /* not IE6-compatible */
}

#sidebarTabs .tabContents a {color:#ffc;}

#sidebarTabs .tabContents a:hover {
        background: #fff;
	color: #f00;}

#sidebarTabs .tabSelected {
 padding: 1px;
 cursor: default;
 color: #a00;
 background-color: #fcf;
        border-left:0px solid #000;
	border-top:0px solid #000;
	border-right:0px solid #000;

}

#sidebarTabs .tabUnselected {
 color: #000;
 background-color: #666;
 padding: 0 4px;
}

#sidebarTabs .tabUnselected:hover,



#sidebarTabs .tabContents {
	color: #3CF;
	background: #008;
	border-top: 0px solid #666;
        margin-bottom: 2em;
       
}


/*}}}*/
/***
!!!General tabs /%=================================================%/
***/
/*{{{*/


.tabSelected {
	color: #C06;
	background: #eee;
	border-left: 1px solid #ccc;
	border-top: 1px solid #ccc;
	border-right: 1px solid #ccc;
}



.tabUnselected {
	color: #fff;
	background: #999;
}



.tabContents {
	color: #3CF;
	background: #009;
	border: 1px solid #666;
        margin-bottom: 2em
}

.tabContents a:hover{
        background: #fff;
	color: #f00;}

.tabContents .button {
	 border: 0;}




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

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

#messageArea { 
  background-color: #99AAEE; 
  border-color: #FFC;
  color:#FFF; 
  border-width: 4px; 
  border-style: dotted; 
  font-size: 90%; 
  padding: 0.5em; 
  -moz-border-radius: 1em; }

#messageArea .button { text-decoration:none; font-weight:bold; background:transparent; border:0px; }
#messageArea .button:hover {background: #F00; }


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

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

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

#sidebarTabs .tabContents { width: 13em; } 
 



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

#displayArea {margin:0.0em 13.5em 0em 12.5em;}
#tiddlerDisplay {margin:0.0em 0.0em 0em 0.0em;}

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

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


.title {
	color:   #D63059;
        font-variant:small-caps;
        font-size:1.4em;
        font-weight:normal; 
        padding-top: 0em;
        padding-left: 0.65em;
}

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

.tiddler .button {padding:0.2em 0.4em;border:0px;}

.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/%==================================================%/
***/
/*{{{*/

.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

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


.viewer {
        background:transparent;
        border:1px solid #F6F;
        padding-left: 1em;
        padding-right: 1em;
	padding-top: 0.5em;
        -moz-border-radius: 1em;
}


.viewer a {
color:#00f;
background: transparent;
padding-left:2px;
padding-right:2px;
text-decoration:none;
}

.viewer a:hover{
	background: #fff;
	color: #D00;
}


.viewer table {
	border: 0px solid #f6f;
}

.viewer td, .viewer tr,.viewer caption{
        border: 1px solid #F6F;
	padding: 0px;
        vertical-align:top;
}

.viewer th, .viewer thead td, .twtable th, .twtable thead td  {
	background: #abf;
	border: 1px solid #666;
	color: #fff;
        vertical-align:top;
}


.viewer .tabContents {
	color: #000;
	background: #fef;
	border: 1px solid #fcf;
        margin-bottom: 0em;
      overflow: auto;
}





.viewer .tabUnselected:hover {
	color: #f00;
	background: #fff;
        text-decoration:none;
        border:#000;
        border-left: 1px solid #999;
	border-top: 1px solid #999;
	border-right: 1px solid #999;
}




.viewer hr {
	border: 0px;
	border-top: solid 1px #c06;
	color: #c06;
}

.viewer blockquote {
	border-left: 2px solid #c06;
}

.viewer a:h3 {
color:#600;
text-decoration:underline;
}



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 pre { font-size:1.2em; line-height:1.4em; color:#00f;background:#ffc; }

.viewer code {font-size:1.2em; line-height:1.4em;}
.viewer code {font-size:1.2em; line-height:1.4em; color:#008;background:#ffc;}



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

/*}}}*/
/***
''The editor replaces the viewer in the tiddler'' /%------------------------------------------------%/
***/
/*{{{*/
.editor {
font-size: 1.1em;
padding-left: 0.5em;
}

.editor input, .editor textarea {
        margin-left:0em;
	display: block;
	width: 100%;
	font: inherit;
}

.editorFooter {
       	padding: 0.25em 4.0em;
	font-size: .9em;

}

.editorFooter .button {padding-top: 0px; padding-bottom: 0px;color:#f00;}

.popup .button {color: #00f;border: 0px solid #fff;}

----

.editor input, .editor textarea {
        margin-left:2.5em;
        margin-right:0em
	display: block;
	width:105%;
	font: inherit;
}

----

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

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

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

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

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}


/*}}}*/
/***
!!!~ToolBar/%==================================================%/
***/
/*{{{*/



.toolbar {
 color: #fff;
}

.selected .toolbar a {
 color: #000;
}

.selected .toolbar a:hover {
 background: #ffd /*#ef9*/;
 color: #F00;
}

/*}}}*/
/***
!!!~NestedStyleSheets/%==================================================%/
***/


/*{{{*/

/*}}}*/

#contentWrapper {display:none;}
[[WebStyleSheet]]
[[SimonsNiceTable]]
[[ButtonStyle]]
[[HaloscanWidgetStyling]]
[[accordionEffect]]
[[accordionEffect2]]
[[EditWelcomeStyle]]
[[SlantedStyle]]
[[MozTableCSS]]
[[CustomMozTableCSS]]
[[NewTabsCSS]]
[[ScrollBarCSS]]
[[StyleSheetTiddlersBar]]
[[CodeReferenceAllCSS]]
[[BackstageCSS]]
[[TabsCSS]]
[[TagCloudCSS]]
[[CustomCSS]]
[[TwoColumnsCSS]]

/%body {background: url("http://img528.imageshack.us/img528/9167/lorembgji0.gif") repeat top left;}%/





/%#contentWrapper .viewer pre {font-size:1.2em; line-height:1.4em; color:#008;background:#ffc;} %/



!!!End
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

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

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

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

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

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

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

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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




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

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

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

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

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/*{{{*/

@media print {#mainMenu {display: none ! important;}}
@media print {#topMenu {display: none ! important;}}
@media print {#sidebar {display: none ! important;}}
@media print {#messageArea {display: none ! important;}} 
@media print {#toolbar {display: none ! important;}}
@media print {.header {display: none ! important;}}

@media print {.tiddler .subtitle {display: none ! important;}}
@media print {.tiddler .toolbar {display; none ! important; }}
@media print {.tiddler .tagging {display; none ! important; }}
@media print {.tiddler .tagged {display; none ! important; }}
@media print {#displayArea {margin: 1em 1em 0em 1em;}}
@media print {.pageBreak {page-break-before: always;}}

/*}}}*/
/***
|Name|StyleSheetShortcuts|
|Source|http://www.TiddlyTools.com/#StyleSheetShortcuts|
|Version||
|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|CSS|
|Requires||
|Overrides||
|Description|'convenience' classes for common formatting, alignment, boxes, tables, etc.|

These 'style tweaks' can be easily included in other stylesheet tiddler so they can share a baseline look-and-feel that can then be customized to create a wide variety of 'flavors'.

''Indenting without bullets''

<<<
.indent { display:block;margin:0;padding:0;border:0;margin-left:3em; }

then, you can enclose your content in {{indent{...}}}.  You can also
NEST the styles, so that you can have content indented more than one
level.
{{{
left margin
{{indent{level one}}}
{{indent{{{indent{level two}}}}}}
etc. 
}}}
<<<
''Method 1'': inline CSS
<<<
TW core syntax allows you to specify CSS attributes inline by
surrounding content with {{{@@}}} delimiters.  Immediately following the
opening {{{@@}}}, you enter one or more CSS attribute definitions, separated
by semi-colons.  After the last semi-colon, put your content, then the
closing {{{@@}}}
{{{
My Title @@font-size:80%;<<today>>@@
}}}

My Title @@font-size:80%;<<today>>@@
<<<
''Method 2'': custom CSS class (it's easy!)
<<<
While the above method works for 'one-off' cases, it is better to
define some custom classnames to apply consistent sizes to all your
content.  For example, TiddlyTools has a set of CSS definitions that
provide formatting 'shortcuts' that make styling text much easier.  It
includes shortcuts for text sizes, text alignment, borders, indents,
'groupboxes', etc.
   http://www.tiddlytools.com/#StyleSheetShortcuts
To use the custom class, just put your content inside
{{classname{...}}}, like this:
{{{
   My Title {{small{<<today>>}}}
}}}

<<<

A nice advantage of the {{classname{...}}} approach over the
{{{@@}}}attr:val;...{{{@@}}} syntax is that the classnames can be easily combined
or nested, like this:
<<<
{{{
   {{floatright small{<<today>>}}} My Title
}}}

   {{floatright small{<<today>>}}} My Title

note: when using float formatting, the floating content has to precede
the non-floating content.  When displayed, the above example will put
the date/time in the upper right corner of the page, while the "My
Title" part will appear left justified (as normal) 
<<<

The following CSS declarations provide quick shortcuts for common formatting styles

These 'style tweaks' can be easily included in other stylesheet tiddler so they can share a baseline look-and-feel that can then be customized to create a wide variety of 'flavors'.

***/

/*{{{*/

/* text alignments */
.left
	{ display:block;text-align:left; }
.center
	{ display:block;text-align:center; }
.right	
	{ display:block;text-align:right; }
.justify
	{ display:block;text-align:justify; }
.indent
	{ display:block;margin:0;padding:0;border:0;margin-left:2em; }
.floatleft
	{ float:left; }
.floatright
	{ float:right; }
.clear
	{ clear:both; }
.wrap
	{ white-space:normal; }
.nowrap
	{ white-space:nowrap; }
.hidden
	{ display:none; }
.show
	{ display:inline !important; }
.span
	{ display:span; }
.block
	{ display:block; }
.relative
	{ position:relative; }
.absolute
	{ position:absolute; }

/* font sizes */
.big
	{ font-size:14pt;line-height:120% }
.medium
	{ font-size:12pt;line-height:120% }
.normal
	{ font-size:9pt;line-height:120% }
.small
	{ font-size:8pt;line-height:120% }
.fine
	{ font-size:7pt;line-height:120% }
.tiny
	{ font-size:6pt;line-height:120% }
.larger
	{ font-size:120%; }
.smaller
	{ font-size:80%; }

/* font styles */
.bold
	{ font-weight:bold; }
.italic
	{ font-style:italic; }
.underline
	{ text-decoration:underline; }

/* plain list items (no bullets or indent) */
.nobullets li { list-style-type: none; margin-left:-2em; }

/* multi-column tiddler content (not supported in Internet Explorer) */
.twocolumns { display:block;
	-moz-column-count:2; -moz-column-gap:1em; -moz-column-width:50%; /* FireFox */
	-webkit-column-count:2; -webkit-column-gap:1em; -webkit-column-width:50%; /* Safari */
	column-count:2; column-gap:1em; column-width:50%; /* Opera */
}
.threecolumns { display:block;
	-moz-column-count:3; -moz-column-gap:1em; -moz-column-width:33%; /* FireFox */
	-webkit-column-count:3; -webkit-column-gap:1em; -webkit-column-width:33%; /* Safari */
	column-count:3; column-gap:1em; column-width:33%; /* Opera */
}
.fourcolumns { display:block;
	-moz-column-count:4; -moz-column-gap:1em; -moz-column-width:25%; /* FireFox */
	-webkit-column-count:4; -webkit-column-gap:1em; -webkit-column-width:25%; /* Safari */
	column-count:4; column-gap:1em; column-width:25%; /* Opera */
}

/* show/hide browser-specific content for InternetExplorer vs. non-IE ("moz") browsers */
*[class="ieOnly"]
	{ display:none; } /* hide in moz (uses CSS selector) */
* html .mozOnly, *:first-child+html .mozOnly
	{ display: none; } /* hide in IE (uses IE6/IE7 CSS hacks) */

/* borderless tables */
.borderless, .borderless table, .borderless td, .borderless tr, .borderless th, .borderless tbody
	{ border:0 !important; margin:0 !important; padding:0 !important; }

/* thumbnail images (fixed-sized scaled images) */
.thumbnail img { height:5em !important; }

/* stretchable images (auto-size to fit tiddler) */
.stretch img { width:95%; }

/* grouped content */
.outline
	{ display:block; padding:1em; -moz-border-radius:1em; border:1px solid; }
.menubox
	{ display:block; padding:1em; -moz-border-radius:1em; border:1px solid; background:#fff; color:#000; }
.menubox .button, .menubox .tiddlyLinkExisting, .menubox .tiddlyLinkNonExisting
	{ color:#009 !important; }
.groupbox
	{ display:block; padding:1em; -moz-border-radius:1em; border:1px solid; background:#ffe; color:#000; }
.groupbox a, .groupbox .button, .groupbox .tiddlyLinkExisting, .groupbox .tiddlyLinkNonExisting
	{ color:#009 !important; }
.groupbox code
	{ color:#333 !important; }
.borderleft
	{ margin:0;padding:0;border:0;margin-left:1em; border-left:1px dotted; padding-left:.5em; }
.borderright
	{ margin:0;padding:0;border:0;margin-right:1em; border-right:1px dotted; padding-right:.5em; }
.borderbottom
	{ margin:0;padding:1px 0;border:0;border-bottom:1px dotted; margin-bottom:1px; padding-bottom:1px; }
.bordertop
	{ margin:0;padding:0;border:0;border-top:1px dotted; margin-top:1px; padding-top:1px; }

/* compact form */
.smallform
	{ white-space:nowrap; }
.smallform input, .smallform textarea, .smallform button, .smallform checkbox, .smallform radio, .smallform select
	{ font-size:8pt; }

/* stretchable edit fields and textareas (auto-size to fit tiddler) */
.stretch input { width:99%; }
.stretch textarea { width:99%; }

/* compact input fields (limited to a few characters for entering percentages and other small values) */
.onechar input { width:1em; }
.twochar input { width:2em; }
.threechar input { width:3em; }
.fourchar input { width:4em; }
.fivechar input { width:5em; }

/* text colors */
.green { color:#0c0 !important }
.red { color:#f66 !important }
.blue { color:#99f !important }
.gray { color:#999 !important }

/* rollover highlighting */
.mouseover 
	{color:[[ColorPalette::TertiaryLight]] !important;}
.mouseover a
	{color:[[ColorPalette::TertiaryLight]] !important;}
.selected .mouseover
	{color:[[ColorPalette::Foreground]] !important;}
.selected .mouseover .button, .selected .mouseover a
	{color:[[ColorPalette::PrimaryDark]] !important;}

/* rollover zoom text */
.zoomover
	{ font-size:80% !important; }
.selected .zoomover
	{ font-size:100% !important; }

/*}}}*/
!!!StyleSheetTiddlersBar

#tiddlersBar .button {border:1px; color:#000;}
#tiddlersBar .tab {white-space:nowrap;}
#tiddlersBar {padding : 0.55em 0.5em 0.0em 1.0em;margin-left:0em;margin-right:0em}
#tiddlersBar {margin-bottom:0px;}

.tabSelected .button:hover {font-size:0.95em;font-weight:bold;color: #f00;background: #fff;padding : 0px 0px 0px 2px;}
.tabUnselected .button:hover {font-size:0.95em;color: #f00;background: #fff; padding : 0px 0px 0px 2px;}

.tabUnselected .button {font-size:0.95em;font-weight:bold;color: #008; padding : 0px 0px 0px 2px;}
.tabSelected .button {font-size:0.95em;font-weight:bold;color: #008;padding : 0px 0px 0px 2px;}

.tabUnselected {
background:url("http://img261.imageshack.us/img261/8603/navbargrayhw1.png") repeat-x top left;top left;
background-color:#eee;
border:0px #eee solid; border-bottom:0px;font-size:0.95em; }


.tabSelected {
background:url("http://img505.imageshack.us/img505/489/navbarredlt5.gif") repeat-x top left;top left;
background-color:#fcb;
color: #a00;border: 0px #c06 solid;border-bottom:0px; font-size:0.95em;}

.tabUnselected .tabButton {font-weight:bold;font-size:0.75em;color:#333;background:transparent; padding : 0px 2px 0px 2px; margin: 0 0 0 1px;}
.tabSelected .tabButton {font-weight:bold;font-size:0.75em;color:#000;background:transparent;padding : 0px 2px 0px 2px; margin: 0 0 0 1px;}

.tabSelected .tabButton:hover {font-weight:bold;color: #f00;background: #fff;}
.tabUnselected .tabButton:hover {font-weight:bold;color: #f00;background: #fff;}

.tiddler, .tabContents {border-top:0px #fa0 solid;margin-left:0.5em;margin-right:0.5em;}
#tiddlersBar .tab {-moz-border-radius : 0.4em 0.4em 0 0;}
#tiddlersBar  {background:#abf;line-height: 1.45em;}
#tiddlersBar  {background: url("http://img405.imageshack.us/img405/1254/leftbackdo6.gif"); background-repeat: repeat;line-height: 1.45em;}








!!!!!<<gradient horiz #fcb #fff>>&nbsp;[[Styling]]>>
@@color:#C06;''&raquo; &raquo;'' @@   Tabs containing CSS styling code (controls layout and visual style)
----

<script>
// get all tiddlers tagged with "css"
var tids=store.getTaggedTiddlers("CSS" || "css");
// keep only tiddlers *also* tagged with New
var list=[];
for (var t=0; t<tids.length; t++)
   if (tids[t].isTagged("CSS")) list.push(tids[t]);
// create output list of tiddler titles, one per line
var out="";
for (var t=0; t<list.length; t++) out+="#[["+list[t].title+"]]\n";
return out;

</script>
!!!<<gradient horiz #fc3 #fff>>&nbsp;StylingSpecificTiddlers^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>
Any CSS styling can be applied to individual tiddlers without affecting other tiddlers.

*Also see ChangingStyles

{{{
#tiddlerTranslate .viewer {
overflow: auto;
}
}}}
{{{
#tiddlerImages img {
    border: 5px double #999;
    margin: 4px;
}
}}}

If the tiddler name contains spaces i.e. "Specific Tiddler" then each space must be replaced with ''@@color:#00f;\000020@@'' as shown below.

{{{
#tiddlerSpecific\000020Tiddler a {
	color: #abf;
}
}}}
To prevent hex digits (0-9, ~A-F) after the space in the respective tiddler's name from being treated as part of the escape, CSS syntax requires either six hex digits in the escape as shown above, or inserting ''@@color:#00f;\20@@'' @@color:#c06;with a single trailing whitespace as shown below.@@
{{{
#tiddlerNew\20 Tiddler a {
	color: #abf;
}
}}}
!!!!End
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("t")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
*+++[Overview]
<<tiddler OverView>>
===

*+++[Whats In A Tiddler]
<<tiddler WhatsInATiddler>>
===

**+++[HTML]
<<tiddler HTML>>
===

**+++[Javascript]
<<tiddler JavaScript>>
===

**+++[CSS]
<<tiddler CSS>>

===

**+++[Plugins]
<<tiddler Plugins>>
===

**+++[Formatting Text]
<<tiddler Text>>
===

*+++[Formatting the Page]
<<tiddler FormattingThePage>>
===

*+++[Formatting Tiddlers]
<<tiddler FormattingTiddlers>>
===

**<<slider chkColors "CSSColors" "Color Chart" "ToolTip: Color Chart">>

**+++[Formatting Text]
<<tiddler FormattingText>>
===

**+++[How to use tags]
<<tiddler Tags>>
===

*+++[Macros Built-in]
<<tiddler [[Macros Built-in]]>>
===

**+++[Macros Other]
<<tiddler [[Macros Other]]>>
===

!!!&nbsp;''~TWExamples''^^<<toolbar editTiddler>>^^
----

<<<
~TiddlyWiki is being used for all kinds of things:
*+++[+ Tiddlypedia a collection of Wikipedia articles collected into a TiddlyWiki] 
[[The Nordic countries|http://www.tiddlypedia.com/nordic/]] 
[[Solar System|http://www.tiddlypedia.com/solarsystem/]]
----
===

*[[T342|http://t342.tiddlyspot.com/]]
*[[Photography|http://tvphoto.eml.cc/]] Nice Site
*[[Click here for An introduction to chain indexing Dewey Decimal|http://informationr.net/tdw/publ/chain_indexing/chain_indexing.html#Instructions]]
*[[TW Showcase|http://giffmex.tiddlyspot.com/]]
*[[My Qualitative TiddlyWiki|http://technology-escapades.net/qualitative.htm]] @@color:#C06;''&raquo; &raquo;'' @@ by ~CynthiaRussell
*[[My APA TiddlyWiki|http://technology-escapades.net/APA.htm]] @@color:#C06;''&raquo; &raquo;'' @@ by ~CynthiaRussell
*[[My name is Ktrey|http://ktrey.tiddlyspot.com/]] writing painfully amateurish album reviews
*''[[TiddlyWiki Blink List|http://www.blinklist.com/tag/tiddlywiki/]]'' Where dozens of TiddlyWikis hang out together.
*[[Task Oriented Performance Support |http://hytext.com/TOPS.html]] @@color:#C06;''&raquo; &raquo;'' @@ By Jerry Muelver
*[[George C Brackett|http://luceatlux.net/mcasmath10/]] A ~TiddlyWiki for studying math or science
*[[EdgarJ|http://elj.tiddlyspot.com/]] personal home page
* Schools in South Australia to [[distribute class materials to students|https://secure.ait.org/wiki/background.htm]]
* ChrisJohnson's [[personal home page|http://www.spkml.com/]]
* JacksonBoyle's collection of [[recipes|http://jacksonboyle.com/kitchen.htm]]
* JonathanCamp's guide to [[Prince 2 project management|http://www.microupdate.net/cms/doc/PrinceII.html]]
* BrandonSiegel's [[Case Personal Security Device Project|http://anubis.case.edu/398n]]
* MichaelDansie's site for the [[American Cryptogram Association|http://msig.med.utah.edu/RunningUtes/cryptogram/aca.html]]
* BrianHolland's [[student nodes|http://www.acsu.buffalo.edu/~bholland/]] from Buffalo Law School
* RuiCarmo's [[Python Grimoire|http://the.taoofmac.com/space/Python/Grimoire]], a sort of recipe book for the programming language Python
* Rich Kulesus' [[themer's blog|http://www.skinyourscreen.com/mrbiotech/]]
* Qliner Software are using TiddlyWiki to create the site for their [[hotkeys|http://www.qliner.com/hotkeys/]] product
* AndreasKänner's family home page at http://www.kaenner.de/
* ''~EliseSpringer'', a philospher at Wesleyan University in Connecticut, USA, is using TiddlyWiki for her homepage at http://espringer.web.wesleyan.edu/ https://wesfiles.wesleyan.edu/home/espringer/web/ and for
**[[ReasoningWell|http://parmenides.objectis.net/reason/]], a wiki for her Philosophy faculty
**[[ReasoningWell|http://reasoningwell.tiddlyspot.com/]] New on TiddlySpot
* MarkWygent of Wygent Reeds, a maker of Scottish bagpipe reeds from Delaware, has compiled a fascinating home page using TiddlyWiki at http://www.wygent.com/
* ChristopherJames has compiled a comprehensive guide to TabletPCs at http://www.tabletpcwiki.net/
* MiguelCentellas has created an extensive guide to Bolivian politics at http://www.centellas.org/politics/politiddly.html
* BrunoTiagoRodrigues has created a geocaching community site in Portuguese at http://travelbugrace.geocaching-pt.net/.
* CharlesStross, a celebrated British ScienceFiction writer, has used TiddlyWiki for his 'Tough Guide to the Rapture of the Nerds' at http://www.antipope.org/charlie/toughguide.html.
* KristofferNilausOlsen, a member of the Danish Student Group of Amnesty International, has used TiddlyWiki to collate reports of breaches of human rights. His site is at http://www.resultat.dk/sg/tw/students.html.
* MartinSilcock, an brand researcher working with Millward Brown, is using TiddlyWiki for his homepage at http://www.explorate.co.uk/.
* Many people are using the GTDTiddlyWiki variant for personal productivity, and there's been some interesting experiments in TiddlyWikiFiction.
<<<
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[Intro|TWExplainedIntro]]^^<<tiddler CloseThisOpen with: TiddlyWikiExplained  '« back'>>|<<toolbar editTiddler>>» ^^>>

{{firstletterT{
 @@color:#c06;T@@
}}}iddlyWiki is a single file framework that can be used to construct a vast array of applications.
{{MozTableTd MozTableTh MozTable {
Some of these these applications include such things as:
|padding:0;width:10em;<<tiddler ./columnone>>|padding:0;width:10em;<<tiddler ./columntwo>>|padding:0;width:15em;<<tiddler ./columnthree>>|
All communications with the ~JavaScript core framework is done through a text based interface called a ''tiddler''.+++[Glossary]
|<<tiddler ScrollBox with: Glossary 200px>>|
===<br><br>A ''tiddler'' is the basic building block of a ~TiddlyWiki. The ~TiddlyWiki structure can be considered similar to a card file used for recipes or an address book but does much, much more. In a ~TiddlyWiki the 'cards' are called tiddlers.
|bgcolor:#fcf;padding:5px;Each of these tabs is a tiddler.  We are using the card file concept to demonstrate the versatility of what can be put into a tiddler. This is no static card file it's like no card file you've seen before. You can put ''Text, HTML,  CSS, ~JavaScript'', embed ''objects'' like ''Flash'', and ''iframes'' into these tiddlers and run active scripts from them.|

}}}

<part columnone hidden>
*Web pages
*Organization
*Note Taking
*Data Bases
</part>

<part columntwo hidden>
*Blogs
*Journals
*Education
*Slideshows
</part>
<part columnthree hidden>
*Quality Assurance Manuals
*Instruction Manuals
*Test Procedures
*Presentations
</part>
!!!''TW For Math''^^<<toolbar editTiddler>>^^
----
<<<
*[[TW Math|http://twmath.tiddlyspot.com/]] Equation Editor
*[[aSciencePad|http://math.chapman.edu/~jipsen/asciencepad/asciencepad.html]] @@color:#C06;''&raquo; &raquo;'' @@ A ~TiddlyWiki Math Enabled
[[MyMathTW|file:///D:/Web%20Pages/TiddlySpot/AsciiMathML/SciencePad/asciencepad/asciencepad.html]]
[[Integrating MathML and SVG in Moodle and elsewhere|http://math.chapman.edu/~jipsen/talks/MathFest2005/JipsenMathFestSlides2005.html]] (slide show)
http://math.chapman.edu/~jipsen/asciencepad/asciencepad.html
http://www1.chapman.edu/%7Ejipsen/mathml/asciimath.html (~ASCIIMathML.js)+++[more...]
Translating ASCII math notation to Presentation MathML (HTML version)
Would you or your students like to easily produce good-looking math formulas on webpages using a simple calculator-style syntax and your own ASCII or HTML editor?
Here is a free multi-platform solution (and if you prefer it, LaTeX-style formulas also work).
Now even easier to use: just add one line to your HTML file to load ASCIIMathML.js 
===

http://luceatlux.net/wikimath/
http://bob.mcelrath.org/tiddlyjsmath.html (requires jsMath Latex)+++[more...]

<<<
*Description
LaTeX is the world standard for specifying, typesetting, and communicating mathematics among scientists, engineers, and mathematicians. For more information about LaTeX itself, visit the LaTeX Project. This plugin typesets math using jsMath, which is an implementation of the TeX math rules and typesetting in javascript, for your browser. Notice the small button in the lower right corner which opens its control panel.
*Installation
In addition to this plugin, you must also install [[jsMath|http://www.math.union.edu/~dpvc/jsMath/download/jsMath.html]] on the same server as your TiddlyWiki html file. If you're using TiddlyWiki without a web server, then the jsMath directory must be placed in the same location as the TiddlyWiki html file.

I also recommend modifying your StyleSheet use serif fonts that are slightly larger than normal, so that the math matches surrounding text, and \small fonts are not unreadable (as in exponents and subscripts).
{{{
.viewer {
  line-height: 125%;
  font-family: serif;
  font-size: 12pt;
}
}}}

If you had used a previous version of Plugin: jsMath, it is no longer necessary to edit the main tiddlywiki.html file to add the jsMath <script> tag. Plugin: jsMath now uses ajax to load jsMath.
<<<
===

[[ASCIIMath Image Fallback Scripts|http://www.pierce.ctc.edu/dlippman/asciimathtex/AMT.html]]+++[more...]
These JavaScript scripts, derived from Peter Jipsen's ASCIIMathML script, are designed to provide image-based fallback for browsers without MathML support, using Mimetex or another serverside TeX rendering engine.
===

[[ASCIIMathML.js (ver 1.4.7): Syntax and List of Constants|http://www1.chapman.edu/~jipsen/mathml/asciimathsyntax.html]]
<<<
{{borderless{
|vertical-align:bottom;<<toggleSideBar "" "" hide>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://groups.google.com/group/TiddlyWiki]]&nbsp;&raquo;|

<html><div align="center"><iframe src ="http://groups.google.com/group/TiddlyWiki" width="100%" align="center" height="600"></iframe></div></html>}}}
|>|bgcolor:#4c4c4c;@@color(#ccc):''5 tiddlers found matching /{{{img408}}}/''@@|bgcolor:#4c4c4c;  @@color:#ffffc8; Ver: <<version>>@@ |
|>|>|bgcolor:#999;color:#000;<<search>> <<option chkSearchTitles>> Titles <<option chkSearchText>> Text <<option chkSearchTags>>Tags <<option chkHoldSearches>> Hold |

|bgcolor:#4c4c4c;&nbsp;|bgcolor:#4c4c4c; ''Titles'' |bgcolor:#4c4c4c; ''Size'' |bgcolor:#4c4c4c; ''Tags'' |bgcolor:#4c4c4c; ''Modified'' |h
| 1|[[DeskTop]]| 1375||2007.07.14|
| 2|[[TWHelpSiteLinks]]| 5787||2009.08.07|
| 3|[[Test]]| 746|experimental|2007.09.15|
| 4|[[UpdateFrame]]| 937|killbookmark|2007.09.30|
| 5|[[Welcome]]| 1239|killbookmark,quickedit|2009.05.18|
|sortable|k

<html><hide linebreaks><table bgcolor="#000000"><tr><td colspan="5" width="580"><p>&nbsp;</p>	</td>	</tr>	<tr height="26"><td width="6%">	<p align="center"><font color="#ffcc00">#</font></p></td><td width="22%">	<p align="center"><font color="#ffcc00">Color</font></p></td><td width="176">	<p align="center"><font color="#ffcc00">RGB</font></p></td><td width="17%">	<p align="center"><font color="#ffcc00">HTML</font></p></td><td width="147">	<p align="center"><font color="#ffcc00">Options</font></p></td>	</tr>	<tr><td height="26" width="6%">	<p align="center"><font color="#ffcc00">1</font></p></td><td bgcolor="#ffcdc4" height="26" width="22%"><p>&nbsp;</p></td><td height="26" width="176">	<p align="center"><font color="#ff9999">255</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#99ff99">241</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#9999ff">213</font></p></td><td height="26" width="17%">	<p align="center"><font color="white">#FFF1D5</font></p></td><td height="26" width="147"> <p align="center"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="matching.php?ENTRY1=255&amp;ENTRY2=241&amp;ENTRY3=213">Match</a><img src="graph/space.gif" border="0" height="8" width="8"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="calculator.php?ENTRY1=255&amp;ENTRY2=241&amp;ENTRY3=213#Result">Calculator</a></p>	</td>	</tr>	<tr><td height="26" width="6%">	<p align="center"><font color="#ffcc00">2</font></p></td><td bgcolor="#c4f2ff" height="26" width="22%">	<p>&nbsp;</p></td><td height="26" width="176">	<p align="center"><font color="#ff9999">203</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#99ff99">251</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#9999ff">255</font></p></td><td height="26" width="17%">	<p align="center"><font color="white">#CBFBFF</font></p></td><td height="26" width="147"> <p align="center"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="matching.php?ENTRY1=203&amp;ENTRY2=251&amp;ENTRY3=255">Match</a><img src="graph/space.gif" border="0" height="8" width="8"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="calculator.php?ENTRY1=203&amp;ENTRY2=251&amp;ENTRY3=255#Result">Calculator</a></p>	</td>	</tr>	<tr><td height="26" width="6%">	<p align="center"><font color="#ffcc00">3</font></p></td><td bgcolor="#f8aaff" height="26" width="22%">	<p>&nbsp;</p></td><td height="26" width="176">	<p align="center"><font color="#ff9999">249</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#99ff99">230</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#9999ff">255</font></p></td><td height="26" width="17%">	<p align="center"><font color="white">#F9E6FF</font></p></td><td height="26" width="147"> <p align="center"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="matching.php?ENTRY1=249&amp;ENTRY2=230&amp;ENTRY3=255">Match</a><img src="graph/space.gif" border="0" height="8" width="8"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="calculator.php?ENTRY1=249&amp;ENTRY2=230&amp;ENTRY3=255#Result">Calculator</a></p>	</td>	</tr>	<tr><td height="26" width="6%">	<p align="center"><font color="#ffcc00">4</font></p></td><td bgcolor="#dbedd5" height="26" width="22%">	<p>&nbsp;</p></td><td height="26" width="176">	<p align="center"><font color="#ff9999">224</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#99ff99">250</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#9999ff">225</font></p></td><td height="26" width="17%">	<p align="center"><font color="white">#E0FAE1</font></p></td><td height="26" width="147"> <p align="center"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="matching.php?ENTRY1=224&amp;ENTRY2=250&amp;ENTRY3=225">Match</a><img src="graph/space.gif" border="0" height="8" width="8"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="calculator.php?ENTRY1=224&amp;ENTRY2=250&amp;ENTRY3=225#Result">Calculator</a></p>

	</td>	</tr>	<tr><td height="26" width="6%">	<p align="center"><font color="#ffcc00">5</font></p></td><td bgcolor="#f68681" height="26" width="22%">	<p>&nbsp;</p></td><td height="26" width="176">	<p align="center"><font color="#ff9999">247</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#99ff99">216</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#9999ff">160</font></p></td><td height="26" width="17%">	<p align="center"><font color="white">#F7D8A0</font></p></td><td height="26" width="147"> <p align="center"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="matching.php?ENTRY1=247&amp;ENTRY2=216&amp;ENTRY3=160">Match</a><img src="graph/space.gif" border="0" height="8" width="8"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="calculator.php?ENTRY1=247&amp;ENTRY2=216&amp;ENTRY3=160#Result">Calculator</a></p>	</td>	</tr>	<tr><td height="26" width="6%">	<p align="center"><font color="#ffcc00">6</font></p></td><td bgcolor="#73bff0" height="26" width="22%">	<p>&nbsp;</p></td><td height="26" width="176">	<p align="center"><font color="#ff9999">129</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#99ff99">237</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#9999ff">245</font></p></td><td height="26" width="17%">	<p align="center"><font color="white">#81EDF5</font></p></td><td height="26" width="147"> <p align="center"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="matching.php?ENTRY1=129&amp;ENTRY2=237&amp;ENTRY3=245">Match</a><img src="graph/space.gif" border="0" height="8" width="8"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="calculator.php?ENTRY1=129&amp;ENTRY2=237&amp;ENTRY3=245#Result">Calculator</a></p>

	</td>	</tr>	<tr><td height="26" width="6%">	<p align="center"><font color="#ffcc00">7</font></p></td><td bgcolor="#87bfc5" height="26" width="22%">	<p>&nbsp;</p></td><td height="26" width="176">	<p align="center"><font color="#ff9999">148</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#99ff99">237</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#9999ff">214</font></p></td><td height="26" width="17%">	<p align="center"><font color="white">#94EDD6</font></p></td><td height="26" width="147"> <p align="center"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="matching.php?ENTRY1=148&amp;ENTRY2=237&amp;ENTRY3=214">Match</a><img src="graph/space.gif" border="0" height="8" width="8"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="calculator.php?ENTRY1=148&amp;ENTRY2=237&amp;ENTRY3=214#Result">Calculator</a></p>	</td>	</tr>	<tr><td height="26" width="6%">	<p align="center"><font color="#ffcc00">8</font></p></td><td bgcolor="#d19f86" height="26" width="22%">	<p>&nbsp;</p></td><td height="26" width="176">	<p align="center"><font color="#ff9999">215</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#99ff99">226</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#9999ff">165</font></p></td><td height="26" width="17%">	<p align="center"><font color="white">#D7E2A5</font></p></td><td height="26" width="147"> <p align="center"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="matching.php?ENTRY1=215&amp;ENTRY2=226&amp;ENTRY3=165">Match</a><img src="graph/space.gif" border="0" height="8" width="8"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="calculator.php?ENTRY1=215&amp;ENTRY2=226&amp;ENTRY3=165#Result">Calculator</a></p>

	</td>	</tr>	<tr><td height="26" width="6%">	<p align="center"><font color="#ffcc00">9</font></p></td><td bgcolor="#780606" height="26" width="22%">	<p>&nbsp;</p></td><td height="26" width="176">	<p align="center"><font color="#ff9999">133</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#99ff99">99</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#9999ff">0</font></p></td><td height="26" width="17%">	<p align="center"><font color="white">#856300</font></p></td><td height="26" width="147"> <p align="center"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="matching.php?ENTRY1=133&amp;ENTRY2=99&amp;ENTRY3=0">Match</a><img src="graph/space.gif" border="0" height="8" width="8"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="calculator.php?ENTRY1=133&amp;ENTRY2=99&amp;ENTRY3=0#Result">Calculator</a></p>	</td>	</tr>	<tr><td height="26" width="6%">	<p align="center"><font color="#ffcc00">10</font></p></td><td bgcolor="#060c72" height="26" width="22%">	<p>&nbsp;</p></td><td height="26" width="176">	<p align="center"><font color="#ff9999">0</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#99ff99">127</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#9999ff">147</font></p></td><td height="26" width="17%">	<p align="center"><font color="white">#007F93</font></p></td><td height="26" width="147"> <p align="center"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="matching.php?ENTRY1=0&amp;ENTRY2=127&amp;ENTRY3=147">Match</a><img src="graph/space.gif" border="0" height="8" width="8"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="calculator.php?ENTRY1=0&amp;ENTRY2=127&amp;ENTRY3=147#Result">Calculator</a></p>

	</td>	</tr>	<tr><td height="26" width="6%">	<p align="center"><font color="#ffcc00">11</font></p></td><td bgcolor="#920688" height="26" width="22%">	<p>&nbsp;</p></td><td height="26" width="176">	<p align="center"><font color="#ff9999">158</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#99ff99">65</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#9999ff">166</font></p></td><td height="26" width="17%">	<p align="center"><font color="white">#9E41A6</font></p></td><td height="26" width="147"> <p align="center"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="matching.php?ENTRY1=158&amp;ENTRY2=65&amp;ENTRY3=166">Match</a><img src="graph/space.gif" border="0" height="8" width="8"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="calculator.php?ENTRY1=158&amp;ENTRY2=65&amp;ENTRY3=166#Result">Calculator</a></p>	</td>	</tr>	<tr><td height="26" width="6%">	<p align="center"><font color="#ffcc00">12</font></p></td><td bgcolor="#060a0e" height="26" width="22%">	<p>&nbsp;</p></td><td height="26" width="176">	<p align="center"><font color="#ff9999">0</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#99ff99">122</font><img src="graph/space.gif" border="0" height="8" width="8"><font color="#9999ff">37</font></p></td><td height="26" width="17%">	<p align="center"><font color="white">#007A25</font></p></td><td height="26" width="147"> <p align="center"><img src="graph/esa_black.gif" border="0" height="9" width="15"><a href="matching.php?ENTRY1=0&amp;ENTRY2=122&amp;ENTRY3=37">Match</a><img src="graph/space.gif" border="0" height="8" width="8"><img src="graph/esa_black.gif" border="0" height="9" width="15"> <a href="calculator.php?ENTRY1=0&amp;ENTRY2=122&amp;ENTRY3=37#Result">Calculator</a></p>	</td>	</tr> <tr><td colspan="5" width="580"><p>&nbsp;</p>	</td> </tr> </td></table> </html>
!!!<<gradient horiz #fc3 #fff>>&nbsp;TWHelpSearchDoc^^<<tiddler CloseThisOpen with: ThirdPartyPlugins  '« back'>>|<<toolbar editTiddler>>» ^^>>
''Now you can have the same search as used on TW Help.''

* Get this plugin here TwHelpSearchPlugin or here:
* http://twhelp.tiddlyspot.com/#TwHelpSearchPlugin

Optionally you can put this+++[search box]<<tiddler SearchBox>>===in SideBarOptions as seen on TW Help.+++[see the code]
{{{
|>|>|>|<<search>> |
|>|>| look for in |>|
| <<option chkSearchTitles>> | <<option chkSearchText>> | <<option chkSearchTags>> | <<option chkHoldSearches>> |
| titles |  text  | tags | hold |
}}}
===


----
''A Plugin Tweak for:'' SearchOptionsPlugin
!!!<<gradient horiz #abf #fff>>&nbsp;Description>>

<<<
The TwHelpSearchPlugin defines an alternative format for the ~SearchResults tiddler that is generated by the SearchOptionsPlugin . It presents the search results in tabular form numbering the rows and showing the tiddler title, the size in bytes, and the tags.  It is ready to be used with the [[SortableGridPlugin|http://solo.dc3.com/tw/#SortableGridPlugin]] (check versions) so any column can be sorted; such as size in ascending or descending order.
<<<
!!!<<gradient horiz #abf #fff>>Installation>>
If you have already installed SearchOptionsPlugin then your AdvancedOptions will have already been modified by that plugin to include the following: +++[see the code for this]
{{{
<<option chkSearchTitles>> Search tiddler titles
<<option chkSearchText>> Search tiddler text
<<option chkSearchTags>> Search in tiddler tags

<<option chkSearchTitlesFirst>> Show title matches first
<<option chkSearchList>> Show list of matching tiddlers 
}}}
===

<<<
<<option chkSearchTitles>> Search tiddler titles
<<option chkSearchText>> Search tiddler text
<<option chkSearchTags>> Search in tiddler tags
<<option chkSearchTitlesFirst>> Show title matches first

<<option chkSearchList>> Show list of matching tiddlers^^[1]^^
<<<
 ^^[1]^^@@color:#C06;(This option is critical in preventing normal ~TiddlyWiki search method.)@@

TwHelpSearchPlugin requires an additional insertion into AdvancedOptions for the option of holding the search results and appending any number of additional searches.  +++[see the code for this]
{{{
<<option chkHoldSearches>> Hold search results
}}}
===

<<<
<<option chkHoldSearches>> Hold search results
<<<
TwHelpSearchPlugin will attempt to add this to AdvancedOptions upon installation.

|bgcolor:#FCF;''NOTE:''  If either plugin fails to install their options; add them manually by pasting the code for them into AdvancedOptions.|
!!!End
!!!Help Site Links^^<<toolbar editTiddler>>^^

@@color:#C06;''&raquo; &raquo;'' @@<html><a href="javascript:;" onclick="var tid=story.findContainingTiddler(this); if (tid) story.refreshTiddler(tid.getAttribute('tiddler'),null,true); return false;">refresh</a></html>
----

<<<
#{{bigLink{[[Master TiddlyWiki Site|http://tiddlywiki.com/]]}}} @@color:#C06;''&raquo; &raquo;'' @@Jeremy Ruston's Official TW Information Source
#{{bigLink{[[Master TiddlyWiki Version Archives|http://www.tiddlywiki.com/archive/]]}}}@@color:#C06;''&raquo; &raquo;'' @@Archive Ver:2.0.11 to 2.5.3
#[[TiddlyWiki Discussion Group|http://groups.google.com/group/TiddlyWiki/topics]] @@color:#C06;''&raquo; &raquo;'' @@~TiddlyWiki Discussion Group
#[[TiddlyWiki Developers Group|http://groups.google.com/group/TiddlyWikiDev/]] @@color:#C06;''&raquo; &raquo;'' @@~TiddlyWiki Developers Discussion Group
#[[Tiddlywiki.org - Public Wiki Help Site|http://www.tiddlywiki.org/]] @@color:#C06;''&raquo; &raquo;'' @@ Go add your knowledge.
#{{bigLink{[[SidebarPluginVault|http://sidebarpluginvault.tiddlyspot.com/]]}}}@@color:#C06;''&raquo; &raquo;'' @@ The world's largest squeezable collection of ~TiddlyWiki addons, plugins, macros, and themes listed by function.
#{{bigLink{[[TiddlyWiki for the rest of us |http://www.giffmex.org/twfortherestofus.html]]}}} @@color:#C06;''&raquo; &raquo;'' @@~TiddlyWiki tutorial @@position:relative;+++^20em^[much more » »]
Some other sites, themes and applications to download.<br>[[Journal|http://www.giffmex.org/organizertw.html]] <br>[[My Notes|http://www.giffmex.org/emptynotestw.html]]<br>[[TW Showcase|http://giffmex.tiddlyspot.com/]] <br>[[TiddlyDu|http://www.giffmex.org/tiddlydu.html]]<br>[[Plugin (vault ) Directory|http://tiddlyvault.tiddlyspot.com/]] <br>[[Web View Example|http://www.giffmex.org/webviewtwexample.html]]===@@
#[[TiddlyVault|http://tiddlyvault.tiddlyspot.com/]]@@color:#C06;''&raquo; &raquo;'' @@ A directory of all known plugins
#{{bigLink{[[TiddlerToddler|http://tiddlertoddler.tiddlyspot.com/]]}}} @@color:#C06;''&raquo; &raquo;'' @@ an absolute beginner's guide to ~TiddlyWiki
#{{bigLink{[[Wiki On A Stick|http://uniforum.chi.il.us/slides/TiddlyWiki.html]]}}}
#[[A PowerPoint presentation on TiddlyWiki|http://www.giffmex.org/tiddlywikipowerpoint.ppt]] @@color:#C06;''&raquo; &raquo;'' @@  By Dave Gifford  (7mb)
#[[VisualTW|http://visualtw.ouvaton.org/VisualTW.html]] @@color:#C06;''&raquo; &raquo;'' @@ Wysiwyg plugin @@color:#C06;''&raquo; &raquo;'' @@ Encrypted fields plugin
#[[TiddlyWiki Guides|http://tiddlywikiguides.org/]]  @@color:#C06;''&raquo; &raquo;'' @@Welcome to the (unofficial) ~TiddlyWiki Guides
#[[TiddlyWikiTips|http://tiddlywikitips.com/]] @@color:#C06;''&raquo; &raquo;'' @@~TiddlyWikiTips.com is run by Jim Barr 
#[[TiddlyWikiTutorial|http://www.blogjones.com/TiddlyWikiTutorial.html]] @@color:#C06;''&raquo; &raquo;'' @@Learn the Basics of ~TiddlyWiki
#[[TiddlySpot|http://tiddlyspot.com/]] @@color:#C06;''&raquo; &raquo;'' @@Free Tiddlywikis and  Hosting
#[[TiddlySpotFAQ|http://twfaq.tiddlyspot.com/]] @@color:#C06;''&raquo; &raquo;'' @@Questions and Answers
#[[TiddlyThemes|http://tiddlythemes.com/#Home]]@@color:#C06;''&raquo; &raquo;'' @@ A gallery of ~TiddlyWiki themes 
#[[TiddlyThemes-Rin|http://tiddlythemes.com/empties/Rin.html]]@@color:#C06;''&raquo; &raquo;'' @@ A Most Popular Theme [[Clint Checkett's Blog|http://blog.checkettsweb.com/]]
#[[TiddlyTools|http://tiddlytools.com/]] @@color:#C06;''&raquo; &raquo;'' @@Extensive collection of fabulous Plugins and much more
#[[TiddlyWiki Org|http://www.tiddlywiki.org/]] @@color:#C06;''&raquo; &raquo;'' @@+++[Read more...]
The purpose of ~TiddlyWiki.org is to support the community that has grown up around ~TiddlyWiki with the infrastructure needed to share in its development while maintaining and improving quality. ~TiddlyWiki.org also hosts projects related to ~TiddlyWiki such as ~ZiddlyWiki (a serverside implementation of ~TiddlyWiki) and ~TiddlySnip (a Firefox extension that enhances ~TiddlyWiki).
===

#[[Tid-Help|http://tidhelp.tiddlyspot.com/]] @@color:#C06;''&raquo; &raquo;'' @@ Help/Tutorial
#[[Knightnet|http://knighjm.googlepages.com/knightnet-default-tw.html]] @@color:#C06;''&raquo; &raquo;'' @@Knightnet Default ~TiddlyWiki  TW the way I like it - plus my Plugins
#[[Using TiddlyWiki|http://en.wikibooks.org/wiki/Using_TiddlyWiki]]  @@color:#C06;''&raquo; &raquo;'' @@From Wikibooks, the open-content textbooks collection
#''[[TW Help|http://twhelp.tiddlyspot.com/]]'' @@color:#C06;''&raquo; &raquo;'' @@''This ~TiddlyWiki'' (you're already there..here... you're in it now!) [[TW Help Alt.|http://tinyurl.com/3x3p4d]]
#[[Martin's Wiki|http://www.martinswiki.com/]] @@color:#C06;''&raquo; &raquo;'' @@ ~Cross-Wiki Formatting plugins 
#http://svn.tiddlywiki.org/Trunk/
#http://svn.tiddlywiki.org/Trunk/contributors/
#http://trac.tiddlywiki.org/browser/Trunk

----

<<<
<part chinese hidden>

{{textleft{
*http://tinyurl.com/ytb5er (http://exp.tiddlyspot.com/) @@color:#C06;''&raquo; &raquo;'' @@ Chinese - translated lot of TW Help
*http://cluster.tiddlyspot.com/ @@color:#C06;''&raquo; &raquo;'' @@ Presentation in all Chinese 
*http://www.tiddlywiki.cn/
*http://jiangzhanyong.com/2006/11/tiddlywiki-zh-rules-114.html
你對資料整理感到氣餒嗎?
你迷失在眼花撩亂的網路叢林裡嗎?
TiddlyWiki-功能超強的個人知識管理工具
你也可以打造自己的維基小百科
學生 上班族 提升自我競爭力的秘笈寶典
資訊收集、專題研究、市場分析、報告企劃 通通搞定!!
http://www.wunan.com.tw/bookdetail.asp?no=8852
}}}
</part>
!!!<<gradient horiz #fc3 #ffffff>>~TiddlyWiki Keystrokes ^^<<tiddler CloseThisOpen with: KeyStrokes  '« back'>>|<<toolbar editTiddler>>» ^^>>

''CTRL ENTER''
    Closes and accepts changes to the current tiddler being edited.
|NOTE:Check your EditTemplate and make sure there are no plus signs (+) in front of any command preceding +saveTiddler when using ~Ctrl-Enter |
''ESCAPE''
    Closes and discards changes to the current tiddler being edited.
!!!!Cut, Copy, and Paste
''CTRL X''
    Cut the selected text to the clipboard
''CTRL C''
    Copy the selected text to the clipboard
''CTRL V''
    Paste the clipboard to the current cursor position
!!!!Undo and Redo
''CTRL Z''
    Undo the last editing command
''CTRL Y''
    Redo the last undo command
----
Source: [[Tid-Help - a primer for tiddlywiki|http://tidhelp.tiddlyspot.com/]]
!!!<<gradient horiz #abf #fff>>&nbsp;TWLinkCollection ^^[[Edit this|TWLinkCollection]]^^>>
----
<<<
[[TiddlyWiki Group|http://groups.google.com/group/TiddlyWiki]]  ~TiddlyWiki Discussion Group
http://tiddlywikiguides.org/
[[GTDTiddlyWiki|http://shared.snapgrid.com/index.html]]
http://tiddlywiki.com/
[[TiddlySpot|http://tiddlyspot.com]]
[[TiddlySpotFAQ|http://twfaq.tiddlyspot.com/]]
http://tiddlystyles.com/
http://solo.dc3.com/tw/ Red Mountain Vista Bob Denny's extensions to TiddlyWiki 
http://www.checkettsweb.com/
http://tiddlytools.com/
[[TiddlyWiki Org|http://www.tiddlywiki.org/]]
[[TiddlyWikiAdaptations]]
[[TiddlyWikiTutorial|http://www.blogjones.com/TiddlyWikiTutorial.html]]

<<<
{{floatleft{
<<toolbar editTiddler>>

}}}
{{borderless{
|vertical-align:bottom;<<toggleSideBar "" "" hide>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window| http://tiddlyvault.tiddlyspot.com]]&nbsp;&raquo;|
{{textcenter{
Please wait @@color:#00f;~TiddlyVault@@ is loading.... and best viewed using<<toolbar fullscreen>>.
}}}
<html><div align="center"><iframe src =" http://tiddlyvault.tiddlyspot.com" width="100%" align="center" height="600"></iframe></div></html>}}}
{{scrollTWTweets{
/%
|Name|TwitterTabs|
|Source|http://www.TiddlyTools.com/#TwitterTabs|
|Version|1.0.1|
|Author|Eric Shulman|
|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|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|display a tabset with current Twitter feeds|
%/<<tiddler HideTiddlerBackground>><<tiddler HideTiddlerTags>>/%

- - - - - TAB DEFINITIONS - - - - -
%/<<tabs txtTwitterTabs
        'TiddlyWikiHelp''show tweets from @TiddlyWikiHelp' [[TwitterTabs##TiddlyWikiHelp]]
	'tiddlytools'	'show tweets from @tiddlytools'	[[TwitterTabs##tiddlytools]]
        'TiddlyWiki''show tweets from @TiddlyWiki' [[TwitterTabs##TiddlyWiki]]
	'find...'	'find tweets containing...'	[[TwitterTabs##search]]
	'from...'	'show tweets from...'		[[TwitterTabs##user]]
>>/%
!tiddlytools
<<tiddler [[TwitterTabs##showUserResults]] with: tiddlytools>>
!DoctorKarl
<<tiddler [[TwitterTabs##showUserResults]] with: DoctorKarl>>
!TiddlyWikiHelp
<<tiddler [[TwitterTabs##showUserResults]] with: TiddlyWikiHelp>>

!msgray
<<tiddler [[TwitterTabs##showUserResults]] with: msgray>>
!TiddlyWiki
<<tiddler [[TwitterTabs##showUserResults]] with: TiddlyWiki>>
!search
<<tiddler [[TwitterTabs##showSearchForm]] with: {{config.options.txtTweetSearch||'TiddlyWiki'}}>>
!user
<<tiddler [[TwitterTabs##showUserForm]] with: {{config.options.txtTweetUser||'TiddlyWiki'}}>>
!end

- - - - - TAB CONTENT FORMATTING - - - - -
!showSearchForm
{{small smallform{
search for tweets containing: <<option {{config.options.txtTweetSearch='$1';'txtTweetSearch'}}>><html>
<hide linebreaks><input type='button' value='search' onclick="

	var target=this.parentNode.parentNode.parentNode;
	var out='\<\<tiddler [[TwitterTabs##showSearchForm]] with: {{config.options.txtTweetSearch}}\>\>';
	removeChildren(target); wikify(out,target);
"></html>@@display:block;white-space:normal;<<tiddler [[TwitterTabs##showSearchResults]]
	with: {{config.options.txtTweetSearch}}>>@@}}}
!end

!showSearchResults
<script label="refresh">
	var target=place.parentNode.parentNode;
	var out='\<\<tiddler [[TwitterTabs##showSearchResults]] with: [[$1]]\>\>';
	removeChildren(target); wikify(out,target);

</script>~~__[[Recent tweets about: "$1"|http://search.twitter.com/search?q=$1]]__~~
<hr>@@display:block;height:20em;overflow:auto;<script>window.twitterPlace=place;</script><script src="http://search.twitter.com/search.json?q=$1&rpp=25&callback=twitterCallback"></script>@@@@display:block;text-align:right;^^scroll for more...^^@@
!end

!showUserForm
{{small smallform{
show tweets from: <<option {{config.options.txtTweetUser='$1';'txtTweetUser'}}>><html>

<hide linebreaks><input type='button' value='search' onclick="
	var target=this.parentNode.parentNode.parentNode;
	var out='\<\<tiddler [[TwitterTabs##showUserForm]] with: {{config.options.txtTweetUser}}\>\>';
	removeChildren(target); wikify(out,target);
"></html>@@display:block;white-space:normal;<<tiddler [[TwitterTabs##showUserResults]]
	with: {{config.options.txtTweetUser}}>>@@}}}
!end

!showUserResults
{{toolbar{<script label="refresh">
	var target=place.parentNode.parentNode;
	var out='\<\<tiddler [[TwitterTabs##showUserResults]] with: [[$1]]\>\>';
	removeChildren(target); wikify(out,target);

</script>}}}~~__[[Recent tweets from $1|http://twitter.com/$1]]__~~
<hr>@@display:block;height:20em;overflow:auto;<script>window.twitterPlace=place;</script><script src="http://twitter.com/statuses/user_timeline/$1.json?callback=twitterCallback"></script>@@@@display:block;text-align:right;^^scroll for more...^^@@
!end

- - - - - TWEET ITEM FORMAT - - - - -
| where: %0=image, %1=name, %2=text, %3=timestamp
| note: "(48px+,48px+)" syntax requires [[ImageSizePlugin]]

!itemFormat
{{small{
[<img(35px+,35px+)[%0]][[%1|http://twitter.com/%1]]: %2
{{fine{
%3}}} {{clear{
}}}
}}}
!end

- - - - - CALLBACK RENDERING FUNCTION - - - - -
%/<script>

window.twitterCallback=function(data){ // data object returned from twitter.com
	var fmt=store.getTiddlerText('TwitterTabs##itemFormat');
	if (data.results) data=data.results; // for SEARCH results
	removeChildren(window.twitterPlace);
	for (var i=0; i<data.length; i++) { var item=data[i];
		var img=item.user? item.user.profile_image_url : item.profile_image_url;
		var who=item.user? item.user.screen_name : item.from_user;
		wikify(fmt.format([img,who,item.text,item.created_at]),window.twitterPlace);
	}
}
</script>
}}}
!!!! &nbsp;[[Editing ver:2.2.x online|TWVersion_2.2.x Tweaks]]
> I'm working on a version of TW called VisualTiddlyWiki with visual
> editors (Wysiwyg rich text editor, vector draw editor, ...). I put a
> demo on http://visualtw.ouvaton.org/VisualTW.html.

> But while beeing online, I cannot edit text (and edited fields are

> note recorded).
> chkHttpReadOnly is disable. It's seems TW 2.2.0 adds something which
> lock tiddler modifications while beeing online.
<<<
Are you setting chkHttpReadOnly = false in a systemConfig tiddler?
If so, also add: readOnly = false; 
i.e.
{{{
config.options.chkHttpReadOnly =false;
readOnly = false;
}}}
note:tag with systemConfig
<<<
!!!Tame wandering or stranded ~NestedSliders floating panel
{{{
@@position:relative;+++^35em^[What's In A Tiddler]
This is a tabbed list of some of the common things you can put into a tiddler.  They include text, images, CSS, HTML,  JavaScript, Plugins etc.
[[Go there...|WhatsInATiddler]]
===@@
}}}

@@position:relative;+++^35em^*[What's In A Tiddler]
This is a tabbed list of some of the common things you can put into a tiddler.  They include text, images, CSS, HTML,  JavaScript, Plugins etc.
[[Go there...|WhatsInATiddler]]
===@@

!!!&nbsp; End
{{textcenter{
*~TabDemo1 for tab color demonstration.

[img[http://img174.imageshack.us/img174/3365/castleondanube180cg2.jpg]]

}}}
{{textcenter{
*~TabDemo2&nbsp;  for tab color demonstration.

[img[http://img215.imageshack.us/img215/6379/parliamenthousebudapestwx6.jpg]]

}}}
<<tabs txtMoreTab "Missing" "Missing tiddlers" TabMoreMissing "Orphans" "Orphaned tiddlers" TabMoreOrphans>>
{{borderless{
|>| ''Table of Contents'' |
|>| <html><div align="center"><font size="-1"><a href="javascript:;" onclick="var tid=story.findContainingTiddler(this); if (tid) story.refreshTiddler(tid.getAttribute('tiddler'),null,true); return false;"><input class="btn" type="button"  onmouseover="this.className='btn btnhov'" onmouseout="this.className='btn'" value="Refresh Display"></a></html> |
|>| @@color(#00f): ''Go to tiddler''@@ @@color:#C06;''&raquo; &raquo;'' @@<<gotoTiddler>>@@color:#C06;~~start typing~~@@ |
|<<tiddler ./toc>> |<<tiddler ./head>> |
|>| @@color:#666;Note: All of these items and more can be found on the ~MainMenu in the left column.@@ |
}}}

<part toc hidden>

*&nbsp;[[OverView|OverView]]
*''<<popup [[Whats In A Tiddler]] [[<<forEachTiddler where 'tiddler.tags.contains("wiat")'$))]]>>''
*''<<popup [[Formatting the Page]] [[<<forEachTiddler where 'tiddler.tags.contains("ftptab")'$))]]>>''
*''<<popup [[Formatting Tiddlers]] [[<<forEachTiddler where 'tiddler.tags.contains("ft")'$))]]>>''
*''<<popup [[Formatting Text]] [[<<forEachTiddler where 'tiddler.tags.contains("ftext")'$))]]>>''
*&nbsp;''[[Formatting Dates|Date]]''
*''<<popup [[Formatting Tables]] [[<<forEachTiddler where 'tiddler.tags.contains("frmttable")'$))]]>>''
*''<<popup [[HowToUseLinks]] [[<<forEachTiddler where 'tiddler.tags.contains("htul")'$))]]>>''
*''<<popup [[UsingColor]] [[<<forEachTiddler where 'tiddler.tags.contains("color")'$))]]>>''
*''<<popup [[ThirdPartyPlugins]] [[<<forEachTiddler where 'tiddler.tags.contains("tpp")'$))]]>>''
*''<<popup [[Macros Built-in]] [[<<forEachTiddler where 'tiddler.tags.contains("mbi")'$))]]>>''
*''<<popup [[Macros Other]] [[<<forEachTiddler where 'tiddler.tags.contains("mo")'$))]]>>''
*&nbsp;[[How to use tags|Tags]]

</part>
<part head hidden>

*[[Hints and Kinks - CSS|Hints and Kinks - CSS]]
*[[Hints and Kinks - Tweaks|Hints and Kinks - Tweaks]]
*[[Glossary]]
*''<<tiddler CSSMenu>>''
*[[CSS]]
*[[HTML]]
*[[JavaScript]]
*''[[FAQ|http://twfaq.tiddlyspot.com/]]''
*[[OtherHelpSites]]
*[[Tools For TiddlyWiki|ToolsForTiddlyWiki]]
*[[NavigationWithTW]]

</part>
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;TableContentControl^^<<tiddler CloseThisOpen with: Tables  '« back'>>|<<toolbar editTiddler>>» ^^>>

!!!<<gradient horiz #abf #ffffff>>&nbsp;CSS Demo>>
|text-align:center; this is centered|>|>|
|line-height:25pt;this is line height 25pt|>|>|
|text-align:left;letter-spacing:5pt; this is letter spacing (5pt)|>|>|
|width:275px;vertical-align:middle; width 275px vertical aligned middle | content |width:50em;text-align:center; width 50em set to expand/contract  |
|~| content | content |
|~| content | content |
|vertical-align:bottom; vertical aligned bottom | content | content |
|~|vertical-align:middle; content |padding:10px; padding 10px |
|~| content | content |
CSS like bgcolor must be against the left margin
<<<
{{{
|text-align:center; this is centered|>|>|
|line-height:25pt;this is line height 25pt|>|>|
|text-align:left;letter-spacing:5pt; this is letter spacing (5pt)|>|>|
|width:275px;vertical-align:middle; vertical aligned middle | content |width:50em;text-align:center; width set to expand/contract  |
|~| content | content |
|~| content | content |
|vertical-align:bottom; vertical aligned bottom | content | content |
|~|vertical-align:middle; content |padding:10px; padding 10px |
|~| content | content |
}}}

<<<
!!!<<gradient horiz #fc3 #fff>>&nbsp;TableExamples^^<<tiddler CloseThisOpen with: Tables  '« back'>>|<<toolbar editTiddler>>» ^^>>
Here are a few examples
|bgcolor:#fff;<<tiddler ./col1exp>> |bgcolor:#000;<<tiddler ./col2code>> |
|>|>| <<tiddler [[June 2007 Statistics]]>> |
|>|>|bgcolor:#000;<<tiddler ./junstats>> |

<part col1exp hidden>
Example 1
| !one | !two | !three |
|>| r1r2c1c2 |r1c3|
|>|~|r2c3|

Example 2
| !one | !two | !three |
|r1c1| r1r2c2 |r1c3|
|r2c1|~|r2c3|

Example 3
| !one | !two | !three |
|r1c1|r1c2| r1r2c3 |
|r2c1|r2c2|~|


Example4
| !one | !two | !three | !four |
| r1r2c1 |>| r1c2c3 | a |
|~|b|c|d|
|e|~|~| f|

Example 5
| !one | !two | !three | !four |
| r1r2c1 |>| r1c2c3 |a|
|~|b|c|d|
|e|~|f|~|

Example 6
|bgcolor(#99CCFF):Name|First Name|
|~|Middle Name|
|~|Last Name|
</part>

<part col2code hidden>
{{{
Example 1
|!one|!two|!three|
|>| r1r2c1c2 |r1c3|
|>|~|r2c3|
}}}

{{{
Example 2
|!one|!two|!three|
|r1c1| r1r2c2 |r1c3|
|r2c1|~|r2c3|
}}}

{{{
Example 3
|!one|!two|!three|
|r1c1|r1c2| r1r2c3 |
|r2c1|r2c2|~|
}}}

{{{
Example4
|!one|!two|!three|!four|
| r1r2c1 |>| r1c2c3 | a |
|~|b|c|d|
|e|~|~| f|
}}}

{{{
Example 5
|!one|!two|!three|!four|
| r1r2c1 |>| r1c2c3 |a|
|~|b|c|d|
|e|~|f|~|
}}}

{{{
Example 6
|bgcolor(#99CCFF):Name|First Name|
|~|Middle Name|
|~|Last Name|
}}}

</part>

<part junstats hidden>
{{{
|>|>|>|>| !June 2007 Statistics |
|&nbsp;| Page Loads | Unique Visitors | First Time Visitors | Returning Visitors |
|Total | 5,340| 4,639| 3,372| 1,267|
|Average | 178| 155| 112| 42|
}}}
</part>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[Intro|TableIntro]]^^<<tiddler CloseThisOpen with: Tables  '« back'>>|<<toolbar editTiddler>>» ^^>>

{{borderless{
|bgcolor:#fff; <<tiddler ./exp>> |
}}}
<part exp hidden>
{{textleft{
|bgcolor:#F7D8A0;vertical-align:middle;  speaker |bgcolor:#abf; Turntable |bgcolor:#F7D8A0;vertical-align:middle;  speaker |
|~|bgcolor:#94EDD6; CD Player |~|
|~|bgcolor:#cfc; {{twLink{[[AM/FM Radio|Radio]]}}} |~|

*<<gradient horiz #cfc #fff>>Here you can see a table built row by row until it spans multiple rows and columns and is captioned.>>
*<<gradient horiz #F7D8A0 #fff>>There are also several examples covering many configurations and the code used to generate them.>>
*<<gradient horiz #cfc #fff>>How to align table content to the top, middle and bottom.>>

*<<gradient horiz #F7D8A0 #fff>>Set table width for fixed size or collapse and expand as window size is changed>>
*<<gradient horiz  #cfc #fff>>Make a borderless table>>
}}}
</part>
+++[Check out a beautiful table here]
[[<<tiddler PeriodicTable>>
===

----
/***
|''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
// %/
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[TableSteps]] a row by row description on how to build a table^^<<tiddler CloseThisOpen with: Tables  '« back'>>|<<toolbar editTiddler>>» ^^>>
!!!!!<<gradient horiz #abf #fff>>&nbsp;1: Build your headings row >>
Note: Heading text colors can be change by putting this in your StyleSheet:
 {{{
.viewer .twtable th {color:[[ColorPalette::Foreground]];} using the ColorPalette Or 
.viewer .twtable th {color:#f00;} the color of your choice.
}}}

The background can be changed  by putting this in your StyleSheet:
{{{.viewer .twtable th {background:[[ColorPalette::SecondaryLight]];} or color of your choice}}}
|!Headings(1)|!Heading(2)|!Heading(3)|
Headings are generated with an exclamation mark ( ! ) as the leading character.
<<<
{{wrappingClass{ ''&nbsp;Code&nbsp;'' }}}
{{{
|!Headings(1)|!Heading(2)|!Heading(3)|
}}}

<<<
----
!!!!!<<gradient horiz #abf #fff>>&nbsp;''2: Add a row:''>>
|!Headings(1)|!Heading(2)|!Heading(3)|
|Row 1, Column 1|Column 2|Column 3|
<<<
{{wrappingClass{ ''&nbsp;Add a row Code&nbsp;'' }}}
{{{
|!Headings|!Heading2|!Heading3|
|Row 1, Column 1|Column 2|Column 3|
}}}
<<<
----
!!!!!<<gradient horiz #abf #fff>>&nbsp;3: Span multiple columns with a row>>
|!Headings(1)|!Heading(2)|!Heading(3)|
|Row 1, Column 1|Column 2|Column 3|
|>|>| Span multiple columns |
Use the right angle bracket (>) to span columns; it is equal to colspan in HTML

<<<
{{wrappingClass{ ''&nbsp;Span multiple columns with a row Code&nbsp;'' }}}
{{{
|!Headings(1)|!Heading(2)|!Heading(3)|
|Row 1, Column 1|Column 2|Column 3|
|>|>| Span multiple columns |
}}}
<<<
----
!!!!!<<gradient horiz #abf #fff>>&nbsp;4: Span multiple rows and align text>>
|!Headings(1)|!Heading(2)|!Heading(3)|
|Row 1, Column 1|Column 2|Column 3|
|>|>| Span multiple columns |
|vertical-align:top;padding:5px;text-align:center;One column spans multiple rows and is vertically aligned, text centered and padded with CSS|>| Align Right|
|~|>|Align Left |
|~|>| Align Center |

<<<
#Use the tilde (~) to span rows; it is equal to the rowspan in HTML.
#Alignment is achieved by leaving spaces on either side of the content for right or left alignment or a space on both sides for centering.
#Notice that CSS can be used in a table to set right, left and vertical alignment. Padding has been used here as well.
<<<
<<<
{{wrappingClass{ ''&nbsp;Span multiple rows and align text Code&nbsp;'' }}}
{{{
|!Headings(1)|!Heading(2)|!Heading(3)|
|Row 1, Column 1|Column 2|Column 3|
|>|>| Span multiple columns |
|vertical-align:top;padding:5px;text-align:center;One column spans multiple rows and is vertically aligned, text centered and padded with CSS|>| Align Right|
|~|>|Align Left |
|~|>| Align Center |
}}}
<<<
----
!!!!!<<gradient horiz #abf #fff>>&nbsp;5: Add color to a cell background and add caption>>

|!Headings(1)|!Heading(2)|!Heading(3)|
|Row 1, Column 1|Column 2|Column 3|
|>|>| Span multiple columns |
|vertical-align:top;padding:5px;text-align:center;One column spans multiple rows and is vertically aligned, text centered and padded with CSS|>| Align Right|
|~|>|Align Left |
|~|>| Align Center |
|>|>|bgcolor:#FF9;Add color to a cell|
|@@color:#39F;'''Finally add a caption by ending the table with a vertical bar followed by a c''@@ |c
<<<
{{wrappingClass{ ''Add Color to a cell background and add caption Code&nbsp;'' }}}
{{{
|!Headings(1)|!Heading(2)|!Heading(3)|
|Row 1, Column 1|Column 2|Column 3|
|>|>| Span multiple columns |
|vertical-align:top;padding:5px;text-align:center;One column spans multiple rows and is vertically aligned, text centered and padded with CSS|>| Align Right|
|~|>|Align Left |
|~|>| Align Center |
|>|>|bgcolor:#FF9;Add color to a cell|
|@@color:#39F;''Finally add a caption by ending the table with a vertical bar followed by a c''@@ |c
}}}

<<<
----
!!!!!<<gradient horiz #abf #fff>>&nbsp;End of Tables
!!!<<gradient horiz #fc3 #fff>>&nbsp;TableTemplate^^<<tiddler CloseThisOpen with: Tables  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{{
 <<newTiddler title:'New Table' text:{{store.getTiddlerText('BlankTable')}}>> 

}}}
!!!!Example:
Put this in ~StyleSheet: SimonsNiceTable
Then put your template something like this: in BlankTable. 
Now put this button NewTableFromTemplate somewhere convenient like SideBarOptions

@@color:#C06;''&raquo; &raquo;'' @@ Compliments of: Simon Baird
!!!<<gradient horiz #fc3 #fff>>&nbsp;TableTips^^<<tiddler CloseThisOpen with: Tables  '« back'>>|<<toolbar editTiddler>>» ^^>>

''Changing heading colors''
{{{
.viewer th, .viewer thead td, .twtable th, .twtable thead td  {
	background: #abf;
	border: 1px solid #666;
	color: #fff;
        vertical-align:top;}
}}}
The following are some miscellaneous tips on various table related items.
!!!<<gradient horiz #fc3 #fff>>&nbsp;Using nowrap>>

|bgcolor:#fff;Force a column to keep its text all on one line.|bgcolor:#fff;There was movement at the station for the word had passed around that the colt from Old Regret had got away.|

|bgcolor:#fff;@@white-space: nowrap;Force a column to keep its text all on one line.@@|bgcolor:#fff;There was movement at the station for the word had passed around that the colt from Old Regret had got away.|
!!!!!~StyleSheet Code
{{{.viewer td {white-space: nowrap;} }}}
!!!!! alternative Inline Code
{{{
|@@white-space: nowrap;Force a column to keep its text all on one line.@@|There was movement at the station for the word had passed around that the colt from Old Regret had got away.|
}}}

!!!<<gradient horiz #fc3 #fff>>&nbsp;Alternating row colors ~TiddlyWiki style>>
|!0|!content|!content|
|1| content | content |
|2| content | content |
|3| content | content |
|4| content | content |
|5| content | content |
|cssClass|k

!!!!!Code for StyleSheet
{{{
.viewer tr.oddRow { background-color: #eaeaea; }
.viewer tr.evenRow { background-color: #fff; } 
}}}


!!!!!<<gradient horiz #fc3 #fff>>&nbsp;Alternating row colors HTML>>
<html><hide linebreaks>
<table>
<tr class="d0"><td>Annie Bates</td><td>was her name</td></tr>

<tr class="d1"><td>Making love</td><td>was her game</td></tr>
<tr class="d0"><td>For a rose</td><td>you could buy</td></tr>

<tr class="d1"><td>A night by</td><td>her side</td></tr>
</table>
</html>
!!!Code for StyleSheet
{{{
tr.d0 td {
background-color: #CCc; color: black;
}
tr.d1 td {
background-color: #eaeaea; color: black;
}
}}}
!!!Code for tiddler
{{{
<html><hide linebreaks>

<table>
<tr class="d0"><td>Annie Bates</td><td>was her name</td></tr>
<tr class="d1"><td>Making love</td><td>was her game</td></tr>

<tr class="d0"><td>For a rose</td><td>you could buy</td></tr>
<tr class="d1"><td>A night by</td><td>her side</td></tr>

</table>
</html>
}}}

!!!End
<<tabs "" 
[[Intro ]] "" [[TableIntro]] 
[[BorderlessTable ]] "" [[BorderlessTable]] 
[[Columns and Rows ]] "" [[ColumnsAndRows]] 
[[MemorizeTables ]] "" [[MemorizeTables]]
[[MozTableExample ]] "" [[MozTableExample]]  
[[Table Step by Step ]] "" [[TableSteps]]  
[[TableExamples ]] "" [[TableExamples]]  
[[TableContentControl ]] "" [[TableContentControl]] 
[[TableTemplate ]] "" [[TableTemplate]] 
[[TableTips ]] "" [[TableTips]]
[[TruthTable ]] "" [[TruthTable]]   
[[TruthTableMozDemo ]] "" [[TruthTableMozDemo]]>>


.viewer .tabSelected {

        background:url("http://img505.imageshack.us/img505/489/navbarredlt5.gif") repeat-x top left;top left;
        background-color:#fcb;
        font-size:0.95em;
        font-weight:bold;
        color:#a00;
	text-decoration:none;
        border: 0px solid #999;      
}



        .viewer .tabUnselected {
        background:url("http://img261.imageshack.us/img261/8603/navbargrayhw1.png") repeat-x top left;top left;
        background-color:#eee;
        font-size:0.95em;
        font-weight:bold;
	color:#006;
        text-decoration:none;
        border: 0px solid #999; 

}

.viewer .tabUnselected:hover{
        background:url("http://img505.imageshack.us/img505/489/navbarredlt5.gif") repeat-x top left;top left;
        background-color:#eee;
        font-size:0.95em;
        font-weight:bold;
	color:#006;
        text-decoration:none;
        border: 0px solid #999; 

}
#tiddlerRadio .tabUnselected {
	color: #900;
	background: #99AAEE;
        text-decoration:none;
}

#tiddlerTextAnatomy .tabUnselected {
	color: #fff;
	background: #99AAEE;
        text-decoration:none;
}

#tiddlerOverView .tabUnselected {
	color: #fff;
	background: #99AAEE;
        text-decoration:none;
}

#tiddlerOverView .tabSelected{
	text-decoration:none;
}

#tiddlerRadio .tabSelected{
	text-decoration:none;
}

#tiddlerTextAnatomy .tabSelected{
	text-decoration:none;
}

#tiddlerFormattingTiddlers .tabSelected{
	text-decoration:none;
}

#tiddlerFormattingTiddlers .tabUnselected {
	color: #fff;
	background: #06C;
        text-decoration:none;
}

#tiddlerFormattingThePage .tabUnselected {
	color: #fff;
	background: #06C;
        text-decoration:none;
}

#tiddlerFormattingThePage  .tabSelected{
       	text-decoration:none;
}

#tiddlerTWHelp .viewer a {
color:#04b;
text-decoration:none;
}

#tiddlerTWHelp a:hover{
	background: #04b;
	color: #fff;
}


#tiddlerFormattingThePage a:hover{
	background: #04b;
	color: #fff;
}
<<tabs txtFavourite
   Main "Main" {{tiddler.title+"##Main"}}
   Work "Work" {{tiddler.title+"##Work"}}
   Personal "Personal" {{tiddler.title+"##Personal"}}
   Misc "Misc" {{tiddler.title+"##Misc"}}>> 


.viewer .tabSelected {
        font-size:0.95em;
        font-weight:bold;
        color: #006699;
	text-decoration:none;
        background:  #d9e1f0;
        border: 1px 1px 0px 1px solid #92a9c0;
}

.viewer .tabUnselected {
        font-size:0.95em;
        font-weight:bold;
	color:#5d7f91;
        background:#eaeef7
        text-decoration:none;
        border:#92a9c0;
        border-left: 1px solid #92a9c0;
	border-top: 1px solid #92a9c0;
	border-right: 1px solid #92a9c0;
}


.viewer .tabUnselected:hover {
	color: #f00;
	background: #ffd;
        text-decoration:none;
        border:#000;
        border-left: 1px solid #999;
	border-top: 1px solid #999;
	border-right: 1px solid #999;
}
/***
|Name|TagCloudPlugin|
|Source|http://www.TiddlyTools.com/#TagCloudPlugin|
|Version|1.2.0|
|Author|Eric Shulman|
|Original Author|Clint Checketts|
|License|unknown|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|present a 'cloud' of tags using proportional font display|
!Usage
<<<
{{{<<tagCloud>>}}}
> show all tags in the document
{{{<<tagCloud tag tag tag...>>}}}
> show all tags except those listed as parameters
{{{<<tagCloud =tagvalue>>}}}

> show only tags that are themselves tagged with the indicated tag value (i.e., ~TagglyTagging usage)
<<<
!Examples
<<<
{{{<<tagCloud>>}}}
<<tagCloud>>
----
{{{<<tagCloud =ft>>}}}
<<tagCloud =ft>>
<<<
!Revisions

<<<
2008.09.05 [1.2.0] ELS: added '=tagname' parameter to include only tags that are themselves tagged with the specified value (i.e., ~TagglyTagging usage)
2008.07.03 [1.1.0] ELS: added 'segments' property to macro object.  Extensive code cleanup
<<<
!Code
***/
//{{{
version.extensions.tagCloud = {major: 1, minor: 2 , revision: 0, date: new Date(2008,9,5)};
//Created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman

config.shadowTiddlers.TagCloud="<<tagCloud>>";

setStylesheet("\
	.tagCloud span{height: 3.5em;margin: 3px;}\
	.tagCloud1{font-size: 80%;}\
	.tagCloud2{font-size: 100%;}\
	.tagCloud3{font-size: 120%;}\
	.tagCloud4{font-size: 150%;}\
	.tagCloud5{font-size: 180%;}\
	.tagCloud6{font-size: 200%;}\
	",
	"tagCloudsStyles");

config.macros.tagCloud = {
	noTags: "No tag cloud created because there are no tags.",
	tooltip: "%1 tiddlers tagged with '%0'",
	segments: 5,
	handler: function(place,macroName,params) {

		var tags=store.getTags();

		if (params.length) {
			if (params[0].substr(0,1)=="=") {
				// include only specifically tagged tags
				var tagged=store.getTaggedTiddlers(params[0].substr(1));
				for (var t=0; t<tagged.length; t++)
					tagged[t]=tagged[t].title;
				for (var t=0; t<tags.length; t++)
					if (!tagged.contains(tags[t][0])) tags[t][0]="";
			} else {
				// include all tags except those listed as params
				for (var t=0; t<tags.length; t++)
					if (params.contains(tags[t][0])) tags[t][0]="";
			}
		}

		// get maximum number of tags to calculate tagCloud segment sizes
		var mostTags=0;
		for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0)
			if (tags[t][1]>mostTags) mostTags=tags[t][1];
		var tagSegment=mostTags/config.macros.tagCloud.segments;

		// output
		var tagCloudWrapper = createTiddlyElement(place,"div",null,"tagCloud",null);
		if(!tags.length)
			createTiddlyElement(tagCloudWrapper,"span",null,null,this.noTags);
		else for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){
			tagCloudWrapper.appendChild(document.createTextNode(" "));
			var theTag = createTiddlyButton(tagCloudWrapper,
				tags[t][0],this.tooltip.format(tags[t]),onClickTag,
				"tagCloudtag tagCloud" + (Math.round(tags[t][1]/tagSegment)+1));
			theTag.setAttribute("tag",tags[t][0]);
		}
	}
};
//}}}
What can one say about the anatomy of a tiddler's tag.

*Organisation of tags into a coherent whole.
!!!<<gradient horiz #fc3 #fff>>&nbsp;TagCloud^^<<tiddler CloseThisOpen with: Tags  '« back'>>|<<toolbar editTiddler>>» ^^>>
<<<
This is the famous ~TiddlyWiki tag cloud the size of the tag font indicates the quantity of tiddlers with that tag; see it here demonstrated in the plugin+++[TagCloud]
----
<<tiddler TagCloudPlugin>>

----
=== 
<<<
Always get the plugin here http://www.TiddlyTools.com/#TagCloudPlugin



/***
!!!<<gradient horiz #fc3 #fff >><<tiddler RefreshStyles>>&nbsp;TagCloudCSS>>/%==================================================%/
***/

/*{{{*/

.tagCloud span{height: 3.5em; margin: 10px; padding: 10px; width: 300px;}
.tagCloud1 {font-size: 100%; font-weight: bold; padding-left: 10px; color: #8800ee;}
.tagCloud2 a {font-size: 100%; font-weight: bold; padding-left: 10px; color: #3355ff;}
.tagCloud3 a {font-size: 100%; font-weight: bold; padding-left: 10px; color: #33bb00;}
.tagCloud4{font-size: 120%; font-weight: bold; padding-left: 10px; color: #ff9900;}
.tagCloud5{font-size: 160%; font-weight: bold; padding-left: 10px; color: #ff5511;}
.tagCloud6{font-size: 200%; font-weight: bold; padding-left: 10px; color: #ff3300;} 

/*}}}*/
/***
|Name|TagCloudPlugin|
|Source|http://www.TiddlyTools.com/#TagCloudPlugin|
|Version|1.6.0|
|Author|Eric Shulman|
|Original Author|Clint Checketts|
|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|present a 'cloud' of tags (or links) using proportional font display|
!Usage

<<<
{{{
<<cloud type action:... limit:... tag tag tag ...>>
<<cloud type action:... limit:... +TiddlerName>>
<<cloud type action:... limit:... =tagvalue>>
}}}
where:
* //type// is a keyword, one of:
** ''tags'' (default) - displays a cloud of tags, based on frequency of use
** ''links'' - displays a cloud of tiddlers, based on number of links //from// each tiddler
** ''references'' - displays a cloud of tiddlers, based on number of links //to// each tiddler
* ''action:popup'' (default) - clicking a cloud item shows a popup with links to related tiddlers<br>//or//<br> ''action:goto'' - clicking a cloud item immediately opens the tiddler corresponding to that item
* ''limit:N'' (optional) - restricts the cloud display to only show the N most popular tags/links
* ''tag tag tag...'' (or ''title title title'' if ''links''/''references'' is used)<br>shows all tags/links in the document //except// for those listed as macro parameters
* ''+TiddlerName''<br>shows tags/links read from a space-separated, bracketed list stored in a separate tiddler.
* ''=tagvalue'' (//only if type=''tags''//)<br>shows only tags that are themselves tagged with the indicated tag value (i.e., ~TagglyTagging usage)
//note: for backward-compatibility, you can also use the macro {{{<<tagCloud ...>>}}} in place of {{{<<cloud ...>>}}}//

<<<
!Examples
<<<
//all tags excluding<<tag systemConfig>>, <<tag excludeMissing>> and <<tag script>>//
{{{<<cloud systemConfig excludeMissing script>>}}}
{{groupbox{<<cloud systemConfig excludeMissing script>>}}}
//top 10 tags excluding<<tag systemConfig>>, <<tag excludeMissing>> and <<tag script>>//
{{{<<cloud limit:10 systemConfig excludeMissing script>>}}}
{{groupbox{<<cloud limit:10 systemConfig excludeMissing script>>}}}
//tags listed in// [[FavoriteTags]]
{{{<<cloud +FavoriteTags>>}}}
{{groupbox{<<cloud +FavoriteTags>>}}}
//links to tiddlers tagged with 'package'//
{{{<<cloud action:goto =package>>}}}
{{groupbox{<<cloud action:goto =package>>}}}
//top 20 most referenced tiddlers//
{{{<<cloud references limit:20>>}}}
{{groupbox{<<cloud references limit:20>>}}}
//top 20 tiddlers that contain the most links//
{{{<<cloud links limit:20>>}}}
{{groupbox{<<cloud links limit:20>>}}}

<<<
!Revisions
<<<
2009.02.26 [1.6.0] added {{{action:...}}} parameter to apply popup vs. goto action when clicking cloud items
2009.02.05 [1.5.0] added ability to show links or back-links (references) instead of tags and renamed macro to {{{<<cloud>>}}} to reflect more generalized usage.
2008.12.16 [1.4.2] corrected group calculation to prevent 'group=0' error
2008.12.16 [1.4.1] revised tag filtering so excluded tags don't affect calculations
2008.12.15 [1.4.0] added {{{limit:...}}} parameter to restrict the number of tags displayed to the top N most popular
2008.11.15 [1.3.0] added {{{+TiddlerName}}} parameter to include only tags that are listed in the indicated tiddler
2008.09.05 [1.2.0] added '=tagname' parameter to include only tags that are themselves tagged with the specified value (i.e., ~TagglyTagging usage)
2008.07.03 [1.1.0] added 'segments' property to macro object.  Extensive code cleanup
<<<
!Code
***/
//{{{
version.extensions.TagCloudPlugin= {major: 1, minor: 6 , revision: 0, date: new Date(2009,2,26)};
//Originally created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman
//Currently maintained and enhanced by Eric Shulman
//}}}
//{{{
config.macros.cloud = {
	tagstip: "%1 tiddlers tagged with '%0'",
	refslabel: " (%0 references)",
	refstip: "%1 tiddlers have links to '%0'",
	linkslabel: " (%0 links)",
	linkstip: "'%0' has links to %1 other tiddlers",
	groups: 9,
	init: function() {
		config.macros.tagCloud=config.macros.cloud; // for backward-compatibility
		config.shadowTiddlers.TagCloud='<<cloud>>';
		config.shadowTiddlers.StyleSheetTagCloud=
			'/*{{{*/\n'
			+'.tagCloud span {line-height: 3.5em; margin:3px;}\n'
			+'.tagCloud1{font-size: 80%;}\n'
			+'.tagCloud2{font-size: 100%;}\n'
			+'.tagCloud3{font-size: 120%;}\n'
			+'.tagCloud4{font-size: 140%;}\n'
			+'.tagCloud5{font-size: 160%;}\n'
			+'.tagCloud6{font-size: 180%;}\n'
			+'.tagCloud7{font-size: 200%;}\n'
			+'.tagCloud8{font-size: 220%;}\n'
			+'.tagCloud9{font-size: 240%;}\n'
			+'/*}}}*/\n';
		setStylesheet(store.getTiddlerText('StyleSheetTagCloud'),'tagCloudsStyles');
	},
	getLinks: function(tiddler) { // get list of links to existing tiddlers and shadows
		if (!tiddler.linksUpdated) tiddler.changed();
		var list=[]; for (var i=0; i<tiddler.links.length; i++) {
			var title=tiddler.links[i];
			if (store.isShadowTiddler(title)||store.tiddlerExists(title))
				list.push(title);
		}
		return list;
	},
	handler: function(place,macroName,params) {
		// unpack params
		var inc=[]; var ex=[]; var limit=0; var action='popup';
		var links=(params[0]&&params[0].toLowerCase()=='links'); if (links) params.shift();
		var refs=(params[0]&&params[0].toLowerCase()=='references'); if (refs) params.shift();
		if (params[0]&&params[0].substr(0,7).toLowerCase()=='action:')
			action=params.shift().substr(7).toLowerCase();
		if (params[0]&&params[0].substr(0,6).toLowerCase()=='limit:')
			limit=parseInt(params.shift().substr(6));
		if (params.length) {
			if (params[0].substr(0,1)=='+') { // get tag list from tiddler
				var inc=store.getTiddlerText(params[0].substr(1),'').readBracketedList();
			} else if (params[0].substr(0,1)=='=') { // get tag list using tagged tags
				var tagged=store.getTaggedTiddlers(params[0].substr(1));
				for (var t=0; t<tagged.length; t++) inc.push(tagged[t].title);
			} else ex=params; // exclude params
		}
		// get all items, include/exclude specific items
		var items=[];
		var list=(links||refs)?store.getTiddlers('title','excludeLists'):store.getTags();
		for (var t=0; t<list.length; t++) {
			var title=(links||refs)?list[t].title:list[t][0];
			if (links)	var count=this.getLinks(list[t]).length;
			else if (refs)	var count=store.getReferringTiddlers(title).length;
			else 		var count=list[t][1];
			if ((!inc.length||inc.contains(title))&&(!ex.length||!ex.contains(title)))
				items.push({ title:title, count:count });
		}
		if(!items.length) return;
		// sort by decending count, limit results (optional)
		items=items.sort(function(a,b){return(a.count==b.count)?0:(a.count>b.count?-1:1);});
		while (limit && items.length>limit) items.pop();
		// find min/max and group size
		var most=items[0].count;
		var least=items[items.length-1].count;
		var groupSize=(most-least+1)/this.groups;
		// sort by title and draw the cloud of items
		items=items.sort(function(a,b){return(a.title==b.title)?0:(a.title>b.title?1:-1);});
		var cloudWrapper = createTiddlyElement(place,'div',null,'tagCloud',null);
		for (var t=0; t<items.length; t++) {
			cloudWrapper.appendChild(document.createTextNode(' '));
			var group=Math.ceil((items[t].count-least)/groupSize)||1;
			var className='tagCloudtag tagCloud'+group;
			var tip=refs?this.refstip:links?this.linkstip:this.tagstip;
			tip=tip.format([items[t].title,items[t].count]);
			if (action=='goto') { // TAG/LINK/REFERENCES GOTO
				var btn=createTiddlyLink(cloudWrapper,items[t].title,true,className);
				btn.title=tip;
				btn.style.fontWeight='normal';
			} else if (!links&&!refs) { // TAG POPUP
				var btn=createTiddlyButton(cloudWrapper,items[t].title,tip,onClickTag,className);
				btn.setAttribute('tag',items[t].title);
			} else { // LINK/REFERENCES POPUP
				var btn=createTiddlyButton(cloudWrapper,items[t].title,tip,
					function(ev) { var e=ev||window.event; var cmt=config.macros.cloud;
						var popup = Popup.create(this);
						var title = this.getAttribute('tiddler');
						var count = this.getAttribute('count');
						var refs  = this.getAttribute('refs')=='T';
						var links = this.getAttribute('links')=='T';
						var label = (refs?cmt.refslabel:cmt.linkslabel).format([count]);
						createTiddlyLink(popup,title,true);
						createTiddlyText(popup,label);
						createTiddlyElement(popup,'hr');
						if (refs) {
							popup.setAttribute('tiddler',title);
							config.commands.references.handlePopup(popup,title);
						}
						if (links) {
							var tiddler = store.fetchTiddler(title);
							var links=config.macros.cloud.getLinks(tiddler);
							for(var i=0;i<links.length;i++)
								createTiddlyLink(createTiddlyElement(popup,'li'),
									links[i],true);
						}
						Popup.show();
						e.cancelBubble=true; if(e.stopPropagation) e.stopPropagation();
						return false;
					}, className);
				btn.setAttribute('tiddler',items[t].title);
				btn.setAttribute('count',items[t].count);
				btn.setAttribute('refs',refs?'T':'F');
				btn.setAttribute('links',links?'T':'F');
				btn.title=tip;
			}
		}
	}
};
//}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[TagDisplayModifcation]]^^<<tiddler CloseThisOpen with: Tags  '« back'>>|<<toolbar editTiddler>>» ^^>>
/%
|Description|Reposition tag display below the tiddler content|
|From http://www.tiddlytools.com/#FAQ_RepositionTagDisplay|
%/
{{small{
__How to move the tiddler tag display so that tags appear below the tiddler content__

You can move a tiddler's tag display so that the tags appear in a line below the tiddler rather than as a list that 'floats' along the right side of the tiddler content.

In ViewTemplate, move this line:
{{{
   <div class='tagged' macro='tags'></div>
}}}
so that occurs just before this line:
{{{
   <div class='tagClear'></div>

}}}
in StyleSheet, add the following CSS to override the default appearance of the .tagged class (defined in StyleSheetLayout):
{{{
   .tagged { float:left !important; }
   .tagged li { display:inline; }
}}}
The first line makes the tag display appear left-aligned with the tiddler content.  The second line eliminates the 'newlines' between tag values, so that they all appear on a single line instead of one-per-line (note: if you have a LOT of tags, they may still wrap onto additional lines if the line gets wider than the tiddler display area).  You may also want to change or eliminate the background for the .tagged area:
{{{
   .tagged { background:transparent !important; border:0 !important; }
}}}
}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp; [[TagPlugins]]^^<<tiddler CloseThisOpen with: Tags  '« back'>>|<<toolbar editTiddler>>» ^^>>

<<<
http://tw.lewcid.org/#TagAdderMacro
*provides a drop down list for toggling tags 
*you can specify which tags to list, and have multiple drop downs with different tag lists.
<<<

<<<
http://tw.lewcid.org/#TaggerPlugin
*Provides a drop down listing current tiddler tags, and allowing toggling of tags.
<<<

<<<
http://tw.lewcid.org/#MonkeyTaggerMacro
*an adaptation of TagAdderMacro for monkeyGTD and tagglytagging user, but could be useful to just about anyone!
*{{{<<monkeyTagger Project>>}}} gives a drop down list of all tags, tagged with Project.
*The list allows toggling of tags on the current tiddler.
*logging options for task management. 
<<<
''NOTE:'' One or more of the above plugins might need the DeprecatedFunctionsPlugin
http://www.tiddlywiki.com/coreplugins.html#DeprecatedFunctionsPlugin

!!!!More elaborate tag manipulation
<<<
http://mptw.tiddlyspot.com/#TagglyTagging
*TagglyTagging (also known as "TagglyWiki Style Tagging") is set of plugins, templates and styles you can install in your TiddlyWiki that let you use tagging in powerful and useful ways.
<<<

<<<

http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin
*Speed up tagging tiddlers using tag autocompletion and correction, tag suggestions and context sensitive tag guessing, "Edit Tags only" mode and many more. Especially when you are working with a lot of tags this is the plugin you are looking for.
<<<
/***
|Name|TaggedTemplateTweak|
|Source|http://www.TiddlyTools.com/#TaggedTemplateTweak|
|Documentation|http://www.TiddlyTools.com/#TaggedTemplateTweakInfo|
|Version|1.5.1|
|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|Story.prototype.chooseTemplateForTiddler()|
|Description|use alternative ViewTemplate/EditTemplate for tiddler's tagged with specific tag values|
This tweak extends story.chooseTemplateForTiddler() so that ''whenever a tiddler is marked with a specific tag value, it can be viewed and/or edited using alternatives to the standard tiddler templates.'' 
!!!!!Documentation
>see [[TaggedTemplateTweakInfo]]
!!!!!Revisions
<<<
2009.01.06 [1.5.1] reversed logic so that title-as-prefix takes precedence over tag-matched prefix
2008.12.18 [1.5.0] added handling for using tiddler //title// as prefix (e.g., {{{SomeTiddlerViewTemplate}}}) 
| please see [[TaggedTemplateTweakInfo]] for previous revision details |
2007.06.11 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.TaggedTemplateTweak= {major: 1, minor: 5, revision: 1, date: new Date(2009,1,6)};

Story.prototype.taggedTemplate_chooseTemplateForTiddler = Story.prototype.chooseTemplateForTiddler
Story.prototype.chooseTemplateForTiddler = function(title,template)
{
	// get default template from core
	var coreTemplate=this.taggedTemplate_chooseTemplateForTiddler.apply(this,arguments);

	// if the tiddler doesn't exist yet, return core result
	var tiddler=store.getTiddler(title); if (!tiddler) return coreTemplate;

	// split core template into theme prefix and template name
	var theme="";
	var template=coreTemplate;
	var parts=template.split(config.textPrimitives.sectionSeparator);
	if (parts[1]) { theme=parts[0]; template=parts[1]; }
	else theme=config.options.txtTheme||""; // fallback if theme is not specified
	theme+=config.textPrimitives.sectionSeparator;

	// look for template whose prefix matches the *title* of this tiddler
	if (!store.getTaggedTiddlers(title).length) { // if tiddler is not a tag
		if (store.getTiddlerText(theme+title+template)) { return theme+title+template; } // theme##TitleTemplate
		if (store.getTiddlerText(title+template)) 	{ return title+template; }	 // TitleTemplate
	}

	// look for template whose prefix matches a *tag* on this tiddler (if any)
	for (i=0; i<tiddler.tags.length; i++) {
		var t=tiddler.tags[i]+template; // add tag prefix to template
		var c=t.substr(0,1).toUpperCase()+t.substr(1); // capitalized for WikiWord title
		if (store.getTiddlerText(theme+t))	{ return theme+t; } // theme##tagTemplate
		if (store.getTiddlerText(theme+c))	{ return theme+c; } // theme##TagTemplate
		if (store.getTiddlerText(t)) 		{ return t; }	    // tagTemplate
		if (store.getTiddlerText(c))		{ return c; }	    // TagTemplate
	}

	// no matching tag OR title prefix... return core result
	return coreTemplate;
}
//}}}
Get all tiddlers tagged with "A"
See AlsoTaggedWith
{{{
<script>
var out="";
var tids=store.getTaggedTiddlers("A");
for (var t=0; t<tids.length; t++)
out+="[["+tids[t].title+"]]\n";
return out;

</script> 
}}}
/***
|''Name:''|~TaggerPlugin|
|''Version:''|1.0.1 (2006-06-01)|
|''Source:''|http://tw.lewcid.org//#TaggerPlugin|
|''Author:''|SaqImtiaz|
|''Description:''|Provides a drop down listing current tiddler tags, and allowing toggling of tags.|
|''Documentation:''|[[TaggerPluginDocumentation]]|
|''Source Code:''|[[TaggerPluginSource]]|
|''~TiddlyWiki:''|Version 2.0.8 or better|
|''Requires''|[[DeprecatedFunctionsPlugin]]|
|''Stylesheet Changes''|ViewTemplate|
|See Above|<div class='toolbar'><span style="padding-right:2.45em;" macro='tagger source:TagDB exclude:excludeLists'></span></div>|


***/
//{{{

config.tagger={
       defaults:{
              label: 'Tags: ',
              tooltip: 'Manage tiddler tags',
              taglist: 'true',
              excludeTags: 'excludeLists',
              notags: 'tiddler has no tags',
              aretags: 'current tiddler tags:',
              toggletext: 'add tags:'
       }
};

config.macros.tagger={};
config.macros.tagger.arrow = (document.all?"▼":"▾"); // the fat one is the only one that works in IE
config.macros.tagger.handler =  function(place,macroName,params,wikifier,paramString,tiddler) {
       var defaults = config.tagger.defaults;
       var nAV = paramString.parseParams('tagman', null, true);
       var label = ((nAV[0].label)&&(nAV[0].label[0])!='.')?nAV[0].label[0]+this.arrow: defaults.label+this.arrow;
       var tooltip = ((nAV[0].tooltip)&&(nAV[0].tooltip[0])!='.')?nAV[0].tooltip[0]: defaults.tooltip;
       var taglist = ((nAV[0].taglist)&&(nAV[0].taglist[0])!='.')?nAV[0].taglist[0]: defaults.taglist;
       var exclude = ((nAV[0].exclude)&&(nAV[0].exclude[0])!='.')?(nAV[0].exclude[0]).readBracketedList(): defaults.excludeTags.readBracketedList();
       if ((nAV[0].source)&&(nAV[0].source[0])!='.')var source = nAV[0].source[0];
       if (source&&!store.getTiddler(source)) return false;

       var onclick = function(e) {
                   if (!e) var e = window.event;
                   var popup = Popup.create(this);
                   var tagsarray = store.getTags();
                   var tags=new Array();

                   for (var i=0; i<tagsarray.length; i++){
                       tags.push(tagsarray[i][0]);}

                   if (source)
                      {var sourcetiddler=store.getTiddler(source);
                       tags=sourcetiddler.tags.sort();}

                   var currentTags = tiddler.tags.sort();

                   var createButtons=function(text,theTag,tooltipPrefix){
                       var sp = createTiddlyElement(createTiddlyElement(popup,"li"),"span",null,"tagger");
                       var theToggle = createTiddlyButton(sp,text,tooltipPrefix+" '"+theTag+"'",taggerOnToggle,"button","toggleButton");
                       theToggle.setAttribute("tiddler",tiddler.title);
                       theToggle.setAttribute("tag",theTag);
                       insertSpacer(sp);
                       if (window.createTagButton_orig_mptw)
                           createTagButton_orig_mptw(sp,theTag);
                       else
                           createTagButton(sp,theTag);
                       }

                   createTiddlyElement(popup,"li",null,"listTitle",(tiddler.tags.length == 0 ? defaults.notags : defaults.aretags));

                   for (var t=0; t<currentTags.length; t++){
                      createButtons("[x]",currentTags[t],"remove tag ");
                       }

                   createTiddlyElement(createTiddlyElement(popup,"li"),"hr");

                   if (taglist!='false')
                      { createTiddlyElement(popup,"li",null,"listTitle",defaults.toggletext);
                        for (var i=0; i<tags.length; i++){
                          if (!tiddler.tags.contains(tags[i])&&!exclude.contains(tags[i]))
                                  {createButtons("[ ]",tags[i],"add tag ");
                                  }
                          }
                          createTiddlyElement(createTiddlyElement(popup,"li"),"hr");
                      }

                   var newTagButton = createTiddlyButton(createTiddlyElement(popup,"li"),("Create new tag"),null,taggerOnToggle);
                   newTagButton.setAttribute("tiddler",tiddler.title);
                   if (source) newTagButton.setAttribute("source",source);

                   Popup.show(popup,false);
                   e.cancelBubble = true;
                   if (e.stopPropagation) e.stopPropagation();
                   return(false);
                   };

       createTiddlyButton(place,label,tooltip,onclick,"button","taggerDrpBtn");
};

window.taggerOnToggle = function(e) {
              var tag = this.getAttribute("tag");
              var title = this.getAttribute("tiddler");
              var tiddler = store.getTiddler(title);
              if (!tag)
                 {
                 var newtag=prompt("Enter new tag:","");
                 if (newtag!=''&&newtag!=null)
                    {
                    var tag=newtag;
                    if (this.getAttribute("source"))
                    {var sourcetiddler =  store.getTiddler(this.getAttribute("source"));
                    sourcetiddler.tags.pushUnique(newtag);}
                    }
                 else
                     {return false;};
                 }
              if (!tiddler || !tiddler.tags)
                 {store.saveTiddler(title,title,'',config.options.txtUserName,new Date(),tag);}
              else
                  {if (tiddler.tags.find(tag)==null)
                     {tiddler.tags.push(tag)}
                  else if(!newtag)
                      {tiddler.tags.splice(tiddler.tags.find(tag),1)};
                  store.saveTiddler(tiddler.title,tiddler.title,tiddler.text,tiddler.modifier,tiddler.modified,tiddler.tags);};
              story.refreshTiddler(title,null,true);
              if(config.options.chkAutoSave)
                  saveChanges();
              return false;
};

setStylesheet(
 ".tagger a.button {font-weight: bold;display:inline; padding:0px;}\n"+
 ".tagger #toggleButton {padding-left:2px; padding-right:2px; margin-right:1px; font-size:110%;}\n"+
 "#nestedtagger {background:#ccc; border: 1px solid #0331BF;}\n"+
 ".popup .listTitle {color:#000;}\n"+
 "",

"TaggerStyles");

window.lewcidTiddlerSwapTag =  function (tiddler, oldTag, newTag){
                    for (var i = 0; i < tiddler.tags.length; i++)
			  if (tiddler.tags[i] == oldTag) {
				  tiddler.tags[i] = newTag;
				  return true;}
                         return false;
}

window.lewcidRenameTag = function(e) {
                    var tag=this.getAttribute("tag");
                    var newtag=prompt("Rename tag '"+tag+"' to:",tag);

                    if ((newtag==tag)||(newtag==null)) {return false;}

                    if(store.tiddlerExists(newtag))
                               {if(confirm(config.messages.overwriteWarning.format([newtag.toString()])))
                                             story.closeTiddler(newtag,false,false);
                               else
                                             return null;}

                    tagged=store.getTaggedTiddlers(tag);
                    if (tagged.length!=0){
                          for (var j = 0; j < tagged.length; j++)
                              lewcidTiddlerSwapTag(tagged[j],tag,newtag);}

                    if (store.tiddlerExists(tag))
                       {store.saveTiddler(tag,newtag);}
                    if (document.getElementById("tiddler"+tag))
                       {var oldTagTiddler =  document.getElementById(story.idPrefix + tag);
                       var before= story.positionTiddler(oldTagTiddler);
                       var place = document.getElementById(story.container);
                       story.closeTiddler(tag,false,false);
                       story.createTiddler(place,before,newtag,null);
                       story.saveTiddler(newtag);}
                    if(config.options.chkAutoSave)
                                                      saveChanges();
                    return false;
}


window.onClickTag=function(e)
{
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);

        var nested = (!isNested(theTarget));
        if ((Popup.stack.length > 1)&&(nested==true)) {Popup.removeFrom(1);}
        else if(Popup.stack.length > 0 && nested==false) {Popup.removeFrom(0);};

        var theId = (nested==false)? "popup" : "nestedtagger";
        var popup = createTiddlyElement(document.body,"ol",theId,"popup",null);
        Popup.stack.push({root: this, popup: popup});

	var tag = this.getAttribute("tag");
	var title = this.getAttribute("tiddler");
	if(popup && tag)
		{
		var tagged = store.getTaggedTiddlers(tag); 
		var titles = [];
		var li,r;
		for(r=0;r<tagged.length;r++)
			if(tagged[r].title != title)
				titles.push(tagged[r].title);
		var lingo = config.views.wikified.tag;
		if(titles.length > 0)
			{
			var openAll = createTiddlyButton(createTiddlyElement(popup,"li"),lingo.openAllText.format([tag]),lingo.openAllTooltip,onClickTagOpenAll);
			openAll.setAttribute("tag",tag);
			createTiddlyElement(createTiddlyElement(popup,"li"),"hr");
			for(r=0; r<titles.length; r++)
				{
				createTiddlyLink(createTiddlyElement(popup,"li"),titles[r],true);
				}
			}
		else
			createTiddlyText(createTiddlyElement(popup,"li",null,"disabled"),lingo.popupNone.format([tag]));
		createTiddlyElement(createTiddlyElement(popup,"li"),"hr");
		var h = createTiddlyLink(createTiddlyElement(popup,"li"),tag,false);
		createTiddlyText(h,lingo.openTag.format([tag]));

		createTiddlyElement(createTiddlyElement(popup,"li"),"hr");

		var renameTagButton = createTiddlyButton(createTiddlyElement(popup,"li"),("Rename tag '"+tag+"'"),null,lewcidRenameTag);
		renameTagButton.setAttribute("tag",tag)
		}
	Popup.show(popup,false);
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
	return(false);
}

if (!window.isNested)
   window.isNested = function(e) {
        while (e != null) {
                var contentWrapper = document.getElementById("contentWrapper");
                if (contentWrapper == e) return true;
                e = e.parentNode;
                }
        return false;
   };

config.shadowTiddlers.TaggerPluginDocumentation="The documentation is available [[here.|http://tw.lewcid.org/#TaggerPluginDocumentation]]";

config.shadowTiddlers.TaggerPluginSource="The uncompressed source code is available [[here.|http://tw.lewcid.org/#TaggerPluginSource]]";
//}}}
''If you want this documentation available offline, copy this tiddler to your TW.''

!Description:
The tagger plugin is a result of combining key features from the dropTags and tagAdder macro's. However, since it departs somewhat from the interface tagAdder users will be familiar with, I'm making this available as a new plugin alongside tagAdder.

Tagger provides a dropdown list of the current tiddler tags, along with the ability to toggle them. Further it can optionally display a list of tags in the dropdown, which can be addded to the tiddler.

*Clicking on ''[x]'' and ''[ ]'' removes and adds the tag respectively.
*Clicking on the tag text displays the tag dropdown for that tag, listing tiddlers tagged with it.
*The ''Create new tag'' lets you quickly type in a new tag not in the list.
*Click on this button to see the dropdown: <<tagger>>

Further note that each tag dropdown has a ''Rename tag'' option. This can be used to quickly rename a tag in the entire TW, also rename it's tiddler if it exists.

//''tagAdder, dropTags and the future''
- tagAdder will no longer will be developed, but will remain available. I encourage all tagAdder users to upgrade to tagger.
- dropTags will still be developed for those users that dont want the 'tag editing' features.//

!Examples & Usage:
*At it's simplest, using tagger is as simple as {{{<<tagger>>}}} <<tagger>>
**This gives a dropdown with the current tiddler tags, followed by all the tags in the TW.
*You can also use a list of specified tags instead of all tags in the TW, by specifying a source tiddler.
**{{{<<tagger source:TagsDB>>}}} <<tagger source:TagDataBase>>

*You can also display ONLY the current tiddler tags
**{{{<<tagger taglist:false>>}}} <<tagger taglist:false>>

*To exclude tags from the list: {{{<<tagger exclude:"excludeLists Tag2 [[Tag with spaces]]">>}}} <<tagger exclude:"excludeLists Tag2 [[Tag with spaces]]">>

*For a custom button label: {{{<<tagger label:"custom label">>}}} <<tagger label:"custom label">>

*For a custom tooltip: {{{<<tagger tooltip:"custom tooltip">>}}} <<tagger tooltip:"custom tooltip">>

!CSS and Styling:
For those wishing to customize the popup appearance:
*the main popup has a class and id of popup has with all other popups.
*the nested tag popups have an id of nestedpopup

!Advanced Users:
You can change the global defaults for tagger, like the button label, the tags to exclude or whether to display the taglist or not, by editing the ''config.tagger.defaults'' section in the code.

!To Do:
*code optimization
*possibly a 'delete this tag' option.

!History
*version 1.0.1 (2006-06-01): fixed conflicts with QuickOpenTag (TagglyTagging) and AutoTagger.
{{threecolumns{<<tagging stylesheet>>}}}
<<tabs "" 
[[Intro ]] "" [[IntroTags]]
[[AllTags ]] "" [[AllTags]]
[[TagPlugins]] "" [[TagPlugins]]
[[TagCloud ]] "" [[TagCloud]]
[[TagDisplayModifcation ]] "" [[TagDisplayModifcation]] 
>>
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.symbex.net.au/Wiki/ThreeNewsEm.htm]]&nbsp;&raquo;|
----
<html><div align="center"><table bgcolor="#ffffff"><font size="-2" face="Arial, Helvetica, sans-serif" color="#ff0000">&nbsp; <A HREF="http://www.abc.net.au/news/default.htm" target="ifsample1" title="Australian ABC News">ABC</A>&nbsp;|&nbsp;<A HREF="http://www.countercurrents.org/" target="ifsample1" title="CounterCurrents">WSW</A>&nbsp;|&nbsp;<A HREF="http://www.theage.com.au/" target="ifsample1" title="Australian Age">AGE</A>&nbsp;|&nbsp;<A HREF="http://www.smh.com.au/" target="ifsample1" title="Sydney Morning Herald">SMH</A>&nbsp;&nbsp;<A HREF="http://news.bbc.co.uk/" target="ifsample1">BBC</A>&nbsp;|&nbsp;<A HREF="file:///D:\Wiki\ExperimentWikiDoc.htm" target="ifsample1">Experiment</A>&nbsp;|&nbsp;<A HREF="http://tiddlyvault.tiddlyspot.com/" target="ifsample1">Vault</A>&nbsp;|<A HREF="http://css.maxdesign.com.au/index.htm" target="ifsample1">Max Design</A>&nbsp;|&nbsp;<A HREF="http://www.tiddlywiki.org/" target="ifsample1">tiddlywiki.org</A>&nbsp;&nbsp;|<A HREF="http://www.fark.com/" target="ifsample1"> fark</A>&nbsp;|&nbsp;<A HREF="http://dailynews.yahoo.com/" target="ifsample1">Reuters</A>&nbsp;|&nbsp;<A HREF="http://news.google.com/" target="ifsample1">Google</A>&nbsp;|&nbsp;<A HREF="http://washingtonpost.com/" target="ifsample1">Wash.Post</A></font></div></table></html>



<html><table width="96%" style="border:none;margin:1px;background:transparent;clear:both;"><iframe id="ifsample1" name="ifsample1" src="http://www.abc.net.au/news/default.htm" width="100%" height="500" scrolling="yes" frameborder="0" allowtransparency style="border:none;"></iframe></table></html>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[TargetingLinks]]^^<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>
''A @@color:#C06;button@@ link to open in a new window'' <html><input type='button' value='Soroban Exercises' onclick='window.open("http://webhome.idirect.com/~totton/abacus/Exercises/Add3pageA.pdf","_blank")'></html>

{{{
<html><input type='button' value='Exercises' onclick='window.open("http://webhome.idirect.com/~totton/abacus/Exercises/Add3pageA.pdf","_blank")'></html>
}}}
----
''A @@color:#C06;text@@ link to open in a new window'' 

<html><a href="javascript: void(0)" onclick='window.open("http://webhome.idirect.com/~totton/abacus/Exercises/Add3pageA.pdf","_blank")'>Text</a></html>

{{{
<html><a href="javascript: void(0)" onclick='window.open("http://webhome.idirect.com/~totton/abacus/Exercises/Add3pageA.pdf","_blank")'>Text</a></html>
}}}
----
''You can put this bit of code after a @@color:#C06;prettylink@@ to force it open in a new window''
{{{
[[osmosoft|http://osmosoft.com]]<script>place.lastChild.target="_blank"</script>

}}}
''Link:''(opens in a new tab or window)[[osmosoft|http://osmosoft.com]]<script>place.lastChild.target="_blank"</script>
----
''Something quite different, a @@color:#C06;text box@@ link''
<html><input type="text" value='Soroban Exercises' onclick='window.open("http://webhome.idirect.com/~totton/abacus/Exercises/Add3pageA.pdf","_blank")'></html>

<html><span title="Not here... on the text box silly." style="cursor:pointer">''With a tooltip''</span></html>
<html><span title="A text box link how clever! Click on me"><input type="text" value='Soroban Exercises'  style='cursor:pointer;' onclick='window.open("http://webhome.idirect.com/~totton/abacus/Exercises/Add3pageA.pdf","_blank")'></span></html>

''A @@color:#C06;text box@@ link code''
{{{
<html><span title="A text box link how clever! Click on me"><input type="text" value='Soroban Exercises'  style='cursor:pointer;' onclick='window.open("http://webhome.idirect.com/~totton/abacus/Exercises/Add3pageA.pdf","_blank")'></span></html>
}}}
''With a @@color:#C06;tooltip@@ code''
{{{

<html><span title="A text box link how clever! Click on me" style="cursor:pointer;"><input type="text" value='Soroban Exercises' onclick='window.open("http://webhome.idirect.com/~totton/abacus/Exercises/Add3pageA.pdf","_blank")'></span></html>

}}}
----
''A @@color:#C06;button@@ to target an iframe'' (via iframe ID and Name)
{{{
<html><input type='button' value='Soroban Exercises' onclick='window.open("http://webhome.idirect.com/~totton/abacus/Exercises/Add3pageA.pdf","iframeID")'></html>
}}}
''A @@color:#C06;text@@ link to target an iframe'' (via iframe ID and Name)
{{{
<html><a href="javascript: void(0)" onclick='window.open("http://webhome.idirect.com/~totton/abacus/Exercises/Add3pageA.pdf","iframeID")'>Test</a></html>

}}}
''Iframe code for the above target links''
{{{
<html><div align="center"><iframe  id="iframeID" name="iframeID" src ="http://www.yourtv.com.au/guide/?action=tonight&region_id=73" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>

}}}

!!!!!End
|bgcolor:#F7D8A0;vertical-align:middle;  EditTemplate |bgcolor:#abf; EditTemplate |bgcolor:#F7D8A0;vertical-align:middle;  speaker |
|~|bgcolor:#94EDD6; [img[http://img408.imageshack.us/img408/5150/daquo3gq1.gif]] |~|
|~|bgcolor:#94EDD6; StyleSheet |~|
|~|bgcolor:#94EDD6; [img[http://img408.imageshack.us/img408/5150/daquo3gq1.gif]] |~|
|~|bgcolor:#cfc; StyleSheetColors|~|
|~|bgcolor:#94EDD6; [img[http://img408.imageshack.us/img408/5150/daquo3gq1.gif]] |~|

|~|bgcolor:#94EDD6; StyleSheetLayout |~|
|~|bgcolor:#94EDD6; [img[http://img408.imageshack.us/img408/5150/daquo3gq1.gif]] |~|
|~|bgcolor:#cfc; ViewTemplate |~|
|~|bgcolor:#94EDD6; [img[http://img408.imageshack.us/img408/5150/daquo3gq1.gif]] |~|
|~|bgcolor:#94EDD6; StyleSheetPrint |~|

<script>

function employee(name,jobtitle,born)
{
this.name=name;
this.jobtitle=jobtitle;
this.born=born;
}
var fred=new employee("Fred Flintstone","Caveman",1970);

employee.prototype.salary=null;

fred.salary=20000;

document.write("Fred's salary is $"+fred.salary);


</script>
<html>
<style>
.className {font-size: 4.2em;}
</style>
test
{{className{
test
}}}
</html>
{{className{
test
}}}


<html>

         <style>
             #tiddlerTestTiddler { background:#adf; }
         </style>
</html> 
!!!<<gradient horiz #fc3 #eeefff>>[[Text|Text]]^^<<tiddler CloseThisOpen with: WhatsInATiddler  '« back'>>|<<toolbar editTiddler>>» ^^>>

''Text is one of the strengths of ~TiddlyWiki.'' I guess that's what it is all about really. It's got a great little editor and with all of the formatting capabilities there's not much you can't do.
----
@@color:#C06;''&raquo; &raquo;''@@+++[See Formatting Text here]
<<tiddler FormattingText>>
===
----
{{textcenter{
''Example of Text Formatting and Layout''

@@color(#C06):large first letter &bull; image float &bull; blockquote &bull; table  &bull; CSS tiddler layout@@
}}}
<<tiddler TextExample>>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[Text Properties - CSS]]^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>

{{textcenter{
@@color:#c06;Table heading links to w3schools references on this subject.@@
}}}
|>|>|>| ![[Text Properties|http://www.w3schools.com/css/css_text.asp]] |
| ''Property'' | ''Valid Values'' | ''Example'' | ''Inherited?'' |
| letter-spacing |normal, //length// | letter-spacing:5pt | Y |
| text-decoration |none, underline, overline, line-through | text-decoration:underline | N |
| vertical-align |top, middle, bottom, sub, super, | vertical-align:top | N |
| text-transform |capitalize, uppercase, lowercase, none | text-transform:lowercase | N |
| text-align |left, right, center, justify | text-align:center | N |
| text-indent |//length//, //percentage// | text-indent:25px | N |
| line-height |normal, //number//, //length//, //percentage// | line-height:15pt | N |

!!!<<gradient horiz #fc3 #ffffff>>TextAlignment @@color:#00f;using CSS@@^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>

*{{{text-align:center;}}} ''not working in Firefox?'' use this {{{text-align:-moz-center;}}}

{{tablecenterpad17{
|bgcolor:#abf; <<gradient horiz #abf #fff #abf>>font-family: Verdana, Arial; @@color:#000;''Put in ~StyleSheet''@@>> |bgcolor:#abf; <<gradient horiz #abf #fff #abf>>font-family: Verdana, Arial; @@color:#000;''Put to Use''@@>> |bgcolor:#abf; <<gradient horiz #abf #fff #abf>>font-family: Verdana, Arial; @@color:#000;'' Result''@@>> |
|<<tiddler ./align>>|<<tiddler ./code>>|<<tiddler ./example>>|
}}}
!!!<<gradient horiz #ccc #ffffff>>Alignment in tables>>

{{tablecenterpad{
|>|>| Span multiple rows |
|vertical-align:top;padding:5px;text-align:center;Align right by leaving a space to the left of the text and the vertical bar {{{( | )}}} for left alignment leave a space on the right side of the text, or leave a space on both sides for center alignment<br> see the code below for disambiguation. |>| Right|
|~|>|Left |
|~|>| Align Center |
}}}
!!!<<gradient horiz #ccc #fff>>Code>>
{{{
|>|>| Span multiple rows |
|vertical-align:top;padding:5px;text-align:center;Align left or right by leaving a space |>|  Right|
|~|>|Left |
|~|>| Align Center |
}}}


<part align hidden>
{{{

.textleft {text-align:left;}

.textright {text-align:right;}

.textcenter {text-align:center;}

.textjustify {text-align:justify;}

.textindent25 {text-indent:25px;}
}}}
</part>

<part code hidden>
{{{
 {{textleft{
 text left
 }}}

 {{textcenter{
 text centered
 }}}

 {{textright{
 text right
 }}}
}}}
</part>

<part example hidden>

__Example of use__

{{textleft{
text left
}}}
{{textcenter{
text centered}}}
{{textright{
text right
}}}
</part>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[TextArea]]^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>

You can put the HTML textarea  in tiddlers.

 {{{<html><textarea rows="3" cols="45" wrap="virtual">}}}content{{{</textarea></html>}}}

Wrap can can be set to wrap="off", wrap="virtual" or wrap="physical"

<html>HTML
<textarea rows="3" cols="45"><a href="http://twhelp.tiddlyspot.com">TW Help</a></textarea>

~TiddlyWiki
<textarea rows="3" cols="45">[[TW Help|http://twhelp.tiddlyspot.com]]</textarea>


<img src="http://img291.imageshack.us/img291/2243/iekh2.gif"><IMG SRC="http://img247.imageshack.us/img247/6057/ffom5.gif" ALT="image"></html>
/***
|Name|TextAreaPlugin|
|Source|http://www.TiddlyTools.com/#TextAreaPlugin|
|Documentation|http://www.TiddlyTools.com/#TextAreaPluginInfo|
|Version|2.1.9|
|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|Story.prototype.focusTiddler|
|Options|##Configuration|
|Description|Adds Find/Again keyboard search, autosize, and 'stretch bar' resize for textarea controls|
* ''Control-F'' and ''control-G'' will ''"Find text"'' and ''"find text aGain"'', respectively, allowing you to copy, find, paste, findagain, paste, etc to perform "search-and-replace" actions.  
* ''autosizeEditor'' - toggles the tiddler editor textarea height between fixed-height and "automatically fit the contents".
* ''resizeEditor'' - adds 'grab handle' below textarea to stretch field height
!!!!!Documentation

>see [[TextAreaPluginInfo]]
!!!!!Configuration
<<<
<<option chkTextAreaExtensions>> use control-f (find), control-g (find again) inside text area
<<option chkDisableAutoSelect>> place cursor at start of textarea instead of pre-selecting content
<<option chkResizeEditor>> modify shadow EditTemplate to add resizeable text area (and autosize command)
<<<
!!!!!Revisions
<<<
2008.01.08 [2.1.9] fixed default setting of uninitialized option values so that "false" is not treated as "undefined"

|please see [[TextAreaPluginInfo]] for additional revision details|
2006.01.22 [1.0.0] Moved from temporary "System Tweaks" tiddler into 'real' TextAreaPlugin tiddler.
<<<
!!!!!Code
***/
//{{{
version.extensions.textAreaPlugin= {major: 2, minor: 1, revision: 9, date: new Date(2008,1,8)};

if (config.options.chkTextAreaExtensions===undefined) config.options.chkTextAreaExtensions=true;
if (config.options.chkDisableAutoSelect===undefined) config.options.chkDisableAutoSelect=true;
if (config.options.chkResizeEditor===undefined) config.options.chkResizeEditor=true;

// automatically tweak shadow EditTemplate to add "autosizeEditor" toolbar command
if (config.options.chkResizeEditor)
	config.shadowTiddlers.EditTemplate=config.shadowTiddlers.EditTemplate.replace(/deleteTiddler/,"deleteTiddler autosizeEditor");
// automatically tweak shadow EditTemplate to add "resizeEditor" macro
if (config.options.chkResizeEditor)
	config.shadowTiddlers.EditTemplate+="<span macro='resizeEditor'></span>";

// Put focus in a specified tiddler field
Story.prototype.TextAreaExtensions_focusTiddler=Story.prototype.focusTiddler;
Story.prototype.focusTiddler = function(title,field)
{
	this.TextAreaExtensions_focusTiddler.apply(this,arguments); // first call core
	var e = this.getTiddlerField(title,field);
	if (e && config.options.chkDisableAutoSelect) {
		if (e.setSelectionRange) // FF
			e.setSelectionRange(0,0);
		else if (e.createTextRange) // IE
			{ var r=e.createTextRange(); r.collapse(true); r.select(); }
	}
	if (e && config.options.chkTextAreaExtensions) addKeyDownHandlers(e);
}
//}}}

//{{{
function addKeyDownHandlers(e)
{
	// exit if not textarea or element doesn't allow selections
	if (e.tagName.toLowerCase()!="textarea"||!e.setSelectionRange||e.initialized) return;

	// utility function: exits keydown handler and prevents browser from processing the keystroke
	var processed=function(ev) {
		ev.cancelBubble=true; // IE4+
		try{event.keyCode=0;}catch(e){}; // IE5
		if (window.event) ev.returnValue=false; // IE6
		if (ev.preventDefault) ev.preventDefault(); // moz/opera/konqueror
		if (ev.stopPropagation) ev.stopPropagation(); // all
		return false;
	}
	// capture keydown in edit field
	e.saved_onkeydown=e.onkeydown; // save current keydown handler (if any)
	e.onkeydown=function(ev) { if (!ev) var ev=window.event;
		var key=ev.keyCode;
		if (!key) {
			var char=event.which?event.which:event.charCode;
			if (char==102) key=70;
			if (char==103) key=71;
		}
		// process CTRL-F (find matching text) or CTRL-G (find next match)
		if (ev.ctrlKey && (key==70||key==71)) {

			// prompt for text to find
			var defFind=e.findText?e.findText:e.value.substring(e.selectionStart,e.selectionEnd);
			if (key==70||!e.findText||!e.findText.length) // ctrl-f or no saved search text
				{ var f=prompt("find:", defFind); e.focus(); if (f) e.findText=f; }
			if (!e.findText||!e.findText.length) return processed(ev); //  if no search text, exit

			// do case-insensitive match with 'wraparound'...  if not found, alert and exit 
			var newstart=e.value.toLowerCase().indexOf(e.findText.toLowerCase(),e.selectionStart+1);
			if (newstart==-1) newstart=e.value.toLowerCase().indexOf(e.findText.toLowerCase());
			if (newstart==-1) { alert("'"+e.findText+"' not found"); e.focus(); return processed(ev); }

			// set new selection, scroll it into view, and report line position in status bar
			e.setSelectionRange(newstart,newstart+e.findText.length);
			var linecount=e.value.split('\n').length;
			var thisline=e.value.substr(0,e.selectionStart).split('\n').length;
			e.scrollTop=Math.floor((thisline-1-e.rows/2)*e.scrollHeight/linecount);
			window.status="line: "+thisline+"/"+linecount;
			return processed(ev);
		}
		if (e.saved_onkeydown) // call previous keydown handler (if any)
			e.saved_onkeydown(ev);
	}
	e.initialized=true;
}
//}}}

// // 'autosize' toolbar command
//{{{
config.commands.autosizeEditor = {
	text: 'autosize',
	tooltip: 'automatically adjust the editor height to fit the contents',
	text_alt: '\u221Aautosize',
	hideReadOnly: false,
	handler: function(event,src,title) {
		var here=story.findContainingTiddler(src); if (!here) return;
		var ta=here.getElementsByTagName('textarea'); if (!ta) return;
		for (i=0;i<ta.length;i++) {
			// only autosize textareas actually used to edit tiddler fields
			if (ta[i].getAttribute("edit")==undefined) continue;
			ta[i].button=src;
			if (!ta[i].maxed)
				config.commands.autosizeEditor.on(ta[i]);
			else
				config.commands.autosizeEditor.off(ta[i],true);
		}
		return false;
	},
	on: function(e) {
		if (e.maxed) return; // already autosizing!
		if (e.savedheight==undefined)
			e.savedheight=e.style.height;
		if (e.savedkeyup==undefined) {
			e.savedkeyup=e.onkeyup;
			e.onkeyup=function(ev) {
				if (!ev) var ev=window.event; var e=resolveTarget(ev);
				e.style.height=e.scrollHeight+'px';
				if (e.savedkeyup) e.savedkeyup();
			}
		}
		// IE reports error: "not implemented" for onkeypress
		if (!config.browser.isIE && e.savedkeypress==undefined) {
			e.savedkeypress=e.onkeypress;
			e.onkeypress=function(ev) {
				if (!ev) var ev=window.event; var e=resolveTarget(ev);
				if (ev.keyCode==33) { // PGUP
					if (window.scrollByPages) window.scrollByPages(-1);
					return false;
				}
				if (ev.keyCode==34) { // PGDN
					if (window.scrollByPages) window.scrollByPages(1);
					return false;
				}
				if (e.savedkeypress) e.savedkeypress();
			}
		}
		e.style.height=e.scrollHeight+'px';
		e.button.innerHTML=config.commands.autosizeEditor.text_alt;
		e.maxed=true;
	},
	off: function(e,resetHeight) {
		if (resetHeight) e.style.height=e.savedheight;
		e.onkeyup=e.savedkeyup;
		// IE reports error: "not implemented" for onkeypress
		if (!config.browser.isIE) e.onkeypress=e.savedkeypress;
		e.button.innerHTML=config.commands.autosizeEditor.text;
		e.maxed=false;
	}
};
//}}}

// // grab-and-stretch handle
//{{{
config.macros.resizeEditor = { // add stretch bar to editor textarea
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var here=story.findContainingTiddler(place); if (!here) return;
		var ta=here.getElementsByTagName('textarea');
		if (ta) for (i=0;i<ta.length;i++) {
			// only resize tiddler editor textareas
			if (ta[i].getAttribute("edit")==undefined) continue;
			new window.TextAreaResizer(ta[i]);
		}
	}
}

config.macros.resizeTiddler = { // add stretch bar to tiddler viewer element
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var here=story.findContainingTiddler(place); if (!here) return;
		var elems=here.getElementsByTagName('div');
		if (elems) for (i=0;i<elems.length;i++) if (hasClass(elems[i],'viewer')) break;
		if (i<elems.length) new window.TextAreaResizer(elems[i]);
	}
}

config.macros.resizeFrame = { // add stretch bar to iframes
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var here=story.findContainingTiddler(place); if (!here) return;
		var fr=here.getElementsByTagName('iframe');
		if (fr) for (i=0;i<fr.length;i++) new window.TextAreaResizer(fr[i]);
	}
}

// TextAreaResizer script by Jason Johnston (jj@lojjic.net)
// Created August 2003.  Use freely, but give me credit.
// adds a handle below textareas that the user can drag with the mouse to resize the textarea.
// MODIFIED by ELS for cross-browser (IE) compatibility, including:
//    fixups and adjustments to CSS styles,
//    use 'old style' assignment of mouse event handlers instead of using addEventListener(),
//    use window.event if event param is null,
//    use offsetHeight instead of getComputedStyle()
//    use explicit window.* global scope declaration for functions called from event handlers

window.TextAreaResizer = function(elt) {
	this.element = elt;
	this.create();
}
window.TextAreaResizer.prototype = {
	create : function() {
		var elt = this.element;
		var thisRef = this;
		var h = this.handle = document.createElement("div");
		h.style.height = "3px"; // was 4px... looked too fat!
		h.style.overflow = "hidden"; // ELS: force IE to trim height to < 1em
		h.style.width="auto";
		h.style.backgroundColor = "#999"; // ELS: standard mid-tone (dark) gray
		h.style.cursor = "s-resize";
		h.title = "Drag to resize text box";
		h.onmousedown=function(evt){thisRef.dragStart(evt)};
		elt.parentNode.insertBefore(h, elt.nextSibling);
	},
	dragStart : function(evt) {
		if (!evt) var evt=window.event;
		this.dragStop(evt); // ELS: stop any current drag processing first
		var thisRef = this;
		this.dragStartY = evt.clientY;
		this.dragStartH = this.element.offsetHeight;
		document.savedmousemove=document.onmousemove;
		document.onmousemove=this.dragMoveHdlr=function(evt){thisRef.dragMove(evt)};
		document.savedmouseup=document.onmouseup;
		document.onmouseup=this.dragStopHdlr=function(evt){thisRef.dragStop(evt)};
	},
	dragMove : function(evt) {
		if (!evt) var evt=window.event;
		// ELS: make sure height is at least 10px
		var h=this.dragStartH+evt.clientY-this.dragStartY;
		if (h<10) h=10; this.element.style.height=h+"px";
		// ELS: match handle to textarea width (which may have changed due to document scrollbars)
		this.handle.style.width=(this.element.offsetWidth-4)+"px"; // 4-pixel fudge factor for textarea border edge
		// ELS: when manually resizing, disable autoresizing (without restoring saved height)
		if (this.element.maxed!=undefined && this.element.maxed)
			config.commands.autosizeEditor.off(this.element,false);
	},
	dragStop : function(evt) {
		if (!evt) var evt=window.event;
		document.onmousemove=(document.savedmousemove!=undefined)?document.savedmousemove:null;
		document.onmousemove=(document.savedmouseup!=undefined)?document.savedmouseup:null;
	},
	destroy : function() {
		var elt = this.element;
		elt.parentNode.removeChild(this.handle);
		elt.style.height = "";
	}
};
//}}}
!!!<<gradient horiz #fc3 #ffffff>>TextColor^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{tablecenterpad17{
| !To Produce | !Markup |
|bgcolor:#fcc; Background Color (table) |bgcolor:#fcc; {{{|bgcolor:#FCC;Background Color (table)|}}} |
| @@color:green;Green Hornet@@ | {{{@@color:green;Green Hornet@@}}} |
| @@color:green;Green Hornet2@@ | {{{@@color:#0a0;Green Hornet2@@}}} |
| @@bgcolor:#f00;color:#fff;Red Background White Text@@ | {{{@@bgcolor:#f00;color:#fff;Red Background White Text@@}}} |
| @@highlight@@ | {{{@@highlight@@}}} |
|bgcolor:#abf; <<gradient horiz #abf #fff #abf>>font-family:Verdana, Arial; @@color:#000; ''To Produce''@@>> |bgcolor:#abf; <<gradient horiz #abf #fff #abf>>font-family: Verdana, Arial; @@color(#000):''Legacy syntax is also accepted''@@>> |
| @@color(#00Af00):Green Grass of Home@@ | {{{@@color(#00fA00):Green Grass of Home@@ }}} |
| @@bgcolor(#ff0000):color(#ffffff):Red Light@@ | {{{@@bgcolor(#ff0000):color(#ffffff):Red Light@@ }}} |
|bgcolor:#abf; <<gradient horiz #abf #fff #abf>>font-family:Verdana, Arial; @@color:#000; ''To Produce''@@>> |bgcolor:#abf; <<gradient horiz #abf #fff #abf>>font-family: Verdana, Arial; @@color(#000):''Using CSS in ~StyleSheet''@@>> |
| {{wrappingClass{ '' Code '' }}} |  {{{{{wrappingClass{ ''Code'' }}}}}}+++[more.. ]<<tiddler CustomCSSClass>>''Put this in your ~StyleSheet:'' {{{.wrappingClass{color: #000; background: #F93;}}}} === |
}}}
<html><div class="container">!!!Science<div class="left">{{firstletter{
@@color:#c06;K@@
}}}''arl Popper'' CH, MA, Ph.D., D.LITT, FBA, FRS (July 28, 1902 – September 17, 1994), was an Austrian and British philosopher {{imgfloatright{
[img[Click to go to a web page on Popper.|http://img391.imageshack.us/img391/362/kpopperqk2.jpg][http://www.eeng.dcu.ie/~tkpw/]]  
}}}and a professor at the London School of Economics. He is counted among the most influential philosophers of science of the 20th century, and also wrote extensively on social and political philosophy. Popper is perhaps best known for repudiating the classical observationalist-inductivist account of scientific method by advancing ''empirical falsifiability'' as the criterion for distinguishing scientific theory from non-science. 

In 1934 he published his first book, Logik der Forschung (The Logic of Scientific Discovery), in which he criticised psychologism, naturalism, inductionism, and logical positivism, and put forth his theory of potential ''falsifiability'' being the criterion for what should be considered science.

{{textleft{
''[[Karl Popper Links and Resources|http://lachlan.bluehaze.com.au/popper.html]]''
}}}
</div><div class="content">|bgcolor:#69f;padding:5px;color:#fff;''"Falsifiable" means subject to critical analysis and testing and capable of being disproved on the basis of such.''|
|bgcolor:#FFF;padding:5px;@@color:#060;Falsifiability is an important concept in the philosophy of science that amounts to the apparently paradoxical idea that a proposition or theory cannot be scientific if it does not admit consideration of the possibility of its being false.@@|

<<<

''Falsifiable does not mean "false"''. For a proposition to be falsifiable, it must be possible in principle to make an observation that would show the proposition to be false, even if that observation has not been made. For example, the proposition "All crows are black" would be falsified by observing one white crow. 
<<<

{{textjustify{
''Wikipedia goes on to offer a well-known example of a non-falsifiable idea, solipsism:''
<<<
''In philosophy, solipsism is, in essence, non-falsifiable.'' Solipsism claims that the Universe exists entirely in one's own mind. This can straightforwardly be seen not to be falsifiable, because whatever evidence one might adduce that is contrary to solipsism can be, after all, dismissed as something that is "in one's mind." In other words, there is no evidence that one could possibly adduce that would be inconsistent with the proposition that everything that exists, exists in one's own mind.
<<<

''In his collection Conjectures and Refutations: The Growth of Scientific Knowledge''  Popper writes, "Science must begin with myths, and with the criticism of myths; neither with the collection of observations, nor with the invention of experiments, but with the critical discussion of myths, and of magical techniques and practices. The scientific tradition is distinguished from the pre-scientific tradition in having two layers. Like the latter, it passes on its theories; but it also passes on a critical attitude towards them. The theories are passed on, not as dogmas, but rather with the challenge to discuss them and improve upon them." 

}}}
</div>
</div>

<div class="footer">Copyright 2007 by M.S.Gray (all forms of plagiarism excepted)</div></div>
</html>
!!!<<gradient horiz #fc3 #ffffff>>TextMarkup^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>

{{tablecenter{

| !To Produce | !Markup<script label="(memorize)">return Mem.start(place)</script> |
|bgcolor:#ccc; ''Bold'' |bgcolor:#ccc; {{{''Bold''  (double single quotes)}}} |
|bgcolor:#eaeaea; ==Strikethrough== |bgcolor:#eaeaea; {{{==Depreciated==}}} |
|bgcolor:#ccc; --Strikethrough-- |bgcolor:#ccc; {{{--Strikethrough-- (double hyphen) }}} |
|bgcolor:#eaeaea; __Underline__ |bgcolor:#eaeaea; {{{__Underline__ (double shift-hyphen)}}}  |
|bgcolor:#ccc; //Italic// |bgcolor:#ccc; {{{//Italic// (double forward stroke)}}} |
|bgcolor:#eaeaea; Superscript: 12^^3^^=1728 |bgcolor:#eaeaea; {{{12^^3^^=1728 (double caret)}}} |
|bgcolor:#ccc; Subscript: C~~3~~H~~5~~N~~3~~O~~9~~ <html><span title="Formula for Nitroglycerin" style="cursor:pointer>C~~3~~H~~5~~N~~3~~O~~9~~</span></html> |bgcolor:#ccc; {{{C~~3~~H~~5~~N~~3~~O~~9~~ (double tilde)}}}|
}}}




!!!''Formatting The Page''
<<tag "iframe">>
It is one of the little-known secrets of good writing that dashes come in two different sizes. The table below compares a hyphen with dashes.

The en dash is the width of a letter n; i.e. about half-again the width of a hyphen. The em dash is the width of a letter m; i.e. about twice the width of a hyphen.
When to use hyphens

Hyphens are used within some names (e.g. Crichton-Browne), to separate some prefixes from a root word (e.g. pre-empt), and in compound adjectives (e.g. role-playing game).
When to use en dashes

The most common use of the en dash is to indicate a span. For example:

    * See lines 24–29
    * Open Monday–Friday 

Another use of the en dash is to act as a minus sign. (A hyphen is too narrow.) For example:

    * 10 – 3 = 7 

Note: When used to indicate a span the en dash is generally not surrounded with spaces. When used as a minus sign it is.
When to use em dashes

The most common use of em dashes is instead of commas when setting off a parenthetical comment. For example:

    * Item 12, the broken CPU, is to be repaired today.
    * Item 12—the broken CPU—is to be repaired today. 

Note: Some editors surround em dashes with spaces, others do not. There is no clear convention, so you are free to choose whichever you prefer. Be consistent, though. 
<<tabs "" 
[[Intro ]] "" [[PluginIntro]] 
[[abegoExtensions ]] "" [[abegoExtensions]] 
[[BidiXPlugins ]] "" [[BidiXPlugins]] 
[[CorePlugins ]] "plugins previously in the core" [[CorePlugins]] 
[[InstallingPlugins ]] "" [[InstallingPlugins]] 
[[LewcidMacros ]] "" [[Lewcid TW Macros]]  
[[LinksToTiddlyToolsPlugins ]] "" [[LinksToTiddlyToolsPlugins]]
[[Link to TiddlyTools Faq ]] "" [[FaqTiddlyTools]]
[[LewcidPlugins ]] "" [[Lewcid TW Plugins]] 
[[MemorizablePlugin ]] "" [[MemorizablePlugin]] 
[[MonkeyPiratePlugins ]] "" [[MonkeyPiratePlugins]]
[[PluginIdentScript ]] "" [[PluginIdentScript]] 
[[PluginManager ]] "" [[PluginManager]]  
[[PluginServers ]] "" [[PluginServers]]   
[[TiddlySnip ]] "" [[TiddlySnip]]  
[[TWHelpSearchDoc ]] "" [[TWHelpSearchDoc]]   
[[TWHelpSearchPlugin ]] "" [[TwHelpSearchPlugin]] 

>>



<script>
if (!window.story) window.story=window;
var url=store.getTiddlerText("SiteUrl");
var title=story.findContainingTiddler(place).id.substr(7);
var permalink=encodeURIComponent(String.encodeTiddlyLink(title));
return "[img[Right click to Bookmark or Copy this tiddler Location|http://img117.imageshack.us/img117/6453/socialbookmarkiconcb4.gif]["+url+"#"+permalink+"]]";

</script>
{{textleft{
!!!<<gradient horiz #fc3 #fff>>&nbsp;ThisTWDependencies^^<<tiddler CloseThisOpen with: NewWelcome  '« back'>>|<<toolbar editTiddler>>» ^^>>
|bgcolor:#fcf;Listed below are the plugins used in TW Help.  Keep this in mind when copying tiddlers from this site. Any individual Tiddler may require one or more of these plugins.|
}}}
<<forEachTiddler 
 where 
 'tiddler.tags.contains("systemConfig")'
write
 '"|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |"+tiddler.tags+"|\n"'

>>
!!!<<gradient horiz #fc3 #fff>>&nbsp;ThreeColumnExample ^^<<tiddler CloseThisOpen with: TwoColumns  '« back'>>|<<toolbar editTiddler>>» ^^>>
----
{{threecolumns textjustify{
!!!Chinese and Middle Eastern Advances
''Following the decline of learning in the West after'' the 3d century, the development of mathematics continued in the East. In China, Tsu Ch'ung-Chih estimated ? by inscribed and circumscribed polygons, as Archimedes had done, and in India the numerals now used throughout the civilized world were invented and contributions to geometry were made by Aryabhata and Brahmagupta (5th and 6th century A.D.). The Arabs were responsible for preserving the work of the Greeks, which they translated, commented upon, and augmented. In Baghdad, Al-Khowarizmi (9th century) wrote an important work on algebra and introduced the Hindu numerals for the first time to the West, and Al-Battani worked on trigonometry. In Egypt, Ibn al-Haytham was concerned with the solids of revolution and geometrical optics. The Persian poet Omar Khayyam wrote on algebra.
!!!Western Developments from the Twelfth to Eighteenth Centuries
''Word of the Chinese and Middle Eastern works began'' to reach the West in the 12th and 13th century One of the first important European mathematicians was Leonardo da Pisa ([[Leonardo Fibonacci|http://en.wikipedia.org/wiki/Leonardo_Fibonacci]]), who wrote on arithmetic and algebra (Liber abaci, 1202) and on geometry (Practica geometriae, 1220). With the Renaissance came a great revival of interest in learning, and the invention of printing made many of the earlier books widely available. By the end of the 16th century advances had been made in algebra by Niccolò Tartaglia and Geronimo Cardano, in trigonometry by François Viète, and in such areas of applied mathematics as mapmaking by Mercator and others.

''The 17th century, however, saw the greatest revolution in'' mathematics, as the scientific revolution spread to all fields. Decimal fractions were invented by Simon Stevin and logarithms by John Napier and Henry Briggs; the beginnings of projective geometry were made by Gérard Desargues and Blaise Pascal; number theory was greatly extended by Pierre de Fermat; and the theory of probability was founded by Pascal, Fermat, and others. In the application of mathematics to mechanics and astronomy, Galileo and Johannes Kepler made fundamental contributions.

''The greatest mathematical advances of'' the 17th century, however, were the invention of analytic geometry by René Descartes and that of the calculus by Isaac Newton and, independently, by G. W. Leibniz. Descartes's invention (anticipated by Fermat, whose work was not published until later) made possible the expression of geometric problems in algebraic form and vice versa. It was indispensable in creating the calculus, which built upon and superseded earlier special methods for finding areas, volumes, and tangents to curves, developed by F. B. Cavalieri, Fermat, and others. The calculus is probably the greatest tool ever invented for the mathematical formulation and solution of physical problems.

''The history of mathematics in the'' 18th century is dominated by the development of the methods of the calculus and their application to such problems, both terrestrial and celestial, with leading roles being played by the Bernoulli family (especially Jakob, Johann, and Daniel), Leonhard Euler, Guillaume de L'Hôpital, and J. L. Lagrange. Important advances in geometry began toward the end of the century with the work of Gaspard Monge in descriptive geometry and in differential geometry and continued through his influence on others, e.g., his pupil J. V. Poncelet, who founded projective geometry (1822).

Source: http://www.answers.com/
}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[Put a bookmark in every tiddler|TiddlerBookmark]]^^<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>

See how to use bookmarks [[here|HowToUseBookmarks]]

A@@position:relative;+++^45em^[Permalink]
<<tiddler Glossary/permalink>>===@@is a very good feature, but many users miss it's significance and don't even realize it's there. For some users it seems awkward to use; one drawback is you must be online to achieve the proper results.

By using this script you can create a permalink in every tiddler so the user can right click and create a bookmark directly to that tiddler or copy the link for pasting into an email ''whether online or not!''
 
''Requirements'':
# This script requires InlineJavascriptPlugin
# You must insert your URL into the shadow tidder SiteUrl

<<gradient horiz #abf #fff>>&nbsp;''Create a tiddler with script in it''>>
Put<<tiddler ./maincode>>in a tiddler named say, ~BookMarkTiddler

<<gradient horiz #abf #fff>>&nbsp;''Option 1'' Bookmark in every tiddler>>
For a bookmark in every tiddler put<<tiddler ./viewcode>>into ~ViewTemplate.

|bgcolor:#fcf;If you want most, but not all of your tiddlers bookmarked (such as search results) you can use TaggedTemplateTweak to disable the display of the bookmark indicator by simply tagging those tiddlers you don't want indicated.  You can still use permalink on them if the need arises.|

<<gradient horiz #abf #fff>>&nbsp;''Option 2'' Bookmark in single tiddlers>>

Put {{{<<tiddler BookMarkTiddler>>}}} directly into just those tiddlers you want bookmarked.

<part viewcode hidden>
@@position:relative;+++^35em^[this code]
<<gradient horiz #abf #fff>>&nbsp;Code for ViewTemplate>>
The float is optional depending on where you want the bookmark to appear in the tiddler.
<<<
{{{
<div style='float:center;' macro='tiddler BookMarkTiddler'></div>
}}}
<<<

===@@</part>
<part maincode hidden> 
@@position:relative;+++^35em^[this code]
<<gradient horiz #abf #fff>>&nbsp;Code for ~BookMarkTiddler >>
<<<
{{{
<script>
if (!window.story) window.story=window;
var url=store.getTiddlerText("SiteUrl");
var title=story.findContainingTiddler(place).id.substr(7);
var permalink=encodeURIComponent(String.encodeTiddlyLink(title));
return "[img[Right click to Bookmark or Copy this tiddler Location|http://yourbookmarkimage.gif]["+url+"#"+permalink+"]]";

</script>
}}}
<<<
<<gradient horiz #abf #fff>>&nbsp;Text Option>>
You can dispense with the image if you wish and just use text by replacing the 'return' line with this:
{{{
return "|bookmark this» » [["+title+"|"+url+"#"+permalink+"]]|";
}}}
<<gradient horiz #abf #fff>>&nbsp;Plain Option>>

You can present the raw link by replacing the 'return' line with this:
{{{
return "[["+title+"|"+url+"#"+permalink+"]]|";
}}}
Result: http://twhelp.tiddlyspot.com/#TiddlerBookmark
===@@</part>

Note: This script is an adaption of the code in PermalinkList.

<<gradient horiz #abf #fff>>&nbsp;End>>

|Plugin1|HTMLFormattingPlugin|
|Plugin2|NestedSlidersPlugin|

<<wikify [[The plugin dependencies for the tiddler ''Embed'' is: %0]] 'TiddlerDependencies::Plugin1'>>
<<wikify [[The plugin dependencies for the tiddler ''Embed'' is: %0]] 'TiddlerDependencies::Plugin2'>>
<<wikify [[This tiddler is: %0 using %1 bytes (last author: %2)]] title {{tiddler.text.length}} modifier>>
<<wikify [[This tiddler is: %0 (date modified %1) (last author: %2)]] title {{tiddler.modified}} modifier>>

<<wikify [[The SecondaryMid' color is: @@background:%0;%0@@]] 'ColorPalette::SecondaryMid'>>

/***
| Name:|TiddlerExcerptTooltip|
| Source:|http://simonbaird.com/mptw/#TiddlerExcerptTooltip|
| Author:|Simon Baird, adapted from original version posted to mailing list by Udo Borkowski|
| Version:|1.0.0|
| Description:|Make tooltip of tiddler links the first line or excerpt of the tiddler content|
***/
//{{{

// adjust the following to your preference
config.TiddlerExcerptTooltip = {
	trimLength: 60,
	dateFormat:"DD-MM-YY"
}

// %0 is title
// %1 is modifier
// %2 is modified date
// %3 is first line
// %4 is first so many characters
// %5 is short modified date
// %6 is short created date

// firefox seems to trim the tooltip if it gets too long...
config.messages.tiddlerLinkTooltip = "%1/%5: %4";

config.messages.tiddlerEmpty = "(empty)";

Tiddler.prototype.getSubtitle = function()
{
	var theModifier = this.modifier;
	if(!theModifier)
		theModifier = config.messages.subtitleUnknown;
	var theModified = this.modified;
	if(theModified)
		theModified = theModified.toLocaleString();
	else
		theModified = config.messages.subtitleUnknown;

	var m = this.text.match(/\s*(.*)/);
	var firstLine = (m != null && m.length >= 1) ? m[1] : "";

	var contentExcerpt = this.text.prettyTrim(config.TiddlerExcerptTooltip.trimLength);
	if (contentExcerpt == "")
		contentExcerpt = config.messages.tiddlerEmpty;

	var shortModified = this.modified.formatString(config.TiddlerExcerptTooltip.dateFormat);
	var shortCreated = this.created.formatString(config.TiddlerExcerptTooltip.dateFormat);


	return config.messages.tiddlerLinkTooltip.format(
		[this.title,theModifier,theModified,firstLine,contentExcerpt,shortModified,shortCreated]);  
}

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

//}}}

/%
!html
<html><hide linebreaks>
</html>
!end
%/




/%
!example
<<gradient horiz #fc3 #fff>>&nbsp;THISTIDDLERTITLEHERE^^<<tiddler CloseThisOpen with: HOMETABSNAMEHERE  '« back'>>|<<toolbar editTiddler>>» ^^>>

<<gradient horiz #abf #fff>>&nbsp;Example>>

<<gradient horiz  #abf #fff>>&nbsp;Code>>

<<gradient horiz #abf #fff>>&nbsp;@@color:#fff;End@@>>
!end
%/
!!!<<gradient horiz #fc3 #fff>>&nbsp;TiddlerModifierDate^^<<tiddler CloseThisOpen with: Scripts  '« back'>>|<<toolbar editTiddler>>» ^^>>

{{{
<script>
        var out=['| !Script by Shulman, Mårtensson & Gray |\>|']; var who='';
        var tids=store.getTiddlers('modifier');
        for (i=0; i<tids.length; i++) { var t=tids[i];
                if (who!=t.modifier) {
                        who=t.modifier;
                        out.push('| modified by """'+who+'""": |\>|'); 
                }
                out.push('|[['+t.title+']]|'+t.modified.formatString('YYYY.0MM.0DD-DDD 0hh:0mm:0ss')+" |"+''); 
        }
        return out.join('\n');
</script> 

}}}


!!!<<gradient horiz #fc3 #fff>>&nbsp;TiddlerName^^<<tiddler CloseThisOpen with: 'Macros Built-in'  '« back'>>|<<toolbar editTiddler>>» ^^>>

Remarkably there just happens to be a tiddler named TiddlerName; this is it.

!!!<<gradient horiz #fc3 #fff>>&nbsp;[[TiddlerSections]]^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>

''Examples:''

JohnDoe
TabsTiddler

''The ability to create and use 'named' parts within a tiddler is now
part of the TW core, and is called "tiddler sections".''

A tiddler section begins with a 'heading' formatted line (i.e. a line
beginning with a "!".  The text of the heading is used as the name of
the section.  The section content includes everything following the
heading line, stopping at the next heading (or the end of the tiddler
if there are no more headings).

A *reference* to a tiddler section is constructed by appending the
section name following the tiddler name, using "##" as a separator,
like this:
{{{
   TiddlerName##SectionName
}}}
As always, if the TiddlerName or SectionName contains spaces, enclose
the entire reference in {{{[[square brackets]],}}} like this:
{{{
  [[TiddlerName#Some Section Name with Spaces]]
}}}
Applying section to a tiddler is done like this;
{{{

<<tiddler TiddlerName##SectionName>>
}}}

Using tiddler sections to create 'inline' slider content is as easy as
writing:
{{{
<<slider cookie TiddlerName##SectionName label tooltip>>
!SectionName
... content for slider goes here
!end SectionName
}}}

Although I almost always use NestedSlidersPlugin when creating
'inline slider' content, using the native <<slider>> macro plus the TW
tiddler section syntax allows you to create 100% portable TW content
that can be used in *any* document, even when there no plugins have
been installed.

Of course, when using the <<slider>>+section syntax, it is essential
to hide the tiddler section itself so the section is only displayed
when the slider button is clicked.  Fortunately, you can easily hide a
tiddler section, either by enclosing it within TiddlyWiki comment
markers, or by wrapping the section inside a CSS class that has
"display:none", like this:
{{{
<<slider cookie TiddlerName##SectionName label tooltip>>
/%
!SectionName
stuff goes here
!end
%/
}}}
OR
{{{
<<slider cookie TiddlerName##SectionName label tooltip>>{{hidden{
!SectionName
stuff goes here
!end
}}}
OR just a tiddler
{{{

<<tiddler TiddlerName##SectionName>>
}}}

enjoy,
-e
Eric Shulman 
<script show>
        if (!window.story) window.story=window;
        var title=story.findContainingTiddler(place).getAttribute("tiddler");
        var size=store.getTiddlerText(title).length;
        return title+" is using "+size+" bytes";

</script>
!!!<<gradient horiz #fc3 #fff>>&nbsp;TiddlerSlicing^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>
*Something similar see TiddlerSections

TiddlerSlicing allows you to use special notation to pull out a chunk of specially marked text from within a tiddler. Each slice has a name and a value which can be specified anywhere within a tiddler in any of these formats:

Also see PluginHeaderSlices

{{{
    theName:  textSlice
    |theName:| textSlice |
    |theName| textSlice |
}}}
The name may contain any of the characters "a-ZA-Z_0-9", and may also be decorated with {{{''}}} or {{{//}}} markers for ''bold'' and //italic// formatting that are ignored. For example:
{{{
    |''theName:''| textSlice |
}}}
Slices can be then be referenced by qualifying the parent tiddler name with the symbols "::" and the name of the slice. For example:
{{{
ColorPalette::PrimaryLight
}}}
!!!!!Demo code
{{{

<<tiddler [[ColorPaletteDemo::PrimaryLight]]>>
}}}
!!!!!Example
<<tiddler [[ColorPaletteDemoTry::Background]]>>
<<tiddler [[ColorPaletteDemoTry::Foreground]]>>
<<tiddler [[ColorPaletteDemoTry::PrimaryPale]]>>
<<tiddler [[ColorPaletteDemoTry::PrimaryLight]]>>
<<tiddler [[ColorPaletteDemoTry::PrimaryMid]]>>
<<tiddler [[ColorPaletteDemoTry::PrimaryDark]]>>
<<tiddler [[ColorPaletteDemoTry::SecondaryPale]]>>

<<tiddler [[ColorPaletteDemoTry::SecondaryLight]]>>
<<tiddler [[ColorPaletteDemoTry::SecondaryMid]]>>
<<tiddler [[ColorPaletteDemoTry::SecondaryDark]]>>
<<tiddler [[ColorPaletteDemoTry::TertiaryPale]]>>
<<tiddler [[ColorPaletteDemoTry::TertiaryLight]]>>
<<tiddler [[ColorPaletteDemoTry::TertiaryMid]]>>
<<tiddler [[ColorPaletteDemoTry::TertiaryDark]]>>
<<tiddler [[ColorPaletteDemoTry::Error]]>>

TiddlerSlicing doesn't work everywhere; at this point it is mainly intended to support the ColorPalette and similar usages.

Here's an example of some more complex slice formatting:
{{{
version: 1.2.3.4
Author: Joe Brown
''Credits:'' ASmith BBrown CCalony
//~SeeAlso:// The rise and fall of the M-perium
|!Name|!Value|
|Name:|TextSlice Tester|
|URL:|http:\\sample.com\TestSliced |
|''Type:''| Plugin |
|//Source//| http:\\sample.com\TestSliced\src\text.js |
}}}
The slices defined in that example are:
|version|1.2.3.4|
|Author|Joe Brown|
|Credits|ASmith BBrown CCalony|
|~SeeAlso|The rise and fall of the M-perium|
|Name|TextSlice Tester|
|URL|http:\\sample.com\TestSliced|
|Type|Plugin|
|Source|http:\\sample.com\TestSliced\src\text.js|

!!!Another example
<<tabs sliceCookie [[SliceDemo ]] "" [[SliceDemo]]  [[SliceDemoTiddler ]] "" [[SliceDemoTiddler]] >>

!!!Another bit of code
{{{
<<forEachTiddler
     where 'tiddler.tags.contains("LoginId")'
     sortBy 'tiddler.title.toLowerCase()'
     write '"|[[" + tiddler.title + "]]|"

         + store.getTiddlerSlice(tiddler.title, "Company") + "|"
         + store.getTiddlerSlice(tiddler.title, "Domain") + "|"
         + store.getTiddlerSlice(tiddler.title, "Authentication")+"|\n"'
     begin '"|>|>|>|!Current Login Definitions|h\n"


         + "|!Definition|!Company|!Domain|!AuthenticationId|h\n"'
 >> 
}}}

Also see JohnSmith+++[here]
<<tiddler JohnSmith>>
===

!!!End ~TiddlerSlicing



!!!<<gradient horiz #fc3 #fff>>&nbsp;TiddlerTags>>
&darr;+++[A tiddler in edit mode looks like this:]
----

<<<
@@color(#C06):&nbsp;''Title:''@@<html><input type="text" size="40" value="TiddlerTags" /></html>
@@color(#00f):''Body:''@@<html><textarea rows="10" cols="30">

The text in a tiddler.

Tags should be separated by spaces.  Tags with spaces in their titles should be enclosed in square brackets like this: [[tag with spaces]].
</textarea></html>

@@color(#0a0):''Tags:''@@<html><input type="text" size="40" value="systemConfig tweaks [[tag with spaces]]" /></html>

@@font-size:8pt;color:#999;Type tags separated with spaces, use double square brackets if necessary, or add existing@@ @@font-size:8pt;color:#c06;tags@@
<<<
!!!&nbsp;End
===
/***
|Name|TiddlerTweakerPlugin|
|Source|http://www.TiddlyTools.com/#TiddlerTweakerPlugin|
|Version|2.2.2|
|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|select multiple tiddlers and modify author, created, modified and/or tag values|
~TiddlerTweaker is a tool for TiddlyWiki authors.  It allows you to select multiple tiddlers from a listbox, either by direct interaction or automatically matching specific criteria.  You can then modify the creator, author, created, modified and/or tag values of those tiddlers using a compact set of form fields.  The values you enter into the fields simultantously overwrite the existing values in all tiddlers you have selected.
!!!!!Usage
<<<
{{{<<tiddlerTweaker>>}}}
{{smallform{<<tiddlerTweaker>>}}}
By default, any tags you enter into the TiddlerTweaker will //replace// the existing tags in all the tiddlers you have selected.  However, you can also use TiddlerTweaker to quickly filter specified tags from the selected tiddlers, while leaving any other tags assigned to those tiddlers unchanged:
>Any tag preceded by a "+" (plus) or "-" (minus), will be added or removed from the existing tags //instead of replacing the entire tag definition// of each tiddler (e.g., enter "-excludeLists" to remove that tag from all selected tiddlers.  When using this syntax, care should be taken to ensure that //every// tag is preceded by "+" or "-", to avoid inadvertently overwriting any other existing tags on the selected tiddlers.  (note: the "+" or "-" prefix on each tag value is NOT part of the tag value, and is only used by TiddlerTweaker to control how that tag value is processed)
Important Notes:
* Inasmuch as TiddlerTweaker is a 'power user' tool that can perform 'batch' functions (operating on many tiddlers at once), you should always have a recent backup of your document (or "save changes" just *before* tweaking the tiddlers), just in case you "shoot yourself in the foot".
* By design, TiddlerTweaker does NOT update the 'modified' date of tiddlers simply by making changes to the tiddler's values.  A tiddler's dates are ONLY updated when the corresponding 'created' and/or 'modified' checkboxes are selected and you enter new values for those dates.  As a general rule, after using TiddlerTweaker, always ''//remember to save your document//'' when you are done, even though the tiddler timeline tab may not show any recently modified tiddlers.
* Because you may be changing the values on many tiddlers simultaneously, selecting and updating all tiddlers in a document operation may take a while and your browser might warn about an "unresponsive script"... you should give it a whole bunch of time to 'continue'... it should complete the processing... eventually.

<<<
!!!!!Revisions
<<<
2008.09.07 [2.2.2] added removeOptionCookie() function for compatibility with [[CookieManagerPlugin]]
2008.05.12 [2.2.1] replace built-in backstage "tweak" task with tiddler tweaker control panel (moved from BackstageTweaks)
2008.01.13 [2.2.0] added "auto-selection" links: all, changed, tags, title, text
2007.12.26 [2.1.0] added support for managing 'creator' custom field (see [[CoreTweaks]])
2007.11.01 [2.0.3] added config.options.txtTweakerSortBy for cookie-based persistence of list display order preference setting.
2007.09.28 [2.0.2] in settiddlers() and deltiddlers(), added suspend/resume notification handling (improves performance when operating on multiple tiddlers)
2007.08.03 [2.0.1] added shadow definition for [[TiddlerTweaker]] tiddler for use as parameter references with {{{<<tiddler>>, <<slider>> or <<tabs>>}}} macros.
2007.08.03 [2.0.0] converted from inline script
2006.01.01 [1.0.0] initial release

<<<
!!!!!Code
***/
//{{{
version.extensions.TiddlerTweakerPlugin= {major: 2, minor: 2, revision: 2, date: new Date(2008,9,7)};

// shadow tiddler
config.shadowTiddlers.TiddlerTweaker="<<tiddlerTweaker>>";

/// backstage task
if (config.tasks) { // for TW2.2b3 or above
	config.tasks.tweak.tooltip="review/modify tiddler internals: dates, authors, tags, etc.";
	config.tasks.tweak.content="{{smallform small groupbox{<<tiddlerTweaker>>}}}";
}

if (config.options.txtTweakerSortBy==undefined) config.options.txtTweakerSortBy="modified";

// if removeOptionCookie() function is not defined by TW core, define it here.
if (window.removeOptionCookie===undefined) {
window.removeOptionCookie=function(cookie) {
	var ex=new Date(); ex.setTime(ex.getTime()-1000);  // immediately expire cookie
	document.cookie = cookie+"=novalue; path=/; expires="+ex.toGMTString();
}
}

config.macros.tiddlerTweaker = {
	html: '<form style="display:inline"><!--\
		--><table style="padding:0;margin:0;border:0;width:100%"><tr valign="top" style="padding:0;margin:0;border:0"><!--\
		--><td  style="text-align:center;white-space:nowrap;width:99%;padding:0;margin:0;border:0"><!--\
			--><font size=-2><div style="text-align:left;"><span style="float:right"><!--\
			-->&nbsp; <a href="javascript:;" \
				title="select all tiddlers"\
				onclick="\
				var f=this; while (f&&f.nodeName.toLowerCase()!=\'form\')f=f.parentNode;\
				for (var t=0; t<f.list.options.length; t++)\
					if (f.list.options[t].value.length) f.list.options[t].selected=true;\
				config.macros.tiddlerTweaker.selecttiddlers(f.list);\
				return false">all</a><!--\
			-->&nbsp; <a href="javascript:;" \
				title="select tiddlers that are new/changed since the last file save"\
				onclick="\
				var lastmod=new Date(document.lastModified);\
				var f=this; while (f&&f.nodeName.toLowerCase()!=\'form\')f=f.parentNode;\
				for (var t=0; t<f.list.options.length; t++) {\
					var tid=store.getTiddler(f.list.options[t].value);\
					f.list.options[t].selected=tid&&tid.modified>lastmod;\
				}\
				config.macros.tiddlerTweaker.selecttiddlers(f.list);\
				return false">changed</a><!--\
			-->&nbsp; <a href="javascript:;" \
				title="select tiddlers with at least one matching tag"\
				onclick="\
				var t=prompt(\'Enter space-separated tags (match ONE)\');\
				if (!t||!t.length) return false;\
				var tags=t.readBracketedList();\
				var f=this; while (f&&f.nodeName.toLowerCase()!=\'form\')f=f.parentNode;\
				for (var t=0; t<f.list.options.length; t++) {\
					f.list.options[t].selected=false;\
					var tid=store.getTiddler(f.list.options[t].value);\
					if (tid&&tid.tags.containsAny(tags)) f.list.options[t].selected=true;\
				}\
				config.macros.tiddlerTweaker.selecttiddlers(f.list);\
				return false">tags</a><!--\
			-->&nbsp; <a href="javascript:;" \
				title="select tiddlers whose titles include matching text"\
				onclick="\
				var txt=prompt(\'Enter a title (or portion of a title) to match\');\
				if (!txt||!txt.length) return false;\
				var f=this; while (f&&f.nodeName.toLowerCase()!=\'form\')f=f.parentNode;\
				for (var t=0; t<f.list.options.length; t++) {\
					f.list.options[t].selected=f.list.options[t].value.indexOf(txt)!=-1;\
				}\
				config.macros.tiddlerTweaker.selecttiddlers(f.list);\
				return false">titles</a><!--\
			-->&nbsp; <a href="javascript:;" \
				title="select tiddlers containing matching text"\
				onclick="\
				var txt=prompt(\'Enter tiddler text (content) to match\');\
				if (!txt||!txt.length) return false;\
				var f=this; while (f&&f.nodeName.toLowerCase()!=\'form\')f=f.parentNode;\
				for (var t=0; t<f.list.options.length; t++) {\
					var tt=store.getTiddlerText(f.list.options[t].value,\'\');\
					f.list.options[t].selected=(tt.indexOf(txt)!=-1);\
				}\
				config.macros.tiddlerTweaker.selecttiddlers(f.list);\
				return false">text</a> &nbsp;<!--\
			--></span><span>select tiddlers</span><!--\
			--></div><!--\
			--></font><select multiple name=list size="10" style="width:99.99%" \
				title="use click, shift-click and/or ctrl-click to select multiple tiddler titles" \
				onclick="config.macros.tiddlerTweaker.selecttiddlers(this)" \
				onchange="config.macros.tiddlerTweaker.setfields(this)"><!--\
			--></select><br><!--\
			-->show<input type=text size=1 value="10" \
				onchange="this.form.list.size=this.value; this.form.list.multiple=(this.value>1);"><!--\
			-->by<!--\
			--><select name=sortby size=1 \
				onchange="config.macros.tiddlerTweaker.init(this.form,this.value)"><!--\
			--><option value="title">title</option><!--\
			--><option value="size">size</option><!--\
			--><option value="modified">modified</option><!--\
			--><option value="created">created</option><!--\
			--></select><!--\
			--><input type="button" value="refresh" \
				onclick="config.macros.tiddlerTweaker.init(this.form,this.form.sortby.value)"<!--\
			--> <input type="button" name="stats" disabled value="totals..." \
				onclick="config.macros.tiddlerTweaker.stats(this)"><!--\
		--></td><td style="white-space:nowrap;padding:0;margin:0;border:0;width:1%"><!--\
			--><div style="text-align:left"><font size=-2>&nbsp;modify values</font></div><!--\
			--><table border=0 style="width:100%;padding:0;margin:0;border:0;"><tr style="padding:0;border:0;"><!--\
			--><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=checkbox name=settitle unchecked \
					title="allow changes to tiddler title (rename tiddler)" \
					onclick="this.form.title.disabled=!this.checked">title<!--\
			--></td><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=text name=title size=35 style="width:98%" disabled><!--\
			--></td></tr><tr style="padding:0;border:0;"><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=checkbox name=setcreator unchecked \
					title="allow changes to tiddler creator" \
					onclick="this.form.creator.disabled=!this.checked">created by<!--\
			--></td><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=text name=creator size=35 style="width:98%" disabled><!--\
			--></td></tr><tr style="padding:0;border:0;"><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=checkbox name=setwho unchecked \
					title="allow changes to tiddler author" \
					onclick="this.form.who.disabled=!this.checked">modified by<!--\
			--></td><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=text name=who size=35 style="width:98%" disabled><!--\
			--></td></tr><tr style="padding:0;border:0;"><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=checkbox name=setcdate unchecked \
					title="allow changes to created date" \
					onclick="var f=this.form; f.cm.disabled=f.cd.disabled=f.cy.disabled=f.ch.disabled=f.cn.disabled=!this.checked"><!--\
				-->created on<!--\
			--></td><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=text name=cm size=2 style="width:2em;padding:0;text-align:center" disabled><!--\
				--> / <input type=text name=cd size=2 style="width:2em;padding:0;text-align:center" disabled><!--\
				--> / <input type=text name=cy size=4 style="width:3em;padding:0;text-align:center" disabled><!--\
				--> at <input type=text name=ch size=2 style="width:2em;padding:0;text-align:center" disabled><!--\
				--> : <input type=text name=cn size=2 style="width:2em;padding:0;text-align:center" disabled><!--\
			--></td></tr><tr style="padding:0;border:0;"><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=checkbox name=setmdate unchecked \
					title="allow changes to modified date" \
					onclick="var f=this.form; f.mm.disabled=f.md.disabled=f.my.disabled=f.mh.disabled=f.mn.disabled=!this.checked"><!--\
				-->modified on<!--\
			--></td><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=text name=mm size=2 style="width:2em;padding:0;text-align:center" disabled><!--\
				--> / <input type=text name=md size=2 style="width:2em;padding:0;text-align:center" disabled><!--\
				--> / <input type=text name=my size=4 style="width:3em;padding:0;text-align:center" disabled><!--\
				--> at <input type=text name=mh size=2 style="width:2em;padding:0;text-align:center" disabled><!--\
				--> : <input type=text name=mn size=2 style="width:2em;padding:0;text-align:center" disabled><!--\
			--></td></tr><tr style="padding:0;border:0;"><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=checkbox name=settags checked \
					title="allow changes to tiddler tags" \
					onclick="this.form.tags.disabled=!this.checked">tags<!--\
			--></td><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=text name=tags size=35 value="" style="width:98%" \
					title="enter new tags or use \'+tag\' and \'-tag\' to add/remove tags from existing tags"><!--\
			--></td></tr></table><!--\
			--><div style="margin-top:.8em;text-align:center"><!--\
			--><nobr><input type=button name=display disabled style="width:32%" value="display tiddlers" \
				onclick="config.macros.tiddlerTweaker.displaytiddlers(this)"><!--\
			--> <input type=button name=del disabled style="width:32%" value="delete tiddlers" \
				onclick="config.macros.tiddlerTweaker.deltiddlers(this)"><!--\
			--> <input type=button name=set disabled style="width:32%" value="update tiddlers" \
				onclick="config.macros.tiddlerTweaker.settiddlers(this)"></nobr><!--\
			--></div><!--\
		--></td></tr></table><!--\
		--></form><span style="display:none"><!--content replaced by tiddler "stats"--></span>\
	',
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var span=createTiddlyElement(place,"span");
		span.innerHTML=this.html;
		this.init(span.firstChild,config.options.txtTweakerSortBy);
	},
	init: function(f,sortby) { // initialize form controls
		if (!f) return; // form might not be rendered yet...
		while (f.list.options[0]) f.list.options[0]=null; // empty current list content
		var tids=store.getTiddlers(sortby);
		if (sortby=="size") // descending order (largest tiddlers listed first)
			tids.sort(function(a,b) {return a.text.length > b.text.length ? -1 : (a.text.length == b.text.length ? 0 : +1);});
		for (i=0; i<tids.length; i++) {
			var label=tids[i].title; var value=tids[i].title;
			if (sortby=="modified" || sortby=="created") {
				label=tids[tids.length-i-1][sortby].formatString("YY.0MM.0DD 0hh:0mm ")+tids[tids.length-i-1].title;
				value=tids[tids.length-i-1].title;
			}
			if (sortby=="size") label="["+tids[i].text.length+"] "+label;
			f.list.options[f.list.length]=new Option(label,value,false,false);
		}
		f.title.value=f.who.value=f.creator.value=f.tags.value="";
		f.cm.value=f.cd.value=f.cy.value=f.ch.value=f.cn.value="";
		f.mm.value=f.md.value=f.my.value=f.mh.value=f.mn.value="";
		f.stats.disabled=f.set.disabled=f.del.disabled=f.display.disabled=true;
		f.settitle.disabled=false;
		config.options.txtTweakerSortBy=sortby; // remember current setting
		f.sortby.value=sortby; // sync droplist selection with current setting
		if (sortby!="modified") // non-default preference... save cookie
			saveOptionCookie("txtTweakerSortBy");
		else removeOptionCookie("txtTweakerSortBy"); // default preference... clear cookie
	},
	selecttiddlers: function(here) { // enable/disable tweaker fields based on number of items selected
		// count how many tiddlers are selected
		var f=here.form; var list=f.list;
		var c=0; for (i=0;i<list.length;i++) if (list.options[i].selected) c++;
		if (c>1) f.title.disabled=true;
		if (c>1) f.settitle.checked=false;
		f.set.disabled=(c==0);
		f.del.disabled=(c==0);
		f.display.disabled=(c==0);
		f.settitle.disabled=(c>1);
		f.stats.disabled=(c==0);
		var msg=(c==0)?'select tiddlers':(c+' tiddler'+(c!=1?'s':'')+' selected');
		here.previousSibling.firstChild.firstChild.nextSibling.innerHTML=msg;
		if (c) clearMessage(); else displayMessage("no tiddlers selected");
	},
	setfields: function(here) { // set tweaker edit fields from first selected tiddler
		var f=here.form;
		if (!here.value.length) {
			f.title.value=f.who.value=f.creator.value=f.tags.value="";
			f.cm.value=f.cd.value=f.cy.value=f.ch.value=f.cn.value="";
			f.mm.value=f.md.value=f.my.value=f.mh.value=f.mn.value="";
			return;
		}
		var tid=store.getTiddler(here.value); if (!tid) return;
		f.title.value=tid.title;
		f.who.value=tid.modifier;
		f.creator.value=tid.fields['creator']||''; // custom field - might not exist
		f.tags.value=tid.tags.join(' ');
		var c=tid.created; var m=tid.modified;
		f.cm.value=c.getMonth()+1;
		f.cd.value=c.getDate();
		f.cy.value=c.getFullYear();
		f.ch.value=c.getHours();
		f.cn.value=c.getMinutes();
		f.mm.value=m.getMonth()+1;
		f.md.value=m.getDate();
		f.my.value=m.getFullYear();
		f.mh.value=m.getHours();
		f.mn.value=m.getMinutes();
	},
	settiddlers: function(here) {
		var f=here.form; var list=f.list;
		var tids=[];
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert("please select at least one tiddler"); return; }
		var cdate=new Date(f.cy.value,f.cm.value-1,f.cd.value,f.ch.value,f.cn.value);
		var mdate=new Date(f.my.value,f.mm.value-1,f.md.value,f.mh.value,f.mn.value);
		if (tids.length>1 && !confirm("Are you sure you want to update these tiddlers:\n\n"+tids.join(', '))) return;
		store.suspendNotifications();
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			var title=!f.settitle.checked?tid.title:f.title.value;
			var who=!f.setwho.checked?tid.modifier:f.who.value;
			var tags=tid.tags
			if (f.settags.checked) { 
				var intags=f.tags.value.readBracketedList();
				var addtags=[]; var deltags=[]; var reptags=[];
				for (i=0;i<intags.length;i++) {
					if (intags[i].substr(0,1)=='+')
						addtags.push(intags[i].substr(1));
					else if (intags[i].substr(0,1)=='-')
						deltags.push(intags[i].substr(1));
					else
						reptags.push(intags[i]);
				}
				if (reptags.length)
					tags=reptags;
				if (addtags.length)
					tags=Array.concat(tags,addtags);
				if (deltags.length)
					for (i=0;i<deltags.length;i++)
						{ var pos=tags.indexOf(deltags[i]); if (pos!=-1) tags.splice(pos,1); }
			}
			if (!f.setcdate.checked) cdate=tid.created;
			if (!f.setmdate.checked) mdate=tid.modified;
			store.saveTiddler(tid.title,title,tid.text,who,mdate,tags,tid.fields);
			if (f.setcreator.checked) store.setValue(tid.title,'creator',f.creator.value); // set creator
			if (f.setcdate.checked) tid.assign(null,null,null,null,null,cdate); // set create date
		}
		store.resumeNotifications();
		this.init(f,f.sortby.value);
	},
	displaytiddlers: function(here) {
		var f=here.form; var list=f.list;
		var tids=[];
		for (i=0; i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert("please select at least one tiddler"); return; }
		story.displayTiddlers(story.findContainingTiddler(f),tids)
	},
	deltiddlers: function(here) {
		var f=here.form; var list=f.list;
		var tids=[];
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert("please select at least one tiddler"); return; }
		if (!confirm("Are you sure you want to delete these tiddlers:\n\n"+tids.join(', '))) return;
		store.suspendNotifications();
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			if (tid.tags.contains("systemConfig"))
				if (!confirm("'"+tid.title+"' is tagged with 'systemConfig'.\n\nRemoving this tiddler may cause unexpected results.  Are you sure?"))
					continue;
			store.removeTiddler(tid.title);
			story.closeTiddler(tid.title);
		}
		store.resumeNotifications();
		this.init(f,f.sortby.value);
	},
	stats: function(here) {
		var f=here.form; var list=f.list; var tids=[]; var out=''; var tot=0;
		var target=f.nextSibling;
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert("please select at least one tiddler"); return; }
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			out+='[['+tid.title+']] '+tid.text.length+'\n'; tot+=tid.text.length;
		}
		var avg=tot/tids.length;
		out=tot+' bytes in '+tids.length+' selected tiddlers ('+avg+' bytes/tiddler)\n<<<\n'+out+'<<<\n';
		removeChildren(target);
		target.innerHTML="<hr><font size=-2><a href='javascript:;' style='float:right' "

			+"onclick='this.parentNode.parentNode.style.display=\"none\"'>close</a></font>";
		wikify(out,target);
		target.style.display="block";
	}
};
//}}}
/***
|''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"));
}



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:1px [[ColorPalette::TertiaryPale]] solid;}\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>");

//}}}
----
{{textcenter{
''[[List of all tiddlers sorted by Create Date.|TiddlersByCreateDate]]''
(First 25 only for demo)
}}}
@@position:relative;+++^45em^[See the code here]
!!!!!Code for List of all tiddlers sorted by Create Date.
<<<
{{{
<<forEachTiddler 
 where
 'tiddler.created'
 sortBy
 'tiddler.created'
 descending
 write
 '(index < 25) ? "|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |"+tiddler.modified.formatString("YYYY.0MM.0DD"+" @ "+"0hh:0mm:0ss")+"|\n" : ""'

>>
}}}
<<<
===@@

----
{{tablecenter{
<<forEachTiddler 
 where
 'tiddler.created'
 sortBy
 'tiddler.created'
 descending
 write
 '(index < 25) ? "|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |"+tiddler.modified.formatString("YYYY.0MM.0DD"+" @ "+"0hh:0mm:0ss")+"|\n" : ""'

>>
}}}
!!!<<gradient horiz #fc3 #ffffff>>[[List Tiddlers by something|TiddlersByIntro]]^^<<tiddler CloseThisOpen with: WhatsInATiddler  '« back'>>|<<toolbar editTiddler>>» ^^>>
Using the following plugins you can create many special use scripts.  On the tabs above are a just a few.
!!!!Example listing tiddlers by size
{{{
<<forEachTiddler
    sortBy 
        'tiddler.text.length'
        descending
    write
        '"# [["+tiddler.title+"]] @@color:#c06;&raquo;  &raquo;@@  ("+tiddler.text.length+")\n"'

>>
}}}
''Required:''
<<<
ForEachTiddlerPlugin
ForEachTiddlerMacro
<<<
!!!!!Get them from:
http://tiddlywiki.abego-software.de/

----
{{textcenter{
''[[List of tiddlers sorted by Modified Date.|TiddlersByModifiedDate]]''
(25 only)
}}}
@@position:relative;+++^35em^[See the code here]
!!!!!Code for List of all tiddlers sorted by Modified Date.
<<<
{{{
<<forEachTiddler 
 where
 'tiddler.modified'
 sortBy
 'tiddler.modified'
 descending
 write
 '(index < 25) ? "|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |("+tiddler.modified.formatString("YYYY.0MM.0DD"+" @ "+"0hh:0mm:0ss")+")|\n" : ""'

>>
}}}
<<<
===@@
----
{{tablecenter{
<<forEachTiddler 
 where
 'tiddler.modified'
 sortBy
 'tiddler.modified'
 descending
 write
 '(index < 25) ? "|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |"+tiddler.modified.formatString("YYYY.0MM.0DD"+" @ "+"0hh:0mm:0ss")+"|\n" : ""'

>>
}}}
----
{{textcenter{
''[[List of all tiddlers sorted by size.|TiddlersBySize]]''
(First 25 only for demo)
}}}
@@position:relative;+++^45em^[See the code here]
!!!!!Code for List of tiddlers sorted by Size
<<<
{{{
<<forEachTiddler
    sortBy 
        'tiddler.text.length'
        descending
 write
 '"|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@ |("+tiddler.text.length+")|\n"'

>>
}}}
<<<
===@@

----
{{tablecenter{
<<forEachTiddler
    sortBy 
        'tiddler.text.length'
        descending
    write
     '(index < 25) ? "|"+(index+1)+"|[["+tiddler.title+"]] |@@color:#c06;&raquo;  &raquo;@@|  "+tiddler.text.length+"|\n" : ""'>>

}}}
<script>
	var tags = store.getTags();
	if(tags.length == 0) return "no tags in document";
	var out="";
	for(var t=0; t<tags.length; t++) {
		out+="*[["+tags[t][0]+"]] ("+tags[t][1]+")"+"\n";
		var tids=store.getTaggedTiddlers(tags[t][0]);
		for (i=0; i<tids.length; i++) out+="##[["+tids[i].title+"]]\n";
	}
	return out;

</script>
You called?
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[TiddlyBar]]^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>
''You can add the Community TiddlyBar toolbar to yor browser to have easy access to several important features.''

__''Summary of the features''__
 1) include some useful links, syndications about TiddlyWiki

 2) provide a search box for key words searching from www.tiddlywiki.org

 3) some other small tools and gadgets , like as, chat, messages,
JSConsole (TiddlyBar), file reposit (TiddlyBarZH), etc.

 4) install one of the grouping toolbars, and could switch to any one
of them

 5) could add any public toolsbars of  other publishers, without
installing another browser toolbar

 6) all the contents of the toolbars could be changed on-demand,
include the buttons, gadgets, and toolbar options..., etc.

 7) and some useful build-in gadgets, email notifier, weather
forecaster, on-line radio palyer, games, desktop applications.

!!!<<gradient horiz #fc3 #fff>>&nbsp;How to obtain and install the ~TiddlyBar>>

<<<
''1)'' Visit the web site http://tiddlybar.communitytoolbars.com/
''2)'' Click the __~DownloadToolbar__ button to download and install it.
&nbsp;&nbsp;''2a)'' Or You can click this link http://tiddlybar.communitytoolbars.com/exe to download and install the __~TiddlyBar__ immediately.
''3)'' Restart your browser, the TiddlyBar would appear in the toolbar of your browser.
''For more help and faq information please to see'':http://tiddlybar.communitytoolbars.com/help/
<<<
!!!End
!!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[About TiddlySnip|TiddlySnip]]^^<<tiddler CloseThisOpen with: ThirdPartyPlugins  '« back'>>|<<toolbar editTiddler>>» ^^>>

''This is not a plugin for ~TiddlyWiki but it could enhance your ~TiddlyWiki experience greatly.''

''TiddlySnip is a Firefox extension that lets you'' use your ~TiddlyWiki as a scrapbook! Simply select text, right click and choose @@color:#C06;''~TiddlySnip selection''@@.  The next time you open your ~TiddlyWiki file, your snippets will be there, already tagged and organised.

+++[Click here for a full list of features.]

----
!!!!<<gradient horiz #aaaaaa #bbbbbb #cccccc #eeeeee #ffffff>>&nbsp;Features of ~TiddlySnip>>
* Specify default tag(s) to add to each snippet tiddler, for easier management of snippets in TW.
* Specify username to set as tiddler modifier.
* Optionally create a link in each tiddler, back to the source document.
* Optionally preview tiddler title, text and tags and make any necessary changes before saving.
* Offers the ability to overwrite or append text, when a tiddler with the chosen title already exists.
* Save text from the clipboard.
* "~TiddlySnip this page" option to save bookmarks.
* Optionally create backups before every save.
**Optionally specify custom backup folder. 
* Optionally view ~TiddlyWiki after saving snippet, with the relevant tiddler open.
** Open ~TiddlyWiki in new tab or window. 
* Optional advanced mode with multiple snippet categories:
** Define snippet categories with corresponding tags, to enable saving snippets that are automatically tagged and sorted in ~TiddlyWiki according to content. For example, a category could be "JavaScript" and the corresponding tags could be something like: "Code JS Programming". That way when the snippet is saved as a tiddler, you dont need to go around tagging it in ~TiddlyWiki later. Similarly, use a category called "~TW plugin" to save tiddlers with the tag "systemConfig". One click TiddlyWiki plugin installation! 
* Creates extended fields in the snippet tiddlers, that could be used later for an alternative form of snippet management.
* Compatibile with Bidix's UploadService, so you can save to TiddlyWiki files hosted online, ala TiddlySpot. 
===

----
'' Get it here'' @@color:#C06;''&raquo; &raquo;'' @@ http://tiddlysnip.com/
----
<html><hide linebreaks>
<embed src="http://www.filefactory.com/widget/folder.swf" quality="high" id="flashElement" wmode="transparent" width="240" height="320" name="widget" align="middle" allowScriptAccess="always" menu="false" pluginspage="http://www.macromedia.com/go/getflashplayer" flashVars="hash=59075cd2a94b8349&amp;mainColor=ffffff&amp;contentColor=ffffff&amp;textColor=000000&amp;highlightColor=f1efff" type="application/x-shockwave-flash" ></embed>

<div style="font-size:x-small;font-family:Arial,Sans-Serif;width:240px;text-align:center;"><a href="http://www.filefactory.com/f/59075cd2a94b8349/">Go to folder</a> - <a href="http://www.filefactory.com/">FileFactory.com</a></div>
</html>
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.tiddlytools.com/#InstantBookmarklets]]&nbsp;&raquo;|
----
@@color:#C06;''Be patient this may be slow to load'' @@
{{nowrap{
''~InstantBookmarklets'' {{fine{<script label="(How to use help...)">
alert("To create a bookmarklet, simply drag-and-drop any command link below directly onto your browser's toolbar or right-click and use 'bookmark this link' (or 'add to favorites') to add the bookmarklet to your browser's bookmarks menu.  Once installed, you can use the bookmarklet with ANY TiddlyWiki document, even if the command script (and InlineJavascriptPlugin) has not been installed in that document!");
</script>}}}
----

<html><div align="center"><iframe  src ="http://www.tiddlytools.com/#InstantBookmarklets" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;TiddlyToolsPlugins^^<<tiddler CloseThisOpen with: ThirdPartyPlugins  '« back'>>|<<toolbar editTiddler>>» ^^>>
*Plugins at http://www.tiddlytools.com/ 
+++[Click here to see what's installed at TiddlyTools by type]
*Installed at ~TiddlyTools
<<tiddler InstallationList>>
===

|bgcolor(#8cf): @@color(#000080): Titles @@ |bgcolor(#8cf): @@color(#000080):  (bytes)@@ |bgcolor(#8cf): @@color(#000080): Tags@@ |
|AliasPlugin|3419|systemConfig,authoring|
|AttachFilePlugin|	37733|systemConfig,editing,includeNew|
|AttachFilePluginFormatters|	6971|systemConfig,includeNew,authoring|
|AutoTaggerPlugin|	6303|systemConfig,editing|
|BreadcrumbsPlugin|	2824|systemConfig,addon,includeNew|
|CalendarPlugin|	17428|systemConfig,addon,includeNew|
|CalendarPluginConfig|	134|systemConfig,addon,config,includeNew|
|CheckboxPlugin|	14735|systemConfig,includeNew,authoring|
|CollapseTiddlersPlugin|	3033|systemConfig,addon,includeNew|
|CopyTiddlerPlugin|	1219|systemConfig,editing,includeNew|
|DatePlugin|	18733|systemConfig,includeNew,authoring|
|DeliciousPlayTaggerPlugin|	4915|systemConfig,authoring,MediaPackage|
|DisableWikiLinksPlugin|	2995|systemConfig,authoring,addon|
|EditTiddlerPlugin|	1278|systemConfig,authoring|
|ExportTiddlersPlugin|	41891|systemConfig,importexport,includeNew,editing|
|GotoPlugin|	8132|systemConfig,addon,includeNew|
|HTMLFormattingPlugin|	9786|systemConfig,includeNew,authoring,MediaPackage|
|ImportTiddlersPlugin|	55998|systemConfig,importexport,includeNew,editing|
|InlineJavascriptPlugin|	10273|systemConfig,includeNew,authoring|
|MoveablePanelPlugin|	17471|systemConfig,includeNew,authoring|
|NestedSlidersPlugin|	19971|systemConfig,includeNew,authoring|
|NewDocumentPlugin|	12581|systemConfig,editing,includeNew|
|PlayerPlugin|	15939|systemConfig,authoring,MediaPackage|
|PluginDirectoryForm|	2092|	TiddlyCardsForm,TiddlyCardsPackage|
|QuoteOfTheDayPlugin|	1584|systemConfig,authoring|
|RearrangeTiddlersPlugin|	5147|systemConfig,addon,includeNew|
|ResizeEditorPlugin|	2968|systemConfig,editing,includeNew|
|SaveOnExitPlugin|	2309|systemConfig,editing|
|SearchOptionsPlugin|	15743|systemConfig,addon,includeNew|
|SelectStylesheetPlugin|	33191|systemConfig,addon,includeNew,ThemePackage|
|SinglePageModePlugin|	6035|systemConfig,addon,includeNew|
|TableOfContentsPlugin|	26827|systemConfig,addon,includeNew|
|TagCloudPlugin|	1851|systemConfig,addon,includeNew|
|TagGridPlugin|	7680|systemConfig,authoring|
|TextAreaPlugin|	6378|systemConfig,editing|
|TidIDEPlugin|	51232|systemConfig,editing,TidIDEPackage|
|TiddlerGroupsPlugin|	16024|systemConfig,addon,includeNew|
|TiddlyCardsPlugin|	34201|systemConfig,authoring,TiddlyCardsPackage|
|UnformattedTextPlugin|	3044|systemConfig,authoring|
|UploadPlugin|	18363|systemConfig,editing,includeNew|
|UploadPluginDoc|	5280|	editing,includeNew|
''You called?''
The official site for ~TiddlyWiki is here http://tiddlywiki.com/ get updates and upgrades.
The new public Wiki for ~TiddlyWiki Help is here http://www.tiddlywiki.org
[[TiddlySpot|http://tiddlyspot.com/]] @@color:#C06;''&raquo; &raquo;'' @@Free Tiddlywikis and  Hosting

!!!''~TidldyWiki Adaptations'' ^^<<toolbar editTiddler>>^^
----
Latest update 27 March 2008
----
Here are some interesting adaptations of TiddlyWiki code;

[[WikklyText |http://wikklytext.com/wiki/index.html]] @@color:#C06;''&raquo; &raquo;'' @@A wikitext server and rendering library

+++[ Time sheets and formbuilder]
<<<
I showed TiddlyWiki to a friend of mine. I didn't manage to get him hooked
on TW but he was quite interested in the single file applications concept.
He borrowed some TW code and used it to make these:

http://yourtimesheets.com/

It's a single file app for doing timesheets like the ones you might show
your boss at the end of the week. You can keep track of how many hours
you've worked and if you work extra hours or take leave or whatever. Once
the week ends you can "lock" the file and with one click create a new
timesheet for the following week. It will also do some other things like
verify that you worked enough hours.

http://yourformbuilder.com/

This is a single page app that has two "modes". First is an authoring tool
for a survey type form. You can add questions in a number of formats and
edit them right in your browser with drag and drop and validation rules etc.
Then when you're done you "publish" the form. This saves a standalone file
that contains the survey questions. This file you send out via email to
everyone who has to complete the survey. They complete the survey, verify
and save their file, then send it back to you. I'm not 100% if there are
tools to collate the results of your survey but it would not be hard to
write a little data extraction tool if their wasn't.

Anyway I'm certain he'd be interested in feedback, so if you want to try
these out then post comments to this thread.

Cheers,
Simon.

<<<
===


+++[What the author said]
<<<
Hi all,

Simon's Friend here.

Glad to get some feedback about the two sites, and *very* glad that
everyone seemed to like them.

A couple of things in response to some of the questions.

Firstly, I took both of these tools on as an experiment, because I
know Simon Baird and I had some interest in SPA programming, not
because I had knew anything about tiddlywiki.

Udo was correct in the fact that actaully the only part of the
tiddlywiki that is used is the "store" technology. However the main
reason for this was because I actually sell a commercial timesheeting
application, and therefore already had most of the client side
javascript/dhtml code to do all of the screens and timesheet logic.
The easiest way to get yourtimesheets.com (which was the first one )
up and running was to simply replace the server-side code with the
tiddlywiki "store" technology.

In response to FND ( and others ) about the tasks recording, the
reason I didn't include this is yourtimesheets.com is because, as I
said before this was an experiment and I didn't want to spend a lot of
time on it. The commercial timesheet software that I wrote has task/
customer/project time dissection built into it, so I already have the
code, it is just a matter of finding the value in the effort to add it
to yourtimesheets.com.

And in response to Uwe. I am sorry about the lack of globalisation of
yourforms.com , I will look at doing this is future releases.  I was
also looking at writing an application that could take muliple files
and statistically analyse the information. The data that is stored in
each file includes the question definition and the answer given by the
user, so it is fairly easy to analyse this data.

Please note both these projects are free to plunder, and I am happy if
people want to copy whole/parts of/re-write/make better/whatever, but
if you do something with them just tell simon, so I will eventually
find out about it.

Thanks.. and happy tiddling.. 
<<<
===


----
Before TiddlyWiki supported [[Plugins|ThirdPartyPlugins]], several independent developers created their own extended adaptations to support new features. These can be considered forks of the original core code, and won't necessarily be based on the latest version. For that reason, the trend more recently has been for developers to release new features as [[Plugins|ThirdPartyPlugins]] that can be readily mixed and matched and upgraded to the latest version.

Adaptations include:
<<<
* TimoBenk's TiddlyTasks at http://m28s01.vlinux.de/tiddlytasks.html
* KeithHodges' TiddlyPom at http://www.warwick.ac.uk/~tuspam/tiddlypom.html
* RodneyGomes' RoWiki, based on PyTW, at http://rodney.gotdns.com/
* LarsEnglund's TiddlyWikiRDF at http://larsenglund.com/TiddlyWikiRDF/
* BramChen's PrinceTiddlyWiki at http://ptw.sf.net/index-en.html
* JoshGoebel's ServerSideWiki at http://www.serversidewiki.com
* MasakiYatsu's LesserWiki at http://lesserwiki.org/
* MichaelBridgen's StickyWiki at http://www.squaremobius.net/~mikeb/Darcs/sticky-wiki/
* DavidHarper's BloTid, at http://www.spacecoastweb.net/BloTid/Tiddly/
* JacquesTurbé's TidliPo, in French at http://avm.free.fr/tidlipo.html
* JoeRaii's pytw at http://www.cs.utexas.edu/~joeraii/pytw/ and his Siglet at http://www.cs.utexas.edu/~joeraii/siglet/
* JároliJózsef's MagyarTiddlyWiki at http://innen.hu/MagyarTiddlyWiki in Hungarian
* Yoshimov's EncryptedTiddlyWiki, at http://wiki.yoshimov.com/?page=EncryptedTiddlyWiki
* TiagoDionizio's TsWiki using Tcl and SQLite, at http://mega.ist.utl.pt/~tngd/wiki/
* TimMorgan's ZiddlyWiki based on Zope, at http://ziddlywiki.org/
* SteveRumsby's YetAnotherTiddlyWikiAdaptation at http://www.rumsby.org/yatwa/
* PhonoHawk's PerlTiddlyWiki at http://ccm.sherry.jp/tiddly/
* NathanBower's GTDTiddlyWiki at http://shared.snapgrid.com/gtd_tiddlywiki.html
* GeetDuggal's PileTiddly at http://www.geetduggal.com/PileTiddly/
* DanPhiffer's TiddlyWikiRemote at http://phiffer.org/tiddly/
* JonnyLeRoy's TiddlyTagWiki at http://www.digitaldimsum.co.uk/
* JodyFoo's TagglyWiki at http://informationality.com/tagglywiki/tagglywiki.html
* ChristianHauck's at http://www.christianhauck.net/html/14300.html
* TonyLownds's TiddlyHacks at http://tony.lownds.com/tiddly/dev/cgi/index.cgi
* AlanHecht's QwikiWeb at http://snipurl.com/qwikiweb
* TimCuthbertson and MattGiuca's TiddlyWikiCSS at http://codestar.lidonet.net/misc/tiddlywikicss.html
** PeterLazarev's further improvements at http://petka.webhop.net/#NiceTiddlyWiki
* PatrickCurry and GabrielJeffrey's PhpTiddlyWiki at http://www.patrickcurry.com/tiddly/

* There's also KevemBuangga's TiddlyWikiClone at http://www.kevembuangga.com/hwk/hailiwiki.htm
* Also inspired by TiddlyWiki, Dr MichaelRees' [[DotWikIE|http://comet.it.bond.edu.au/dotsoft/Pages/dotwikiehome.aspx]],
* And AndreNho's StickWiki at http://stickwiki.sourceforge.net/
<<<
!!!<<gradient horiz #fc3 #fff>>&nbsp;TiddlyWikiColors^^<<tiddler CloseThisOpen with: UsingColor  '« back'>>|<<toolbar editTiddler>>» ^^>>
Built in to the ~TiddlyWiki core is a shadow tiddler called ColorPalette that contains the standard colors of the basic ~TiddlyWiki. Listed below are the standard colors and the sections of the ~TiddlyWiki that the ~ColorPalette affects.
*''@@color:#f00;NEW@@'' Memorize the relationship between the ColorPalette and the sections of the ~TiddlyWiki they affect;  then test your memory [[here|MemorizePalette]].
{{floatleft{
|Background:|@@bgcolor:#fff;Background: #fff@@|
|Foreground:|@@bgcolor:#000;color:#fff;Foreground: #000@@|
|~PrimaryPale:|@@bgcolor:#8cf;~PrimaryPale: #8cf@@|
|~PrimaryLight:|@@bgcolor:#18f;~PrimaryLight: #18f@@|
|~PrimaryMid: |@@bgcolor:#04b;color:#fff;~PrimaryMid: #04b@@|
|~PrimaryDark:|@@bgcolor:#014;color:#fff;~PrimaryDark: #014@@|
|~SecondaryPale:|@@bgcolor:#ffc;~SecondaryPale:#ffc @@|
|~SecondaryLight:|@@bgcolor:#fe8;~SecondaryLight: #fe8@@|
|~SecondaryMid:|@@bgcolor:#db4;~SecondaryMid: #db4@@|
|~SecondaryDark:|@@bgcolor:#841;color:#fff;~SecondaryDark: #841@@|
|~TertiaryPale:|@@bgcolor:#eee;~TertiaryPale: #eee@@|
|~TertiaryLight:|@@bgcolor:#ccc;~TertiaryLight: #ccc @@|
|~TertiaryMid:|@@bgcolor:#999;~TertiaryLight: #999@@|
|~TertiaryDark:|@@bgcolor:#666;~TertiaryDark: #666@@|
|Error:|@@bgcolor:#f88;Error: #f88@@|
}}}
''Please Note:''
These descriptions are courtesy of Dave Gifford of http://www.giffmex.org/twfortherestofus.html Visit his site for some hints on modifying the colors of your ~TiddlyWiki through the ~ColorPalette [[here.|http://tinyurl.com/ytg95q]]

''Background:'' This controls the color of the background or 'paper', and the text in the title and subtitle.

''Foreground:'' This controls the color of the text.

''~PrimaryPale:'' This controls the color of the Interface Options box.

''~PrimaryLight:'' This controls the color of the top of the Header gradient.

''~PrimaryMid:'' This controls the color of the text in the ~MainMenu, the color of the text for links, the color of the text in the lists of tiddlers and tags, and the color of the bottom of the Header gradient.

''~PrimaryDark:'' This controls the color of the text of the items in the top of the right hand menu and the text of the buttons on the tiddlers.

''~SecondaryPale:'' This controls the color of the background of the boxes in those tiddlers that show snippets of the ~TiddlyWiki code.

''~SecondaryLight:'' This controls the color that appears when the tiddler buttons or items in the right hand menu are highlighted.

''~SecondaryMid:'' This controls the color of the title cells in tables, that is, cells which begin with an exclamation mark (!). It also controls the color of the box that appears when changes have been saved, and the color of the tiddler buttons when they are selected.

''~SecondaryDark:'' This controls the color of the titles of the tiddlers.

''~TertiaryPale:'' This controls the color of the right hand menu that shows lists of tags and tiddlers, as well as the color of the tag button on the tiddlers.

''~TertiaryLight:'' This controls the color of the borders around the right hand menus.

''~TertiaryMid:'' This controls the color of the unselected tabs behind the list of tags and tiddlers in the bottom right hand menu.

''~TertiaryDark:'' This controls the color of the subtitle of each tiddler, that is, the author of the tiddler, the most recent date it was modified and date it was created.
!!!End
<<tabs tabsCookie [[Intro ]] "TWExplainedIntro" [[TWExplainedIntro]]  [[StartHere ]] "" [[StartHereTid]]  [[Tiddlers]] "" [[Tiddlers]] [[TabFourName]] "" [[Tiddler four]] >>
{{textcenter{
[[Open this FAQ in a new window|http://twfaq.tiddlyspot.com/]]
}}}
<html><iframe src="http://twfaq.tiddlyspot.com/" width=100% height=700></iframe></html>
*<<toggleSideBar>>
*[[Open in a new window|http://giffmex.tiddlyspot.com/]]&nbsp;&raquo;
{{textcenter{
@@color:#c06;Right click for forward and back@@
}}}<html><div align="center"><iframe src ="http://giffmex.tiddlyspot.com/" width="100%" align="center" height="600"></iframe></div></html>
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[Themes|TiddlyWikiThemes]]^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>

This is just a place holder until another idea comes along. At present this cannot be maintained and should probably just be outside links.

{{textcenter{
''Themes taken from  http://tiddlythemes.com''
also see: ''http://tiddlyspot.com''
http://change.tiddlyspot.com/#MptwThemes
}}}

*[[See Web Site Friendly samples here|http://tiddlythemes.com/#%5B%5BWebsite%20friendly%20themes%5D%5D]]
----
!!!Direct Links
http://tiddlythemes.com/empties/Berry2.html
http://tiddlythemes.com/empties/Blackicity.html
http://tiddlythemes.com/empties/Bleach.html
http://tiddlythemes.com/empties/Blueberry2.html
http://tiddlythemes.com/empties/Classic.html
http://tiddlythemes.com/empties/D3Gtd.html
http://tiddlythemes.com/empties/DevFire.html
http://tiddlythemes.com/empties/Flickr.html
http://tiddlythemes.com/empties/GTD.html
http://tiddlythemes.com/empties/Haemoglobin.html
http://tiddlythemes.com/empties/K2Blog.html
http://tiddlythemes.com/empties/K2WS.html 
http://tiddlythemes.com/empties/Kubrick.html 
http://tiddlythemes.com/empties/LewcidOrange.html
http://tiddlythemes.com/empties/LewcidOrangeBlog.html
http://tiddlythemes.com/empties/MPTW.html
http://tiddlythemes.com/empties/Mocha.html
http://tiddlythemes.com/empties/Monkymind.html
http://tiddlythemes.com/empties/Monochrome.html 
http://tiddlythemes.com/empties/Rin.html
http://tiddlythemes.com/empties/TiddlyPedia.html
http://tiddlythemes.com/empties/TiddlySinister.html
http://tiddlythemes.com/empties/Zeldman.html
http://tiddlythemes.com/empties/empty.html
http://tiddlythemes.com/empties/iJobs2.html         
http://tiddlythemes.com/empties/kubrickbg.jpg
http://tiddlythemes.com/empties/kubrickfooter.jpg
http://tiddlythemes.com/empties/kubrickheader.jpg
http://tiddlythemes.com/empties/rinback.jpg
http://tiddlythemes.com/empties/rinbullet.gif
http://tiddlythemes.com/empties/ringradient.jpg
http://tiddlythemes.com/empties/wiki.png
Confessions of a ~Tiddly-Whittler

{{tablecenter{{{borderless{
|font-size:1.5em;@@color:#C06;''&laquo;'' A  ~TiddlyWiki  will expand to fill the time available to fill it.''&raquo;'' @@|
| @@color:#c06;''Gray's Law''@@|
}}}
''I don't eat or sleep much anymore'', my feet are swelling up because I sit at the computer too long,  I have no friends now and what's worse I couldn't care less.  I guess it is better to travel hopefully going nowhere, knowing that my [[personal planner|YouMustBeJoking]], if perchance should ever be done,  will make a new man of me. 
{{imgfloatright{
[img[http://img449.imageshack.us/img449/851/wwwdgaorgfeatwoody5full9da.gif]]
}}}
It is hard to imagine what I did pre-tiddly and now I'm  beginning to wonder what my''[[ purpose|http://www.symbex.net.au/knowledge/relationships/despair-poster-mistakes.jpg]]'' in life really is. 

It isn't often that I ''[[join a group|http://www.symbex.net.au/knowledge/individuals/demotivators_1550_4520925.jpg]]'' of any kind but I think I need help.

Unfortunately a  ~TiddlyWiki  will expand to fill the time available to fill it, which doesn't leave much time.  

I thought when I started all this that a personal time planner was the road to ''[[excellence|http://www.symbex.net.au/knowledge/organisations/demotivators_1550_2004985.jpg]]'';  a way to improve, to get projects done on time, and done well.  @@color:#c06;The trouble is that no matter how hard I work and plan I can't seem to get my planner finished.@@

There is something different about the ~TiddlyWiki group of very dedicated and talented individuals that makes you want to constantly improve though. These are the kind of people that make you think and ''[[dream|http://www.symbex.net.au/knowledge/individuals/demotivators_1598_1427509.jpg]]'' of  what could be.

Yet as one dreams one can't help but to feel a bit of anxiety and a sense of  ''[[foreboding|http://www.symbex.net.au/knowledge/individuals/demotivators_1598_1322996.jpg]]'' about the immediate future.  All of this means sitting down and planning the next adventure and think about what went wrong the''[[ last time|http://www.symbex.net.au/knowledge/relationships/demotivators_1598_1170818.jpg]]''. And remember, this time,  to surround one's self with people of quality and purpose.

If the ~TiddlyWiki is consuming too much of your time, there is a low-tech [[alternative|Alternative]] that was recommended by my TWA self-help group and the beginners-level [[origami|origami]] is good therapy.

Even as I speak my  iRiver mp3 player is beginning to look like ''<<slider "chkWoody" "WoodyMp3" "Woody Allen" "woe is me">>''
----


!!!<<gradient horiz #Fc3  #fff>>&nbsp;TimeLine^^<<tiddler CloseThisOpen with: "Macros Built-in"  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{scrollauto{
The timeline macro lists tiddlers by date modified or date created.  It has provisions to set the number of tiddlers listed and version 2.2 has the provision of setting the date format.
!!!<<gradient horiz #Fc3  #fff>>&nbsp;Example>>

+++[See 10 tiddlers listed by date created]
<<timeline "created" "10">>
===
!!!<<gradient horiz #Fc3  #fff>>&nbsp;Code>>

&nbsp;@@color:#C06;''&raquo; &raquo;''@@@@position:relative;+++^25em^[Click here to see the date format arguments]
<<tiddler [[today/datearguments]]>>
===@@ 

{{{<<timeline "created" "10">>}}}

Version 2.2.x

{{{<<timeline "created" "10" "ddd, YYYY-0MM-0DD">>}}}
{{{ <<timeline "modified" "10" "ddd, YYYY-0MM-0DD">> }}}


!!!<<gradient horiz #Fc3  #fff>>&nbsp;End>>

}}}

<<timeline "modified" "5" "">> 
[[22SafeColors]]
----
[[25TiddlersByModifiedDate]]
----
[[2BL 702AM]]
----
[[2CBA]]
----
[[2CH]]
----
[[2PB 630AM]]
----
[[2RN-576AM]]
----
[[A Few Helpful Links -CSS]]
----
[[ABC 92.9FM]]
----
[[ASCII-HTMLTable]]
----
[[ASCIIMathML]]
----
[[ASCIITable]]
----
[[AboutDefaultTiddlers]]
----
[[AboutTiddlySpot]]
----
[[Accolades&Mentions]]
----
[[Add To del.icio.us]]
----
[[AdvancedOptions]]
----
[[All CSS References]]
----
[[Alpha]]
----
[[AlphaIntro]]
----
[[AlphaTabs]]
----
[[AltRowColorsScript]]
----
[[AlternateViews]]
----
[[Alternative]]
----
[[Another type of slider]]
----
[[AnotherExampleStyleSheet]]
----
[[AnswerMacro]]
----
[[April 2007 Statistics]]
----
[[August 2007 Statistics]]
----
[[AutoSizeIframe]]
----
[[B]]
----
[[BackLinks]]
----
[[BackUpTweak]]
----
[[BidiXPlugins]]
----
[[BlankExample]]
----
[[BlankIframe]]
----
[[BlankObject]]
----
[[BlankTable]]
----
[[BlankTabs]]
----
[[BlankTweak]]
----
[[BlockQuotes]]
----
[[Bob]]
----
[[Bob_phone]]
----
[[BookMarkUs]]
----
[[BookmarkThisPermalink]]
----
[[BorderlessIframe]]
----
[[BorderlessTable]]
----
[[BrowseDrives]]
----
[[BrowseFiles]]
----
[[BrowseForFiles]]
----
[[BrowseYourHardDisk]]
----
[[BrowserDetails]]
----
[[BrowserDetect]]
----
[[BugReportTemplate]]
----
[[BuiltIn]]
----
[[ButtonStyle]]
----
[[ByNoTags]]
----
[[ByTagFirstLine]]
----
[[ByTheTagTiddlySnip]]
----
[[C]]
----
[[CSS]]
----
[[CSS Classification]]
----
[[CSS2Reference]]
----
[[CSS2ReferenceW3S]]
----
[[CSSColors]]
----
[[CamelCase]]
----
[[Classification Properties - CSS]]
----
[[CloseAllMacro]]
----
[[CloseAllTweak]]
----
[[CloseSlider]]
----
[[CloseThisOpen]]
----
[[CodeReferenceAll]]
----
[[CodesIntro]]
----
[[ColorCalculator]]
----
[[ColorHarmony]]
----
[[ColorHints]]
----
[[ColorNames]]
----
[[ColorPalette]]
----
[[ColorPaletteDemo]]
----
[[ColorWheel]]
----
[[ColumnsAndRows]]
----
[[CommentResponses]]
----
[[CommentingAndEscapes]]
----
[[ConfigTweaks]]
----
[[ContentFooter]]
----
[[CoreTweaks]]
----
[[Cursor Property - CSS]]
----
[[CustomCSSClass]]
----
[[CustomSearch]]
----
[[D]]
----
[[DIGJazz]]
----
[[DIGRadio]]
----
[[DateURL]]
----
[[DefaultHome]]
----
[[DefaultTiddlers]]
----
[[DeskTop]]
----
[[Disable the double-click to edit]]
----
[[DisableAnimationMacro]]
----
[[Donate]]
----
[[Donations]]
----
[[DoveBeauty]]
----
[[DualEditToolbars]]
----
[[E]]
----
[[EditTemplate]]
----
[[EditWelcomeStyle]]
----
[[Editing Changing default options]]
----
[[EmailTWHelp]]
----
[[Embed]]
----
[[EncryptedIframe]]
----
[[Entities-Codes]]
----
[[EntitiesCodeIntro]]
----
[[EsotericProgrammingRing]]
----
[[ExperimentalIframe]]
----
[[ExperimentalWikify]]
----
[[ExplorerSliderTest]]
----
[[F]]
----
[[February 2007 Statistics]]
----
[[FireFox Tips]]
----
[[FirstLetter]]
----
[[FirstLineNoTags]]
----
[[Firstline]]
----
[[FlagIframe]]
----
[[FloatingPanel]]
----
[[Folder1]]
----
[[Folder2]]
----
[[Font Properties - CSS]]
----
[[FontPropertiesDemo]]
----
[[FontSizePlugin]]
----
[[ForEachGroupByTag]]
----
[[ForEachTagHelp]]
----
[[ForEachTiddlerMacro]]
----
[[ForEachTiddlerPlugin]]
----
[[Formatting Text]]
----
[[FormattingIntro]]
----
[[FormattingText]]
----
[[FormattingThePage]]
----
[[FormattingTiddlers]]
----
[[FullScreenPlugin]]
----
[[G]]
----
[[Glossary]]
----
[[GoToMacro]]
----
[[GotoPlugin]]
----
[[GradientMacro]]
----
[[GrayTestEverSearch]]
----
[[GreekHtmlEntities]]
----
[[H]]
----
[[HTML]]
----
[[HTML-DOMReference]]
----
[[HTMLFormattingPlugin]]
----
[[HTMLQuickList]]
----
[[HTMLSlider]]
----
[[HTMLSliders]]
----
[[HaloscanMacro]]
----
[[HaloscanWidgetStyling]]
----
[[Headings]]
----
[[HideEditingFeatures]]
----
[[HideEditingOverHTTP]]
----
[[HideTiddlers]]
----
[[Hints and Kinks - CSS]]
----
[[Hints and Kinks - Tweaks]]
----
[[HomeButtons]]
----
[[How can use my logo as the SiteTitle]]
----
[[HowToMakeAFloatingPanel]]
----
[[HowToUpgrade]]
----
[[HowToUseBookmarks]]
----
[[HowToUseLinks]]
----
[[HowToUseThisSite]]
----
[[HtmlEntities]]
----
[[I]]
----
[[Image-Hints]]
----
[[Images]]
----
[[ImagesExternal]]
----
[[IncludeList]]
----
[[Index]]
----
[[InlineJavascriptPlugin]]
----
[[InstallationList]]
----
[[InstallingPlugins]]
----
[[InstantTimestampPlugin]]
----
[[International]]
----
[[IntroFormattingPage]]
----
[[IntroLinks]]
----
[[J]]
----
[[JavaScript]]
----
[[JavaScriptReference]]
----
[[JournalTemplate]]
----
[[July 2007 Statistics]]
----
[[JumpToTopMacro]]
----
[[June 2007 Statistics]]
----
[[K]]
----
[[KeyStrokes]]
----
[[L]]
----
[[Last25ModifiedTiddlers]]
----
[[LatinHtmlEntities]]
----
[[Launch Application Plugin]]
----
[[LaunchApplicationPlugin]]
----
[[LaunchApplications]]
----
[[LaunchApplicationsProgram]]
----
[[Lewcid TW Macros]]
----
[[Lewcid TW Plugins]]
----
[[LinkingTips]]
----
[[LinkingToPrograms]]
----
[[List the first line]]
----
[[List-style-type Property - CSS]]
----
[[ListAll]]
----
[[ListShadowed]]
----
[[ListTiddlersBy]]
----
[[Lists]]
----
[[ListsOrdered]]
----
[[ListsUnordered]]
----
[[M]]
----
[[MacroIntro]]
----
[[MacroMenu]]
----
[[Macros Built-in]]
----
[[Macros Other]]
----
[[MacrosIntro]]
----
[[MainMenu]]
----
[[MakeTiddlers]]
----
[[MapLoco]]
----
[[March 2007 Statistics]]
----
[[Margin Properties - CSS]]
----
[[MarkupPostBody]]
----
[[MarkupPreBody]]
----
[[MarkupPreHead]]
----
[[MathHtmlEntities]]
----
[[May 2007 Statistics]]
----
[[MenuStyle]]
----
[[MiniPathFinder]]
----
[[MonkeyPiratePlugins]]
----
[[MoveablePanelPlugin]]
----
[[MovingTiddlers]]
----
[[Multiple Columns in TW]]
----
[[MyDefaultTiddlers]]
----
[[MyGroupExplained]]
----
[[MyGroupList]]
----
[[MyLinks]]
----
[[MyMap]]
----
[[N]]
----
[[NavButtons]]
----
[[NavIntro]]
----
[[NavigationWithTW]]
----
[[NestedSlidersPlugin]]
----
[[NestedStyleSheets]]
----
[[NewEmptyTiddlerMacro]]
----
[[NewExampleFromTemplate]]
----
[[NewFireFoxLogo]]
----
[[NewIframeFromTemplate]]
----
[[NewJournalFromTemplate]]
----
[[NewObjectFromTemplate]]
----
[[NewPathFinder]]
----
[[NewSystemConfigTiddler]]
----
[[NewTableFromTemplate]]
----
[[NewTabsFromTemplate]]
----
[[NewTweakFromTemplate]]
----
[[NewWelcomeTabs]]
----
[[NewsSites]]
----
[[NewtutEncripted]]
----
[[NoTagTiddlers]]
----
[[Non-Keyboard]]
----
[[NoteworthyTWSites]]
----
[[O]]
----
[[OhPhantom]]
----
[[OldTimeRadio]]
----
[[OpenCloseMacro]]
----
[[OpenTopPlugin]]
----
[[OtherHelpSites]]
----
[[OtherOptions]]
----
[[OverView]]
----
[[P]]
----
[[PageTemplate]]
----
[[PageTemplateDemo]]
----
[[PageTitle]]
----
[[PaperCup]]
----
[[PartPlugin]]
----
[[PartTiddlerPlugin]]
----
[[PeriodicTable]]
----
[[PermalinkListRaw]]
----
[[PlainTextTooltip]]
----
[[PlayerPlugin]]
----
[[PluginIntro]]
----
[[PluginServers]]
----
[[PluginSites]]
----
[[Plugins]]
----
[[PopupMacro]]
----
[[PopupMacroDocs]]
----
[[Positioning Properties - CSS]]
----
[[PrettyPermalinks]]
----
[[PrevioueNext]]
----
[[Printing Properties - CSS]]
----
[[Pseudo Classes - CSS]]
----
[[Q]]
----
[[QuickHelp]]
----
[[QuoteOfTheDayPlugin]]
----
[[R]]
----
[[Radio]]
----
[[Radio Lovers]]
----
[[Radio1]]
----
[[RadioAustralia]]
----
[[RadioIntro]]
----
[[RadioOnline]]
----
[[ReadDrives]]
----
[[RealCloseOpen]]
----
[[Redirect Macro]]
----
[[Refresh]]
----
[[RefreshStyles]]
----
[[RefreshTiddlerPlugin]]
----
[[RelatedTiddlers]]
----
[[RelatedTiddlersPlugin]]
----
[[RelativeLinkExplained]]
----
[[RelativeLinkMacro]]
----
[[ReloadButton]]
----
[[ResizingImages]]
----
[[Results]]
----
[[ReutersVideoNews]]
----
[[S]]
----
[[ScriptSlider]]
----
[[Scripts]]
----
[[Search Google Co-op]]
----
[[SearchBox]]
----
[[SearchGo]]
----
[[SearchHelp]]
----
[[SearchHelpHTML]]
----
[[SearchOptionsPlugin]]
----
[[SearchTW]]
----
[[Selectors - CSS]]
----
[[SetOptionsToAutoSave]]
----
[[SetTiddlerColumns]]
----
[[SetTiddlerHeight]]
----
[[ShadowTiddlers]]
----
[[ShiftClickToEdit]]
----
[[ShiftClickToEditDoc]]
----
[[ShowOpenForEdit]]
----
[[ShowRelatedTiddlers]]
----
[[ShowUnsavedChanges]]
----
[[SiSDictionary]]
----
[[SideBarOptions]]
----
[[SideBarTabs]]
----
[[SideBarTabsSlider]]
----
[[SimonsNiceTable]]
----
[[SinglePageModePlugin]]
----
[[SiteSubtitle]]
----
[[SiteTemplate2]]
----
[[SiteTitle]]
----
[[SiteUrl]]
----
[[SliderDemoTiddler]]
----
[[Sliders]]
----
[[SlidersOther]]
----
[[SortableGridPlugin]]
----
[[Sparklines]]
----
[[SplashScreenPlugin]]
----
[[Springer]]
----
[[StartHere]]
----
[[StatCounter]]
----
[[Statistics-Hits]]
----
[[StyleSheet]]
----
[[StyleSheetColors]]
----
[[StyleSheetLayout]]
----
[[StyleSheetPrint]]
----
[[StyleSheetShortcuts]]
----
[[T]]
----
[[TOC]]
----
[[TWExamples]]
----
[[TWForMath]]
----
[[TWHelp-SearchResults]]
----
[[TWHelpColorHarmonies]]
----
[[TWHelpSearchDoc]]
----
[[TWHelpSiteLinks]]
----
[[TWLinkCollection]]
----
[[TWPluginVault]]
----
[[TWVersion_2.2.x Tweaks]]
----
[[TabDemo1]]
----
[[TabDemo2]]
----
[[Table of Contents]]
----
[[TableContentControl]]
----
[[TableExamples]]
----
[[TableIntro]]
----
[[TableSteps]]
----
[[TableTemplate]]
----
[[TableTips]]
----
[[Tables]]
----
[[TabsSpecificTiddlers]]
----
[[TagAnatomy]]
----
[[TagCloud]]
----
[[TagCloudPlugin]]
----
[[TaggedTemplateTweak]]
----
[[TaggingDemo]]
----
[[Tags]]
----
[[Test]]
----
[[Text]]
----
[[Text Properties - CSS]]
----
[[TextAlignment]]
----
[[TextArea]]
----
[[TextAreaPlugin]]
----
[[TextColor]]
----
[[TextExample]]
----
[[TextMarkup]]
----
[[The Page]]
----
[[TheDashes]]
----
[[ThirdPartyPlugins]]
----
[[ThisPermalink]]
----
[[ThreeColumnExample]]
----
[[TiddlerBookmark]]
----
[[TiddlerExcerptTooltip]]
----
[[TiddlerSlicing]]
----
[[TiddlerTags]]
----
[[TiddlerTweaker]]
----
[[TiddlersByCreateDate]]
----
[[TiddlersByIntro]]
----
[[TiddlersBySize]]
----
[[TiddlersByTag]]
----
[[Tiddly Wiki]]
----
[[TiddlySnip]]
----
[[TiddlyToolsPlugins]]
----
[[TiddlyWiki]]
----
[[TiddlyWikiAdaptations]]
----
[[TiddlyWikiColors]]
----
[[TiddlyWikiFAQ]]
----
[[TiddlyWikiShowCase]]
----
[[TiddlyWikiThemes]]
----
[[TiddlyWikiWoes]]
----
[[TimeLine]]
----
[[ToggleLinks]]
----
[[ToggleSideBarMacro]]
----
[[ToggleSideBars]]
----
[[ToolbarMacro]]
----
[[ToolsForTiddlyWiki]]
----
[[TopOfPageMode=true]]
----
[[TopTiddler]]
----
[[TotalHits]]
----
[[Translate]]
----
[[TruthTable]]
----
[[TwHelpSearchPlugin]]
----
[[TwoColumns]]
----
[[U]]
----
[[URLDetect]]
----
[[UTF-8]]
----
[[UnHideEditingOverHTTP]]
----
[[Units - CSS]]
----
[[UpdateFrame]]
----
[[UploadPlugin]]
----
[[UploadPluginTweak]]
----
[[UsingColor]]
----
[[UsingLinks]]
----
[[V]]
----
[[VariableSpacing]]
----
[[ViewTemplate]]
----
[[VisitsDetect]]
----
[[W]]
----
[[Warning]]
----
[[WatchThisSpace]]
----
[[WeatherSydney]]
----
[[WebPage]]
----
[[WebPageCodes]]
----
[[WebStyleSheet]]
----
[[Welcome]]
----
[[WhatFileScript]]
----
[[WhatFileScriptDemo]]
----
[[WhatsInATiddler]]
----
[[WhatsInATiddlerIntro]]
----
[[WikiWords]]
----
[[WikifyPlugin]]
----
[[WoodyMp3]]
----
[[WordCountMacro]]
----
[[X]]
----
[[Y]]
----
[[YouMustBeJoking]]
----
[[Z]]
----
[[abegoExtensions]]
----
[[accordionEffect]]
----
[[css]]
----
[[defaultMyDefaultTiddlers]]
----
[[dig Radio]]
----
[[eMail]]
----
[[editTemplate]]
----
[[favicon]]
----
[[forListsystemConfigTags]]
----
[[forTiddlerbyTag]]
----
[[getPageTitle]]
----
[[hr]]
----
[[html]]
----
[[iframes]]
----
[[killGradientViewTemplate]]
----
[[killbookmarkViewTemplate]]
----
[[lastModified]]
----
[[lewcidCSS]]
----
[[list]]
----
[[list hidden]]
----
[[list hidden tiddlers]]
----
[[list shadowed]]
----
[[newJournal]]
----
[[newTiddler]]
----
[[origami]]
----
[[pageTemplate]]
----
[[parts]]
----
[[permaMystery]]
----
[[rollover]]
----
[[script]]
----
[[smiley]]
----
[[smilyMacro]]
----
[[styleSheet]]
----
[[styleSheetColors]]
----
[[styleSheetLayout]]
----
[[styleSheetPrint]]
----
[[systemConfigViewTemplate]]
----
[[tabs]]
----
[[tag]]
----
[[tagging]]
----
[[testrefresh]]
----
[[tiddler]]
----
[[tiddler to be displayed]]
----
[[tiddlyWikiThemes]]
----
[[today]]
----
[[tutorial]]
----
[[version]]
----
[[viewTemplate]]
----
[[Tips]]
----
[[Tip of the Day]]
----
[[PermalinkList]]
----
[[CodeReferenceIntro]]
----
[[CSS Properties Guide]]
----
[[Box - CSS]]
----
[[Color and Background Properties - CSS]]
----
[[Box Properties - CSS]]
----
[[CSSMenu]]
----
[[ByFilesExcluded]]
----
[[LastTiddlerChanged]]
----
[[A]]
----
[[WriteTips]]
----
[[TiddlersByModifiedDate]]
----
[[ConcatenateArrays]]
----
[[WriteTiddlersToFile]]
----
<<QOTD [[Tip of the Day]]>>
<script>
   if (!window.story) window.story=window;
   var title=story.findContainingTiddler(place).id.substr(7);
   return "[["+title+"]]";
</script>
To define a shadow tiddler:

* Create a tiddler, called what ever you like.
* tag it "systemConfig"
* Add the following text: config.shadowTiddlers.[name of tiddler] = "[your stuff]" (e.g. config.shadowTiddlers.headerOptions ={{{ "<<search>>";)}}}
* Save the tiddler and refresh the page. 

It should be listed in the shadow tiddler list. 
#[[Revised Quote of the day plugin|http://tinyurl.com/yostq7]]
config.options.chkToggleLinks=false;
/***

|Name|ToggleSideBarMacro|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#ToggleSideBarMacro|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Provides a button for toggling visibility of the SideBar. You can choose whether the SideBar should initially be hidden or displayed.

!Demo
<<toggleSideBar "Toggle Sidebar">>

!Usage:
{{{<<toggleSideBar>>}}} <<toggleSideBar>>
additional options:
{{{<<toggleSideBar label tooltip show/hide>>}}} where:
label = custom label for the button,
tooltip = custom tooltip for the button,
show/hide = use one or the other, determines whether the sidebar is shown at first or not.
(default is to show the sidebar)

You can add it to your tiddler toolbar, your MainMenu, or where you like really.
If you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:
{{{ .HideSideBarButton {float:right;} }}}

!History
*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour. 
*20-07-06: version 0.11
*27-04-06: version 0.1: working.

!Code
***/
//{{{
config.macros.toggleSideBar={};

config.macros.toggleSideBar.settings={
         styleHide :  "#sidebar, .header { display: none;}\n"+"#contentWrapper #displayArea { margin-right: 0em !important;}}\n"+"",
         styleShow : " ",
         arrow1: "Sidebar «",
         arrow2: "Sidebar »"

};

config.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)
{
          var tooltip= params[1]||'toggle sidebar';
          var mode = (params[2] && params[2]=="hide")? "hide":"show";
          var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;
          var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;
          var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");
          if (mode == "hide")
             { 
             (document.getElementById("sidebar")).setAttribute("toggle","hide");
              setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");
             }
};

config.macros.toggleSideBar.onToggleSideBar = function(){
          var sidebar = document.getElementById("sidebar");
          var settings = config.macros.toggleSideBar.settings;
          if (sidebar.getAttribute("toggle")=='hide')
             {
              setStylesheet(settings.styleShow,"ToggleSideBarStyles");
              sidebar.setAttribute("toggle","show");
              this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
              }
          else
              {    
               setStylesheet(settings.styleHide,"ToggleSideBarStyles");
               sidebar.setAttribute("toggle","hide");
               this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);
              }

     return false;
}

setStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\n","ToggleSideBarButtonStyles");

//}}}
!!!!<<gradient horiz #fc3 #ffffff>>ToggleSideBars^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>
''Sometimes it becomes desirable to increase'' the viewing area of your ~TiddlyWiki. There are a few methods at the moment for toggling the sidebars on and off for expanding the window temporarily; hiding mainmenu on the left and/or sidebar options on the right.  They are not necessarily compatible so choose one or the other.

!!!!''~ToggleSideBarMacro''
<<<
Provides a button for toggling visibility of the ~SideBar. You can choose __show/hide__  to determine whether the ~SideBar should initially be hidden or displayed:

{{{<<toggleSideBar label tooltip show/hide>>}}}

|bgcolor:#fcf;Putting this: @@padding:0.2em;{{{<<toggleSideBar "" "" hide>>}}}@@ into a tiddler that opens on startup (like the ~MainMenu) will ''hide'' the right sidebar on startup.|

http://tw.lewcid.org/#ToggleSideBarMacro

There is also a plugin that hides both sidebars simultaneously on the left and right margins. This plugin puts a ( ↕ ) in the viewer toolbar so it will always be available as long as there is a tiddler open.

http://tw.lewcid.org/#FullScreenPlugin


<<<
!!!!Toggle either or both sidebars
+++[Get plugins from TiddlyTools here.]
*''Read the documentation throughly.''
<<<
http://www.TiddlyTools.com/
http://www.TiddlyTools.com/#ToggleLeftSidebar
http://www.TiddlyTools.com/#TogglerRightSidebar
<<<
===

<<<
Clicking one of these toggles triggers a script to show/hide the
corresponding sidebar (both can be hidden).
<<<
!!!!Permanently move right sidebar to the left side with CSS
<<<
Here is a way to move the right sidebar to the left side under the ~MainMenu (Adjust top: 500px to suit.)
{{{
/*{{{*/
#sidebar {position:absolute; left:3px; top:500px; width:14em; font-
size:.9em}
#sidebarTabs .tabContents {width:13em; overflow:hidden;}
#contentWrapper #displayArea { margin-right: 1em;} 
/*}}}*/ 
}}}
<<<
!!!!Hide Right ~SideBar when viewed from web
<<<
Here's a tiny plugin (from Eric Shulman) that uses CSS to hide the sidebar element AND
reclaim that space for use by the tiddler story column ('displayArea'
element):

Put the following ONE LINE of javascript code into a tiddler (e.g.,@@Color:#00f;~WebSideStory@@) (*) tagged with 'systemConfig'.
<<<

{{{
if (readOnly) setStylesheet("#sidebar { display:none !important; }
#displayArea { margin-right:1em !important; }","webSideStory");
}}}
<<<
<<<

!!!End
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[Date]]^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>

Here's a pure HTML button that toggles the TiddlersBarPlugin option setting
and then causes an automatic refresh of the page template (which
should cause the tabs to actually appear/disappear) 

{{{
<html><a href="javascript:;" onclick="config.options.chkDisableTabsBar=!config.options.chkDisableTabsBar;
      refreshPageTemplate(); return false;">toggle tiddler tabs</a></html>
}}}
!!!<<gradient horiz #fc3 #ffffff>>[[ToolTips]]^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>

''If you want a tooltp on plain text you can do it this way.''
{{{<html><span title="Mouseover tooltip. Your text here" style="cursor:pointer>Try it here</span></html>}}}

@@color:#C06;''&raquo; &raquo;'' @@ <html><span title="Mouseover tooltip. Your text here" style="cursor:pointer;">''Try it here''</span></html> &nbsp;&nbsp;&nbsp;@@color:#C06;''&raquo; &raquo;'' @@ <html><span title="What are you waiting for?" style="cursor:wait;">''Wait!'</span></html>

''You can change the cursor and text color like this.''
{{{<html><span style="cursor:help">@@color:#00f;Put your cursor here to see help cursor@@</span></html>}}}

@@color:#C06;''&raquo; &raquo;'' @@ <html><span style="cursor:help;">@@color:#00f;Put your cursor here to see help cursor@@</span></html>

 {{{[[test this|About]]<<tiddler {{place.lastChild.title='Your tooltip here';''}} >>}}}
 @@color:#C06;''&raquo; &raquo;'' @@ [[test this|About]]<<tiddler {{place.lastChild.title='Your tooltip here';''}} >>


!!!<<gradient horiz #Fc3  #fff>>&nbsp;[[ToolbarMacro]]^^<<tiddler CloseThisOpen with: "Macros Built-in"  '« back'>>|<<toolbar editTiddler>>» ^^>>

<part toolbar>
The ~ToolbarMacro defines the toolbar that appears when the mouse hovers over a tiddler. In fact if you glance up a bit and put the cursor over this tiddler it looks a little like the tool bar there. <<smiley ;-)>>

*This tool bar has been specially designed to make navigation within ~TWHelp easier when many tiddlers are open. It has a ''goto'' button and a ''top'' button; in addition the ''close all'' button has been moved to the toolbar as well.
|vertical-align:middle;Like this: |[img[http://img221.imageshack.us/img221/1433/toolbarqm0.jpg]]|
*''Add closeAll to your toolbar.''
1: Generate a tiddler like this CloseAllMacro, tag it with systemConfig save and reload
2: Add it to your toolbar as described below.

Below is the toolbar code taken directly from the ViewTemplate.
!!!<<gradient horiz #Fc3  #fff>>&nbsp;Code>>
{{{
<div class='toolbar' macro='toolbar +jump +top -closeTiddler closeOthers closeAll +editTiddler permalink '></div>
}}}
</part>

!!!<<gradient horiz #Fc3  #fff>>&nbsp;More>>
You can also specify any of the toolbar buttons in any tiddler by doing this:
{{{<<toolbar editTiddler>>}}} which results in this: <<toolbar editTiddler>>

----
The commands available to use in the Toolbar are listed below.
|bgcolor(#8cf): @@color(#000080): Titles @@ |
|[[CancelTiddlerCommand]]|
|[[CloseOthersCommand]]|
|[[CloseTiddlerCommand]]|
|[[DeleteTiddlerCommand]]|
|[[EditTiddlerCommand]]|
|[[JumpCommand]]|
|[[PermalinkCommand]]|
|[[ReferencesCommand]]|
|[[SaveTiddlerCommand]]|
Commands that are preceded by a + are executed when the user pushes the ~Ctrl-Enter keyboard shortcut or when the user doubleclicks the tiddler. Commands preceded by a - are executed when the user presses Esc on the keyboard.
!!!&nbsp;End
TiddlerTweaker @@color:#C06;''&raquo; &raquo;'' @@ Allows modification of author, tags, created and modified dates of tiddlers.


!!!<<gradient horiz #fc3 #ffffff>>&nbsp;ToolsForTiddlyWiki>>
''If you do much modification to ~TiddlyWiki here are a few programs that could make working with it easier.''
----
*[[ReadFromHRSeparatedFile]]
*[[TW Help BookMarklets|BookMarklets]]
*[[TiddlyTools Bookmarklets|TiddlyToolsBookmarklets]]
*[[Lewcid Bookmarklets|http://lewcid.org/tiddlywiki-bookmarklets/]]
Tools for building bookmarklets
<<<
http://xdexavier.googlepages.com/sharebookmarklet.html
http://subsimple.com/bookmarklets/jsbuilder.htm
http://4umi.com/web/bookmarklet/edit.php 
<<<
----
''For storing and sharing code:''
#http://twhelp.pastebin.com/
#http://tiddlywiki.pastebin.com/
#http://sidebarnews.pastebin.com/
@@color:#C06;''&raquo; &raquo;'' @@~TiddlerTweaker (For Modifying tiddlers)
{{unboldlink{
!!!<<gradient horiz #abf #ffffff>>&nbsp;Programs handy for ~TiddlyWiki>>

----
<<<
''A ~JavaScript Verifier'' @@color:#C06;''&raquo; &raquo;'' @@ http://www.jslint.com/
~JSLint is a JavaScript program that looks for problems in JavaScript programs. 
<<<
----
<<<
''The Mouseover DOM Inspector, or MODI for short'', is a favelet (also known as a bookmarklet) that allows you to view and manipulate the DOM of a web page simply by mousing around the document.

Browsers currently supported are Firefox, Mozilla, Netscape 8, Opera 7.5+ and MSIE6+ on all of their respective Operating Systems
.
http://slayeroffice.com/tools/modi/v2.0/modi_help.html
<<<
----
<<<
''The Web Developer extension adds a menu and a toolbar to'' the browser with various web developer tools. It is designed for Firefox, Flock, Mozilla  and Seamonkey, and will run on any platform that these browsers support including Windows, Mac OS  X and Linux.

http://chrispederick.com/work/web-developer/
<<<
----
<<<
''Clipboard Help+Spell is a text-based clipboard utility'' 
http://www.donationcoder.com/Software/Mouser/clipboardhelpandspell/index.html

<<<
+++[read more...]
<<<
# Database stores history of all past text clipboard entries for easy viewing, modification, and search
# Use it for keeping hierarchical notes - search, sort, filter by text, modification date, last view date
# Super easy and super fast search function - or use complex filters if you need them - you'll never have a problem finding a note again!
# Organize your notes and clips any way you want - show them all or view by group or category; view your clips any way you like
# High-quality spellcheck - underlined mistakes; learning spellchecker
# Configurable hotkeys for common functions
# Powerful text formatting options - make your own presets for common functions
# Simple functions for copying and pasting into and out of other applications
<<<
===
 
----
<<<
*http://tiddlywiki.org/wiki/Dev:Code_Editors
''Clipomatic is a clipboard cache program. It remembers what was copied to the clipboard and allows you to retrieve it, even after you've copied something else to the clipboard.''  It has a working cache that can be adjusted to hold any number of cuts or copies, and a permanent clipset to hold your favorite bits and pieces of text. It is perfect for ~TiddlyWiki where coping and pasting is done so often.  It works on any modern version of Windows.

http://www.mlin.net/Clipomatic.shtml
<<<
+++[read more...]
<<<
There is a maximum number of items that can be cached. By default, this is 10. It can be changed in the Settings DIalog. When the maximum number of items has been reached and a new item is copied, the last item falls off a cliff as the other items get pushed down.

''Clip Sets''
Clip sets are a powerful feature of Clipomatic that allow you to save the cache to a file or load other caches. This allows you to switch the entire cache as needed. For instance, I keep a set of clips useful for HTML authoring and a separate set for regular clips. When I go to write a web page, I switch to the HTML authoring cache. When I’ve finished, I switch back.

''The Permanent Clipset''
The Permanent Clipset is a clipset that will be separately displayed in Clipomatic’s menu. The items in this clipset will not be affected by changes in the clipboard; they merely allow you to quickly paste common items. For instance, you could save your name, address, and phone number, and be able to paste them very quickly.
<<<
===

----
<<<
''Firebug''
Firebug integrates with Firefox to put a wealth of web development tools at your fingertips while you browse. You can edit, debug, and monitor CSS, HTML, and JavaScript live in any web page.

http://www.getfirebug.com/
<<<

----
<<<
''Process Explorer for Windows''
Ever wondered which program has a particular file or directory open? Now you can find out. Process Explorer shows you information about which handles and DLLs processes have opened or loaded. Keep an eye on ~FireFox and watch it eat your memory!

[[Download it here|http://www.microsoft.com/technet/sysinternals/utilities/ProcessExplorer.mspx]]
<<<
+++[read more...]
<<<
The Process Explorer display consists of two sub-windows. The top window always shows a list of the currently active processes, including the names of their owning accounts, whereas the information displayed in the bottom window depends on the mode that Process Explorer is in: if it is in handle mode you'll see the handles that the process selected in the top window has opened; if Process Explorer is in DLL mode you'll see the DLLs and memory-mapped files that the process has loaded. Process Explorer also has a powerful search capability that will quickly show you which processes have particular handles opened or DLLs loaded.

The unique capabilities of Process Explorer make it useful for tracking down DLL-version problems or handle leaks, and provide insight into the way Windows and applications work.
<<<
===


!!!<<gradient horiz #abf #ffffff>>&nbsp;End>>



config.options.chkTopOfPageMode=false;
<html><font size="-1">Start of TiddlyWiki Help</font></html>
Hits on TW Help from Feb through June 2007 <<sparkline 0 4050 0 5349 0 4447 0 5515 0 4431 0>>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[TranscludeTiddlers]]^^<<tiddler CloseThisOpen with: WhatsInATiddler  '« back'>>|<<toolbar editTiddler>>» ^^>>
''Transclude formatted last-modified date''
{{{
/%
!out
$1
!end
%/<<tiddler [[TranscludeTiddlers##out]] with: {{new Date(document.lastModified).formatString('YYYY.0MM.0DD - DDD')}}>>
}}}
''Any tiddler title''
{{{
/%
!out
$1
!end
%/
Last Modified on <<tiddler {{tiddler.title+'##out'}} with: {{new Date(document.lastModified).formatString('YYYY.0MM.0DD - DDD 0hh:0mm:0ss')}} >> 
}}}
''Example''
Last Modified on <<tiddler {{tiddler.title+'##out'}} with: {{new Date(document.lastModified).formatString('YYYY.0MM.0DD - DDD 0hh:0mm:0ss')}} >> 


''Transclude all tiddlers with a certain tag''
{{{
<<forEachTiddler 
 where 
 'tiddler.tags.contains("CSS")'
sortBy '(tiddler.title)' 
 ascending
write
 '"<<tiddler "+tiddler.title+"\>\>\n"'
>>
}}}

!!!TranscludeTiddlerByTag
{{{
<script>
var out="";
var tids=store.getTaggedTiddlers("script");
for (var t=0; t<tids.length; t++)
out+="!!![["+tids[t].title+"]]\n"+"<<tiddler "+"[["+tids[t].title+"]]>>\n";
return out;

</script>
}}}
{{{
!!!TranscludeSliderByTag
<script>
var out="";
var tids=store.getTaggedTiddlers("script");
for (var t=0; t<tids.length; t++)
out+="!!!<<slider chkCookieName [["+tids[t].title+"]] [["+tids[t].title+"]] [["+tids[t].title+"]] >>\n";
return out;

</script>
}}}
!!!Transclude a transclude
{{{
<script>
var out="";
var tids=store.getTaggedTiddlers("menu");
for (var t=0; t<tids.length; t++)
out+="<<tiddler Switch with: [["+tids[t].title+"]] [["+tids[t].title+"]] [[MainMenu]] >>\n";
return out;

</script>
}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[TranscludeTiddlersSections]]^^<<tiddler CloseThisOpen with: WhatsInATiddler   '« back'>>|<<toolbar editTiddler>>» ^^>>

{{{
<<forEachTiddler 
 where 
 'tiddler.tags.contains("links")'
sortBy '(tiddler.title)' 
 ascending
write
 '"<<tiddler "+tiddler.title+"##Section1"+"\>\>\n"'

>>
}}}
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://translate.google.com/?hl=en]]&nbsp;&raquo;|
----
<html><div align="center"><iframe  src ="http://translate.google.com/?hl=en" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[Truth Table|TruthTable]]^^<<tiddler CloseThisOpen with: Tables  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{textjustify textindent25{
''Notice that the validity of the inference of a deductive argument is'' independent of the truth of its premises; both conditions must be met in order to be sure of the truth of the conclusion. Of the eight distinct possible combinations of truth and validity, only one (@@color:#f00;xxxx@@, that it could be false) is ruled out completely:
{{floatleft{
|!Premises|!Inference|!Conclusion|
|bgcolor:#fff;vertical-align:middle; True |bgcolor:#fff;vertical-align:middle; Valid |bgcolor:#fff; True |
|~|~|bgcolor:#fcf; @@color:#f00;xxxx@@ |
|~|bgcolor:#fff;vertical-align:middle; Invalid |bgcolor:#fff; True |
|~|~|bgcolor:#fff; False |
|bgcolor:#fff;vertical-align:middle; False |bgcolor:#fff;vertical-align:middle; Valid |bgcolor:#fff; True |
|~|~|bgcolor:#fff; False |
|~|bgcolor:#fff;vertical-align:middle; Invalid |bgcolor:#fff; True |
|~|~|bgcolor:#fff; False |
}}}
{{textindent25{
''The only thing that cannot happen is'' for a deductive argument to have true premises and a valid inference but a false conclusion. Some logicians designate the combination of true premises and a valid inference as a sound argument; it is a piece of reasoning whose conclusion @@color:#c06;must be true@@. 
}}}
{{textindent25{
''The trouble with every other case is'' that it gets us nowhere, since either at least one of the premises is false, or the inference is invalid, or both. The conclusions of such arguments may be either true or false, so they are entirely useless in any effort to gain new information.
}}}
[[Reference: Science Matters|http://tiddlyspot.com/science/#Deductive-Inductive-Logic]]
}}}
!!!<<gradient horiz #abf #fff>>&nbsp;Code>>
{{{
|!Premises|!Inference|!Conclusion|
|vertical-align:middle; True |vertical-align:middle; Valid | True |
|~|~| xxxx |
|~|vertical-align:middle; Invalid | True |
|~|~| False |
|vertical-align:middle; False |vertical-align:middle; Valid | True |
|~|~| False |
|~|vertical-align:middle; Invalid | True |
|~|~| False |
}}}

!!!<<gradient horiz #fc3 #fff>>&nbsp;TruthTableMozDemo^^<<tiddler CloseThisOpen with: Tables  '« back'>>|<<toolbar editTiddler>>» ^^>>
This is the TruthTable styled using the Proprietary Mozilla CSS Properties and the custom class in CustomMozTableCSS.  Using custom classes overcomes the inherited features that come about when you put a tiddler in tabs. Custom class overrides the control the tiddler that contains the tabs has over the tiddlers in the tabs.  Therefore the [[Tables]] set of tabs can display both the normal table and the 'moz' table.

{{MozTableTd MozTableTh MozTable{
|Premises|Inference|Conclusion|
|vertical-align:middle; True |vertical-align:middle; Valid | True |
|~|~|bgcolor:#fcf; @@color:#f00;xxxx@@ |
|~|bgcolor:#fff;vertical-align:middle; Invalid |bgcolor:#fff; True |
|~|~|bgcolor:#fff; False |
|bgcolor:#fff;vertical-align:middle; False |bgcolor:#fff;vertical-align:middle; Valid |bgcolor:#fff; True |
|~|~|bgcolor:#fff; False |
|~|bgcolor:#fff;vertical-align:middle; Invalid |bgcolor:#fff; True |
|~|~|bgcolor:#fff; False |
}}}
<<tabs "" [[Intro ]] "" [[TutorialIntro]]   [[Tutorial ]] "" [[MemorizeIframe]] [[MemorizePalette ]] "" [[MemorizePalette]]  [[PaletteColors]] "" [[TiddlyWikiColors]]>>



A work in progress experimenting with various tutorial methods.

/***
|Name|TwHelpSearchPlugin|
|Source|http://twhelp.tiddlyspot.com/#TwHelpSearchPlugin|
|Documentation|http://twhelp.tiddlyspot.com/#TWHelpSearchDoc|
|Version|1.0.8|
|Author|Morris Gray|
|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.0 - 2.4|
|Type|plugin|
|Requires|[[SearchOptionsPlugin|http://www.TiddlyTools.com/#SearchOptionsPlugin]] [[TableSortingPlugin|http://tw.lewcid.org/#TableSortingPlugin]] (only for sorting option)|
|Overrides|SearchOptionsPlugin's search results|
|Description|Extends the search results from SearchOptionsPlugin to a sortable table showing title, size and tags.|
 ''Demo search:''
|>|>|>|<<search>> |
|>|>| look for in |>|>|>|
| <<option chkSearchTitles>> | <<option chkSearchText>> | <<option chkSearchTags>> | <<option chkHoldSearches>> |
| titles |  text  | tags | hold |

''A Plugin Tweak for:'' SearchOptionsPlugin
!!!!!Description

<<<
This plugin defines an alternative format for the SearchResults tiddler that is generated by the SearchOptionsPlugin . It presents the search results in tabular form numbering the rows; and showing the tiddler title, the size in bytes, and the tags.  It is ready to be used with the [[TableSortingPlugin|http://tw.lewcid.org/#TableSortingPlugin]] (check versions) so any column can be sorted; such as size in ascending or descending order.
<<<
!!!!!Installation
<<<
Import (or copy/paste) the following tiddlers into your ~TiddlyWiki:
* http://twhelp.tiddlyspot.com/#TwHelpSearchPlugin
*SearchOptionsPlugin from http://www.tiddlytools.com/#SearchOptionsPlugin
* Get more documentation here [[TWHelpSearchDoc]] or here:
* http://twhelp.tiddlyspot.com/#TwHelpSearchDoc
<<<
!!!!!Revision History
<<<
''2009.02.18  [1.0.8]'' 
Added modified column.
''2009.02.18  [1.0.7]'' 
Removed text coloring of headers re: conflict with TableSortingPlugin refresh.
''2008.09.14  [1.0.6]'' 
Cosmetic - Add header.
''2007.09.12  [1.0.6]''
Added overflow scroll to TWHelp-SearchResults for long titles or tags.
''2006.02.03  [1.0.5]''
Added facility for holding the results of multiple searches with tick box on dashboard.
''2006.02.02  [1.0.4]''
Added several options, cleaned up design.Planning one version basic and one with added options this is the added options version.
''2006.01.27  [1.0.3''
Added a column for the size of the text in each tiddler, this does not include the size of the title or tags.  Added overall TW statistics button requires TiddlerStatsPlugin.
''2006.01.23 [1.0.2 ]''
''a)''Changed function reportSearchResults(text,matches) to  window.reportSearchResults=function(text,matches)
''b)''Added a line so that Incremental Search is automatically disabled config.options.chkSearchIncremental=false; turn off key-by-key searching
''c)''Removed space inside parens. bgcolor(#fe8 )" to "bgcolor(#fe8)".  This
is what was causing IE to 'crap out' halfway through drawing the table
headings.
''d)''Added {{{config.options.chkSearchList=true;}}}
''2006.01.20 [1.0.1]''
ELS: reportSearchResults() definition moved to this Plugin Tweak tiddler and removed extranous code
''2006.01.19 [1.0.0]''
This is an adaptation of Eric Shulman's SearchOptionsPlugin. Adapted by MorrisGray to provide search results in table form. All the necessary controls for refining the search is provided within the table including slide-down access to AdvancedOptions.
<<<
!!!!!Code
***/

//{{{
if (config.options.chkSinglePageMode==undefined) config.options.chkSinglePageMode=false;
if (config.options.chkRegExpSearch==undefined) config.options.chkRegExpSearch=true;
if (config.options.chkSearchTitles==undefined) config.options.chkSearchTitles=false;
if (config.options.chkSearchText==undefined) config.options.chkSearchText=true;
if (config.options.chkSearchTags==undefined) config.options.chkSearchTags=false;
if (config.options.chkSearchTitlesFirst==undefined) config.options.chkSearchTitlesFirst=true;
if (config.options.chkSearchList==undefined) config.options.chkSearchList=true;
if (config.options.chkSearchIncremental==undefined) config.options.chkSearchIncremental=false;
if (config.options.chkToggleLinks==true) config.options.chkToggleLinks=false;
if (config.options.chkHoldSearches==undefined) config.options.chkHoldSearches=false;
if (config.options.chkSortTags==undefined) config.options.chkSortTags=false;

config.options.chkToggleLinks=false;
config.options.chkSinglePageMode=false;
config.options.chkHoldSearches=false;
config.options.chkSearchIncremental=false;
config.options.chkHttpReadOnly = false;
config.options.chkRegExpSearch=true;
config.options.chkSearchList=true;
config.options.chkToggleLinks=false;

config.shadowTiddlers.AdvancedOptions += "\n<<option chkHoldSearches>> Hold search results";


//}}}

//{{{

// Give the report a custom name
config.macros.search.reportTitle="TWHelp-SearchResults";

// Override default SearchOptionsPlugin formatting for SearchResults tiddler
window.reportSearchResults=function(text,matches)

{
  
        var title=config.macros.search.reportTitle
	config.macros.search.reportTitle;
      	var q = config.options.chkRegExpSearch ? "/" : "'";
        if (!config.options.chkHoldSearches)  body=""; 
      
body+="\n|>|bgcolor:#4c4c4c;@@color(#ccc):''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''@@|bgcolor:#4c4c4c;  @@color:#ffffc8; Ver: <<version>>@@ "+"|"+"\n";
        body+="|>|>|bgcolor:#999;color:#000;<<search>> <<option chkSearchTitles>> Titles <<option chkSearchText>> Text <<option chkSearchTags>>Tags <<option chkHoldSearches>> Hold |"+"\n";
       
        body+="\n|bgcolor:#4c4c4c;&nbsp;|bgcolor:#4c4c4c; ''Titles'' |bgcolor:#4c4c4c; ''Size'' |bgcolor:#4c4c4c; ''Tags'' |bgcolor:#4c4c4c; ''Modified'' |h";
	for(var t=0;t<matches.length;t++) 
        body+="\n"+"| "+(t+1)+"|[["+matches[t].title+"]]| "+matches[t].text.length+"|"+matches[t].tags+"|"+matches[t].modified.formatString('YYYY.0MM.0DD')+"|";
         body+="\n|sortable|k";
         body+="\n";

	// create/update the tiddler
	var tiddler=store.getTiddler(title); if (!tiddler) tiddler=new Tiddler();
	tiddler.set(title,body,config.options.txtUserName,(new Date()),"excludeLists excludeSearch killbookmark");
	store.addTiddler(tiddler); story.closeTiddler(title);

	// render tiddler
	var oldprompt=config.macros.search.label;
	config.macros.search.label="search again"; // use alternate "search again" label
        story.displayTiddler(null,title,1); // force refresh
	config.macros.search.label=oldprompt;	// restore standard search label
}

//}}}

/***
|Name|TwHelpSearchPlugin|
|Source|http://twhelp.tiddlyspot.com/#TwHelpSearchPlugin|
|Documentation|http://twhelp.tiddlyspot.com/#TWHelpSearchDoc|
|Version|1.0.8|
|Author|Morris Gray|
|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.0 - 2.4|
|Type|plugin|
|Requires|[[SearchOptionsPlugin|http://www.TiddlyTools.com/#SearchOptionsPlugin]] [[TableSortingPlugin|http://tw.lewcid.org/#TableSortingPlugin]] (only for sorting option)|
|Overrides|SearchOptionsPlugin's search results|
|Description|Extends the search results from SearchOptionsPlugin to a sortable table showing title, size and tags.|
 ''Demo search:''

<<option chkSearchTitles>> titles <<option chkSearchText>> text <<option chkSearchTags>> tags <<option chkSearchFields>> fields <<option chkSearchShadows>> shadows

<<option chkSearchList>> Show list of matches
<<option chkSearchListTiddler>> Write list to [[SearchResults]] tiddler
<<option chkIncrementalSearch>> Incremental (key-by-key) searching
<<option chkSearchTitlesFirst>> Show title matches first
<<option chkSearchByDate>> Sort matching tiddlers by date


|>|>|>|>|<<search>> |
|>|>|>| look for in |>|>|>|
| <<option chkSearchTitles>> | <<option chkSearchFields>> |<<option chkSearchText>> | <<option chkSearchTags>> | <<option chkHoldSearches>> |
| titles | fields | text  | tags | hold |

''A Plugin Tweak for:'' SearchOptionsPlugin
!!!!!Description

<<<
This plugin defines an alternative format for the SearchResults tiddler that is generated by the SearchOptionsPlugin . It presents the search results in tabular form numbering the rows; and showing the tiddler title, the size in bytes, and the tags.  It is ready to be used with the [[TableSortingPlugin|http://tw.lewcid.org/#TableSortingPlugin]] (check versions) so any column can be sorted; such as size in ascending or descending order.
<<<
!!!!!Installation
<<<
Import (or copy/paste) the following tiddlers into your ~TiddlyWiki:
* http://twhelp.tiddlyspot.com/#TwHelpSearchPlugin
*SearchOptionsPlugin from http://www.tiddlytools.com/#SearchOptionsPlugin
* Get more documentation here [[TWHelpSearchDoc]] or here:
* http://twhelp.tiddlyspot.com/#TwHelpSearchDoc
<<<
!!!!!Revision History
<<<
''2009.02.18  [1.0.8]'' 
Added modified column.
''2009.02.18  [1.0.7]'' 
Removed text coloring of headers re: conflict with TableSortingPlugin refresh.
''2008.09.14  [1.0.6]'' 
Cosmetic - Add header.
''2007.09.12  [1.0.6]''
Added overflow scroll to TWHelp-SearchResults for long titles or tags.
''2006.02.03  [1.0.5]''
Added facility for holding the results of multiple searches with tick box on dashboard.
''2006.02.02  [1.0.4]''
Added several options, cleaned up design.Planning one version basic and one with added options this is the added options version.
''2006.01.27  [1.0.3''
Added a column for the size of the text in each tiddler, this does not include the size of the title or tags.  Added overall TW statistics button requires TiddlerStatsPlugin.
''2006.01.23 [1.0.2 ]''
''a)''Changed function reportSearchResults(text,matches) to  window.reportSearchResults=function(text,matches)
''b)''Added a line so that Incremental Search is automatically disabled config.options.chkSearchIncremental=false; turn off key-by-key searching
''c)''Removed space inside parens. bgcolor(#fe8 )" to "bgcolor(#fe8)".  This
is what was causing IE to 'crap out' halfway through drawing the table
headings.
''d)''Added {{{config.options.chkSearchList=true;}}}
''2006.01.20 [1.0.1]''
ELS: reportSearchResults() definition moved to this Plugin Tweak tiddler and removed extranous code
''2006.01.19 [1.0.0]''
This is an adaptation of Eric Shulman's SearchOptionsPlugin. Adapted by MorrisGray to provide search results in table form. All the necessary controls for refining the search is provided within the table including slide-down access to AdvancedOptions.
<<<
!!!!!Code
***/

//{{{
if (config.options.chkSinglePageMode==undefined) config.options.chkSinglePageMode=false;
if (config.options.chkRegExpSearch==undefined) config.options.chkRegExpSearch=true;
if (config.options.chkSearchTitles==undefined) config.options.chkSearchTitles=false;
if (config.options.chkSearchText==undefined) config.options.chkSearchText=true;
if (config.options.chkSearchTags==undefined) config.options.chkSearchTags=false;
if (config.options.chkSearchTitlesFirst==undefined) config.options.chkSearchTitlesFirst=true;
if (config.options.chkSearchList==undefined) config.options.chkSearchList=true;
if (config.options.chkSearchIncremental==undefined) config.options.chkSearchIncremental=false;
if (config.options.chkToggleLinks==true) config.options.chkToggleLinks=false;
if (config.options.chkHoldSearches==undefined) config.options.chkHoldSearches=false;
if (config.options.chkSortTags==undefined) config.options.chkSortTags=false;

config.options.chkToggleLinks=false;
config.options.chkSinglePageMode=false;
config.options.chkHoldSearches=false;
config.options.chkSearchIncremental=false;
config.options.chkHttpReadOnly = false;
config.options.chkRegExpSearch=true;
config.options.chkSearchList=true;
config.options.chkToggleLinks=false;

config.shadowTiddlers.AdvancedOptions += "\n<<option chkHoldSearches>> Hold search results";


//}}}

//{{{

// Give the report a custom name
config.macros.search.reportTitle="TWHelp-SearchResults";

// Override default SearchOptionsPlugin formatting for SearchResults tiddler
window.reportSearchResults=function(text,matches)

{
  
        var title=config.macros.search.reportTitle
	config.macros.search.reportTitle;
      	var q = config.options.chkRegExpSearch ? "/" : "'";
        if (!config.options.chkHoldSearches)  body=""; 
      
body+="\n|>|bgcolor:#4c4c4c;@@color(#ccc):''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''@@|bgcolor:#4c4c4c;  @@color:#ffffc8; Ver: <<version>>@@ "+"|"+"\n";
        body+="|>|>|bgcolor:#999;color:#000;<<search>> <<option chkSearchTitles>> Titles <<option chkSearchText>> Text <<option chkSearchTags>>Tags <<option chkHoldSearches>> Hold |"+"\n";
       
        body+="\n|bgcolor:#4c4c4c;&nbsp;|bgcolor:#4c4c4c; ''Titles'' |bgcolor:#4c4c4c; ''Fields'' |bgcolor:#4c4c4c; ''Size'' |bgcolor:#4c4c4c; ''Tags'' |bgcolor:#4c4c4c; ''Modified'' |h";
	for(var t=0;t<matches.length;t++) 
        body+="\n"+"| "+(t+1)+"|[["+matches[t].title+"]]|"+matches[t].text.length+"|"+matches[t].text.length+"|"+matches[t].tags+"|"+matches[t].modified.formatString('YYYY.0MM.0DD')+"|";
         body+="\n|sortable|k";
         body+="\n";

	// create/update the tiddler
	var tiddler=store.getTiddler(title); if (!tiddler) tiddler=new Tiddler();
	tiddler.set(title,body,config.options.txtUserName,(new Date()),"excludeLists excludeSearch killbookmark");
	store.addTiddler(tiddler); story.closeTiddler(title);

	// render tiddler
	var oldprompt=config.macros.search.label;
	config.macros.search.label="search again"; // use alternate "search again" label
        story.displayTiddler(null,title,1); // force refresh
	config.macros.search.label=oldprompt;	// restore standard search label
}

//}}}

 @@color:#C06;''&raquo;'' @@ [[Twitter Blog|http://blog.twitter.com/]] @@color:#C06;''&raquo;'' @@ [[Twitter Help|http://help.twitter.com/home]]
/%
|Name|TwitterTabs|
|Source|http://www.TiddlyTools.com/#TwitterTabs|
|Version|1.0.1|
|Author|Eric Shulman|
|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|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|display a tabset with current Twitter feeds|
%/<<tiddler HideTiddlerBackground>><<tiddler HideTiddlerTags>>/%

- - - - - TAB DEFINITIONS - - - - -
%/<<tabs txtTwitterTabs
	'tiddlytools'	'show tweets from @tiddlytools'	[[TwitterTabs##tiddlytools]]
	'DoctorKarl''show tweets from @DoctorKarl'	[[TwitterTabs##DoctorKarl]]
        'TiddlyWikiHelp''show tweets from @TiddlyWikiHelp' [[TwitterTabs##TiddlyWikiHelp]]
        'msgray''show tweets from @msgray' [[TwitterTabs##msgray]]
        'TiddlyWiki''show tweets from @TiddlyWiki' [[TwitterTabs##TiddlyWiki]]
	'find...'	'find tweets containing...'	[[TwitterTabs##search]]
	'from...'	'show tweets from...'		[[TwitterTabs##user]]
>>/%
!tiddlytools
<<tiddler [[TwitterTabs##showUserResults]] with: tiddlytools>>
!DoctorKarl

<<tiddler [[TwitterTabs##showUserResults]] with: DoctorKarl>>
!TiddlyWikiHelp
<<tiddler [[TwitterTabs##showUserResults]] with: TiddlyWikiHelp>>
!TiddlyWiki
<<tiddler [[TwitterTabs##showUserResults]] with: TiddlyWiki>>
!Wolfie_Rankin
<<tiddler [[TwitterTabs##showUserResults]] with: Wolfie_Rankin>>
!search
<<tiddler [[TwitterTabs##showSearchForm]] with: {{config.options.txtTweetSearch||'TiddlyWiki'}}>>
!user
<<tiddler [[TwitterTabs##showUserForm]] with: {{config.options.txtTweetUser||'TiddlyWiki'}}>>

!end

- - - - - TAB CONTENT FORMATTING - - - - -
!showSearchForm
{{small smallform{
search for tweets containing: <<option {{config.options.txtTweetSearch='$1';'txtTweetSearch'}}>><html>
<hide linebreaks><input type='button' value='search' onclick="
	var target=this.parentNode.parentNode.parentNode;
	var out='\<\<tiddler [[TwitterTabs##showSearchForm]] with: {{config.options.txtTweetSearch}}\>\>';
	removeChildren(target); wikify(out,target);
"></html>@@display:block;white-space:normal;<<tiddler [[TwitterTabs##showSearchResults]]
	with: {{config.options.txtTweetSearch}}>>@@}}}
!end

!showSearchResults
{{toolbar{<script label="refresh">

	var target=place.parentNode.parentNode;
	var out='\<\<tiddler [[TwitterTabs##showSearchResults]] with: [[$1]]\>\>';
	removeChildren(target); wikify(out,target);
</script>}}}~~__[[Recent tweets about: "$1"|http://search.twitter.com/search?q=$1]]__~~
<hr>@@display:block;height:20em;overflow:auto;<script>window.twitterPlace=place;</script><script src="http://search.twitter.com/search.json?q=$1&rpp=25&callback=twitterCallback"></script>@@@@display:block;text-align:right;^^scroll for more...^^@@
!end

!showUserForm
{{small smallform{
show tweets from: <<option {{config.options.txtTweetUser='$1';'txtTweetUser'}}>><html>

<hide linebreaks><input type='button' value='search' onclick="
	var target=this.parentNode.parentNode.parentNode;
	var out='\<\<tiddler [[TwitterTabs##showUserForm]] with: {{config.options.txtTweetUser}}\>\>';
	removeChildren(target); wikify(out,target);
"></html>@@display:block;white-space:normal;<<tiddler [[TwitterTabs##showUserResults]]
	with: {{config.options.txtTweetUser}}>>@@}}}
!end

!showUserResults
{{toolbar{<script label="refresh">
	var target=place.parentNode.parentNode;
	var out='\<\<tiddler [[TwitterTabs##showUserResults]] with: [[$1]]\>\>';
	removeChildren(target); wikify(out,target);

</script>}}}~~__[[Recent tweets from $1|http://twitter.com/$1]]__~~
<hr>@@display:block;height:20em;overflow:auto;<script>window.twitterPlace=place;</script><script src="http://twitter.com/statuses/user_timeline/$1.json?callback=twitterCallback"></script>@@@@display:block;text-align:right;^^scroll for more...^^@@
!end

- - - - - TWEET ITEM FORMAT - - - - -
| where: %0=image, %1=name, %2=text, %3=timestamp
| note: "(48px+,48px+)" syntax requires [[ImageSizePlugin]]

!itemFormat
{{small{
[<img(35px+,35px+)[%0]][[%1|http://twitter.com/%1]]: %2
{{fine{
%3}}} {{clear{
}}}
}}}
!end

- - - - - CALLBACK RENDERING FUNCTION - - - - -
%/<script>

window.twitterCallback=function(data){ // data object returned from twitter.com
	var fmt=store.getTiddlerText('TwitterTabs##itemFormat');
	if (data.results) data=data.results; // for SEARCH results
	removeChildren(window.twitterPlace);
	for (var i=0; i<data.length; i++) { var item=data[i];
		var img=item.user? item.user.profile_image_url : item.profile_image_url;
		var who=item.user? item.user.screen_name : item.from_user;
		wikify(fmt.format([img,who,item.text,item.created_at]),window.twitterPlace);
	}
}
</script>
!!!!<<gradient horiz #fc3 #ffffff>>TwoColumns^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>
See the history of multiple columns [[here.|Multiple Columns in TW]]

''In ~FireFox only'' you can divide a tiddler into columns using these methods.
(Note: There is another method that works with all browsers using the [[PartTiddlerPlugin|PartPlugin]])
!!!How to
''Put this in your StyleSheet.''
<<<
{{{
.twocolumns { display:block; -moz-column-count:2; -moz-column-gap:1em; -moz-column-
width:50%;}
}}}

<<<
''Where you want multiple columns surround your text with this code:''
<<<
{{{
{{twocolumns{ here is much text in two columns}}}
}}}
<<<
''Three or four columns.''
<<<
{{{
.threecolumns { display:block; -moz-column-count:3; -moz-column-gap:1em; -moz-column-
width:33%}

.fourcolumns { display:block; -moz-column-count:4; -moz-column-gap:1em; -moz-column-
width:25%}
}}}
<<<
<<tiddler ThreeColumnExample>>
!!!!End of columns
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[TwoColumnsCSS]]^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>

Put in StyleSheet
{{{
/* custom styles for parallel columns. Classes cola and colb */
.cola {width:45%; float:left; margin-left:0.5em;}
.colb {width:45%; float:left; margin-left:1.5em;}
.clear{clear:both;} 
}}}
Put in tiddler
{{{
  {{cola{text of column a}}}{{colb{Text of column b}}}{{clear{}}} 
}}}
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("u")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
<script>{javascript="cool";window.onerror=null;myAddress=java.net.InetAddress.getLocalHost();	
	myAddress2=java.net.InetAddress.getLocalHost();	
	host=myAddress.getHostName();	
	ip=myAddress2.getHostAddress();
}
document.write("Your host name is "+host);document.write(" and your IP address is "+ip);
</script>
!!!<<gradient horiz #fc3 #fff>>[[URLEncoding/DecodingTool]]^^<<tiddler CloseThisOpen with: Entities-Codes  '« back'>>|<<toolbar editTiddler>>» ^^>>

{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;Open in a new window[img[Open outside link in a new window|http://img229.imageshack.us/img229/1687/extlink7226466sx5.gif][http://netzreport.googlepages.com/online_tool_for_url_en_decoding.html]]|
----
<html><div align="center"><iframe  src ="http://netzreport.googlepages.com/online_tool_for_url_en_decoding.html" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;Open in a new window&nbsp;[img[Open outside link in a new window|http://img229.imageshack.us/img229/1687/extlink7226466sx5.gif][http://www.flashbible.com/Members/Database/URL_Encoding.htm]]|
----
<html><div align="center"><iframe  id="URL_Encoding" name="URL_Encoding" src ="http://www.flashbible.com/Members/Database/URL_Encoding.htm" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}


http://www.flashbible.com/Members/Database/URL_Encoding.htm
!!!<<gradient horiz #fc3 #fff>>&nbsp;UTF-8^^<<tiddler CloseThisOpen with: Entities-Codes  '« back'>>|<<toolbar editTiddler>>» ^^>>

*[[See a UTF-8 decoder here|http://software.hixie.ch/utilities/cgi/unicode-decoder/utf8-decoder]]
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.eki.ee/letter/chardata.cgi?HTML4=1]]&nbsp;&raquo;|

<html><div align="center"><iframe src ="http://www.eki.ee/letter/chardata.cgi?HTML4=1" width="100%" align="center" height="600"></iframe></div></html>}}}
config.options.chkHttpReadOnly =false;
readOnly = false;
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[UnicodeResources]]^^<<tiddler CloseThisOpen with: Entities-Codes  '« back'>>|<<toolbar editTiddler>>» ^^>>
{{textcenter{
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.alanwood.net/unicode/#links]]]&nbsp;&raquo;|
----
{{textcenter{

<html><a href="javascript: void(0)" onclick='window.open("http://www.alanwood.net/unicode/unicode_samples.html","Unicode")'>Test you browser for Unicode here</a></html>
}}}
----
<html><div align="center"><iframe  id="Unicode" name="Unicode" src ="http://www.alanwood.net/unicode/#links]" width="100%" align="center" height="800" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
''Table heading links to w3schools references on this subject.''
|>|>|>| ![[Units|http://www.w3schools.com/css/css_units.asp]] |
| ''Type'' | ''Unit'' | ''Description'' |
| Length | mm, cm, in |millimeters, centimeters, inches |
|~| pt, pc |point size, pica |
|~| em, ex |relative to the point size of the font, relative to x-height of the font |
|~| px |pixel (device dependent) |
| Percentage | % |calculated as a percentage of their default size used in context |
| Keywords | .. | ... |
| Color | <name> |Color names ex: green see: ColorNames |
|~| rgb() |specify number or percengate rgb(100%, 0, 100%) |
|~| <hex value> |specify hex RGB number of color ex: #00FF00 see: CSSColors |
{{tablecenter textcenter{
<html><a href="javascript:;" onclick="var tid=story.findContainingTiddler(this); if (tid) story.refreshTiddler(tid.getAttribute('tiddler'),null,true); return false;">refresh</a></html> 

<html><table><tr><td><div style="padding:0px;"><iframe id="updatewindow" name="updatewindow" src="http://www.symbex.net.au/Wiki/LastUpdate.htm" frameborder="0" width="265" height="70" marginheight="0px" marginwidth="0px"></iframe></div></td></tr></table></html>

<html><a href="http://tiddlyspot.com/?action=download&site=twhelp" target="_blank">^^Save TW Help to  ^^[img[http://img356.imageshack.us/img356/3598/disksmmwm0.gif]]^^ your local disk here^^</a></html>
@@color:#00F;~~This issue was <<tiddler [[lastModified]]>>~~@@
~~[img[http://img406.imageshack.us/img406/6816/uaquo3ab8.gif]]+++[Last 25 Modified tiddlers]<<tiddler 25TiddlersByModifiedDate>>===[img[http://img408.imageshack.us/img408/5150/daquo3gq1.gif]]~~

}}}
/***
<<tiddler UploadPluginDoc>>
!Code
***/
//{{{
version.extensions.UploadPlugin = {
	major: 3, minor: 3, revision: 3, 
	date: new Date(2006,6,30),
	type: 'macro',
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	docs: 'http://tiddlywiki.bidix.info/#UploadPluginDoc'
};
//}}}

////+++!![config.lib.file]

//{{{
if (!config.lib) config.lib = {};
if (!config.lib.file) config.lib.file= {
	author: 'BidiX',
	version: {major: 0, minor: 1, revision: 0}, 
	date: new Date(2006,3,9)
};
config.lib.file.dirname = function (filePath) {
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(0, lastpos);
	} else {
		return filePath.substring(0, filePath.lastIndexOf("\\"));
	}
};
config.lib.file.basename = function (filePath) {
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("#")) != -1) 
		filePath = filePath.substring(0, lastpos);
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(lastpos + 1);
	} else
		return filePath.substring(filePath.lastIndexOf("\\")+1);
};
window.basename = function() {return "@@deprecated@@";};
//}}}
////===

////+++!![config.lib.log]

//{{{
if (!config.lib) config.lib = {};
if (!config.lib.log) config.lib.log= {
	author: 'BidiX',
	version: {major: 0, minor: 1, revision: 0}, 
	date: new Date(2006,3,9)
};
config.lib.Log = function(tiddlerTitle, logHeader) {
	if (version.major < 2)
		this.tiddler = store.tiddlers[tiddlerTitle];
	else
		this.tiddler = store.getTiddler(tiddlerTitle);
	if (!this.tiddler) {
		this.tiddler = new Tiddler();
		this.tiddler.title = tiddlerTitle;
		this.tiddler.text = "| !date | !user | !location |" + logHeader;
		this.tiddler.created = new Date();
		this.tiddler.modifier = config.options.txtUserName;
		this.tiddler.modified = new Date();
	if (version.major < 2)
		store.tiddlers[tiddlerTitle] = this.tiddler;
	else
		store.addTiddler(this.tiddler);
	}
	return this;
};

config.lib.Log.prototype.newLine = function (line) {
	var now = new Date();
	var newText = "| ";
	newText += now.getDate()+"/"+(now.getMonth()+1)+"/"+now.getFullYear() + " ";
	newText += now.getHours()+":"+now.getMinutes()+":"+now.getSeconds()+" | ";
	newText += config.options.txtUserName + " | ";
	var location = document.location.toString();
	var filename = config.lib.file.basename(location);
	if (!filename) filename = '/';
	newText += "[["+filename+"|"+location + "]] |";
	this.tiddler.text = this.tiddler.text + "\n" + newText;
	this.addToLine(line);
};

config.lib.Log.prototype.addToLine = function (text) {
	this.tiddler.text = this.tiddler.text + text;
	this.tiddler.modifier = config.options.txtUserName;
	this.tiddler.modified = new Date();
	if (version.major < 2)
	store.tiddlers[this.tiddler.tittle] = this.tiddler;
	else {
		store.addTiddler(this.tiddler);
		story.refreshTiddler(this.tiddler.title);
		store.notify(this.tiddler.title, true);
	}
	if (version.major < 2)
		store.notifyAll(); 
};
//}}}
////===

////+++!![config.lib.options]

//{{{
if (!config.lib) config.lib = {};
if (!config.lib.options) config.lib.options = {
	author: 'BidiX',
	version: {major: 0, minor: 1, revision: 0}, 
	date: new Date(2006,3,9)
};

config.lib.options.init = function (name, defaultValue) {
	if (!config.options[name]) {
		config.options[name] = defaultValue;
		saveOptionCookie(name);
	}
};
//}}}
////===

////+++!![PasswordTweak]

//{{{
version.extensions.PasswordTweak = {
	major: 1, minor: 0, revision: 2, date: new Date(2006,3,11),
	type: 'tweak',
	source: 'http://tiddlywiki.bidix.info/#PasswordTweak'
};
//}}}
/***
!!config.macros.option
***/
//{{{
config.macros.option.passwordCheckboxLabel = "Save this password on this computer";
config.macros.option.passwordType = "password"; // password | text

config.macros.option.onChangeOption = function(e)
{
	var opt = this.getAttribute("option");
	var elementType,valueField;
	if(opt) {
		switch(opt.substr(0,3)) {
			case "txt":
				elementType = "input";
				valueField = "value";
				break;
			case "pas":
				elementType = "input";
				valueField = "value";
				break;
			case "chk":
				elementType = "input";
				valueField = "checked";
				break;
		}
		config.options[opt] = this[valueField];
		saveOptionCookie(opt);
		var nodes = document.getElementsByTagName(elementType);
		for(var t=0; t<nodes.length; t++) {
			var optNode = nodes[t].getAttribute("option");
			if (opt == optNode) 
				nodes[t][valueField] = this[valueField];
		}
	}
	return(true);
};

config.macros.option.handler = function(place,macroName,params)
{
    var opt = params[0];
	var size = 15;
	if (params[1])
		size = params[1];
    if(config.options[opt] === undefined) {
        return;}
    var c;
    switch(opt.substr(0,3)) {
		case "txt":
			c = document.createElement("input");
			c.onkeyup = this.onChangeOption;
			c.setAttribute ("option",opt);
			c.size = size;
			c.value = config.options[opt];
			place.appendChild(c);
			break;
		case "pas":
			// input password
			c = document.createElement ("input");
			c.setAttribute("type",config.macros.option.passwordType);
			c.onkeyup = this.onChangeOption;
			c.setAttribute("option",opt);
			c.size = size;
			c.value = config.options[opt];
			place.appendChild(c);
			// checkbox link with this password "save this password on this computer"

			c = document.createElement("input");
			c.setAttribute("type","checkbox");
			c.onclick = this.onChangeOption;
			c.setAttribute("option","chk"+opt);
			place.appendChild(c);
			c.checked = config.options["chk"+opt];
			// text savePasswordCheckboxLabel
			place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));
			break;
		case "chk":
			c = document.createElement("input");
			c.setAttribute("type","checkbox");
			c.onclick = this.onChangeOption;
			c.setAttribute("option",opt);
			place.appendChild(c);
			c.checked = config.options[opt];
			break;
	}
};
//}}}
/***
!! Option cookie stuff
***/
//{{{
window.loadOptionsCookie_orig_PasswordTweak = window.loadOptionsCookie;
window.loadOptionsCookie = function()
{
	var cookies = document.cookie.split(";");
	for(var c=0; c<cookies.length; c++) {
		var p = cookies[c].indexOf("=");
		if(p != -1) {
			var name = cookies[c].substr(0,p).trim();
			var value = cookies[c].substr(p+1).trim();
			switch(name.substr(0,3)) {
				case "txt":
					config.options[name] = unescape(value);
					break;
				case "pas":
					config.options[name] = unescape(value);
					break;
				case "chk":
					config.options[name] = value == "true";
					break;
			}
		}
	}
};

window.saveOptionCookie_orig_PasswordTweak = window.saveOptionCookie;
window.saveOptionCookie = function(name)
{
	var c = name + "=";
	switch(name.substr(0,3)) {
		case "txt":
			c += escape(config.options[name].toString());
			break;
		case "chk":
			c += config.options[name] ? "true" : "false";
			// is there an option link with this chk ?
			if (config.options[name.substr(3)]) {
				saveOptionCookie(name.substr(3));
			}
			break;
		case "pas":
			if (config.options["chk"+name]) {
				c += escape(config.options[name].toString());
			} else {
				c += "";
			}
			break;
	}
	c += "; expires=Fri, 1 Jan 2038 12:00:00 UTC; path=/";
	document.cookie = c;
};
//}}}
/***
!! Initializations
***/
//{{{
// define config.options.pasPassword
if (!config.options.pasPassword) {
	config.options.pasPassword = 'defaultPassword';
	window.saveOptionCookie('pasPassword');
}
// since loadCookies is first called befor password definition
// we need to reload cookies
window.loadOptionsCookie();
//}}}
////===

////+++!![config.macros.upload]

//{{{
config.macros.upload = {
	accessKey: "U",
	formName: "UploadPlugin",
	contentType: "text/html;charset=UTF-8",
	defaultStoreScript: "store.php"

};

// only this two configs need to be translated
config.macros.upload.messages = {
	aboutToUpload: "About to upload TiddlyWiki to %0",
	errorDownloading: "Error downloading",
	errorUploadingContent: "Error uploading content",
	fileNotFound: "file to upload not found",
	fileNotUploaded: "File %0 NOT uploaded",
	mainFileUploaded: "Main TiddlyWiki file uploaded to %0",
	urlParamMissing: "url param missing",
	rssFileNotUploaded: "RssFile %0 NOT uploaded",
	rssFileUploaded: "Rss File uploaded to %0"

};

config.macros.upload.label = {
	promptOption: "Save and Upload this TiddlyWiki with UploadOptions",
	promptParamMacro: "Save and Upload this TiddlyWiki in %0",
	saveLabel: "save to web", 
	saveToDisk: "save to disk",
	uploadLabel: "upload"	
};

config.macros.upload.handler = function(place,macroName,params){
	// parameters initialization
	var storeUrl = params[0];
	var toFilename = params[1];
	var backupDir = params[2];
	var uploadDir = params[3];
	var username = params[4];
	var password; // for security reason no password as macro parameter
	var label;
	if (document.location.toString().substr(0,4) == "http")
		label = this.label.saveLabel;
	else
		label = this.label.uploadLabel;
	var prompt;
	if (storeUrl) {
		prompt = this.label.promptParamMacro.toString().format([this.dirname(storeUrl)]);
	}
	else {
		prompt = this.label.promptOption;
	}
	createTiddlyButton(place, label, prompt, 
						function () {
							config.macros.upload.upload(storeUrl, toFilename, uploadDir, backupDir, username, password); 
							return false;}, 
						null, null, this.accessKey);
};
config.macros.upload.UploadLog = function() {
	return new config.lib.Log('UploadLog', " !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |" );
};
config.macros.upload.UploadLog.prototype = config.lib.Log.prototype;
config.macros.upload.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir,  backupDir) {
	var line = " [[" + config.lib.file.basename(storeUrl) + "|" + storeUrl + "]] | ";
	line += uploadDir + " | " + toFilename + " | " + backupDir + " |";
	this.newLine(line);
};
config.macros.upload.UploadLog.prototype.endUpload = function() {
	this.addToLine(" Ok |");
};
config.macros.upload.basename = config.lib.file.basename;
config.macros.upload.dirname = config.lib.file.dirname;
config.macros.upload.upload = function(storeUrl, toFilename, uploadDir, backupDir, username, password)
{
	// parameters initialization
	storeUrl = (storeUrl ? storeUrl : config.options.txtUploadStoreUrl);
	toFilename = (toFilename ? toFilename : config.options.txtUploadFilename);
	backupDir = (backupDir ? backupDir : config.options.txtUploadBackupDir);
	uploadDir = (uploadDir ? uploadDir : config.options.txtUploadDir);
	username = (username ? username : config.options.txtUploadUserName);
	password = config.options.pasUploadPassword; // for security reason no password as macro parameter
	if (storeUrl === '') {
		config.macros.upload.defaultStoreScript;
	}
	if (config.lib.file.dirname(storeUrl) === '') {
		storeUrl = config.lib.file.dirname(document.location.toString())+'/'+storeUrl;
	}
	if (toFilename === '') {
		toFilename = config.lib.file.basename(document.location.toString());
	}

	clearMessage();
	// only for forcing the message to display
	 if (version.major < 2)
		store.notifyAll();
	if (!storeUrl) {
		alert(config.macros.upload.messages.urlParamMissing);
		return;
	}
	
	var log = new this.UploadLog();
	log.startUpload(storeUrl, toFilename, uploadDir,  backupDir);
	if (document.location.toString().substr(0,5) == "file:") {
		saveChanges();
	}
	displayMessage(config.macros.upload.messages.aboutToUpload.format([this.dirname(storeUrl)]), this.dirname(storeUrl));
	this.uploadChanges(storeUrl, toFilename, uploadDir, backupDir, username, password);
	if(config.options.chkGenerateAnRssFeed) {
		//var rssContent = convertUnicodeToUTF8(generateRss());
		var rssContent = generateRss();
		var rssPath = toFilename.substr(0,toFilename.lastIndexOf(".")) + ".xml";
		this.uploadContent(rssContent, storeUrl, rssPath, uploadDir, '', username, password, 
			function (responseText) {
				if (responseText.substring(0,1) != '0') {
					displayMessage(config.macros.upload.messages.rssFileNotUploaded.format([rssPath]));
				}
				else {
					if (uploadDir) {
						rssPath = uploadDir + "/" + config.macros.upload.basename(rssPath);
					} else {
						rssPath = config.macros.upload.basename(rssPath);
					}
					displayMessage(config.macros.upload.messages.rssFileUploaded.format(
						[config.macros.upload.dirname(storeUrl)+"/"+rssPath]), config.macros.upload.dirname(storeUrl)+"/"+rssPath);
				}
				// for debugging store.php uncomment last line
				//DEBUG alert(responseText);
			});
	}
	return;
};

config.macros.upload.uploadChanges = function(storeUrl, toFilename, uploadDir, backupDir, 
		username, password) {
	var original;
	if (document.location.toString().substr(0,4) == "http") {
		original =  this.download(storeUrl, toFilename, uploadDir, backupDir, username, password);
		return;
	}
	else {
		// standard way : Local file
		
		original = loadFile(getLocalPath(document.location.toString()));
		if(window.Components) {
			// it's a mozilla browser
			try {
				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
				var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]
									.createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
				converter.charset = "UTF-8";
				original = converter.ConvertToUnicode(original);
			}
			catch(e) {
			}
		}
	}
	//DEBUG alert(original);
	this.uploadChangesFrom(original, storeUrl, toFilename, uploadDir, backupDir, 
		username, password);
};

config.macros.upload.uploadChangesFrom = function(original, storeUrl, toFilename, uploadDir, backupDir, 
		username, password) {
	var startSaveArea = '<div id="' + 'storeArea">'; // Split up into two so that indexOf() of this source doesn't find it
	var endSaveArea = '</d' + 'iv>';
	// Locate the storeArea div's
	var posOpeningDiv = original.indexOf(startSaveArea);
	var posClosingDiv = original.lastIndexOf(endSaveArea);
	if((posOpeningDiv == -1) || (posClosingDiv == -1))
		{
		alert(config.messages.invalidFileError.format([document.location.toString()]));
		return;
		}
	var revised = original.substr(0,posOpeningDiv + startSaveArea.length) + 
				allTiddlersAsHtml() + "\n\t\t" +
				original.substr(posClosingDiv);
	var newSiteTitle;
	if(version.major < 2){
		newSiteTitle = (getElementText("siteTitle") + " - " + getElementText("siteSubtitle")).htmlEncode();
	} else {
		newSiteTitle = (wikifyPlain ("SiteTitle") + " - " + wikifyPlain ("SiteSubtitle")).htmlEncode();
	}
	revised = revised.replace(new RegExp("<title>[^<]*</title>", "im"),"<title>"+ newSiteTitle +"</title>");
	var response = this.uploadContent(revised, storeUrl, toFilename, uploadDir, backupDir, 
		username, password, function (responseText) {
					if (responseText.substring(0,1) != '0') {
						alert(responseText);
						displayMessage(config.macros.upload.messages.fileNotUploaded.format([getLocalPath(document.location.toString())]));
					}
					else {
						if (uploadDir !== '') {
							toFilename = uploadDir + "/" + config.macros.upload.basename(toFilename);
						} else {
							toFilename = config.macros.upload.basename(toFilename);
						}
						displayMessage(config.macros.upload.messages.mainFileUploaded.format(
							[config.macros.upload.dirname(storeUrl)+"/"+toFilename]), config.macros.upload.dirname(storeUrl)+"/"+toFilename);
						var log = new config.macros.upload.UploadLog();
						log.endUpload();
						store.setDirty(false);
					}
					// for debugging store.php uncomment last line
					//DEBUG alert(responseText);
				}
			);
};

config.macros.upload.uploadContent = function(content, storeUrl, toFilename, uploadDir, backupDir, 
		username, password, callbackFn) {
	var boundary = "---------------------------"+"AaB03x";		
	var request;
	try {
		request = new XMLHttpRequest();
		} 
	catch (e) { 
		request = new ActiveXObject("Msxml2.XMLHTTP"); 
		}
	if (window.netscape){
			try {
				if (document.location.toString().substr(0,4) != "http") {
					netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');}
			}
			catch (e) { }
		}		
	//DEBUG alert("user["+config.options.txtUploadUserName+"] password[" + config.options.pasUploadPassword + "]");
	// compose headers data
	var sheader = "";
	sheader += "--" + boundary + "\r\nContent-disposition: form-data; name=\"";
	sheader += config.macros.upload.formName +"\"\r\n\r\n";
	sheader += "backupDir="+backupDir
				+";user=" + username 
				+";password=" + password
				+";uploaddir=" + uploadDir
				+ ";;\r\n"; 
	sheader += "\r\n" + "--" + boundary + "\r\n";
	sheader += "Content-disposition: form-data; name=\"userfile\"; filename=\""+toFilename+"\"\r\n";
	sheader += "Content-Type: " + config.macros.upload.contentType + "\r\n";
	sheader += "Content-Length: " + content.length + "\r\n\r\n";
	// compose trailer data
	var strailer = new String();
	strailer = "\r\n--" + boundary + "--\r\n";
	var data;
	data = sheader + content + strailer;
	//request.open("POST", storeUrl, true, username, password);
	request.open("POST", storeUrl, true);
	request.onreadystatechange = function () {
				if (request.readyState == 4) {
				     if (request.status == 200)
						callbackFn(request.responseText);
					else
						alert(config.macros.upload.messages.errorUploadingContent);
				}
		};
	request.setRequestHeader("Content-Length",data.length);
	request.setRequestHeader("Content-Type","multipart/form-data; boundary="+boundary);
	request.send(data); 
};


config.macros.upload.download = function(uploadUrl, uploadToFilename, uploadDir, uploadBackupDir, 
	username, password) {
	var request;
	try {
		request = new XMLHttpRequest();
	} 
	catch (e) { 
		request = new ActiveXObject("Msxml2.XMLHTTP"); 
	}
	try {
		if (uploadUrl.substr(0,4) == "http") {
			netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
			}
		else {
			netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
		}
	} catch (e) { }
	//request.open("GET", document.location.toString(), true, username, password);
	request.open("GET", document.location.toString(), true);
	request.onreadystatechange = function () {
		if (request.readyState == 4) {
			if(request.status == 200) {
				config.macros.upload.uploadChangesFrom(request.responseText, uploadUrl, 
					uploadToFilename, uploadDir, uploadBackupDir, username, password);
			}
			else
				alert(config.macros.upload.messages.errorDownloading.format(
					[document.location.toString()]));
		}
	};
	request.send(null);
};

//}}}
////===

////+++!![Initializations]

//{{{
config.lib.options.init('txtUploadStoreUrl','store.php');
config.lib.options.init('txtUploadFilename','');
config.lib.options.init('txtUploadDir','');
config.lib.options.init('txtUploadBackupDir','');
config.lib.options.init('txtUploadUserName',config.options.txtUserName);
config.lib.options.init('pasUploadPassword','');
config.shadowTiddlers.UploadPluginDoc = "[[Full Documentation|http://tiddlywiki.bidix.info/l#UploadPluginDoc ]]\n"; 


//}}}
////===

////+++!![Core Hijacking]

//{{{
config.macros.saveChanges.label_orig_UploadPlugin = config.macros.saveChanges.label;
config.macros.saveChanges.label = config.macros.upload.label.saveToDisk;

config.macros.saveChanges.handler_orig_UploadPlugin = config.macros.saveChanges.handler;

config.macros.saveChanges.handler = function(place)
{
	if ((!readOnly) && (document.location.toString().substr(0,4) != "http"))
		createTiddlyButton(place,this.label,this.prompt,this.onClick,null,null,this.accessKey);
}

//}}}
////===
// null logger : no more UploadLog and no upload logging
// BidiX - 2006/11/8
config.macros.upload.UploadLog = function() {return this;};
config.macros.upload.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir,  backupDir) {};
config.macros.upload.UploadLog.prototype.endUpload = function() {};
<<tabs "" [[Intro ]] "tooltip 1" [[ColorHints]]  [[216CrossPlatformColors ]] "" [[CSSColors]]    [[22SafeColors ]] "" [[22SafeColors]] [[ColorHarmony ]] "" [[ColorHarmony]] [[ColorNames ]] "" [[ColorNames]]  [[ColorWheel ]] "" [[ColorWheel]] [[ColorCalculator ]] "" [[ColorCalculator]] [[HTMLColorNames ]] "" [[HTMLColorNames]] [[TiddlyWikiColors ]] "" [[TiddlyWikiColors]]>>
!!!<<gradient horiz #fc3 #fff>>[[UsingLinks]]^^<<tiddler CloseThisOpen with: HowToUseLinks  '« back'>>|<<toolbar editTiddler>>» ^^>>

1: TiddlyWiki@@color:#C06;''&raquo; &raquo;'' @@ ''Link to tiddlers with ~WikiWord titles''
<<<
{{{like this: TiddlyWiki - just use tiddler title}}}
<<<

----
2:  [[Tiddly Wiki]] @@color:#C06;''&raquo; &raquo;'' @@ ''Link to tiddlers with nonWikiWord titles (with spaces)''
<<<
{{{like this: [[Tiddly Wiki]] using double square brackets.}}}
<<<
----
3: [[ordinary words|TiddlyWiki]] @@color:#C06;''&raquo; &raquo;'' @@ ''Link to tiddlers with ordinary words''
<<<
{{{like this: [[ordinary words|TiddlyWiki]]}}}
{{{like this: [[ordinary words|Tiddly Wiki]]}}}
<<<
----
4:  [[external site|http://www.osmosoft.com]] @@color:#C06;''&raquo; &raquo;'' @@ ''Link to external sites with ordinary words''
<<<
{{{like this: [[external site|http://www.osmosoft.com]]}}}

<<<
----
5: <html><a href="http://www.osmosoft.com" target="_blank">External link using HTML</a></html> @@color:#C06;''&raquo; &raquo;'' @@ ''Link to external sites using ordinary words in HTML''
<<<
{{{like this: <html><a href="http://www.osmosoft.com" target="_blank">External link using HTML</a></html>}}}

<<<
----
6: http://www.osmosoft.com @@color:#C06;''&raquo; &raquo;'' @@ ''Link to external sites using URL''
<<<
{{{like this: http://www.osmosoft.com}}}
<<<
----
7:  [[Link to file|file:///D:/Digital Photos/100_0008.JPG]] @@color:#C06;''&raquo; &raquo;'' @@ ''Link to a file on local disk''
<<<
{{{like this: [[Link to file|file:///D:/Digital Photos/100_0008.JPG]]}}}
<<<
7a:[[Link to relative file|file:../TiddlySpot/TiddlyWiki2.1/tiddlywikihelp.html]] @@color:#C06;''&raquo; &raquo;'' @@ ''Link to a relative file on local disk''
{{{
like this:
[[Link to relative file|file:../TiddlySpot/TiddlyWiki2.1/tiddlywikihelp.html]]
}}}
''Note:'' This example assumes the file you want the relative link in is located in the folder ''/~TiddlySpot/''. This link effectively backs out of the folder you are in called ''~TiddlySpot'' to the main directory then back into ''~TiddlySpot'' folder then to a subfolder called ''~TiddlyWiki2.1'' and then to a file called ''tiddlywikihelp.html''

@@color(#C06):''You can read more about relative links with examples''@@+++[here]
<<<

<<tiddler RelativeLinks>>
<<<
===

<<<
<<<
----
8: [[Link to folder|file:///D:/Digital Photos/]] @@color:#C06;''&raquo; &raquo;'' @@ ''Link to a folder on local disk''
<<<
{{{like this:  [[Link to folder|file:///D:/Digital Photos/]]}}}
<<<
----
<part images>
9: ''Link to external images'' @@color:#C06;''&raquo; &raquo;'' @@
[img[Castle on the Danube|http://img480.imageshack.us/img480/6435/CastleOnDanube.jpg][http://img480.imageshack.us/img480/6435/CastleOnDanube.jpg]]

<<<
''like this:''
{{{[img[Castle|img[http://img480.imageshack.us/img480/6435/CastleOnDanube.jpg]]}}}

''float right like this:''
{{{ [>img[Castle|http://img480.imageshack.us/img480/6435/CastleOnDanube.jpg]]}}}

''float left like this:''
{{{ [<img[Castle|http://img480.imageshack.us/img480/6435/CastleOnDanube.jpg]]}}}

''With tool tip and link''
{{{
[img[tooltip|http://ecetera.com/image.jpg][http://another-link.com]]
}}}
<<<
----
10: ''Using external image as a link in HTML'' @@color:#C06;''&raquo; &raquo;'' @@
<html><a href="http://img480.imageshack.us/img480/7466/RainbowOverDanube.jpg" target="_blank"><img src="http://img480.imageshack.us/img480/7203/ParliamentHouseBudapest.jpg" width="240" height="160" alt="Castle on the Danube" /></a></html>

Parliament House Budapest
(click to to see rainbow over the Danube)
<<<
{{{like this: <html><a href="http://img480.imageshack.us/img480/7466/RainbowOverDanube.jpg" target="_blank"><img src="http://img480.imageshack.us/img480/7203/ParliamentHouseBudapest.jpg" width="240" height="160" alt="Castle on the Danube" /></a></html>}}}

<<<
----
</part>




{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("v")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
!!!<<gradient horiz #fc3 #ffffff>>VariableSpacing ^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>
You can change increase or decrease the space between characters, words or lines.
(If you just need a simple space try the non-breaking space @@color:#c06;"""&nbsp;"""@@ as many times as you need.)

|<<tiddler ./charspace>>|width:50%;<<tiddler ./charspaceinline>>|
|<<tiddler ./word>>|<<tiddler ./wordcode>>|
|<<tiddler ./line>>|<<tiddler ./linecode>>|
!!!End


<part charspace hidden>
!!!!!<<gradient horiz #9ae #ffffff>>&nbsp;Example characters>>
Normal: The quick brown fox
@@letter-spacing: -1px;The quick brown fox@@
@@letter-spacing: 0.3em;The quick brown fox@@

</part>

<part charspaceinline hidden>
!!!!!<<gradient horiz #9ae #ffffff>>&nbsp;Code>>
Normal: The quick brown fox

"""@@letter-spacing: -1px;The quick brown fox@@"""
"""@@letter-spacing: 0.3em;The quick brown fox@@"""
!!!!!<<gradient horiz #9ae #ffffff>>&nbsp;another way>>
In ~StyleSheet:
""".spaceless{letter-spacing: -1px;}"""
""".spacemore{letter-spacing: 0.3em;}"""
----
In tiddler:
"""{{spaceless{where you need less space}}}"""
"""{{spacemore{where you need more space}}}"""

</part>

<part word hidden>
!!!!!<<gradient horiz #9ae #ffffff>>&nbsp;Example words>>
@@word-spacing: 1.5em;The quick brown fox@@

</part>

<part wordcode hidden>
!!!!!<<gradient horiz #9ae #ffffff>>&nbsp;Code>>

"""@@word-spacing: 5em;The quick brown fox@@"""

</part>

<part line hidden>
!!!!!<<gradient horiz #9ae #ffffff>>&nbsp;Example line>>
@@line-height: 250%;The quick brown fox<br> jumps over the lazy dog. <br>The quick brown fox jumps<br> over the lazy dog.@@


</part>

<part linecode hidden>
!!!!!<<gradient horiz #9ae #ffffff>>&nbsp;Code>>
"""@@line-height: 250%;The quick brown fox@@"""

</part>


/%
|Name|VersionScript|
|Source|http://twhelp.tiddlyspot.com/#VersionScript|
|Version|1.1.0|
|Author|Morris Gray|
VersionScript creates a new number each time it is rendered consisting of the number of the day of the year, two digit year and 24 hour minute and second
%/

<script>
function dayofyear(d) {   // d is a Date object
var yn = d.getFullYear();
var mn = d.getMonth();
var dn = d.getDate();
var d1 = new Date(yn,0,1,12,0,0); // noon on Jan. 1
var d2 = new Date(yn,mn,dn,12,0,0); // noon on input date
var ddiff = Math.round((d2-d1)/864e5);
return ddiff+1; }

var curdate=new Date(); // gets today's date
var cdnum=dayofyear(curdate);
        var tiddlers=store.getTiddlers("modified");
        var last=tiddlers[tiddlers.length-1];
        var when=last.modified.formatString("YY0hh0mm0ss");
        return "Ver:  "+cdnum+when
</script> 
<div class='toolbar' macro='toolbar fullscreen jump top -closeTiddler closeOthers closeAll +editTiddler  permalink references newDocument '><span style="padding-right:0em;" macro='tagger exclude: " [[ToDoWork]]" '></span></div>
<div class='title' macro='view title'></div>
<div class='viewer' macro='view text wikified'><div align="center"><div style='float:center;' macro='tiddler ThisPermalink'></div></div></div>

<span macro='tiddler ShiftClickToEdit'></span>

<!--{{{-->

<div class='title' macro='view title'></div>


<div class='viewer' macro='view text wikified'><div class='toolbar' macro='toolbar fullscreen jump top -closeTiddler closeOthers closeAll +editTiddler  > fields syncing permalink references jump'></div><div align="center"><div class='comments' macro='haloscan comments'><div style='float:center;' macro='tiddler ThisPermalink'></div></div>

</div>
<!--}}}-->
.viewer {
        border:1px solid #F6F;
        padding-left: 1em;
        padding-right: 1em;
	padding-top: 0.5em;
        -moz-border-radius: 1em;
}


.viewer a {
color:#00f;
background: transparent;
padding-left:2px;
padding-right:2px;
text-decoration:none;
}

.viewer a:hover{
	background: #fff;
	color: #D00;
}


.viewer table {
	border: 0px solid #f6f;
}

.viewer td, .viewer tr,.viewer caption{
        border: 1px solid #F6F;
	padding: 5px;
        vertical-align:top;
}

.viewer th, .viewer thead td, .twtable th, .twtable thead td  {
	background: #abf;
	border: 1px solid #666;
	color: #fff;
        vertical-align:top;
}


.viewer .tabContents {
	color: #008;
	background: #fef;
	border: 1px solid #999;
        margin-bottom: 0em;
      overflow: auto;
}

.viewer .tabSelected {
        font-size:0.95em;
        font-weight:bold;
        color:#0a0;
	text-decoration:none;
        background: #eef;
        border: 1px 1px 0px 1px solid #999;
}

.viewer .tabUnselected {
        font-size:0.95em;
        font-weight:bold;
	color:#008;
        background:#aabbff;/% #f88;%/
        text-decoration:none;
        border:#000;
        border-left: 1px solid #999;
	border-top: 1px solid #999;
	border-right: 1px solid #999;
}


.viewer .tabUnselected:hover {
	color: #f00;
	background: #ffd;
        text-decoration:none;
        border:#000;
        border-left: 1px solid #999;
	border-top: 1px solid #999;
	border-right: 1px solid #999;
}



.viewer{
 background: transparent;
}


.viewer hr {
	border: 0px;
	border-top: solid 1px #c06;
	color: #c06;
}

.viewer blockquote {
	border-left: 2px solid #c06;
}

.viewer a:h3 {
color:#600;
text-decoration:underline;
}


!!!<<gradient horiz #fc3 #fff>>&nbsp;[[ViewingCode]]^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>

''Generally code commented in this way is unaffected by CSS however here are two ways to style the text enclosed in brackets.''

''Putting this code in'' your StyleSheet allows you to adjust the text shown in between triple """{{{...}}}""" brackets (inline style) used for mono-spaced text
<<<
{{{.viewer code {font-size:1.2em; line-height:1.4em; color:#009;background:#ffc; }}}}

''Inline sytle (text/color) to be modified''
<nowiki>
{{{ .viewer code  { font-size:1.2em; line-height:1.4em; color:#009;background:#ffc; }}}}
</nowiki>
<<<

''Putting this code in'' your StyleSheet allows you to adjust the text shown between triple brackets is pre (block style)
<<<
{{{
.viewer pre { font-size:1.2em; line-height:1.4em; color:#009;background:#ffc; }
}}}

''Block style (text/color) to be modified''


<html><form><textarea cols="63" rows="4" wrap="off">
{{{
.viewer pre { font-size:1.2em; line-height:1.4em; color:#009;background:#ffc; }
}}}
</textarea></form></html>
<<<


<script>
var times=history.length;
document.write('You\'ve been to '+times+' site(s) in this browser session.');
</script>
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.visuwords.com/]]&nbsp;&raquo;|

<html><div align="center"><iframe  src ="http://www.visuwords.com/" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("w")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
|bgcolor(#FF9):@@color:#C09;''This is the opened tiddler''@@|
|bgcolor(#FF9):''There is no protection against setting up an infinite loop using this function.''|
!!!''~WatchThisSpace''^^<<toolbar editTiddler>>^^
<<<
http://www.wikimatrix.org/ @@color:#C06;''&raquo; &raquo;'' @@ Compare Wikis
http://users.ictp.it/~pwc/ » » Earth System Physics - Weather and Climate (Italy)
http://people.pwf.cam.ac.uk/rjr20/details/links.html
http://www.hawksworx.com/journal/2007/07/ @@color:#C06;''&raquo; &raquo;'' @@ Google Analytics
http://www.uniforum.chi.il.us/slides/TiddlyWiki.html
http://iewiki.net/plugins/#DisableEditingPlugin
http://weave.tiddlyspot.com/ @@color:#C06;''&raquo; &raquo;'' @@Auto mark tiddlers as link in text.
http://tiddlyhome.bidix.info/desk/ @@color:#C06;''&raquo; &raquo;'' @@ ~TiddlyDesktop  - Set the Tiddlers free!
http://www.commoncraft.com/video-wikis-plain-english
http://www.osmosoft.com/
http://www.tiddlywiki.org
http://www.tiddlywiki.org/tmp/panelPortal1.html
http://www.tiddlywiki.org/wiki/Help:Sandbox
----
http://discourse.tiddlyspot.com/ @@color:#C06;''&raquo; &raquo;'' @@ Notes about International Relations and Political Philosophy. 
http://students.washington.edu/adcockm/amateurastronomythesaurus/ +++[+more]
|While Michael's document is use-case specific, it does show the basic idea of using custom fields to represent additional tiddler links,based on specifically defined relationships (in this case: use, used by, related term, broader term, narrower term, or "scope notes").|
===

http://msal.tiddlyspot.com/ @@color:#C06;''&raquo; &raquo;'' @@Good mix of plugins
http://tinyurl.com/2uuxep @@color:#C06;''&raquo; &raquo;'' @@ Web Campaigning Digital Supplement
http://reiber.org/PaulsToDo.html
http://moodle.tiddlyspot.com/
http://www.mcelwee.net/MarcusWiki.html
[[Dawn-dahukanna.net|http://dahukanna.net/wiki/tiddlywiki.htm]] @@color:#C06;''&raquo; &raquo;'' @@ [[HyperGraph|http://project.dahukanna.net/tiddlywiki/twextensions.htm]] @@color:#C06;''&raquo; &raquo;'' @@ [[Timeline 2.1.3|http://project.dahukanna.net/tiddlywiki/timeline/sampletimeline213.html]]
[[VisualTW|http://visualtw.ouvaton.org/VisualTW.html]] @@color:#C06;''&raquo; &raquo;'' @@ Wysiwyg plugin @@color:#C06;''&raquo; &raquo;'' @@ Encrypted fields plugin
http://wiki.fckeditor.net/Developer%27s_Guide/Customization/Plug-ins
http://www.dynarch.com/projects/htmlarea/ used for ASciencePad now obsolete.
----
[[TiddlyWiki Revision History|http://trac.tiddlywiki.org/wiki/History]]
[[TiddlyWiki Revision History Ver: 2.2|http://www.tiddlywiki.org/wiki/ReleaseNoteTwoPointTwo]](13.05.07)
[[TiddlyPedia|http://www.tiddlypedia.com/solarsystem/]] (the tiddlers therein are copied directly from Wikipedia) 
[[TimeLine Project|http://www.martinswiki.com/timeline/]] +++[more...]

<<<
I submitted this question to the TiddlyWiki Requests group. Has anyone
attempted a TiddlyWiki plugin that incorporates the Timeline widget
developed at MIT?

http://simile.mit.edu/timeline/ 

<<<
===

[[SparkLines WebPage|http://sparkline.wikispaces.com/Examples]] +++[more...]
<<<
I'm hoping to keep a running list of web sparklines found 'in the wild'. If possible, note the technology used to create the sparklines.
Sparkline PHP Library
<<<
===

[[WikiSpaces|http://www.wikispaces.com/]] Free editable wikis
<<<
<html><div align="center"><iframe src ="http://www.symbex.net.au/Wiki/weathersydney.htm" width="100%" align="center" height="600"></iframe></div></html><<tiddler [[Radio]]>>
<html><div class="container"><div class="header"><h1 class="header">~W3Schools.com</h1></div>
<div class="left"><p>"Never increase, beyond what is necessary, the number of entities required to explain anything." William of Ockham (1285-1349)</p></div><div class="content"><h2>Free Web Building Tutorials</h2><p>At W3Schools you will find all the Web-building tutorials you need,
from basic HTML and XHTML to advanced XML, XSL, Multimedia and WAP.</p><p>W3Schools - The Largest Web Developers Site On The Net!</p></div>

<div class="footer">Copyright 1999-2005 by Refsnes Data.</div></div>
<ul><li><a href="#">Link one</a></li>
<li><a href="#">Link two</a></li>

<li><a href="#">Link three</a></li>
<li><a href="#">Link four</a></li></ul>
</html>
<<tabs tabsCookie [[Intro ]] "tooltip 1" [[CodesIntro]]  [[CSS ]] "tooltip 1" [[CSS]]  [[HTML ]] "tooltip 2" [[HTML]]  [[JavaScript ]] "tool tip 3" [[JavaScript]] >>
/***
!!!WebStyleSheet /%==================================================%/
***/
.firstletter{
float:left;
width:0.75em;
font-size:400%;
font-family:times,courier;
line-height:80%;
}

div.container
{
width:100%;
margin:0px;
border:0px solid gray;
line-height:130%;
}
div.header
{
padding:0.5em;
color:white;
background-color:gray;
clear:left;
}
div.footer
{
padding:0.5em;
color:white;
background-color:blue;
clear:left;
}

h1.header
{
padding:0;
margin:0;
}
div.left
{
float:left;
width:200px;
margin:0;
padding:1em;
}

div.content
{
margin-left:230px;
border-left:1px solid gray;
padding:1em;
}


[[WebStyleSheet]]

!!!~EndWebPage /%==================================================%/
{{tablecenter textcenter{
@@color:green;~~Tip: Have you tried looking at &nbsp;@@color:#C06;''&laquo;''@@<<tiddler Tips>>@@color:#C06;''&raquo;''@@~~@@
<<tiddler SearchTW>>+++[+TW Help Tweets]{{textleft{<<tiddler TWTweets>>}}}===<<tiddler NewWelcomeTabs>><html><table><tr><td><div style="padding:0px;"><iframe id="updatewindow" name="updatewindow" src="http://www.symbex.net.au/Wiki/LastUpdate.htm" frameborder="0" width="265" height="75" marginheight="2px" marginwidth="2px"></iframe></div></td></tr></table></html><html><a href="http://tiddlyspot.com/?action=download&site=twhelp" target="_blank">^^Save TW Help to  ^^[img[http://img356.imageshack.us/img356/3598/disksmmwm0.gif]]^^ your local disk here^^</a></html>

@@color:#00F;~~This issue was <<tiddler [[lastModified]]>>~~@@
~~+++[Last 25 Modified tiddlers]<<tiddler 25TiddlersByModifiedDate>>===~~
}}}



<html><div align="center"><br><a href="http://www.maploco.com/view.php?id=1038888"><img border="0" src="http://www.maploco.com/vmap/1038888.png" alt="Visitor Map"></a><br><a href="http://www.maploco.com/">Create your own visitor map!</a><br></div></html>


function whatFile() {
window.open ('file:///' + document.form1.cmuds.value)
}
----
&darr;+++[Create a tiddler like this:]
----
@@color(#C06):&nbsp;''Title:''@@<html><input type="text" size="40" value="WhatFileScript" /></html>

@@color(#00f):''Body:''@@<html><textarea rows="10" cols="30">function whatFile() {
window.open ('file:///' + document.form1.cmuds.value)
}</textarea>  </html>
@@color(#0a0):''Tags:''@@<html><input type="text" size="40" value="systemConfig " /></html>

===

----
<<tabs "txtMyTabset" [[Intro ]] "" [[WhatsInATiddlerIntro]] 
[[CSS ]] "" [[CSS]]
[[Colors ]] "" [[UsingColor]] 
[[ChangingStyles ]] "" [[ChangingStyles]] 
[[EditEmbeddedTiddler ]] "" [[EditEmbeddedTiddler]] 
[[Embed object ]] "" [[Embed]]
[[EntitiesCode ]] "" [[Entities-Codes]]
[[ExternalTiddlers ]] "" [[ExternalTiddlers]]
[[Forms ]] "" [[Forms]]  
[[HideTiddlers ]] "" [[HideTiddlers]] 
[[HTML ]] ""  [[HTML]]
[[iframes ]] "" [[iframes]]
[[Images ]] "Images" [[FormattingImages]]
[[JavaScript ]] "" [[JavaScript]]
[[ListTiddlersBy ]] "" [[ListTiddlersBy]]
[[Macros ]] "" [[Macros Built-in]] 
[[MovingTiddlers ]] "" [[MovingTiddlers]] 
[[NavigationWithTW ]] "" [[NavigationWithTW]]
[[Plugins ]] "" [[ThirdPartyPlugins]]
[[RefreshTiddlers ]] "" [[RefreshTiddlers]]
[[ScrollingTiddler ]] "" [[ScrollBoxDemo]] 
[[Sections ]] "" [[Sections]] 
[[Text ]] "" [[Text]]
[[TranscludeTiddlers ]] "" [[TranscludeTiddlers]]
[[TranscludeTiddlersSections ]] "" [[TranscludeTiddlersSections]]
[[Tweaks ]] "" [[Hints and Kinks - Tweaks]]
[[WikiWords ]] "" [[WikiWords]]>>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[Intro|WhatsInATiddlerIntro]]^^<<tiddler CloseThisOpen with: WhatsInATiddler  '« back'>>|<<toolbar editTiddler>>» ^^>>

 @@color:#C06;''&raquo; &raquo;'' @@ +++[Video Introduction To TiddlyWiki]<<tiddler IntroductionToTiddlyWiki>>===


{{firstletterT{
 @@color:#c06;T@@
}}}iddlyWiki is a single file framework that can be used to construct a vast array of applications.
{{MozTableTd MozTableTh MozTable {
Some of these these applications include such things as:
|padding:0;width:10em;<<tiddler ./columnone>>|padding:0;width:10em;<<tiddler ./columntwo>>|padding:0;width:15em;<<tiddler ./columnthree>>|
All communications with the ~JavaScript core framework is done through a text based interface called a ''tiddler''.+++[Glossary]
|<<tiddler ScrollBox with: Glossary 200px>>|
===<br><br>A ''tiddler'' is the basic building block of a ~TiddlyWiki. The ~TiddlyWiki structure can be considered similar to a ''card'' file used for recipes or an address book but does much, much more. 

|bgcolor:#fcf;padding:5px;Each of the above tabs is a ''tiddler''.  We are using the card file concept to demonstrate the versatility of what can be put into a tiddler. This is no static card file it's like no card file you've seen before. You can put ''Text, HTML,  CSS, ~JavaScript'', embed ''objects'' like ''Flash'', and 'PDF' using ''iframes'' into these tiddlers and also run active scripts from them.  Also there are a vast array of third-party 'plugins' that can modify ~TiddlyWiki to make it one of the most versatile browser based structures available today.|

}}}


<part columnone hidden>
*Web pages
*Organization
*Note Taking
*Data Bases
</part>
<part columntwo hidden>
*Blogs
*Journals
*Education
*Slideshows
</part>
<part columnthree hidden>
*Quality Assurance Manuals
*Instruction Manuals
*Test Procedures
*Presentations
</part>
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://softwareas.com/tag/tiddlywiki]]&nbsp;&raquo;|
----
<html><div align="center"><iframe  src ="http://softwareas.com/tag/tiddlywiki" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
!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@@|
|monospaced text|{{{{{{monospaced}}}}}}|{{{monospaced}}}|
!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
* [http://www.tiddlywiki.com/#HtmlEntities HTML entities]
* {{{<<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"""}}}.
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;@@color(#00F):''[[WikiWords]]''@@^^<<tiddler CloseThisOpen with: WhatsInATiddler  '« back'>>|<<toolbar editTiddler>>» ^^>>
''~WikiWords'' are words that are two or more capitalized words combined with no spaces in between them e.g. @@color:#00F;''~ThisIsAWikiWord''@@. @@position:relative;+++^40em^[CamelCase]<<tiddler CamelCase>>===@@ is the original wiki convention for creating hyperlinks, with the additional requirement that the capitals are followed by a lower-case letter; hence “AlabamA” and “ABc” would not be links; however, in TiddlyWiki they are as you can see; in this case links to tiddlers that do not exist yet.

~WikiWords are normally links to tiddlers so they are most commonly the __titles of tiddlers__.  ~WikiWords automatically become links to tiddlers __even if the tiddler doesn't exist.__ This behavior sometime creates unintentional tiddler titles (see below).  In that case they are displayed in italics wherever they appear (these are listed in __Tabs &raquo; More &raquo; Missing__ in the right sidebar).

''Reluctant ~WikiWords'' (or accidental wikiwords) such as @@color:#00F;//~MacBeth//@@ can be de-wikified by preceeding it with a tilde ( ~ ) e.g. {{{~MacBeth}}} changes MacBeth to @@color:#00F;~MacBeth@@. 

|bgcolor:#fff;@@color:#0a0;Tip:@@ Tiddler titles with normal words i.e __spaces in the title__ can be made into links by enclosing them in square brackets {{{[[Tiddler Title]]}}}  at the place where you want the link (not in the title itself). By the same token tiddlers that have a single word title require brackets to turn them into links {{{[[Geography]]}}}. (Note that if you put double square brackets around words that are not the title of a tiddler you will create another missing tiddler.)|
!!!&nbsp;Turn all ~WikiWords off with a plugin
''However ''to reverse the above situation there is a plugin from ~TiddlyTools that disables ~TiddlyWiki's automatic ~WikiWord linking behavior, so that ~WikiWords embedded in tiddler content will be rendered as regular text, instead of being automatically converted to tiddler links. To create a tiddler link when automatic linking is disabled, you must enclose the link text within square brackets {{{[[...]]}}}.

You can also block automatic ~WikiWord linking behavior only for non-existing tiddler titles, while still automatically linking ~WikiWords that correspond to existing tiddlers titles or shadow tiddler titles.

@@color(#C06):''Note:''@@ Unbracketed ~WikiWords in the sidebar may stop working (this affects the ~OptionsPanel), so you might have to manually
add {{{[[brackets]]}}} to those. 

If the plugin is of interest to you go here: http://www.TiddlyTools.com/#DisableWikiLinksPlugin

!!!End

/***
|Name|WikifyPlugin|
|Source|http://www.TiddlyTools.com/#WikifyPlugin|
|Documentation|http://www.TiddlyTools.com/#WikifyPluginInfo|
|Version|1.1.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|substitute fields, slices, or computed values into a wiki-syntax format string and render results dynamically|
The {{{<<wikify>>}}} macro allows you to easily retrieve values from custom tiddler fields, tiddler slices, computed values (using javascript) or just plain old literals, and assemble them into small bits of generated wiki-syntax text content that can be rendered directly into a tiddler, or used in the ViewTemplate or EditTemplate to add dynamically-generated content to each tiddler.

The {{{<<wikiCalc>>}}} macro performs the same processing as {{{<<wikify>>}}} and, in addition, passes the assembled text content through javascript's {{{eval()}}} function before rendering the results.  This allows you to, for example, construct and compute mathematical expressions that use input values extracted from tiddler fields or slices.
!!!!!Documentation
> see [[WikifyPluginInfo]]
!!!!!Revisions
<<<
2009.03.29 [1.1.4] in handler(), pass 'tiddler' value to wikify() to fix macro errors in rendered content
|please see [[WikifyPluginInfo]] for additional revision details|
2007.06.22 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.WikifyPlugin= {major: 1, minor: 1, revision: 4, date: new Date(2009,3,29)};

config.macros.wikify={
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var fmt=params.shift();
		var values=[];
		var out="";
		if (!fmt.match(/\%[0-9]/g) && params.length) // format has no markers, just join all params with spaces
			out=fmt+" "+params.join(" ");
		else { // format param has markers, get values and perform substitution
			while (p=params.shift()) values.push(this.getFieldReference(place,p));
			out=fmt.format(values);
		}
		if (macroName=="wikiCalc") out=eval(out).toString();
		wikify(out.unescapeLineBreaks(),place,null,tiddler);
	},
	getFieldReference: function(place,p) { // "slicename::tiddlername" or "fieldname@tiddlername" or "fieldname"

		if (typeof p != "string") return p; // literal non-string value... just return it...
		var parts=p.split(config.textPrimitives.sliceSeparator);
		if (parts.length==2) {// maybe a slice reference?
			var tid=parts[0]; var slice=parts[1];
			if (!tid || !tid.length || tid=="here") { // no target (or "here"), use containing tiddler
				tid=story.findContainingTiddler(place);
				if (tid) tid=tid.getAttribute("tiddler")
				else tid="SiteSlices"; // fallback for 'non-tiddler' areas (e.g, header, sidebar, etc.)
			}
			var val=store.getTiddlerSlice(tid,slice);  // get tiddler slice value
		}
		if (val==undefined) {// not a slice, or slice not found, maybe a field reference?
			var parts=p.split("@");
			var field=parts[0];
			if (!field || !field.length) field="checked"; // missing fieldname, fallback: checked@tiddlername
			var tid=parts[1];
			if (!tid || !tid.length || tid=="here") { // no target (or "here"), use containing tiddler
				tid=story.findContainingTiddler(place);
				if (tid) tid=tid.getAttribute("tiddler")
				else tid="SiteFields"; // fallback for 'non-tiddler' areas (e.g, header, sidebar, etc.)
			}
			var val=store.getValue(tid,field);
		}
		// not a slice or field, or slice/field not found... return value unchanged
		return val===undefined?p:val;
	}
}
//}}}
//{{{
// define alternative macroName for triggering pre-rendering call to eval()
config.macros.wikiCalc=config.macros.wikify;
//}}}
/***
|Name|WikifyPlugin|
|Source|http://www.TiddlyTools.com/#WikifyPlugin|
|Documentation|http://www.TiddlyTools.com/#WikifyPluginInfo|
|Version|1.1.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 WikifyPlugin|
The {{{<<wikify>>}}} macro allows you to easily retrieve values from custom tiddler fields, tiddler slices, computed values (using javascript) or just plain old literals, and assemble them into small bits of generated wiki-syntax text content that can be rendered directly into a tiddler, or used in the ViewTemplate or EditTemplate to add dynamically-generated content to each tiddler.

The {{{<<wikiCalc>>}}} macro performs the same processing as {{{<<wikify>>}}} and, in addition, passes the assembled text content through javascript's {{{eval()}}} function before rendering the results.  This allows you to, for example, construct and compute mathematical expressions that use input values extracted from tiddler fields or slices.
!!!!!Usage
<<<
The syntax for use in tiddlers:
{{{
<<wikify format value value value value ...>>
<<wikiCalc format value value value value ...>>

}}}
The syntax for use in templates:
{{{
<span macro='wikify format value value value value ...'></span>
<span macro='wikiCalc format value value value value ...'></span>
}}}
where:
* ''format'' specifies the format of the wiki-syntax content (or javascript expression, if using {{{<<wikiCalc>>}}}) that will be rendered
* ''value'' parameters (space-separated), specified using any of:
** ''"tiddlername::slicename"'' - a tiddler slice reference
** ''"fieldname@tiddlername"'' - a tiddler custom field reference
** ''"""{{config.options.txtUserName}}"""'' - evaluated javascript parameter
** ''"none of the above"'' - literal text
When the ''format'' parameter contains //substitution markers// (using "%0" through "%9" character sequences), each value parameter is retrieved and embedded into the formatted content, replacing its corresponding marker.  If the ''format'' parameter does //not// contain any substitution markers, then all parameters are simply joined together for output.  Once the values have been formatted (and, if {{{<<wikiCalc>>}}} is used, evaluated as a javascript expression), the resulting content is then passed to the core wikify() parser to render and display it.

Notes:
* If a parameter is not recognized as fitting any of the above syntax, or if the slice/field referred to cannot be located, the reference will be inserted as literal text into the output
* When working with custom tiddler fields or tiddler slices, you can enter a special psuedo-tiddler name, ''@here'' (e.g., "fieldname@here") or ''here::'' (e.g., "here::slicename") to access custom fields and slices associated with the //current// tiddler.  This //relative// reference syntax can be particularly helpful when placed directly into a ViewTemplate and/or EditTemplate definition, where it can be applied automatically to each tiddler that is displayed.   Note: if you omit the ''@here'' portion of a field reference (e.g., just using "fieldname"), it is assumed to be a reference to a field in the current tiddler (i.e., it is treated as if you specified ''fieldname@here'').

<<<
!!!!!Examples
<<<
{{{
<<wikify [[This tiddler is: %0 using %1 bytes (last author: %2)]] title {{tiddler.text.length}} modifier>>
<<wikify [[The source URL for this plugin is: %0]] 'here::Source'>>
<<wikify [[The tiddler has been changed %0 times]] changecount@here>>
<<wikify [[The Primary Mid color is: @@background:%0;%0@@]] 'ColorPalette::PrimaryMid'>>
<<wikify [[This current user is: %0]] {{config.options.txtUserName}}>>
}}}
<<wikify [[This tiddler is: %0 using %1 bytes (last author: %2)]] title {{tiddler.text.length}} modifier>>

<<wikify [[The source URL for this plugin is: %0]] 'here::Source'>>
<<wikify [[The tiddler has been changed %0 times]] changecount@here>>
<<wikify [[The Primary Mid color is: @@background:%0;%0@@]] 'ColorPalette::PrimaryMid'>>
<<wikify [[This current user is: %0]] {{config.options.txtUserName}}>>
<<<
!!!!!Revisions
<<<
2009.03.29 [1.1.4] in handler(), pass 'tiddler' value to wikify() to fix macro errors in rendered content
2009.03.26 [1.1.3] unescape output before wikify so that \n can be used in formatting string
2008.11.16 [1.1.2] in getFieldReference(), if not a field/slice reference (or field/slice is not found), return string input unchanged instead of returning a blank string.
2008.03.08 [1.1.1] size reduction: documentation moved to [[WikifyPluginInfo]]
2008.03.07 [1.1.0] added {{{<<wikicalc>>}}} variant for evaluating assembled output as javascript before rendering the result
2007.11.11 [1.0.1] in handler(), fixed problem where a trailing space was created when no substitution markers were present in the format param.
2007.06.22 [1.0.0] initial release
<<<
[img[http://img125.imageshack.us/img125/1412/woodymp3qp9.gif]]
!!!<<gradient horiz #aaa #fff>>&nbsp;[[WordCount|WordCountMacro]]^^<<tiddler CloseThisOpen with: 'Macros Other'  '« back'>>|<<toolbar editTiddler>>» ^^>>
/***
|Author:|Simon Baird|
|URL:|http://linktomemacro.tiddlyspot.com/|
(Almost) as posted by BradleyMeck on the mailing list, 21-Oct-2006. To use put this somewhere in your ViewTemplate:
{{{<div style="font-size:150%">(<span macro="wordCount"></span> words)</div>}}}
''Note: by MorrisGray'' Added to ViewTemplate the below:
{{{<div style=text-align:right;><div style="font-size:85%"><span macro="wordCount"></span> words</div></div>}}}
!!!<<gradient horiz #aaa #fff>>&nbsp;Code>>

***/
//{{{
merge(config.macros,{
	wordCount: {
		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			createTiddlyText(place,tiddler&&tiddler.text?tiddler.text.match(/\w+/g).length:"0");
		}
	}
});
//}}}


Source: [[WordCountMacro - brought to you by MonkeyPirateTiddlyWiki|http://wordcountmacro.tiddlyspot.com/]]
!!!<<gradient horiz #fc3 #fff>>&nbsp;WriteTiddlersToFile^^<<tiddler CloseThisOpen with: Scripts  '« back'>>|<<toolbar editTiddler>>» ^^>>
@@color:#00c;This script will write a *.txt list of all tiddlers to an external file.@@
<<<

{{{
<<forEachTiddler
 write 
 '"[["+tiddler.title+"]]\n"+"----\n"' 
  toFile 'file:///d:/MyTiddlerList.txt' withLineSeparator '\r\n'
>>
}}}
<<<
<script>
          place.style.color="#c06"; /* set text color */

</script> 

 <script>
var out=""
var tids=store.getTiddlers("title","excludeLists");
for (var t=0; t<tids.length; t++) {
   var url="http://twhelp.tiddlyspot.com/";
   if (!url) url=document.location.href;
   var
permalink=encodeURIComponent(String.encodeTiddlyLink(tids[t].title));

    out+="[["+"[["+tids[t].title+"]]"+"]]\n";
    out+="{{{----}}}\n"

}


return out;
</script>


!!!<<gradient horiz #fc3 #fff>>&nbsp;WysiwygEditors^^<<tiddler CloseThisOpen with: FormattingText  '« back'>>|<<toolbar editTiddler>>» ^^>>
Instead of using code to mark up text there are several wysiwyg (~WhatYouSeeIsWhatYouGet) editor plugins around.  <br>

*Check out the Formatting and Viewing Text at [[SidebarPluginVault|http://tinyurl.com/6jbgpf]]<br><br>
I believe ~VisualTW is a good place to start.  Besides that there are several other plugins that could be of interest to you there.<br><br>
http://visualtw.ouvaton.org/VisualTW.html
[[WysiwygDemo|http://visualtw.ouvaton.org/VisualTW.html#WysiwygDemo]]
!!!!End
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("x")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("y")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
 [img[http://www.symbex.net.au/knowledge/organisations/demotivators_1550_3611697.jpg]]
A tiddler is a whittler.  As a young boy my father and grandfather taught me how to whittle.  Take a soft piece of pine, a sharp pocket-knife, a comfortable chair on the front porch then whittle away at the pine taking care not to cut yourself.  When the piece of pine is gone, simply go get another piece.  Sooner or later you will be called to lunch or dinner.
{{tablecenter{
<<forEachTiddler 
where
'tiddler.title.toLowerCase().startsWith("z")'
sortBy '(tiddler.title.toLowerCase())' 
 ascending
write
 '"|bgcolor:#fcf; "+(index+1)+"|[["+tiddler.title+"]]| "+tiddler.text.length+"|"+tiddler.tags+"|bgcolor:#fcf;"+tiddler.modified.formatString("YYYY.0MM.0DD")+"|\n"'
 begin '"|sort &raquo;| Title | Size | Tags |Modified|h\n"'

>>
config.options.chkHttpReadOnly =false;
readOnly = false;
config.options.chkBackstage=false; 
config.options.chkAppearance=true;
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[abegoExtensions]]^^<<tiddler CloseThisOpen with: ThirdPartyPlugins  '« back'>>|<<toolbar editTiddler>>» ^^>>
Plugins at http://tiddlywiki.abego-software.de/
[[On Local Disk here |file:///I:\AbegoDe\tiddlywiki.abego-software.de_index_4.htm]]

|bgcolor(#8cf): @@color(#000080): Titles @@ |bgcolor(#8cf): @@color(#000080):  (bytes)@@ |bgcolor(#8cf): @@color(#000080): Tags@@ |h
|[[DataTiddlerPlugin]]| 32412|systemConfig|
|[[ForEachTiddlerPlugin]]| 27367|ForEachTiddlerMacro|
|[[FormTiddlerPlugin]]| 17327|systemConfig|
|[[ImportTiddlersPlugin]]| 53807|systemConfig|
|[[InlineJavascriptPlugin]]| 9654|systemConfig|
|[[IntelliTaggerPlugin]]| 16516|systemConfig|
|[[PartTiddlerPlugin]]| 20116|systemConfig|
|[[SettingsPlugin]]| 7858|systemConfig|
|[[TiddlerWithParamsPlugin]]| 8103|systemConfig|
|[[YourSearchPlugin]]| 40669|systemConfig|
|[[YourSearchPlugin-1.0.1]]| 15346|systemConfig|
/***
!!![[accordionEffect2]] /%==================================================%/
***/

.accordionEffect .button{ display: block; color: #077; text-align: left;
font-weight: bold; line-height: 140%;
border solid 1px #bbb;
background: #077;
margin-left: -0.3em;
padding: 2px;
}

.accordionEffect .button:hover{
border solid 1px #bbb;
background: #888;
padding: 2px;
}
!!!!!&nbsp;CSS example
{{{
 {{textcenter{
 Center text with CSS
 }}}
 {{textleft{
 Align text left with CSS
 }}}
 {{confusetext{
Confsue txet wtih CSS 
 }}}
}}}

{{textcenter{
Center text with CSS
}}}
{{textleft{
Align text left with CSS
}}}
{{confusetext{
Confsue txet wtih CSS 
}}}
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.cssplay.co.uk/]]&nbsp;&raquo;|

<html><div align="center"><iframe src ="http://www.cssplay.co.uk/" width="100%" align="center" height="600"></iframe></div></html>}}}
function onClickMyGroup(e) {
story.closeAllTiddlers();
config.options.txtMyDefaultTiddlers = "";
saveOptionCookie('txtMyDefaultTiddlers');
var start = store.getTiddlerText("MyDefaultTiddlers");
if(start)
story.displayTiddlers(null,start.readBracketedList());
}
config.macros["MyGroup"] = {label: "MyGroup", prompt: "Close all open tiddlers and show the MyGroup of tiddlers", title: "MyGroup"};
config.macros.MyGroup.handler = function(place) {
createTiddlyButton(place,this.label,this.prompt,onClickMyGroup);
}
^^[[Detach this|dig Radio]]^^
[img[http://www.abc.net.au/dig/img/dig_streaming_radio.gif][http://www.abc.net.au/dig/]]

[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]] Listen dig Radio using: [[Media Player|http://www.abc.net.au/dig/dig.asx]] @@color:#c06;''&bull;''@@ [[RealPlayer|http://www.abc.net.au/dig/dig.ram]]&nbsp; @@color:#c06;''&bull;''@@+++[Streaming Radio]
<html><embed type="video/x-ms-asf" id="player_FF" name="player_FF" displaysize="4" autosize="0"

  bgcolor="white" showcontrols="true" showtracker="1" showdisplay="1" showstatusbar="1" videoborder3d="0" width="300" height="142" src="http://abc.net.au/streaming/digradio/digradio.m3u" autostart="true" designtimesp="5311" loop="false" volume="100"></embed></html>

===


[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]] Listen dig JAZZ using: [[Media Player|http://www.abc.net.au/streaming/digjazz.asx]] @@color:#c06;''&bull;''@@ [[RealPlayer|http://www.abc.net.au/streaming/digjazz.ram]] &nbsp;@@color:#c06;''&bull;''@@+++[Streaming Radio]<html><embed type="video/x-ms-asf" id="player_FF" name="player_FF" displaysize="4" autosize="0" bgcolor="white" showcontrols="true"  showtracker="1" showdisplay="1" showstatusbar="1" videoborder3d="0" width="300" height="142" src="http://abc.net.au/streaming/digjazz/digjazz.m3u" autostart="true" designtimesp="5311" loop="false" volume="100"></embed></html>

===


[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]] Listen dig COUNTRY using: [[Media Player|http://www.abc.net.au/streaming/digcountry.asx]] &nbsp;@@color:#c06;''&bull;''@@&nbsp;[[RealPlayer|http://www.abc.net.au/streaming/digcountry.ram]]&nbsp; @@color:#c06;''&bull;''@@+++[Streaming Radio]<html><embed type="video/x-ms-asf" id="player_FF" name="player_FF" displaysize="4" autosize="0" bgcolor="white" showcontrols="true" showtracker="1" showdisplay="1" showstatusbar="1" videoborder3d="0" width="300" height="142" src="http://abc.net.au/streaming/digcountry/digcountry.m3u" autostart="true" designtimesp="5311" loop="false" volume="100"></embed></html>

===



<html><div align="center" vertical-align="top"><iframe src="TWHelpEmail.html" frameborder="0" width="60" height="20"></iframe></div></html>
config.tasks.viewTabs = {
	text: "editA",
	tooltip: "Edit a specific tiddler",
	content: "|width:18em;<<tiddler EditATiddler>>|"
};
config.backstageTasks.splice(config.backstageTasks.indexOf("save")+0,0,"viewTabs");
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[EditTemplate|editTemplate]]^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>
''When in edit mode this determines the look the tiddler editor screen''

*To question this is to ask Monet why he didn't put frogs on his lily pads.

''~EditTemplate''
----
<<tiddler [[EditTemplate]]>>
tagged systemConfig
<<forEachTiddler
 where
'tiddler.tags.containsAny(["systemConfig",""])'
write
 '"|"+(index+1)+"|[["+tiddler.title+"]]|\n"'

>>
<<forEachTiddler
 where
 'tiddler.tags && tiddler.tags.length'
 sortBy 
 'getSortedTagsText(tiddler)+"###"+tiddler.title'
 script
 'function getSortedTagsText(tiddler) {var tags = tiddler.tags; if (!tags) return ""; tags.sort(); var result = ""; for (var i = 0; i < tags.length;i++) {result += tags[i]+ " ";} return result;} function getGroupTitle(tiddler, context) {if (!context.lastGroup || context.lastGroup != getSortedTagsText(tiddler)) { context.lastGroup = getSortedTagsText(tiddler); return "* {{{"+(context.lastGroup?context.lastGroup:"no tags")+"}}}\n";} else return "";} '
 write
 'getGroupTitle(tiddler, context)+"** [[" + tiddler.title+"]]\n"'

>>
----
Remove subtitle from browser tab per this conversation: http://tinyurl.com/2myjvs
<<<
{{{
 function getPageTitle() { return wikifyPlain("SiteTitle"); } 

*tag with systemConfig
}}}
<<<
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[HorizontalRule|hr]]^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>

You can divide a tiddler with a horizontal rule 
----
by typing four dashes
{{{ ---- }}}
on a separate line.

The horizontal rule can be styled using CSS.
''Example:''
{{{
hr {border: none 0;
border-top: 1px dotted;/*the border*/
width: 50%;
height: 1px;/*whatever the total width of the border-top and border-bottom equal*/
text-align: left;/*this will align it for IE*/
margin: 0 auto 0 0; /*this will align it left for Mozilla*/
} 
}}}

See detailed CSS styling of the hr here http://www.blakems.com/experimental/hr/
!!!!!&nbsp;HTML example
{{{
<html>
<table><td> Something in a table </td></table
</html>
}}}

<html><table><td> Something in a table </td></table</html>
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[iframes|iframes]]^^<<tiddler CloseThisOpen with: FormattingTiddlers  '« back'>>|<<toolbar editTiddler>>» ^^>>

The iframe element creates an inline frame that contains another document. You can see a complete description of iframes[[here at http://www.w3schools.com|http://www.w3schools.com/tags/tag_iframe.asp]]
*Also see [[Embed]] for embedding objects. See Bob Denny's Magic with Iframes [[here.|http://solo.dc3.com/tw/HandlingIframes.html]]
!!!Here are a few iframe examples:
|[[Google Maps|MyMap]]|
|[[22SafeColors]]|
|[[ColorCalculator]]|
|[[CSSColors]]|
|[[OhPhantom]]|
''PDF in an iframe'' @@color:#C06;''&raquo; &raquo;'' @@ If you have Adobe Viewer installed [[click here|BreguetEquation]]
!!!Browse for file in iframe
@@position:relative;+++^45em^[See the code]
Code by Eric Shulman
{{{
<html><hide linebreaks> <!-- extra psuedo-tag from HTMLFormattingPlugin -->
	<form target="theFrameID">
	<input type=file name=whichfile>
	<input type=button value="open"

		onclick="var f=this.form;
			f.action='file:///'+f.whichfile.value;
			try { f.submit(); }
			catch(e) { alert(e.description?e.description:e.toString()); }">
	</form>
	<iframe src="" name="theFrameID" id="theFrameID"
		style="background:#fff;width:100%;height:400px">

	</iframe>
</html>
}}}
===@@

+++[Try it here]
<<tiddler BrowseInIframe>>
===

!!!!&nbsp;Example 1 <iframe>
Below is an example of an iframe in a tiddler.  In this case it is a UTC clock from http://free.timeanddate.com/
{{borderless{
|bgcolor:#000; <<tiddler ./utctime>> |
| <html><div align="center"><a href="http://www.symbex.net.au/Wiki/NetTime.htm" target="time">NET</a> @@color(#C06):|@@ <a href="http://www.symbex.net.au/Wiki/UTC.htm" target="time">UTC</a></div></html> |
}}}
!!!!&nbsp;Code
{{{<html><div align="center"><iframe src="UTC.htm" frameborder="0" width="148" height="50"></iframe></div></html>}}}
!!!!&nbsp;Example 2 <iframe>

Here is another example of an iframe.  It contains the book ''Oh, What a Blow That Phantom Gave Me!'' by Edmund Carpenter.  It also gives you the option of opening it in a new window or expanding the current tiddler. (It's a very interesting book too.)

*@@position:relative;+++^45em^[You can view the code here]
<<<
{{{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://faculty.virginia.edu/phantom/Intro.html]]&nbsp;&raquo;|
<html><div align="center"><iframe src ="http://faculty.virginia.edu/phantom/Intro.html" width="100%" align="center" height="600"></iframe></div></html>

}}}
<<<
===@@

*+++[Open the iframe]
<<tiddler OhPhantom>>

===

!!!!&nbsp;Refresh an iframe
''Create a tiddler with an iframe:''

{{{<html><div align="center"><iframe src ="http://faculty.virginia.edu/phantom/Intro.html" width="100%" align="center" height="600"></iframe></div></html>}}}

And put this script in the tiddler somewhere. (Requires: InlineJavascriptPlugin)

{{{

<script label="refresh frame">
    function openIFrame(IFrameID, URL){
       document.getElementById(IFrameID).src=URL
    }
    openIFrame('something', 'http://URL to insert into iframe.com')
</script>
}}}

 
<part utctime hidden>
<html><div align="center"><iframe name="time" src="http://www.symbex.net.au/Wiki/UTC.htm" frameborder="0" width="170" height="50" scrolling="no" align="center"></iframe></div></html>

</part>
<div class='toolbar' macro='toolbar fullscreen jump top -closeTiddler closeOthers closeAll +editTiddler  permalink references'></div>
<div class='title' macro='view title'></div>
<div macro="gradient horiz #fff #fff"><div class='viewer' macro='view text wikified'><div align="center"><div class='comments' macro='haloscan comments'><div style='float:center;' macro='tiddler ThisPermalink'></div></div></div></div></div>

<div class='tagClear'><span macro='tiddler ShiftClickToEdit'></span> </div>
</div>
<div class='toolbar' macro='toolbar fullscreen jump top -closeTiddler closeOthers closeAll +editTiddler  permalink references'></div>
<div class='title' macro='view title'></div>
<div class='viewer' macro='view text wikified'></div><div align="center"></div>

<div class='tagClear'><span macro='tiddler ShiftClickToEdit'></span> </div>
<script>
        var tiddlers=store.getTiddlers("modified");
        var last=tiddlers[tiddlers.length-1];
        var when=last.modified.formatString("YYYY/0MM/0DD at 0hh:0mm:0ss");
        return "Last Modified:  " +when

</script> 
.centre {text-align:center; margin:0;}
.centre img {margin:0 auto;}

h1 {font-size: 1.6em; font-weight:bold; background:transparent; margin-top:0;margin-bottom:0; color:#000;}

h2 {font-size: 1.45em; font-weight:bold; background:transparent; margin-top:0;margin-bottom:0; color:#000;}

#mainMenu {width:14em;}
#displayArea {margin-left:18em;}


.left {float:left; margin-right:1em;}
.bold {font-weight:bold;}

.navNext {float:right;}
.navPrev, .navPrevious{float:left;}

.nav .tiddlyLink {color:#000; background:transparent; border:none;padding:0;margin:0;}

.nav {padding:0;margin:0;}

.nav table { margin:0 auto; border:0px solid #000;padding:0;border-collapse: separate;}

.nav table tr{padding:0; margin:0;border-spacing: 1px;}
.nav table td {padding:4px; border:1px solid #000;
border-spacing: 0px;cursor:pointer;cursor:hand}
.nav .activenav{background:#000 !important;}

.topbutton button, .topbutton{float:right;}

.note{
position:relative; /*this is the key*/
z-index:24; background:#ccc;
color:#000;
text-decoration:none}

.note:hover, .noteover{z-index:25; background-color:#FFB865;cursor:help;}

.note span{display: none;}

.note:hover span, .noteover span{ /*the span will display just on :hover state*/
display:block;
position:absolute;
top:2em; left:2em; width:15em;
border:1px solid #000;
background-color:#FFB35A; color:#000;
padding:0.5em;}



.info{
position:relative; /*this is the key*/
z-index:24; background:#ccc;
color:#000;
text-decoration:none}

.info:hover, .infoover{z-index:25; background-color:#FFB865;cursor:help;}

.info span{display: none}

.info:hover span, .infoover span{ /*the span will display just on :hover state*/
display:block;
position:absolute;
top:2em; left:2em; width:15em;
border:1px solid #000;
background-color:#FFB35A; color:#000;
padding:0.5em;}

.bold {font-weight: bold !important;}
!!!<<gradient horiz #Fc3  #ffffff>>&nbsp;[[list]]^^<<tiddler CloseThisOpen with: "Macros Built-in"  '« back'>>|<<toolbar editTiddler>>» ^^>>

This macro lists all tiddlers in alphabetical order by title with lower case last..
!!!<<gradient horiz #Fc3  #fff>>&nbsp;Example>>
+++[See it work]
<<tiddler ListAll>>
===
!!!<<gradient horiz #Fc3  #fff>>&nbsp;Code>>
{{{<<list>>}}}

What we have done here is to put  {{{ <<list>>}}} in a tiddler called ''ListAll'' then used a [[NestedSlider|NestedSlidersPlugin]] to call up the {{{<<tiddler  ...>>}}}  macro like this: {{{<<tiddler ListAll>>}}}.  So the whole thing looks like this:
{{{
+++[See it work]

<<tiddler ListAll>>
===
}}}

!!!<<gradient horiz #fc3 #fff>>&nbsp;list filter>>
From version 2.3 you can use:

{{{<<list filter [tag[any tag]]>>}}} tag  (any tag)
{{{<<list filter "[tag[css]] [tag[list]]">>}}} tag css and tag list
{{{<<list filter "[tag[css]] [!tag[list]]">>}}} tag css and not tag list
{{{<<list filter [tag[systemConfig]][sort[+created]]>> }}}

The above will give you a bulleted list. If you wish to remove the bullets for a plain list put this in your StyleSheet.
{{{.nobullets li { list-style-type: none; margin-left:-2em; }}}}
Then use this class wrapper like this {{{ {{nobullets{<<list filter [tag[any tag]]>>}}} }}}

If you want an ordered list i.e. numbered, put this in your StyleSheet
{{{ .olist li { list-style-type:decimal; padding:0em; margin:0em; } }}}
Then use this class wrapper like this {{{ {{olist{<<list filter [tag[any tag]]>>}}} }}}



!!!End

<<popup forEachTiddlerDemo [[<<forEachTiddler where 'tiddler.tags.containsAny(["excludeLists","excludeSearch"])'$))]]>>
<<tiddler [[forListHiddenTags]]>>
<<list shadowed>>
<<listnav source: DefaultTiddlers  [links:true] filter:[tag[systemConfig]]>>




<!--{{{-->
<div class='title' macro='view title'></div>
<div class='viewer' macro='view text wikified'><div class='toolbar' macro='toolbar fullscreen closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></div></div>

<div class='tagClear'></div>
<!--}}}-->
!!!<<gradient horiz #Fc3  #fff>>&nbsp;[[newJournal]]^^<<tiddler CloseThisOpen with: "Macros Built-in"  '« back'>>|<<toolbar editTiddler>>» ^^>>

This opens a tiddler for a new journal entry.
!!!<<gradient horiz #Fc3  #fff>>&nbsp;Example>>
Write a <<newJournal "YYYY  MMM DD - 0hh:0mm:0ss">>entry. @@color(#C06):(click delete to remove)@@
!!!<<gradient horiz #Fc3  #fff>>&nbsp;Code>>
&nbsp;@@color:#C06;''&raquo; &raquo;''@@@@position:relative;+++^25em^[Click here to see the date format arguments]
<<tiddler [[today/datearguments]]>>
===@@ 
{{{
Write a ISO 8601 dated <<newJournal "YYYY.0MM.0DD at 0hh:0mm:0ss">>.
}}}
{{{
Add the week number: <<newJournal "YYYY.0MM.0DD at 0hh:0mm:0ss week 0WW">>

}}}
{{{
Add a tag: <<newJournal "YYYY.0MM.0DD at 0hh:0mm:0ss" "tag">>
}}}
!!!<<gradient horiz #Fc3  #fff>>&nbsp;A custom Journal>>
Use together to make your custom journal. Change the JournalTemplate to reflect your needs or desires.
<<<
This is a new journal button: NewJournalFromTemplate
This is the tiddler you customize: JournalTemplate
<<<
!!!End

!!!<<gradient horiz #Fc3  #fff>>&nbsp;[[newTiddler]]^^<<tiddler CloseThisOpen with: "Macros Built-in"  '« back'>>|<<toolbar editTiddler>>» ^^>>
This opens a new blank tiddler.
!!!<<gradient horiz #Fc3  #fff>>&nbsp;Example>>
Create a<<newTiddler>>@@color(#C06):(click delete to remove)@@

@@color:#C06;''&raquo; &raquo;'' @@ You can easily make your own customized new tiddlers. 
*Here are some special custom new tiddlers ><<tiddler MakeTiddlers>>

*The whole set of tiddlers including {{twLink{[[instructions|New Table Template]]}}} and the<<tag template>>for these are here @@color:#C06;''&raquo;''@@<<tag makeTiddlers>>

!!!<<gradient horiz #Fc3  #fff>>&nbsp;Code>>
{{{
Create a <<newTiddler>>
}}}

!!!<<gradient horiz #Fc3  #fff>>&nbsp;Code Tiddler with Parameters>>

{{{
<<newTiddler label:"try this" accessKey:1 focus:tags text:"hello there!" title:"TiddlersTitle" tag:greeting tag:"an example">>
}}}
| !Parameter | !Description |
|label |Text link to create tiddler |
|prompt |The tooltip for the button |
|accessKey |The access key to trigger the button (specify a single letter; different browsers require a different modifier key like Alt- or Control-) |
|focus |Which of the edittable fields to default the focus to (eg, "title", "text", "tags") |
|template |The template to use to display the new tiddler (defaults to EditTemplate) |
|text |The default text for the new tiddler |
|title |The default title for the new tiddler |
|tag |A single tag to be applied to the new tiddler (repeat this parameter to specify multiple tags) |

Folding instructions for the desperate is US$3000.00 sent to my bank in  Switzerland.
 
[img[http://img27.imageshack.us/img27/1787/origamimouse0rf.jpg]]
----
[img[http://img27.imageshack.us/img27/6397/mousebrown3lt.gif]]
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[PageTemplate|pageTemplate]]^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>
''The ~PageTemplate determines the overall look of the ~TiddlyWiki page''.

<<tiddler [[PageTemplateDemo]]>>
<part CSSTutorial>
p {
  font-family: "Garamond", serif;
}
h2 {
  font-size: 110%;
  color: red;
  background: white;
}
.note {
  color: red;
  background: yellow;
  font-weight: bold;
}
p.warning {
  background: url(warning.png) no-repeat fixed top;
}
#paragraph1 {
  margin: 0;
}
a:hover {
  text-decoration: none;
}
#news p {
  color: red;
}
</part>
''There are two'', what seem to be mysterious, links in ~TiddlyWiki; __@@color(#00F):''perma''@@@@color(#C06):''link''@@__ on the toolbar and __@@color(#00F):''perma''@@@@color(#C06):''view''@@__ in the right sidebar.
#@@color(#00F):''perma''@@@@color(#C06):''link''@@
##''S''uppose you wish to send a link to a friend to show them your latest tiddler named OverView. Just call up your ~TiddlyWiki online e.g. http://tiddlyspot.com/twhelp/index.html load the tiddler you wish your friend to see then click on @@color(#00F):''perma''@@@@color(#C06):''link''@@ on the __toolbar__.
##''N''otice in your ''browser's'' address box the address is now something like this: http://tiddlyspot.com/twhelp/index.html#OverView. Now copy and paste this link into your email program and send it. When your friend clicks on the link they will see exactly what you were seeing (all other things being equal of course.)
#@@color(#00F):''perma''@@@@color(#C06):''view''@@
##''S''uppose you wish your friend to see two (or more) tiddlers e.g. OverView and [[HTML]].  Do the same as you did above but have both tiddlers showing then click on @@color(#00F):''perma''@@@@color(#C06):''view''@@ on the __right sidebar__.
##''N''ow from your browser's address box copy and paste this link http://tiddlyspot.com/twhelp/index.html#OverView%20JavaScript into your email program and send it.




!!!!!<<gradient horiz #fcb #fff>>&nbsp;[[quickedit]]>>

@@color:#C06;''&raquo; &raquo;'' @@   Tabs tagged quickedit
----
<script>
// get all tiddlers tagged with "quickedit"
var tids=store.getTaggedTiddlers("quickedit");
// keep only tiddlers *also* tagged with New
var list=[];
for (var t=0; t<tids.length; t++)
   if (tids[t].isTagged("quickedit")) list.push(tids[t]);
// create output list of tiddler titles, one per line
var out="";
for (var t=0; t<list.length; t++) out+="#[["+list[t].title+"]]\n";
return out;

</script>
<html><a href="twhelp.html" class="myclass" target="_blank">This is text</a></html>


This script tells the size of a tiddler.

<script>
   if (!window.story) window.story=window;
   var title=story.findContainingTiddler(place).id.substr(7);
   return title+" is using "+store.getTiddlerText(title).length+" bytes";
</script>

{{{
<script>
   if (!window.story) window.story=window;
   var title=story.findContainingTiddler(place).id.substr(7);
   return title+" is using "+store.getTiddlerText(title).length+" bytes";
</script>
}}}
version.extensions.smileyMacro = {major: 0, minor: 1, revision: 0, date: new Date(2005,7,20)};
//Author: Alan Hecht
config.macros.smiley = {}
config.macros.smiley.handler = function(place,macroName,params)
{
	var palette = ["transparent","#000000","#1a1507","#352e18","#464646","#666666","#a3141e","#b06b63","#cc9900","#dd9030","#dddddd","#e89d00","#edc32a","#f3cb3c","#fdf201","#fdf526","#ff3149","#ffac00","#ffbf06","#ffc846","#ffcc66","#ffd758","#ffdd01","#ffea7b","#ffed55","#ffffff"];
	var data = params;
	var imageMap = null;
	if(data[0] == ":-)" || data[0] == ":)")

		imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyffyffuujbaadyyyeeyeetttdabppppddyddpmmlbbwoooooooowsrlbbwwpooooowwmrlbbwwboooowwwbllbbwwwboooowbrllbacwwwbbbbbrllcaablswwwwsrrlibaaablsssrrllibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";
	else if(data[0] == ":-(" || data[0] == ":(")
		imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyyyyyyuujbaadyyyeeyeetttdabppppddyddpmmlbbwoooooooowsrlbbwwpooooowwmrlbbwwoooooowwrllbbwwwwbbbbbsrllbacwwbwwwwsbllcaablswwwwsrrlibaaablsssrrllibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";
	else if(data[0] == ";-)" || data[0] == ";)")
		imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyxxxxxuujbaadyyyxxxeetttdabppphddyddpmmlbbwoooooooowsrlbbwwpooooowwmrlbbwwboooowwwbllbbwwwboooowbrllbacwwwbbbbbrllcaablswwwwsrrlibaaablsssrrllibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";
	else if(data[0] == ":-|" || data[0] == ":|")
		imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyffyffuujbaadyyyeeyeetttdabppppddyddpmmlbbwoooooooowsrlbbwwpooooowwmrlbbwwoooooowwrllbbwwwwbbbbbsrllbacwwwwwwwsrllcaablswwwwsrrlibaaablsssrrllibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";
	else if(data[0] == ":-D" || data[0] == ":D")
		imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyeeyeeuujbaadyyyeeyeetttdabppppyyyyypmmlbbwbbbbbbbbbbblbbwbkzzzzzzzkbwbbwbfzzzzzzzfbwbbwbkzzzzzzzkbwbacwbkzzzzzkblcaablsbkzzzkblibaaablsbbbbblibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";
	else
		createTiddlyElement(place,"span",null,"errorNoSuchMacro","unknown smiley");
	if(imageMap)
		{
		var box = createTiddlyElement(place,"span",null,"smiley",String.fromCharCode(160));
		box.style.position = "relative";
		box.style.width = "15px";
		box.style.height = "15px";
		box.style.marginLeft = "1px";
		box.style.marginRight = "1px";
		box.style.paddingRight = "12px";
		box.style.verticalAlign = "top";

		//now divide into 15x15 grid and create each pixel
		// rows
		for(r=0; r<15; r++)
			{
			// columns
			for(c=0; c<15; c++)
				{
				//create each pixel with the correct background
				var pix = document.createElement("img");
				pix.className = "smileyPixel";
				pix.style.position = "absolute";
				pix.border = 0;
				pix.style.top = r + "px";
				pix.style.left = c + "px";
				pix.style.width = "1px";
				pix.style.height = "1px";
				pix.style.backgroundColor = palette[imageMap.charCodeAt((r*15)+c)-97];
				pix.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
				box.appendChild(pix);
				}
			}
		}
}

!!!<<gradient horiz #aaa #fff>>&nbsp;[[smilyMacro]]^^<<tiddler CloseThisOpen with: 'Macros Other'  '« back'>>|<<toolbar editTiddler>>» ^^>>
<<<
In addition to the built-in macros, you can also create your own macros.  As an example, here is a smiley macro from [[AlanH|http://www.personal.psu.edu/staff/a/c/ach12/tiddlywiki/smiley.htm]]: Here is a local copy of the [[Smily Macro|smiley]]

Smiley Samples:
<<smiley :-)>><<smiley :-(>><<smiley ;-)>><<smiley :-|>><<smiley :-D>>

!!!<<gradient horiz #aaa #fff>>&nbsp;Code>>
{{{
<<smiley :-)>><<smiley :-(>><<smiley ;-)>><<smiley :-|>><<smiley :-D>>
}}}
<<<
!!!<<gradient horiz #fc3 #ffffff>>[[StyleSheet|styleSheet]]^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>

~StyleSheet is for CSS code that you wish to customize your ~TiddlyWiki with and code here overrides code in both ~StyleSheetColors and ~StyleSheetLayout.
|bgcolor:#FFF;''NOTE:'' It is best that all modifications you make should be done to ''~StyleSheet'' because new core updates sometimes modify ''~StyleSheetLayout'' and ''~StyleSheetColors'' . So if you have modified your ~StyleSheetLayout and ~StyleSheetColors they are no longer virgin //shadow tiddlers// consequentially any new core changes to ~TiddlyWiki for these stylesheets will ''NOT'' be implemented.  It is best to leave them original and only use them for reference.|
@@color:#04b;This shows the CCS in StyleSheet that sets the colors of tabs in the viewer which overrides the normal global colors for tabs.@@

@@color(#C06):''For information on CSS go here:''<<tiddler CSSMenu>>''or here'' http://www.w3schools.com/css/@@
!!!<<gradient horiz #aaaaaa #bbbbbb #cccccc #eeeeee #ffffff>>&nbsp;Example>>
|<<tiddler [[./cell1]]>> |padding:1em 2em 1em 2em;<<tabs tabsClass [[TabDemo1]] "tool tip" [[TabDemo1]] [[TabDemo2]] "tool tip" [[TabDemo2]]>>|

!!!<<gradient horiz #aaaaaa #bbbbbb #cccccc #eeeeee #ffffff>>&nbsp;Below is the actual ~StyleSheet>>

<part cell1 hidden>

{{{
.viewer .tabSelected {
 color:#063;
 text-decoration:none;
}

.viewer .tabUnselected {
 color: #fff;
 background: #09c;
 text-decoration:none;
}

}}}

</part>

----
!!!StyleSheet
<<tiddler [[StyleSheet]]>>

!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[StyleSheetColors|styleSheetColors]] ^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>

''This sets most of the colors in ~TiddlyWiki but not necessarily.'' 
|bgcolor:#FFF;''NOTE:'' It is best that all modifications you make should be done to ''~StyleSheet'' because new core updates sometimes modify ''~StyleSheetLayout'' and ''~StyleSheetColors'' . So if you have modified your ~StyleSheetLayout and ~StyleSheetColors they are no longer virgin //shadow tiddlers// consequentially any new core changes to ~TiddlyWiki for these stylesheets will ''NOT'' be implemented.  It is best to leave them original and only use them for reference.|
Much of the CSS here is duplicated in ~StyleSheetLayout but without the color code.  It is easy to code ~StyleSheetLayout with color information or vice versa and create confusion.  Both of these can be overidden by ~StyleSheet so good organisation is imperative.  Note: It has been suggested by others it might be best to rename ~StyleSheetColors as ~StyleSheet

@@color(#C06):''For information on CSS go here:''<<tiddler CSSMenu>>''or here'' http://www.w3schools.com/css/@@
----
|>|padding:7px;@@color:#04b;This shows the CCS that sets the colors of links. @@ |
|<<tiddler [[./cell1]]>> |padding:5px;<<tiddler [[./cell2]]>>|

<part cell1 hidden>
{{{
.viewer a {
color:#00f;
text-decoration:underline;

}

.viewer a:hover{
	background: #fff;
	color: #D00;
}
}}}
</part>
<part cell2 hidden>
This code determines the color of this link
and the color when the mouse pointer
hovers over it.
__[[Glossary]]__








</part>
!!!The actual StyleSheetColors is below
<<tiddler [[StyleSheetColors]]>>
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[StyleSheetLayout|styleSheetLayout]]^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>
''This sets most of the layout in ~TiddlyWiki but not necessarily.''
|bgcolor:#FFF;''NOTE:'' It is best that all modifications you make should be done to ''~StyleSheet'' because new core updates sometimes modify ''~StyleSheetLayout'' and ''~StyleSheetColors'' . So if you have modified your ~StyleSheetLayout and ~StyleSheetColors they are no longer virgin //shadow tiddlers// consequentially any new core changes to ~TiddlyWiki for these stylesheets will ''NOT'' be implemented.  It is best to leave them original and only use them for reference.|
Much of the CSS here is duplicated in ~StyleSheetColors but without the layout code. It is easy to code ~StyleSheetLayout with color information or vice versa and create confusion.

Both of these can be overidden by ~StyleSheet to add to the confusion so good organisation is imperative. 

@@color(#C06):''For information on CSS go here:''<<tiddler CSSMenu>>''or here'' http://www.w3schools.com/css/@@
----

<<tiddler [[StyleSheetLayout]]>>
!!!<<gradient horiz #fc3 #ffffff>>[[Print Intro|styleSheetPrint]]^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>
[img[printer.gif]]
!!!<<gradient horiz #aaaaaa #bbbbbb #cccccc #eeeeee #ffffff>>[[StyleSheetPrint]]>>
<<tiddler StyleSheetPrint>>
<div class='toolbar' macro='toolbar fullscreen jump top -closeTiddler closeOthers closeAll +editTiddler  permalink references'><span style="padding-right:0em;" macro='tagger exclude: " ToDoWork" '></span></div>
<div class='title' macro='view title'></div>

<div macro="gradient horiz #ccf #fff"><div class='viewer'  macro='view text wikified'></div><div align="center"></div></div>
<div class='tagClear'><span macro='tiddler ShiftClickToEdit'></span> </div>
<div class='fdfbackground'> </div>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[tabs]]^^<<tiddler CloseThisOpen with: "Macros Built-in"  '« back'>>|<<toolbar editTiddler>>» ^^>>
Tabs are a way of displaying tiddlers in tabular form.  Each tab is a separate tiddler; here's how it's done.

Anatomy of a tab: __{{{<<}}}@@color:#00e;tabs@@ @@color:#c06;"cookie"@@ @@color:#080;{{{[[}}}tab name {{{]]}}}@@ @@color:red;"tool tip" @@ @@color:blue; {{{[[}}}tiddler to be displayed{{{]]}}}@@{{{>>}}}__

This is the code for two tabs:

{{{<<tabs txtMyTabs [[tabname ]] "tool tip" [[tiddler to be displayed]] [[Here is another tab ]] "Another Tab" [[hr]] >>

}}}

!!!<<gradient horiz #abf   #fff>>&nbsp;Here are the tabs for the code above>>
<<tabs txtMyTabs [[tab name ]] "tool tip" [[tiddler to be displayed]][[ Here is another tab ]] "Another Tab" [[hr]] >>
!!!!<<gradient horiz #fcf  #fff>>&nbsp;@@color:#000;Note about wrapping tabs to viewer width@@>>
|bgcolor:#fcf;Leave a space after the __tab name__ before the square brackets. e.g {{{[[tabname ]]}}}.  Wrapping requires white space for it to be accomplished properly.  Leaving a white space after the tab name should allow a large number of tabs to wrap properly even as the screen size is adjusted. As a further note keep in mind tab names with spaces may wrap unpredictably.|
You can force tabs to wrap where you want them by adjusting the titles to have or not have white space; however, it could be unpredictable.

!!!Another way
+++[Create Tabs with a Script]

<<tiddler CreateTabsScript>>
===


!!!!How reference specific tab in a tiddler
Source: [[How reference specific tab in a tiddler? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/4f7b952f69b523a2]]
{{{
<html><a href='javascript:;' onclick='config.options.tabID="StayViewTabs";story.displayTiddler(story.findContainingTiddler(this),"Styling");story.refreshTiddler("Styling",null,true);'>Styling</a></html>
}}}


!!!<<gradient horiz #abf  #fff>>&nbsp;End of tabs>>

!!!<<gradient horiz #Fc3  #fff>>&nbsp;[[tag]]^^<<tiddler CloseThisOpen with: "Macros Built-in"  '« back'>>|<<toolbar editTiddler>>» ^^>>
The {{{<<tag>>}}} macro creates a button that returns a list of tiddlers with a particular tag.
!!!<<gradient horiz #Fc3  #fff>>&nbsp;&nbsp;Examples>>

#Click here to see all the tags marked <<tag stylesheet>>
#Click here to see all the tags marked <<tag systemConfig>>.
#Click here to see all the tags marked <<tag Macros>>
!!!<<gradient horiz #Fc3  #fff>>&nbsp;Code>>
{{{
#Click here to see all the tags marked <<tag systemConfig>>.
#Click here to see all the tags marked <<tag Macros>>

#Click here to see all the tags marked <<tag stylesheet>>
}}}
<<list filter [tag[css]]>>
From version 2.3 you can use:
{{{<<list filter [tag[css]]>>}}} tag css* (any tag)*
{{{<<list filter "[tag[css]] [tag[list]]">>}}} tag css and tag list
{{{<<list filter "[tag[css]] [!tag[list]]">>}}} tag css and not tag list
!!!End
!!!<<gradient horiz #Fc3  #fff>>&nbsp;[[tagging]]^^<<tiddler CloseThisOpen with: "Macros Built-in"  '« back'>>|<<toolbar editTiddler>>» ^^>>
The {{{<<tagging>>}}} macro  immediately returns a list of tiddlers based on a tag; if no tag is specified, it looks for tiddlers tagged with the title of the current tiddler.
!!!<<gradient horiz #Fcb  #fff>>&nbsp;Example 1>>

To get a list of tiddlers tagged with 'stylesheet' put this in a tiddler {{{<<tagging stylesheet>>}}} to get+++[this.]<<tiddler TaggingDemo>>===

''Explanation''
|Because the return of the {{{<<tagging xxxx>>}}} effect is immediate, for this demonstration, we have put it in a tiddler entitled TaggingDemo and prevented it from executing by putting it in a nested slider until the word+++[this]<<tiddler TaggingDemo>>===is clicked on.|
!!!!!<<gradient horiz #Fc3  #fff>>&nbsp;Example 1 Code>>
<<<
"""
Put this in a tiddler {{{<<tagging stylesheet>>}}} 

"""
<<<
----
!!!<<gradient horiz #Fcb  #fff>>&nbsp;Example 2>>
This example shows using {{{<<}}}tagging{{{>>}}} by itself with no tag specified therefore it looks for tags based on its title which is ''Tagging''. 
<<<
 Example 2 {{{<<}}}tagging{{{>>}}}
+++[See a demo here.]
<<tagging>>
===

<<<
!!!!!<<gradient horiz #Fcb  #fff>>&nbsp;Example 2 Code>>
<<<
{{{
+++[See a demo here.]
<<tagging>>
===
}}}
<<<
!!!&nbsp;End
<<QOTD [[Tip of the Day]]>>
!!!<<gradient horiz #Fc3  #fff>>&nbsp;[[tiddler]]^^<<tiddler CloseThisOpen with: "Macros Built-in"  '« back'>>|<<toolbar editTiddler>>» ^^>>
You can use this macro to automatically open a tiddler inside another tiddler.
!!!<<gradient horiz #Fc3  #fff>>&nbsp;Example>>

See the tiddler on its own click [[here|Warning]]
{{{
Tiddler to be opened is titled "Warning" <<tiddler Warning>>
}}}
<<tabs tabsClass [[Warning]] "" [[Warning]]>>
!!!<<gradient horiz #Fc3  #fff>>&nbsp;Code>>
{{{
<<tiddler Warning>>

}}}
*This is a tiddler named __''tiddler to be displayed''__ and is the demo tab for the example above.

Just to understand the concept that this is a separate tiddler:
[[click here and view the tiddler 'tiddler to be displayed'|tiddler to be displayed]]
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;Intro to TiddlyWikiThemes>>

This is just a place holder until another idea comes along. At present this cannot be maintained and should probably just be outside links.

<<tiddler TiddlyWikiThemes>>
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.tiddlywiki.com/index.xml]]&nbsp;&raquo;|
----
<html><div align="center"><iframe  src ="http://www.tiddlywiki.com/index.xml" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
!!!<<gradient horiz #Fc3  #fff>>[[<<today>>|today]]^^<<tiddler CloseThisOpen with: "Macros Built-in"   '« back' >>|<<toolbar editTiddler>>» ^^>>
The Today Macro takes a ~DateFormatString as an optional argument. This string can be a combination of ordinary text, with some special characters that get substituted by parts of the date:* DDD - day of week in full (eg, "Monday")
!!!<<gradient horiz #Fc3  #fff>>&nbsp;Examples>>

#Today is <<today>>
#Today is <<today MMM, DDth.YYYY>>
#Today is <<today 0DD-0MM-YYYY>>
#Today is <<today YYYY.0MM.0DD>>
#Today is <<today 0DD-0MM-YY>>
#The time is <<today 0hh:0mm:0ss>>

#The year is <<today YYYY>>
#Add week number @@color:#C06;''<<today "YYYY.0MM.0DD 0hh:0mm:0ss week 0WW">>''@@
#Full ~Monty-ISO+ @@color:#C06;''<script> var d = new Date();return '<<today "YYYY.0MM.0DD 0hh:0mm:0ss">>'+" week "+d.getWeek()+" day  "+(d.getDay()==0?7:d.getDay())+" (<<today 'ddd'>>)";</script>''@@@@position:relative;+++^20em^[see the code]{{{<script> var d = new Date();return '<<today "YYYY.0MM.0DD 0hh:0mm:0ss">>'+" week "+d.getWeek()+" day  "+(d.getDay()==0?7:d.getDay())+" (<<today 'ddd'>>)";</script>}}}===@@
!!!<<gradient horiz #Fc3  #fff>>&nbsp;Code>>

{{{
#Today is <<today>>
#Today is <<today MMM,DDth.YYYY>>
#Today is <<today 0DD-0MM-YYYY>>
#Today is <<today YYYY.0MM.0DD>>
#Today is <<today 0DD-0MM-YY>>
#The time is <<today 0hh:0mm:0ss>>

#The year is <<today YYYY>>
#Add the week number <<today "YYYY.0MM.0DD 0hh:0mm:0ss week 0WW">>
}}}
<part datearguments>
!!!<<gradient horiz #Fc3  #fff>>&nbsp;Arguments>>
* {{{ddd}}} - short day of week (eg, "Mon")
* {{{DD}}} - day of month
* {{{0DD}}} - adds a leading zero
* {{{DDth}}} - adds a suffix
* {{{WW}}} - ISO-8601 week number of year
* {{{0WW}}} - adds a leading zero
* {{{MMM}}} - month in full (eg, "July")
* {{{mmm}}} - short month (eg, "Jul")
* {{{MM}}} - month number
* {{{0MM}}} - adds leading zero
* {{{YYYY}}} - full year
* {{{YY}}} - two digit year
* {{{wYYYY}}} - full year with respect to week number
* {{{wYY}}} two digit year with respect to week number
* {{{hh}}} - hours in 24 hr clock
* {{{0hh}}} - adds a leading zero in 24 hr clock
* {{{hh12}}} - hours in 12 hour clock
* {{{0hh12}}} - hours in 12 hour clock with leading zero
* {{{mm}}} - minutes
* {{{0mm}}} - minutes with leading zero
* {{{ss}}} - seconds
* {{{0ss}}} - seconds with leading zero
* {{{am}}} or {{{pm}}} - lower case AM/PM indicator
* {{{AM}}} or {{{PM}}} - upper case AM/PM indicator

</part>
{{borderless{
<<tiddler ReloadButton>>
<html><table width="96%" style="border:none;margin:1px;background:transparent;clear:both;"><iframe id="animatedcollapse" src="http://www.symbex.net.au/Wiki/Outboard/magictut1.htm" width="100%" height="500" scrolling="no" frameborder="0" allowtransparency style="border:none;"></iframe></table></html>

}}}

<html><div id="twitter_div">
<h2 class="twitter-title">Twitter Updates</h2>
<ul id="twitter_update_list"></ul></div></html>

<script  src="http://twitter.com/javascripts/blogger.js"></script>
<script  src="http://twitter.com/statuses/user_timeline/msgray.json?callback=twitterCallback2&count=5"></script>
!!!<<gradient horiz #Fc3  #fff>>&nbsp;[[version]]^^<<tiddler CloseThisOpen with: "Macros Built-in"  '« back'>>|<<toolbar editTiddler>>» ^^>>

This reveals the ~TiddlyWiki version number.
!!!<<gradient horiz #Fc3  #fff>>&nbsp;Example>>
~TiddlyWiki Version <<version>>
!!!<<gradient horiz #Fc3  #fff>>&nbsp;Code>>
{{{
~TiddlyWiki Version:<<version>>
}}}
!!!<<gradient horiz #fc3 #ffffff>>&nbsp;[[ViewTemplate|viewTemplate]]^^<<tiddler CloseThisOpen with: FormattingThePage  '« back'>>|<<toolbar editTiddler>>» ^^>>
''This determines the organization and look of the tiddler view.'' 
<html><span title="Just above this tiddler is its tool bar and this text is in an area called ''viewer''" style="cursor:help">@@color:#c06;''Put your cursor here''@@</span></html>

If you look around a bit you can see ''~ViewTemplate'' determines the view of the ''tool bar'', the tiddler ''title'', and the ''viewer'' that contains this text.

+++[Here is an excerpt from the ''ToolbarMacro'' tiddler about a macro that is used in ''ViewTemplate''.]
<<<
<<tiddler ToolbarMacro/toolbar>>
<<<
===


''~ViewTemplate''
----

<<tiddler [[ViewTemplate]]>>

!!! A pluginless way of having newHere or copyThis
<div><span style="padding-right:0em;" macro='tagger'></span ><span class='toolbar' macro="newTiddler label:'new subtopic: ▾'
 tag:{{tiddler.title}} treeview">|</span><span class='toolbar' macro="clickify newTiddler label:'copy this: ▾' title:{{tiddler.title}} text:{{store.getTiddlerText(tiddler.title,place)}}  tag: 'copy of' {{tiddler.title}}">|</span></div><br />


!!!<<toolbar top>>
config.options.chkSearchIncremental=false;