<!--{{{-->
<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]];}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

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

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
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 closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></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 +saveTiddler -cancelTiddler deleteTiddler'></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'></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>>
<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>
[[Introduction]]
MainFeatures
NewFeatures
[[Customisation]]
[[Plugins]]
GettingStarted
HowToUpgrade
[[{Index}]]
<<options>>
<<option chkSearchTitles>> Search in tiddler titles
<<option chkSearchText>> Search in tiddler text
<<option chkSearchTags>> Search in tiddler tags
<<option chkSearchFields>> Search in tiddler data fields
<<option chkSearchShadows>> Search in shadow tiddlers
<<option chkSearchTitlesFirst>> Search results show title matches first
<<option chkSearchList>> Search results show list of matching tiddlers
<<option chkSearchIncremental>> Incremental searching
<<option chkHoldSearches>> Hold search results
!!!!!<<gradient horiz #fcb #fff>>&nbsp;[[AllNotes]]>>
@@color:#C06;''&raquo; &raquo;'' @@   Notes/comments attached to tabs: see note below
----
<script>
// get all tiddlers tagged with "allnotes"
var tids=store.getTaggedTiddlers("allnotes");
// keep only tiddlers *also* tagged with New
var list=[];
for (var t=0; t<tids.length; t++)
   if (tids[t].isTagged("allnotes")) 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> 
This is a list of the notes attached to tabs; the text preceding ''-Comments'' is the name of the tab.
!!!!!<<gradient horiz #fcb #fff>>&nbsp;AllTabs>>
<<list all>>
/***
!!!<<gradient horiz #fc3 #fff >><<tiddler RefreshStyles>>&nbsp;BackstageCSS>>/%==================================================%/
***/



#backstageArea {background-color:#099;}
#backstageArea a {background-color:#0cc;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;}

!!!BackstageCSSOrig


#backstageArea {background-color:#00b;}
#backstageArea a {background-color:#abf;color:#fff; border:none;}
#backstageArea a:hover {background:#fff; color:#f00; }
#backstageArea a.backstageSelTab {background:#fff; color:#000;}
#backstageButton {background:transparent; }
#backstageButton a {background:transparent; color:#fff; 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 {display:none; position:relative; overflow: hidden; z-index:150; padding:0.2em 0.5em 0.2em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:normal; margin-left:0.5em; padding:0.2em 0.5em 0.2em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em; 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 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: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;}

config.tasks.sidebaroptions = {
	text: "SideBarOptions",
	tooltip: "A custom backstage tab",
	content: "|width:30em;<<tiddler SideBarOptions>><<tiddler SideBarTabs>>|"
};
config.backstageTasks.push("sidebaroptions");
config.tasks.slantedMenu = {
	text: "SlantedMenu",
	tooltip: "A custom backstage tab",
	content: "|width:30em;<<tiddler TrueSlantedMenu>><<tiddler MoreToolsSlider>><<tiddler ViewTabs>>|"
};
config.backstageTasks.push("slantedMenu");
/***
!!!<<gradient horiz #fc3 #fff >><<tiddler RefreshStyles>>&nbsp;ButtonStyle>>/%==================================================%/
***/


input.btn{
   color:#008;
   font-family:Trebuchet MS,aerial,helvetica,sans-serif;
   font-size:85%;
   font-weight:normal;
   background-color:#fcb;
   border:1px solid;
   border-top-color:#00f;
   border-left-color:#00f;
   border-right-color:#00f;
   border-bottom-color:#00f;}


input.btnhov{
   color:#f00;
   border-top-color:#c06;
   border-left-color:#c06;
   border-right-color:#c06;
   border-bottom-color:#c06;}
/***
!!!<<gradient horiz #fc3 #fff >><<tiddler RefreshStyles>>&nbsp;CenterBoxCSS>>/%==================================================%/
***/

/* Layout Stylesheet */ 

#logo {
 margin: 0; 
 text-align: center
 }

#bar-top {
 width: 100%; 
 height: 30px; 
 background: #c0c0c0;
 color: #333333;
 border: solid #000000;
 border-width: 2px 0; 
 margin: 0;
}

#bar-bottom {
 width: 100%; 
 height: 30px;
 position:relative; 
 background: #c0c0c0; 
 color: #333333;
 border: solid #000000; 
 border-width: 2px 0;
 }

#content { 
 height: 350px; 
 width: 100%; 
 position:relative;
 border: solid #000000; 
 border-width: 0px 0px; 
 background: #ffffff;
 color: #333333;
 overflow: auto;
 margin:auto;
 }

/* Presentation Stylesheet */ 
 
p {
 margin:0;
 padding:10px 20px 0px 20px;
 text-align:left;
 }

p:first-letter {
 font-size: 80%; 
 font-weight: bold;
 color:blue;
 }
 
h4 {
 margin:0; 
 padding: 5px 0;
 }

pre {
 text-align:left;
 margin:0;
 padding:20px 0;
 }
<html><hide linebreaks>
<div id="logo" align="center"><<tiddler ElectricBlue>></div>
<div id="bar-top" align="center"><<tiddler SlantedMenu>></div>
<div id="content"><<tiddler MainContent>>
<div align="center" style="color:red;">Ver 2.4</div>

</div>
<div id="bar-bottom"></div>
<div id="copy"><<tiddler contentFooter>></div>
</html>
<script label="$2">
	var tiddler=story.findContainingTiddler(place);
	story.displayTiddler(tiddler,"$1");
	story.closeTiddler(tiddler.id.substr(7)); // close self
	return false;
</script>
/***
|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
}
//}}}
@@color:#c06;
{{textcenter{
!!!Two Column Fixed Width with Header & FooterVer 2.3
}}}
{{textleftM{
This template is actually a replica of one of my other websites which uses tables for the very same layout. I wanted to see could it be done and it seems to work perfect.


This is basically set up as follows: there is a main outer div which centers the page and is a fixed width. There are 4 main div's within this outer div; header (#hdr), bar (#bar), body (#body) and footer (#ftr). The body div holds 2 more divs, the left div which is for navigation and the right div which is for our content.

One drawback we see immediatly is getting equal heights for the left navigation div and right content div. The work around I use for this is: whichever is likely to be the shortest (in height) div, probably the left navigation div, set the background of the #body div the same as this, also the border separating the two divs - that should be on the right content div.

Another problem discovered recently was that when you use the float property it can cause the floated divs to "jump out" of their container block. The workaround I found for this was simply to specify a height for the container div.

This template has been tested in:

    * Mozilla 1.5b & Firebird 0.6.1
    * Internet Explorer 6
    * Netscape 7.1
    * Opera 7.11

Changes in this version:

   1. removed box hack
   2. added margin:auto; to #outer div for centering.
   3. big problem in moz/ns was the bodyblock div,with both the left col and content col floated they were "lifted" out of the bodyblock with then collapsed. IE and Opera were ok. removed float left from content div, added align="right" to the html of the bodyblock and then text-align:left; to the content div to bring the content back. it's ugly but works. using text-align:right; instead of align="right" will not work in moz/ns


Filler Content

Dáig alta in mac sin i tig a athar & a mathar icon airdig i m-Maig Muirthemne, ocus adfeta dó scéla na maccaemi i n-Emain. Dáig is amlaid domeill Conchobar in rigi, o ro gab rígi in rí, .i. mar atraig fóchetóir césta & cangni in choicid d'ordugud. In lá do raind i trí asa athlil: cetna trian de fóchetóir ic fegad na maccaem ic imbirt chless cluchi & immanae, in trian tanaise dond ló ic imbirt brandub & fidchell, & in trian dedenach ic tochathim bíd & lenna, con-dageib cotlud for cách, aes cíuil & airfitid dia thalgud fri sodain. Ciataim ane ar longais riam reme dabiur bréthir, ar Fergus, na fuil in hErind no i n-Albain óclach macsamla Conchobair.

Ocus adfeta don mac sin scéla na maceáem & na maccraide i n-Emain, & radis in mac bec ria mathair ar co n-digsed dá chluchi do chluchemaig na Emna. Romoch duitsiu sain a meic bic, ar a mathair, co n-deoch anruth do anrothaib. Ulad lett no choimthecht ecin do chaimthechtaib Conchobair, do chor th' aesma & t'imdegla for in maccraid. Cían lim-sa di sodain a mathair, ar in mac bec, & ni biu-sa oca idnaide acht tecoisc-siu dam-sa cia airm itá Emain. Is cían uait, ar a mathair, airm in-das-fil. Sliab Fúait etrut & Emain. Dobér-sa ardmes furri amne, ar esium.@@
}}}
/***
|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 ONLY 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.
<<<
Note: some recent core tweaks have been moved to separate plugins for more convenient stand-alone installation.  For additional core enhancements, please see:
*[[ExternalTiddlersPlugin]]
*[[StickyPopupPlugin]] 
<<<
***/

// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/42 - patch submitted for release in TW2.3.1
// //
// // 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.
//{{{
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";
};
//}}}
// // }}}

// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/470 - OPEN
// //
// // 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>>}}})
//{{{
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/444 - OPEN
// //
// // When invoking a macro, this tweak makes the current containing tiddler object and DOM rendering location available as a 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 - OPEN
// //
// // 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/468 - patch submitted for release in TW2.3.1
// //
// // 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()
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/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.  Note: by default, this tweak only adds the "creator" field to newly created tiddlers. However, if you edit an existing tiddler that doesn't have a creator field defined, you can still force this tweak to add the missing "creator" field by enabling the following configuration checkbox:
// //
// // ''<<option chkForceCreatorField>> add missing "creator" fields when editing existing tiddlers''
// // //usage:// {{{<<option chkForceCreatorField>>}}}
//{{{
// hijack saveTiddler()
if (config.options.chkForceCreatorField==undefined) config.options.chkForceCreatorField=false;
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 || (config.options.chkForceCreatorField && !store.getValue(title,"creator")))
		store.setValue(title,"creator",config.options.txtUserName);
	return tiddler; // ELS 12/21/07
}
//}}}
// // }}}

// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/458 - patch submitted for release in TW2.3.1

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("[["+title+"]]");
	return link;
}
//}}}
// // }}}

// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/67 - OPEN

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)

FIX: remove 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;
};
//}}}
// // }}}

// // {{groupbox small{
// // This tweak adds URL paramifier handlers for "hide:elementID" and "show:elementID".  This is useful for forcing the display state of specific TW page elements, without requiring StyleSheet changes.  For example, if your customized StyleSheet hides the sidebar (useful for 'read only' published documents), you can force it to display when you need to edit the document by adding {{{#show:sidebar}}} to the document URL.  Alternatively, you might want to supress non-tiddler content when printing by hiding the sidebars and header (e.g., {{{#hide:mainMenu hide:sidebar hide:header}}})
//{{{
if (config.paramifiers) { // check for backward-compatibility
	config.paramifiers.hide = { onstart: function(id) { var e=document.getElementById(id); if (e) e.style.display="none"; } };
	config.paramifiers.show = { onstart: function(id) { var e=document.getElementById(id); if (e) e.style.display="block"; } };
}
//}}}
// // }}}

// // {{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:''|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);
};


}
//}}}
/***
!!!<<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>>/%==================================================%/
***/

/*{{{*/

.scroll{overflow: scroll}
.scrollauto {overflow: auto}

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

.liststyleNone{list-style:none;}

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

.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>>/%==================================================%/
***/
/*{{{*/

.c06 {color:#c06;}
.gray9 {color:#999;}

.fontsize40 {font-size:0.5em}
.fontsize80 {font-size:0.75em}


.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%;
}



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

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

.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:1em;}
.imgfloatleft{display:block;float:left;padding:1em;}
.imgfloatcenter{display:block;margin-left: auto;margin-right: auto;padding:0.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;}
.darkgrayLink a {color:#999;}
.editLink a {color:#ccc;font-size:0.01em}

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

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

{{{
For tiddler titles with spaces
#tiddlerNew\000020Tiddler a {color: #f00;}
}}}

#tiddlerSystemContents .tabContents {padding 0.5em;margin:auto;}

#tiddlerTabTimeline {list-style:none;}

#tiddlerScience .firstletter{
float:left;
width:0.75em;
margin-right:0.2em;
font-size:400%;
font-family:times,arial;
line-height:70%;
}


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


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

#tiddlerTranslate .viewer {
overflow: auto;
}

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

#tiddlerNewWelcome .viewer .tabContents {
background: transparent;
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 }


#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 {
  text-align: center;
 clear: both;
 color:#ccc;
 background: transparent;
 padding: 1em 2em;
 font-weight:normal;
}


#ContentFooter a {
 color:#ccc;
}

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

!!!!!<<gradient horiz #fcb #fff>>&nbsp;Customisation>>

<<tiddler NextTiddler with: [[NewFeatures]]  'previous'>> @@color:#C06;''&laquo;4 &raquo;'' @@  <<tiddler NextTiddler with: [[Plugins]]  'next'>>

You can customise the appearance and behaviour of TiddlyWiki to almost any degree you want:

* Use the ColorPalette to change the basic colour scheme
* Create a CustomStyleSheet for finer grained control over the appearance
* Customise the PageTemplate, ViewTemplate or EditTemplate to change the composition of the page and the layout of individual tiddlers
* Use off-the-shelf themes from TiddlyThemes
* Visit the Configuration summary to see all the special configuration tiddlers
* Install Plugins to extend the core functionality (find them at TiddlyVault or you can try writing or adapting your own)
* Use TiddlyBookmarklets for low level hacking of TiddlyWiki documents

There are also a bunch of TiddlyWikiTools that you can use to enhance TiddlyWiki.
Tue, Nov 27, 2007 10:00
function onClickDefaultHome(e) {
story.closeAllTiddlers();
config.options.txtDefaultTiddlers = "";
saveOptionCookie('txtDefaultTiddlers');
var start = store.getTiddlerText("EditingTiddlers");
if(start)
story.displayTiddlers(null,start.readBracketedList());
}
config.macros["defaultHome"] = {label: "Home", prompt: "Show the default tiddlers", title: "Home"};
config.macros.defaultHome.handler = function(place) {
createTiddlyButton(place,this.label,this.prompt,onClickDefaultHome);
}
[[{Index}]]
[[Instructions]]


/***
|''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");

}
//}}}
/***
|!''Name:''|!''E''asily ''A''daptable ''S''ource ''E''ditor|
|''Description:''|this framework allows you to easily create commands that work on the current tiddler text selection in edit mode|
|''Version:''|0.1.0|
|''Date:''|13/01/2007|
|''Source:''|http://yann.perrin.googlepages.com/twkd.html#E.A.S.E|
|''Author:''|[[Yann Perrin|YannPerrin]]|
|''License:''|[[BSD open source license]]|
|''~CoreVersion:''|2.x|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
***/
////Messages Definition
//{{{
config.messages.Ease = {
noselection:"nothing selected",
asktitle:"enter the new tiddler title",
exists:" already exists, please enter another title",
askForTagsLabel:"enter the new tiddler tags",
tiddlercreated:" tiddler created"
}
//}}}
////
//{{{
if (!window.TWkd) window.TWkd={context:{}};
if (!TWkd.Ease)
 TWkd.Ease = function (text,tooltip){
 this.text = text;
 this.tooltip = tooltip;
 this.modes = [];
 this.addMode = function(modeDefinition) {this.modes.push(modeDefinition);};
 this.handler = function(event,src,title) {
 TWkd.context.command = this;
 TWkd.context.selection=this.getSelection(title);
 if (this.modes.length==1) {
 this.modes[0].operation();
 }
 else {
 var popup = Popup.create(src);
 if(popup) {
 for (var i=0; i<this.modes.length; i++) {
 createTiddlyButton(createTiddlyElement(popup,"li"), this.modes[i].name, this.modes[i].tooltip, this.OperateFromButton, null, 'id'+i, null);
 }
 Popup.show(popup,false);
 event.cancelBubble = true;
 if (event.stopPropagation) event.stopPropagation();
 return false;
 }
 }
 };
 };

TWkd.Ease.prototype.OperateFromButton = function(e){
 var commandMode=this.getAttribute('Id').replace('id','');
 TWkd.context.command.modes[commandMode].operation();
};

TWkd.Ease.prototype.getTiddlerEditField = function(title,field){
 var tiddler = document.getElementById(story.idPrefix + title);
 if(tiddler != null){
 var children = tiddler.getElementsByTagName("*")
 var e = null;
 for (var t=0; t<children.length; t++){
 var c = children[t];
 if(c.tagName.toLowerCase() == "input" || c.tagName.toLowerCase() == "textarea"){
 if(!e) {e = c;}
 if(c.getAttribute("edit") == field){e = c;}
 }
 }
 if(e){return e;}
 }
} // closes getTiddlerEditField function definition
 
TWkd.Ease.prototype.getSelection = function(title,quiet) {
 var tiddlerTextArea = this.getTiddlerEditField(title,"text");
 var result = {};
 if (document.selection != null && tiddlerTextArea.selectionStart == null) {
 tiddlerTextArea.focus();
 var range = document.selection.createRange();
 var bookmark = range.getBookmark();
 var contents = tiddlerTextArea.value;
 var originalContents = contents;
 var marker = "##SELECTION_MARKER_" + Math.random() + "##";
 while(contents.indexOf(marker) != -1) {
 marker = "##SELECTION_MARKER_" + Math.random() + "##";
 }
 var selection = range.text;
 range.text = marker + range.text + marker;
 contents = tiddlerTextArea.value;
 result.start = contents.indexOf(marker);
 contents = contents.replace(marker, "");
 result.end = contents.indexOf(marker);
 tiddlerTextArea.value = originalContents;
 range.moveToBookmark(bookmark);
 range.select();
 }
 else {
 result.start=tiddlerTextArea.selectionStart;
 result.end=tiddlerTextArea.selectionEnd;
 }
 result.content=tiddlerTextArea.value.substring(result.start,result.end);
 result.source=title;
 if (!result.content&&!quiet) displayMessage(config.messages.Ease.noselection);
 return(result);
}//closes getSelection function definition

// replace selection or insert new content
TWkd.Ease.prototype.putInPlace=function(content,workplace) {
 var tiddlerText = this.getTiddlerEditField(workplace.source,"text");
 tiddlerText.value = tiddlerText.value.substring(0,workplace.start)+content+tiddlerText.value.substring(workplace.end);
}

// asking for title
TWkd.Ease.prototype.askForTitle = function(suggestion) {
 if (!suggestion)
 suggestion = "";
 var newtitle;
 while (!newtitle||store.tiddlerExists(newtitle))
 {
 if (store.tiddlerExists(newtitle))
 displayMessage(newtitle+config.messages.Ease.exists);
 newtitle = prompt(config.messages.Ease.asktitle,suggestion);
 if (newtitle==null)
 {
 displayMessage(config.messages.Ease.titlecancel);
 return(false);
 }
 }
 return(newtitle);
}//closes askForTitle function definition

// creation of a new tiddler
TWkd.Ease.prototype.newTWkdLibTiddler = function(title,content,from,askForTags){
 var tiddler = new Tiddler();
 tiddler.title = title;
 tiddler.modifier = config.options.txtUserName;
 tiddler.text = content;
 (from) ? tiddler.tags = [from] : tiddler.tags=[];
 if (askForTags)
 tiddler.tags = prompt(config.messages.Ease.askForTagsLabel,'[['+from+']]').readBracketedList();
 store.addTiddler(tiddler);
 //store.notifyAll();
 displayMessage(title+config.messages.Ease.tiddlercreated);
}

if (!TWkd.Mode)
 TWkd.Mode = function (name,tooltip,ask,operation) {
 this.name = name;
 this.tooltip = tooltip;
 this.ask = ask;
 this.operation = operation;
 };
//}}}
<!--{{{-->
<div class='toolbar' macro='toolbar +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 macro='annotations'></div>
<span macro='toolbar format slice'></span> 
<div class='editor' macro='edit text'></div>

<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar +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 macro='annotations'></div>
<div class='editor' macro='edit text'></div>

<!--}}}-->
[[BackstageCSS]]
[[ButtonStyle]]
[[CenterBoxCSS]]
[[CustomCSS]]
[[CustomCSS]]
[[EditingTiddlers]]
[[EditTemplate]]
[[PageCSS]]
[[PageTemplate]]
[[SlantedStyle]]
[[StyleSheet]]
[[StyleSheetTiddlersBar]]
[[ViewTemplate]]
[[WebPageTLCF]]
[[WebStyleSheet]]
<<gradient vert #00c #0ff #008>><br>@@color:#000;font-size:24pt;~ElectricBlue@@<br>@@color:#f00;an experiment in web site design@@>>
<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</a>')

/*]]>*/
</script>
<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 #fcb #fff>>&nbsp;Entities>>
(~Non-Keyboard Characters)
Supplied courtesy of [[TW Help|http://twhelp.tiddlyspot.com/]]
<<<
GreekEntities
HTMLEntities
LatinEntities
MathEntities
<<<
 @@color:#C06;''&raquo; &raquo;'' @@ Tabs excluded From Lists
----
<script>
// get all tiddlers tagged with "excludeLists"
var tids=store.getTaggedTiddlers("excludeLists");
// keep only tiddlers *also* tagged with New
var list=[];
for (var t=0; t<tids.length; t++)
   if (tids[t].isTagged("excludeLists")) 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> 
 @@color:#C06;''&raquo; &raquo;'' @@ Tabs excluded from searches.
----
<script>
// get all tiddlers tagged with "excludeSearch"
var tids=store.getTaggedTiddlers("excludeSearch");
// 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> 
!!!<<gradient horiz #fcb #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 keybindings to ctrl+shift+letter and, because these plugins areimplemented at a browser-native level (as opposed to TW javascript),
their key bindings are likely to take precedent, even if you couldcapture the keystrokes in TW. 
/***
|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|
!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 DISABLED
***/
//{{{

{{{
function getHeight()
 { var windowHeight = 0;
   var windowDiff = 155;
   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")
{{{

//}}}
/***
|Name|FontSizePlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#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://tw.lewcid.org/#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 : 5
};

//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();
                  }
};
//}}}
Highlight this message and right click and copy it. 
 
''Now go back to the open tiddler in the side bar LEFT CLICK ON IT and type CONTROL-V '' 

Your wish has been fulfilled You used a right click context copy in the main window and pasted it into an open tiddler in the sidebar :-)

Name it :"Magic" and seal it by clicking "done" in the toolbar. 
To finalize this procedure go to the upper right corner of the SIDEBAR and click "backstage" to drop down the menu.
Click "save" in the backstage menu and wait for the message that your Magic tiddler was saved.
Now go to the MAIN WINDOW again and search for the word "Magic again see if it isn't the one with your secret message and the copy and paste.

Tell the group about this :-)

Morris :-)
<html><a
 href="javascript:void(0)"
 onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('EditingTiddlers').readBracketedList())"
>Home</a></html> 
!!!<<gradient horiz #fcb #ffffff>>[[Fri]]^^<<tiddler CloseThisOpen with: MiniPlanner  '« back'>>[[edit»|Fri]] ^^>>
*It's too late in the week to start anything.
/***
|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]||" «FullScreen» ";
        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();
}
//}}}
!!!!!<<gradient horiz #fcb #fff>>&nbsp;Plugins>>

<<tiddler NextTiddler with: [[Plugins]]  'previous'>> @@color:#C06;''&laquo;6 &raquo;'' @@  <<tiddler NextTiddler with: [[HowToUpgrade]]  'next'>>

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. (Use the close all button over on the right to clear all the displayed tiddlers and start again).

There is an extensive Community documentation wiki, including an invaluable FAQ. Other useful guides include:

* Dave Gifford's [[TiddlyWiki for the Rest of Us|http://www.giffmex.org/twfortherestofus.html]] and his [[slideshow introduction|http://giffmex.tiddlyspot.com/]]
* Morris Gray's [[TW Help - TiddlyWiki help file for beginners|http://twhelp.tiddlyspot.com]]
* Dmitri Popov's TiddlyWiki quick reference card
* Screencasts from JimVentola and LeonKilat.

When you're ready to create your own TiddlyWiki on your computer, follow the instructions in DownloadSoftware and SaveChanges. There is also a free hosted service at http://tiddlyspot.com/ that makes it easier to share your TiddlyWiki with others (for more demanding applications there are several other ServerSide solutions available).
Tue, Nov 27, 2007 10:00
|>|>| !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; |
|>|>|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 |
| {{{&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 |


|>|>|width:96%; !Whitespace |
|vertical-align:middle; !Symbol | !~~(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) |

/***
|Name|HTMLFormattingPlugin|
|Source|http://www.TiddlyTools.com/#HTMLFormattingPlugin|
|Version|2.1.4|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Use wiki syntax formatting inside of HTML content|

The shorthand Wiki-style formatting syntax of ~TiddlyWiki is very convenient and enables most content to be reasonably well presented. However, there are times when tried-and-true HTML formatting syntax allows more more precise control of the content display.

When HTML formatting syntax is embedded within a tiddler (in between {{{<}}}{{{html>}}} and {{{<}}}{{{/html>}}} markers) TiddlyWiki passes this content to the browser for processing as 'native' HTML.  However, TiddlyWiki does not also process the HTML source content for any embedded wiki-formatting syntax it may contain.  This means that while you can use HTML formatted content, you cannot mix wiki-formatted content within the HTML formatting.
!!!!!Usage
<<<
The ~HTMLFormatting plugin allows you to freely ''mix wiki-style formatting syntax within HTML formatted content'' by extending the action of the standard TiddlyWiki formatting handler.

When a tiddler is about to be displayed, ~TiddlyWiki looks for tiddler content contained within ''<{{{html}}}>'' and ''<{{{/html}}}>'' HTML tags.  This content (if any) is passed directly to the browser's internal "rendering engine" to process as ~HTML-formatted content.  Once the HTML formatting has been processed, all the pieces of text occuring in between the HTML formatting are then processed by the ~TiddlyWiki rendering engine, one piece at a time, so that normal wiki-style formatting can be applied to the individual text pieces.
<<<
!!!!!Line breaks
<part Linebreaks hidden>
<<<
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.
<<<
</part>
!!!!!How it works
<<<
The TW core support for HTML does not let you put ANY wiki-style syntax (including TW macros) *inside* the {{{<html>...</html>}}} block.  Everything between {{{<html>}}} and {{{</html>}}} is handed to the browser for processing and that is it.  Fortunately, this plugin ADDS the ability to let you put wiki-syntax (including macros) inside the html.  It does this by first giving the tiddler source content to the browser to process the HTML, and then handling any wiki-based syntax that remains afterward.

However, not all wiki syntax can be safely passed through the browser's parser. Specifically, any TW macros inside the HTML will get 'eaten' by the browser since the macro brackets, {{{<<...>>}}} use the "<" and ">" that normally delimit the HTML/XML syntax recognized by the browser's parser.

Similarly, you can't use InlineJavascript within the HTML because the {{{<script>...</script>}}} syntax will also be consumed by the browser and there will be nothing left to process afterward.  Note: unfortunately, even though the browser removes the {{{<script>...</script>}}} sequence, it doesn't actually execute the embedded javascript code that it removes, so any scripts contained inside of <html> blocks in TW are currently being ignored. :-(

As a work-around to allow TW *macros* (but not inline scripts) to exist inside of <html> formatted blocks of content, the plugin first converts the {{{<<}}} and {{{>>}}} into "%%(" and ")%%", making them "indigestible" so they can pass unchanged through the belly of the beast (the browser's HTML parser).

After the browser has done its job, the wiki syntax sequences (including the "undigested" macros) are contained in #text nodes in the browser-generated DOM elements.  The plugin then recursively locates and processes each #text node, converts the %%( and )%% back into {{{<<}}} and {{{>>}}}, passes the result to wikify() for further rendering of the wiki-formatted syntax into a containing SPAN that replaces the previous #text node.  At the end of this process, none of the encoded %%( and )%% sequences remain in the rendered tiddler output.
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''HTMLFormattingPlugin'' (tagged with <<tag systemConfig>>)
^^documentation and javascript for HTMLFormatting handling^^
<<<
!!!!!Revision History
<<<
''2006.09.10 [2.1.4]'' update formatter for 2.1 compatibility (use this.lookaheadRegExp instead of temp variable)
''2006.05.28 [2.1.3]'' in wikifyTextNodes(), decode the *value* of TEXTAREA nodes, but don't wikify() its children.  (thanks to "ayj" for bug report)
''2006.02.19 [2.1.2]'' in wikifyTextNodes(), put SPAN element into tiddler DOM (replacing text node), BEFORE wikifying the text content.  This ensures that the 'place' passed to any macros is correctly defined when the macro is evaluated, so that calls to story.findContainingTiddler(place) will work as expected. (Thanks for bug report from GeoffSlocock)
''2006.02.05 [2.1.1]'' wrapped wikifier hijack in init function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals
''2005.12.01 [2.1.0]'' don't wikify #TEXT nodes inside SELECT and TEXTAREA elements
''2005.11.06 [2.0.1]'' code cleanup
''2005.10.31 [2.0.0]'' replaced hijack wikify() with hijack config.formatters["html"] and simplified recursive WikifyTextNodes() code
''2005.10.09 [1.0.2]'' combined documentation and code into a single tiddler
''2005.08.05 [1.0.1]'' moved HTML and CSS definitions into plugin code instead of using separate tiddlers
''2005.07.26 [1.0.1]'' Re-released as a plugin. Added <{{{html}}}>...</{{{nohtml}}}> and <{{{hide newlines}}}> handling
''2005.07.20 [1.0.0]'' Initial Release (as code adaptation)
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
<<<
!!!!!Code
***/
//{{{
version.extensions.HTMLFormatting = {major: 2, minor: 1, revision: 4, date: new Date(2006,9,10)};

// 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];
			// optionally suppress wiki-style literal handling of newlines
			// strip any carriage returns added by Internet Explorer's textarea edit field
			// encode newlines as \n so Internet Explorer's HTML parser won't eat them
			// encode macro brackets (<< and >>) so HTML parser won't eat them
			if (html.indexOf('<hide linebreaks>')!=-1) html=html.replace(regexpNewLine,' ');
			html=html.replace(regexpCarriageReturn,'');
			html=html.replace(regexpNewLine,'\\n');
			html=html.replace(/<</g,'%%(').replace(/>>/g,')%%');
			// create span to hold HTML
			// parse HTML and normalize the results
			// walk node tree and call wikify() on each text node
			var e = createTiddlyElement(w.output,"span");
			e.innerHTML=html;
			e.normalize(); 
			wikifyTextNodes(e);
			// advance to next parse position
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
}

// wikify text nodes remaining after HTML content is processed (pre-order recursion)
function wikifyTextNodes(theNode)
{
	// textarea node doesn't get wikified, just decoded... 
	if (theNode.nodeName.toLowerCase()=='textarea')
		theNode.value=theNode.value.replace(/\%%\(/g,'<<').replace(/\)\%%/g,'>>').replace(regexpBackSlashEn,'\n');
	else for (var i=0;i<theNode.childNodes.length;i++) {
		var theChild=theNode.childNodes.item(i);
		if (theChild.nodeName.toLowerCase()=='option') continue;
		if (theChild.nodeName.toLowerCase()=='select') continue;
		wikifyTextNodes(theChild);
		if (theChild.nodeName=='#text') {
			var txt=theChild.nodeValue;
			// decode macro brackets and newlines
			txt=txt.replace(/\%%\(/g,'<<').replace(/\)\%%/g,'>>').replace(regexpBackSlashEn,'\n');
			// replace text node with wikified() span
			var newNode=createTiddlyElement(null,"span");
			theNode.replaceChild(newNode,theChild);
			wikify(txt,newNode);
		}
	}
}
//}}}
@@color:#000;Maybe there should be something in here.@@
<html><hide linebreaks>
<div class="outer">
  <div id="wrap">
    <div id="header"></div>
    <div id="nav"></div>
     <div id="sidebar" macro='tiddler SideBarTabs'></div>
    <div id="main" macro='tiddler SideBarOptions'></div>
    <div id="SBl-col" macro='tiddler SideBarOptions'></div>
    <div id="SBcont" macro='tiddler SideBarTabs'><div>
     <div id="footer"></div>
  </div>
</div>
</html>
/***
!!!<<gradient horiz #fc3 #fff >><<tiddler RefreshStyles>>&nbsp;TwoColumnCSS>>/%==================================================%/
http://tinyurl.com/3yt37
***/

div.outer {
height:100%;
 min-width:50px;
background:#fcf;
    }

wrap {
height:100%;
    background:#occ;
    margin:0 auto;
    width:750px;
    }

header {
    background:#ddd;
    }

nav {
    background:#c99;
    }

main {
height:100%;
    background:#9c9;
    float:left;
    width:150px;
    }

sidebar {
height:100%;
    background:#c9c;
    float:right;
    width:150px;
    }

footer {
    background:#cc9;
    }
<<gradient  vert   #0000C8 #003>>[img[Science Matters|http://img512.imageshack.us/img512/2316/sciencematterslogokl1.gif]]<br>@@color:#abf;an experiment in web site design<br><br>@@>>
!!!!!<<gradient horiz #fcb #fff>>&nbsp;Help>>
''[[SidebarNews Group|http://groups.google.com/group/sidebarnews]]'' 
A discussion group for sidebar topics and other ~TiddlyWiki applications+++[more...]
<<<
Other related discussion groups of interest (Please be considerate about cross posting unless deemed important.)
[[TiddlyWiki|http://groups.google.com/group/TiddlyWiki?lnk=li]]
[[TiddlyWikiDiv|http://groups.google.com/group/TiddlyWikiDev?lnk=li]]
[[TiddlyWikiDocs|http://groups.google.com/group/tiddlywikidocs?lnk=li]]
<<<
===

----
!!!!!<<gradient horiz #fcb #fff>>&nbsp;Tips  @@color:#C06;''&raquo; &raquo;'' @@ >>
|>|!The Menu |
|bgcolor:#fcb;''« Load'' |@@color:#c06;loads this page into FF sidebar@@|
|bgcolor:#fcb;''~NoTabs'' |@@color:#c06;toggles the tabs to hidden@@|
|bgcolor:#fcb;''Edit'' |@@color:#c06;toggles the toolbars to visible@@|
|bgcolor:#fcb;''View'' |@@color:#c06;all tabs by category@@|
|bgcolor:#fcb;''Tools''|@@color:#c06; for saving-admin-@@|
|bgcolor:#fcb;''Options'' |@@color:#c06; Search titles text tags@@|
|bgcolor:#fcb;''Font Size''|@@color:#c06; (''+ = –'') changes size +/– times 8@@|

 @@color:#C06;''&raquo; &raquo;'' @@ Both toggles ''Edit'' and ''~NoTabs''can be set to default to either ''show'' or ''hide'' upon startup; in the SlantedMenu.  Tabs can be put into edit mode by double-clicking on them and can be saved by clicking on the exclamation-mark (!) in the tab itself. See more on editing below.

 @@color:#C06;''&raquo; &raquo;'' @@ When first clicking on a toggle it usually takes a second click to get it into synch. after that one click should suffice per session.

 @@color:#C06;''&raquo; &raquo;'' @@ ''An important note about tabs!'' TiddlersBarPlugin has a default option in it that closes all other tabs if you click on the already 'selected tab'  i.e. (the tab showing the brightest color).If you find this happening and don't want to accidentally close all your open tabs then got to TiddlersBarPlugin and where it says "close all" type in "jump".

 @@color:#C06;''&raquo; &raquo;'' @@ The ideal ''minimum'' width of the sidebar is to narrow it with the tabs showing until the Menu just starts to wrap then relax it back a fraction. The tabs will continue to wrap before the menu does. The ideal ''maximum'' is what makes you happy regardless of how the sidebar feels about how it looks. 

 @@color:#C06;''&raquo; &raquo;'' @@ You can specify what size font you want when you load into the sidebar. Go to the bookmark, right click on it, and in the properties of the bookmark at the end of the URL add ''/#font:size'' with size being anything from 40 to 200. http://sidebarnotes.tiddlyspot.com/#font:40 is the smallest font.

----
''Copying between main wIndow and sidebar''
{{c06{
~Control-C to copy
~Control-V to paste
}}}
''Copy from main window to sidebar''
{{c06{
Highlight in main window: Right-click and copy
Paste in sidebar: ~Control-V
}}}
''Copying from sidebar to main window''
{{c06{
~Control-C to copy
~Control-V to paste Or Right-click and paste
}}}
''Editing''
When editing Sidebar Notes:

Tabs can be put into edit mode by double-clicking on them and can be saved by clicking on the exclamation-mark (!) in the tab itself. See below.

For space and appearence reasons the normal toolbar( jump close close others edit permalink references) and the editing toolbar (done cancel delete) are hidden from view by default.  They can be toggled on and off with the ''Edit'' button on the menu.  When in editing mode the button changes to ''Editing''. (''Note:'' Certain conditions while editing Opening and closing other tabs can cause the toolbar to toggle back off, simply click the button again to restore it.')To change the default to normally ''on''edit the SlantedMenu.  The code {{{<<toggleToolyBars "" "" hide>>}}} should be changed from ''hide'' to ''show''

 @@color:#C06;''&raquo; &raquo;'' @@ Saving changes via the ''backstage toolbar'' by passes the alert box warning of tiddlers opened for editing. Saving through ''<save changes>'' is preferred.

 @@color:#C06;''&raquo; &raquo;'' @@ If you get an Alert when clicking on a link in the sidebar it is probably trying to load into the main Main Window. In any case it is safest to click cancel and check for unsaved ~TiddlyWikis.  

 @@color:#C06;''&raquo; &raquo;'' @@ You should be consistent where you edit Sidebar Notes.  Whether in the sidebar or main window always save and refresh immediately thereafter.  If you edit in the sidebar and even if you save and refresh probably the next action you perform , say clicking on another page will result in an alert box saying there are unsaved changes. clicking cancel will only result delaying the inevitable.  What it's trying to do is reload in the main window, click OK and let it.

!!!!!<<gradient horiz #fcb #fff>>&nbsp;On Comments>>

The TiddlerNotesPlugin allows you to add notes/comments to tiddlers, without needing to edit the original tiddler. This means that your original content will remain unaltered, and if you update it in the future, you won’t lose your notes. Notes are stored in separate tiddlers, but can be viewed and edited from within the original tiddler.

For a tiddler titled "~MySlide", the notes are by default saved in a tiddler titled "~MySlide-Notes" and is given a tag of "Notes". The suffix and tags of the notes tiddlers are customizable. You can have one or multiple notes per tiddlers. So it is possible to have for example, teacher's notes and student's notes in the same file.

Notes can be configured to start off blank, or pre-filled with the contents of the original tiddler. See more details in TiddlerNotesPlugin. 

!!!!!<<gradient horiz #fcb #fff>>&nbsp;About  hosting Sidebar Notes on ~TiddlySpot>>

''If you wish to have your Sidebar Notes hosted on Tiddlyspot ''
----
# Goto http://tiddlyspot.com and obtain a new ~TiddlyWiki
# Download it and save it in a convenient place
# If you don't already have a copy of Sidebar Notes get a new one by clicking here or here http://sidebarnotes.tiddlyspot.com and then click the download button under Tools 
# Open backstage in the copy of Sidebar Notes that you have downloaded to your hard disk.
# Import the TspotSetupPlugin ''From:'' your New ~TiddlyWiki ''To:'' Sidebar Notes when asked to overwrite it say yes.
# Save and reload

!!!!!<<gradient horiz #fcb #fff>>&nbsp;The Outer Limits>>

 @@color:#C06;''&raquo; &raquo;'' @@ Sometimes opening certain tabs in the sidebar will cause them to also open in the Main Window. This is not often, consistent or predictable.  Like some copying and pasting it seems it's being controlled by some Lower Intelligence.
{{c06{
When editing in the main window saving and refreshing then killing the sidebar and reloading into the sidebar again sometimes does not put the new edits into the sidebar until it too is refreshed.  I think it might have to do wih the permalinks I'll be back.
}}}
!!!!!<<gradient horiz #fcb #fff>>&nbsp;[[History]]>>
@@color:#C06;''&raquo; &raquo;'' @@ History of Tabs listed by date of last modification.
----
<<timeline>>
!!!!!<<gradient horiz #fcb #fff>>&nbsp;About ~HowToUpgrade>>

<<tiddler NextTiddler with: [[GettingStarted]]  'previous'>> @@color:#C06;''&laquo;7 &raquo;'' @@  <<tiddler NextTiddler with: [[Introduction]]  'next'>>

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, 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 you're using is not compatible with a change in the new release. If so, you can repeat the process omitting the troublesome plugins.
Wed, Dec 5, 2007 7:57
config.options.chkSearchIncremental=false;
!!!!!<<gradient horiz #fcb #fff>>&nbsp;IndexProject>>
<<<
<html><ol><li><a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('IndexProjectList').readBracketedList())"><span title="Close all tiddlers and open Welcome" style="cursor:pointer">IndexProject</span></a></li></ol></html>
<<<
[[{Index}]]
StepThree
StepTwo
StepOne

/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Version|1.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|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.
!!!!!Usage
<<<
When installed, this plugin adds new wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} markers, so that it can be treated as embedded javascript and executed each time the tiddler is rendered.

''Deferred execution from an 'onClick' link''
By including a {{{label="..."}}} parameter in the initial {{{<script>}}} marker, the plugin will create a link to an 'onclick' script that will only be executed when that specific link is clicked, rather than running the script each time the tiddler is rendered.  You may also include a {{{title="..."}}} parameter to specify the 'tooltip' text that will appear whenever the mouse is moved over the onClick link text

''External script source files:''
You can also load javascript from an external source URL, by including a src="..." parameter in the initial {{{<script>}}} marker (e.g., {{{<script src="demo.js"></script>}}}).  This is particularly useful when incorporating third-party javascript libraries for use in custom extensions and plugins.  The 'foreign' javascript code remains isolated in a separate file that can be easily replaced whenever an updated library file becomes available.

''Display script source in tiddler output''
By including the keyword parameter "show", in the initial {{{<script>}}} marker, the plugin will include the script source code in the output that it displays in the tiddler.

''Defining javascript functions and libraries:''
Although the external javascript file is loaded while the tiddler content is being rendered, any functions it defines will not be available for use until //after// the rendering has been completed.  Thus, you cannot load a library and //immediately// use it's functions within the same tiddler.  However, once that tiddler has been loaded, the library functions can be freely used in any tiddler (even the one in which it was initially loaded).

To ensure that your javascript functions are always available when needed, you should load the libraries from a tiddler that will be rendered as soon as your TiddlyWiki document is opened.  For example, you could put your {{{<script src="..."></script>}}} syntax into a tiddler called LoadScripts, and then add {{{<<tiddler LoadScripts>>}}} in your MainMenu tiddler.

Since the MainMenu is always rendered immediately upon opening your document, the library will always be loaded before any other tiddlers that rely upon the functions it defines.  Loading an external javascript library does not produce any direct output in the tiddler, so these definitions should have no impact on the appearance of your MainMenu.

''Creating dynamic tiddler content''
An important difference between this implementation of embedded scripting and conventional embedded javascript techniques for web pages is the method used to produce output that is dynamically inserted into the document:
* In a typical web document, you use the document.write() function to output text sequences (often containing HTML tags) that are then rendered when the entire document is first loaded into the browser window.
* However, in a ~TiddlyWiki document, tiddlers (and other DOM elements) are created, deleted, and rendered "on-the-fly", so writing directly to the global 'document' object does not produce the results you want (i.e., replacing the embedded script within the tiddler content), and completely replaces the entire ~TiddlyWiki document in your browser window.
* To allow these scripts to work unmodified, the plugin automatically converts all occurences of document.write() so that the output is inserted into the tiddler content instead of replacing the entire ~TiddlyWiki document.

If your script does not use document.write() to create dynamically embedded content within a tiddler, your javascript can, as an alternative, explicitly return a text value that the plugin can then pass through the wikify() rendering engine to insert into the tiddler display.  For example, using {{{return "thistext"}}} will produce the same output as {{{document.write("thistext")}}}.

//Note: your script code is automatically 'wrapped' inside a function, {{{_out()}}}, so that any return value you provide can be correctly handled by the plugin and inserted into the tiddler.  To avoid unpredictable results (and possibly fatal execution errors), this function should never be redefined or called from ''within'' your script code.//

''Accessing the ~TiddlyWiki DOM''
The plugin provides one pre-defined variable, 'place', that is passed in to your javascript code so that it can have direct access to the containing DOM element into which the tiddler output is currently being rendered.

Access to this DOM element allows you to create scripts that can:
* vary their actions based upon the specific location in which they are embedded
* access 'tiddler-relative' information (use findContainingTiddler(place))
* perform direct DOM manipulations (when returning wikified text is not enough)
<<<
!!!!!Examples
<<<
an "alert" message box:
><script show>
	alert('InlineJavascriptPlugin: this is a demonstration message');
</script>
dynamic output:
><script show>
	return (new Date()).toString();
</script>
wikified dynamic output:
><script show>
	return "link to current user: [["+config.options.txtUserName+"]]";
</script>
dynamic output using 'place' to get size information for current tiddler:
><script show>
   if (!window.story) window.story=window;
   var title=story.findContainingTiddler(place).id.substr(7);
   return title+" is using "+store.getTiddlerText(title).length+" bytes";
</script>
creating an 'onclick' button/link that runs a script:
><script label="click here" title="clicking this link will show an 'alert' box" show>
   if (!window.story) window.story=window;
   alert("Hello World!\nlinktext='"+place.firstChild.data+"'\ntiddler='"+story.findContainingTiddler(place).id.substr(7)+"'");
</script>
loading a script from a source url:
>http://www.TiddlyTools.com/demo.js contains:
>>{{{function demo() { alert('this output is from demo(), defined in demo.js') } }}}
>>{{{alert('InlineJavascriptPlugin: demo.js has been loaded'); }}}
><script src="demo.js" show>
	return "loading demo.js..."
</script>
><script label="click to execute demo() function" show>
	demo()
</script>
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''InlineJavascriptPlugin'' (tagged with <<tag systemConfig>>)
<<<
!!!!!Revision History
<<<
''2007.02.19 [1.6.0]'' added support for title="..." to specify mouseover tooltip when using an onclick (label="...") script
''2006.10.16 [1.5.2]'' add newline before closing '}' in 'function out_' wrapper.  Fixes error caused when last line of script is a comment.
''2006.06.01 [1.5.1]'' when calling wikify() on script return value, pass hightlightRegExp and tiddler params so macros that rely on these values can render properly
''2006.04.19 [1.5.0]'' added 'show' parameter to force display of javascript source code in tiddler output
''2006.01.05 [1.4.0]'' added support 'onclick' scripts.  When label="..." param is present, a button/link is created using the indicated label text, and the script is only executed when the button/link is clicked.  'place' value is set to match the clicked button/link element.
''2005.12.13 [1.3.1]'' when catching eval error in IE, e.description contains the error text, instead of e.toString().  Fixed error reporting so IE shows the correct response text.  Based on a suggestion by UdoBorkowski
''2005.11.09 [1.3.0]'' for 'inline' scripts (i.e., not scripts loaded with src="..."), automatically replace calls to 'document.write()' with 'place.innerHTML+=' so script output is directed into tiddler content.  Based on a suggestion by BradleyMeck
''2005.11.08 [1.2.0]'' handle loading of javascript from an external URL via src="..." syntax
''2005.11.08 [1.1.0]'' pass 'place' param into scripts to provide direct DOM access 
''2005.11.08 [1.0.0]'' initial release
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
<<<
!!!!!Code
***/
//{{{
version.extensions.inlineJavascript= {major: 1, minor: 6, revision: 0, date: new Date(2007,2,19)};

config.formatters.push( {
	name: "inlineJavascript",
	match: "\\<script",
	lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\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) {
			if (lookaheadMatch[1]) { // load a script library
				// make script tag, set src, add to body to execute, then remove for cleanup
				var script = document.createElement("script"); script.src = lookaheadMatch[1];
				document.body.appendChild(script); document.body.removeChild(script);
			}
			if (lookaheadMatch[5]) { // there is script code
				if (lookaheadMatch[4]) // show inline script code in tiddler output
					wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
				if (lookaheadMatch[2]) { // create a link to an 'onclick' script
					// add a link, define click handler, save code in link (pass 'place'), set link attributes
					var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",lookaheadMatch[2]);
					link.onclick=function(){try{return(eval(this.code))}catch(e){alert(e.description?e.description:e.toString())}}
					link.code="function _out(place){"+lookaheadMatch[5]+"\n};_out(this);"
					link.setAttribute("title",lookaheadMatch[3]?lookaheadMatch[3]:"");
					link.setAttribute("href","javascript:;");
					link.style.cursor="pointer";
				}
				else { // run inline script code
					var code="function _out(place){"+lookaheadMatch[5]+"\n};_out(w.output);"
					code=code.replace(/document.write\(/gi,'place.innerHTML+=(');
					try { var out = eval(code); } 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;
		}
	}
} )
//}}}
/***
| Name:|InstantTimestampPlugin|
| Created by:|SimonBaird|
| Location:|http://instanttimestamp.tiddlyspot.com/|
| Version:|1.0.5 (17-Jan-2007)|
| Requires:|~TW2.x|
!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: 'YY0hh0mm',
	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);
}

//}}}
!!!!!<<gradient horiz #fcb #fff>>&nbsp;Instructions>>

''There are 3 ways to get Sidebar Notes into your Firefox sidebar.''

~~{{c06{''And there 8 ways to adjust the font size see menu.''}}}~~
#The easy way is by clicking @@''«Load''@@ on the top menu
#Bookmark it then go to the bookmark, right click on it, and in the properties of the bookmark tick "Load this bookmark in the sidebar" Then click on the bookmark.
# The fastest loading (and you can customise it). Save it to your hard disk by going to ''Tools'' and click ''download''
##Open with Firefox and bookmark where you saved it.
##Go to the bookmark, right click on it, and in the properties of the bookmark tick "Load this bookmark in the sidebar" Then click on the bookmark.
Hint: @@color:#C06;''&raquo; &raquo;'' @@  You can specify what size font you want when you load into the sidebar. +++[more...]
<<<
Go to the bookmark, right click on it, and in the properties of the bookmark at the end of the URL add "/#font:size" with size being anything from 40 to 200. It can be resized manually but always defaults to what is appended to the link whenever you load it; unless you remove it. You can get the smallest font by clicking here too.
http://sidebarnotes.tiddlyspot.com/#font:40
<<<
===


''Note:''
 @@color:#C06;''&raquo; &raquo;'' @@ The toolbar and the titles for tiddlers are hidden for space reasons and can be toggled with ''Edit'' on the top menu (It can be set to either show or be hidden on startup)

 @@color:#C06;''&raquo; &raquo;'' @@ These instructions can be removed from DefaultTiddlers and replaced with the startup tiddlers of your choice. These are also accessed by the Home button.  If you get lost by closing all tabs click ''Home'' or ''View''.
 
 @@color:#C06;''&raquo; &raquo;'' @@ If you want your Sidebar Notes hosted on Tiddlyspot see [[Help]]


|bgcolor:#fcf;~~Sidebar Notes was designed and built by Morris Gray the designer of [[TW Help|http://twhelp.tiddlyspot.com]] Please send inquiries here<<tiddler [[Email]]>>~~|


!!!!!<<gradient horiz #fcb #fff>>&nbsp;MiniPlanner>>
----
Do something every day that you don't want to do; this is the golden rule for acquiring the habit of doingyour duty without pain.
----
!!!!!<<gradient horiz #fcb #fff>>&nbsp;About ~TiddlyWiki>>

<<tiddler NextTiddler with: [[HowToUpgrade]]  'previous'>> @@color:#C06;''&laquo;1 &raquo;'' @@  <<tiddler NextTiddler with: [[MainFeatures]]  'next'>>

|borderless|k
Here is a brief introduction to ~TiddlyWiki
*Open each below in the @@color:blue;~TiddlyWiki@@ way (non-linear) at your discretion.
<<<
MainFeatures
NewFeatures
[[Customisation]]
[[Plugins]]
GettingStarted
HowToUpgrade
<<<
[[Introduction]]
[[{Index}]]
<script>
Date.prototype.julianDate=function() {
var j=parseInt((this.getTime()-new Date('Dec 30,'+(this.getFullYear()-1)+' 23:00:00').getTime())/86400000).toString(),
i=3-j.length;
while(i-->0)j=0+j;
return j};
document.write(new Date().julianDate())
</script>
<<tabs tabsKeystroke  [[TWKeyStrokes ]] "" [[TWKeyStrokes]]  [[FFKeyStrokes ]] "" [[FFKeyStrokes]]>>
|>|>| !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; |

/***
|''Name:''|LoadRemoteFileThroughProxy (previous LoadRemoteFileHijack)|
|''Description:''|When the TiddlyWiki file is located on the web (view over http) the content of [[SiteProxy]] tiddler is added in front of the file url. If [[SiteProxy]] does not exist "/proxy/" is added. |
|''Version:''|1.1.0|
|''Date:''|mar 17, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#LoadRemoteFileHijack|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
***/
//{{{
version.extensions.LoadRemoteFileThroughProxy = {
 major: 1, minor: 1, revision: 0, 
 date: new Date("mar 17, 2007"), 
 source: "http://tiddlywiki.bidix.info/#LoadRemoteFileThroughProxy"};

if (!window.bidix) window.bidix = {}; // bidix namespace
if (!bidix.core) bidix.core = {};

bidix.core.loadRemoteFile = loadRemoteFile;
loadRemoteFile = function(url,callback,params)
{
 if ((document.location.toString().substr(0,4) == "http") && (url.substr(0,4) == "http")){ 
  url = store.getTiddlerText("SiteProxy", "/proxy/") + url;
 }
 return bidix.core.loadRemoteFile(url,callback,params);
}
//}}}
{{textleftM{
<<tiddler SideBarTabs>><<slider "chkCookieName" "MainMenu" "Menu »" "tooltip" >>
}}}
<<tiddler ContentOne>>
<<tiddler ContentOne>>
!!!!!<<gradient horiz #fcb #fff>>&nbsp;~MainFeatures>>

<<tiddler NextTiddler with: [[Introduction]]  'previous'>> @@color:#C06;''&laquo;2 &raquo;'' @@  <<tiddler NextTiddler with: [[NewFeatures]]  'next'>>

|borderless|k
Out of the box, TiddlyWiki offers:

* Works with all major desktop browsers on Windows, Macintosh and Linux and many mobile browsers such as the Apple iPhone and the Nokia 770/N800
*You can SaveChanges with FireFox, Opera, InternetExplorer for Windows, Safari, and Camino
* The BackstageArea for handy access to authoring tools including importing and synchronisation of tiddlers with external files and servers
* Full text formatting including MonospacedText, ExtendedFormatting, NonWikiWordLinks, WikiWordEscape, PrettyLinks, SubHeadings, BulletPoints, NumberedBulletPoints, Tables, BlockQuotes, HorizontalRules and the ability to use a CustomCssClass and InlineHTML
* ...EmbeddedImages
* Macros providing rich interactive features, including Sparklines and Gradients
* InterfaceOptions and AdvancedOptions, including the ability to GenerateAnRssFeed, SaveBackups and AutoSave
* KeyboardShortcuts so you can finish editing a tiddler with Control-Enter or abandon it with Escape
* Extensive StartupParameters to control the behaviour of TiddlyWiki through specially crafted URLs
* There are translations of TiddlyWiki available in many languages, including Chinese, French, German, Spanish, Portuguese

The Community around TiddlyWiki has extended this basic functionality with a wide range of Plugins and TiddlyWikiAdaptations.
Thu, Oct 18, 2007 23:20
[[WelcomeToTiddlyspot]]
 GettingStarted
<!-- Start of StatCounter Code -->
<script type="text/javascript">
sc_project=3580723; 
sc_invisible=1; 
sc_partition=41; 
sc_security="a499f3f3"; 
</script>

<script type="text/javascript" src="http://www.statcounter.com/counter/counter_xhtml.js"></script><noscript><div class="statcounter"><a href="http://www.statcounter.com/" target="_blank"><img class="statcounter" src="http://c42.statcounter.com/3580723/0/a499f3f3/1/" alt="free web page counters" ></a></div></noscript>
<!-- End of StatCounter Code -->

|>|>| !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 |
!!!!!<<gradient horiz #fcb #fff>>&nbsp;Memorize International Phonics>>
~~{{c06{Try clicking (memorize) in both columns (to decide which side to start with).}}}~~
----
<html><div align="left"><iframe id="mem" name="mem" 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>
{{textleftM unboldLink{
[[TheElements]]
[[Anthropology]]
[[Astronomy]]
WebPage
WebPageTwo
PageTemplate
MarkupPreBody
StyleSheet
ToggleHeaderMacro
ToggleEditingMacro
ToggleSideBarMacroOrig
SlantedMenu
<<tiddler MainMenu>>
}}}
<<tiddler SideBarTabsSlider>>
<<tabs "monfri" [[Intro ]] "" [[IntroPlanner]]  [[Mon ]] "" [[Mon]]  [[Tue ]] "" [[Tue]]  [[Wed ]] "" [[Wed]]  [[Thu ]] "" [[Thu]]  [[Fri ]] "" [[Fri]] >>
<<tabs "satsun" [[Sat ]] "" [[Sat]]  [[Sun ]] "" [[Sun]]  [[Other ]] "" [[Other]] >>
This is a note for the whole week. Click on a day'not the tab, @@bgcolor:#abf;color:#000; &nbsp;Day&nbsp; @@, but on the Heading @@bgcolor:#fcb;color:#000; &nbsp;Day&nbsp; @@   to access it and  to put a separate note in in it.

What's that Other thing?
!!!<<gradient horiz #fcb #ffffff>>[[Mon]]^^<<tiddler CloseThisOpen with: MiniPlanner  '« back'>>[[edit»|Mon]] ^^>>
<<tiddler SaveTiddlerToFile with: "Save to file" tooltip filename path>> (An experiment on saving a tab to a file.)
----
Procrastination can drive most of us into a spiral of shame that’s as mundane as it is painfully personal. We know what we should be doing, but some invisible hang-up keeps us on the line.
----
*  Messy garage - Goal: 10 minutes or 1 full garbage bag. Spend 10 minutes working in one area of the garage. Take out old papers, break down some boxes, or move the Christmas ornaments to the top shelf. When the timer buzzes at you, stop.
    

Who invented Mondays... they should be part of the weekend.
<html><a href="http://twhelp.tiddlyspot.com/" target="_blank"><span title="Sidebar Notes was designed by Morris Gray of TW Help" ><<gradient horiz #0cc #0cc>>@@cursor:help;color:#000;font-variant:small-caps;line-height:1.8em;font-size:10pt;font-weight:bold;letter-spacing: 0.3em;padding-left:0.5em;Sidebar Notes@@>></span></a></html>
<<gradient vert #0cc #0ff
#0cc>>@@color:#f00;font-variant:small-caps;line-height:1.8em;font-size:10pt;font-weight:bold;letter-spacing: 0.3em;padding-left:0.5em;Sidebar Notes@@@@color:#f00;@@>>
<<gradient vert #0aa #0ff
#0aa>>@@color:#f00;font-variant:small-caps;line-height:1.8em;font-size:10pt;font-weight:bold;letter-spacing: 0.3em;padding-left:0.5em;Sidebar Notes@@@@color:#f00;@@>>

<<gradient vert #088 #0ff
#088>>@@color:#000;font-variant:small-caps;line-height:1.8em;font-size:10pt;font-weight:bold;letter-spacing: 0.3em;padding-left:0.5em;Sidebar Notes@@@@color:#f00;@@>>

<<gradient vert #066 #0ff
#066>>@@color:#fff;font-variant:small-caps;line-height:1.8em;font-size:10pt;font-weight:bold;letter-spacing: 0.3em;padding-left:0.5em;Sidebar Notes@@@@color:#f00;@@>>

<<gradient vert #044 #0cc
#044>>@@color:#fff;font-variant:small-caps;line-height:1.8em;font-size:10pt;font-weight:bold;letter-spacing: 0.3em;padding-left:0.5em;Sidebar Notes@@@@color:#f00;@@>>

<<gradient vert #044 #0cc
#044>>@@color:#000;font-variant:small-caps;line-height:1.8em;font-size:10pt;font-weight:bold;letter-spacing: 0.3em;padding-left:0.5em;Sidebar Notes@@@@color:#f00;@@>>

<<gradient vert #044 #0cc
#044>>@@color:#fa0;font-variant:small-caps;line-height:1.8em;font-size:10pt;font-weight:bold;letter-spacing: 0.3em;padding-left:0.5em;Sidebar Notes@@@@color:#f00;@@>>

<<gradient vert #044 #0cc
#044>>@@color:#f00;font-variant:small-caps;line-height:1.8em;font-size:10pt;font-weight:bold;letter-spacing: 0.3em;padding-left:0.5em;Sidebar Notes@@@@color:#f00;@@>>

<script>
   place.style.backgroundColor="#ccc"; /* set background color */ 
   place.style.color="#"; /* set text color */
</script>
<<tabs " " [[Save/Options ]] "" [[ToolTabsIntro]] [[Options ]] "" [[OptionsPanel]]  [[AdvancedOptions ]] "" [[AdvancedOptions]]  [[TspotControls ]] "" [[TspotControls]]  [[SideBarTabs ]] "" [[SideBarTabs]] >>
+++[MoreTools]
<<tiddler MoreTools>>
===
Create a tab or tabs you want visible at startup and put them in DefaultTiddlers
Put your start-up info here.
/***
|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 #fcb #fff>>&nbsp;About ~NewFeatures>>

<<tiddler NextTiddler with: [[MainFeatures]]  'previous'>> @@color:#C06;''&laquo;3 &raquo;'' @@  <<tiddler NextTiddler with: [[Customisation]]  'next'>>

TiddlyWiki has been improved in several other areas for release 2.2. Here are some of the highlights; see the full release note at tiddlywiki.org for more details.

''Usability''

There's a slew of significant usability enhancements including:

* The new BackstageArea to separate off authoring specific functionality
* Popup previews of tiddler contents in the plugin manager, sync manager, and ImportTiddlers
* 'More' command to simplify tiddler toolbars
* "Yellow note" annotations to indicate the purpose of special tiddlers such as shadow tiddlers
* New {{{<<options>>}}} macro to allow access to the complete set of available configuration options
* New "size" and "execution time" columns in the plugin manager
* Improved NewTiddler and NewJournal macros that can accept custom fields
* Embolden tags in the tag listing that are also defined as tiddlers

''Performance''

* New DomScrubbing feature to deal with memory leaks
* Revised storage format using <PRE> tags to permit whitespace and new lines to be preserved without requiring escaping
* Greatly enhanced animation engine that performs better on slower hardware

''Hackability''

As usual, several of the new features are intended to make life easier for plugin writers and other TiddlyWiki hackers:

* A new ServerConnectivity architecture
* New PluginLoadOrder mechanism for controlling the execution order of plugins
* Better startup timing instrumentation
* Rearranged shadow tiddlers into their own, unencoded store area
* Refactored saveChanges() to make it easier to add new save mechanisms
* Added paramifier for overriding current read-only state (eg, http://www.tiddlywiki.com/beta/#readOnly:no)
* ...and by popular request, we've started to reformat the TiddlyWiki source code to use the more conventional K&R layout standard

Internationalisation
TiddlyWiki benefits from an extensive set of translations. There are several enhancements in this release to make it easier to maintain translations.
Thu, Oct 18, 2007 23:20
!!!!Create @@color:#C06;''&raquo; &raquo;'' @@ <<newTiddler>><<newJournal "DD MMM YYYY" "journal">>
<<tabs tabsCookie [[Intro ]] "tooltip 1" [[TheScientificMethod]]  [[Astronomy ]] "" [[Astronomy]]  [[Anthropology]] "" [[Anthropology]] [[TheElements ]] "" [[TheElements]] >>
!!!!Create @@color:#C06;''&raquo; &raquo;'' @@ <<newTiddler>><<newJournal "DD MMM YYYY" "journal">>
[[WorldNews]]
[[TWHelpNews]]
[[SidebarNews]]
[[{Index}]]
/%
|Name|NextTiddler|
|Source|http://www.TiddlyTools.com/#NextTiddler|
|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|
|Overrides||
|Description|insert a link that, when clicked, closes the current tiddler and opens another one in its place|

usage: <<tiddler NextTiddler with: NewTiddlerTitle linktext>>


%/<script label="$2">
	var tiddler=story.findContainingTiddler(place);
	story.displayTiddler(tiddler,"$1");
	story.closeTiddler(tiddler.getAttribute("tiddler")); // close self
	return false;
</script>
 [[1|Science]] &#149; [[2|TheScientificMethod]] &#149; [[3|Anthropology]] &#149; [[4|Astronomy]] &#149; [[5|TheElements]] &#149; 6
<<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
!!!<<gradient horiz #fcb #ffffff>>[[Other]]^^<<tiddler CloseThisOpen with: MiniPlanner  '« back'>>[[edit»|Other]] ^^>>
Yes I was wondering about that too.  We'll have to stop meeting like this.
> Without becoming a TiddlyWiki wizard, which seems to defeat the appeal
> of TW, is there a way to tell it to leave a block of text alone in a
> tiddler?  Just display exactly as entered.  I want to put code
> snippets in by pasting and I don't want to have to format it with TW
> codes - doing so is more work than it's worth.  Indentation is
> particularly important.

First method:
--------------------
{{{
insert content here
}}}

--------------------
creates a PRE ('preformatted') element, with default styling using
monospaced font, within a yellow-ish background with 1pixel border.
Whitespace (newlines, tabs, and spaces) are rendered "as-is".  note:
the {{{ and }}} must be on lines by themselves

Second method:
--------------------
@@white-space:pre;<nowiki>
insert content here
</nowiki>@@
--------------------
uses "inline CSS" to preserve white space plus <nowiki>...</nowiki>
delimiters for 'non-wikified' text content.  Uses default font
(usually Arial/Helvetica), without any special background/border.

enjoy,
-e
Eric Shulman
TiddlyTools / ELS Design Studios 
/***
!!!<<gradient horiz #fc3 #fff >><<tiddler RefreshStyles>>&nbsp;PageCSS>>/%==================================================%/
***/

body {background:#099;}

#outer {
 width:100%;
 margin:auto;
 }

#hdr {
 height:100%;
 background:#eeeeee;
 color: #333333;
 }

#slantedmenu {height:100%;}



#bar {
 height:0px;
 line-height:2.2em;
 background:#c0c0c0;
}

#bodyblock {
 position:relative;
 background: #dcdcdc;
 color: #333333;
 width:650px;
 padding:0;
 }

#l-col {
 float:left;
 background:#dcdcdc;
 color: #333333;
 width:145px;
 }

#cont {
 width:100%;
 background:#ffffff;
 color: #333333;
 text-align:left;
 margin:auto;
 }

#systemcontents {
 height: 350px; 
 width: 100%; 
 position:relative;
 overflow: auto;
 margin:auto;
 }


#ftr {
 height:100%;
 background:#fff;
 color: #333333;
 border:solid black;
 border-width:1px 0 0 0;
 margin-top:1em;
 margin-bottom:1em;
 }


/* Presentation Stylesheet */ 

h3, p {
 margin:0;
 padding:15px;
 }

h4 {
 margin:0; 
 padding: 5px 0;
 }
 
p:first-letter {
 font-size: 80%; 
 font-weight: bold;
 color:blue;
 }
[[{Index}]]
[[AllTabs]]
[[BackstageCSS]]
[[ButtonStyle]]
[[CenterBoxCSS]]
[[CustomCSS]]
[[History]]
[[PageCSS]]
[[PageTemplate]]
[[Programs]]
[[MondoGreen]]
[[SlantedStyle]]
[[SlantedMenu]]
[[StyleSheet]]
[[StyleSheetTiddlersBar]]
[[Styling]]
[[ViewTabs]]
[[WebStyleSheet]]
!!!!!<<gradient horiz #fcb #fff>>&nbsp;PageSystemList>>
<script>
// get all tiddlers tagged with "system"
var tids=store.getTaggedTiddlers("system");
// keep only tiddlers *also* tagged with New
var list=[];
for (var t=0; t<tids.length; t++)
   if (tids[t].isTagged("system")) 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> 
<!--{{{-->
<div id="outer"><div id='hdr' align='left' refresh='content'  tiddler='MondoGreen'></div>
<div id='slantedmenu' refresh='content'  tiddler='SlantedMenu'></div><div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div><div id="cont">
<div id='displayArea'><div id='tiddlerDisplay'></div>
<div id='messageArea'></div>
</div><div id="ftr" align="center" refresh='content'  tiddler='contentFooter''>>Copyright (c) You 2003</div><div id='sidebar'></div></div></div

<!--}}}-->
<!--{{{-->
<div id="outer"><div id="TWHhdr" align="center"><span class='newHeader' refresh='content' force='true' tiddler='MondoGreen'></span><span class='slantedMenu' refresh='content' force='true' tiddler='SlantedMenu'></span>

<div id="TWHbar"><div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div></div>

<div id="TWHl-col"><span class='something' tiddler='Menu'</span></div>
<div id="TWHcont"><span class='science' tiddler='ScienceContent'></span></div></div>
<div id='messageArea'></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='messageArea'></div>
<div id='tiddlerDisplay'></div><span style='display:none' macro='tiddler SetTiddlerHeight with:
85%'></span>
<div id="ftr" align="center"><span class="contentFooter" refresh='content'  tiddler='contentFooter'></span></div>
<!--}}}-->
<!--{{{-->
<div id="TWHouter"><div id="TWHhdr" align="center"><span class='newHeader' refresh='content' force='true' tiddler='WebPage'></span></div></div>

<div id='messageArea'></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='messageArea'></div>
<div id='tiddlerDisplay'><div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div></div><span style='display:none' macro='tiddler SetTiddlerHeight with:
85%'></span>
<div id="ftr" align="center"><span class="contentFooter" refresh='content'  tiddler='contentFooter'></span></div>
<!--}}}-->
<div class="outer"><div class="hdr" align="center"><span class='something' refresh='content' tiddler='Header'></span><span class='somethingelse' refresh='content' tiddler='SlantedMenu'></span></div>
<div id="bar" macro='today'></div>
<div id="bodyblock" align="right">
<div id="l-col" align="left"><span class='somethingL' refresh='content' tiddler='Menu'></span>
</div>

<div id="cont" refresh='content' tiddler='MainContent'></div>
</div>
<div id="ftr" align="center">Copyright (c) You 2003</div>
</div>
Sidebar Notes - all things aside
!!!!!<<gradient horiz #fcb #fff>>&nbsp;PluginServers>>
<<<
[[TheCompletePluginList|http://tiddlyvault.tiddlyspot.com/]]
[[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/]]
[[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]]
[[RedMountainVistaServer|http://solo.dc3.com/tw/]]
[[TiddlySpot|http://www.TiddlySpot.com]]
[[TiddlyStylesServer|http://tiddlystyles.com/]]
[[TiddlyToolsServer|http://www.tiddlytools.com/]]
[[TiddlyWikiServer|http://www.TiddlyWiki.com/]]
[[VisualTW|http://visualtw.ouvaton.org/VisualTW.html]]
<<<
!!!!!<<gradient horiz #fcb #fff>>&nbsp;Plugins>>

<<tiddler NextTiddler with: [[Customisation]]  'previous'>> @@color:#C06;''&laquo;5 &raquo;'' @@  <<tiddler NextTiddler with: [[GettingStarted]]  'next'>>

TiddlyWiki can be extended by InstallingPlugins that implement new Macros, Themes, Tweaks or other features. The easiest way of InstallingPlugins is to use ImportTiddlers. Like other features that need to modify TiddlyWiki files, it only works when TiddlyWiki is loaded from a file:// URL.

DaveGifford oversees an extensive catalogue of available plugins at TiddlyVault.

Some of the leading plugin sites from independent developers are here tagged as systemServer which also makes them available in ImportTiddlers.

ChrisKlimas has written The Macrocodex, some superb documentation on writing plugins and macros for TiddlyWiki.
Tue, Nov 27, 2007 10:00
<html><hide linebreaks>
<div id="pre-hdr"><<tiddler Astronomy>></div>
</html>
<html><hide linebreaks>
<div id="pre-hdr"><<tiddler TheElements>></div>
</html>
/***
!!!<<gradient horiz #fc3 #fff >><<tiddler RefreshStyles>>&nbsp;PresentCSS>>/%==================================================%/
***/

#pre-hdr {
 width:100%;
 height:100%;
 background:#fef;
 color: #00f;
 }
|width:750px;{{floatleft{ [[1|Present1]] &#149; [[2|Present2]] &#149; 3 &#149; 4 &#149; 5 &#149; 6}}}{{floatright{[[previous|Present]] @@color:#C06;''&laquo; &raquo;'' @@  [[next|Present1]]}}}|

This is my first attempt at a presentation web site.
<html><hide linebreaks>
<div id="pre-hdr"><<tiddler PresentContents>></div>
</html>
<html><hide linefeeds><ul>
<li><a href="http://www.43folders.com/2005/01/19/mark-taw-on-procrastination/">Mark Taw on Procrastination</a> - Mark’s article gets to the core problems that cause people to get derailed, distracted, and perpetually off-target.</li>
<li><a href="http://www.43folders.com/2005/06/20/solid-tactics-for-understanding-and-beating-procrastination/">Solid tactics for understanding (and beating) procrastination</a> - Excellent, <a href="http://thenowhabit.43folders.com/" title="Neil Fiore's 'The Now Habit' on the 43 Folders Store">Neil  Fiore</a>-esque advice on unpacking why you’re procrastinating and rewiring the crummy thinking that supports it. </li>
<li><a href="http://www.43folders.com/2005/04/25/choosing-a-daily-gtd-action-plan/">Choosing a daily GTD action plan</a> - Chris Murtland’s “revolving workflow strategies” for GTD are smart, realistic, and just might save you from a _fractal productivity spiral.</li>
<li><a href="http://www.43folders.com/2005/06/28/unpacking-the-anxieties-on-your-todo-list/">Unpacking the anxieties on your TODO list</a> - I like <a href="http://www.secretgeek.net/procrastless.asp" title="">this practical, tactical approach</a> to “<a href="http://www.43folders.com/2005/05/23/cringe-busting-your-todo-list/">cringe-busting</a>” a list of tasks that you’ve been procrastinating. Basically, you write down each thing you want to do as well as the <em>anxiety</em> that’s kept you from doing it. </li>
<li><a href="http://www.43folders.com/2005/09/08/kick-procrastinations-ass-run-a-dash/">Kick procrastination’s ass: Run a dash</a> - Make fast, stress-free progress on a project you’ve been putting off.</li>
<li><a href="http://www.43folders.com/2005/09/28/jeff-covey-running-a-progressive-dash/">Jeff Covey: Running a Progressive Dash</a> - Reader <a href="http://jeffcovey.net/" title="">Jeff Covey</a> shares how he’s started <a href="http://www.43folders.com/2005/09/08/kick-procrastinations-ass-run-a-dash/" title="">beating procrastination with a dash</a>. Jeff’s system features a very fast daily start-up and smart way to make sure every to-do gets touched first thing every morning.</li>
<li><a href="http://www.43folders.com/2005/10/11/procrastination-hack-1025/">Procrastination hack: “(10+2)*5”</a> - Following on the idea of the <a href="http://www.43folders.com/2005/09/08/kick-procrastinations-ass-run-a-dash/">procrastination dash</a> and <a href="http://www.43folders.com/2005/09/jeff_covey_runn.html">Jeff’s progressive dash</a>, I’ve been experimenting with a squirelly new  system to pound through my procrastinated to-do list. </li>

</ul</html>
!!!!!<<gradient horiz #fcb #fff>>&nbsp;[[Programs]]>>
@@color:#C06;''&raquo; &raquo;'' @@ Tabs containing programs (plugins) written in ~JavaScript (if tagged as systemConfig begin running at startup.)
----
<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("systemConfig")) 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> 
[[ProjectList]]
[[CustomCSS]]
[[DefaultTiddlers]]
[[EditTemplate]]
[[PageCSS]]
[[PageTemplate]]
[[SlantedMenu]]
[[SlantedStyle]]
[[StyleSheet]]
[[ViewTemplate]]
[[{Index}]]
[[ViewTemplate]]
[[TiddlerNotesPlugin]]
[[nonotesViewTemplate]]
#We have to generate a list that contains all the tiddlers we need to open for the project ProjectNotesList
#We must generate an {IndexNotes} Tiddler and put it on the main {Index}
#We have to make a nonotesViewTemplate identical  the original ViewTemplate
#We have to modify ViewTemplate to have notes show up in all tabs that are not tagged 'nonotes'
#We must modify TiddlerNotesPlugin to format what we want the notes to say  I say change them tho Comments and not use the 'notes' terminology
[[{Index}]]
[[SliderMenu]]
[[KeyStrokes]]
[[Memorize]]
[[TWHelp]]
[[TWSites]]
[[Entities]]
[[PluginServers]]
[[SearchWeb]]
[[SetTabBackgrounds]]
<html><input type="button" value="Refresh Styles" onClick="javascript:refreshStyles('StyleSheet');" name="button" class="btn" onmouseover="this.className='btn btnhov'" onmouseout="this.className='btn'"/></html>
<html><a href="document.location.parent.location();">Reload</a></html>


<a href="javascript:load.('first.htm')">first</a>


<a href="javascript:load('first.htm')">first</a>

<html><a href="javascript:load(document.location.href.substring(7));">Reload</a></html>


="parent.location='thankspage.html'">
http://"+document.location.href.substring(7));

<html>
<FORM>
<INPUT TYPE="button" VALUE="BACK"
onClick="history.go(-1)">
<INPUT TYPE="button" VALUE="FORWARD"
onClick="history.go(1)">
</FORM>

</html>


<html><div style="text-align:center;"><input class="btn" type="button" value="Reload Page" onClick="location.reload()" onmouseover="this.className='btn btnhov'" onmouseout="this.className='btn'"/></div></html>

<html><a href="javascript:refreshStyles('StyleSheet');">
refresh styles and layout
</a></html>

http://www.htmlgoodies.com/beyond/javascript/article.php/3470771
<html><td><input class="btn" type="button" value="Reload Mainwindow" onClick="location.reload()" onmouseover="this.className='btn btnhov'" onmouseout="this.className='btn'"/></td></html>
/***
!!!<<gradient horiz #fc3 #fff >><<tiddler RefreshStyles>>&nbsp;SDCSS>>/%==================================================%/
***/

#SBouter {
 text-align:left;
 border:1px solid #000000;
 width:100%;
 margin:auto;
  background:#ffccff;
 }

#SBhdr {
 width:100%;
 height:100%;
 background:#999;
 color: #333333;
 }

#SBbodyblock {
 position:relative;
 background: #dcdcdc;
 color: #333333;
 padding:0;
 }


#SBl-col {
 float:left;
 background:#dcdcdc;
 background-color: #f00;
 width:120px;
 }

#SBcont {
 background:#ffffff;
 color: #333333;
 border:solid #000000;	
 border-width:0 0 0 1px;
 text-align:left;
 width:60%;

 }

#SBftr {
 height:35px;
 background:#fff;
 color: #333333;
 border:solid black;
 border-width:1px 0 0 0;
 margin:0;
 }


Presentation Stylesheet

h3, p {
 margin:0;
 padding:15px;
 }

h4 {
 margin:0; 
 padding: 5px 0;
 }
 
p:first-letter {
 font-size: 80%; 
 font-weight: bold;
 color:blue;
 }

!!!<<gradient horiz #fcb #ffffff>>[[Sat]]^^<<tiddler CloseThisOpen with: MiniPlanner  '« back'>>[[edit»|Sat]] ^^>>
Come Saturday morning I'm going away with my friend....We'll Saturday spend til the end...of the day.
/***
|Name|SaveAsPlugin|
|Source|http://www.TiddlyTools.com/#SaveAsPlugin|
|Documentation|http://www.TiddlyTools.com/#SaveAsPlugin|
|Version|1.0.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|Save current document to a different path/filename|
!!!!!Documentation
<<<
Syntax: {{{<<saveAs>>}}}
<<saveAs>>
<<<
!!!!!Revisions
<<<
2008.04.12 [1.0.1] automatically add "saveAs" to backstage commands
2008.04.12 [1.0.0] initial release - derived from [[NewDocumentPlugin]]
<<<
!!!!!Code
***/
//{{{
version.extensions.SaveAsPlugin= {major: 1, minor: 0, revision: 1, date: new Date(2008,4,12)};

config.macros.saveAs = {
	label: "save as...",
	prompt: "Save current document to a different path/file",
	filePrompt: "Please select or enter a target path/filename",
	defaultFilename: "new.html",
	okmsg: "%0 tiddlers written to %1",
	failmsg: "An error occurred while creating %0",
	handler: function(place,macroName,params)
		{ var btn=createTiddlyButton(place,this.label,this.prompt,this.go); },
	go: function() {
		// make sure we are local
		if (window.location.protocol!="file:") {
			alert(config.messages.notFileUrlError); 
			if (store.tiddlerExists(config.messages.saveInstructions))
				story.displayTiddler(null,config.messages.saveInstructions);
			return;
		}
		// get current saved file
		var currPath=getLocalPath(window.location.href);
		var original=loadFile(currPath);
		if (!original) {
			alert(config.messages.cantSaveError); 
			if (store.tiddlerExists(config.messages.saveInstructions))
				story.displayTiddler(null,config.messages.saveInstructions);
			return;
		}

		// get new target path/filename
		var newPath=currPath;
		var slashpos=newPath.lastIndexOf("/"); if (slashpos==-1) slashpos=newPath.lastIndexOf("\\"); 
		if (slashpos!=-1) newPath=newPath.substr(0,slashpos+1); // trim filename
		var newFile=currPath.substr(newPath.length); // trim path
		if (!newFile.length) newFile=config.macros.saveAs.defaultFilename;
		var target=config.macros.saveAs.ask(config.macros.saveAs.filePrompt,newPath,newFile);
		if (!target) return; // cancelled by user
		// if specified file does not include a path, assemble fully qualified path and filename
		var slashpos=target.lastIndexOf("/"); if (slashpos==-1) slashpos=target.lastIndexOf("\\");
		if (slashpos==-1) target=target+config.macros.saveAs.defaultFilename;
		var link="file:///"+target.replace(/\\/g,'/'); // link for message text

		// write target
		if (saveFile(target,updateOriginal(original)))
			var msg=config.macros.saveAs.okmsg.format([store.getTiddlers("title").length,target]);
		else
			var msg=config.macros.saveAs.failmsg.format([target]);
		clearMessage(); displayMessage(msg,link);
	},
	ask: function(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/Vista 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;
	}
};
//}}}
//{{{
// automatically add saveAs to backstage
config.tasks.saveAs = {
	text: "saveAs",
	tooltip: config.macros.saveAs.prompt,
	action: function(){ clearMessage(); config.macros.saveAs.go(); }
}
config.backstageTasks.splice(config.backstageTasks.indexOf("save")+1,0,"saveAs");
//}}}
/%
|Name|SaveTiddlerToFile|
|Source|http://www.TiddlyTools.com/#SaveTiddlerToFile|
|Version|1.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|save tiddler SOURCE text to a local file|

Usage: Usage: <<tiddler SaveTiddlerToFile with: label tooltip filename path>>


where all parameters are optional, and:

* label -  is text to be displayed as a clickable link
* tooltip - is guide text for when you mouseover the link
* filename and path - specify the location in which to save the file.  Any "*" characters embedded in the filename or path are automatically replaced with the current tiddler title.  If you omit the path, the current document directory is used.  If you omit the filename, you will be automatically prompted to select a destination, using a system-specific "prompt for filename" dialog box.

%/<script label="$1" title="$2">

function promptForFilename(msg,path,file,defext)
{
	if(window.Components) { // moz
		try {
			netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
			var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
			var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
			picker.init(window, msg, nsIFilePicker.modeSave);
			picker.displayDirectory=null;
			picker.defaultExtension=defext;
			picker.defaultString=file;
			picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
			if (picker.show()!=nsIFilePicker.returnCancel) var result=picker.file.persistentDescriptor;
		}
		catch(e) { var result=prompt(msg,path+file); }
	}
	else { // IE
		try { // XP only
			var s = new ActiveXObject('UserAccounts.CommonDialog');
			s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|';
			s.FilterIndex=1; // default to ALL files;
			s.InitialDir=path;
			s.FileName=file;
			if (s.showOpen()) var result=s.FileName;
		}
		catch(e) { var result=prompt(msg,path+file); } // fallback for non-XP IE
	}
	return result;
}
	var okmsg="Tiddler source written to %0";
	var failmsg="An error occurred while creating %0";
	var here=story.findContainingTiddler(place); if (!here) return;
	var title=here.getAttribute('tiddler');
	var tid=store.getTiddler(title);
	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 ("$3"!="$"+"3") var fn="$3".replace(/\*/g,title); // custom filename with "*" marker to insert tiddlername
	if ("$4"!="$"+"4") var path="$4".replace(/\*/g,title); // custom path with "*" marker to insert tiddlername
	if ("$3"=="$"+"3") // not filename specified, ask user
		var filename=promptForFilename("select an output filename for this tiddler",path,title,""); // ask
	else
		var filename=path+fn;
	if (!filename || !filename.length) return false;
	var ok=saveFile(filename,tid.text);
	var msg=ok?okmsg:failmsg;
	var link=ok?"file:///"+filename.replace(/\\/g,'/'):""; // change local path to link text
	clearMessage();
	displayMessage(msg.format([filename]),link);
	return false;
</script><script>
	place.lastChild.style.fontWeight="normal";
	if ("$1"=="$"+"1") place.lastChild.innerHTML="save this tiddler to a file";
	if ("$2"=="$"+"2") place.lastChild.title="save this tiddler's SOURCE text to a local file";
</script>
This script saves the complete contents, as if it was in edit mode, of a tab to a text file of your choosing.

Edit this tab to see the script.
{{textcenter{
----
<<saveChanges>><<closeAll>><<permaview>>
----
<<toggleTiddlersBar "" "" show>><<toggleToolyBars "" "" hide>>
----
<html><td><input class="btn" type="button" value="Refresh Window" onClick="location.reload()" onmouseover="this.className='btn btnhov'" onmouseout="this.className='btn'"/></td></html>
----
@@<<tiddler TspotSidebar>>@@
----
}}}
<<tiddler ToolTabs>>
!!!!!<<gradient horiz #fcb #fff>>&nbsp;[[Script]]>>
 @@color:#C06;''&raquo; &raquo;'' @@ These are tabs containing ~JavaScript
----
<script>
// get all tiddlers tagged with "script"
var tids=store.getTaggedTiddlers("script");
// keep only tiddlers *also* tagged with ?
var list=[];
for (var t=0; t<tids.length; t++)
   if (tids[t].isTagged("script")) list.push(tids[t]);
// create output list of tiddler titles, one per line
var out="";
for (var t=0; t<list.length; t++) out+="#[["+list[t].title+"]]\n";
return out;
</script> 
!!!!!<<gradient horiz #fcb #fff>>&nbsp;Search Options>>
{{tablecenter table{
|bgcolor:#0bb;@@color:#000;'' /enter search/ ''@@|
|bgcolor(#E3FFE3):<<search>>|
|<<option chkSearchTitles>> Titles <<option chkSearchText>> Text <<option chkSearchTags>>Tags|
|<<option chkHoldSearches>> Hold <<option chkCaseSensitiveSearch>> ~CaseSensitive|
}}}
/***
|''Name:''|SearchOptionsPlugin|
|''Source:''|http://www.TiddlyTools.com/#SearchOptionsPlugin|
|''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|

The TiddlyWiki search function normally looks in both tiddler titles and tiddler body content ('text').  However, narrowing the search so that it examines only titles or only text, or expanding the search to include text contained in tiddler tags can be very helpful, especially when searching on common words or phrases.  In addition, it is often useful for the search results to show tiddlers with matching titles before tiddlers that contain matching text or tags.

!!!!!Usage
<<<
This plugin adds checkboxes (see below and in AdvancedOptions) to let you selectively configure the TiddlyWiki search function to just examine any combination of tiddler titles, text, or tags.  It also provides an option to switch the search results order between 'titles mixed in' (default) and 'titles shown first', as well as an option display the search results as a list of links (in an auto-generated "SearchResults" tiddler), rather than actually displaying all matching tiddlers.  You can also enable/disable the "incremental search" (key-by-key searching), so that a search is only initiated when you press the ENTER key or click on the "search:" prompt text.
<<<
!!!!!Configuration
<<<
In additional to the checkboxes in AdvancedOptions, a self-contained control panel is included here for your convenience:
<<option chkSearchTitles>> Search tiddler titles
<<option chkSearchText>> Search tiddler text
<<option chkSearchTags>> Search in tiddler tags
<<option chkSearchFields>> Search in tiddler data fields
<<option chkSearchShadows>> Search shadow tiddlers
<<option chkSearchTitlesFirst>> Show title matches first
<<option chkSearchList>> Show list of matching tiddlers
<<option chkSearchIncremental>> Incremental searching
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''SearchOptionsPlugin'' (tagged with <<tag systemConfig>>)
^^documentation and javascript for SearchOptionsPlugin handling^^

When installed, this plugin automatically adds checkboxes in the AdvancedOptions shadow tiddler so you can enable/disable the extended search behavior.  However, if you have customized your AdvancedOptions, you will need to manually add {{{<<option chkSearchTitles>>}}},  {{{<<option chkSearchText>>}}} and {{{<<option chkSearchTitlesFirst>>}}}  (with suitable prompt text) to your customized tiddler.
<<<
!!!!!Revision History
<<<
''2007.01.17 [mgray]'' disabled 'no search on empty box' by adding Alert to doSearch() from older version.
''2006.10.10 [2.4.0]'' added support for "search in tiddler data" (tiddler.fields)  Default is to search extended data.
''2006.04.06 [2.3.0]'' added support for "search in shadow tiddlers".  Default is *not* to search in the shadows (i.e.standard TW behavior).  Note: if a shadow tiddler has a 'real' counterpart, only the real tiddler is searched, since the shadow is inaccessible for viewing/editing.
''2006.02.03 [2.2.1]'' rewrite timeout clearing code and blank search text handling to match 2.0.4 core release changes.  note that core no longer permits "blank=all" searches, so neither does this plugin.  To search for all, use "." with text patterns enabled.
''2006.02.02 [2.2.0]'' in search.handler(), KeyHandler() function clears 'left over' timeout when search input is < 3 chars.  Prevents searching on shorter text when shortened by rapid backspaces (<500msec)
''2006.02.01 [2.1.9]'' in Story.prototype.search(), correct inverted logic for using/not using regular expressions when searching
also, blank search text now presents "No search text.  Continue anyway?" confirm() message box, so search on blank can still be processed if desired by user.
''2006.02.01 [2.1.8]'' in doSearch(), added alert/return if search text is blank
''2006.01.20 [2.1.7]'' fixed setting of config.macros.search.reportTitle so that Tweaks can override it.
''2006.01.19 [2.1.6]'' improved SearchResults formatting, added a "search again" form to the report (based on a suggestion from MorrisGray)
define results report title using config.macros.search.reportTitle instead of hard-coding the tiddler title
''2006.01.18 [2.1.5]'' Created separate functions for reportSearchResults(text,matches) and discardSearchResults(), so that other developers can create alternative report generators.
''2006.01.17 [2.1.4]'' Use regExp.search() instead of regExp.test() to scan for matches.  Correctd the problem where only half the matching tiddlers (the odd-numbered ones) were being reported.
''2006.01.15 [2.1.3]'' Added information (date/time, username, search options used) to SearchResults output
''2006.01.10 [2.1.2]'' use displayTiddlers() to render matched tiddlers.  This lets you display multiple matching tiddlers, even if SinglePageModePlugin is enabled.
''2006.01.08 [2.1.1]'' corrected invalid variable reference, "txt.value" to "text" in story.search()
''2006.01.08 [2.1.0]'' re-write to match new store.search(), store.search.handler() and story.search() functions.
''2005.12.30 [2.0.0]'' Upgraded to TW2.0
when rendering SearchResults tiddler, closeTiddler() first to ensure display is refreshed.
''2005.12.26 [1.4.0]'' added option to search for matching text in tiddler tags
''2005.12.21 [1.3.7]'' use \\ to 'escape' single quotes in tiddler titles when generating "Open all matching tiddlers" link.  Also, added access key: "O", to trigger "open all" link.
Based on a suggestion by UdoBorkowski.
''2005.12.18 [1.3.6]'' call displayMessage() AFTER showing matching tiddlers so message is not cleared too soon
''2005.12.17 [1.3.5]'' if no matches found, just display message and delete any existing SearchResults tiddler.
''2005.12.17 [1.3.4]'' use {/%%/{/%%/{  and }/%%/}/%%/} to 'escape' display text in SearchResults tiddler to ensure that formatting contained in search string is not rendered 
Based on a suggestion by UdoBorkowski.
''2005.12.14 [1.3.3]'' tag SearchResults tiddler with 'excludeSearch' so it won't list itself in subsequent searches
Based on a suggestion by UdoBorkowski.
''2005.12.14 [1.3.2]'' added "open all matching tiddlers..." link to search results output.
Based on a suggestion by UdoBorkowski.
''2005.12.10 [1.3.1]'' added "discard search results" link to end of search list tiddler output for quick self-removal of 'SearchResults' tiddler.
''2005.12.01 [1.3.0]'' added chkSearchIncremental to enable/disable 'incremental' searching (i.e., search after each keystroke) (default is ENABLED).
added handling for Enter key so it can be used to start a search.
Based on a suggestion by LyallPearce
''2005.11.25 [1.2.1]'' renamed from SearchTitleOrTextPlugin to SearchOptionsPlugin
''2005.11.25 [1.2.0]'' added chkSearchList option
Based on a suggestion by RodneyGomes
''2005.10.19 [1.1.0]'' added chkSearchTitlesFirst option.
Based on a suggestion by ChristianHauck
''2005.10.18 [1.0.0]'' Initial Release
Based on a suggestion by LyallPearce.
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].
<<<
!!!!!Code
***/
//{{{
version.extensions.SearchTitleOrText = {major: 2, minor: 4, revision: 0, date: new Date(2006,10,12)};
//}}}

//{{{
if (config.options.chkSearchTitles==undefined) config.options.chkSearchTitles=true;
if (config.options.chkSearchText==undefined) config.options.chkSearchText=true;
if (config.options.chkSearchTags==undefined) config.options.chkSearchTags=true;
if (config.options.chkSearchFields==undefined) config.options.chkSearchFields=true;
if (config.options.chkSearchTitlesFirst==undefined) config.options.chkSearchTitlesFirst=false;
if (config.options.chkSearchList==undefined) config.options.chkSearchList=false;
if (config.options.chkSearchIncremental==undefined) config.options.chkSearchIncremental=false;
if (config.options.chkSearchShadows==undefined) config.options.chkSearchShadows=false;

config.shadowTiddlers.AdvancedOptions += "\n<<option chkSearchTitles>> Search in tiddler titles";
config.shadowTiddlers.AdvancedOptions += "\n<<option chkSearchText>> Search in tiddler text";
config.shadowTiddlers.AdvancedOptions += "\n<<option chkSearchTags>> Search in tiddler tags";
config.shadowTiddlers.AdvancedOptions += "\n<<option chkSearchFields>> Search in tiddler data fields";
config.shadowTiddlers.AdvancedOptions += "\n<<option chkSearchShadows>> Search in shadow tiddlers";
config.shadowTiddlers.AdvancedOptions += "\n<<option chkSearchTitlesFirst>> Search results show title matches first";
config.shadowTiddlers.AdvancedOptions += "\n<<option chkSearchList>> Search results show list of matching tiddlers";
config.shadowTiddlers.AdvancedOptions += "\n<<option chkSearchIncremental>> Incremental searching";
//}}}

//{{{
if (config.macros.search.reportTitle==undefined)
	config.macros.search.reportTitle="SearchResults";
//}}}

//{{{
config.macros.search.handler = function(place,macroName,params)
{
	var lastSearchText = "";
	var searchTimeout = null;
	var doSearch = function(txt)
		{
		if (!txt.value.length && !confirm("No search text.  Continue anyway?")) { txt.focus(); return; }
			{
			story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);
			lastSearchText = txt.value;
			}
		};
	var clickHandler = function(e)
		{
		doSearch(this.nextSibling);
		return false;
		};
	var keyHandler = function(e)
		{
		if (!e) var e = window.event;
		switch(e.keyCode)
			{
			case 13: // ELS: handle enter key
				doSearch(this);
				break;
			case 27:
				this.value = "";
				clearMessage();
				break;
			}
		if (config.options.chkSearchIncremental)
			{
			if(this.value.length > 2)
				{
				if(this.value != lastSearchText)
					{
					if(searchTimeout) clearTimeout(searchTimeout);
					var txt = this;
					searchTimeout = setTimeout(function() {doSearch(txt);},500);
					}
				}
			else
				if(searchTimeout) clearTimeout(searchTimeout);
			}
		};
	var focusHandler = function(e)
		{
		this.select();
		};
	var btn = createTiddlyButton(place,this.label,this.prompt,clickHandler);
	var txt = createTiddlyElement(place,"input",null,null,null);
	if(params[0])
		txt.value = params[0];
	txt.onkeyup = keyHandler;
	txt.onfocus = focusHandler;
	txt.setAttribute("size",this.sizeTextbox);
	txt.setAttribute("accessKey",this.accessKey);
	txt.setAttribute("autocomplete","off");
	if(config.browser.isSafari)
		{
		txt.setAttribute("type","search");
		txt.setAttribute("results","5");
		}
	else
		txt.setAttribute("type","text");
}
//}}}

//{{{
Story.prototype.search = function(text,useCaseSensitive,useRegExp)
{
	highlightHack = new RegExp(useRegExp ? text : text.escapeRegExp(),useCaseSensitive ? "mg" : "img");
	var matches = store.search(highlightHack,"title","excludeSearch");
	var q = useRegExp ? "/" : "'";
	clearMessage();
	if (!matches.length) {
		if (config.options.chkSearchList) discardSearchResults();
		displayMessage(config.macros.search.failureMsg.format([q+text+q]));
	} else {
		if (config.options.chkSearchList) 
			reportSearchResults(text,matches);
		else {
			var titles = []; for(var t=0; t<matches.length; t++) titles.push(matches[t].title);
			this.closeAllTiddlers(); story.displayTiddlers(null,titles);
			displayMessage(config.macros.search.successMsg.format([matches.length, q+text+q]));
		}
	}
	highlightHack = null;
}
//}}}

//{{{
TiddlyWiki.prototype.search = function(searchRegExp,sortField,excludeTag)
{
	var candidates = this.reverseLookup("tags",excludeTag,false,sortField);

	// scan for matching titles first...
	var results = [];
	if (config.options.chkSearchTitles) {
		for(var t=0; t<candidates.length; t++)
			if(candidates[t].title.search(searchRegExp)!=-1)
				results.push(candidates[t]);
		if (config.options.chkSearchShadows)
			for (var t in config.shadowTiddlers)
				if ((t.search(searchRegExp)!=-1) && !store.tiddlerExists(t))
					results.push((new Tiddler()).assign(t,config.shadowTiddlers[t]));
	}
	// then scan for matching text, tags, or field data
	for(var t=0; t<candidates.length; t++) {
		if (config.options.chkSearchText && candidates[t].text.search(searchRegExp)!=-1)
			results.pushUnique(candidates[t]);
		if (config.options.chkSearchTags && candidates[t].tags.join(" ").search(searchRegExp)!=-1)
			results.pushUnique(candidates[t]);
		if (config.options.chkSearchFields && store.forEachField!=undefined) // requires TW2.1 or above
			store.forEachField(candidates[t],
				function(tid,field,val) { if (val.search(searchRegExp)!=-1) results.pushUnique(candidates[t]); },
				true); // extended fields only
	}
	// then check for matching text in shadows
	if (config.options.chkSearchShadows)
		for (var t in config.shadowTiddlers)
			if ((config.shadowTiddlers[t].search(searchRegExp)!=-1) && !store.tiddlerExists(t))
				results.pushUnique((new Tiddler()).assign(t,config.shadowTiddlers[t]));

	// if not 'titles first',  re-sort results to so titles, text, tag and field matches are mixed together
	if(!sortField) sortField = "title";
	var bySortField=function (a,b) {if(a[sortField] == b[sortField]) return(0); else return (a[sortField] < b[sortField]) ? -1 : +1; }
	if (!config.options.chkSearchTitlesFirst) results.sort(bySortField);

	return results;
}
//}}}

// // ''REPORT GENERATOR''
//{{{
if (!window.reportSearchResults) window.reportSearchResults=function(text,matches)
{
	var title=config.macros.search.reportTitle
	var q = config.options.chkRegExpSearch ? "/" : "'";
	var body="\n";

	// summary: nn tiddlers found matching '...', options used
	body+="''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''\n";
	body+="^^//searched in:// ";
	body+=(config.options.chkSearchTitles?"''titles'' ":"");
	body+=(config.options.chkSearchText?"''text'' ":"");
	body+=(config.options.chkSearchTags?"''tags'' ":"");
	body+=(config.options.chkSearchFields?"''fields'' ":"");
	body+=(config.options.chkSearchShadows?"''shadows'' ":"");
	if (config.options.chkCaseSensitiveSearch||config.options.chkRegExpSearch) {
		body+=" //with options:// ";
		body+=(config.options.chkCaseSensitiveSearch?"''case sensitive'' ":"");
		body+=(config.options.chkRegExpSearch?"''text patterns'' ":"");
	}
	body+="^^";

	// numbered list of links to matching tiddlers
	body+="\n<<<";
	for(var t=0;t<matches.length;t++) body+="\n# [["+matches[t].title+"]]";
	body+="\n<<<\n";

	// open all matches button
	body+="<html><input type=\"button\" href=\"javascript:;\" ";
	body+="onclick=\"story.displayTiddlers(null,["
	for(var t=0;t<matches.length;t++)
		body+="'"+matches[t].title.replace(/\'/mg,"\\'")+"'"+((t<matches.length-1)?", ":"");
	body+="],1);\" ";
	body+="accesskey=\"O\" ";
	body+="value=\"open all matching tiddlers\"></html> ";

	// discard search results button
	body+="<html><input type=\"button\" href=\"javascript:;\" ";
	body+="onclick=\"story.closeTiddler('"+title+"'); store.deleteTiddler('"+title+"'); store.notify('"+title+"',true);\" ";
	body+="value=\"discard "+title+"\"></html>";

	// search again
	body+="\n\n----\n";
	body+="<<search \""+text+"\">> ";
	body+="<<option chkSearchTitles>>titles ";
	body+="<<option chkSearchText>>text ";
	body+="<<option chkSearchTags>>tags";
	body+="<<option chkSearchFields>>fields";
	body+="<<option chkSearchShadows>>shadows";
	body+="<<option chkCaseSensitiveSearch>>case-sensitive ";
	body+="<<option chkRegExpSearch>>text patterns";

	// create/update the tiddler
	var tiddler=store.getTiddler(title); if (!tiddler) tiddler=new Tiddler();
	tiddler.set(title,body,config.options.txtUserName,(new Date()),"excludeLists excludeSearch");
	store.addTiddler(tiddler); story.closeTiddler(title);

	// use alternate "search again" label in <<search>> macro
	var oldprompt=config.macros.search.label;
	config.macros.search.label="search again";

	// render/refresh tiddler
	story.displayTiddler(null,title,1);
	store.notify(title,true);

	// restore standard search label
	config.macros.search.label=oldprompt;

}

if (!window.discardSearchResults) window.discardSearchResults=function()
{
	// remove the tiddler
	story.closeTiddler(config.macros.search.reportTitle);
	store.deleteTiddler(config.macros.search.reportTitle);
}
//}}}
{{textcenter{
[img[http://img135.imageshack.us/img135/9148/cooplogopb8.jpg]]<html><form id="searchbox_009953271955546518926:sihzqd-xyr0" action="http://www.google.com/cse" target="_blank"><input type="hidden" name="cx" value="009953271955546518926:sihzqd-xyr0" /><input name="q" type="text" size="40" value=" TiddlyWiki " /><input type="submit" name="sa" value="Search" /><input type="hidden" name="cof" value="FORID:0" /></form><script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=searchbox_009953271955546518926%3Asihzqd-xyr0"></script></html>
[img[http://img511.imageshack.us/img511/1281/poweredbyffffffqs2.gif]] ^^Custom Search^^
@@color:#999;~~Include the word ~TiddlyWiki in your search for best results~~@@

}}}
/%
|Name|SetSidebarTabsHeight|
|Source|http://www.TiddlyTools.com/#SetSidebarTabsHeight|
|Version|1.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|use CSS to set a scrolling, fixed or percentage height for popups (e.g. tags display)|

usage: <<tiddler SetPopupsHeight with: height>>

where 'height' is an *optional* param to override the current value (if any)

%/<script>
	if (config.options.txtPopupsHeight==undefined) config.options.txtPopupsHeight="auto";
	if ('$'+'1'!='$1') config.options.txtPopupsHeight='$1';
	window.setPopupsHeight=function() {
		var h=config.options.txtPopupsHeight; if (!h.length) h='auto';
		if (!h.replace(/[0-9]*/,"").length) h+="px"; // add "px" suffix if only numeric value
		this.value=h; // update field content
		if (h.indexOf("%")!=-1)
			h=(findWindowHeight()*parseInt(h.replace(/%/,""))/100)+"px"; // % of window
		var heightParam=(config.browser.isIE?"height":"max-height")+":"+h;
		var overflowParam='overflow:'+(h!='auto'?'auto':'hidden')+' !important'; 
		var css='.popup { '+heightParam+'; '+overflowParam+'; }';
		setStylesheet(css,"popupStyles");
		// sync any option field that is showing txtPopupsHeight value
		var nodes = document.getElementsByTagName("input");
		for(var t=0; t<nodes.length; t++) 
			if(nodes[t].getAttribute("option")=="txtPopupsHeight")
				nodes[t].value=this.value;
	}
	setTimeout('window.setPopupsHeight()',1); // initialize height
	if (window.addEventListener) window.addEventListener("resize",window.setPopupsHeight,false);
</script>popups height: {{smallform{<<option txtPopupsHeight>><script>
	var t=place.lastChild
	t.style.width="4em";
	t.style.textAlign="center";
	t.title="enter height using CSS dimensions (px, em, in, cm, %) or 'auto'";
	t.onfocus=function(){this.select();};
	// hijack onchange for this field so CSS can be updated on the fly
	t.coreOnChange=t.onchange;
	t.onchange=function() {
		if (this.coreOnChange) this.coreOnChange();
		window.setPopupsHeight();
	};
</script>}}}
First, install this tiddler:
   http://www.TiddlyTools.com/#SetTiddlerBackground

Next, create a tiddler called ~BackgroundColors containing:
{{{
   <<tiddler SetTiddlerBackground with: #0C0 - onschedule tiddler>>
   <<tiddler SetTiddlerBackground with: #FC0 - imminent tiddler>>
   <<tiddler SetTiddlerBackground with: #F00 - pastdue tiddler>>
}}}
Then, modify your [[ViewTemplate]] and add:
{{{
   <span macro="tiddler BackgroundColors" style="display:none"></span>
}}}
Finally, tag the desired tiddlers with "onschedule" or "imminent" or
"pastdue"
Source: http://tinyurl.com/6d5sue
This only changes the background of the contents of the tab; not the tab itself.
#container {
position: relative;
margin: 0 auto;
padding: 0;width: 770px;	
text-align: left;
background: #F1EFE2 url(container-bg.gif) no-repeat 0px 185px;}

#detail-left
 {position: absolute;
top: 185px;left: 0;
margin: 0;
padding: 0;
width: 10px;
height: 65px;
background: url(detail-left.gif) no-repeat;
}

#detail-right {
position: absolute;top:
 185px;right: 0;
margin: 0;
padding: 0;
width: 10px;
height: 65px;
background: url(detail-right.gif) no-repeat;
}
<html><hide linebreaks>
<div class="container">
<div class="left" macro='tiddler SideBarOptions'></div>
<div class="content" macro='tiddler SideBarTabs'></div>
<div
<div  class="footer" macro='tiddler ToolTabs'></div>
</html>

<html><div id="systemcontents">@@padding:0.6em;<<slider chkSliderSideBarTabs SideBarTabsSlider 'tabs »' 'tiddlers, timeline, all, tags, and more'>>@@</div></html>
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>
!!!!!<<gradient horiz #fcb #fff>>&nbsp;SidebarNews>>
*See [[instructions|Instructions]] how to load Sidebar Notes into your Firefox browser sidebar
*There is now a new discussion group dedicated to sidebar news.  This includes all existing ~TiddlyWiki sidebars and those under development.  Customized tiddlers to fit any sidebar is encouraged. 
*This will allow ~TiddlyWiki non-programmers to participate in development of applications and share in the joy of making a contribution to the ~TiddlyWiki community. *Anyone in the ~TiddlyWiki community is invited to participate.
<<<
Join the discussion group here:[[SidebarNews|http://groups.google.com/group/sidebarnews?lnk=li]]
<<<
<<tiddler SidebarNotesUpdate>>
!!!!!<<gradient horiz #fcb #fff>>&nbsp;This could be your news $>>
Enquires: <<tiddler [[EmailTWHelp]]>>
This is ~SideBar Notes live update notification.
The Version you are viewing this with was <<tiddler lastModified>> your time.
----
<html><iframe id="sidebarupdate" name="sidebarupdate" src="http://www.symbex.net.au/Wiki/SidebarLastUpdate.htm" frameborder="0" width="100%" height="100" marginheight="2px" marginwidth="2px"></iframe></html>
<html><ol><li><a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('PageProjectList').readBracketedList())"><span title="Close all tiddlers and open Welcome" style="cursor:pointer">SidebarPageProject</span></a>{{grayLink{[[edit»|PageProjectList]]}}}</li></ol></html>
a reusable non-linear personal web notebook
@@color:#0cc;font-size:2.5em;TW ~WebPage@@
<html><div id="slantedmenu" padding:top:2em;><span style='font-weight:normal;float:center;'><ul><li><a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('DefaultTiddlers').readBracketedList())"><span title="Close all tiddlers and open Welcome" style="cursor:pointer">Home</span></a></li><li><span style="float:center;padding-left:0em;" title="Load this page in sidebar" style="cursor:help"><a href="#" target="_search">« Load</a></span></li><li><<toggleToolyBars "" "" hide>></li><li>[[View|ViewTabs]]</li><li><span title='open sidebar tools for upload download advanced options'>[[Tools|MoreTools]]</li></span></li><br><li><<search>></li><li>[[options|Search]]</li><br><li><<newTiddler>></li><li>[[Help|Help]]</li><li><<toggleTiddlersBar "" "" show>></li><li><<newJournal "YYYY.0MM.0DD 0hh:0mm:0ss" "journal">></li><br><li><<fontSize>></li></div></html>
/***
!!!<<gradient horiz #fc3 #fff >><<tiddler RefreshStyles>>&nbsp;SlantedStyle>>/%==================================================%/
***/

/*Credits: Dynamic Drive CSS Library */
/*URL: http://www.dynamicdrive.com/style/ */

#slantedmenu{
  font-size: 95%;
  border-bottom: solid 1px #fa9;
  border-top: solid 1px #fa9;
}

#slantedmenu:after{ /*Add margin between menu and rest of content in Firefox*/
content: "."; 
display: block; 
height: 0; 
clear: both; 
visibility: hidden;
}

#slantedmenu ul{
text-indent: 10px;
padding: 7px 0;
margin: 0;
background-color: #ccc; 
border: 0px solid #f6f;
text-align: center; /*set value to "center" for example to center items*/
}

#slantedmenu ul li{
display: inline;
}

#slantedmenu ul li a{
font-weight: bold;
color: #099;
padding: 3px 0;
padding-right: 5px;
padding-left: 5px;
margin: 0;
text-decoration: none;
background: transparent url("") top right no-repeat;
}


#slantedmenu ul li a:hover{
color: #f00;
background:#fff;
}
Actually, ~TiddlyVault is just using several of the TW core's standard
{{{<<slider>>}}} macros in the [[MainMenu]], with a little bit of extra CSS
applied via a "class wrapper" around each, like this:

{{{
{{tuduSlider{<<slider chkAppearance Appearance 'Appearance »'>>}}}
{{tuduSlider{<<slider chkNavigation Navigation 'Navigation »'>>}}}
{{tuduSlider{<<slider chkTools Tools 'Tools »'>>}}}
{{tuduSlider{<<slider chkWorkingWith WorkingWith 'Working with...
»'>>}}}
}}}

Where "tuduSlider" is a custom CSS class (defined in [[StyleSheet]]),
and the macro params are:
{{{<<slider cookiename tiddlername label tooltip>>}}}

This means that there are four separate tiddlers that define the
contents of the menu subsections: Appearance, Navigation
Tools, and ~WorkingWith, each of which contains a bullet list
of ~TiddlyLinks.

You can get a similar effect by importing:
http://www.TiddlyTools.com/#NestedSlidersPlugin
which will allow you to write the entire menu within the MainMenu
tiddler, without using separate tiddlers for each subsection, like
this:
{{{
+++(chkAppearance){{classname{[Appearance »]}}}
* bullet
* bullet
etc.
===
+++(chkNavigation){{classname{[Navigation »]}}}
* bullet
* bullet
etc.
===
+++(chkTools){{classname{[Tools »]}}}
* bullet
* bullet
etc.
===
+++(chkWorkingWith){{classname{[WorkingWith »]}}}
* bullet
* bullet
etc.
===
}}}
... and, you can also add a "*" into the ~NestedSliders usage, like
this:
{{{
+++(cookiename)!!!*{{classname{[label]}}}
* bullet
* bullet
etc.
===
}}}
which makes each slider "transient", so that only one slider is open
at a time (i.e., the 'accordion effect', and clicking elsewhere in the
document closes all subsections to automatically reduce clutter while
working.

There's several other convenient syntax options, including alternative
labels for opened vs. closed sliders and key assignments for quick alt-
shift-letter access.  See
http://www.TiddlyTools.com/#NestedSlidersPluginInfo for complete details.}}}

e
enjoy, 

Source: Tiddly Vault Menu - TiddlyWiki : Google Groups
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>><<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.soutaraccountants.com.au]]&nbsp;&raquo;|
----
<html><div align="center"><iframe  src ="http://www.soutaraccountants.com.au" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
/***
|''Name:''|SparklinePlugin|
|''Description:''|Sparklines macro|
***/
//{{{
if(!version.extensions.SparklinePlugin) {
version.extensions.SparklinePlugin = {installed:true};

//--
//-- Sparklines
//--

config.macros.sparkline = {};
config.macros.sparkline.handler = function(place,macroName,params)
{
	var data = [];
	var min = 0;
	var max = 0;
	var v;
	for(var t=0; t<params.length; t++) {
		v = parseInt(params[t]);
		if(v < min)
			min = v;
		if(v > max)
			max = v;
		data.push(v);
	}
	if(data.length < 1)
		return;
	var box = createTiddlyElement(place,"span",null,"sparkline",String.fromCharCode(160));
	box.title = data.join(",");
	var w = box.offsetWidth;
	var h = box.offsetHeight;
	box.style.paddingRight = (data.length * 2 - w) + "px";
	box.style.position = "relative";
	for(var d=0; d<data.length; d++) {
		var tick = document.createElement("img");
		tick.border = 0;
		tick.className = "sparktick";
		tick.style.position = "absolute";
		tick.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
		tick.style.left = d*2 + "px";
		tick.style.width = "2px";
		v = Math.floor(((data[d] - min)/(max-min)) * h);
		tick.style.top = (h-v) + "px";
		tick.style.height = v + "px";
		box.appendChild(tick);
	}
};


}
//}}}
!!!!!<<gradient horiz #fcb #fff>>&nbsp;Entities>>
<html><hide linebreaks><ul><li><a href="http://www.43folders.com/2005/01/19/mark-taw-on-procrastination/">Mark Taw on Procrastination</a> - Mark’s article gets to the core problems that cause people to get derailed, distracted, and perpetually off-target.</li></ul</html>
!!!!!<<gradient horiz #fcb #fff>>&nbsp;StepThree>>
<html><hide linebreaks><ul><li><a href="http://www.43folders.com/2005/04/25/choosing-a-daily-gtd-action-plan/">Choosing a daily GTD action plan</a> - Chris Murtland’s “revolving workflow strategies” for GTD are smart, realistic, and just might save you from a _fractal productivity spiral.</li></ul</html>
!!!!!<<gradient horiz #fcb #fff>>&nbsp;StepTwo>>
<html><hide linebreaks><ul><li><a href="http://www.43folders.com/2005/06/20/solid-tactics-for-understanding-and-beating-procrastination/">Solid tactics for understanding (and beating) procrastination</a></li><li><a href="http://thenowhabit.43folders.com/" title="Neil Fiore's 'The Now Habit' on the 43 Folders Store">Neil  Fiore</a>-esque advice on unpacking why you’re procrastinating and rewiring the crummy thinking that supports it. </li></ul</html>
/***
!!!<<gradient horiz #FF8888 #ffffff >>&nbsp;~StyleSheet>>/%==================================================%/
***/
/*{{{*/

.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a, .popup li a:visited {color:#090; border: none;}



body {background:#fff;
font-size:0.75em;}

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;margin-bottom:0.12em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}



p.first-line 
{
color: #ff0000;
font-variant: small-caps
}

.txtMainTab .tabContents #tiddlertimeline li {list-style:none;}
.popup li {list-style:none;}

.header {position:relative; height:60px;}
.header a:hover {background:transparent;}
/*.headerShadow {position: relative;padding: 0em 0em 0em 1em;left: 0px; top: 0px;}
.headerForeground {position:absolute;padding:0.0em 0em 1em 1em; left:0px; top:0px;}*/

.title {
	color:#c06;
        font-variant:small-caps;
        font-size:1.4em;
        font-weight:normal; 
        padding-top: 0em;
        padding-left: 0.65em;
}

.editorFooter a {color:#f00;}
.editorFooter a:hover {color:#f00;background:#0cc;}

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

.viewer {
      
        padding-left: 0em;
        padding-right: 0em;
	padding-top: 0.0em;
        
}

.viewer a {
color:#04b;
background: transparent;
padding-left:2px;
padding-right:2px;
text-decoration:none;
}

.viewer a:hover {
	background: #fff;
	color: #f00;
}

.viewer hr {
	border: 0px;
	border-top: solid 1px #c06;
	color: #c06;
}

.viewer .tabSelected {
        font-size:0.95em;
        font-weight:bold;
        color:#000;
	text-decoration:none;
        background: #eef;
        border: 1px 1px 0px 1px solid #999;
       
}

.viewer .tabUnselected {
        font-size:0.95em;
        font-weight:bold;
	color:#008;
        background:#adf;/% #f88;%/
        text-decoration:none;
        border:#000;
        border-left: 1px solid #999;
	border-top: 1px solid #999;
	border-right: 1px solid #999;

}

.viewer .button {
	border: 0px solid #fff;
         color:#009;
}


.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:#0cc;}

.viewer blockquote {
	border-left: 1px solid #c06;
}

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


.viewer {
background:#fff;
        padding-left: 0.5em;
        padding-right: 0.5em;
	padding-top: 0.5em;
     
}


.button {
	border: 0px solid #fff;
}

.textleft { display:block;text-align:left; }
.textleftM { display:block;text-align:left; margin:0;padding:0;border:0;margin-left:.95em; }

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



.whiteLink a { color: #fff;
font-weight:normal; } 
.unboldlink a {font-weight:normal;}
.twLink a { color: #090;
font-weight:normal; }
.locLink a { color: #c06;
font-weight:normal; }
.remLink a { color: #c90;
font-weight:normal; } 

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

.firstletter{ float:left; width:0.40em; font-size:400%; font-family:times,arial; line-height:90%; }

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

.toolbar {
 color: #fff;
}

.selected .toolbar a {
 color: #000;
}

.selected .toolbar a:hover {
 background: #ffd /*#ef9*/;
 color: #F00;
}


/***
!!!<<gradient horiz #FF8888 #ffffff >>&nbsp;Nested Style Sheets>>/%==================================================%/
***/

/*}}}*/

[[ButtonStyle]]
[[CustomCSS]]
[[SlantedStyle]]
[[BackstageCSS]]
[[StyleSheetTiddlersBar]]
[[WebStyleSheet]]
[[CenterBoxCSS]]
[[WebPageTLCF]]
[[PageCSS]]
[[PresentCSS]]
[[SDCSS]]
[[HTMLStructureTwoColumnCSS]]

/*{{{*/

/***
!!!<<gradient horiz #FF8888 #ffffff >>&nbsp;Nested Style Sheets>>/%==================================================%/
***/



#messageArea { 
  background-color: #0ee; 
  border-color: #fa9;
  color:#FFF; 
  border-width: 4px; 
  border-style: dotted; 
  font-size: 90%; 
  padding: 0.5em; 
margin-right:16em;
  -moz-border-radius: 1em; }

#messageArea .button { text-decoration:none; font-weight:bold; background:transparent; border:0px; }
#messageArea .button:hover {background: #F00; }


#tiddlerDisplay {padding-right:0em; padding-left:0em;margin:auto;}
.header {display:none;}
#sidebar{display:none;}
#mainMenu{display:none;}
#tiddlerDisplay {margin:0em 0em 0em 0em !important;padding:0em 0em 0em 0em !important;}
#contentWrapper  {margin:0em 0em 0em 0em !important;padding:0em 0em 0em 0em !important;}
#displayArea {margin:0em -1.5em 0em -1.5em !important;padding:0em 0em 0em 0em !iimportant;}

.button {color: #0cc;border: 0px solid #fff;}
.button:hover {color: #0cc;background: #60F;border-color: #db4;}
.button:visited {color: #0cc;background: #60F;border-color: #db4;}
.button:active {color: #0cc;background: #18f;border: 0px solid #841;}
a:visited {color: #0cc;background: #60F;border-color: #db4;}

/*}}}*/

/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

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

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

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

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

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

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

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



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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
!!!<<gradient horiz #fc3 #fff >><<tiddler RefreshStyles>>&nbsp;StyleSheetTiddlersBar>>/%==================================================%/
***/

#tiddlersBar .button {border:1px; color:#000;}
#tiddlersBar .tab {white-space:nowrap;}
#tiddlersBar {padding : 0.75em 0.5em 0.05em 1.0em;margin-left:0em;margin-right:0em}
#tiddlersBar {margin-bottom:0px;}

.tabSelected .button:hover {font-size:0.75em;font-weight:bold;color: #f00;background: #fff;padding : 0px 0px 0px 2px;}
.tabUnselected .button:hover {font-size:0.75em;color: #f00;background: #fff; padding : 0px 0px 0px 2px;}

.tabUnselected .button {font-size:0.75em;font-weight:bold;color: #066; padding : 0px 0px 0px 2px;}
.tabSelected .button {font-size:0.75em;font-weight:bold;color: #333;padding : 0px 0px 0px 2px;}

.tabUnselected {background:#ccc;border: 1px #eee solid; border-bottom:0px;}
.tabUnselected .tabButton {font-weight:bold;font-size:0.75em;fcolor:#fff;background:#ccc; padding : 0px 2px 0px 2px; margin: 0 0 0 1px;}

.tabSelected {background:#fcb;border: 1px #c06 solid;border-bottom:0px;}
.tabSelected .tabButton {font-weight:bold;font-size:0.75em;fcolor:#f00;background:#fcb;padding : 0px 2px 0px 2px; margin: 0 0 0 1px;}

.tabSelected .tabButton:hover {font-weight:bold;color: #f00;background: #fff;}
.tabUnselected .tabButton:hover {font-weight:bold;color: #f00;background: #fff;}

.tiddler, .tabContents {border-top:0px #fa0 solid;margin-left:0.5em;margin-right:0.5em;}
#tiddlersBar .tab {-moz-border-radius : 0.4em 0.4em 0 0;}
#tiddlersBar  {background:#0cc;line-height: 1.45em;}

.tiddlerDisplay {margin-top:2.0em;margin-right:1em;}





!!!!!<<gradient horiz #fcb #fff>>&nbsp;[[Styling]]>>
@@color:#C06;''&raquo; &raquo;'' @@   Tabs containing CSS styling code (controls layout and visual style)
----
<script>
// get all tiddlers tagged with "css"
var tids=store.getTaggedTiddlers("css");
// keep only tiddlers *also* tagged with New
var list=[];
for (var t=0; t<tids.length; t++)
   if (tids[t].isTagged("css")) list.push(tids[t]);
// create output list of tiddler titles, one per line
var out="";
for (var t=0; t<list.length; t++) out+="#[["+list[t].title+"]]\n";
return out;
</script> 
!!!<<gradient horiz #fcb #ffffff>>[[Sun]]^^<<tiddler CloseThisOpen with: MiniPlanner  '« back'>>[[edit»|Sun]] ^^>>
Got no plans for next Sunday, got no plans for today. I've had nothing but sorrow since you've been away
@@color:#C06;''&raquo; &raquo;'' @@ Tabs with reserved names (can be 'over-written' with Tabs of the same name making the originals silent; but, they remain unchanged in the core code)
----
[[nonotesViewTemplate]]
<<list shadowed>>
On Apr 11, 4:13 am, koyut <koyut.c...@gmail.com> wrote:
What is you top TW plugin recommendation? Generally useful plugins...

I use the MPTW bunled plugins that come with the adaptation:
http://mptw.tiddlyspot.com/

Upload and Password Options to make it easier to edit locally and
instanly upload my page:
http://tiddlywiki.bidix.info/#UploadPlugin
http://tiddlywiki.bidix.info/#PasswordOptionPlugin

To help with editing:
http://tiddlywiki.bidix.info/#IsDirtyPlugin
http://www.tiddlytools.com/#QuickEditPackage
http://www.tiddlytools.com/#HTMLFormattingPlugin

Additional features for TW:
http://www.tiddlytools.com/#SearchOptionsPlugin
http://www.tiddlytools.com/#AdvancedOptionsPlugin
http://visualtw.ouvaton.org/VisualTW.html#TiddlersBarPlugin
http://tw.lewcid.org/#SplashScreenPlugin
http://tw.lewcid.org/#AnnotationsPlugin
http://tw.lewcid.org/#TiddlyLightBoxPlugin

From: Eric Shulman <elsdes...@gmail.com>
Date: Thu, 10 Apr 2008 12:05:15 -0700 (PDT)

> What is you top TW plugin recommendation? Generally useful plugins...

Here's *my* favorites from TiddlyTools (of course, I am a bit
biased ;-)

Navigation:
   http://www.TiddlyTools.com/#GotoPlugin
   http://www.TiddlyTools.com/#SearchOptionsPlugin
   http://www.TiddlyTools.com/#BreadcrumbsPlugin
   http://www.TiddlyTools.com/#CollapseTiddlersPlugin
   http://www.TiddlyTools.com/#RearrangeTiddlersPlugin
Content/formatting:
   http://www.TiddlyTools.com/#QuickEditPackage
   http://www.TiddlyTools.com/#HTMLFormattingPlugin
   http://www.TiddlyTools.com/#NestedSlidersPlugin
   http://www.TiddlyTools.com/#InlineJavascriptPlugin
   http://www.TiddlyTools.com/#TaggedTemplateTweak
Authoring:
   http://www.TiddlyTools.com/#TextAreaPlugin
   http://www.TiddlyTools.com/#CopyTiddlerPlugin
   http://www.TiddlyTools.com/#UnsavedChangesPlugin
   http://www.TiddlyTools.com/#TiddlerTweakerPlugin
   http://www.TiddlyTools.com/#ImportTiddlersPlugin
   http://www.TiddlyTools.com/#NewDocumentPlugin
Inline scripts:
   http://www.TiddlyTools.com/#ShowDocumentInfo
   http://www.TiddlyTools.com/#ToggleLeftSidebar
   http://www.TiddlyTools.com/#ToggleRightSidebar
   http://www.TiddlyTools.com/#ToggleFullScreen
General:
   http://www.TiddlyTools.com/#CoreTweaks
	
Dave Gifford - http://www.giffmex.org/   	
From: "Dave Gifford - http://www.giffmex.org/" <giff...@gmail.com>
Date: Thu, 10 Apr 2008 13:15:23 -0700 (PDT)

I won't do any TW without SearchOptionsPlugin, one that you mentioned
in your list. Ought to be part of the core.

I also automatically add ForEachTiddlerPlugin for indexing tiddlers. I
also have fallen in love with the MonkeyTaggerPlugin for tags.

I'm sure you've seen TiddlyVault for many other plugin possibilities.
Blessings,

From: "Nicolas Syssoieff" <nicolas.syssoi...@gmail.com>
Date: Fri, 11 Apr 2008 08:30:25 +0200

Hi all,

GotoPlugin (listed by Eric anyway) is an absolute must for me, nothing
compares in speed when you want to open a particular tiddler.

Also, I would include TiddlerBarsPlugin. This is not for everyone, of
course, but I have found that for non-tech people, it helps a lot to jump in
the TW world, as it looks like a small browser-like tabs navigation within a
web page, and people tend to get familiar with tabs with FF and the recent
arrival of IE7 for IE users.

Nicolas

From: FND <F...@gmx.net>
Date: Fri, 11 Apr 2008 08:49:58 +0100

DisableWikiLinksPlugin
     http://www.tiddlytools.com/#DisableWikiLinksPlugin

DoBackupMacro
     http://jackparke.googlepages.com/jtw.html#DoBackupMacro

TagCloudPlugin
     http://www.tiddlytools.com/#TagCloudPlugin

Also handy sometimes: EvalMacro
     http://devpad.tiddlyspot.com/#EvalMacro

-- F.


Source: [[TW plugin recommendation|http://tinyurl.com/3fgj38]]
+++[TWGroups more...]}}}
<<<

[[TiddlyWiki|http://groups.google.com/group/TiddlyWiki?lnk=li]]
[[TiddlyWikiDiv|http://groups.google.com/group/TiddlyWikiDev?lnk=li]]
[[TiddlyWikiDocs|http://groups.google.com/group/tiddlywikidocs?lnk=li]]
<<<
===
!!!!!<<gradient horiz #fcb #fff>>&nbsp;TWHelp>>
doubleborder
<html><div style="float:right;"><a href="http://twhelp.tiddlyspot.com/" target="_blank"><span style="doubleborder;"><img src="http://img413.imageshack.us/img413/8916/twhelpio4.png" border="1" style="height: 120px;"/></a></span></div></html>
TW Help is an advanced beginners reference site on TiddlyWiki and its inter-workings and hidden mechanisms.

It takes a page down approach drilling down from the completed page to through each level of construction.  It has working examples and the code for each.  It also has lots of hints and kinks and snippets of hard to find scripts, macros and how they are used. Some of the Hints are unstructured adding a sense of discovery to the experience.
|>|bgcolor(#0cc):@@color(#000080):''2 tiddlers found matching /{{{MoreToolsSlider}}}/''@@|bgcolor(#0cc):  @@color(#A00000): SearchHelp@@ |
|>|>|bgcolor(#E3FFE3):<<search>> <<option chkSearchTitles>> Titles <<option chkSearchText>> Text <<option chkSearchTags>>Tags <<option chkHoldSearches>> Hold |

|bgcolor(#0cc):&nbsp;|bgcolor(#0cc):@@color(#000080):sort by: ''Titles''@@ |bgcolor(#0cc): @@color(#000080): ''Size'' (bytes)@@ |bgcolor(#0cc): @@color(#000080): ''Tags''@@ |h
| 1|[[MoreToolsSlider]]| 36|@@@@|
| 2|[[BackstageSlantedMenuTab]]| 232|@@systemConfig@@|
!!!!!<<gradient horiz #fcb #fff>>&nbsp;This could be your news $>>
Enquires: <<tiddler [[EmailTWHelp]]>>
Go visit our first advertiser @@color:#C06;''&raquo; &raquo;'' @@[[TW Help|http://twhelp.tiddlyspot.com]]
----
<html><iframe id="updatewindow" name="updatewindow" src="http://www.symbex.net.au/Wiki/LastUpdate.htm" frameborder="0" width="100%" height="100" marginheight="2px" marginwidth="2px"></iframe></html>
!!!<<gradient horiz #fcb #ffffff>>TWKeyStrokes ^^<<tiddler CloseThisOpen with: KeyStrokes  '« back'>>|<<toolbar editTiddler>>» ^^>>
''CTRL ENTER''
    Closes and accepts changes to the current tiddler being edited.
|NOTE:Check your EditTemplate and make sure there are no plus signs (+) in front of any command preceding +saveTiddler when using ~Ctrl-Enter |
''ESCAPE''
    Closes and discards changes to the current tiddler being edited.
!!!!Cut, Copy, and Paste
''CTRL X''
    Cut the selected text to the clipboard
''CTRL C''
    Copy the selected text to the clipboard
''CTRL V''
    Paste the clipboard to the current cursor position
!!!!Undo and Redo
''CTRL Z''
    Undo the last editing command
''CTRL Y''
    Redo the last undo command
----
Source: [[Tid-Help - a primer for tiddlywiki|http://tidhelp.tiddlyspot.com/]]
!!!!!<<gradient horiz #fcb #fff>>&nbsp;TWSites>>
<html><div id="systemcontents">
[[Master TiddlyWiki Site|http://tiddlywiki.com/]]<br>{{gray9{Jeremy Ruston's Official TW Information Source}}}
[[TiddlyWiki Discussion Group|http://groups.google.com/group/TiddlyWiki/topics]] <br>{{gray9{~TiddlyWiki Discussion Group}}}
[[TiddlyWiki Developers Group|http://groups.google.com/group/TiddlyWikiDev/]] <br>{{gray9{~TiddlyWiki Developers Discussion Group}}}
[[Sidebar Discussion Group|http://groups.google.com/group/sidebarnews]] <br> {{gray9{A discussion group for Sidebar topics and Applications}}}
[[Public Wiki Help Site|http://www.tiddlywiki.org/]] <br>{{gray9{ Go add your knowledge.}}}
http://trac.tiddlywiki.org/ <br>{{gray9{Provides the infrastructure needed to share in the development of TiddlyWiki.}}}
----
[[TiddlyVault|http://tiddlyvault.tiddlyspot.com/]]<br>{{gray9{ A directory of all known plugins}}}
{{twLink{[[SidebarPluginVault|http://sidebarpluginvault.tiddlyspot.com/index.html]]}}}
{{gray9{ A directory of all known plugins done in sidebar format for the Firefox Sidebar}}}
{{twLink{[[SidebarNotes|http://sidebarnotes.tiddlyspot.com/index.html]]}}}
{{gray9{ A general purpose project management TW done in sidebar format for the Firefox Sidebar}}}
{{twLink{[[Sidebar Discussion Group|http://groups.google.com/group/sidebarnews]]}}}
{{gray9{A discussion group for Sidebar topics and Applications}}}
{{twLink{[[TW Help|http://twhelp.tiddlyspot.com/]] }}}<br>{{gray9{A  ~TiddlyWiki help site for beginners TW Help Alt.http://tinyurl.com/3x3p4d}}}
----
[[TiddlyWiki for the rest of us |http://www.giffmex.org/twfortherestofus.html]]{{gray9{~TiddlyWiki tutorialSome other Giffmex, themes and applications.
[[Journal|http://www.giffmex.org/organizertw.html]] 
[[My Notes|http://www.giffmex.org/emptynotestw.html]]
[[TW Showcase|http://giffmex.tiddlyspot.com/]] 
[[TiddlyDu|http://www.giffmex.org/tiddlydu.html]]
[[Plugin (vault ) Directory|http://tiddlyvault.tiddlyspot.com/]] 
[[Web View Example|http://www.giffmex.org/webviewtwexample.html]]
----
[[A PowerPoint presentation on TiddlyWiki|http://www.giffmex.org/tiddlywikipowerpoint.ppt]] <br>{{gray9{  By Dave Gifford  (7mb)}}}
[[TiddlerToddler|http://tiddlertoddler.tiddlyspot.com/]] <br>{{gray9{ an absolute beginner's guide to ~TiddlyWiki}}}<br>
[[Wiki On A Stick|http://uniforum.chi.il.us/slides/TiddlyWiki.html]]
[[VisualTW|http://visualtw.ouvaton.org/VisualTW.html]] <br>{{gray9{ Wysiwyg plugin <br>{{gray9{ Encrypted fields plugin}}}
[[TiddlyWiki Guides|http://tiddlywikiguides.org/]]  <br>{{gray9{Welcome to the (unofficial) ~TiddlyWiki Guides}}}
[[TiddlyWikiTips|http://tiddlywikitips.com/]] <br>{{gray9{~TiddlyWikiTips.com is run by Jim Barr }}}
[[TiddlyWikiTutorial|http://www.blogjones.com/TiddlyWikiTutorial.html]] <br>{{gray9{Learn the Basics of ~TiddlyWiki}}}
[[TiddlySpot|http://tiddlyspot.com/]] <br>{{gray9{Free Tiddlywikis and  Hosting}}}
[[TiddlySpotFAQ|http://twfaq.tiddlyspot.com/]] <br>{{gray9{Questions and Answers}}}
[[TiddlyThemes|http://tiddlythemes.com/Home]]<br>{{gray9{ A gallery of ~TiddlyWiki themes }}}
[[TiddlyThemes-Rin|http://tiddlythemes.com/empties/Rin.html]]<br>{{gray9{ A Most Popular Theme [[Clint Checkett's Blog|http://blog.checkettsweb.com/]]}}}
[[TiddlyTools|http://tiddlytools.com/]] <br>{{gray9{Extensive collection of fabulous Plugins and much more}}}
[[Tid-Help|http://tidhelp.tiddlyspot.com/]] <br>{{gray9{ Help/Tutorial}}}
[[Knightnet|http://knighjm.googlepages.com/knightnet-default-tw.html]] <br>{{gray9{Knightnet Default ~TiddlyWiki  TW the way I like it - plus my Plugins}}}
[[Using TiddlyWiki|http://en.wikibooks.org/wiki/Using_TiddlyWiki]]  <br>{{gray9{From Wikibooks, the open-content textbooks collection}}}
[[Martin's Wiki|http://www.martinswiki.com/]] <br>{{gray9{ ~Cross-Wiki Formatting plugins}}} 
http://svn.tiddlywiki.org/Trunk/
http://svn.tiddlywiki.org/Trunk/contributors/
http://trac.tiddlywiki.org/browser/Trunk
</div></html>
<script>
   if (!window.story) window.story=window;
   var title=story.findContainingTiddler(place).id.substr(7);
   return title+" is using "+store.getTiddlerText(title).length+" bytes";
</script>
 @@color:#C06;''&raquo; &raquo;'' @@ ''Click on the tabs above to view''
----
*''AllTabs''  @@color:#C06;''&raquo; &raquo;'' @@ All tabs in alphabetical order
*''[[History]]''  @@color:#C06;''&raquo; &raquo;'' @@ Tabs with history of activity in reverse date order
* [[SystemTabs]] @@color:#C06;''&raquo; &raquo;'' @@ Tabs with reserved names (can be 'on top' appended but not changed)
*[[Programs]]  @@color:#C06;''&raquo; &raquo;'' @@  Tabs containing programs written in ~JavaScript (if tagged as systemConfig begin running a startup.)
*[[Styling]]  @@color:#C06;''&raquo; &raquo;'' @@ Tabs containing CSS styling code (controls layout and visual style)
*ExcludedFromSearches  @@color:#C06;''&raquo; &raquo;'' @@ Tabs not required (or desired) in searches
*ExcludedFromLists  @@color:#C06;''&raquo; &raquo;'' @@ Tabs not required (or desired) in lists
<<tag css>>
/***
|Name|TaggedTemplateTweak|
|Source|http://www.TiddlyTools.com/#TaggedTemplateTweak|
|Documentation|http://www.TiddlyTools.com/#TaggedTemplateTweakInfo|
|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|plugin|
|Requires||
|Overrides|Story.prototype.chooseTemplateForTiddler()|
|Description|use alternative ViewTemplate/EditTemplate for tiddler's tagged with specific tag values|
This tweak extends story.chooseTemplateForTiddler() so that ''whenever a tiddler is marked with a specific tag value, it can be viewed and/or edited using alternatives to the standard tiddler templates.'' 
!!!!!Documentation
>see [[TaggedTemplateTweakInfo]]
!!!!!Revisions
<<<
2008.04.01 [1.2.0] added support for using systemTheme section-based template definitions (requested by Phil Hawksworth)
2008.01.22 [*.*.*] plugin size reduction - documentation moved to [[TaggedTemplateTweakInfo]]
2007.06.23 [1.1.0] re-written to use automatic 'tag prefix' search instead of hard coded check for each tag.  Allows new custom tags to be used without requiring code changes to this plugin.
| please see [[TaggedTemplateTweakInfo]] for previous revision details |
2007.06.11 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.taggedTemplate= {major: 1, minor: 2, revision: 0, date: new Date(2008,4,1)};
Story.prototype.taggedTemplate_chooseTemplateForTiddler = Story.prototype.chooseTemplateForTiddler
Story.prototype.chooseTemplateForTiddler = function(title,template)
{
	// get default template from core
	var template=this.taggedTemplate_chooseTemplateForTiddler.apply(this,arguments);

	// if the tiddler to be rendered doesn't exist yet, just return core result
	var tiddler=store.getTiddler(title); if (!tiddler) return template;

	// look for template whose prefix matches a tag on this tiddler
	for (i=0; i<tiddler.tags.length; i++) {
		var t=tiddler.tags[i]+template; // add tag prefix
		var c=t.substr(0,1).toUpperCase()+t.substr(1); // capitalized for WikiWord title
		var s=config.options.txtTheme+"##"; // systemTheme section prefix
		if (store.tiddlerExists(t)) { template=t; break; }
		if (store.tiddlerExists(c)) { template=c; break; }
		if (store.getTiddlerText(s+t)) { template=s+t; break; }
		if (store.getTiddlerText(s+c)) { template=s+c; break; }
	}
	return template;
}
//}}}
<script>
if (!window.story) window.story=window;
var url=store.getTiddlerText("SiteUrl");
var title=story.findContainingTiddler(place).id.substr(7);
var permalink=encodeURIComponent(String.encodeTiddlyLink(title));
return "[img[Right click to Bookmark or Copy this tiddler Location|http://img117.imageshack.us/img117/6453/socialbookmarkiconcb4.gif]["+url+"#"+permalink+"]]";
</script>
!!!<<gradient horiz #fcb #ffffff>>[[Thu]]^^<<tiddler CloseThisOpen with: MiniPlanner  '« back'>>[[edit»|Thu]] ^^>>
* Holiday cards and family correspondence - Goal: 5 minutes or 2 notes. Grab a pen and start making with the nice. Tell them about Tyler’s big day at Computer Camp. Brag about Ashley-Marie’s jazz and tap recital. When you’ve hit two finished cards, stop.
/***
|''Name:''|TiddlerNotesPlugin|
|''Description:''|Add notes to tiddlers without modifying the original content|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#TiddlerNotesPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.1|
|''Date:''|26/10/07|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.3|

!!Concept:
*The TiddlerNotesPlugin allows you to add notes to tiddlers, without needing to edit the original tiddler. This means that your original content will remain unaltered, and if you update it in the future, you won’t lose your notes. Notes are stored in separate tiddlers, but can be viewed and edited from within the original tiddler.
*For a tiddler titled "~MySlide", the notes are by default saved in a tiddler titled "~MySlide-Notes" and is given a tag of "Notes". The suffix and tags of the notes tiddlers are customizable. You can have one or multiple notes per tiddlers. So it is possible to have for example, teacher's notes and student's notes in the same file.
*Notes can be configured to start off blank, or pre-filled with the contents of the original tiddler.

!!Usage:
*{{{<<notes>>}}} is the simplest usage form.
* additional optional parameters include:
**{{{heading:}}} the heading to use for the notes box
**{{{tag:}}} the tag to be given to the notes tiddler
**{{{suffix:}}} the suffix to be used when naming the notes tiddler
* a full macro call could look like: {{{<<notes heading:"My Notes" tag:"NoteTiddlers" suffix:"Comments">>}}}
* To avoid adding {{{<<notes>>}}} to each tiddler you want notes for, you could add the macro call to the ViewTemplate
** below the line {{{<div class='viewer' macro='view text wikified'></div>}}} add the following line: <br> {{{<div class='viewer' macro='notes'></div>}}}
** Used in combination with the ~HideWhenPlugin or ~PublisherPlugin, you could have notes be shown only for tiddlers with specific tags. The ~PublisherPlugin would allow you for instance to only have the ~TeachersNotes visible to the teacher, and the ~StudentsNotes for the same tiddler visible to the Student.

!!Configuration
*<<option chkPrefillNotes>> Enable to pre-fill notes with the original tiddler's contents

!!Demo:
* [[MySlide]]

***/
// /%
//!BEGIN-PLUGIN-CODE

if (!config.options.chkPrefillNotes)
	config.options.chkPrefillNotes = false;
	
function createTiddlyElement(theParent,theElement,theID,theClass,theText,attribs)
{
	var e = document.createElement(theElement);
	if(theClass != null)
		e.className = theClass;
	if(theID != null)
		e.setAttribute("id",theID);
	if(theText != null)
		e.appendChild(document.createTextNode(theText));
	if(attribs){
		for(var n in attribs){
			e.setAttribute(n,attribs[n]);
		}
	}
	if(theParent != null)
		theParent.appendChild(e);
	return e;
}

function createTiddlyButton(theParent,theText,theTooltip,theAction,theClass,theId,theAccessKey,attribs)
{
	var theButton = document.createElement("a");
	if(theAction) {
		theButton.onclick = theAction;
		theButton.setAttribute("href","javascript:;");
	}
	if(theTooltip)
		theButton.setAttribute("title",theTooltip);
	if(theText)
		theButton.appendChild(document.createTextNode(theText));
	if(theClass)
		theButton.className = theClass;
	else
		theButton.className = "button";
	if(theId)
		theButton.id = theId;
	if(attribs){
		for(var n in attribs){
			e.setAttribute(n,attribs[n]);
		}
	}
	if(theParent)
		theParent.appendChild(theButton);
	if(theAccessKey)
		theButton.setAttribute("accessKey",theAccessKey);
	return theButton;
}

config.macros.notes={
	
	cancelWarning: "Are you sure you want to abandon changes to your notes for '%0'?",
	editLabel: "edit notes",
	editTitle: "double click to edit",
	saveLabel: "save notes",
	saveTitle: "double click to save",
	cancelLabel: "cancel",
	heading: "Notes",
	suffix: "Notes",
	tag: "Notes",
	
	saveNotes: function(ev){
		e = ev? ev : window.event;
		var theTarget = resolveTarget(e);
		if (theTarget.nodeName.toLowerCase() == "textarea")
			return false;
		var title = story.findContainingTiddler(theTarget).getAttribute("tiddler");
		story.setDirty(title,false);
		var box = document.getElementById("notesContainer"+title);
		var textarea = document.getElementById("notesTextArea"+title);
		if(textarea.getAttribute("oldText")!=textarea.value && !hasClass(theTarget,"cancelNotesButton")){
			var suffix = box.getAttribute("suffix");
			var t = store.getTiddler(title+"-"+suffix);
			store.saveTiddler(title+"-"+suffix,title+"-"+suffix,textarea.value,config.options.txtUserName,new Date(),t?t.tags:box.getAttribute("tag"),t?t.fields:{});
		}
		story.refreshTiddler(title,1,true);
		autoSaveChanges(true);
		return false;
	},
	
	editNotes: function(box,tiddler){
		removeChildren(box);
		story.setDirty(tiddler,true);
		box.title = this.saveTitle;
		box.ondblclick = this.saveNotes;
		createTiddlyButton(box,this.cancelLabel,this.cancelLabel,this.saveNotes,"cancelNotesButton");
		createTiddlyButton(box,this.saveLabel,this.saveLabel,this.saveNotes,"saveNotesButton");
		wikify("!!"+box.getAttribute("heading")+"\n",box);
		addClass(box,"editor");
		var wrapper1 = createTiddlyElement(null,"fieldset",null,"fieldsetFix");
		var wrapper2 = createTiddlyElement(wrapper1,"div");
		var e = createTiddlyElement(wrapper2,"textarea","notesTextArea"+tiddler);
		var v = store.getValue(tiddler+"-"+box.getAttribute("suffix"),"text");
		if(!v) 
			v = config.options.chkPrefillNotes? store.getValue(tiddler,"text"):'';
		e.value = v;
		e.setAttribute("oldText",v);
		var rows = 10;
		var lines = v.match(/\n/mg);
		var maxLines = Math.max(parseInt(config.options.txtMaxEditRows),5);
		if(lines != null && lines.length > rows)
			rows = lines.length + 5;
		rows = Math.min(rows,maxLines);
		e.setAttribute("rows",rows);
		box.appendChild(wrapper1);
	},
	
	editNotesButtonOnclick: function(e){
		var title = story.findContainingTiddler(this).getAttribute("tiddler");
		var box = document.getElementById("notesContainer"+title);
		config.macros.notes.editNotes(box,title);
		return false;
	},
	
	ondblclick : function(ev){
		e = ev? ev : window.event;
		var theTarget = resolveTarget(e);
		var title = story.findContainingTiddler(theTarget).getAttribute("tiddler");
		var box = document.getElementById("notesContainer"+title);
		config.macros.notes.editNotes(box,title);
		e.cancelBubble = true;
		if(e.stopPropagation) e.stopPropagation();
		return false;
	},
	
	handler : function(place,macroName,params,wikifier,paramString,tiddler){
		
		params = paramString.parseParams("anon",null,true,false,false);
		var heading = getParam(params,"heading",this.heading);
		var tag = getParam(params,"tag",this.tag);
		var suffix = getParam(params,"suffix",this.suffix);
		var box = createTiddlyElement(place,"div","notesContainer"+tiddler.title,"TiddlerNotes",null,{"source":tiddler.title,params:paramString,heading:heading,tag:tag,suffix:suffix});
		createTiddlyButton(box,this.editLabel,this.editLabel,this.editNotesButtonOnclick,"editNotesButton");
		wikify("!!"+heading+"\n",box);
		box.title=this.editTitle;
		box.ondblclick = this.ondblclick;
		wikify("<<tiddler [["+tiddler.title+"-"+suffix+"]]>>",box);
	}		
};

Story.prototype.old_notes_closeTiddler = Story.prototype.closeTiddler;
Story.prototype.closeTiddler = function(title,animate,unused){
	if(story.isDirty(title)) {
		if(!confirm(config.macros.notes.cancelWarning.format([title])))
			return false;
	}
	return this.old_notes_closeTiddler.apply(this,arguments);
}

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

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

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

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

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

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

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

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

//}}}
[[SidebarNews|http://groups.google.com/group/sidebarnews?lnk=li]]
[[TiddlyWiki|http://groups.google.com/group/TiddlyWiki?lnk=li]]
[[TiddlyWikiDiv|http://groups.google.com/group/TiddlyWikiDev?lnk=li]]
[[TiddlyWikiDocs|http://groups.google.com/group/tiddlywikidocs?lnk=li]]
/***

|Name|ToggleToolyBarsMacro|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/|
|Version|1.0|
|Requires|~TW2.x|
!Description:

{{c06{Modified by Morris Gray to toggle the Toolbars (don't ask about the name:(}}}

Provides a button for toggling visibility of the ToolyBars. You can choose whether the ToolyBars should initially be hidden or displayed.

!Demo
<<toggleToolyBars "Toggle Sidebar">>

!Usage:
{{{<<toggleToolyBars>>}}} <<toggleToolyBars>>
additional options:
{{{<<toggleToolyBars label tooltip show/hide>>}}} where:
label = custom label for the button,
tooltip = custom tooltip for the button,
show/hide = use one or the other, determines whether the sidebar is shown at first or not.
(default is to show the sidebar)

You can add it to your tiddler toolbar, your MainMenu, or where you like really.
If you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:
{{{ .HideToolyBarsButton {float:right;} }}}

!History
*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour. 
*20-07-06: version 0.11
*27-04-06: version 0.1: working.

!Code
***/
//{{{
config.macros.toggleToolyBars={};

config.macros.toggleToolyBars.settings={
         styleHide :  ".title, .toolbar { display: none;}\n"+"#contentWrapper #displayArea { margin-right: 0em !important;}}\n"+"",
         styleShow : " ",
         arrow1: "Edit    ",
         arrow2: "Editing"
};

config.macros.toggleToolyBars.handler=function (place,macroName,params,wikifier,paramString,tiddler)
{
          var tooltip= params[1]||'toggle hidden toolbars and tiddler title';
          var mode = (params[2] && params[2]=="hide")? "hide":"show";
          var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;
          var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;
          var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleToolyBars,"button HideToolyBarsButton");
          if (mode == "hide")
             { 
             (document.getElementById("sidebar")).setAttribute("toggle","hide");
              setStylesheet(this.settings.styleHide,"ToggleToolyBarsStyles");
             }
};

config.macros.toggleToolyBars.onToggleToolyBars = function(){
          var sidebar = document.getElementById("sidebar");
          var settings = config.macros.toggleToolyBars.settings;
          if (sidebar.getAttribute("toggle")=='hide')
             {
              setStylesheet(settings.styleShow,"ToggleToolyBarsStyles");
              sidebar.setAttribute("toggle","show");
              this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
              }
          else
              {    
               setStylesheet(settings.styleHide,"ToggleToolyBarsStyles");
               sidebar.setAttribute("toggle","hide");
               this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);
              }

     return false;
}

setStylesheet(".HideToolyBarsButton .button {font-weight:bold; padding: 0 5px;}\n","ToggleToolyBarsButtonStyles");

//}}}
/***

|Name|ToggleFooterMacro|
|Original Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/|
|Version|1.0|
|Requires|~TW2.x|
!Description:

{{c06{Modified by Morris Gray to toggle the Footer in Sidebar Notes}}}

Provides a button for toggling visibility of the Footer. You can choose whether the Footer should initially be hidden or displayed.

!Demo
<<toggleFooter "Toggle Footer">>

!Usage:
{{{<<toggleFooter>>}}} <<toggleFooter>>
additional options:
{{{<<toggleFooter label tooltip show/hide>>}}} where:
label = custom label for the button,
tooltip = custom tooltip for the button,
show/hide = use one or the other, determines whether the sidebar is shown at first or not.
(default is to show the sidebar)

You can add it to your tiddler toolbar, your MainMenu, or where you like really.
If you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:
{{{ .HideFooterButton {float:right;} }}}

!History
*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour. 
*20-07-06: version 0.11
*27-04-06: version 0.1: working.

!Code
***/
//{{{
config.macros.toggleFooter={};

config.macros.toggleFooter.settings={
         styleHide :  ".title, #ftr { display: none;}\n"+"#contentWrapper #displayArea { margin-right: 0em !important;}}\n"+"",
         styleShow : " ",
         arrow1: "toggle footer",
         arrow2: "toggle footer"
};

config.macros.toggleFooter.handler=function (place,macroName,params,wikifier,paramString,tiddler)
{
          var tooltip= params[1]||'toggle hidden toolbars and tiddler title';
          var mode = (params[2] && params[2]=="hide")? "hide":"show";
          var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;
          var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;
          var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleFooter,"button HideFooterButton");
          if (mode == "hide")
             { 
             (document.getElementById("sidebar")).setAttribute("toggle","hide");
              setStylesheet(this.settings.styleHide,"ToggleFooterStyles");
             }
};

config.macros.toggleFooter.onToggleFooter = function(){
          var sidebar = document.getElementById("sidebar");
          var settings = config.macros.toggleFooter.settings;
          if (sidebar.getAttribute("toggle")=='hide')
             {
              setStylesheet(settings.styleShow,"ToggleFooterStyles");
              sidebar.setAttribute("toggle","show");
              this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
              }
          else
              {    
               setStylesheet(settings.styleHide,"ToggleFooterStyles");
               sidebar.setAttribute("toggle","hide");
               this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);
              }

     return false;
}

setStylesheet(".HideFooterButton .button {font-weight:bold; padding: 0 5px;}\n","ToggleFooterButtonStyles");

//}}}
/***

|Name|ToggleSideBarMacro|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#ToggleSideBarMacro|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Provides a button for toggling visibility of the SideBar. You can choose whether the SideBar should initially be hidden or displayed.

!Demo
<<toggleSideBar "Toggle Sidebar">>

!Usage:
{{{<<toggleSideBar>>}}} <<toggleSideBar>>
additional options:
{{{<<toggleSideBar label tooltip show/hide>>}}} where:
label = custom label for the button,
tooltip = custom tooltip for the button,
show/hide = use one or the other, determines whether the sidebar is shown at first or not.
(default is to show the sidebar)

You can add it to your tiddler toolbar, your MainMenu, or where you like really.
If you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:
{{{ .HideSideBarButton {float:right;} }}}

!History
*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour. 
*20-07-06: version 0.11
*27-04-06: version 0.1: working.

!Code
***/
//{{{
config.macros.toggleSideBar={};

config.macros.toggleSideBar.settings={
         styleHide :  ".title, .toolbar { display: none;}\n"+"#contentWrapper #displayArea { margin-right: 0em !important;}}\n"+"",
         styleShow : " ",
         arrow1: "Sidebar «",
         arrow2: "Sidebar »"
};

config.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)
{
          var tooltip= params[1]||'toggle sidebar';
          var mode = (params[2] && params[2]=="hide")? "hide":"show";
          var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;
          var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;
          var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");
          if (mode == "hide")
             { 
             (document.getElementById("sidebar")).setAttribute("toggle","hide");
              setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");
             }
};

config.macros.toggleSideBar.onToggleSideBar = function(){
          var sidebar = document.getElementById("sidebar");
          var settings = config.macros.toggleSideBar.settings;
          if (sidebar.getAttribute("toggle")=='hide')
             {
              setStylesheet(settings.styleShow,"ToggleSideBarStyles");
              sidebar.setAttribute("toggle","show");
              this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
              }
          else
              {    
               setStylesheet(settings.styleHide,"ToggleSideBarStyles");
               sidebar.setAttribute("toggle","hide");
               this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);
              }

     return false;
}

setStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\n","ToggleSideBarButtonStyles");

//}}}
/***

|Name|ToggleTiddlersBarMacro|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#ToggleTiddlersBarMacro|
|Version|1.0|
|Requires|~TW2.x|
!Description:

{{c06{Modified by Morris Gray to toggle the TiddlersBar}}}

Provides a button for toggling visibility of the Toolbars. You can choose whether the Toolbars should initially be hidden or displayed.

!Demo
<<toggleTiddlersBar "Toggle Sidebar">>

!Usage:
{{{<<toggleTiddlersBar>>}}} <<toggleTiddlersBar>>
additional options:
{{{<<toggleTiddlersBar label tooltip show/hide>>}}} where:
label = custom label for the button,
tooltip = custom tooltip for the button,
show/hide = use one or the other, determines whether the sidebar is shown at first or not.
(default is to show the sidebar)

You can add it to your tiddler toolbar, your MainMenu, or where you like really.
If you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:
{{{ .HideTiddlersBarButton {float:right;} }}}

!History
*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour. 
*20-07-06: version 0.11
*27-04-06: version 0.1: working.

!Code
***/
//{{{
config.macros.toggleTiddlersBar={};

config.macros.toggleTiddlersBar.settings={
         styleHide :  ".title, #tiddlersBar { display: none;}\n"+"#contentWrapper #displayArea { margin-right: 0em !important;}}\n"+"",
         styleShow : " ",
         arrow1: "Tabs   ",
         arrow2: "NoTabs"
};

config.macros.toggleTiddlersBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)
{
          var tooltip= params[1]||'toggle hidden toolbars and tiddler title';
          var mode = (params[2] && params[2]=="hide")? "hide":"show";
          var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;
          var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;
          var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleTiddlersBar,"button HideTiddlersBarButton");
          if (mode == "hide")
             { 
             (document.getElementById("sidebar")).setAttribute("toggle","hide");
              setStylesheet(this.settings.styleHide,"ToggleTiddlersBarStyles");
             }
};

config.macros.toggleTiddlersBar.onToggleTiddlersBar = function(){
          var sidebar = document.getElementById("sidebar");
          var settings = config.macros.toggleTiddlersBar.settings;
          if (sidebar.getAttribute("toggle")=='hide')
             {
              setStylesheet(settings.styleShow,"ToggleTiddlersBarStyles");
              sidebar.setAttribute("toggle","show");
              this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
              }
          else
              {    
               setStylesheet(settings.styleHide,"ToggleTiddlersBarStyles");
               sidebar.setAttribute("toggle","hide");
               this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);
              }

     return false;
}

setStylesheet(".HideTiddlersBarButton .button {font-weight:bold; padding: 0 5px;}\n","ToggleTiddlersBarButtonStyles");

//}}}
<<tabs " " [[Intro ]] "" [[ToolTabsIntro]] [[Options ]] "" [[OptionsPanel]]  [[AdvancedOptions ]] "" [[AdvancedOptions]] >>
----
<<saveAs>>
<<saveChanges>>
<<closeAll>>
<<permaview>>
@@<<tiddler TspotSidebar>>@@

<html><td><input class="btn" type="button" value="Refresh Window" onClick="location.reload()" onmouseover="this.className='btn btnhov'" onmouseout="this.className='btn'"/></td></html>

 @@color:#C06;''&raquo; &raquo;'' @@ Duplicated Menu buttons<<toggleToolyBars "" "" hide>>@@color:#C06;''&raquo;'' @@@@color:#c06;Toggles the toolbars@@<<toggleTiddlersBar "" "" show>> @@color:#C06;''&raquo;'' @@@@color:#c06;Toggles tabs on and off@@
@@font-size:0.95em;<html><div id="slantedmenu" padding:top:2em;><span style='font-weight:normal;float:center;'><ul><li><a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('DefaultTiddlers').readBracketedList())"><span title="Close all tiddlers and open Welcome" style="cursor:pointer">Home</span></a></li><li><span style="float:center;padding-left:0em;" title="Load this page in sidebar" style="cursor:help"><a href="#" target="_search">« Load</a></span></li><li><<toggleToolyBars "" "" hide>></li><li>[[View|ViewTabs]]</li><li><span title='open sidebar tools for upload download advanced options'>[[Tools|MoreTools]]</li></span></li><br><li><<search>></li><li>[[options|Search]]</li><br><li><<newTiddler>></li><li>[[Help|Help]]</li><li><<toggleTiddlersBar "" "" show>></li><li><<newJournal "YYYY.0MM.0DD 0hh:0mm:0ss" "journal">></li><br><li><<fontSize>></li></div></html>@@
/***
Contains the stuff you need to use Tiddlyspot
Note you must also have UploadPlugin installed
***/
//{{{

// edit this if you are migrating sites or retrofitting an existing TW
config.tiddlyspotSiteId = 'sidebarnotes';

// make it so you can by default see edit controls via http
config.options.chkHttpReadOnly = false;
window.readOnly = false; // make sure of it (for tw 2.2)
window.showBackstage = true; // show backstage too

// disable autosave in d3
if (window.location.protocol != "file:")
	config.options.chkGTDLazyAutoSave = false;

// tweak shadow tiddlers to add upload button, password entry box etc
with (config.shadowTiddlers) {
	SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';
	SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");
	OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");
	DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[WelcomeToTiddlyspot]] ");
	MainMenu = MainMenu.replace(/^/,"[[WelcomeToTiddlyspot]] ");
}

// create some shadow tiddler content
merge(config.shadowTiddlers,{

'WelcomeToTiddlyspot':[
 "This document is a ~TiddlyWiki from tiddlyspot.com.  A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below.  Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",
 "<<tiddler TspotControls>>",
 "See also GettingStarted.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the \"save to web\" button in the column on the right.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick.  You can make changes and save them locally without being connected to the Internet.  When you're ready to sync up again, just click \"upload\" and your ~TiddlyWiki will be saved back to tiddlyspot.com.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ 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. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help.  If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site.  Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions."
].join("\n"),

'TspotControls':[
 "| tiddlyspot password:|<<option pasUploadPassword>>|",
 "| site management:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<br>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|",
 "| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[announcements|http://announce.tiddlyspot.com/]], [[blog|http://tiddlyspot.com/blog/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|"
].join("\n"),

'TspotSidebar':[
 "<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>"
].join("\n"),

'TspotOptions':[
 "tiddlyspot password:",
 "<<option pasUploadPassword>>",
 ""
].join("\n")

});
//}}}
!!!<<gradient horiz #fcb #ffffff>>[[Tue]]^^<<tiddler CloseThisOpen with: MiniPlanner  '« back'>>[[edit»|Tue]] ^^>>

* College application - Goal: 5 minutes or 1 page. Start by filling in the easy boxes. If you reach the bottom of the page before time is up, stop.
My note for Tuesday
Another note for Tue the 18th of march
It's time to be excited.Can't wait!!!
/***
''TwHelpSearch'' for TiddlyWiki 2.0.x to 2.2.x
^^author: Morris S. Gray
source: http://twhelp.tiddlyspot.com/#TwHelpSearchPlugin
documentation: http://twhelp.tiddlyspot.com/#TWHelpSearchDoc
license: [[Creative Commons Attribution-ShareAlike 2.5   License|http://creativecommons.org/licenses/by-sa/2.5/]]^^

|>|>|>|<<search>> |
|>|>| look for in |>|>|>|
| <<option chkSearchTitles>> | <<option chkSearchText>> | <<option chkSearchTags>> | <<option chkHoldSearches>> |
| titles |  text  | tags | hold |

''A Plugin Tweak for:'' SearchOptionsPlugin
!!!!!Description
<<<
This plugin defines an alternative format for the SearchResults tiddler that is generated by the SearchOptionsPlugin . It presents the search results in tabular form numbering the rows; and showing the tiddler title, the size in bytes, and the tags.  It is ready to be used with the [[SortableGridPlugin|http://solo.dc3.com/tw/#SortableGridPlugin]] (check versions) so any column can be sorted; such as size in ascending or descending order.
<<<
!!!!!Installation
<<<
Import (or copy/paste) the following tiddlers into your ~TiddlyWiki:
* http://twhelp.tiddlyspot.com/#TwHelpSearchPlugin
*SearchOptionsPlugin from http://www.tiddlytools.com/#SearchOptionsPlugin
* Get more documentation here [[TWHelpSearchDoc]] or here:
* http://twhelp.tiddlyspot.com/#TwHelpSearchDoc
<<<
!!!!!Revision History
<<<

''2007.09.12  [1.0.6]''
Added overflow scroll to TWHelp-SearchResults for long titles or tags.
''2006.02.03  [1.0.5]''
Added facility for holding the results of multiple searches with tick box on dashboard.
''2006.02.02  [1.0.4]''
Added several options, cleaned up design.Planning one version basic and one with added options this is the added options version.
''2006.01.27  [1.0.3''
Added a column for the size of the text in each tiddler, this does not include the size of the title or tags.  Added overall TW statistics button requires TiddlerStatsPlugin.
''2006.01.23 [1.0.2 ]''
''a)''Changed function reportSearchResults(text,matches) to  window.reportSearchResults=function(text,matches)
''b)''Added a line so that Incremental Search is automatically disabled config.options.chkSearchIncremental=false; turn off key-by-key searching
''c)''Removed space inside parens. bgcolor(#fe8 )" to "bgcolor(#fe8)".  This
is what was causing IE to 'crap out' halfway through drawing the table
headings.
''d)''Added {{{config.options.chkSearchList=true;}}}
''2006.01.20 [1.0.1]''
ELS: reportSearchResults() definition moved to this Plugin Tweak tiddler and removed extranous code
''2006.01.19 [1.0.0]''
This is an adaptation of Eric Shulman's SearchOptionsPlugin. Adapted by MorrisGray to provide search results in table form. All the necessary controls for refining the search is provided within the table including slide-down access to AdvancedOptions.
<<<
!!!!!Code
***/

//{{{
if (config.options.chkSinglePageMode==undefined) config.options.chkSinglePageMode=false;
if (config.options.chkRegExpSearch==undefined) config.options.chkRegExpSearch=true;
if (config.options.chkSearchTitles==undefined) config.options.chkSearchTitles=false;
if (config.options.chkSearchText==undefined) config.options.chkSearchText=true;
if (config.options.chkSearchTags==undefined) config.options.chkSearchTags=false;
if (config.options.chkSearchTitlesFirst==undefined) config.options.chkSearchTitlesFirst=true;
if (config.options.chkSearchList==undefined) config.options.chkSearchList=true;
if (config.options.chkSearchIncremental==undefined) config.options.chkSearchIncremental=false;
if (config.options.chkToggleLinks==true) config.options.chkToggleLinks=false;
if (config.options.chkHoldSearches==undefined) config.options.chkHoldSearches=false;
if (config.options.chkSortTags==undefined) config.options.chkSortTags=false;

config.options.chkToggleLinks=false;
config.options.chkSinglePageMode=false;
config.options.chkHoldSearches=false;
config.options.chkSearchIncremental=false;
config.options.chkHttpReadOnly = false;
config.options.chkRegExpSearch=true;
config.options.chkSearchList=true;
config.options.chkToggleLinks=false;

config.shadowTiddlers.AdvancedOptions += "\n<<option chkHoldSearches>> Hold search results";


//}}}

//{{{

// Give the report a custom name
config.macros.search.reportTitle="TWHelp-SearchResults";

// Override default SearchOptionsPlugin formatting for SearchResults tiddler
window.reportSearchResults=function(text,matches)

{
  
        var title=config.macros.search.reportTitle
	config.macros.search.reportTitle;
      	var q = config.options.chkRegExpSearch ? "/" : "'";
        if (!config.options.chkHoldSearches)  body=""; 
      
body+="\n|>|bgcolor(#0cc):@@color(#000080):''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''@@|bgcolor(#0cc):  @@color(#A00000): SearchHelp@@ "+"|"+"\n";
        body+="|>|>|bgcolor(#E3FFE3):<<search>> <<option chkSearchTitles>> Titles <<option chkSearchText>> Text <<option chkSearchTags>>Tags <<option chkHoldSearches>> Hold |"+"\n";
        body+="\n|bgcolor(#0cc):&nbsp;|bgcolor(#0cc):@@color(#000080):sort by: ''Titles''@@ |bgcolor(#0cc): @@color(#000080): ''Size'' (bytes)@@ |bgcolor(#0cc): @@color(#000080): ''Tags''@@ |h";
	for(var t=0;t<matches.length;t++) 
        body+="\n"+"| "+(t+1)+"|[["+matches[t].title+"]]| "+matches[t].text.length+"|"+"@@"+matches[t].tags+"@@"+"|";
         body+="\n";

      


        

        
       


	// create/update the tiddler
	var tiddler=store.getTiddler(title); if (!tiddler) tiddler=new Tiddler();
	tiddler.set(title,body,config.options.txtUserName,(new Date()),"excludeLists excludeSearch killbookmark");
	store.addTiddler(tiddler); story.closeTiddler(title);

	// render tiddler
	var oldprompt=config.macros.search.label;
	config.macros.search.label="search again"; // use alternate "search again" label
        story.displayTiddler(null,title,1); // force refresh
	config.macros.search.label=oldprompt;	// restore standard search label
}

//}}}
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 08/04/2008 15:33:05 | YourName | [[sidebarnotes.html|file:///F:/TiddlyWiki2.3/sidebarnotes/sidebarnotes.html#%5B%5BMiniPlanner%5D%5D]] | [[store.cgi|http://sidebarnotes.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidebarnotes.tiddlyspot.com/index.html]] | . | ok |
| 09/04/2008 22:12:29 | YourName | [[sidebarnotes.html|file:///F:/TiddlyWiki2.3/sidebarnotes/sidebarnotes.html#%5B%5BHelp%5D%5D]] | [[store.cgi|http://sidebarnotes.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidebarnotes.tiddlyspot.com/index.html]] | . | ok |
| 10/04/2008 21:08:38 | YourName | [[sidebarnotes.html|file:///F:/TiddlyWiki2.3/sidebarnotes/sidebarnotes.html]] | [[store.cgi|http://sidebarnotes.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidebarnotes.tiddlyspot.com/index.html]] | . |
| 10/04/2008 21:08:54 | YourName | [[sidebarnotes.html|file:///F:/TiddlyWiki2.3/sidebarnotes/sidebarnotes.html]] | [[store.cgi|http://sidebarnotes.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidebarnotes.tiddlyspot.com/index.html]] | . | ok | ok |
| 11/04/2008 11:55:58 | YourName | [[sidebarnotes.html|file:///F:/TiddlyWiki2.3/sidebarnotes/sidebarnotes.html]] | [[store.cgi|http://sidebarnotes.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidebarnotes.tiddlyspot.com/index.html]] | . | ok |
| 11/04/2008 16:35:32 | YourName | [[sidebarnotes.html|file:///F:/TiddlyWiki2.3/sidebarnotes/sidebarnotes.html#%5B%5BReferenceList%5D%5D]] | [[store.cgi|http://sidebarnotes.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidebarnotes.tiddlyspot.com/index.html]] | . | ok |
| 11/04/2008 18:11:26 | YourName | [[sidebarnotes.html|file:///F:/TiddlyWiki2.3/sidebarnotes/sidebarnotes.html#%5B%5BHelp%5D%5D]] | [[store.cgi|http://sidebarnotes.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidebarnotes.tiddlyspot.com/index.html]] | . | ok |
| 11/04/2008 22:39:23 | YourName | [[sidebarnotes.html|file:///F:/TiddlyWiki2.3/sidebarnotes/sidebarnotes.html]] | [[store.cgi|http://sidebarnotes.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidebarnotes.tiddlyspot.com/index.html]] | . | ok |
| 12/04/2008 11:15:29 | YourName | [[sidebarnotes.html|file:///F:/TiddlyWiki2.3/sidebarnotes/sidebarnotes.html]] | [[store.cgi|http://sidebarnotes.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidebarnotes.tiddlyspot.com/index.html]] | . | ok |
| 15/04/2008 23:44:20 | YourName | [[sidebarnotes.html|file:///Q:/TiddlyWiki/sidebarnotes.html]] | [[store.cgi|http://sidebarnotes.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidebarnotes.tiddlyspot.com/index.html]] | . |
/***
|''Name:''|PasswordOptionPlugin|
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Version:''|1.0.2|
|''Date:''|Apr 19, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.PasswordOptionPlugin = {
	major: 1, minor: 0, revision: 2, 
	date: new Date("Apr 19, 2007"),
	source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
	coreVersion: '2.2.0 (Beta 5)'
};

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

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

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

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

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

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

merge(config.optionsDesc,{
		pasPassword: "Test password"
	});
*/
//}}}

/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.0|
|''Date:''|May 5, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|
|''Documentation:''|http://tiddlywiki.bidix.info/#UploadPluginDoc|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (#3125)|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
	major: 4, minor: 1, revision: 0,
	date: new Date("May 5, 2007"),
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0 (#3125)'
};

//
// Environment
//

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

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

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

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

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

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

//
// uploadOptions Macro
//

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

//
// upload functions
//

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

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

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

bidix.upload.uploadRss = function(uploadParams,original,posDiv) 
{
	var callback = function(status,params,responseText,url,xhr) {
		if(status) {
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.rssSaved,bidix.dirname(url)+'/'+destfile);
			bidix.upload.uploadMain(params[0],params[1],params[2]);
		} else {
			displayMessage(bidix.upload.messages.rssFailed);			
		}
	};
	// do uploadRss
	if(config.options.chkGenerateAnRssFeed) {
		var rssPath = uploadParams[1].substr(0,uploadParams[1].lastIndexOf(".")) + ".xml";
		var rssUploadParams = Array(uploadParams[0],rssPath,uploadParams[2],'',uploadParams[4],uploadParams[5]);
		bidix.upload.httpUpload(rssUploadParams,convertUnicodeToUTF8(generateRss()),callback,Array(uploadParams,original,posDiv));
	} else {
		bidix.upload.uploadMain(uploadParams,original,posDiv);
	}
};

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

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

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

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

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

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

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

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

//
// Utilities
// 

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

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

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

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

//
// Initializations
//

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

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

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

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


/* don't want this for tiddlyspot sites

// Backstage
merge(config.tasks,{
	uploadOptions: {text: "upload", tooltip: "Change UploadOptions and Upload", content: '<<uploadOptions>>'}
});
config.backstageTasks.push("uploadOptions");

*/


//}}}


<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 "Sidebar Notes Ver:  "+cdnum+when
</script> 
<html><div id="systemcontents"><<tabs "txtStayViewTabs" [[Intro ]] "" [[TabsIntro]] [[AllTabs ]] "" [[AllTabs]]  [[History ]] "" [[History]]  [[Shadowed ]] "" [[SystemTabs]]  [[Plugins ]] "" [[Programs]]  [[Styling ]] "" [[Styling]]  [[SideBarOptions ]] "" [[SideBarOptions]]  [[ExcludedFromSearches ]] "" [[ExcludedFromSearches]]  [[ExcludedFromLists ]] "" [[ExcludedFromLists]]  [[Script ]] "" [[Script]] [[AllNotes ]] "" [[AllNotes]]  [[SideBarTabs ]] "" [[SideBarTabs]] >></div></html>
<div class='toolbar' macro='toolbar jump top -closeTiddler closeOthers closeAll +editTiddler permalink references newDocument '></div>
<div class='title' macro='view title'></div>
<div class='viewer' macro='view text wikified'></div></div>
<div class='viewer' macro='notes heading:"Msg Notes" tag:"excludeLists allnotes" suffix:"Comments"'></div>
<span macro='tiddler ShiftClickToEdit'></span>
<<search>>
----
<<closeAll>>
<<permaview>>
<<newTiddler>>
<<newJournal "YYYY.0MM.0DD 0hh:0mm:0ss" "journal">>
<<saveChanges>>
<<tiddler TspotSidebar>>
----
&nbsp;&nbsp;<html><td><input class="btn" type="button" value="Refresh Window" onClick="location.reload()" onmouseover="this.className='btn btnhov'" onmouseout="this.className='btn'"/></td></html>
----
@@color:#c06;This Sidebar Notes is at:@@ <script>var today=new Date();document.write('<font style="color:#090">'+'URL='+window.location+'</font>')</script>

<<tiddler ToolTabs>>

<html><hide linebreaks>
<div id="TWHouter">
<div id="TWHhdr" align="center"></div>

<div id="TWHbodyblock" align="right">
<div id="TWHl-col" align="center"><<tiddler Menu>></div>
<div id="TWHcont"><p><<tiddler ScienceContent>></p></div>
</div>
<div id="TWHftr" align="center">Copyright (c) You 2003</div>
</div>
</html>

/***
!!!<<gradient horiz #fc3 #fff >><<tiddler RefreshStyles>>&nbsp;WebPageTLCF>>/%==================================================%/
***/

#TWHouter {
 text-align:left;
 border:1px solid #000000;
 width:100%;
 margin:auto;
 }

#TWHhdr {
 width:100%;
 height:100%;
 background:#999;
 color: #333333;
 }

#TWHbar {
 height:20px;
 line-height:2.2em;
 background:#999;
 color: #a00;
 border:solid #000000;	
 border-width:1px 0 1px 0;
 padding-left:0.6em;
 }

#TWHbodyblock {
 position:relative;
 background: #dcdcdc;
 color: #333333;

 padding:0;
 }

#TWHl-col {
 float:left;
 background:#dcdcdc;
 color: #333333;
 width:120px;
 }

#TWHcont {
 background:#ffffff;
 color: #333333;
 border:solid #000000;	
 border-width:0 0 0 1px;
 text-align:left;
 width:60%;

 }

#TWHftr {
 height:35px;
 background:#fff;
 color: #333333;
 border:solid black;
 border-width:1px 0 0 0;
 margin:0;
 }


Presentation Stylesheet

h3, p {
 margin:0;
 padding:15px;
 }

h4 {
 margin:0; 
 padding: 5px 0;
 }
 
p:first-letter {
 font-size: 80%; 
 font-weight: bold;
 color:blue;
 }

/***
!!!<<gradient horiz #fc3 #fff >><<tiddler RefreshStyles>>&nbsp;WebStyleSheet>>/%==================================================%/
***/

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

div.container
{
height:100%;
width:100%;
margin:0px;
border:1px solid gray;
background:;
line-height:130%;
}
div.header
{
padding:0.5em;
color:white;
background-color:gray;
clear:left;
}
div.footer
{
padding:0.5em;
color:blue;
background-color:#fdf;
clear:left;
}

h1.header
{
padding:0;
margin:0;
}
div.left
{
background:#ddd;
float:left;
width:30%;
margin:0;
padding:1em;
}

div.content
{
background:#ccc;
margin-left:300px;
border-left:1px solid gray;
padding:1em;
}

!!!~EndWebPage /%==================================================%/
!!!<<gradient horiz #fcb #ffffff>>[[Wed]]^^<<tiddler CloseThisOpen with: MiniPlanner  '« back'>>[[edit»|Wed]] ^^>>
* Overdue report - Goal: 10 minutes or 100 words. Just start writing, even if it’s complete crap. Just keep scribbling for 10 minutes or until you have a paragraph or two. When time’s up, stop.
My new note for Wed
/***
|Name|WikifyPlugin|
|Source|http://www.TiddlyTools.com/#WikifyPlugin|
|Documentation|http://www.TiddlyTools.com/#WikifyPluginInfo|
|Version|1.1.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|substitute fields, slices, or computed values into a wiki-syntax format string and render results dynamically|
The {{{<<wikify>>}}} macro allows you to easily retrieve values from custom tiddler fields, tiddler slices, computed values (using javascript) or just plain old literals, and assemble them into small bits of generated wiki-syntax text content that can be rendered directly into a tiddler, or used in the ViewTemplate or EditTemplate to add dynamically-generated content to each tiddler.

The {{{<<wikiCalc>>}}} macro performs the same processing as {{{<<wikify>>}}} and, in addition, passes the assembled text content through javascript's {{{eval()}}} function before rendering the results.  This allows you to, for example, construct and compute mathematical expressions that use input values extracted from tiddler fields or slices.
!!!!!Documentation
> see [[WikifyPluginInfo]]
!!!!!Revisions
<<<
2008.03.08 [1.1.1] size reduction: documentation moved to [[WikifyPluginInfo]]
|please see [[WikifyPluginInfo]] for additional revision details|
2007.06.22 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.wikify= {major: 1, minor: 1, revision: 1, date: new Date(2008,3,8)};

config.macros.wikify={
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var fmt=params.shift();
		var values=[];
		var out="";
		if (!fmt.match(/\%[0-9]/g) && params.length) // format has no markers, just join all params with spaces
			out=fmt+" "+params.join(" ");
		else { // format param has markers, get values and perform substitution
			while (p=params.shift()) values.push(this.getFieldReference(place,p));
			out=fmt.format(values);
		}
		if (macroName=="wikiCalc") out=eval(out).toString();
		wikify(out,place);
	},
	getFieldReference: function(place,p) { // "slicename::tiddlername" or "fieldname@tiddlername" or "fieldname"
		if (typeof p != "string") return p; // literal non-string value... just return it...
		var parts=p.split(config.textPrimitives.sliceSeparator);
		if (parts.length==2) {// maybe a slice reference?
			var tid=parts[0]; var slice=parts[1];
			if (!tid || !tid.length || tid=="here") { // no target (or "here"), use containing tiddler
				tid=story.findContainingTiddler(place);
				if (tid) tid=tid.getAttribute("tiddler")
				else tid="SiteSlices"; // fallback for 'non-tiddler' areas (e.g, header, sidebar, etc.)
			}
			var val=store.getTiddlerSlice(tid,slice);  // get tiddler slice value
		}
		if (val==undefined) {// not a slice, or slice not found, maybe a field reference?
			var parts=p.split("@");
			var field=parts[0];
			if (!field || !field.length) field="checked"; // missing fieldname, fallback: checked@tiddlername
			var tid=parts[1];
			if (!tid || !tid.length || tid=="here") { // no target (or "here"), use containing tiddler
				tid=story.findContainingTiddler(place);
				if (tid) tid=tid.getAttribute("tiddler")
				else tid="SiteFields"; // fallback for 'non-tiddler' areas (e.g, header, sidebar, etc.)
			}
			var val=store.getValue(tid,field);
		}
		// not a slice or field, or slice/field not found... use param value as-is
		return val===undefined?p:val;
	}
}
//}}}
//{{{
// define alternative macroName for triggering pre-rendering call to eval()
config.macros.wikiCalc=config.macros.wikify;
//}}}
!!!!!<<gradient horiz #fcb #fff>>&nbsp;WorldNews>>
----
|<html><div align="center"><table bgcolor="#ffffff"><font size="-2" face="Arial, Helvetica, sans-serif" color="#ff0000">&nbsp; <A HREF="http://www.symbex.net.au/Wiki/AustraliaNews.htm" target="ifnews" title="Australian">Australia</A>&nbsp;|&nbsp;<A HREF="http://www.symbex.net.au/Wiki/GermanNews.htm" target="ifnews" title="Deutsche">Deutsche</A>&nbsp;|&nbsp;<A HREF="http://www.symbex.net.au/Wiki/OffbeatNews.htm" target="ifnews" title="Offbeat">Offbeat</A>&nbsp;|&nbsp;</div></table></html>|
|borderless|k
<html><table width="96%" style="border:none;margin:1px;background:transparent;clear:both;"><iframe id="ifnews" name="ifnews" src="http://www.symbex.net.au/Wiki/AustraliaNews.htm" width="100%" height="500" scrolling="yes" frameborder="0" allowtransparency style="border:none;"></iframe></table></html>
@@padding-top:1em;@@
{{textcenter gray9{
<<tiddler Version>> - <<version>>
Symbex Australasia Pty.Ltd. © 2008
@@color:#c06;This Sidebar Notes is at:@@ <script>var today=new Date();document.write('<font style="color:#090">'+'URL='+window.location+'</font>')</script>
/***
|!''Name:''|!easyFormat|
|''Description:''|the format command format selection according to your choice|
|''Version:''|0.1.0|
|''Date:''|13/01/2007|
|''Source:''|[[TWkd|http://yann.perrin.googlepages.com/twkd.html#easyFormat]]|
|''Author:''|[[Yann Perrin|YannPerrin]]|
|''License:''|[[BSD open source license]]|
|''~CoreVersion:''|2.x|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
|''Requires:''|@@color:red;''E.A.S.E''@@|
***/
//{{{
config.commands.format = new TWkd.Ease('Format','format selection accordingly to chosen mode');
config.commands.format.addMode({
 name:'Bold',
 tooltip:'turns selection into bold text',
 operation:function(){
 config.commands.format.putInPlace("''"+TWkd.context.selection.content+"''",TWkd.context.selection);
 }
});
config.commands.format.addMode({
 name:'Italic',
 tooltip:'turns selection into italic text',
 operation:function(){
 config.commands.format.putInPlace("//"+TWkd.context.selection.content+"//",TWkd.context.selection);
 }
});
config.commands.format.addMode({
 name:'Underlined',
 tooltip:'turns selection into underlined text',
 operation:function(){
 config.commands.format.putInPlace("__"+TWkd.context.selection.content+"__",TWkd.context.selection);
 }
});
config.commands.format.addMode({
 name:'Strikethrough',
 tooltip:'turns selection into striked text',
 operation:function(){
 config.commands.format.putInPlace("--"+TWkd.context.selection.content+"--",TWkd.context.selection);
 }
});
config.commands.format.addMode({
 name:'Superscript',
 tooltip:'turns selection into superscript',
 operation:function(){
 config.commands.format.putInPlace("^^"+TWkd.context.selection.content+"^^",TWkd.context.selection);
 }
});
config.commands.format.addMode({
 name:'Subscript',
 tooltip:'turns selection into subscript',
 operation:function(){
 config.commands.format.putInPlace("~~"+TWkd.context.selection.content+"~~",TWkd.context.selection);
 }
});
config.commands.format.addMode({
 name:'Highlight',
 tooltip:'highlight selection',
 operation:function(){
 config.commands.format.putInPlace("@@"+TWkd.context.selection.content+"@@",TWkd.context.selection);
 }
});
//}}}
Highlight this message and right click and copy it.

Now go back to the open tiddler in the side bar LEFT CLICK ON IT and type CONTROL-V

Your wish has been fulfilled You used a right click context copy in the main window and pasted it into an open tiddler in the sidebar :-)

Name it :"Magic" and seal it by clicking "done" in the toolbar.
To finalize this procedure go to the upper right corner of the SIDEBAR and click "backstage" to drop down the menu.
Click "save" in the backstage menu and wait for the message that your Magic tiddler was saved.
Now go to the MAIN WINDOW again and search for the word "Magic again see if it isn't the one with your secret message and the copy and paste.

Tell the group about this :-)

Morris :-)
<script>
        var tiddlers=store.getTiddlers("modified");
        var last=tiddlers[tiddlers.length-1];
        var when=last.modified.formatString("YYYY/0MM/0DD"+" at "+"0hh:0mm");
        return "Last Modified:  " +when
</script> 
MainFeatures
<div class='toolbar' macro='toolbar jump top -closeTiddler closeOthers closeAll +editTiddler permalink references newDocument '></div>
<div class='title' macro='view title'></div>
<div macro="gradient horiz #fcb #fff"><div class='viewer' macro='view text wikified'><div align="center"></div></div></div>
<span macro='tiddler ShiftClickToEdit'></span>
<<tag systemConfig>>
<html><ol><li><a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('PageProjectList').readBracketedList())"><span title="Close all tiddlers and open Welcome" style="cursor:pointer">SidebarPageProject</span></a>{{editLink{[[edit»|PageProjectList]]}}}</li></ol></html>
@@font-size:8pt;<<tiddler PageTitle>>@@{{unboldLink{
!!!!!<<gradient horiz #fcb #fff>>&nbsp;Index+++[show/hide]
@@margin-top:5px;@@
Some of the things on this index may have several tabs associated with them. Imagine they are your daily routine. Or different projects you have to organize.
===>>
<html><ol><li><a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('ReferenceList').readBracketedList())"><span title="Close all tiddlers and open Welcome" style="cursor:pointer">Reference</span></a>{{editLink{[[edit»|ReferenceList]]}}}</li><li><a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('IntroductionList').readBracketedList())"><span title="Close all tiddlers and open Welcome" style="cursor:pointer">Introduction</span></a></li><li><a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('IndexProjectList').readBracketedList())"><span title="Close all tiddlers and open Welcome" style="cursor:pointer">~MyProject</span></a>{{editLink{[[edit»|IndexProjectList]]}}}</li><li><a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('NewsList').readBracketedList())"><span title="Close all tiddlers and open Welcome" style="cursor:pointer">News</span></a>{{editLink{[[edit»|NewsList]]}}}</li><li>{{unboldLink{[[MiniPlanner]]}}}</li><li><a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('PageProjectList').readBracketedList())"><span title="Close all tiddlers and open Welcome" style="cursor:pointer">{{unboldLink{SidebarPageProject}}}</span></a>{{editLink{[[edit»|PageProjectList]]}}}</li></ol></html>
}}}
{{borderlessL{
<html><hide linebreaks>
<form action="http://groups.google.com/group/sidebarnews/boxsubscribe">
<table border=0 style="background-color: #fff; padding: 5px;" cellspacing=0>
  <tr><td>
  <img src="http://groups.google.com/groups/img/3nb/groups_bar.gif"
         height=26 width=132 alt="Google Groups">
  </td></tr>
  <tr><td style="padding-left: 5px">
  <b>Subscribe to SidebarNews</b>
  </td></tr>
  
  <tr><td style="padding-left: 5px;">
  Email: <input type=text name=email>
  <input type=submit name="sub" value="Subscribe">
  </td></tr>

<tr><td align=right>
  <a href="http://groups.google.com/group/sidebarnews">Visit this group</a>
</td></tr>
</table></form></html>
}}}