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&g