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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

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

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Are you curious how I managed to get the scrollbars from being visible in these iframes? Just put your iframe into a containing div with the css style of "overflow:hidden;" and fix the width and height parameters to suit your needs. Here's the css code applied for the AccuRadio iframes:
{{{
.accuFrame{overflow:hidden;width:732px; height:378px;overflow:hidden; border:0;}
.accuFrame iframe {width:780px; height:400px;overflow:hidden; border:0;}
}}}
So, Instead of trying to hide the overflow for the iframe, which for some browsers doesn't work, hide the overflow for the containing block. This way you get the extra benefit of still being able to move around in the iframe with you mouse to see whatever was hidden.@@
!list
Alternative:alternativenow
BritRock:channel Channel13
Chillout:chill
Classical:accuclassical
Electro:electronic
Folk:folk
Hiptronica:channel Channel12
Hitcast:hitkast
Indie:futureperfectradio
SmoothJazz:smoothjazz
ListeningPost:channel aaa
Reggae:reggae
Textures:textures
World:worldmusic
!listMore
Blues:blues
Broadway:broadway
Cabaret:cabaret
Comedy:comedy
Country:accucountry
Jazz:accujazz
Latin:radiopreciso
SunnyRemix:magicsunnylitemix
ModernRock:modernrockclassics
Soul:classicsoul
!styles
.viewer .txtAccuRadio .tabset {float:left;display:block;padding:0px;margin-top:.5em;min-width:12%;}
.viewer .txtAccuRadio .tabset .tab {display:block;text-align:right;padding:2px 3px 2px 7px; margin:0 1px 1px 0;border:1px solid;}
.viewer .txtAccuRadio .tabContents {margin-left:12%;max-width:88%;padding:5px;z-index:0;}
.viewer .txtAccuRadio .tabContents .tabContents {border:none; background:transparent;}
.viewer .accuFrame{overflow:hidden;width:732px; height:378px;overflow:hidden; border:0;}
.viewer .accuFrame iframe {width:780px; height:400px;overflow:hidden; border:0;}
.viewer .accuButton {display:block;font-size:2em;width:96%;padding:10px;padding-top:14px; border:1px solid transparent; moz-border-radius: 5px; -webkit-border-radius: 5px;margin-bottom:3px;}
.viewer .accuButton .externalLink {margin-left:-5px;text-decoration:none;padding:3px;moz-border-radius: 5px; -webkit-border-radius: 5px;border:1px solid transparent;}
.viewer .accuButton .marked {background:none;font-size:0.5em;padding:3px;}
!out
<<tiddler {{setStylesheet(store.getTiddlerText('AccuRadio##styles'),'AccuRadioStylesheet');'';}}>>$1
!more
<<tiddler AccuRadio with: AccuRadio##listMore>>
!catalog
<<tiddler AccuRadio##out with: {{
	var list='$1'!='$'+'1'&&store.getTiddlerText('$1')?'$1':'AccuRadio##list';
	var tabs='<<tabs txtAccuRadio ' + (list=='$1'?'':'Info \"information on AccuRadio\" AccuRadio##info ');
	var tabfmt='[[%0]] [[play %0]] AccuRadio_%0 ';
	var sectionfmt='<<tiddler AccuRadio with: %0>\>';
	var lines=store.getTiddlerText(list,'').split('\n');
	for (var i=0; i<lines.length; i++) {
		var title=lines[i].split(':')[0];
		tabs+=tabfmt.format([title]);
		config.shadowTiddlers['AccuRadio_'+title]=sectionfmt.format([lines[i].split(':')[1]]);
	}
	tabs+= (list=='$1'?'':'\"...more\" \"see more stations\" AccuRadio##more') + '>\>@@display:blocK;clear:both;height:1px;width:1px;';
tabs;}}>>
!play
<html><div class="accuFrame"><iframe src="http://$1"></iframe></div></html>
!end%/<<tiddler {{'AccuRadio##'+(('$1'=='$'+'1')||store.getTiddlerText('$1')?'catalog':'play');}}
with: {{var arg='$1'; if (!store.getTiddlerText('$1')) arg='$1'=='channel'?'www.accuradio.com/app/radioframe?&channel=$2&sub=SubPrimary':'player.accuradio.com/player/slipstream/$1/';arg;}}>>
<html><iframe class="accuFrame" src="http://player.accuradio.com/player/slipstream/alternativenow/"></iframe></html>
<<tiddler AccuRadio with:blues>>
<<tiddler AccuRadio with:channel Channel13>>
<<tiddler AccuRadio with:broadway>>
<<tiddler AccuRadio with:cabaret>>
<<tiddler AccuRadio with:chill>>
<<tiddler AccuRadio with:accuclassical>>
<<tiddler AccuRadio with:comedy>>
<<tiddler AccuRadio with:accucountry>>
<<tiddler AccuRadio with:electronic>>
<<tiddler AccuRadio with:folk>>
<<tiddler AccuRadio with:channel Channel12>>
<<tiddler AccuRadio with:hitkast>>
<<tiddler AccuRadio with:futureperfectradio>>
<<tiddler AccuRadio with:accujazz>>
<<tiddler AccuRadio with:smoothjazz>>
<<tiddler AccuRadio with:radiopreciso>>
<<tiddler AccuRadio with:channel aaa>>
<<tiddler AccuRadio with:magicsunnylitemix>>
<<tiddler AccuRadio with:modernrockclassics>>
<<tiddler AccuRadio with:reggae>>
<<tiddler AccuRadio with:classicsoul>>
<<tiddler AccuRadio with:textures>>
<<tiddler AccuRadio with:worldmusic>>
blues
channel Channel13
accujazz
<<tiddler AccuRadio with: AccuRadio##listMore>>
<<tiddlerList filter:"tiddler.tags.contains('Video')" order:"title" dateFormat:"YYYY mmm. 0DD" itemTemplate:"{{vidList{+++[► play %title|show hide player]...\n<<tiddler '%title'$))\n===\n{{rightLink{[[open|%title]]}}}}}}">>
<<tiddler GetSub with: vid>>
<<tiddler Video with: 3UYEZnhnVCg>>
The finest in European Television...
<<tagglyTagging>>
Here's a list of some artist listed in this wiki... Find more (possibly of the same ;-) artists under [[blogotheque|Blogotheque]].

<<tagglyTagging>>
The Great British Broadcasting Institution...
<<tiddler Video with:"x3asce">>
A great inspiration for indie music lovers... {{fat{[[blogotheque.net|http://www.blogotheque.net]]}}}
* the {{fat{[[complete list|Blogotheque All]]}}} of videos posted here
* a {{fat{[[youtube playlist|Blogotheque Youtube Player]]}}} covering a wide range of the recordings from La Blogotheque
* browse La Blogotheque {{fat{[[right here...|Browse Blogotheque]]}}} or have a look at their {{fat{[[Vimeo channel|http://vimeo.com/takeawayshows]]}}}

Below is a list of the artists on La Blogotheque for which you find posts in this wiki...
<<tagglyTagging>>
<<tiddler GetSub with: vid "[[blogotheque.net|http://www.blogotheque.net/Amanda-Palmer,4669]]">>
<<tiddler Video with:"2998859">>
<<tiddler Video with:"2996283">>
<<tiddler Video with:418>>{{vidMore{read more on... [[blogotheque |http://blogotheque.net/Andrew-Bird-et-St-Vincent]][[& arte|http://liveweb.arte.tv/fr/video/Soiree_de_poche___Andrew_Bird_et_St__Vincent]]}}}
<<tiddler Video with:184>>{{vidMore{read more on... [[blogotheque |http://blogotheque.net/Beirut,4941]][[& arte|http://liveweb.arte.tv/de/video/Soiree_de_poche___Beirut/]]}}} 
<<tiddler GetSub with:vid "[[blogotheque.net part I|http://www.blogotheque.net/Bon-Iver,4254]] & [[part II|http://www.blogotheque.net/Bon-Iver-Part-II]]">>
<<tiddler Video with:"x5tsqp">>
<<tiddler Video with:"x5s9jz">>
<<tiddler Video with:"x5sbdq">>
<<tiddler Video with:"x5s3ea">>
<<tiddler Video with:"x5tyeq">>
<<tiddler Video with:"x5ty8m">>
<<tiddler Video with: 309>>{{vidMore{read more on... [[blogotheque |http://blogotheque.net/Bowerbirds,4479]][[& arte|http://liveweb.arte.tv/de/video/Soiree_de_poche___Bowerbirds/]]}}} 
<<tiddler Video with: 7786326>>

{{fat{[[In the Morning / Sailor Song ...read more on blogotheque.net|http://www.blogotheque.net/First-Aid-Kit,5165]]}}}
<<tiddler GetSub with:vid "[[blogotheque.net|http://www.blogotheque.net/Grizzly-Bear,2577]]">>
<<tiddler Video with:"x8xp2">>
<<tiddler Video with:"x8xq2">>
<<tiddler GetSub with: vid "[[blogotheque.net|http://www.blogotheque.net/Guillemots,2448]]">>
<<tiddler Video with:"xo6cs">>
<<tiddler Video with:"xo5b8">>
<<tiddler GetSub with:vid "[[blogotheque.net|http://www.blogotheque.net/Jose-Gonzalez,3420]]">>
<<tiddler Video with:"43511193">>
<<tiddler Video with:"43511193">>
<<tiddler Video with:"x2uj1m">>
<<tiddler Video with:"43511193">>
<<tiddler Video with:"x2ugok">>
<<tiddler GetSub with:vid "[[blogotheque.net|http://www.blogotheque.net/Karkwa]]">>
<<tiddler Video with:"61725142">>
<<tiddler Video with:"61722473">>
<<tiddler Video with:"61721866">>
<<tiddler Video with:499>>{{vidMore{read more on... [[blogotheque |http://blogotheque.net/Kings-of-Convenience,5129]][[& arte|http://liveweb.arte.tv/fr/video/Soiree_de_poche___Kings_of_Convenience/]]}}}
<<tiddler GetSub with:vid "[[blogotheque.net|http://www.blogotheque.net/Lambchop,4736]]">>
<<tiddler Video with:"2826953">>
<<tiddler Video with:"2827727">>
<<tiddler GetSub with: vid "[[blogotheque|http://blogotheque.net/Man-Man,4319]]">>
<<tiddler Video with: "x665xt_955-man-man-a-day-at-the-races-and_music">>
<<tiddler Video with: "x6606a_951-man-man-warmup-1-the-boombox_music">>
<<tiddler Video with: "x660pc_952-man-man-warmup-2-the-deal_music">>
<<tiddler Video with: "x662o9_953-man-man-warmup-3-the-love_music">>
<<tiddler Video with: "x663e4_954-man-man-warmup-4-the-skin_music">>
<<tiddler Video with: 7541468>>
<<tiddler GetSub with:vid "[[blogotheque.net|http://www.blogotheque.net/Patrick-Watson,4821]]">>
<<tiddler Video with:4382611>>
<<tiddler Video with:4390943>>
<<tiddler Video with:4391623>>
<<tiddler GetSub with: vid "[[blogotheque.net|http://blogotheque.net/Phoenix,5176]]">>
<<tiddler Video with:7942520>>
<<tiddler Video with: 7941270>>
<<tiddler Video with: 7916182>>
<<tiddler GetSub with:vid "[[blogotheque.net|www.blogotheque.net/Priscilla-Ahn,4376]]">>
<<tiddler Video with:"x6end9">>
<<tiddler Video with:"x6emrn">>
<<tiddler Video with:"x6en2m">>
<<tiddler Video with:"x6enk8">>
<<tiddler GetSub with:vid "[[blogotheque.net|http://www.blogotheque.net/Seasick-Steve,4552]]">>
<<tiddler Video with:2331306>>
<<tiddler Video with:2334216>>
<<tiddler Video with:3814849>>{{vidMore{read more on... [[blogotheque.net|http://www.blogotheque.net/Sigur-Ros,4782]]}}}
<<tiddler GetSub with:vid "[[blogotheque.net|http://www.blogotheque.net/Slaraffenland,5048]]">>
<<tiddler Video with:6521003>>
<<tiddler Video with:6521704>>
<<tiddler Video with:6522489>>
<<tiddler GetSub with:vid "[[blogotheque.net|http://www.blogotheque.net/St-Vincent,3448]]">>
<<tiddler Video with:"x35r15">>
<<tiddler Video with:"x35qs9">>
<<tiddler Video with:"x35rzk">>
<<tiddler GetSub with:vid "[[blogotheque.net|http://www.blogotheque.net/Sufjan-Stevens-and-friends,3128]]">>
<<tiddler Video with:"x23g2t">>
<<tiddler Video with:"x23g4s">>
<<tiddler Video with:xs60v>>

{{fat{[[read more on blogotheque.net|http://www.blogotheque.net/Tapes-n-Tapes,2507]]}}}
<<tiddler GetSub with:vid "[[blogotheque.net|http://www.blogotheque.net/Tender-Forever,4701]]">>
<<tiddler Video with:"3227699">>
<<tiddler Video with:"3227473">>
<<tiddler Video with:"3227242">>
<<tiddler GetSub with:vid "[[blogotheque.net|http://www.blogotheque.net/The-Kooks,2578]]">>
<<tiddler Video with:"DandjZwi4yM">>
<<tiddler Video with:"P8DRxQATErY&hl">>
<<tiddler GetSub with:vid "[[blogotheque.net|http://www.blogotheque.net/The-Shins,2943]]">>
<<tiddler Video with:"x1pcay">>
<<tiddler Video with:"x1pxw4">>
<<tiddler GetSub with:vid "[[blogotheque.net|http://www.blogotheque.net/Tom-Jones,4683]]">>
<<tiddler Video with:"2999426">>
<<tiddler Video with:"3002483">>
<<tiddler Video with:"2933141">>
<<tiddler GetSub with:vid "[[blogotheque.net|http://www.blogotheque.net/Vandaveer,4537]]">>
<<tiddler Video with:"2257868">>
<<tiddler Video with:"2257438">>
<<tiddler GetSub with:vid "[[blogotheque.net|http://www.blogotheque.net/Yeasayer,3965]]"">>
<<tiddler Video with:"x4nq99">>
<<tiddler Video with:"x4nilx">>
<<tiddler GetSub with:vid "[[blogotheque.net|http://www.blogotheque.net/Yo-La-Tengo,5049]]">>
<<tiddler Video with:6671508>>
<<tiddler Video with:6672215>>
<<tiddlerList filter:"tiddler.title.indexOf('Blogotheque - ')>-1" order:"title" dateFormat:"YYYY mmm. 0DD" itemTemplate:"{{vidList{+++[► play %title|show hide player]...\n<<tiddler '%title'$))\n===\n{{rightLink{[[open|%title]]}}}}}}">>
<html><div class="embedr"><object width="425" height="445"><param name="movie" value="http://embedr.com/swf/slider/blogotheque-most-viewed/425/445/0x9ebdeb/false/wide"></param><param name="allowFullScreen" value="true"></param><param name="wmode" value="transparent"><embed src="http://embedr.com/swf/slider/blogotheque-most-viewed/425/445/0x9ebdeb/false/wide" type="application/x-shockwave-flash" allowFullScreen="true" width="425" height="445" wmode="transparent"></embed></object></div>

<div class="embedr"><object width="425" height="445"><param name="movie" value="http://embedr.com/swf/slider/blogotheque-rated/425/445/0x95b1db/false/wide"></param><param name="allowFullScreen" value="true"></param><param name="wmode" value="transparent"><embed src="http://embedr.com/swf/slider/blogotheque-rated/425/445/0x95b1db/false/wide" type="application/x-shockwave-flash" allowFullScreen="true" width="425" height="445" wmode="transparent"></embed></object></div></html>
<<tiddler Video with:'F838CEC3241CF891'>>
<html><iframe src="http://www.accuradio.com/" class="browser"></iframe></html>
<html><iframe src="http://www.bbc.co.uk/radio"></iframe></html>
<html><iframe src="http://www.blogotheque.net/spip.php?page=cae_all&lang=en"></iframe></html>
<html><iframe src="http://www.lastfm.de/listen"</iframe></html>
Integrated browsers...
<script>
var out='';
var tid="$1";
if(tid=="$"+"1") tid="ColorPalette";
var cols=["","Background","Foreground","Error","PrimaryPale","PrimaryLight","PrimaryMid","PrimaryDark","SecondaryPale","SecondaryLight","SecondaryMid","SecondaryDark","TertiaryPale","TertiaryLight","TertiaryMid","TertiaryDark"];
for (var c=0;c<cols.length;c++) {
  if ((c)%4==0) out+='|width:120px; color |width:60px; # |width:150px; sample |h\n';
  var col=store.getTiddlerSlice(tid,cols[c]);
  if(col!=undefined) out+='| [['+cols[c]+'|'+tid+']]| {{{'+col+'}}} |@@padding:3px 7em;background-color:'+col+'; @@|\n';
}
return out;
</script>
|Name|mjuzik|h
|Background|#FFF|
|Foreground|#000|
|PrimaryPale|#999|
|PrimaryLight|#777|
|PrimaryMid|#111|
|PrimaryDark|#000|
|SecondaryPale|#CCF|
|SecondaryLight|#9AF|
|SecondaryMid|#69C|
|SecondaryDark|#27B|
|TertiaryPale|#EEE|
|TertiaryLight|#CCC|
|TertiaryMid|#999|
|TertiaryDark|#666|
|Error|#F88|
<script>
  var out="";
  var tids=store.getTiddlers("title"); 
  for (var i=0; i<tids.length; i++) {
    t=tids[i].title;
    if (tids[i].tags.contains("ColorPalette")) { 
      out+='![['+t+']]\n<<tiddler ColorFool with:"'+t+'">>\n';
    }
  }
  return out;
</script>
A video platform...
<<tagglyTagging>>
[[Recently Added]]
/***
|''Name:''|DeliciousTaggingPlugin|
|''Version:''|0.1|
|''Source''|http://jackparke.googlepages.com/jtw.html#DeliciousTaggingPlugin ([[del.icio.us|http://del.icio.us/post?url=http://jackparke.googlepages.com/jtw.html%DeliciousTaggingPlugin]])|
|''Author:''|[[Jack]]|
!Description
Allows easy 'del.icio.us'-like tagging in the EditTemplate by showing all tags as a list of link-buttons.
!Usage
Replace your the editorFooter div in your [[EditTemplate]] with the following:
{{{
<div class='editorFooter' macro='deliciousTagging'></div>
}}}
!Code
***/
//{{{
version.extensions.deliciousTagging = {major: 0, minor: 1, revision: 0, date: new Date("June 11, 2007")};

config.macros.deliciousTagging= {};

config.macros.deliciousTagging.onTagClick = function(e)
{
 if(!e) var e = window.event;
 var tag = this.getAttribute("tag");
 var title = this.getAttribute("tiddler");
 if(!readOnly)
  story.setTiddlerTag(title,tag,0);
 return false;
};

config.macros.deliciousTagging.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
 if(tiddler instanceof Tiddler) {
  var title = tiddler.title;
  if(!e) var e = window.event;
  var tags = store.getTags();
  var lingo = config.views.editor.tagChooser;
  for(var t=0; t<tags.length; t++) {
   var theTag = createTiddlyButton(place,tags[t][0],lingo.tagTooltip.format([tags[t][0]]),config.macros.deliciousTagging.onTagClick);
   theTag.setAttribute("tag",tags[t][0]);
   theTag.setAttribute("tiddler",tiddler.title);
   place.appendChild(document.createTextNode(" "));
  }
 }
};
//}}}
/***
|''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");

}
//}}}
Is a great service for creating custom video services...
<<tagglyTagging>>
<html><div class="embedr"><object width="425" height="445"><param name="movie" value="http://embedr.com/swf/slider/httpwww-youtube-comwatchvoffpn1p41ig/425/445/0x9ab7e3/false/wide"></param><param name="allowFullScreen" value="true"></param><param name="wmode" value="transparent"><embed src="http://embedr.com/swf/slider/httpwww-youtube-comwatchvoffpn1p41ig/425/445/0x9ab7e3/false/wide" type="application/x-shockwave-flash" allowFullScreen="true" width="425" height="445" wmode="transparent"></embed></object></div></embed></object></div></html><<tiddler GetSub with:vid "[[myspace|http://www.myspace.com/estherhaejinlee]] & [[youtube|http://www.youtube.com/user/thatsestherly]]">>
<<tiddler Video with: 6GDgKtGLG3E>>
!Germany
|thumbs linkTable|k
| [[Fusion|http://www1.fusion-festival.de]][img[http://img147.imageshack.us/img147/2907/fusion.png][http://www1.fusion-festival.de]] | [[TFF Rudolstadt|http://www.tff-rudolstadt.de]][img[http://img401.imageshack.us/img401/7936/tff.png][http://www.tff-rudolstadt.de]] |
!France
|thumbs linkTable|k
| [[Transbretagne Express|http://transbretagneexpress.com]][img[http://img246.imageshack.us/img246/371/transbretagne.png][http://transbretagneexpress.com]] |
/***
|''Name:''|FieldsEditorPlugin|
|''Description:''|//create//, //edit//, //view// and //delete// commands in toolbar <<toolbar fields>>.|
|''Version:''|1.0.2|
|''Date:''|Dec 21,2007|
|''Source:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Author:''|Pascal Collin|
|''License:''|[[BSD open source license|License]]|
|''~CoreVersion:''|2.2.0|
|''Browser:''|Firefox 2.0; InternetExplorer 6.0, others|
!Demo:
On [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], see [[FieldEditor example]]
!Installation:
*import this tiddler from [[homepage|http://visualtw.ouvaton.org/VisualTW.html]] (tagged as systemConfig)
*save and reload
*optionnaly : add the following css text in your StyleSheet : {{{#popup tr.fieldTableRow td {padding:1px 3px 1px 3px;}}}}
!Code
***/

//{{{

config.commands.fields.handlePopup = function(popup,title) {
	var tiddler = store.fetchTiddler(title);
	if(!tiddler)
		return;
	var fields = {};
	store.forEachField(tiddler,function(tiddler,fieldName,value) {fields[fieldName] = value;},true);
	var items = [];
	for(var t in fields) {
		var editCommand = "<<untiddledCall editFieldDialog "+escape(title)+" "+escape(t)+">>";
		var deleteCommand = "<<untiddledCall deleteField "+escape(title)+" "+escape(t)+">>";
		var renameCommand = "<<untiddledCall renameField "+escape(title)+" "+escape(t)+">>";
		items.push({field: t,value: fields[t], actions: editCommand+renameCommand+deleteCommand});
	}
	items.sort(function(a,b) {return a.field < b.field ? -1 : (a.field == b.field ? 0 : +1);});
	var createNewCommand = "<<untiddledCall createField "+escape(title)+">>";
	items.push({field : "", value : "", actions:createNewCommand });
	if(items.length > 0)
		ListView.create(popup,items,this.listViewTemplate);
	else
		createTiddlyElement(popup,"div",null,null,this.emptyText);
}

config.commands.fields.listViewTemplate = {
	columns: [
		{name: 'Field', field: 'field', title: "Field", type: 'String'},
		{name: 'Actions', field: 'actions', title: "Actions", type: 'WikiText'},
		{name: 'Value', field: 'value', title: "Value", type: 'WikiText'}
	],
	rowClasses: [
			{className: 'fieldTableRow', field: 'actions'}
	],
	buttons: [	//can't use button for selected then delete, because click on checkbox will hide the popup
	]
}

config.macros.untiddledCall = {  // when called from listview, tiddler is unset, so we need to pass tiddler as parameter
	handler : function(place,macroName,params,wikifier,paramString) {
		var macroName = params.shift();
		if (macroName) var macro = config.macros[macroName];
		var title = params.shift();
		if (title) var tiddler = store.getTiddler(unescape(title));
		if (macro) macro.handler(place,macroName,params,wikifier,paramString,tiddler);		
	}
}

config.macros.deleteField = {
	handler : function(place,macroName,params,wikifier,paramString,tiddler) {
		if(!readOnly && params[0]) {
			fieldName = unescape(params[0]);
			var btn = createTiddlyButton(place,"delete", "delete "+fieldName,this.onClickDeleteField);
			btn.setAttribute("title",tiddler.title);
			btn.setAttribute("fieldName", fieldName);
		}
	},
	onClickDeleteField : function() {
		var title=this.getAttribute("title");
		var fieldName=this.getAttribute("fieldName");
		var tiddler = store.getTiddler(title);
		if (tiddler && fieldName && confirm("delete field " + fieldName+" from " + title +" tiddler ?")) {
			delete tiddler.fields[fieldName];
			store.saveTiddler(tiddler.title,tiddler.title,tiddler.text,tiddler.modifier,tiddler.modified,tiddler.tags,tiddler.fields);
			story.refreshTiddler(title,"ViewTemplate",true);
		}
		return false;
	}
}

config.macros.createField = {
	handler : function(place,macroName,params,wikifier,paramString,tiddler) {
		if(!readOnly) {
			var btn = createTiddlyButton(place,"create new", "create a new field",this.onClickCreateField);
			btn.setAttribute("title",tiddler.title);
		}
	},
	onClickCreateField : function() {
		var title=this.getAttribute("title");
		var tiddler = store.getTiddler(title);
		if (tiddler) {
			var fieldName = prompt("Field name","");
			if (store.getValue(tiddler,fieldName)) {
				window.alert("This field already exists.");
			}
			else if (fieldName) {
				var v = prompt("Field value","");
				tiddler.fields[fieldName]=v;
				store.saveTiddler(tiddler.title,tiddler.title,tiddler.text,tiddler.modifier,tiddler.modified,tiddler.tags,tiddler.fields);
				story.refreshTiddler(title,"ViewTemplate",true);
			}
		}
		return false;
	}
}

config.macros.editFieldDialog = {
	handler : function(place,macroName,params,wikifier,paramString,tiddler) {
		if(!readOnly && params[0]) {
			fieldName = unescape(params[0]);
			var btn = createTiddlyButton(place,"edit", "edit this field",this.onClickEditFieldDialog);
			btn.setAttribute("title",tiddler.title);
			btn.setAttribute("fieldName", fieldName);
		}
	},
	onClickEditFieldDialog : function() {
		var title=this.getAttribute("title");
		var tiddler = store.getTiddler(title);
		var fieldName=this.getAttribute("fieldName");
		if (tiddler && fieldName) {
			var value = tiddler.fields[fieldName];
			value = value ? value : "";
			var lines = value.match(/\n/mg);
			lines = lines ? true : false;
			if (!lines || confirm("This field contains more than one line. Only the first line will be kept if you edit it here. Proceed ?")) {
				var v = prompt("Field value",value);
				tiddler.fields[fieldName]=v;
				store.saveTiddler(tiddler.title,tiddler.title,tiddler.text,tiddler.modifier,tiddler.modified,tiddler.tags,tiddler.fields);
				story.refreshTiddler(title,"ViewTemplate",true);
			}
		}
		return false;
	}
}

config.macros.renameField = {
	handler : function(place,macroName,params,wikifier,paramString,tiddler) {
		if(!readOnly && params[0]) {
			fieldName = unescape(params[0]);
			var btn = createTiddlyButton(place,"rename", "rename "+fieldName,this.onClickRenameField);
			btn.setAttribute("title",tiddler.title);
			btn.setAttribute("fieldName", fieldName);
		}
	},
	onClickRenameField : function() {
		var title=this.getAttribute("title");
		var fieldName=this.getAttribute("fieldName");
		var tiddler = store.getTiddler(title);
		if (tiddler && fieldName) {
			var newName = prompt("Rename " + fieldName + " as ?", fieldName);
			if (newName) {
				tiddler.fields[newName]=tiddler.fields[fieldName];
				delete tiddler.fields[fieldName];
				store.saveTiddler(tiddler.title,tiddler.title,tiddler.text,tiddler.modifier,tiddler.modified,tiddler.tags,tiddler.fields);
				story.refreshTiddler(title,"ViewTemplate",true);
			}
		}
		return false;
	}
}

config.shadowTiddlers.StyleSheetFieldsEditor = "/*{{{*/\n";
config.shadowTiddlers.StyleSheetFieldsEditor += ".fieldTableRow td {padding : 1px 3px}\n";
config.shadowTiddlers.StyleSheetFieldsEditor += ".fieldTableRow .button {border:0; padding : 0 0.2em}\n";
config.shadowTiddlers.StyleSheetFieldsEditor +="/*}}}*/";
store.addNotification("StyleSheetFieldsEditor", refreshStyles);

//}}}
<<tiddler Video with: x8bob0>>
<script>
var cls="$1";
var e=place;
var here=e.getAttribute('tiddler');
var where='';
while (where=='') {
 e=e.parentNode;
 if (e.getAttribute('tiddler')&&e.getAttribute('tiddler')!=here) where=e.getAttribute('tiddler');
}
var tids = store.getTiddlers("title");
var out="";
for (var i=0; i<tids.length; i++) {
  var t=tids[i].title;
  if (t!=where&&t.indexOf(where)>-1) {
    if(cls=='vid'&&!tids[i].tags.contains('Video'))continue;
    if(cls!="$"+"1") {
      out+='{{'+cls+'{';
      if (cls=="accu") out+='<<slider "chkPlayer'+t+'" "'+t+'" "play" "click to play">><br/>';  
      else out+='[['+t+']]<br />';
    }
    out+='<<tiddler "' + t + '">>';
    if(cls!="$"+"1") out+='}}}';
  }
}
if ("$2"!="$"+"2") out+='{{'+cls+'More{read more on... $2}}}';
return out;
</script>
<script>
if ("$1"!="$"+"1") return "<<tiddler '$1'>>";
</script>
/***
|Name|GotoPlugin|
|Source|http://www.TiddlyTools.com/#GotoPlugin|
|Documentation|http://www.TiddlyTools.com/#GotoPluginInfo|
|Version|1.9.2|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~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 displayed, pressing //escape// clears the current input.
!!!Documentation
>see [[GotoPluginInfo]]
!!!Configuration
<<<
*Match titles only after {{twochar{<<option txtIncrementalSearchMin>>}}} or more characters are entered.<br>Use down-arrow to start matching with shorter input.  //Note: This option value is also set/used by [[SearchOptionsPlugin]]//.
*To set the maximum height of the listbox, you can create a tiddler tagged with <<tag systemConfig>>, containing:
//{{{
config.macros.gotoTiddler.listMaxSize=10;  // change this number
//}}}
<<<
!!!Revisions
<<<
2009.05.22 [1.9.2] use reverseLookup() for IncludePlugin
|please see [[GotoPluginInfo]] for additional revision details|
2006.05.05 [0.0.0] started
<<<
!!!Code
***/
//{{{
version.extensions.GotoPlugin= {major: 1, minor: 9, revision: 2, date: new Date(2009,5,22)};

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

if (config.options.txtIncrementalSearchMin===undefined) config.options.txtIncrementalSearchMin=3;

config.macros.gotoTiddler= { 
	listMaxSize: 10,
	listHeading: 'Found %0 matching title%1...',
	searchItem: "Search for '%0'...",
	handler:
	function(place,macroName,params,wikifier,paramString,tiddler) {
		var quiet	=params.contains("quiet");
		var showlist	=params.contains("showlist");
		var search	=params.contains("search");
		params = paramString.parseParams("anon",null,true,false,false);
		var instyle	=getParam(params,"inputstyle","");
		var liststyle	=getParam(params,"liststyle","");
		var filter	=getParam(params,"filter","");
		var html=this.html;
		var keyevent=window.event?"onkeydown":"onkeypress"; // IE event fixup for ESC handling
		html=html.replace(/%keyevent%/g,keyevent);
		html=html.replace(/%search%/g,search);
		html=html.replace(/%quiet%/g,quiet);
		html=html.replace(/%showlist%/g,showlist);
		html=html.replace(/%display%/g,showlist?'block':'none');
		html=html.replace(/%position%/g,showlist?'static':'absolute');
		html=html.replace(/%instyle%/g,instyle);
		html=html.replace(/%liststyle%/g,liststyle);
		html=html.replace(/%filter%/g,filter);
		if (config.browser.isIE) html=this.IEtableFixup.format([html]);
		var span=createTiddlyElement(place,'span');
		span.innerHTML=html; var form=span.getElementsByTagName("form")[0];
		if (showlist) this.fillList(form.list,'',filter,search,0);
	},
	html:
	'<form onsubmit="return false" style="display:inline;margin:0;padding:0">\
		<input name=gotoTiddler type=text autocomplete="off" accesskey="G" style="width:%instyle%"\
			title="Enter title text... ENTER=goto, SHIFT-ENTER=search for text, DOWN=select from list"\
			onfocus="this.select(); this.setAttribute(\'accesskey\',\'G\');"\
			%keyevent%="return config.macros.gotoTiddler.inputEscKeyHandler(event,this,this.form.list,%search%,%showlist%);"\
			onkeyup="return config.macros.gotoTiddler.inputKeyHandler(event,this,%quiet%,%search%,%showlist%);">\
		<select name=list style="display:%display%;position:%position%;%liststyle%"\
			onchange="if (!this.selectedIndex) this.selectedIndex=1;"\
			onblur="this.style.display=%showlist%?\'block\':\'none\';"\
			%keyevent%="return config.macros.gotoTiddler.selectKeyHandler(event,this,this.form.gotoTiddler,%showlist%);"\
			onclick="return config.macros.gotoTiddler.processItem(this.value,this.form.gotoTiddler,this,%showlist%);">\
		</select><input name="filter" type="hidden" value="%filter%">\
	</form>',
	IEtableFixup:
	"<table style='width:100%;display:inline;padding:0;margin:0;border:0;'>\
		<tr style='padding:0;margin:0;border:0;'><td style='padding:0;margin:0;border:0;'>\
		%0</td></tr></table>",
	getItems:
	function(list,val,filter) {
		if (!list.cache || !list.cache.length || val.length<=config.options.txtIncrementalSearchMin) {
			// starting new search, fetch and cache list of tiddlers/shadows/tags
			list.cache=new Array();
			if (filter.length) {
				var fn=store.getMatchingTiddlers||store.getTaggedTiddlers;
				var tiddlers=store.sortTiddlers(fn.apply(store,[filter]),'title');
			} else 
				var tiddlers=store.reverseLookup('tags','excludeLists');
			for(var t=0; t<tiddlers.length; t++) list.cache.push(tiddlers[t].title);
			if (!filter.length) {
				for (var t in config.shadowTiddlers) list.cache.pushUnique(t);
				var tags=store.getTags();
				for(var t=0; t<tags.length; t++) list.cache.pushUnique(tags[t][0]);
			}
		}
		var found = [];
		var match=val.toLowerCase();
		for(var i=0; i<list.cache.length; i++)
			if (list.cache[i].toLowerCase().indexOf(match)!=-1) found.push(list.cache[i]);
		return found;
	},
	getItemSuffix:
	function(t) {
		if (store.tiddlerExists(t)) return "";  // tiddler
		if (store.isShadowTiddler(t)) return " (shadow)"; // shadow
		return " (tag)"; // tag 
	},
	fillList:
	function(list,val,filter,search,key) {
		if (list.style.display=="none") return; // not visible... do nothing!
		var indent='\xa0\xa0\xa0';
		var found = this.getItems(list,val,filter); // find matching items...
		found.sort(); // alpha by title
		while (list.length > 0) list.options[0]=null; // clear list
		var hdr=this.listHeading.format([found.length,found.length==1?"":"s"]);
		list.options[0]=new Option(hdr,"",false,false);
		for (var t=0; t<found.length; t++) list.options[list.length]=
			new Option(indent+found[t]+this.getItemSuffix(found[t]),found[t],false,false);
		if (search)
			list.options[list.length]=new Option(this.searchItem.format([val]),"*",false,false);
		list.size=(list.length<this.listMaxSize?list.length:this.listMaxSize); // resize list...
		list.selectedIndex=key==38?list.length-1:key==40?1:0;
	},
	keyProcessed:
	function(ev) { // utility function
		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,search,showlist) {
		if (event.keyCode==27) {
			if (showlist) { // clear input, reset list
				here.value=here.defaultValue;
				this.fillList(list,'',here.form.filter.value,search,0);
			}
			else if (list.style.display=="none") // clear input
				here.value=here.defaultValue;
			else list.style.display="none"; // hide list
			return this.keyProcessed(event);
		}
		return true; // key bubbles up
	},
	inputKeyHandler:
	function(event,here,quiet,search,showlist) {
		var key=event.keyCode;
		var list=here.form.list;
		var filter=here.form.filter;
		// non-printing chars bubble up, except for a few:
		if (key<48) switch(key) {
			// backspace=8, enter=13, space=32, up=38, down=40, delete=46
			case 8: case 13: case 32: case 38: case 40: case 46: break; default: return true;
		}
		// blank input... if down/enter... fall through (list all)... else, and hide or reset list
		if (!here.value.length && !(key==40 || key==13)) {
			if (showlist) this.fillList(here.form.list,'',here.form.filter.value,search,0);
			else list.style.display="none";
			return this.keyProcessed(event);
		}
		// hide list if quiet, or below input minimum (and not showlist)
		list.style.display=(!showlist&&(quiet||here.value.length<config.options.txtIncrementalSearchMin))?'none':'block';
		// non-blank input... enter=show/create tiddler, SHIFT-enter=search for text
		if (key==13 && here.value.length) return this.processItem(event.shiftKey?'*':here.value,here,list,showlist);
		// up or down key, or enter with blank input... shows and moves to list...
		if (key==38 || key==40 || key==13) { list.style.display="block"; list.focus(); }
		this.fillList(list,here.value,filter.value,search,key);
		return true; // key bubbles up
	},
	selectKeyHandler:
	function(event,list,editfield,showlist) {
		if (event.keyCode==27) // escape... hide list, move to edit field
			{ editfield.focus(); list.style.display=showlist?'block':'none'; return this.keyProcessed(event); }
		if (event.keyCode==13 && list.value.length) // enter... view selected item
			{ this.processItem(list.value,editfield,list,showlist); return this.keyProcessed(event); }
		return true; // key bubbles up
	},
	processItem:
	function(title,here,list,showlist) {
		if (!title.length) return;
		list.style.display=showlist?'block':'none';
		if (title=="*")	{ story.search(here.value); return false; } // do full-text search
		if (!showlist) here.value=title;
		story.displayTiddler(null,title); // show selected tiddler
		return false;
	}
}
//}}}
Background: #fff
Foreground: #000
PrimaryPale: #eee
PrimaryLight: #999
PrimaryMid: #333
PrimaryDark: #014
SecondaryPale: #eee
SecondaryLight: #999
SecondaryMid: #333
SecondaryDark: #014
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #bbb
Error: #f88
<html><div class="embedr"><object width="425" height="520"><param name="movie" value="http://embedr.com/swf/slider/great-covers/425/520/default/false/std"></param><param name="allowFullScreen" value="true"></param><param name="wmode" value="transparent"><embed src="http://embedr.com/swf/slider/great-covers/425/520/default/false/std" type="application/x-shockwave-flash" allowFullScreen="true" width="425" height="520" wmode="transparent"></embed></object></div></html>
Name: HawkColors
Background: #ffffff
Foreground: #000033
PrimaryPale: #e5edf4
PrimaryLight: #679DC2
PrimaryMid: #005B99
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #FFA02F
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/***
|Name:|HideWhenPlugin|
|Description:|Allows conditional inclusion/exclusion in templates|
|Version:|3.1 ($Rev: 3919 $)|
|Date:|$Date: 2008-03-13 02:03:12 +1000 (Thu, 13 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
For use in ViewTemplate and EditTemplate. Example usage:
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}
***/
//{{{

window.hideWhenLastTest = false;

window.removeElementWhen = function(test,place) {
	window.hideWhenLastTest = test;
	if (test) {
		removeChildren(place);
		place.parentNode.removeChild(place);
	}
};


merge(config.macros,{

	hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( eval(paramString), place);
	}},

	showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !eval(paramString), place);
	}},

	hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAny(params), place);
	}},

	showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAny(params), place);
	}},

	hideWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);
	}},

	showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);
	}},

	hideWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.title == params[0], place);
	}},

	showWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.title != params[0], place);
	}},

	'else': { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !window.hideWhenLastTest, place);
	}}

});

//}}}
/***
|Name|HoverMenuPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#HoverMenuPlugin|
|Version|1.11+|
|Requires|~TW2.x|
!Description:
Provides a hovering menu on the edge of the screen for commonly used commands, that scrolls with the page.
!Code
THIS IS A MODIFIED VERSION!!!
***/
//{{{
config.hoverMenu={};
config.hoverMenu.settings={
   align: 'right', //align menu to 'right' or 'left' side of screen               
   x: 4,           //horizontal menu distance to side of screen
   y: 130          //vertical menu distance to top of screen
}
config.hoverMenu.handler=function(){              
  if (!document.getElementById("hoverMenu")){
    var theMenu = createTiddlyElement(document.getElementById("contentWrapper"), "div","hoverMenu");
    theMenu.setAttribute("refresh","content");
    theMenu.setAttribute("tiddler","HoverMenu");
    var menuContent = store.getTiddlerText("HoverMenu");
    wikify(menuContent,theMenu);
  } 
  var Xloc = this.settings.x;
  Yloc =this.settings.y;
  var ns = (navigator.appName.indexOf("Netscape") != -1);
  function SetMenu(id){
    var GetElements=document.getElementById?document.getElementById(id):document.all?document.all[id]:document.layers[id];
    if(document.layers)GetElements.style=GetElements;
    GetElements.sP=function(x,y){this.style[config.hoverMenu.settings.align]=x +"px";this.style.top=y +"px";};
    GetElements.x = Xloc;
    GetElements.y = findScrollY();
    GetElements.y += Yloc;
    return GetElements;
  }
  window.LoCate_XY=function(){
    var pY =  findScrollY();
    ftlObj.y += (pY + Yloc - ftlObj.y)/15;
    ftlObj.sP(ftlObj.x, ftlObj.y);
    setTimeout("LoCate_XY()", 10);
  }
  ftlObj = SetMenu("hoverMenu");
  LoCate_XY();
}

window.old_lewcid_hovermenu_restart = restart;
restart = function(){window.old_lewcid_hovermenu_restart();config.hoverMenu.handler();}
window.hovermenu_refresh = refreshAll;
refreshAll = function(){window.hovermenu_refresh();config.hoverMenu.handler();}

setStylesheet(
"#hoverMenu  .button, #hoverMenu  .tiddlyLink {border:1px solid #AAA; font-weight:bold; background-color:#EEE; color:#666;padding:1px 5px 1px 3px;float:right;}\n"+
"#hoverMenu .button:hover, #hoverMenu .tiddlyLink:hover {border:1px solid #666; color:#fff; background:#000;}\n"+
"#hoverMenu .button {width:100%; text-align:center}"+
"#hoverMenu {position:absolute; width:7px;}\n"+
"\n","hoverMenuStyles");

config.macros.renameButton={};
config.macros.renameButton.handler = function(place,macroName,params,wikifier,paramString,tiddler){
  if (place.lastChild.tagName!="BR"){
    place.lastChild.firstChild.data = params[0];
    if (params[1]) place.lastChild.title = params[1];
  }
}

config.shadowTiddlers["HoverMenu"]="<<top>><<toggleSideBar '' '' hide>><<fullscreen f>><<jump j '' top>><<saveChanges>><<renameButton s>><<newTiddler>><<renameButton n>><<fontSize>>";


config.macros.toggleSideBar={};
config.macros.toggleSideBar.settings={
  styleHide :  "#sidebar{display:none;}#tiddlerDisplay {width:97%;}",
  styleShow : "#sidebar{right:1%;padding:1%;width:25%;}#tiddlerDisplay {width:69%;}",
  arrow1: "<",
  arrow2: ">"
};

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

config.macros.toggleSideBar.onToggleSideBar = function(){
  var sidebar = document.getElementById("sidebar");
  var settings = config.macros.toggleSideBar.settings;
  if (sidebar.getAttribute("toggle")=='hide'){
    setStylesheet(settings.styleShow,"ToggleSideBarStyles");
    sidebar.setAttribute("toggle","show");
    this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
  }
  else {    
    setStylesheet(settings.styleHide,"ToggleSideBarStyles");
    sidebar.setAttribute("toggle","hide");
    this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);
  }
  return false;
}
setStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\n","ToggleSideBarButtonStyles");


config.macros.top={};
config.macros.top.handler=function(place,macroName){createTiddlyButton(place,"^","jump to top",this.onclick);}
config.macros.top.onclick=function(){window.scrollTo(0,0);};
config.commands.top ={text:" ^ ",tooltip:"jump to top"};

config.commands.top.handler = function(event,src,title){window.scrollTo(0,0);}

config.macros.jump= {};
config.macros.jump.handler = function (place,macroName,params,wikifier,paramString,tiddler){
  var label = (params[0] && params[0]!=".")? params[0]: 'jump';
  var tooltip = (params[1] && params[1]!=".")? params[1]: 'jump to an open tiddler';
  var top = (params[2] && params[2]=='top') ? true: false;        
  var btn =createTiddlyButton(place,label,tooltip,this.onclick);
  if (top==true) btn.setAttribute("top","true");
}

config.macros.jump.onclick = function(e){
  if (!e) var e = window.event;
  var theTarget = resolveTarget(e);
  var top = theTarget.getAttribute("top");
	var popup = Popup.create(this);
	if(popup){
    if(top=="true"){
      createTiddlyButton(createTiddlyElement(popup,"li"),'Top ↑','Top of TW',config.macros.jump.top);
      createTiddlyElement(popup,"hr");
    }
		story.forEachTiddler(function(title,element){createTiddlyLink(createTiddlyElement(popup,"li"),title,true);});}
	Popup.show(popup,false);
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
	return false;
}

config.macros.jump.top = function(){window.scrollTo(0,0);}

Popup.show = function(unused,slowly){
	var curr = Popup.stack[Popup.stack.length-1];
	var rootLeft = findPosX(curr.root);
	var rootTop = findPosY(curr.root);
	var rootHeight = curr.root.offsetHeight;
	var popupLeft = rootLeft;
	var popupTop = rootTop + rootHeight;
	var popupWidth = curr.popup.offsetWidth;
	var winWidth = findWindowWidth();
  if (isChild(curr.root,'hoverMenu'))var x = config.hoverMenu.settings.x;
  else var x = 0;
	if(popupLeft + popupWidth+x > winWidth)popupLeft = winWidth - popupWidth -x;
  if (isChild(curr.root,'hoverMenu')) curr.popup.style.right = x + "px";
  else curr.popup.style.left = popupLeft + "px";
	curr.popup.style.top = popupTop + "px";
	curr.popup.style.display = "block";
	addClass(curr.root,"highlight");
	if(config.options.chkAnimate) anim.startAnimating(new Scroller(curr.popup,slowly));
	else window.scrollTo(0,ensureVisible(curr.popup));
}

window.isChild = function(e,parentId) {
  while (e != null) {
    var parent = document.getElementById(parentId);
    if (parent == e) return true;
    e = e.parentNode;
    }
  return false;
}

var lewcidFullScreen = false;
config.commands.fullscreen = {text:"↕",tooltip:"Fullscreen mode"};
config.commands.fullscreen.handler = function (event,src,title){
  if (lewcidFullScreen == false){
    lewcidFullScreen = true;
    setStylesheet('#sidebar, .header, #mainMenu{display:none;} #displayArea{margin:0em 0 0 0 !important;}',"lewcidFullScreenStyle");
  }
  else{
    lewcidFullScreen = false;
    setStylesheet(' ',"lewcidFullScreenStyle");
  }
}

config.macros.fullscreen={};
config.macros.fullscreen.handler =  function(place,macroName,params,wikifier,paramString,tiddler){
  var label = params[0]||" ↕ ";
  var tooltip = params[1]||"Fullscreen mode";
  createTiddlyButton(place,label,tooltip,config.commands.fullscreen.handler);
}

var lewcid_fullscreen_closeTiddler = Story.prototype.closeTiddler;
Story.prototype.closeTiddler =function(title,animate,slowly){
  lewcid_fullscreen_closeTiddler.apply(this,arguments);
  if (story.isEmpty() && lewcidFullScreen == true) config.commands.fullscreen.handler();
}

Slider.prototype.lewcidStop = Slider.prototype.stop;
Slider.prototype.stop = function(){
  this.lewcidStop();
  if (story.isEmpty() && lewcidFullScreen == true) config.commands.fullscreen.handler();
}


//}}}
/***
|Name|''fontSize''|h
|Author|[[Saq Imtiaz]]|
|Version|1.0|
|Description|Resize tiddler text on the fly. The text size is remembered between sessions by use of a cookie.|
|Source|http://lewcid.googlepages.com/lewcid.html#FontSizePlugin|
|TW Version|2.x|
***/
//{{{
config.fontSize={};

//configuration settings
config.fontSize.settings ={
  defaultSize : 100,  // all sizes in %
  maxSize : 200,
  minSize : 40,
  stepSize : 10
}

//startup code
var fontSettings = config.fontSize.settings;
if (!config.options.txtFontSize) {config.options.txtFontSize = fontSettings.defaultSize;
  saveOptionCookie("txtFontSize");
}
setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n.fontResizer {display:block;position:relative;top:10px;}","fontResizer");

//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();
  }
}
//}}}
<<tagglyTagging>><<tiddler GetSub with: vid "[[imogenheap.com|http://imogenheap.com]]">>
!Some More Hide And Seek...
<html><div class="embedr"><object width="425" height="520"><param name="movie" value="http://embedr.com/swf/slider/hide-and-seek/425/520/default/false/std"></param><param name="allowFullScreen" value="true"></param><param name="wmode" value="transparent"><embed src="http://embedr.com/swf/slider/hide-and-seek/425/520/default/false/std" type="application/x-shockwave-flash" allowFullScreen="true" width="425" height="520" wmode="transparent"></embed></object></div></html>
<<tiddler Video with: yXj0dF7LAyE>>
<html><object height="355" width="550">
<param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Fimogenheap%2Fsets%2Fellipse-album&show_comments=false&auto_play=false&show_playcount=true&show_artwork=true&color=3a6366">  <param name="allowscriptaccess" value="always">
<embed allowscriptaccess="always" height="355" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Fimogenheap%2Fsets%2Fellipse-album&show_comments=false&auto_play=false&show_playcount=true&show_artwork=true&color=3a6366" type="application/x-shockwave-flash" width="550"></embed>
</object></html>
<<tiddler tape with: "55742">>
<<tiddler Video with: eKZsZkH_MJc>>
<<tiddler Video with: xtj32_hide-and-seek-imogen-heap_music>>
<<tiddler Video with: eAKh26bfkpw>>
<<tiddler Video with: 25VGdNU3nrU>>
<<tiddler Video with: fDiCr7BNVY4>>
<<tiddler Video with: x52w8txtiQs>>
<<tiddler Video with: uryUCVhjtr4>>
On Sonntag, 4. Oktober 2009 21:49:32, TB imported 193 tiddlers from
[[C:\Dokumente und Einstellungen\tobibeer\Desktop\Chapbook\mjuzik\mjuzik.html|C:\Dokumente und Einstellungen\tobibeer\Desktop\Chapbook\mjuzik\mjuzik.html]]:
<<<
#[[AccuRadio]] - added
#[[AccuRadio - Alternative]] - added
#[[AccuRadio - Blues]] - added
#[[AccuRadio - BritRock]] - added
#[[AccuRadio - Broadway]] - added
#[[AccuRadio - Cabaret]] - added
#[[AccuRadio - Chill]] - added
#[[AccuRadio - Classical]] - added
#[[AccuRadio - Comedy]] - added
#[[AccuRadio - Country]] - added
#[[AccuRadio - Electronic]] - added
#[[AccuRadio - Folk]] - added
#[[AccuRadio - Hiptronica]] - added
#[[AccuRadio - HitKast]] - added
#[[AccuRadio - Indie Future Perfect]] - added
#[[AccuRadio - Jazz]] - added
#[[AccuRadio - Jazz Smooth]] - added
#[[AccuRadio - Latin]] - added
#[[AccuRadio - ListeningPost]] - added
#[[AccuRadio - Magic Sunny Lite]] - added
#[[AccuRadio - Modern Rock]] - added
#[[AccuRadio - Reggae]] - added
#[[AccuRadio - Soul]] - added
#[[AccuRadio - Textures]] - added
#[[AccuRadio - World]] - added
#[[AccuRadioList]] - added
#[[All Videos]] - added
#[[Arte]] - added
#[[BBC]] - added
#[[Blogotheque]] - added
#[[Blogotheque - Amanda Palmer]] - added
#[[Blogotheque - Amanda Palmer - Amsterdam]] - added
#[[Blogotheque - Amanda Palmer - Icarus]] - added
#[[Blogotheque - Andrew Bird & St Vincent - Arte Live]] - added
#[[Blogotheque - Beirut - Arte Live]] - added
#[[Blogotheque - Bon Iver]] - added
#[[Blogotheque - Bon Iver - Flume]] - added
#[[Blogotheque - Bon Iver - Flume (Second Take)]] - added
#[[Blogotheque - Bon Iver - For Emma, Forever Ago]] - added
#[[Blogotheque - Bon Iver - Lump Sum]] - added
#[[Blogotheque - Bon Iver - Skinny Love]] - added
#[[Blogotheque - Bon Iver - Wolves]] - added
#[[Blogotheque - GrizzlyBear]] - added
#[[Blogotheque - GrizzlyBear - Shift]] - added
#[[Blogotheque - GrizzlyBear - The Knife]] - added
#[[Blogotheque - Guillemots]] - added
#[[Blogotheque - Guillemots - Annie let´s not wait]] - added
#[[Blogotheque - Guillemots - MadeUp love song 43]] - added
#[[Blogotheque - José Gonzaléz]] - added
#[[Blogotheque - José Gonzaléz - Abram]] - added
#[[Blogotheque - José Gonzaléz - Fold]] - added
#[[Blogotheque - José Gonzaléz - Hints]] - added
#[[Blogotheque - José Gonzaléz - How Low]] - added
#[[Blogotheque - José Gonzaléz - Storm]] - added
#[[Blogotheque - Karkwa]] - added
#[[Blogotheque - Karkwa - La façade & Echapper au sort]] - added
#[[Blogotheque - Karkwa - La marche]] - added
#[[Blogotheque - Karkwa - Marie tu pleures pour rien]] - added
#[[Blogotheque - Lambchop]] - added
#[[Blogotheque - Lambchop - I believe in you]] - added
#[[Blogotheque - Lambchop - National talk like a pirate day]] - added
#[[Blogotheque - Patrick Watson]] - added
#[[Blogotheque - Patrick Watson - Part 1 - Le Metro]] - added
#[[Blogotheque - Patrick Watson - Part 2 - Moon]] - added
#[[Blogotheque - Patrick Watson - Part 3 - La Soirée]] - added
#[[Blogotheque - Priscilla Ahn]] - added
#[[Blogotheque - Priscilla Ahn - Are we different]] - added
#[[Blogotheque - Priscilla Ahn - Dream]] - added
#[[Blogotheque - Priscilla Ahn - Living in a tree]] - added
#[[Blogotheque - Priscilla Ahn - The Moon]] - added
#[[Blogotheque - Seasick Steve]] - added
#[[Blogotheque - Seasick Steve - Part 1]] - added
#[[Blogotheque - Seasick Steve - Part 2]] - added
#[[Blogotheque - Sigur Ros - Vid spilum endalaust]] - added
#[[Blogotheque - Slaraffenland]] - added
#[[Blogotheque - Slaraffenland - Part 1]] - added
#[[Blogotheque - Slaraffenland - Part 2]] - added
#[[Blogotheque - Slaraffenland - Part 3]] - added
#[[Blogotheque - St Vincent]] - added
#[[Blogotheque - St Vincent - Jesus saves, I spend]] - added
#[[Blogotheque - St Vincent - Marry me]] - added
#[[Blogotheque - St Vincent - Paris is burning]] - added
#[[Blogotheque - Sufjan Stevens]] - added
#[[Blogotheque - Sufjan Stevens- MusicNOW Festival]] - added
#[[Blogotheque - Sufjan Stevens- The Lakes of Canada]] - added
#[[Blogotheque - Tender Forever]] - added
#[[Blogotheque - Tender Forever - Believe]] - added
#[[Blogotheque - Tender Forever - My Love]] - added
#[[Blogotheque - Tender Forever - Well I can take it]] - added
#[[Blogotheque - The Kooks]] - added
#[[Blogotheque - The Kooks - Crazy]] - added
#[[Blogotheque - The Kooks - Ooh la]] - added
#[[Blogotheque - The Shins]] - added
#[[Blogotheque - The Shins - Gone for good & Turn on me]] - added
#[[Blogotheque - The Shins - Turn a square & The past and pending & Australia]] - added
#[[Blogotheque - Tom Jones]] - added
#[[Blogotheque - Tom Jones - Green green grass of home]] - added
#[[Blogotheque - Tom Jones - If he should ever leave you]] - added
#[[Blogotheque - Tom Jones - We got love]] - added
#[[Blogotheque - Vandaveer]] - added
#[[Blogotheque - Vandaveer - The street is full of creeps]] - added
#[[Blogotheque - Vandaveer - Woolgathering & Roman Candle]] - added
#[[Blogotheque - Yeasayer]] - added
#[[Blogotheque - Yeasayer - 2080]] - added
#[[Blogotheque - Yeasayer - No need to worry & Redcave]] - added
#[[Blogotheque - Yo La Tengo]] - added
#[[Blogotheque - Yo La Tengo - Part 1]] - added
#[[Blogotheque - Yo La Tengo - Part 2]] - added
#[[Blogotheque All]] - added
#[[Blogotheque Embedr]] - added
#[[Blogotheque Youtube Player]] - added
#[[Browse AccuRadio]] - added
#[[Browse BBC Radio]] - added
#[[Browse Blogotheque]] - added
#[[Browse LastFM]] - added
#[[Browser]] - added
#[[ColorFool]] - added
#[[ColorPalette]] - added
#[[ColorPalettes]] - added
#[[Dailymotion]] - added
#[[DefaultTiddlers]] - added
#[[DeliciousTagging]] - added
#[[DeprecatedFunctionsPlugin]] - added
#[[Festivals]] - added
#[[FieldsEditorPlugin]] - added
#[[GetSub]] - added
#[[GetTiddler]] - added
#[[GotoPlugin]] - added
#[[GrayPalette]] - added
#[[HawkColors]] - added
#[[HideWhenPlugin]] - added
#[[HoverMenuPlugin]] - added
#[[InlineJavascriptPlugin]] - added
#[[LessBackupsPlugin]] - added
#[[ListRating]] - added
#[[LoadRemoteFileThroughProxy]] - added
#[[MainMenu]] - added
#[[MarkupPreHead]] - added
#[[MessageFadeOut]] - added
#[[Modified]] - added
#[[MptwSmoke]] - added
#[[MySpace]] - added
#[[NestedSlidersPlugin]] - added
#[[Options]] - added
#[[OptionsPanel]] - added
#[[PasswordOptionsPlugin]] - added
#[[PaulosColors]] - added
#[[Platforms]] - added
#[[Player]] - added
#[[Playlist]] - added
#[[PopupMacro]] - added
#[[QuickOpenTagPlugin]] - added
#[[Radio]] - added
#[[Radio 1 Live Lounge]] - added
#[[RatingMacro]] - added
#[[RatingSummary]] - added
#[[Ratings]] - added
#[[Recently Added]] - added
#[[Red Palette]] - added
#[[RenameTagsPlugin]] - added
#[[SelectPalette]] - added
#[[SideBarOptions]] - added
#[[SideBarTabs]] - added
#[[SimpleSearchPlugin]] - added
#[[Site]] - added
#[[SiteSubtitle]] - added
#[[SiteTitle]] - added
#[[SplashScreenPlugin]] - added
#[[StyleSheet]] - added
#[[TabMore]] - added
#[[TabTimeline]] - added
#[[TagglyTaggingPlugin]] - added
#[[TestThis]] - added
#[[TiddlerListMacro]] - added
#[[Timeline]] - added
#[[ToDo]] - added
#[[ToolbarCommands]] - added
#[[TspotSetupPlugin]] - added
#[[UploadLog]] - added
#[[UploadPlugin]] - added
#[[Video]] - added
#[[Vimeo]] - added
#[[Vimeo - Lisa Hannigan - Lille]] - added
#[[Youtube]] - added
#[[Youtube - Lisa Hannigan - I dont know]] - added
#[[Youtube All]] - added
#[[YoutubePlaylist]] - added
#[[mjuzik]] - added
#[[mjuzikTheme]] - added
#[[systemConfig]] - added
#[[topMenuL]] - added
#[[topMenuR]] - added
#[[zzConfig]] - added
<<<
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2009.04.11 [1.9.5] pass current tiddler object into wrapper code so it can be referenced from within 'onclick' scripts
2009.02.26 [1.9.4] in $(), handle leading '#' on ID for compatibility with JQuery syntax
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 5, date: new Date(2009,4,11)};

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

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

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

// // GLOBAL FUNCTION: $(...) -- 'shorthand' convenience syntax for document.getElementById()
//{{{
if (typeof($)=='undefined') { function $(id) { return document.getElementById(id.replace(/^#/,'')); } }
//}}}
<<tiddler Video with: x3wner>>
<<tiddler GetSub with:vid>>
<<tiddler Video with: qczDug2BNRo>>
<<tiddler Video with: ez1O5swf1IM>>
<<tiddler Video with: MnBBQ-_D2Hc>>
<<tiddler GetSub with:vid>>
<<tiddler Video with: DwUbHy0TCsk>>
<<tiddler Video with: tYm8HZq9crk>>
<<tiddler Video with: 477071>>
<<tiddler Video with: ZWXF1W_KaWg>>
<<tiddler Video with: qI0W-KFaeRs>>
<<tiddler Video with: Z21j-l4HkKQ>>
<<tiddler Video with: 713764>>
<<tiddler Video with: cR_lzh6gvT4>>
/***
|Name:|LessBackupsPlugin|
|Description:|Intelligently limit the number of backup files you create|
|Version:|3.0.1 ($Rev: 2320 $)|
|Date:|$Date: 2007-06-18 22:37:46 +1000 (Mon, 18 Jun 2007) $|
|Source:|http://mptw.tiddlyspot.com/#LessBackupsPlugin|
|Author:|Simon Baird|
|Email:|simon.baird@gmail.com|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Description
You end up with just backup one per year, per month, per weekday, per hour, minute, and second.  So total number won't exceed about 200 or so. Can be reduced by commenting out the seconds/minutes/hours line from modes array
!!Notes
Works in IE and Firefox only.  Algorithm by Daniel Baird. IE specific code by by Saq Imtiaz.
***/
//{{{

var MINS  = 60 * 1000;
var HOURS = 60 * MINS;
var DAYS  = 24 * HOURS;

if (!config.lessBackups) {
	config.lessBackups = {
		// comment out the ones you don't want or set config.lessBackups.modes in your 'tweaks' plugin
		modes: [
			["YYYY",  365*DAYS], // one per year for ever
			["MMM",   31*DAYS],  // one per month
			["ddd",   7*DAYS],   // one per weekday
			//["d0DD",  1*DAYS],   // one per day of month
			["h0hh",  24*HOURS], // one per hour
			["m0mm",  1*HOURS],  // one per minute
			["s0ss",  1*MINS],   // one per second
			["latest",0]         // always keep last version. (leave this).
		]
	};
}

window.getSpecialBackupPath = function(backupPath) {

	var now = new Date();

	var modes = config.lessBackups.modes;

	for (var i=0;i<modes.length;i++) {

		// the filename we will try
		var specialBackupPath = backupPath.replace(/(\.)([0-9]+\.[0-9]+)(\.html)$/,
				'$1'+now.formatString(modes[i][0]).toLowerCase()+'$3')

		// open the file
		try {
			if (config.browser.isIE) {
				var fsobject = new ActiveXObject("Scripting.FileSystemObject")
				var fileExists  = fsobject.FileExists(specialBackupPath);
				if (fileExists) {
					var fileObject = fsobject.GetFile(specialBackupPath);
					var modDate = new Date(fileObject.DateLastModified).valueOf();
				}
			}
			else {
				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
				var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
				file.initWithPath(specialBackupPath);
				var fileExists = file.exists();
				if (fileExists) {
					var modDate = file.lastModifiedTime;
				}
			}
		}
		catch(e) {
			// give up
			return backupPath;
		}

		// expiry is used to tell if it's an 'old' one. Eg, if the month is June and there is a
		// June file on disk that's more than an month old then it must be stale so overwrite
		// note that "latest" should be always written because the expiration period is zero (see above)
		var expiry = new Date(modDate + modes[i][1]);
		if (!fileExists || now > expiry)
			return specialBackupPath;
	}
}

// hijack the core function
window.getBackupPath_mptw_orig = window.getBackupPath;
window.getBackupPath = function(localPath) {
	return getSpecialBackupPath(getBackupPath_mptw_orig(localPath));
}

//}}}

<<tiddler GetSub with:vid>>
<<tiddler Video with: 4aPe--y2ZB4>>
<<tiddler Video with: 7WwaPv1rZiQ>>
<<tiddler Video with: 3944880>>
<<tiddler Video with: 6jiEl223asM&NR>>
/%
|Name|ListRating|
|Source|http://lastfm.tiddlyspot.com/#ListRating|
|Version|0.0.1|
|Author|TobiasBeer|
|''License''|[[Creative Commons Attribution-Share Alike 3.0|http://creativecommons.org/licenses/by-sa/3.0/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|gets a list of tiddlers with a given rating, see RatingMacro|

Usage: <<tiddler ListRating with:rate>>

%/<script>
  var getRate='$1';
  var pre='$2';
  if(pre=='$'+'2') pre='';
  var sep='$3';if(sep=='$'+'3') sep='<br/>';
  var tids=window.store.getTiddlers('modified').reverse();
  var cats=config.macros.rating.ratings;
  var rNum=parseInt(getRate);
  if (getRate=='$'+'1'||isNaN(rNum)||rNum<0||rNum>cats.length-1) getRate=(cats.length-1).toString();
  var out='';
  for (var t=0;t<tids.length; t++) {
    var rate = store.getValue(tids[t],"rating");
    if (rate==undefined) rate="0";
    if (rate==getRate) {
      out+="[["+pre+tids[t].title+"|"+tids[t].title+"]]"+sep;
    }
  }
  return out;
</script>
/***
|''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);
}
//}}}

<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />

<link rel="shortcut icon" href="http://sites.google.com/site/beertobias/favicon.ico">
<style type="text/css">#contentWrapper {display:none;}</style><div id="splashscreen" style="border: 1px solid #DDD; display:block; text-align:center; width:500px; margin:100px auto; padding:30px; color:white; font-size:24px; background-color:#CCC;">mju:zik<span style="font-size:0.8em; margin-left:20px;">a tiddlywiki based music collection</span><br style="margin-bottom:20px"><span style="font-size: 12px;color:#A66;">requires javascript</span></div>
<!--}}}-->
<<tiddler tape##vid with: "104957">>
//{{{
config.options.txtFadeTimer = 5000; // 5 seconds 

function displayMessage(text,linkText,fadeTimer) { 
        var e = getMessageDiv(); 
        if(!e) { 
                alert(text); 
                return; 
        } 
        if(linkText) { 
                var link = createTiddlyElement(e,"a",null,null,text); 
                link.href = linkText; 
                link.target = "_blank"; 
        } else { 
                e.appendChild(document.createTextNode(text)); 
        } 
        if(config.options.txtFadeTimer > 0) { 
                setTimeout(clearMessage, config.options.txtFadeTimer); 
        } 
}
//}}}
Mostly plugins modified by me...
<<tagglyTagging>>
Name: MptwSmoke
Background: #fff
Foreground: #000
PrimaryPale: #aaa
PrimaryLight: #777
PrimaryMid: #111
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
<<tiddler GetSub with:vid>>
<<tiddler Video with: HEqySvpgDJE&>>
<<tiddler Video with: tVrrAP-ntMc>>
<<tiddler Video with: EEyCm6OOkOY>>
<<tiddler Video with: VVNTjPiRpMs>>
Connection thousands of musicians and video artists with fans and lovers...
<<tagglyTagging>>
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Options|##Configuration|
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
<<option chkFloatingSlidersAnimate>> allow floating sliders to animate when opening/closing
>Note: This setting can cause 'clipping' problems in some versions of InternetExplorer.
>In addition, for floating slider animation to occur you must also allow animation in general (see [[AdvancedOptions]]).
<<<
!!!!!Revisions
<<<
2008.11.15 - 2.4.9 in adjustNestedSlider(), don't make adjustments if panel is marked as 'undocked' (CSS class).  In onClickNestedSlider(), SHIFT-CLICK docks panel (see [[MoveablePanelPlugin]])
|please see [[NestedSlidersPluginInfo]] for additional revision details|
2005.11.03 - 1.0.0 initial public release.  Thanks to RodneyGomes, GeoffSlocock, and PaulPetterson for suggestions and experiments.
<<<
!!!!!Code
***/
//{{{
version.extensions.NestedSlidersPlugin= {major: 2, minor: 4, revision: 9, date: new Date(2008,11,15)};

// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkFloatingSlidersAnimate===undefined)
	config.options.chkFloatingSlidersAnimate=false; // avoid clipping problems in IE

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

// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

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 hover=lookaheadMatch[6];
				var buttonClass=lookaheadMatch[7];
				var label=lookaheadMatch[8];
				var openlabel=lookaheadMatch[9];
				var panelID=lookaheadMatch[10];
				var blockquote=lookaheadMatch[11];
				var deferred=lookaheadMatch[12];

				// 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 (defopen) show="block";

				// cookie, use saved open/closed state
				if (cookiename) {
					cookie=cookiename.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 (label) {
					var parts=label.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 (openlabel) {
					var parts=openlabel.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 (header) { // use "Hn" header format instead of button/link
					var lvl=(header.length>5)?5:header.length;
					var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,buttonClass,title);
					btn.onclick=onClickNestedSlider;
					btn.setAttribute("href","javascript:;");
					btn.setAttribute("title",tooltip);
				}
				else
					var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,buttonClass);
				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=defopen!=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.setAttribute("hover",hover?"true":"false");
				btn.onmouseover=function(ev) {
					// optional 'open on hover' handling
					if (this.getAttribute("hover")=="true" && this.sliderPanel.style.display=='none') {
						document.onclick.call(document,ev); // close transients
						onClickNestedSlider(ev); // open this slider
					}
					// mouseover on button aligns floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel);
				}

				// create slider panel
				var panelClass=panelwidth?"floatingPanel":"sliderPanel";
				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=(panelwidth && panelwidth.length>2)?panelwidth.slice(1,-1):"";
				panel.setAttribute("transient",transient=="*"?"true":"false");
				panel.style.display = show;
				panel.style.width=panel.defaultPanelWidth;
				panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
					{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this); }

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

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);
	while (theTarget && theTarget.sliderPanel==undefined) theTarget=theTarget.parentNode;
	if (!theTarget) return false;
	var theSlider = theTarget.sliderPanel;
	var isOpen = theSlider.style.display!="none";

	// if SHIFT-CLICK, dock panel first (see [[MoveablePanelPlugin]])
	if (e.shiftKey && config.macros.moveablePanel) config.macros.moveablePanel.dock(theSlider,e);

	// 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") {
		var place=theSlider;
		if (theSlider.getAttribute("blockquote")=="true")
			place=createTiddlyElement(place,"blockquote");
		wikify(theSlider.getAttribute("raw"),place);
		theSlider.setAttribute("rendered","true");
	}

	// show/hide the slider
	if(config.options.chkAnimate && (!hasClass(theSlider,'floatingPanel') || config.options.chkFloatingSlidersAnimate))
		anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
	else
		theSlider.style.display = isOpen ? "none" : "block";

	// reset to default width (might have been changed via plugin code)
	theSlider.style.width=theSlider.defaultPanelWidth;

	// align floater panel position with target button
	if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider);

	// if showing panel, set focus to first 'focus-able' element in panel
	if (theSlider.style.display!="none") {
		var ctrls=theSlider.getElementsByTagName("*");
		for (var c=0; c<ctrls.length; c++) {
			var t=ctrls[c].tagName.toLowerCase();
			if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
				{ try{ ctrls[c].focus(); } catch(err){;} break; }
		}
	}
	var cookie=theTarget.sliderCookie;
	if (cookie && cookie.length) {
		config.options[cookie]=!isOpen;
		if (config.options[cookie]!=theTarget.defOpen) window.saveOptionCookie(cookie);
		else window.removeCookie(cookie); // remove cookie if slider is in default display state
	}

	// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
	// prevent clicks *within* a slider button from being processed by browser
	// but allow plain click to bubble up to page background (to close transients, if any)
	if (e.shiftKey || theTarget!=resolveTarget(e))
		{ e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
	Popup.remove(); // close open popup (if any)
	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);

	if (document.nestedSliders_savedOnClick)
		var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
	// if click was inside a popup... leave transient panels alone
	var p=target; while (p) if (hasClass(p,"popup")) break; else p=p.parentNode;
	if (p) return retval;
	// if click was inside transient panel (or something contained by a transient panel), leave it alone
	var p=target; while (p) {
		if ((hasClass(p,"floatingPanel")||hasClass(p,"sliderPanel"))&&p.getAttribute("transient")=="true") break;
		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})
		if (!hasClass(all[i],"floatingPanel")&&!hasClass(all[i],"sliderPanel")) all[i].style.display="none";
	}
	return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
	if (hasClass(panel,"floatingPanel") && !hasClass(panel,"undocked")) {
		// see [[MoveablePanelPlugin]] for use of 'undocked'
		var rightEdge=document.body.offsetWidth-1;
		var panelWidth=panel.offsetWidth;
		var left=0;
		var top=btn.offsetHeight; 
		if (place.style.position=="relative" && findPosX(btn)+panelWidth>rightEdge) {
			left-=findPosX(btn)+panelWidth-rightEdge; // shift panel relative to button
			if (findPosX(btn)+left<0) left=-findPosX(btn); // stay within left edge
		}
		if (place.style.position!="relative") {
			var left=findPosX(btn);
			var top=findPosY(btn)+btn.offsetHeight;
			var p=place; while (p && !hasClass(p,'floatingPanel')) p=p.parentNode;
			if (p) { left-=findPosX(p); top-=findPosY(p); }
			if (left+panelWidth>rightEdge) left=rightEdge-panelWidth;
			if (left<0) left=0;
		}
		panel.style.left=left+"px"; panel.style.top=top+"px";
	}
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider 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 stop handler so sliderPanel/floatingPanel 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);
		var e=this.element;
		if (hasClass(e,"sliderPanel")||hasClass(e,"floatingPanel")) {
			// adjust panel overflow and position after animation
			e.style.overflow = "visible";
			if (window.adjustSliderPos) window.adjustSliderPos(e.parentNode,e.button,e);
		}
	};
}
//}}}
{{right{[[mjuzikTheme]] | [[ToDo]] | <<tag Site>>}}}

<<tiddler OptionsPanel>>
|wideTable|k
| option | setting |h
| username|<<option txtUserName>>|
| autosave|<<option chkAutoSave>>|
| save backups|<<option chkSaveBackups>>|
| reguar expression search|<<option chkRegExpSearch>>|
| case sensitive search|<<option chkCaseSensitiveSearch>>|
| enable animations|<<option chkAnimate>>|
|>| <<slider chkAdvancedOptions AdvancedOptions "advanced options" "click to change advanced options">> |
| <<tiddler TspotOptions>> <<tiddler TspotSidebar>> |>|
<<tiddler Video with: 4276749>>
/***
|''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: PaulosColors
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #04b
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #69c
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
Providing great services to music lovers...

<<tagglyTagging>>
<<tiddler AccuRadio with: AccuRadio##listAll>>
Is what it says...
/***
|''Name:''|~PopupMacro|
|''Author:''|Saq Imtiaz|
|''Version:''|1.0.0 (2006-05-09)|
|''Description:''|Create popups with custom content|
|''Source:''|http://tw.lewcid.org/#PopupMacro|
|''Documentation:''|http://tw.lewcid.org/#PopupMacroDocs|
|''Requires:''|TW Version 2.0.8 or better|
***/

{{{
config.macros.popup = {};
config.macros.popup.arrow = (document.all?"▼":"▾");
config.macros.popup.handler = function(place,macroName,params,wikifier,paramString,theTiddler) {

        if (!params[0] || !params[1]) 
             {createTiddlyError(place,'missing macro parameters','missing label or content parameter');
              return false;};
   
        var label = params[0];
        var source = (params[1]).replace(/\$\)\)/g,">>"); 
        var nestedId = params[2]? params[2]: 'nestedpopup';        

	var onclick = function(event) {
	        if(!event){var event = window.event;}
                var theTarget = resolveTarget(event);
                var nested = (!isNested(theTarget));
               
                if ((Popup.stack.length > 1)&&(nested==true)) {Popup.removeFrom(1);}
                else if(Popup.stack.length > 0 && nested==false) {Popup.removeFrom(0);};
                
                var theId = (nested==false)? "popup" : nestedId; 
	        var popup = createTiddlyElement(document.body,"ol",theId,"popup",null);
	        Popup.stack.push({root: button, popup: popup});

                wikify(source,popup);
		Popup.show(popup,true);
	        event.cancelBubble = true;
		if (event.stopPropagation) event.stopPropagation();
		return false;
	}
	var button = createTiddlyButton(place, label+this.arrow,label, onclick, null);
};

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

setStylesheet(
"#popup {padding:3px;}\n"+
".popup li , .popup ul, .popup ol {list-style:none !important; margin:0px; !important; font-size:100%; padding-top:0px !important; padding:0px !important;}\n"+
".popup span li , .popup span ul, .popup span ol {list-style:none !important; margin:0px !important; font-size:100%; padding-top:0px !important; padding:0px !important;}\n"+
"#nestedpopup {background:#2E5ADF; border: 1px solid #0331BF; margin-left:1em; }\n"+
"",
"CustomPopupStyles");
}}}
/***
|Name:|QuickOpenTagPlugin|
|Description:|Changes tag links to make it easier to open tags as tiddlers|
|Version:|3.0.1 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#QuickOpenTagPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
config.quickOpenTag = {

	dropdownChar: (document.all ? "\u25bc" : "\u25be"), // the little one doesn't work in IE?

	createTagButton: function(place,tag,excludeTiddler) {
		// little hack so we can do this: <<tag PrettyTagName|RealTagName>>
		var splitTag = tag.split("|");
		var pretty = tag;
		if (splitTag.length == 2) {
			tag = splitTag[1];
			pretty = splitTag[0];
		}
		
		var sp = createTiddlyElement(place,"span",null,"quickopentag");
		createTiddlyText(createTiddlyLink(sp,tag,false),pretty);
		
		var theTag = createTiddlyButton(sp,config.quickOpenTag.dropdownChar,
                        config.views.wikified.tag.tooltip.format([tag]),onClickTag);
		theTag.setAttribute("tag",tag);
		if (excludeTiddler)
			theTag.setAttribute("tiddler",excludeTiddler);
    		return(theTag);
	},

	miniTagHandler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var tagged = store.getTaggedTiddlers(tiddler.title);
		if (tagged.length > 0) {
			var theTag = createTiddlyButton(place,config.quickOpenTag.dropdownChar,
                        	config.views.wikified.tag.tooltip.format([tiddler.title]),onClickTag);
			theTag.setAttribute("tag",tiddler.title);
			theTag.className = "miniTag";
		}
	},

	allTagsHandler: function(place,macroName,params) {
		var tags = store.getTags(params[0]);
		var filter = params[1]; // new feature
		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];
			if (!filter || (title.match(new RegExp('^'+filter)))) {
				var info = getTiddlyLinkInfo(title);
				var theListItem =createTiddlyElement(ul,"li");
				var theLink = createTiddlyLink(theListItem,tags[t][0],true);
				var theCount = " (" + tags[t][1] + ")";
				theLink.appendChild(document.createTextNode(theCount));
				var theDropDownBtn = createTiddlyButton(theListItem," " +
					config.quickOpenTag.dropdownChar,this.tooltip.format([tags[t][0]]),onClickTag);
				theDropDownBtn.setAttribute("tag",tags[t][0]);
			}
		}
	},

	// todo fix these up a bit
	styles: [
"/*{{{*/",
"/* created by QuickOpenTagPlugin */",
".tagglyTagged .quickopentag, .tagged .quickopentag { margin-right:1em; border:none; padding:0px 0px 0px 1px; }",
".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }",
".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}",
"/* extra specificity to make it work right */",
"#displayArea .viewer .quickopentag a.button, ",
"#displayArea .viewer .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink ",
"	{ border:0px solid black; }",
"#displayArea .viewer .quickopentag a.button, ",
"#mainMenu .quickopentag a.button ",
"	{ margin-left:0px; padding-left:2px; }",
"#displayArea .viewer .quickopentag a.tiddlyLink, ",
"#mainMenu .quickopentag a.tiddlyLink ",
"	{ margin-right:0px; padding-right:0px; padding-left:0px; margin-left:0px; }",
"a.miniTag {font-size:150%;} ",
"#mainMenu .quickopentag a.button ",
"	/* looks better in right justified main menus */",
"	{ margin-left:0px; padding-left:2px; margin-right:0px; padding-right:0px; }", 
"#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }",
"#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }",
"#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }",
"/*}}}*/",
		""].join("\n"),

	init: function() {
		// we fully replace these builtins. can't hijack them easily
		window.createTagButton = this.createTagButton;
		config.macros.allTags.handler = this.allTagsHandler;
		config.macros.miniTag = { handler: this.miniTagHandler };
		config.shadowTiddlers["QuickOpenTagStyles"] = this.styles;
		store.addNotification("QuickOpenTagStyles",refreshStyles);
	}
}

config.quickOpenTag.init();

//}}}
|linkTable|k
|min-width:100px;padding-right:5px; Station|min-width:70px; Play |min-width:70px; Browse |h
| [[AccuRadio|http://www.accuradio.com]]| [[►|AccuRadio]] | [[¤|Browse AccuRadio]] |
| [[BBC Radio|http://www.bbc.co.uk/radio]]| [[►|Browse BBC Radio]] | [[¤|Browse BBC Radio]] |
| [[LastFM|http://www.lastfm.com]]| [[►|Browse LastFM]] | [[¤|Browse LastFM]] |
<<tagglyTagging>>
A great show with recordings of brilliant artists, mostly performing covers. Here is a youtube player with my favourite recordings:

<<tiddler Video with:"6EB8874297678A0B&hl">>
/***
|''Name:''|RatingMacro|
|''Description''|allows to rate tiddlers. e.g. via stars|
|''Version:''|0.1.0|
|''Type''|macro|
|''Author:''|[[TobiasBeer]]|
|''Info:''|http://lastfm.tiddlyspot.com/#RatingMacroInfo [[RatingMacroInfo]]|
|''Source:''|http://lastfm.tiddlyspot.com/#RatingMacro [[RatingMacro]]|
|''License''|[[Creative Commons Attribution-Share Alike 3.0|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''Feedback:''|[[here|http://groups.google.com/group/tiddlywiki/browse_frm/thread/35b6e27237f1749b]]|
|''~CoreVersion''|2.2|
Inspired by http://sinojellyempty.tiddlyspot.com/#FiveStarsPlugin
!Code
***/

//{{{
config.macros.rating = {
  icon: "★",
  cssClass: "rating",
  tooltip: "rating: ",
  ratings: ["none","poor", "below average", "average", "above average", "excellent"],
  defaultStyle: ["color:"+store.getTiddlerSlice('ColorPalette','TertiaryPale')+";text-decoration:none;background:none;"],
  colorOn: store.getTiddlerSlice('ColorPalette','SecondaryMid'),
  colorOff: store.getTiddlerSlice('ColorPalette','SecondaryPale'),

  update: function(obj,action){
    //actions --> 0:refresh 1:highlight 2:save
    p=obj.parentNode;
    var r=obj.getAttribute("rel");
    var tidName=obj.getAttribute("tiddler");
    var tid=store.getTiddler(tidName);
    if (tid==null) return;
    if (action==2) {
      tid.fields["rating"]=r;
      store.setDirty(true);
      tids=obj.getAttribute("update").readBracketedList();
      for (i=0;i<tids.length;i++) {
        story.refreshTiddler(tids[i],null,true);
        refreshDisplay(tids[i]);
      }
      story.refreshTiddler(tidName,null,true);
    }
    var last=parseInt(tid.fields["rating"]||0);
    for (i=1;i<this.ratings.length;i++){
      p.childNodes[i].style.color=((action>0&&i<=r)||(action==0&&i<=last))?this.colorOn:this.colorOff;
    }
  },

  handler: function(place, macroName, params, wikifier, paramString, tiddler) {
    var t=params.shift();
    if (t===undefined||t=='=here') t=story.findContainingTiddler(place).getAttribute('tiddler');
    var sHTML='<span title="rating" class="'+this.cssClass+'">';
    for (var i=0; i<this.ratings.length; i++){
      sHTML += '<a href="#" onmouseover="config.macros.rating.update(this,1)" onclick="config.macros.rating.update(this,2)" onmouseout="config.macros.rating.update(this,0)" title="'+this.tooltip+this.ratings[i]+'" rel="'+i+'" update="[['+params.join(']] [[')+']]" tiddler="'+t+'" style="'+this.defaultStyle+'">'+this.icon+'</a>';
    }
    place.innerHTML+=sHTML+'</span>';
    this.update(place.lastChild.firstChild,0);
  }
}
//}}}
/%
|Name|RatingSummary|
|Source|http://lastfm.tiddlyspot.com/#RatingSummary|
|Version|0.0.1|
|Author|TobiasBeer|
|''License''|[[Creative Commons Attribution-Share Alike 3.0|http://creativecommons.org/licenses/by-sa/3.0/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|generates an overview of rated tiddlers, see RatingMacro|

Usage: <<tiddler GetRatingOverview with:"icons names count range[fromRating:toRating]">>
...all parameters optional, order irrelevant

%/<script>
  params="$1";
  var bIcons = params.indexOf("icons")>=0;
  var bNames = params.indexOf("names")>=0;
  var bCount = params.indexOf("count")>=0;
  var bByTitle = params.indexOf("byTitle");
  var range = params.split("range[");
  var fromCat=1;
  var toCat=-1;
  if (range[1]!=undefined) {
    bounds = range[1].split(":");
    if (!isNaN(bounds[0])) fromCat=bounds[0];
    var upper = bounds[1].split("]")[0];
    if(!isNaN(upper)) toCat=upper;
  }

  var numCats=config.macros.rating.ratings.length-1;
  toCat<0?toCat=numCats:toCat=Math.min(toCat,numCats);
  fromCat=Math.max(fromCat,0);
  fromCat=Math.min(fromCat,numCats);
  fromCat=Math.min(fromCat,toCat);
  numCols=toCat-fromCat+1;
  
  (bByTitle==true)?tids=window.store.getTiddlers('title'):tids=window.store.getTiddlers('modified').reverse();
  var cats=config.macros.rating.ratings;
  var cTids=[];
  for (var c=0;c<cats.length;c++) cTids[c]=[];

  for (var t=0;t<tids.length; t++) {
    var rate = parseInt(store.getValue(tids[t],"rating"));
    if (isNaN(rate)) rate=0;
    cTids[rate].push(tids[t].title);
  }
  
  var out="|"; var pre="|ratingTable"+numCols+"|k\n|";
  for (var c=0;c<Math.min(cats.length,toCat+1);c++) {
    switch (c) {
      case 0: var sStar=cats[0];break;
      case 1: sStar="";
      default: sStar+=config.macros.rating.icon; break;
    }
    if (c>=fromCat) {
      bIcons=bIcons||!bNames;
      bNames?sep="<br>":sep=" ";
      bIcons?sStars=sStar+sep:sStars="";
      (bNames&&c>0)?sName=cats[c]+" ":sName="";
      bCount?sCount=" ("+cTids[c].length.toString()+") ":sCount=" ";
      hdStyle="text-align:center;width:"+Math.floor(95/numCols).toString()+"%;";
      pre+=hdStyle+sStars+sName+sCount+"|";
      out+='padding-left:5px;vertical-align:top;';
      for (var t=0;t<cTids[c].length; t++)
        out+="[["+cTids[c][t]+"]]<br />";
      out+="|";
    }
  }
  setStylesheet('.ratingTable'+numCols+'{width:'+Math.floor(90*numCols/numCats)+'%;}','RatingTableStyles');
  return(pre+"h\n"+out);
</script>
|wideTable linkTable|k
| ★★★★★ |h
|<<tiddler ListRating with:5 '- ' ''>>|
| ★★★★ |h
|<<tiddler ListRating with:4 '- ' ''>>|
| ★★★ |h
|<<tiddler ListRating with:3 '- ' ''>>|
| ★★ |h
|<<tiddler ListRating with:2 '- ' ''>>|
| ★ |h
|<<tiddler ListRating with:1 '- ' ''>>|
<<tiddlerList filter:"tiddler.tags.contains('Video')" top:"5" order:"-modified" dateFormat:"YYYY mmm. 0DD" itemTemplate:"{{recently{%link}}}\n{{light{(%created)}}}\n\n<<tiddler %link$))\n">>{{recently{[[Click to see all videos...|All Videos]]}}}
Name: MGTDRed
Background: #fff
Foreground: #000
PrimaryPale: #fdd
PrimaryLight: #c55
PrimaryMid: #711
PrimaryDark: #500
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/***
|Name:|RenameTagsPlugin|
|Description:|Allows you to easily rename or delete tags across multiple tiddlers|
|Version:|3.0 ($Rev: 5501 $)|
|Date:|$Date: 2008-06-10 23:11:55 +1000 (Tue, 10 Jun 2008) $|
|Source:|http://mptw.tiddlyspot.com/#RenameTagsPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
Rename a tag and you will be prompted to rename it in all its tagged tiddlers.
***/
//{{{
config.renameTags = {

	prompts: {
		rename: "Rename the tag '%0' to '%1' in %2 tidder%3?",
		remove: "Remove the tag '%0' from %1 tidder%2?"
	},

	removeTag: function(tag,tiddlers) {
		store.suspendNotifications();
		for (var i=0;i<tiddlers.length;i++) {
			store.setTiddlerTag(tiddlers[i].title,false,tag);
		}
		store.resumeNotifications();
		store.notifyAll();
	},

	renameTag: function(oldTag,newTag,tiddlers) {
		store.suspendNotifications();
		for (var i=0;i<tiddlers.length;i++) {
			store.setTiddlerTag(tiddlers[i].title,false,oldTag); // remove old
			store.setTiddlerTag(tiddlers[i].title,true,newTag);  // add new
		}
		store.resumeNotifications();
		store.notifyAll();
	},

	storeMethods: {

		saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,

		saveTiddler: function(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created) {
			if (title != newTitle) {
				var tagged = this.getTaggedTiddlers(title);
				if (tagged.length > 0) {
					// then we are renaming a tag
					if (confirm(config.renameTags.prompts.rename.format([title,newTitle,tagged.length,tagged.length>1?"s":""])))
						config.renameTags.renameTag(title,newTitle,tagged);

					if (!this.tiddlerExists(title) && newBody == "")
						// dont create unwanted tiddler
						return null;
				}
			}
			return this.saveTiddler_orig_renameTags(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created);
		},

		removeTiddler_orig_renameTags: TiddlyWiki.prototype.removeTiddler,

		removeTiddler: function(title) {
			var tagged = this.getTaggedTiddlers(title);
			if (tagged.length > 0)
				if (confirm(config.renameTags.prompts.remove.format([title,tagged.length,tagged.length>1?"s":""])))
					config.renameTags.removeTag(title,tagged);
			return this.removeTiddler_orig_renameTags(title);
		}

	},

	init: function() {
		merge(TiddlyWiki.prototype,this.storeMethods);
	}
}

config.renameTags.init();

//}}}

//{{{
merge(config.macros,{
	setPalette: {

		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			var paletteName = params[0] ? params[0] : tiddler.title;
			createTiddlyButton(place,"apply","Apply this palette",function(e) {
				config.macros.selectPalette.updatePalette(tiddler.title);
				return false;
			});
		}
	},

	selectPalette: {

		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			var sel=document.createElement("span");
			sel.className="selectPalette";
			place.appendChild(sel);
			createTiddlyDropDown(sel,this.onPaletteChange,this.getPalettes());
		},

		getPalettes: function() {
			var result = [
				{caption:"Select color palette", name:""},
				{caption:"(Default)", name:"(default)"}
			];
			var tagged = store.getTaggedTiddlers("ColorPalette","title");
			for(var t=0; t<tagged.length; t++)
				result.push({caption:tagged[t].title, name:tagged[t].title});
			return result;
		},

		onPaletteChange: function(e) {
			config.macros.selectPalette.updatePalette(this.value);
			return true;
		},

		updatePalette: function(title) {
			if (title != "") {
				store.deleteTiddler("ColorPalette");
				if (title != "(default)")
					store.saveTiddler("ColorPalette","ColorPalette",store.getTiddlerText(title),
								config.options.txtUserName,undefined,"");
				this.refreshPalette();
				if(config.options.chkAutoSave)
					saveChanges(true);
			}
		},

		refreshPalette: function() {
			config.macros.refreshDisplay.onClick();
		}
	}
});

//}}}
<<saveChanges>><<tiddler TspotSidebar>><<closeAll>>[[options|Options]]
<<slider chkSliderSideBarTabs SideBarTabs##Config "lists »" "show detailed lists">>
@@display:none;
!Config
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>
<<selectPalette>>
@@
/***
|''Name''|SimpleSearchPlugin|
|''Description''|displays search results as a simple list of matching tiddlers|
|''Authors''|FND|
|''Version''|0.4.1|
|''Status''|stable|
|''Source''|http://devpad.tiddlyspot.com/#SimpleSearchPlugin|
|''CodeRepository''|http://svn.tiddlywiki.org/Trunk/contributors/FND/plugins/SimpleSearchPlugin.js|
|''License''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''Keywords''|search|
!Code
***/
//{{{
if(!version.extensions.SimpleSearchPlugin) { //# ensure that the plugin is only installed once
version.extensions.SimpleSearchPlugin = { installed: true };

if(!config.extensions) { config.extensions = {}; }

config.extensions.SimpleSearchPlugin = {
	heading: "Search Results",
	containerId: "searchResults",
	btnCloseLabel: "close",
	btnCloseTooltip: "dismiss search results",
	btnCloseId: "search_close",
	btnOpenLabel: "Open all",
	btnOpenTooltip: "open all search results",
	btnOpenId: "search_open",

	displayResults: function(matches, query) {
		story.refreshAllTiddlers(true); // update highlighting within story tiddlers
		var el = document.getElementById(this.containerId);
		query = '"""' + query + '"""'; // prevent WikiLinks
		if(el) {
			removeChildren(el);
		} else { //# fallback: use displayArea as parent
			var container = document.getElementById("displayArea");
			el = document.createElement("div");
			el.id = this.containerId;
			el = container.insertBefore(el, container.firstChild);
		}
		var msg = "!" + this.heading + "\n";
		if(matches.length > 0) {
			msg += "''" + config.macros.search.successMsg.format([matches.length.toString(), query]) + ":''\n";
			this.results = [];
			for(var i = 0 ; i < matches.length; i++) {
				this.results.push(matches[i].title);
				msg += "* [[" + matches[i].title + "]]\n";
			}
		} else {
			msg += "''" + config.macros.search.failureMsg.format([query]) + "''"; // XXX: do not use bold here!?
		}
		createTiddlyButton(el, this.btnCloseLabel, this.btnCloseTooltip, config.extensions.SimpleSearchPlugin.closeResults, "button", this.btnCloseId);
		wikify(msg, el);
		if(matches.length > 0) { // XXX: redundant!?
			createTiddlyButton(el, this.btnOpenLabel, this.btnOpenTooltip, config.extensions.SimpleSearchPlugin.openAll, "button", this.btnOpenId);
		}
	},

	closeResults: function() {
		var el = document.getElementById(config.extensions.SimpleSearchPlugin.containerId);
		removeNode(el);
		config.extensions.SimpleSearchPlugin.results = null;
		highlightHack = null;
	},

	openAll: function(ev) {
		story.displayTiddlers(null, config.extensions.SimpleSearchPlugin.results);
		return false;
	}
};

config.shadowTiddlers.StyleSheetSimpleSearch = "/*{{{*/\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " {\n" +
	"\toverflow: auto;\n" +
	"\tpadding: 5px 1em 10px;\n" +
	"\tbackground-color: [[ColorPalette::TertiaryPale]];\n" +
	"\tmargin-top: 20px;\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " h1 {\n" +
	"\tmargin-top: 0px;\n" +
	"\tborder: none;\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " ul {\n" +
	"\tmargin: 0.5em;\n" +
	"\tpadding-left: 1.5em;\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " .button {\n" +
	"\tdisplay: block;\n" +
	"\tborder-color: [[ColorPalette::TertiaryDark]];\n" +
	"\tpadding: 5px;\n" +
	"\tbackground-color: [[ColorPalette::TertiaryLight]];\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " .button:hover {\n" +
	"\tborder-color: [[ColorPalette::SecondaryMid]];\n" +
	"\tbackground-color: [[ColorPalette::SecondaryLight]];\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.btnCloseId + " {\n" +
	"\tfloat: right;\n" +
	"\tmargin: 0px -0.5em 0px 0px;\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.btnOpenId + " {\n" +
	"\tfloat: left;\n" +
	"\tmargin-top: 5px;\n" +
	"}\n" +
	"/*}}}*/";
store.addNotification("StyleSheetSimpleSearch", refreshStyles);

// override Story.search()
Story.prototype.search = function(text, useCaseSensitive, useRegExp) {
	highlightHack = new RegExp(useRegExp ? text : text.escapeRegExp(), useCaseSensitive ? "mg" : "img");
	var matches = store.search(highlightHack, null, "excludeSearch");
	var q = useRegExp ? "/" : "'";
	config.extensions.SimpleSearchPlugin.displayResults(matches, q + text + q);
};

// override TiddlyWiki.search() to sort by relevance
TiddlyWiki.prototype.search = function(searchRegExp, sortField, excludeTag, match) {
	var candidates = this.reverseLookup("tags", excludeTag, !!match);
	var primary = [];
	var secondary = [];
	var tertiary = [];
	for(var t = 0; t < candidates.length; t++) {
		if(candidates[t].title.search(searchRegExp) != -1) {
			primary.push(candidates[t]);
		} else if(candidates[t].tags.join(" ").search(searchRegExp) != -1) {
			secondary.push(candidates[t]);
		} else if(candidates[t].text.search(searchRegExp) != -1) {
			tertiary.push(candidates[t]);
		}
	}
	var results = primary.concat(secondary).concat(tertiary);
	if(sortField) {
		results.sort(function(a, b) {
			return a[sortField] < b[sortField] ? -1 : (a[sortField] == b[sortField] ? 0 : +1);
		});
	}
	return results;
};

} //# end of "install only once"
//}}}
Tiddlers related to the site design...
a tiddlywiki based music collection
[[mju:zik|Recently Added]]
/***
|Name|SplashScreenPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#SplashScreenPlugin|
|Version|0.21 |
|Requires|~TW2.08+|
!Description:
Provides a simple splash screen that is visible while the TW is loading.
!Code
***/
//{{{
var old_lewcid_splash_restart=restart;

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


var oldText = store.getTiddlerText("MarkupPreHead");
if (oldText.indexOf("splashscreen")==-1)
   {var siteTitle = store.getTiddlerText("SiteTitle");
   var splasher='\n<style type="text/css">#contentWrapper {display:none;}</style><div id="splashscreen" style="border: 1px solid #DDD; display:block; text-align:center; width:500px; margin:100px auto; padding:30px; color:white; font-size:24px; background-color:#CCC;">mju:zik<span style="font-size:0.8em; margin-left:20px;">a tiddlywiki based music collection</span><br style="margin-bottom:20px"><span style="font-size: 12px;color:#A66;">requires javascript</span></div>';
   if (! store.tiddlerExists("MarkupPreHead"))
       {var myTiddler = store.createTiddler("MarkupPreHead");}
   else
      {var myTiddler = store.getTiddler("MarkupPreHead");}
      myTiddler.set(myTiddler.title,oldText+splasher,config.options.txtUserName,null,null);
      store.setDirty(true);
      var splashScreenInstall = true;
}
//}}}
/*{{{*/

#hoverMenu{z-index:10;}

.vid {text-align:center;float:left;margin-right:10px;margin-top:10px;font-weight:bold;color:[[ColorPalette::SecondaryLight]];}
.vid a, .vidMore a {color:[[ColorPalette::SecondaryMid]];padding:1px 3px;}
.vid a:hover, .vidMore a hover {background-color:[[ColorPalette::TertiaryPale]];}
.vidMore {display:block;clear:both;color:[[ColorPalette::TertiaryDark]];font-size:1.6em;margin-top:1em;}

.vidList, .accu, .recently {display:block;width:100%;margin-top:10px;background:[[ColorPalette::SecondaryPale]];border:1px solid [[ColorPalette::TertiaryLight]];float:left;}
.vidList:hover, .accu:hover, .recently:hover {background:none;border:1px solid [[ColorPalette::TertiaryPale]];}
.vidList .sliderPanel, .accu .sliderPanel {margin:7px 0px 0px 7px;}
.vidList .button, .accu .button, .recently .tiddlyLinkExisting {display:block;width:99%;border:none;padding:0.5em 0.5% 0.5em 0.5%;font-size:1.3em;color:[[ColorPalette::PrimaryMid]];font-weight:normal;margin:0;}
.vidList .button:hover, .accu .button:hover, .recently .tiddlyLinkExisting:hover {background-color:[[ColorPalette::TertiaryPale]];color:[[ColorPalette::PrimaryDark]];}
.rightLink .tiddlyLinkExisting, .rightLink .tiddlyLinkExisting {padding:8px 15px;margin:-32px 0px 0px 0px;float:right;z-index:2;}

table.thumbs, table.thumbs thead, table.thumbs tr, table.thumbs td {border:none;}
table.thumbs img {margin:5px;} 
table.linkTable .tiddlyLinkExisting, table.linkTable .externalLink {display:block;width:92%;text-decoration:none;padding:3px 4%;}
table.linkTable .externalLink {}
table.linkTable .quickopentag .tiddlyLinkExisting, table.linkTable .quickopentag .externalLink {display:inline;}
table.linkTable td {padding:0;}

.play .tiddlyLinkExisting{padding:5px 50px;}
.fat .tiddlyLinkExisting, .fat .externalLink {color:[[ColorPalette::SecondaryMid]];font-size:1.3em;padding:2px;font-weight:bold;text-decoration:none;}
.fat .tiddlyLinkExisting:hover, .fat .externalLink:hover {color:[[ColorPalette::Background]];background-color:[[ColorPalette::SecondaryLight]];font-size:1.3em;}
.embedr {width:425px;height:520px;float:left;margin-right:10px;}
.selectPalette select{width:100%;border:none;}

.viewer .txtAccuRadio .tabset .tab {background:[[ColorPalette::SecondaryPale]] !important;color:[[ColorPalette::PrimaryMid]] !important;border:1px solid [[ColorPalette::TertiaryLight]] !important;}
.viewer .txtAccuRadio .tabset .tab:hover {background-color:[[ColorPalette::TertiaryPale]] !important;color:[[ColorPalette::PrimaryDark]] !important;}
.viewer .txtAccuRadio .tabset .tabSelected {border:1px solid [[ColorPalette::PrimaryPale]] !important;background:[[ColorPalette::SecondaryPale]] !important;color:[[ColorPalette::PrimaryMid]] !important;font-weight:bold !important;)

iframe, object{z-index:0;position:relative;}
/*}}}*/
<<tiddler GetSub with:vid>>
<<tiddler Video with: 4-IyAPn1mPk>>
<<tiddler Video with: d4tkiGvV_ek>>
<<tiddler Video with: FoQzWb_f1oA>>
<<tabs txtMoreTab "Miss" "Missing tiddlers" TabMoreMissing "Orph" "Orphaned tiddlers" TabMoreOrphans "Shad" "Shadowed tiddlers" TabMoreShadowed "Plug" "Plugins" systemConfig>>
<<timeline "modified" "15">>
[[see complete list »|Timeline]]
/***
|Name:|TagglyTaggingPlugin|
|Description:|tagglyTagging macro is a replacement for the builtin tagging macro in your ViewTemplate|
|Version:|3.3.1 ($Rev: 9828 $)|
|Date:|$Date: 2009-06-03 21:38:41 +1000 (Wed, 03 Jun 2009) $|
|Source:|http://mptw.tiddlyspot.com/#TagglyTaggingPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!Notes
See http://mptw.tiddlyspot.com/#TagglyTagging
***/
//{{{

merge(String.prototype,{

	parseTagExpr: function(debug) {

		if (this.trim() == "")
			return "(true)";

		var anyLogicOp = /(!|&&|\|\||\(|\))/g;
		var singleLogicOp = /^(!|&&|\|\||\(|\))$/;

		var spaced = this.
			// because square brackets in templates are no good
			// this means you can use [(With Spaces)] instead of [[With Spaces]]
			replace(/\[\(/g," [[").
			replace(/\)\]/g,"]] "). 
			// space things out so we can use readBracketedList. tricky eh?
			replace(anyLogicOp," $1 ");

		var expr = "";

		var tokens = spaced.readBracketedList(false); // false means don't uniq the list. nice one JR!

		for (var i=0;i<tokens.length;i++)
			if (tokens[i].match(singleLogicOp))
				expr += tokens[i];
			else
				expr += "tiddler.tags.contains('%0')".format([tokens[i].replace(/'/,"\\'")]); // fix single quote bug. still have round bracket bug i think

		if (debug)
			alert(expr);

		return '('+expr+')';
	}

});

merge(TiddlyWiki.prototype,{
	getTiddlersByTagExpr: function(tagExpr,sortField) {

		var result = [];

		var expr = tagExpr.parseTagExpr();

		store.forEachTiddler(function(title,tiddler) {
			if (eval(expr))
				result.push(tiddler);
		});

		if(!sortField)
			sortField = "title";

		result.sort(function(a,b) {return a[sortField] < b[sortField] ? -1 : (a[sortField] == b[sortField] ? 0 : +1);});
		
		return result;
	}
});

config.taggly = {

	// for translations
	lingo: {
		labels: {
			asc:        "\u2191", // down arrow
			desc:       "\u2193", // up arrow
			title:      "title",
			modified:   "modified",
			created:    "created",
			show:       "+",
			hide:       "-",
			normal:     "normal",
			group:      "group",
			commas:     "commas",
			sitemap:    "sitemap",
			numCols:    "cols\u00b1", // plus minus sign
			label:      "Tagged as '%0':",
			exprLabel:  "Matching tag expression '%0':",
			excerpts:   "excerpts",
			descr:      "descr",
			slices:     "slices",
			contents:   "contents",
			sliders:    "sliders",
			noexcerpts: "title only",
			noneFound:  "(none)"
		},

		tooltips: {
			title:      "Click to sort by title",
			modified:   "Click to sort by modified date",
			created:    "Click to sort by created date",
			show:       "Click to show tagging list",
			hide:       "Click to hide tagging list",
			normal:     "Click to show a normal ungrouped list",
			group:      "Click to show list grouped by tag",
			sitemap:    "Click to show a sitemap style list",
			commas:     "Click to show a comma separated list",
			numCols:    "Click to change number of columns",
			excerpts:   "Click to show excerpts",
			descr:      "Click to show the description slice",
			slices:     "Click to show all slices",
			contents:   "Click to show entire tiddler contents",
			sliders:    "Click to show tiddler contents in sliders",
			noexcerpts: "Click to show entire title only"
		},

		tooDeepMessage: "* //sitemap too deep...//"
	},

	config: {
		showTaggingCounts: true,
		listOpts: {
			// the first one will be the default
			sortBy:     ["title","modified","created"],
			sortOrder:  ["asc","desc"],
			hideState:  ["show","hide"],
			listMode:   ["normal","group","sitemap","commas"],
			numCols:    ["1","2","3","4","5","6"],
			excerpts:   ["noexcerpts","excerpts","descr","slices","sliders","contents"]
		},
		valuePrefix: "taggly.",
		excludeTags: ["excludeTagging"],
		excerptSize: 50,
		excerptMarker: "/%"+"%/",
		siteMapDepthLimit: 25
	},

	getTagglyOpt: function(title,opt) {
		var val = store.getValue(title,this.config.valuePrefix+opt);
		return val ? val : this.config.listOpts[opt][0];
	},

	setTagglyOpt: function(title,opt,value) {
		// create it silently if it doesn't exist
		if (!store.tiddlerExists(title)) {
			store.saveTiddler(title,title,config.views.editor.defaultText.format([title]),config.options.txtUserName,new Date(),"");

			// <<tagglyTagging expr:"...">> creates a tiddler to store its display settings
			// Make those tiddlers less noticeable by tagging as excludeSearch and excludeLists
			// Because we don't want to hide real tags, check that they aren't actually tags before doing so
			// Also tag them as tagglyExpression for manageability
			// (contributed by RA)
			if (!store.getTaggedTiddlers(title).length) {
				store.setTiddlerTag(title,true,"excludeSearch");
				store.setTiddlerTag(title,true,"excludeLists");
				store.setTiddlerTag(title,true,"tagglyExpression");
			}
		}

		// if value is default then remove it to save space
		return store.setValue(title, this.config.valuePrefix+opt, value == this.config.listOpts[opt][0] ? null : value);
	},

	getNextValue: function(title,opt) {
		var current = this.getTagglyOpt(title,opt);
		var pos = this.config.listOpts[opt].indexOf(current);
		// supposed to automagically don't let cols cycle up past the number of items
		// currently broken in some situations, eg when using an expression
		// lets fix it later when we rewrite for jquery
		// the columns thing should be jquery table manipulation probably
		var limit = (opt == "numCols" ? store.getTaggedTiddlers(title).length : this.config.listOpts[opt].length);
		var newPos = (pos + 1) % limit;
		return this.config.listOpts[opt][newPos];
	},

	toggleTagglyOpt: function(title,opt) {
		var newVal = this.getNextValue(title,opt);
		this.setTagglyOpt(title,opt,newVal);
	}, 

	createListControl: function(place,title,type) {
		var lingo = config.taggly.lingo;
		var label;
		var tooltip;
		var onclick;

		if ((type == "title" || type == "modified" || type == "created")) {
			// "special" controls. a little tricky. derived from sortOrder and sortBy
			label = lingo.labels[type];
			tooltip = lingo.tooltips[type];

			if (this.getTagglyOpt(title,"sortBy") == type) {
				label += lingo.labels[this.getTagglyOpt(title,"sortOrder")];
				onclick = function() {
					config.taggly.toggleTagglyOpt(title,"sortOrder");
					return false;
				}
			}
			else {
				onclick = function() {
					config.taggly.setTagglyOpt(title,"sortBy",type);
					config.taggly.setTagglyOpt(title,"sortOrder",config.taggly.config.listOpts.sortOrder[0]);
					return false;
				}
			}
		}
		else {
			// "regular" controls, nice and simple
			label = lingo.labels[type == "numCols" ? type : this.getNextValue(title,type)];
			tooltip = lingo.tooltips[type == "numCols" ? type : this.getNextValue(title,type)];
			onclick = function() {
				config.taggly.toggleTagglyOpt(title,type);
				return false;
			}
		}

		// hide button because commas don't have columns
		if (!(this.getTagglyOpt(title,"listMode") == "commas" && type == "numCols"))
			createTiddlyButton(place,label,tooltip,onclick,type == "hideState" ? "hidebutton" : "button");
	},

	makeColumns: function(orig,numCols) {
		var listSize = orig.length;
		var colSize = listSize/numCols;
		var remainder = listSize % numCols;

		var upperColsize = colSize;
		var lowerColsize = colSize;

		if (colSize != Math.floor(colSize)) {
			// it's not an exact fit so..
			upperColsize = Math.floor(colSize) + 1;
			lowerColsize = Math.floor(colSize);
		}

		var output = [];
		var c = 0;
		for (var j=0;j<numCols;j++) {
			var singleCol = [];
			var thisSize = j < remainder ? upperColsize : lowerColsize;
			for (var i=0;i<thisSize;i++) 
				singleCol.push(orig[c++]);
			output.push(singleCol);
		}

		return output;
	},

	drawTable: function(place,columns,theClass) {
		var newTable = createTiddlyElement(place,"table",null,theClass);
		var newTbody = createTiddlyElement(newTable,"tbody");
		var newTr = createTiddlyElement(newTbody,"tr");
		for (var j=0;j<columns.length;j++) {
			var colOutput = "";
			for (var i=0;i<columns[j].length;i++) 
				colOutput += columns[j][i];
			var newTd = createTiddlyElement(newTr,"td",null,"tagglyTagging"); // todo should not need this class
			wikify(colOutput,newTd);
		}
		return newTable;
	},

	createTagglyList: function(place,title,isTagExpr) {
		switch(this.getTagglyOpt(title,"listMode")) {
			case "group":  return this.createTagglyListGrouped(place,title,isTagExpr); break;
			case "normal": return this.createTagglyListNormal(place,title,false,isTagExpr); break;
			case "commas": return this.createTagglyListNormal(place,title,true,isTagExpr); break;
			case "sitemap":return this.createTagglyListSiteMap(place,title,isTagExpr); break;
		}
	},

	getTaggingCount: function(title,isTagExpr) {
		// thanks to Doug Edmunds
		if (this.config.showTaggingCounts) {
			var tagCount = config.taggly.getTiddlers(title,'title',isTagExpr).length;
			if (tagCount > 0)
				return " ("+tagCount+")";
		}
		return "";
	},

	getTiddlers: function(titleOrExpr,sortBy,isTagExpr) {
		return isTagExpr ? store.getTiddlersByTagExpr(titleOrExpr,sortBy) : store.getTaggedTiddlers(titleOrExpr,sortBy);
	},

	getExcerpt: function(inTiddlerTitle,title,indent) {
		if (!indent)
			indent = 1;

		var displayMode = this.getTagglyOpt(inTiddlerTitle,"excerpts");
		var t = store.getTiddler(title);

		if (t && displayMode == "excerpts") {
			var text = t.text.replace(/\n/," ");
			var marker = text.indexOf(this.config.excerptMarker);
			if (marker != -1) {
				return " {{excerpt{<nowiki>" + text.substr(0,marker) + "</nowiki>}}}";
			}
			else if (text.length < this.config.excerptSize) {
				return " {{excerpt{<nowiki>" + t.text + "</nowiki>}}}";
			}
			else {
				return " {{excerpt{<nowiki>" + t.text.substr(0,this.config.excerptSize) + "..." + "</nowiki>}}}";
			}
		}
		else if (t && displayMode == "contents") {
			return "\n{{contents indent"+indent+"{\n" + t.text + "\n}}}";
		}
		else if (t && displayMode == "sliders") {
			return '<<slider "" "'+title + '" "slide»" "click to show">>';
		}
		else if (t && displayMode == "descr") {
			var descr = store.getTiddlerSlice(title,'Description');
			return descr ? " {{excerpt{" + descr  + "}}}" : "";
		}
		else if (t && displayMode == "slices") {
			var result = "";
			var slices = store.calcAllSlices(title);
			for (var s in slices)
				result += "|%0|<nowiki>%1</nowiki>|\n".format([s,slices[s]]);
			return result ? "\n{{excerpt excerptIndent{\n" + result  + "}}}" : "";
		}
		return "";
	},

	notHidden: function(t,inTiddler) {
		if (typeof t == "string") 
			t = store.getTiddler(t);
		return (!t || !t.tags.containsAny(this.config.excludeTags) ||
				(inTiddler && this.config.excludeTags.contains(inTiddler)));
	},

	// this is for normal and commas mode
	createTagglyListNormal: function(place,title,useCommas,isTagExpr) {

		var list = config.taggly.getTiddlers(title,this.getTagglyOpt(title,"sortBy"),isTagExpr);

		if (this.getTagglyOpt(title,"sortOrder") == "desc")
			list = list.reverse();

		var output = [];
		var first = true;
		for (var i=0;i<list.length;i++) {
			if (this.notHidden(list[i],title)) {
				var countString = this.getTaggingCount(list[i].title);
				var excerpt = this.getExcerpt(title,list[i].title);
				if (useCommas)
					output.push((first ? "" : ", ") + "[[" + list[i].title + "]]" + countString + excerpt);
				else
					output.push("*[[" + list[i].title + "]]" + countString + excerpt + "\n");

				first = false;
			}
		}

		return this.drawTable(place,
			this.makeColumns(output,useCommas ? 1 : parseInt(this.getTagglyOpt(title,"numCols"))),
			useCommas ? "commas" : "normal");
	},

	// this is for the "grouped" mode
	createTagglyListGrouped: function(place,title,isTagExpr) {
		var sortBy = this.getTagglyOpt(title,"sortBy");
		var sortOrder = this.getTagglyOpt(title,"sortOrder");

		var list = config.taggly.getTiddlers(title,sortBy,isTagExpr);

		if (sortOrder == "desc")
			list = list.reverse();

		var leftOvers = []
		for (var i=0;i<list.length;i++)
			leftOvers.push(list[i].title);

		var allTagsHolder = {};
		for (var i=0;i<list.length;i++) {
			for (var j=0;j<list[i].tags.length;j++) {

				if (list[i].tags[j] != title) { // not this tiddler

					if (this.notHidden(list[i].tags[j],title)) {

						if (!allTagsHolder[list[i].tags[j]])
							allTagsHolder[list[i].tags[j]] = "";

						if (this.notHidden(list[i],title)) {
							allTagsHolder[list[i].tags[j]] += "**[["+list[i].title+"]]"
										+ this.getTaggingCount(list[i].title) + this.getExcerpt(title,list[i].title) + "\n";

							leftOvers.setItem(list[i].title,-1); // remove from leftovers. at the end it will contain the leftovers

						}
					}
				}
			}
		}

		var allTags = [];
		for (var t in allTagsHolder)
			allTags.push(t);

		var sortHelper = function(a,b) {
			if (a == b) return 0;
			if (a < b) return -1;
			return 1;
		};

		allTags.sort(function(a,b) {
			var tidA = store.getTiddler(a);
			var tidB = store.getTiddler(b);
			if (sortBy == "title") return sortHelper(a,b);
			else if (!tidA && !tidB) return 0;
			else if (!tidA) return -1;
			else if (!tidB) return +1;
			else return sortHelper(tidA[sortBy],tidB[sortBy]);
		});

		var leftOverOutput = "";
		for (var i=0;i<leftOvers.length;i++)
			if (this.notHidden(leftOvers[i],title))
				leftOverOutput += "*[["+leftOvers[i]+"]]" + this.getTaggingCount(leftOvers[i]) + this.getExcerpt(title,leftOvers[i]) + "\n";

		var output = [];

		if (sortOrder == "desc")
			allTags.reverse();
		else if (leftOverOutput != "")
			// leftovers first...
			output.push(leftOverOutput);

		for (var i=0;i<allTags.length;i++)
			if (allTagsHolder[allTags[i]] != "")
				output.push("*[["+allTags[i]+"]]" + this.getTaggingCount(allTags[i]) + this.getExcerpt(title,allTags[i]) + "\n" + allTagsHolder[allTags[i]]);

		if (sortOrder == "desc" && leftOverOutput != "")
			// leftovers last...
			output.push(leftOverOutput);

		return this.drawTable(place,
				this.makeColumns(output,parseInt(this.getTagglyOpt(title,"numCols"))),
				"grouped");

	},

	// used to build site map
	treeTraverse: function(title,depth,sortBy,sortOrder,isTagExpr) {

		var list = config.taggly.getTiddlers(title,sortBy,isTagExpr);

		if (sortOrder == "desc")
			list.reverse();

		var indent = "";
		for (var j=0;j<depth;j++)
			indent += "*"

		var childOutput = "";

		if (depth > this.config.siteMapDepthLimit)
			childOutput += indent + this.lingo.tooDeepMessage;
		else
			for (var i=0;i<list.length;i++)
				if (list[i].title != title)
					if (this.notHidden(list[i].title,this.config.inTiddler))
						childOutput += this.treeTraverse(list[i].title,depth+1,sortBy,sortOrder,false);

		if (depth == 0)
			return childOutput;
		else
			return indent + "[["+title+"]]" + this.getTaggingCount(title) + this.getExcerpt(this.config.inTiddler,title,depth) + "\n" + childOutput;
	},

	// this if for the site map mode
	createTagglyListSiteMap: function(place,title,isTagExpr) {
		this.config.inTiddler = title; // nasty. should pass it in to traverse probably
		var output = this.treeTraverse(title,0,this.getTagglyOpt(title,"sortBy"),this.getTagglyOpt(title,"sortOrder"),isTagExpr);
		return this.drawTable(place,
				this.makeColumns(output.split(/(?=^\*\[)/m),parseInt(this.getTagglyOpt(title,"numCols"))), // regexp magic
				"sitemap"
				);
	},

	macros: {
		tagglyTagging: {
			handler: function (place,macroName,params,wikifier,paramString,tiddler) {
				var parsedParams = paramString.parseParams("tag",null,true);
				var refreshContainer = createTiddlyElement(place,"div");

				// do some refresh magic to make it keep the list fresh - thanks Saq
				refreshContainer.setAttribute("refresh","macro");
				refreshContainer.setAttribute("macroName",macroName);

				var tag = getParam(parsedParams,"tag");
				var expr = getParam(parsedParams,"expr");

				if (expr) {
					refreshContainer.setAttribute("isTagExpr","true");
					refreshContainer.setAttribute("title",expr);
					refreshContainer.setAttribute("showEmpty","true");
				}
				else {
					refreshContainer.setAttribute("isTagExpr","false");
					if (tag) {
        				refreshContainer.setAttribute("title",tag);
						refreshContainer.setAttribute("showEmpty","true");
					}
					else {
        				refreshContainer.setAttribute("title",tiddler.title);
						refreshContainer.setAttribute("showEmpty","false");
					}
				}
				this.refresh(refreshContainer);
			},

			refresh: function(place) {
				var title = place.getAttribute("title");
				var isTagExpr = place.getAttribute("isTagExpr") == "true";
				var showEmpty = place.getAttribute("showEmpty") == "true";
				removeChildren(place);
				addClass(place,"tagglyTagging");
				var countFound = config.taggly.getTiddlers(title,'title',isTagExpr).length
				if (countFound > 0 || showEmpty) {
					var lingo = config.taggly.lingo;
					config.taggly.createListControl(place,title,"hideState");
					if (config.taggly.getTagglyOpt(title,"hideState") == "show") {
						createTiddlyElement(place,"span",null,"tagglyLabel",
								isTagExpr ? lingo.labels.exprLabel.format([title]) : lingo.labels.label.format([title]));
						config.taggly.createListControl(place,title,"title");
						config.taggly.createListControl(place,title,"modified");
						config.taggly.createListControl(place,title,"created");
						config.taggly.createListControl(place,title,"listMode");
						config.taggly.createListControl(place,title,"excerpts");
						config.taggly.createListControl(place,title,"numCols");
						config.taggly.createTagglyList(place,title,isTagExpr);
						if (countFound == 0 && showEmpty)
							createTiddlyElement(place,"div",null,"tagglyNoneFound",lingo.labels.noneFound);
					}
				}
			}
		}
	},

	// todo fix these up a bit
	styles: [
"/*{{{*/",
"/* created by TagglyTaggingPlugin */",
".tagglyTagging { padding-top:0.5em; }",
".tagglyTagging li.listTitle { display:none; }",
".tagglyTagging ul {",
"	margin-top:0px; padding-top:0.5em; padding-left:2em;",
"	margin-bottom:0px; padding-bottom:0px;",
"}",
".tagglyTagging { vertical-align: top; margin:0px; padding:0px; }",
".tagglyTagging table { margin:0px; padding:0px; }",
".tagglyTagging .button { visibility:hidden; margin-left:3px; margin-right:3px; }",
".tagglyTagging .button, .tagglyTagging .hidebutton {",
"	color:[[ColorPalette::TertiaryLight]]; font-size:90%;",
"	border:0px; padding-left:0.3em;padding-right:0.3em;",
"}",
".tagglyTagging .button:hover, .hidebutton:hover, ",
".tagglyTagging .button:active, .hidebutton:active  {",
"	border:0px; background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]];",
"}",
".selected .tagglyTagging .button { visibility:visible; }",
".tagglyTagging .hidebutton { color:[[ColorPalette::Background]]; }",
".selected .tagglyTagging .hidebutton { color:[[ColorPalette::TertiaryLight]] }",
".tagglyLabel { color:[[ColorPalette::TertiaryMid]]; font-size:90%; }",
".tagglyTagging ul {padding-top:0px; padding-bottom:0.5em; margin-left:1em; }",
".tagglyTagging ul ul {list-style-type:disc; margin-left:-1em;}",
".tagglyTagging ul ul li {margin-left:0.5em; }",
".editLabel { font-size:90%; padding-top:0.5em; }",
".tagglyTagging .commas { padding-left:1.8em; }",
"/* not technically tagglytagging but will put them here anyway */",
".tagglyTagged {margin-bottom:5px;}",
".tagglyTagged li.listTitle { display:none; }",
".tagglyTagged li { display: inline; font-size:90%; }",
".tagglyTagged ul { margin:0px; padding:0px; }",
".excerpt { color:[[ColorPalette::TertiaryDark]]; }",
".excerptIndent { margin-left:4em; }",
"div.tagglyTagging table,",
"div.tagglyTagging table tr,",
"td.tagglyTagging",
" {border-style:none!important; }",
".tagglyTagging .contents { border-bottom:2px solid [[ColorPalette::TertiaryPale]]; padding:0 1em 1em 0.5em;",
"  margin-bottom:0.5em; }",
".tagglyTagging .indent1  { margin-left:3em;  }",
".tagglyTagging .indent2  { margin-left:4em;  }",
".tagglyTagging .indent3  { margin-left:5em;  }",
".tagglyTagging .indent4  { margin-left:6em;  }",
".tagglyTagging .indent5  { margin-left:7em;  }",
".tagglyTagging .indent6  { margin-left:8em;  }",
".tagglyTagging .indent7  { margin-left:9em;  }",
".tagglyTagging .indent8  { margin-left:10em; }",
".tagglyTagging .indent9  { margin-left:11em; }",
".tagglyTagging .indent10 { margin-left:12em; }",
".tagglyNoneFound { margin-left:2em; color:[[ColorPalette::TertiaryMid]]; font-size:90%; font-style:italic; }",
"/*}}}*/",
		""].join("\n"),

	init: function() {
		merge(config.macros,this.macros);
		config.shadowTiddlers["TagglyTaggingStyles"] = this.styles;
		store.addNotification("TagglyTaggingStyles",refreshStyles);
	}
};

config.taggly.init();

//}}}
/%
!TAPES

|sortable widelinks|k
| !Category | !Artist | !Title | !Play |h
|Pop|Phoenix|Listomania| [[3:21|http://www.tape.tv/musikvideos/Phoenix/Lisztomania]] |
|Pop|Imogen Heap|Last Train Home| [[3:33|http://www.tape.tv/musikvideos/Imogen-Heap/Last-Train-Home]] |
|Alternative|Alice In Chains|No Excuses| [[4:11|http://www.tape.tv/vid/2462]] |
|Alternative|Pearl Jam|Even Flow| [[5:27|http://www.tape.tv/vid/5651]] |
|Alternative|Foo Fighters|Walking After You| [[4:02|http://www.tape.tv/vid/4476]] |
|Alternative|Serj Tankian|Empty Walls| [[3:53|http://www.tape.tv/vid/994]] |
|Rock|Radiohead|Creep| [[3:55|http://www.tape.tv/vid/10831]] |
|Rock|Marcy Playground|Sex and Candy| [[2:57|http://www.tape.tv/vid/39991]] |
|Rock|Spin Doctors|Two Princes| [[4:19|http://www.tape.tv/vid/5747]] |
|Folk|Tracy Chapman|Telling Stories| [[3:40|http://www.tape.tv/vid/52942]] |
|Indie|Björk|Venus As A Boy| [[4:42|http://www.tape.tv/vid/23001]] |
|Indie|Band Of Horses|No One's Gonna Love You| [[3:39|http://www.tape.tv/vid/6105]] |
|~HipHop|Clueso|Keinen Zentimeter| [[3:24|http://www.tape.tv/vid/1771]] |
|~HipHop|Clueso|Mitnehm| [[3:30|http://www.tape.tv/vid/1785]] |
|~HipHop|Clueso|Wart Mal| [[3:30|http://www.tape.tv/vid/1699]] |
|~HipHop|Marteria|Endboss| [[3:45|http://www.tape.tv/vid/104957]] |


!CODE
%/<script>
(function($){
var btn,lst,
	out=createTiddlyElement(place,'div',null,'tapetv'),
	key=window.event?'keydown':'keypress';
$('<select/>').appendTo(out).attr({size:10}
).bind(key,function(e){
	var back,song='',
		e=e||window.event,
		key=e.keyCode,
		s=$(this).next();
	if(key==40&&this.selectedIndex==this.options.length-1){
		this.selectedIndex=0;
		return true;
	}
	switch(key){case 13: case 27: case 38: break; default: return true;}
	if(key==38)if(this.selectedIndex<2)back=true; else return true;
	if (key==13&&this.value.length){
		song=this.options[this.selectedIndex].innerHTML;
		s.val(song);
		s.next().attr('play',this.value);
	}
	this.style.display='none';
	if(key==27||back)s.focus();
	else{s.next().attr({
		what:this.value,
		song:song,
		play:'true'
	}).click()}
	return true;
});

$('<input/>').appendTo(out).bind(key,function(e){
	var all,n=0,o,s,v,vi,vs,
		e=e||window.event,
		key=e.keyCode,
		sel=this.previousSibling,
		os=sel.options,
		show=key==38||key==40||key==13;
	if(key==27){this.value='';return false;}
	if (key>0&&key<48) switch(key){
		// backspace=8, enter=13, space=32, up=38, down=40, delete=46
		case 8: case 13: case 32: case 38: case 40: case 46: break; default: return true;
	}
	all=!this.value.length&&show;
	if(!show&&this.value.length<2)return true;
	while(os.length>0)os[0]=null;
	vs=store.getTiddlerText(tiddler.title+'##TAPES').split('\n');
	for(v=3;v<vs.length;v++){
		vi=vs[v].split('|');
		if(vi.length<2)continue;
		s=[vi[1],vi[2],vi[3]].join(' ');
		if(all||s.toLowerCase().indexOf(this.value.toLowerCase())>=0){
			n++;
			if(n==1){
				o=new Option("Select a video...",null,false,false);
				os[0]=o;
				o.style.color='#339';
			}
			o=document.createElement ('option');
			lnk=vi[vi.length-2];
			o.value = lnk.substr(0,lnk.length-3);
			o.appendChild(document.createTextNode(vi[2]+' - '+vi[3]));
			sel.appendChild(o);
		}
	}
	if(n==0)os[0]=new Option("Nothing found...",null,false,false);
	$(sel).css({'display':(n>0?'block':'none')});
	if (show){
		sel.focus();
		sel.selectedIndex=key==38?sel.length-1:1;
	}
	return true;
});

$('<a href="#" class="play">'+'\u25B6'+'</a>').appendTo(out
).attr('title','Click to play selection...'
).click(function(e){
	var lnk,
		e=e?e:window.event,
		btn=$(this),
		p=btn.parent(),
		play=e.ctrlKey||btn.attr('play')=='true'||btn[0].innerHTML=='\u25B6',
		what=btn.attr('what'),
		song=btn.attr('song'),
		plr=$('.player',p);
	if(!what||what==''){
		alert('Please select a song first');
		return false;
	}
	btn.html(play?'\u25A0':'\u25B6');
	btn.attr({
		'play':null,
		'title':(play?'Click to stop or CTRL+CLICK to play next...':'Click to play selection...')
	});
	if(play){
		plr.empty();
		wikify('<<tiddler '+tiddler.title+'##PLAYER with: "'+what+'" "'+song+'">>',plr[0]);
		plr.fadeIn();
	}
	else {
		plr.fadeOut(400,function(e){$(this).empty();});
	}
});

btn=$('<a href="#">Playlist</a>').appendTo(out
).attr({
	'title':'Click to toggle playlist...',
	'show':'true'
});

wikify("{{playlist{}}}{{player{}}}",out);
lst=$('.playlist',out).css('display','none');
wikify(store.getTiddlerText(tiddler.title+"##TAPES"),lst[0]);
$('.externalLink',lst).click(function(e){
	var el=$(this),
		e=e||window.event,
		t=$('td',el.parent().parent()),
		song=t.eq(1).html()+' - '+t.eq(2).html();
	$('.play',el.closest('.tiddler')
	).attr({
		title:'Click to play...',
		what:el.attr('href'),
		song:song,
		play:'true'
	}).click();
	return false;
});

btn.click(function(e){
	var lst,btn=$(this),
		show=btn.attr('show')=='true';
	lst=$('.playlist',btn.parent()).css({'display':(show?'block':'none')});
	if(show){
		lst.css('display','block');
		if(config.tableSorting)config.tableSorting.refresh(lst.parent()[0]);
	}else lst.css('display','none');
	btn.attr('show',(!show).toString());
});

setStylesheet('/*{{{*/\n'+
	'.tapetv{width:780px;min-height:250px;background:black;border:10px solid black;position:relative;z-index:0;font-size:0.8em;'+
	'-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;'+
	'-moz-box-shadow:3px 3px 4px #000;-webkit-box-shadow:3px 3px 4px #000;box-shadow:3px 3px 4px #000;}\n'+
	'.tapetv select {display:none;float:left;margin-top:1.5em;margin-left:1em;'+
	'min-width:200px;z-index:10;background:white;position:absolute;border:1px solid #333}\n'+
	'.tapetv input {float:left;margin-left:1em;width:200px;border:1px solid #333;}\n'+
	'.tapetv a {margin:0 0.2em;padding:0 0.2em;color:#CCC;cursor:pointer;font-size:1.8em;font-weight:bold;border-color:#666;text-decoration:none;}\n'+
	'.tapetv td, .tapetv tr, .tapetv th, .tapetv table, .tapetv thead,.tapetv tbody a {font-size:1em;border:1px solid black !important;color:#DDD;}\n'+
	'.tapetv tbody a {border:0 !important;}'+
	'.tapetv tr {min-width:150px;}\n'+
	'.tapetv th, .tapetv th span{background:#333;color:#EEE;padding:1px 3px;}\n'+
	'.tapetv .sortable .sortedCol {background:#161616;color:#CCC;}\n'+
	'.tapetv .playlist{margin:1em 0 0 0;padding:0 1em;clear:left;max-height:250px;overflow:auto;}\n'+
	'/*}}}*/',
	'StyleSheetTapeTv'
);

})(jQuery);
</script>/%
!PLAYER
<html><div style="width:780px;height:480px;overflow:hidden;margin:10px 0 0 0;"><iframe style="position:relative;top:-140px;left:-250px; width:1280px;height:1200px;z-index:-1;" src="$1" scrolling=no></iframe></div><div style="clear:both"></div></html>[[Link to "$2"...|$1]]/%
!INFO
[[Tape.tv|http://www.tape.tv]] ...music tv going mad
!END%/
<<tiddler AccuRadio with: AccuRadioList>>
/***
|''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]]|
!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
!Usage
{{{<<tiddlerList parameter1:"value1" parameter2:"value2" ...>>}}}
!Examples ([[TiddlerListMacroExamples]])
List all tiddlers tagged with "Plugin"
{{{<<tiddlerList tags:Plugin>>}}}
List newest 3 plugins which are not templates:
{{{<<tiddlerList tags:"Plugin,-Template" top:3 order:"-created">>}}}
List all tiddlers containing "Jack" in their title or text (last modified first):
{{{<<tiddlerList search:"Jack" order:"-modified">>}}}
List all tiddlers starting with "T" in a table:
{{{<<tiddlerList title:"^T" format:"table" header:"Tiddlers beginning with T" footer:"%count items listed">>}}}
Group tiddlers by first letter
{{{<<tiddlerList top:"15" group:"tiddler.title.substr(0,1)" groupTemplate:"''%group''">>}}}
Show a list of all tiddlers with creation date (overrides default item template)
{{{<<tiddlerList itemTemplate:"* %link (%created)\n">>}}}
Show all tiddlers that have the host's tiddler title in their tag list
{{{<<tiddlerList filter:"tiddler.tags.contains(currentTiddler.title)">>}}}
!Parameters
|!Parameter|!Type|!Meaning|!Example|
|top|Integer|Number of tiddlers to display|"10"|
|tags|String|List tiddlers with matching tags (AND Logic). Leading - to exclude.|"~ToDo,Urgent,-Done"|
|title|~RegEx|List tiddlers with matching title|"^[Pp]"|
|text|~RegEx|List tiddlers with matching text|"Searchtext"|
|search|~RegEx|List tiddlers with matching title OR text|"Problem"|
|filter*|~JavaScript|List tiddlers according to boolean expression)|"tiddler.title.length<4 && tiddler.tags.contains('Idea')"|
|format|String (fixed list)|HTML formatting of list. list (ul, default), nlist (ol), span, stack (div), csv, table.|"list"|
|order|String|Sort order of tiddlers. - is descending, + ascending|"-created"|
|group*|~JavaScript|Grouping field|tiddler.title.substr(0,1)|
|customParameter*|~JavaScript|Custom parameter to be evalled for use in the itemTemplate|tiddler.text.match(/Version: (.*)/)[1]|
|header|String|Top caption|"Tiddlers beginning with T"|
|footer|String|Bottom caption|"End of list"|
|itemTemplate|~WikiTemplate|~WikiText with %placeholders|"%link\n%abstract\n%modified"|
|groupTemplate|~WikiTemplate|~WikiText with %placeholders for the start of each group|"!!%group"|
|groupFooterTemplate|~WikiTemplate|~WikiText with %placeholders for the end of each group|"----\n"|
|dateFormat|String|Date formatting string when displaying dates|~YYYY-MM-DD|
|separator|String|Define a string or character to be inserted between items listed|" "|
|debug|Boolean|Set to 1 or true for debug mode where only wikitext will be output|debug:1|
{{{*}}} Parameter will be evalled (do not pass with {{{{{ }} }}} unless you want it evalled twice!)
!Template Placeholders
Placeholder values for itemTemplate parameter
|!Placeholder|!Field|
|%item|List item number|
|%link|Link to Tiddler {{{[[MyTiddler]]}}}|
|%title|Tiddler Name {{{MyTiddler}}}|
|%nolink|Unlinked Tiddler Title {{{~MyTiddler}}}|
|%abstract|First 300 chars of tiddler text|
|%text|All tiddler text|
|%tags|Tags separated by space|
|%created|Creation date|
|%modified|Modified date|
|%modifier|Last modifier|
|%group|Name of group field|
|%custom|The result of your evalled customParameter|
|%count|Number of items listed (footer only)|
!Variables
{{{{{currentTiddler}} }}}refers to the current (host) tiddler in function scope (i.e. within the filter or group parameters)
{{{{{gCurrentTiddler}} }}}refers to the current (host) tiddler in global scope (i.e. within{{{ {{}} }}}evalled parameters. Example:
{{{<<tiddlerList tags:{{gCurrentTiddler.title}}>>}}}
!Style
No styles are pre-assigned to the lists. Use {{{@@}}} notation to define custom styles in the header, footer, groupTemplate and itemTemplate parameters.
!Code
***/
//{{{
version.extensions.tiddlerList = {major: 2, minor: 3, revision: 0, date: new Date("Jan 08, 2008")};
// template = [header, item, separator, group, footer]
config.macros.tiddlerList={
 formats : {list:true, nlist:true, span:true, stack:true, csv:true, table:true},
 templates : {
 list : [ "%0\n", "* %0\n", "", "%group\n", "%0\n"],
 nlist : [ "%0", "# %0\n", "", "%group\n", "%0\n"],
 span : [ "%0", "%0", " ", "%group", "%0"],
 stack : [ "%0", "%0", "\n", "%group", "%0"],
 csv : [ "%0", "%0", ", ", "%0", "%0\n"],
 table : ["|!%0|\n", "|%0|\n", "", "|%group|\n", "|%0|\n"]
 },
 dateFormat : "DD MMM YYYY"
}

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

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

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

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

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

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

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

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

//}}}
|wideTable|k
|font-weight:bold; By Date Modified |font-weight:bold; By Date Created |h
|<<timeline "modified">>|<<timeline "created">>|
|~ViewToolbar|closeTiddler closeOthers refreshDisplay +editTiddler jump > fields syncing permalink references deleteTiddler|
|~EditToolbar|+saveTiddler -cancelTiddler fields jump deleteTiddler|
/***
Description: Contains the stuff you need to use Tiddlyspot
Note, you also need UploadPlugin, PasswordOptionPlugin and LoadRemoteFileThroughProxy
from http://tiddlywiki.bidix.info for a complete working Tiddlyspot site.
***/
//{{{

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

// 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.org|http://tiddlywiki.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/]], [[blog|http://tiddlyspot.blogspot.com/]], 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")

});
//}}}
| 02/10/2009 01:38:34 | TB | [[/|http://mjuzik.tiddlyspot.com/#]] | [[store.cgi|http://mjuzik.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mjuzik.tiddlyspot.com/index.html]] | . | ok |
| 07/10/2010 11:58:56 | Tobias | [[mjuzik.html|file:///C:/xTiddle/tiddlyspot/mjuzik/mjuzik.html#StyleSheet]] | [[store.cgi|http://mjuzik.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mjuzik.tiddlyspot.com/index.html]] | . | ok |
| 07/10/2010 12:37:53 | Tobias | [[mjuzik.html|file:///C:/xTiddle/tiddlyspot/mjuzik/mjuzik.html]] | [[store.cgi|http://mjuzik.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mjuzik.tiddlyspot.com/index.html]] | . | ok |
| 07/10/2010 13:50:39 | Tobias | [[mjuzik.html|file:///C:/xTiddle/tiddlyspot/mjuzik/mjuzik.html]] | [[store.cgi|http://mjuzik.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mjuzik.tiddlyspot.com/index.html]] | . | ok |
| 07/10/2010 13:58:44 | Tobias | [[mjuzik.html|file:///C:/xTiddle/tiddlyspot/mjuzik/mjuzik.html]] | [[store.cgi|http://mjuzik.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mjuzik.tiddlyspot.com/index.html]] | . | ok |
| 07/10/2010 14:03:12 | Tobias | [[mjuzik.html|file:///C:/xTiddle/tiddlyspot/mjuzik/mjuzik.html]] | [[store.cgi|http://mjuzik.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mjuzik.tiddlyspot.com/index.html]] | . | ok |
| 08/10/2010 00:43:31 | Tobias | [[mjuzik.html|file:///C:/xTiddle/tiddlyspot/mjuzik/mjuzik.html]] | [[store.cgi|http://mjuzik.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mjuzik.tiddlyspot.com/index.html]] | . | ok |
| 08/10/2010 01:00:29 | Tobias | [[mjuzik.html|file:///C:/xTiddle/tiddlyspot/mjuzik/mjuzik.html]] | [[store.cgi|http://mjuzik.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mjuzik.tiddlyspot.com/index.html]] | . | ok |
| 24/10/2010 12:56:09 | Admin | [[mjuzik.html|file:///C:/xTiddle/tiddlyspot/mjuzik/mjuzik.html]] | [[store.cgi|http://mjuzik.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mjuzik.tiddlyspot.com/index.html]] | . | ok |
| 24/10/2010 12:59:06 | Tobias | [[mjuzik.html|file:///C:/xTiddle/tiddlyspot/mjuzik/mjuzik.html]] | [[store.cgi|http://mjuzik.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mjuzik.tiddlyspot.com/index.html]] | . | ok |
| 24/10/2010 13:10:02 | Tobias | [[mjuzik.html|file:///C:/xTiddle/tiddlyspot/mjuzik/mjuzik.html]] | [[store.cgi|http://mjuzik.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mjuzik.tiddlyspot.com/index.html]] | . |
/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.3|
|''Date:''|Feb 24, 2008|
|''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|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
	major: 4, minor: 1, revision: 3,
	date: new Date("Feb 24, 2008"),
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0'
};

//
// 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
		if (!params) params = {};
		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}
				
			]);
	},
	options: [
		"txtUploadUserName",
		"pasUploadPassword",
		"txtUploadStoreUrl",
		"txtUploadDir",
		"txtUploadFilename",
		"txtUploadBackupDir",
		"chkUploadLog",
		"txtUploadLogMaxLine"		
	],
	refreshOptions: function(listWrapper) {
		var opts = [];
		for(i=0; i<this.options.length; i++) {
			var opt = {};
			opts.push();
			opt.option = "";
			n = this.options[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 = new 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,username,password,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 = new Array(uploadParams[0],rssPath,uploadParams[2],'',uploadParams[4],uploadParams[5]);
		var rssString = generateRss();
		// no UnicodeToUTF8 conversion needed when location is "file" !!!
		if (document.location.toString().substr(0,4) != "file")
			rssString = convertUnicodeToUTF8(rssString);	
		bidix.upload.httpUpload(rssUploadParams,rssString,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 == 404)
			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; ;charset=UTF-8; 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');


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


//}}}

<script>
var e=place; while (!e.getAttribute('tiddler')) e=e.parentNode;
title=e.getAttribute('tiddler');
if (title=="Video") return "[[Recently Added]] | [[All Videos]] All tiddlers tagged ''Video'' reference here...<br/><<tagglyTagging>>";
tid=store.getTiddler(title);
if (tid==undefined) return;

var vid="$1";
if (vid=="$"+"1") return;
var types=["Vimeo","Youtube","YoutubePlaylist","MySpace","MyVideo","Dailymotion","Arte"];

types["Vimeo"]=['http://vimeo.com/moogaloop.swf?clip_id=','<object width="425" height="344"><param name="allowfullscreen" value="true" /><param name="wmode" value="transparent"></param><param name="allowscriptaccess" value="always" /><param name="movie" value="%V%&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="%V%&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" wmode="transparent" allowscriptaccess="always" width="420" height="344"></embed></object>'];

types["Youtube"]=['http://www.youtube.com/v/','<object width= "425" height="344"><param name="wmode" value="transparent"></param><param name="movie" value="%V%&ap=%2526fmt%3D18&autoplay=0&rel=1&fs=1&loop=0"></param><param name="allowFullScreen" value="true"></param><embed src="%V%&ap=%2526fmt%3D18&autoplay=0&rel=1&fs=1&loop=0" wmode="transparent" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>'];

types["YoutubePlaylist"]=['http://www.youtube.com/p/','<object width= "425" height="344"><param name="wmode" value="transparent"></param><param name="movie" value="%V%&ap=%2526fmt%3D18&autoplay=0&rel=1&fs=1&loop=0"></param><param name="allowFullScreen" value="true"></param><embed src="%V%&ap=%2526fmt%3D18&autoplay=0&rel=1&fs=1&loop=0" wmode="transparent" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>'];

types["MySpace"]=['http://mediaservices.myspace.com/services/media/embed.aspx/m=','<object width="425" height="344" ><param name="wmode" value="transparent"></param><param name="allowFullScreen" value="true"/><param name="wmode" value="transparent"/><param name="movie" value="%V%,t=1,mt=video"/><embed src="%V%,t=1,mt=video" width="425" height="344" wmode="transparent" allowFullScreen="true" type="application/x-shockwave-flash" wmode="transparent"></embed></object>'];

types["MyVideo"]=['http://www.myvideo.de/movie/','<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height=""> <param name="movie" value="%V%"></param><param name="wmode" value="transparent"></param><embed src="%V%" wmode="transparent" width="425" height="344" type="application/x-shockwave-flash"></embed></object>'];

types["Dailymotion"]=['http://www.dailymotion.com/swf/','<object height="344" width="425"><param value="%V%" name="movie"/><param value="true" name="allowFullScreen"/><param name="wmode" value="transparent"></param><param value="always" name="allowScriptAccess"/><embed height="344" width="425" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" type="application/x-shockwave-flash" src="%V%"/></object>'];

types["Arte"]=['http://arte.vo.llnwd.net/o21/liveweb/flash/player.swf?eventId=','<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10, 0, 0, 0"id="playerArteLiveWeb" allowScriptAccess="always" width="425" height="344" ><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="quality" value="high"><param name="movie" value="%V%&admin=false&mode=prod&embed=true"><embed src="%V%&admin=false&mode=prod&embed=true"width="425" height="344" wmode="transparent" allowFullScreen="true" name="playerArteLiveWeb" quality="high" allowScriptAccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed></object>'];

var i=-1;
var type="";
while (type==""&&i<types.length){i++;if(tid.tags.contains(types[i])) type=types[i];}
if(type=="")return "@@color:red;undefined video type, define in sourcecode of [[Video]]@@";
var url=types[type][0]+vid;
var out='<html>'+types[type][1].replace(/%V%/g, url);
if(type=="YoutubePlaylist") out+='<br><iframe src="http://www.youtube.com/view_play_list?p='+vid+'" style="margin-top:20px;width:1000px;height:800px;"></iframe>';
out+='</html>';

return out;
</script>
A beautiful site with even more beautiful content...
<<tagglyTagging>>
A great place to find music and related videos. [[Here is a list of all videos on youtube|Youtube All]] posted in this wiki.
<<tagglyTagging>>
<<tiddlerList filter:"tiddler.tags.contains('Youtube')" order:"title" dateFormat:"YYYY mmm. 0DD" itemTemplate:"{{vidList{+++[► play %title|show hide player]...\n<<tiddler '%title'$))\n===\n{{rightLink{[[open|%title]]}}}}}}">>
Playlists as provided by youtube users...
|Name|mjuzik|h
|Background|#FFF|
|Foreground|#000|
|PrimaryPale|#999|
|PrimaryLight|#777|
|PrimaryMid|#111|
|PrimaryDark|#000|
|SecondaryPale|#CCF|
|SecondaryLight|#9AF|
|SecondaryMid|#69C|
|SecondaryDark|#27B|
|TertiaryPale|#EEE|
|TertiaryLight|#CCC|
|TertiaryMid|#999|
|TertiaryDark|#666|
|Error|#F88|
| Name | mjuzikTheme |h
|Description|A clean theme with a left and right top menu|
|PageTemplate|##PageTemplate|
|ViewTemplate|##ViewTemplate|
|EditTemplate|##EditTemplate|
|StyleSheet|##StyleSheet|
!PageTemplate
<!--{{{-->
<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='topMenu'>
  <span id="topMenuL" refresh='content' tiddler='topMenuL'></span>
  <span id="toggleSidebar" macro="toggleSideBar hide" style="display:none;"></span>
  <span id="topMenuR" refresh='content' tiddler='topMenuR'></span>
  <div id="topMenuClear"></div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
<div id='sidebar'>
	<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
	<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
</div>
<!--}}}-->

!ViewTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'>
<span macro="tiddler cycleTags with: tagsTasks" title="task management" style="margin-right:20px;">
</span>
</div>
<div class="tagglyTagged" macro="tags"></div>
<div class='titleContainer'>
	<span class='title' macro='view title'></span>
	<span macro="miniTag"></span>
</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>)<span macro='rating =here RatingSummary' style="margin-left:10px;"></span></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>

<!--}}}-->


!EditTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div class="editLabel">Tags</div><div class="editor" macro="edit tags"></div>
<div class='editorFooter' macro='deliciousTagging'></div>
<!--<div class="editorFooter"><span macro="message views.editor.tagPrompt"></span><span macro="tagChooser"></span></div>-->
<div macro='annotations'></div>
<div class="editLabel">Content</div><div class="editor" macro="edit text"></div>
<!--}}}-->

!StyleSheet

/*{{{*/

/* a contrasting background so I can see where one tiddler ends and the other begins */
body {background: [[ColorPalette::TertiaryLight]];font-family:Verdana, sans-serif; }

/* prefer monospace for editing */
.editor textarea, .editor input {font-family: 'Consolas' monospace;background-color:[[ColorPalette::TertiaryPale]];}

/* sexy colours and font for the header */
.header{float:left;width:100%;}
.headerForeground {color: [[ColorPalette::SecondaryPale]];}
.headerShadow, .headerShadow a {color: [[ColorPalette::PrimaryMid]];}
.headerForeground a:hover {color:[[ColorPalette::TertiaryPale]];}
.siteTitle .tiddlyLinkExisting {color:[[ColorPalette::SecondaryPale]];}
.siteTitle {line-height:1.3em;}

/* separate the top menu parts */
.headerForeground, .headerShadow {padding: 1em 0.2em 0 1em;font-family:Verdana, sans-serif;font-weight:bold;}
.headerForeground .siteSubtitle {color: [[ColorPalette::SecondaryPale]];}
.headerShadow .siteSubtitle {color: [[ColorPalette::PrimaryMid]];}
.headerShadow {left: 1px;top: 1px;} /* make shadow go and down right instead of up and left */

/* tiddler titles */
.title {font-size:250%;font-weight:normal;}
.subtitle {padding:0px;margin:0px;padding-left:1em;font-size: 90%;color: [[ColorPalette::TertiaryMid]];}
.subtitle .tiddlyLink {color: [[ColorPalette::TertiaryMid]];}

/* a little bit of extra whitespace */
.viewer {padding-bottom:3px;overflow:hidden;}

/* don't want any background color for headings */
h1,h2,h3,h4,h5,h6 {background-color: transparent;color: [[ColorPalette::Foreground]];}

/* give tiddlers 3d style border and explicit background */
.tiddler, #searchResults {
	background: [[ColorPalette::Background]];
	border-right: 2px [[ColorPalette::TertiaryMid]] solid;
	border-bottom: 2px [[ColorPalette::TertiaryMid]] solid;
	margin-bottom: 1em;
	padding:1em 2em 2em 1.5em;
	-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;
}


#displayArea{margin:1em 0 0 0;float:left;clear:left;width:100%;z-index:0;}
#tiddlerDisplay {margin:0 -1% 0 1%;float:left;clear:left;width:100%;z-index:0;}

#topMenu .button, #topMenu .tiddlyLink, #topMenu a{
	border:none;
	font-weight:bold;
	margin-left: 0.5em;
	margin-right: 0.5em;
	padding:3px 1px;
	color: [[ColorPalette::PrimaryPale]];
	background-color:[[ColorPalette::PrimaryMid]];
	font-size: 115%;
}
#topMenu .button:hover, #topMenu .tiddlyLink:hover {color: [[ColorPalette::TertiaryPale]];}
#topMenu{background: [[ColorPalette::PrimaryMid]];color:[[ColorPalette::PrimaryPale]];min-height:25px;padding:2px 2px 0;float:left;min-height:25px;width:100%;}

#mainMenu{float:right;margin-right:20%;}

/* make 2.2 act like 2.1 with the invisible buttons */
.toolbar {visibility:hidden;}
.selected .toolbar {visibility:visible;}

/* experimental. this is a little borked in IE7 with the button borders but worth it I think for the extra screen realestate */
.toolbar {float:right;}^
/*clear viewer from viewer toolbar (due to add reminder form)
.viewer {clear:both; POSITION: relative;}

/* fix for TaggerPlugin. from sb56637. improved by FND */
.popup li .tagger a {display:inline;}

/* make it print a little cleaner */
@media print {
/* not sure if important is needed */
#topMenu {display: none ! important;}
.tiddler {border-style: none ! important;margin:0px ! important;padding:0px ! important;padding-bottom:2em ! important;}
.tagglyTagging .button, .tagglyTagging .hidebutton {display: none ! important;}
.headerShadow {visibility: hidden ! important;}
.tagglyTagged .quickopentag, .tagged .quickopentag {border-style: none ! important;}
.quickopentag a.button, .miniTag {display: none ! important;}
}

.wideTable{width:98%}
.wideTable td{padding-left:5px;}
.wideTable thead td{padding-left:15px;}

.light {color:#AAA;}
.light .externalLink, .light .tiddlyLink {color:#AAA;}
.light .externalLink:hover, .light .tiddlyLink:hover {background:#CCC;color:#666;}

.viewer table td, .viewer table tr {vertical-align:top;}
.viewer table, table.twtable {border:1px solid [[ColorPalette::TertiaryDark]];}
.viewer table thead, table.twtable thead {border-bottom:1px solid [[ColorPalette::TertiaryDark]];font-weight:bold;}

#sidebar{margin-right:1%;padding:1%;float:left;z-index:1;	border-right: 2px [[ColorPalette::TertiaryMid]] solid;border-bottom: 2px [[ColorPalette::TertiaryMid]] solid;background:white;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;}
#sidebar .button {border-style: none;}

#sidebarOptions br {display:none;}
#sidebarOptions .sliderPanel {font-size:1em;margin-left:0px;padding:0px;background:none;}
#sidebarOptions .sliderPanel br {display:inline;}
#sidebarOptions .tiddlyLink {font-weight:normal;}
#sidebarOptions .tiddlyLink:hover {background-color:[[ColorPalette::SecondaryLight]];color:[[ColorPalette::Foreground]];}

#sidebarTabs {margin-top:3px;}
#sidebarTabs .sliderPanel a.button {display:inline;}
#sidebarTabs a.button {padding:0.2em 0.3em;margin:0 0.2em;display:block;}
#sidebarTabs .tabContents{width:94%;padding:0 1%;margin:1%;}

#backstageButton a {margin-right:10px;color:#666;}
#backstageButton a:hover {background:none;}

#topMenu .searchField {width:100px;height:15px;font-size:10px;padding:1px 2px;margin:0px;
                       border:1px solid #999;border-top:1px solid #666;border-right:1px solid #555;}
#topMenuL br, #topMenuR br {display: none;}
#topMenuL {margin-top:5px;float:left;}
#topMenuR {width:270px;height:23px;margin:0 2.1em 0 1em;float:right;}
#topMenuR table{width:150px;}

#messageArea{margin-top:0px;}
#toolbar .tiddlyLinkExisting {font-weight:normal;}
iframe {border:none;height:800px;width:100%;padding:0px;margin:0px;z-index:0;position:relative;}
object{z-index:0;position:relative;}

.tagglyTagging {margin-top:5px;}
.right {float:right;margin-right:2%;}

.titleContainer .miniTag {color:[[ColorPalette::SecondaryDark]];}
.titleContainer .miniTag:hover {background:none;color:[[ColorPalette::TertiaryDark]];}

/* get user styles specified in StyleSheet */
[[StyleSheet]]
/*}}}*/
installed pülugins:
<<list filter [tag[systemConfig]]>>
<html><div style="margin:10px 0 0 0;width:800px;height:600px;overflow:hidden;
position:relative;"><iframe style="position:absolute;top:-50px;left:-250px; width:1280px;height:1200px;" src="http://www.tape.tv/musikvideos/$1" scrolling=no></iframe></div><div style="clear:both"></div></html>
[[Link to video page...|http://www.tape.tv/musikvideos/$1]]/%
!vid
<html><div style="margin:10px 0 0 0;width:800px;height:600px;overflow:hidden;
position:relative;"><iframe style="position:absolute;top:-50px;left:-250px; width:1280px;height:1200px;" src="http://www.tape.tv/vid/$1" scrolling=no></iframe></div><div style="clear:both"></div></html>
[[Link to video page...|http://www.tape.tv/vid/$1]]
!end%/
<<closeAll>><<renameButton x 'close all open articles'>>|[[blogotheque|Blogotheque]]|[[radio one|Radio 1 Live Lounge]]|[[accuradio|AccuRadio]]|[[tape.tv|Tape.tv]]|[[webradio|Radio]]|[[artists|Artists]]|[[platforms|Platforms]]|[[festivals|Festivals]]
[[ratings|Ratings]]|<<permaview>><<gotoTiddler search liststyle:"z-index:999;right:2em;border:1px solid #999;margin-right:-2px;padding:0;" inputstyle:"152px;border:1px solid #999;">>
/*{{{*/
var c=config,co=c.options,cc=c.commands,cm=c.macros;
co.chkShowRightSidebar=false;
co.txtTheme = 'mjuzikTheme';

c.views.wikified.defaultText = "";
c.views.editor.defaultText = "";

co.chkInsertTabs = true;
co.chkSaveBackups = true;
co.txtBackupFolder = 'twbackup';
co.chkAutoSave = (window.location.protocol == "file:");

cc.syncing.text="sync";
cc.references.text="ref";
cc.permalink.text="url";

cm.permaview.label="url";
cm.saveChanges.label="save";
cm.list.all.prompt="all tiddlers by title:";
cm.list.shadowed.prompt="default content tiddlers:";
cm.list.missing.prompt="not linked tiddlers:";
cm.list.orphans.prompt="linked but undefined:";

merge(c.messages.backstage,{open:{text:''},close:{text:''}});
/*}}}*/