/***\nMacro: allTagsExcept\nAuthor: Clint Checketts\nVersion: 1.0 Sept 8, 2005\n\nusage: {{{<< allTagsExcept systemConfig systemTiddlers >>}}} This will show all tags but those listed (e.g. systemConfig and systemTiddlers\n\n<<allTagsExcept systemConfig systemTiddlers >>\n***/\n//{{{\nversion.extensions.allTagsExcept = {major: 0, minor: 1, revision: 0, date: new Date(2005,8,15)};\nconfig.macros.allTagsExcept = {tooltip: "Show tiddlers tagged with '%0'",noTags: "There are no tags to display"};\n\nconfig.macros.allTagsExcept.handler = function(place,macroName,params)\n{\n var tags = store.getTags();\n var theTagList = createTiddlyElement(place,"ul",null,null,null);\n if(tags.length == 0)\n createTiddlyElement(theTagList,"li",null,"listTitle",this.noTags);\n for (var t=0; t<tags.length; t++) {\n var includeTag = true;\n for (var p=0;p<params.length; p++) if (tags[t][0] == params[p]) includeTag = false;\n if (includeTag){\n var theListItem =createTiddlyElement(theTagList,"li",null,null,null);\n var theTag = createTiddlyButton(theListItem,tags[t][0] + " (" + tags[t][1] + ")",this.tooltip.format([tags[t][0]]),onClickTag);\n theTag.setAttribute("tag",tags[t][0]);\n }\n }\n}\n//}}}
//{{{\nconfig.options.txtBackupFolder = "twBackups";\n//}}}
/***\n|Name|Broccoli Links|\n|Created by|Clint Checketts and Simon Baird|\n|Location|http://checkettsweb.com/styles/themes.htm#%5B%5BBroccoli%20Links%5D%5D|\n|Summary|Provides options to disable auto-linking of camel case words and lets pretty links point to tiddlers rather than external files|\n|Current version|1.0 (20-Oct-2005)|\n!Description\nThis plugin changes the default behaviors of pretty links (links that display one text but link to a different tiddler like [[this|Welcome!]]). Pretty links that point to non-existent tiddlers are asumed to point to external files. This plugin allows you to disable that functionality, and instead point to the non-existent tiddler. This plugin also allows you to disable the auto wikification of camel case words (ThisIsACamelCaseWord). The name 'broccoli' was inspired by the Jeremy's [[photo|http://www.flickr.com/photos/jermy/10134618/]], and with a name like TiddlyWiki, extensions deserve silly names too (who names a broccoli Mervyn?).\n\nTo switch this functionality on or off, select the corresponding check boxes in the [[AdvancedOptions]] tiddler or right here:\n<<option chkPrettyLinksPointToFile>> PrettyLinksPointToFiles\n<<option chkAutoLinkCamelCase >> AutoLinkCamelCaseWords\n\nChange the following 'config.options' lines to true if you want the plugins off by default\n***/\n//{{{\nconfig.options.chkPrettyLinksPointToFile = true;\nconfig.options.chkAutoLinkCamelCase = true;\n\n\nconfig.shadowTiddlers.AdvancedOptions += "sn<<option chkPrettyLinksPointToFile>> PrettyLinksPointToFilessn<<option chkAutoLinkCamelCase >> AutoLinkCamelCaseWords";\n\n\nfor (var i=0;i<config.formatters.length;i++)\n if (config.formatters[i].name == "prettyLink"){\n config.formatters[i].handler= function(w)\n {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[2]) // Simple bracketted link\n {\n var link = createTiddlyLink(w.output,lookaheadMatch[1],false);\n w.outputText(link,w.nextMatch,w.nextMatch + lookaheadMatch[1].length);\n w.nextMatch += lookaheadMatch[1].length + 2;\n }\n else if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[3]) // Pretty bracketted link\n {\n var e;\n if(store.tiddlerExists(lookaheadMatch[4]))\n e = createTiddlyLink(w.output,lookaheadMatch[4],false);\n else\n// Extra 'if' statement to decide whether to use point to files or not (by Clint)==========\n if (config.options.chkPrettyLinksPointToFile)\n e = createExternalLink(w.output,lookaheadMatch[4]);\n else\n e = createTiddlyLink(w.output,lookaheadMatch[4],false);\n// end additions ================================================\n w.outputText(e,w.nextMatch,w.nextMatch + lookaheadMatch[1].length);\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n}\n\n\n\nfor (var i=0;i<config.formatters.length;i++)\n if (config.formatters[i].name == "wikiLink"){\n config.formatters[i].handler= function(w){\n// Check to see if you want the wirds turned into links (by Clint) ===========\n if (!config.options.chkAutoLinkCamelCase){\n w.outputText(w.output,w.matchStart,w.nextMatch);\n return false;\n }\n// end additions ==========================================\n var preRegExp = new RegExp(config.textPrimitives.anyLetter,"mg");\n var preMatch = null;\n if(w.matchStart > 0)\n {\n preRegExp.lastIndex = w.matchStart-1;\n preMatch = preRegExp.exec(w.source);\n }\n if(preMatch && preMatch.index == w.matchStart-1)\n w.outputText(w.output,w.matchStart,w.nextMatch);\n else if(w.matchText.substr(0,1) == config.textPrimitives.unWikiLink)\n w.outputText(w.output,w.matchStart + 1,w.nextMatch);\n else\n {\n var link = createTiddlyLink(w.output,w.matchText,false);\n w.outputText(link,w.matchStart,w.nextMatch);\n }\n }\n}\n//}}}
/***\n!TiddlyWiki Classic Color Scheme\nDesigned by Jeremy Ruston\n\nTo use this color scheme copy the [[ClassicTiddlyWiki]] contents into a tiddler and name it 'StyleSheet' also grab the [[ClassicTemplate]] and copy its contents into a tiddler named 'PageTemplate'.\n\n!Colors Used\n*@@bgcolor(#630):color(#fff): #630@@\n*@@bgcolor(#930): #930@@\n*@@bgcolor(#996633): #963@@\n*@@bgcolor(#c90): #c90@@\n*@@bgcolor(#cf6): #cf6@@\n*@@bgcolor(#cc9): #cc9@@\n*@@bgcolor(#ba9): #ba9@@\n*@@bgcolor(#996): #996@@\n*@@bgcolor(#300):color(#fff): #300@@\n*@@bgcolor(#000000):color(#fff): #000@@\n*@@bgcolor(#666): #666@@\n*@@bgcolor(#888): #888@@\n*@@bgcolor(#aaa): #aaa@@\n*@@bgcolor(#ddd): #ddd@@\n*@@bgcolor(#eee): #eee@@\n*@@bgcolor(#ffffff): #fff@@\n*@@bgcolor(#f00): #f00@@\n*@@bgcolor(#ff3): #ff3@@\n!Generic Rules /%==============================================%/\n***/\n/*{{{*/\nbody {\n background: #fff;\n color: #000;\n}\n\na{\n color: #963;\n}\n\na:hover{\n background: #963;\n color: #fff;\n}\n\na img{\n border: 0;\n}\n\nh1,h2,h3,h4,h5 {\n background: #cc9;\n}\n/*}}}*/\n/***\n!Header /%==================================================%/\n***/\n/*{{{*/\n.header{\n background: #300;\n}\n\n.titleLine {\n color: #fff;\n padding: 5em 0em 1em .5em;\n}\n\n.titleLine a {\n color: #cf6;\n}\n\n.titleLine a:hover {\n background: transparent;\n}\n/*}}}*/\n/***\n!Main Menu /%=================================================%/\n***/\n/*{{{*/\n#mainMenu .button {\n color: #930;\n}\n\n#mainMenu .button:hover {\n color: #cf6;\n background: #930;\n}\n\n#mainMenu li{\n list-style: none;\n}\n/*}}}*/\n/***\n!Sidebar options /%=================================================%/\n~TiddlyLinks and buttons are treated identically in the sidebar and slider panel\n***/\n/*{{{*/\n#sidebar {\n background: #c90;\n right: 0;\n}\n\n#sidebarOptions a{\n color: #930;\n border: 0;\n margin: 0;\n padding: .25em .5em;\n}\n\n#sidebarOptions a:hover {\n color: #cf6;\n background: #930;\n}\n\n#sidebarOptions a:active {\n color: #930;\n background: #cf6;\n}\n\n#sidebarOptions .sliderPanel {\n background: #eea;\n margin: 0;\n}\n\n#sidebarOptions .sliderPanel a {\n color: #930;\n}\n\n#sidebarOptions .sliderPanel a:hover {\n color: #cf6;\n background: #930;\n}\n\n#sidebarOptions .sliderPanel a:active {\n color: #930;\n background: #cf6;\n}\n/*}}}*/\n/***\n!Sidebar tabs /%=================================================%/\n***/\n/*{{{*/\n.tabSelected,.tabContents {\n background: #eea;\n border: 0;\n}\n\n.tabUnselected {\n background: #c90;\n}\n\n#sidebarTabs {\n background: #c90;\n}\n\n#sidebarTabs .tabSelected{\n color: #cf6;\n background: #963;\n}\n\n#sidebarTabs .tabUnselected {\n color: #cf6;\n background: #930;\n}\n\n#sidebarTabs .tabContents{\n background: #963;\n}\n\n#sidebarTabs .txtMoreTab .tabSelected,\n#sidebarTabs .txtMoreTab .tabSelected:hover{\n background: #930;\n color: #cf6;\n}\n\n#sidebarTabs .txtMoreTab .tabUnselected,\n#sidebarTabs .txtMoreTab .tabUnselected:hover{\n background: #300;\n color: #cf6;\n}\n\n#sidebarTabs .txtMoreTab .tabContents {\n background: #930;\n}\n\n#sidebarTabs .tabContents a {\n color: #cf6;\n border: 0;\n}\n\n#sidebarTabs .button.highlight,\n#sidebarTabs .tabContents a:hover {\n background: #cf6;\n color: #300;\n}\n/*}}}*/\n/***\n!Message Area /%=================================================%/\n***/\n/*{{{*/\n#messageArea {\n background: #930;\n color: #fff;\n}\n\n#messageArea a:link, #messageArea a:visited {\n color: #c90;\n}\n\n#messageArea a:hover {\n color: #963;\n background: transparent;\n}\n\n#messageArea a:active {\n color: #fff;\n}\n/*}}}*/\n/***\n!Popup /%=================================================%/\n***/\n/*{{{*/\n.popup {\n background: #eea;\n border: 1px solid #930;\n}\n\n.popup hr {\n color: #963;\n background: #963;\n border-bottom: 1px;\n}\n\n.popup li.disabled {\n color: #ba9;\n}\n\n.popup li a, .popup li a:visited {\n color: #300;\n}\n\n.popup li a:hover {\n background: #930;\n color: #eea;\n}\n/*}}}*/\n/***\n!Tiddler Display /%=================================================%/\n***/\n/*{{{*/\n.tiddler .button {\n color: #930;\n}\n\n.tiddler .button:hover {\n color: #cf6;\n background: #930;\n}\n\n.tiddler .button:active {\n color: #fff;\n background: #c90;\n}\n\n.shadow .title {\n color: #888;\n}\n\n.title {\n color: #422;\n}\n\n.subtitle {\n color: #866;\n}\n\n.toolbar {\n color: #aaa;\n}\n\n.toolbar a,\n.toolbar a:hover{\n border: 0;\n}\n\n.tagging, .tagged {\n border: 1px solid #fff;\n background-color: #ffc;\n}\n\n.selected .tagging, .selected .tagged {\n border: 1px solid #aa6;\n background-color: #ffc;\n}\n\n.tagging .listTitle, .tagged .listTitle {\ncolor: #999999;\n}\n\n.footer {\n color: #ddd;\n}\n\n.selected .footer {\n color: #888;\n}\n\n.sparkline {\n background: #eea;\n border: 0;\n}\n\n.sparktick {\n background: #930;\n}\n\n.errorButton {\n color: #ff0;\n background: #f00;\n}\n\n.zoomer {\n color: #963;\n border: 1px solid #963;\n}\n/*}}}*/\n/***\n''The viewer is where the tiddler content is displayed'' /%------------------------------------------------%/\n***/\n/*{{{*/\n.viewer .button {\n background: #c90;\n color: #300;\n border-right: 1px solid #300;\n border-bottom: 1px solid #300;\n}\n\n.viewer .button:hover {\n background: #eea;\n color: #c90;\n}\n\n.viewer .imageLink{\n background: transparent;\n}\n\n.viewer blockquote {\n border-left: 3px solid #666;\n}\n\n.viewer table {\n border: 2px solid #303030;\n}\n\n.viewer th, thead td {\n background: #996;\n border: 1px solid #606060;\n color: #fff;\n}\n\n.viewer td, .viewer tr {\n border: 1px solid #606060;\n}\n\n.viewer pre {\n border: 1px solid #963;\n background: #eea;\n}\n\n.viewer code {\n color: #630;\n}\n\n.viewer hr {\n border: 0;\n border-top: dashed 1px #606060;\n color: #666;\n}\n\n.highlight, .marked {\n background: #ff3;\n}\n/*}}}*/\n/***\n''The editor replaces the viewer in the tiddler'' /%------------------------------------------------%/\n***/\n/*{{{*/\n.editor input {\n border: 1px solid #000;\n}\n\n.editor textarea {\n border: 1px solid #000;\n width: 100%;\n}\n\n.editorFooter {\n color: #aaa;\n}\n\n.editorFooter a {\n color: #930;\n}\n\n.editorFooter a:hover {\n color: #cf6;\n background: #930;\n}\n\n.editorFooter a:active {\n color: #fff;\n background: #c90;\n}\n/*}}}*/
<div class='header'>\n<div class='titleLine'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n</div>\n<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\n<div id='sidebar'>\n<div macro='gradient vert #ffffff #cc9900'>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n</div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>
Here are a few ways you can contact me or give feedback:\n*Post a message on the [[Google Groups|http://tiddlywiki.com/#Community]]\n*Email me: checketts [at] gmail [dot] com\n*Post a comment on my [[blog|http://blog.checkettsweb.com]]
/***\n''Plugin:'' Custom classes wikifier\n''Version:'' 1.0 (Feb 24, 2006)\n''Author:'' Clint Checketts\n''Credit:'' Thanks to Paul Petterson, Bradley Meck, and Simon Baird for tips and tricks\n\n!Usage\nThis wikifier allows the user to grab any text and wrap it in a span with a custom class. The allows cutom CSS stylingin a nice, modular way. By placing a rule in you StyleSheet tiddler like {{{.wrappingClass{color: #666; background: #eee} }}} you can markup a small piece of text in the tiddler using this code:\n{{{\n{{wrappingClass{Text that is now accentuated}}}\n}}}\n!Example\n{{wrappingClass{Text that has custom styling}}}\n\n{{Urgent Task{Save the whales}}}\n{{Task{Pay bills}}}\n{{Urgent Project{Begin whale recycling program}}}\n{{Stupid Project{Travel to Atlantis}}}\n\n!Code\n***/\n\n//{{{\nversion.extensions.CustomClassPlugin = {major: 1, minor: 0, revision: 0 , date: new Date(2006,2,24)};\n//}}}\n\n//{{{\nconfig.formatters.push( {\n name: "customClasses",\n match: "{{",\n lookahead: "{{[\s\ss]*([\s\sw]+[\s\ss\s\sw]*)[\s\ss]*{((?:[^}]|(?:}(?!}))|(?:}}(?!})))*)}}}",\n handler: function(w){\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source);\n var p = createTiddlyElement(w.output,"span",null,lookaheadMatch[1]);\n wikify( lookaheadMatch[2], p, null, w.tiddler);\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n});\n//}}}
[[Welcome!]] [[Themes]] [[Plugins]]
/*{{{*/\nbody {\nbackground: #000;\n}\n/*}}}*/\n/***\n!Link styles /% ============================================================= %/\n***/\n/*{{{*/\na,\na.button,\n#mainMenu a.button,\n#sidebarOptions .sliderPanel a{\n color: #ffbf00;\n border: 0;\n}\n\na:hover,\na.button:hover,\n#mainMenu a.button:hover,\n#sidebarOptions .sliderPanel a:hover\n#sidebarOptions .sliderPanel a:active{\n color: #ff7f00;\n border: 0;\n border-bottom: #ff7f00 1px dashed;\n background: transparent;\n text-decoration: none;\n}\n\n#displayArea .button.highlight{\n color: #ffbf00;\n background: #4c4c4c;\n}\n/*}}}*/\n/***\n!Header styles /% ============================================================= %/\n***/\n/*{{{*/\n.header{\n border-bottom: 2px solid #ffbf00;\n color: #fff;\n}\n\n.headerForeground a {\n color: #fff;\n}\n\n.header a:hover {\n border-bottom: 1px dashed #fff;\n}\n/*}}}*/\n/***\n!Main menu styles /% ============================================================= %/\n***/\n/*{{{*/\n#mainMenu {color: #fff;}\n#mainMenu h1{\n font-size: 1.1em;\n}\n#mainMenu li,#mainMenu ul{\n list-style: none;\n margin: 0;\n padding: 0;\n}\n/*}}}*/\n/***\n!Sidebar styles /% ============================================================= %/\n***/\n/*{{{*/\n#sidebar {\n right: 0;\n color: #fff;\n border: 2px solid #ffbf00;\n border-width: 0 0 2px 2px;\n}\n#sidebarOptions {\n background-color: #4c4c4c;\n padding: 0;\n}\n\n#sidebarOptions a{\n margin: 0;\n color: #ffbf00;\n border: 0;\n}\n#sidebarOptions a:hover {\n color: #4c4c4c;\n background-color: #ffbf00;\n\n}\n\n#sidebarOptions a:active {\n color: #ffbf00;\n background-color: transparent;\n}\n\n#sidebarOptions .sliderPanel {\n background-color: #333;\n margin: 0;\n}\n\n#sidebarTabs {background-color: #4c4c4c;}\n#sidebarTabs .tabSelected {\n padding: 3px 3px;\n cursor: default;\n color: #ffbf00;\n background-color: #666;\n}\n#sidebarTabs .tabUnselected {\n color: #ffbf00;\n background-color: #5f5f5f;\n padding: 0 4px;\n}\n\n#sidebarTabs .tabUnselected:hover,\n#sidebarTabs .tabContents {\n background-color: #666;\n}\n\n.listTitle{color: #FFF;}\n#sidebarTabs .tabContents a{\n color: #ffbf00;\n}\n\n#sidebarTabs .tabContents a:hover{\n color: #ff7f00;\n background: transparent;\n}\n\n#sidebarTabs .txtMoreTab .tabSelected,\n#sidebarTabs .txtMoreTab .tab:hover,\n#sidebarTabs .txtMoreTab .tabContents{\n color: #ffbf00;\n background: #4c4c4c;\n}\n\n#sidebarTabs .txtMoreTab .tabUnselected {\n color: #ffbf00;\n background: #5f5f5f;\n}\n\n.tab.tabSelected, .tab.tabSelected:hover{color: #ffbf00; border: 0; background-color: #4c4c4c;cursor:default;}\n.tab.tabUnselected {background-color: #666;}\n.tab.tabUnselected:hover{color:#ffbf00; border: 0;background-color: #4c4c4c;}\n.tabContents {\n background-color: #4c4c4c;\n border: 0;\n}\n.tabContents .tabContents{background: #666;}\n.tabContents .tabSelected{background: #666;}\n.tabContents .tabUnselected{background: #5f5f5f;}\n.tabContents .tab:hover{background: #666;}\n/*}}}*/\n/***\n!Message area styles /% ============================================================= %/\n***/\n/*{{{*/\n#messageArea {background-color: #666; color: #fff; border: 2px solid #ffbf00;}\n#messageArea a:link, #messageArea a:visited {color: #ffbf00; text-decoration:none;}\n#messageArea a:hover {color: #ff7f00;}\n#messageArea a:active {color: #ff7f00;}\n#messageArea .messageToolbar a{\n border: 1px solid #ffbf00;\n background: #4c4c4c;\n}\n/*}}}*/\n/***\n!Popup styles /% ============================================================= %/\n***/\n/*{{{*/\n#popup {color: #fff; background-color: #4c4c4c; border: 1px solid #ffbf00;}\n#popup a {color: #ffbf00; }\n#popup a:hover { background: transparent; color: #ff7f00; border: 0;}\n#popup hr {color: #ffbf00; background: #ffbf00;}\n/*}}}*/\n/***\n!Tiddler Display styles /% ============================================================= %/\n***/\n/*{{{*/\n.title{color: #fff;}\nh1, h2, h3, h4, h5 {\n color: #fff;\n background-color: transparent;\n border-bottom: 1px solid #333;\n}\n\n.subtitle{\n color: #666;\n}\n\n.viewer {color: #fff; }\n\n.viewer table{background: #666; color: #fff;}\n\n.viewer th {background-color: #996; color: #fff;}\n\n.viewer pre, .viewer code {color: #ddd; background-color: #4c4c4c; border: 1px solid #ffbf00;}\n\n.viewer hr {color: #666;}\n\n.tiddler .button {color: #4c4c4c;}\n.tiddler .button:hover { color: #ffbf00; background-color: #4c4c4c;}\n.tiddler .button:active {color: #ffbf00; background-color: #4c4c4c;}\n\n.toolbar {\n color: #4c4c4c;\n}\n\n.toolbar a.button,\n.editorFooter a{\n border: 0;\n}\n\n.footer {\n color: #ddd;\n}\n\n.selectedTiddler .footer {\n color: #888;\n}\n\n.highlight, .marked {\n color: #000;\n background-color: #ffe72f;\n}\n.editorFooter {\n color: #aaa;\n}\n\n.tab{\n-moz-border-radius-topleft: 3px;\n-moz-border-radius-topright: 3px;\n}\n\n.tagging,\n.tagged{\n background: #4c4c4c;\n border: 1px solid #4c4c4c; \n}\n\n.selected .tagging,\n.selected .tagged{\n background: #000;\n border: 1px solid #ffbf00;\n}\n\n.tagging .listTitle,\n.tagged .listTitle{\n color: #fff;\n}\n\n.tagging .button,\n.tagged .button{\n color: #ffbf00;\n border: 0;\n padding: 0;\n}\n\n.tagging .button:hover,\n.tagged .button:hover{\nbackground: transparent;\n}\n\n.cascade {\n background: #4c4c4c;\n color: #ddd;\n border: 1px solid #ffbf00;\n}\n/*}}}*/
<div class='header' macro='gradient vert #390108 #900'>\n<div class='headerShadow'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n<div class='headerForeground'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n</div>\n<div id='mainMenu'>\n<div refresh='content' tiddler='MainMenu'></div>\n<div refresh='content' tiddler='EditingOptions'></div>\n</div>\n<div id='sidebar'>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>
/*{{{*/\n* {\n margin: 0px;\n padding: 0px;\n font-family: Arial, Helvetica, sans-serif;\n}\n\npre{\n font-family: monospace !important;\n}\n\nbody {\n background-color: #fff; color: #333;\n}\n\n#header {\n color: #ff0084;\n padding: 0px;\n height: 1px;\n}\n\n#titleline{\n background-color: transparent;\n padding:0;\n visibility: hidden;\n}\n\n#displayArea {\n margin: 1em 17em 0em 2em;\n}\n\na {\n color: #0063dc;\n text-decoration: none;\n background: transparent;\n}\n\na:hover, a:active {\n color: #ff0084;\n text-decoration: none;\n}\n\n/* HEADER ========================================================== */\n\n#siteTitle {\n font-size: 30px;\n}\n\n#siteSubtitle {\n font-size: 13px;\n padding-left: 10px;\n color: #ff0084;\n}\n\n#titleLine a {\n color: #0063dc;\n}\n\n#titleLine a:hover, #titleLine {\n color: #ff0084;\n}\n\n/* SIDEBARS ========================================================== */\n\n#mainMenu{\n position: static;\n width: 175px;\n margin-top: -8px;\n text-align: left;\n}\n\n#mainMenu h1,#mainMenu h2,#mainMenu h3{\n color: #ff0084;\n font-weight: bold;\n padding: 2px 0px 2px 0px;\n font-size: 13px;\n letter-spacing: .1em;\n border-bottom: dotted 1px #ccc;\n background-color: transparent;\n display: block;\n}\n\n#sidebar #mainMenu a.button:before, #sidebar #mainMenu a.tiddlyLink:before{\n content: "" !important;\n margin-left: 1em;\n}\n\n#mainMenu a.button,#mainMenu a.tiddlyLink {\n line-height: 1.75em;\n font-size: 12px;\n color: #0063dc;\n text-transform: capitalize;\n}\n\n#mainMenu a.externalLink{\n display: block;\n float: left;\n margin: 0 0 1em 0;\n padding: 0;\n text-align: left;\n line-height: 1em;\n font-size: 11px;\n color: #666;\n text-decoration: none;\n}\n\n#mainMenu a.button:hover,#mainMenu a.tiddlyLink:hover, #mainMenu a.externalLink:hover {\n color: #ff0084;\n background-color: transparent;\n}\n\n#mainMenu input{\n display: block;\n margin: 0 auto 0 1em;;\n}\n\n\n\n\n\n\n\n#contentWrapper #mainMenu a.tab{\n border: dotted 1px #ccc ;\n border-bottom: 0;\n font-weight: bold;\n}\n\n#contentWrapper #mainMenu a.tabSelected{\n padding-bottom: 4px;\n background-color: #fff;\n color: #ff0084;\n}\n\n#contentWrapper #mainMenu a.tabUnselected{\n padding-bottom: 3px;\n}\n\n#contentWrapper #mainMenu .tabset{\n border-bottom: dotted 1px #ccc;\n}\n\n#contentWrapper #mainMenu .tabContents{\n font-size: 11px;\n background-color: transparent;\n border: 0;\n}\n\n#contentWrapper #mainMenu .tabContents a{\n line-height: 1.5em;\n}\n\n#contentWrapper #mainMenu .tabContents a:hover{\n color: #ff0084;\n}\n\n#mainMenu .sliderPanel{\n border: dotted 1px #ccc;\n margin: 3px;\n padding: 5px 5px 15px 5px;\n font-size: 11px;\n text-align: left;\n line-height: 1em;\n}\n\n#mainMenu .sliderPanel a{\n font-weight: normal;\n font-size: 11px;\n}\n\n#mainMenu .sliderPanel input{\n display: inline;\n}\n\n#optionsPanel {\n display: none;\n padding: 4px;\n font-size: 11px;\n border: dotted 1px #ccc;\n text-align: left;\n}\n\n#optionsPanel div{\n margin: 5px 0;\n}\n\n#optionsPanel a {\n display: inline;\n font-weight: normal;\n}\n\n#optionsPanel a:hover, #optionsPanel a:active {\n color: #ff0084;\n}\n\n#optionsPanel input {\n float: left;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n#sidebar {\n float: right;\n width: 18em;\n background-color: transparent;\n}\n\n#sidebarOptions{\n display:none\n}\n\n#sidebarTabs{\n background-color: transparent;\n}\n\n#contentWrapper #sidebar a.tab {\n font-weight: bold;\n}\n\n#contentWrapper #sidebar a.tabSelected {\n font-size: 16px;\n color: #ff0084 !important;\n background-color: #fff !important;\n padding: 2px 4px 4px 4px;\n border: 1px solid #e6e6e6;\n border-bottom: 0;\n}\n\n#contentWrapper #sidebar a.tabUnselected {\n font-size: 14px;\n color: #0063dc !important;\n background-color: #e6e6e6 !important;\n padding: 2px 4px 2px 4px;\n}\n\n#contentWrapper #sidebar a.tab:hover {\n color: #ff0084 !important;\n text-decoration: none;\n}\n\n#contentWrapper #sidebar .tabContents{\n border: 1px solid #e6e6e6;\n}\n\n#contentWrapper #sidebar .tabContents a{\n color: #0063dc;\n line-height: 1.6em;\n margin-left: -.5em;\n}\n\n#contentWrapper #sidebar .tabContents a:hover{\n color: #ff0084;\n background-color: transparent;\n}\n\n#contentWrapper #sidebar .tabContents a:before{\n color: #ff0084;\n font-weight: bold;\n content: "ยป ";\n margin-right: .5em;\n}\n\n#popup{\n color: #000;\n background-color: #fff;\n text-align: left;\n}\n\n#popup hr{\n border: 0;\n border-top: solid 1px #e6e6e6;\n height: 1px;\n color: #e6e6e6;\n width: 98%;\n\n}\n\n#popup a{\n color: #ff0084;\n background-color: #fff;\n}\n\n#popup a:hover{\n color: #0063dc;\n background-color: #fff;\n}\n\n/* SIDEBAR (RIGHT) =============================================================*/\n/* SIDEBAR (RIGHT) =============================================================*/\n/* SIDEBAR (RIGHT) =============================================================*/\n/* SIDEBAR (RIGHT) =============================================================*/\n\n\n#sidebarTabs {\n padding: 8px 0 0 10px;\n}\n\n#sidebarTabs a {\n/* color: #fff;*/\n padding: 2px 8px 1px 8px;\n height: 22px;\n}\n\n#sidebarTabs a:hover {\n}\n\n#sidebarContent {\n padding: 0 10px 10px 10px;\n font-size: 11px;\n clear: both;\n border-left: solid 1px #e6e6e6;\n}\n\n#sidebarContent br{\n display: none;\n}\n\n.sidebarSubHeading {\n padding: 8px 0 0 0;\n display: block;\n width: 100%;\n color: #000;\n}\n\n#sidebarContent a {\n display: block;\n margin: 5px 0 1px 12px;\n}\n\n#sidebarContent span.arrows {\n float: left;\n font-weight: bold;\n color: #ff0084;\n margin-top: 5px;\n}\n\n#sidebarContent a:hover {\n}\n\n/*===================================================================*/\n/*===================================================================*/\n/*===================================================================*/\n/*===================================================================*/\n/*===================================================================*/\n\n#contentWrapper a.tab {\n font-weight: normal;\n display: inline;\n margin: 0px 1px; \n}\n\n#contentWrapper a.tabSelected {\n background-color: #fff !important;\n padding: 2px 4px 2px 4px;\n border: 1px solid #666;\n border-bottom: 0;\n}\n\n#contentWrapper a.tabUnselected {\n background-color: #e6e6e6 !important;\n padding: 2px 4px 0px 4px;\n}\n\n#contentWrapper .selectedTiddler a.tabSelected {\n color: #ff0084 !important;\n}\n\n#contentWrapper .selectedTiddler a.tabUnselected {\n color: #0063dc !important;\n}\n\n#contentWrapper .selectedTiddler a.tab:hover {\n color: #ff0084 !important;\n text-decoration: none;\n}\n\n/*===========================================================================================*/\n/*===========================================================================================*/\n#sidebarTabs{\n margin: 0;\n padding: 0;\n}\n\n#contentWrapper .tabContents {\n background-color: transparent;\n border:1px solid #666;\n}\n\n#contentWrapper .tabContents a.tiddlyLink, #contentWrapper .tabContents a.button{\n background-color: transparent;\n}\n\n#contentWrapper .tabContents a:hover{\n color: #b44;\n}\n\n#contentWrapper .txtMoreTab a.tabUnselected {\n background-color: #f5d7b4 !important;\n padding: 2px 4px 0px 4px;\n color: #000;\n}\n\n#contentWrapper .txtMoreTab a.tabSelected {\n background-color: #cf936c !important;\n padding: 2px 4px 2px 4px;\n color: #000;\n}\n\n.txtMoreTab .tabContents {\n background-color: #cf936c !important;\n border-bottom: solid #aaa 1px;\n color: #fff;\n}\n\n.txtMoreTab .tabContents a{\n background-color: transparent;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* TIDDLER DISPLAY/EDIT SPACE ========================================================== */\n\n#contentWrapper .tiddler {\n margin: 0 0 10px 0;\n padding: 0 15px !important;\n border: dotted 1px #fff;\n color: #666;\n}\n\n.tiddler .title {\n background-color: #e9e9e9;\n}\n\n.selectedTiddler {\n border: dotted 1px #ccc;\n margin: -1px;\n}\n\n.selectedTiddler .viewer {\n color: #000 !important; \n}\n\n.selectedTiddler .viewer * {\n color: #000;\n}\n\n.selectedTiddler .viewer h2, .selectedTiddler .viewer h4, .selectedTiddler .viewer h6, .selectedTiddler .viewer h3, .selectedTiddler .viewer h5 {\n color: #0063dc;\n}\n\n.selectedTiddler .viewer pre,.selectedTiddler .viewer li{\n color: #000 !important;\n}\n\n.selectedTiddler .title {\n color: #ff0084;\n background-color: #e9e9e9;\n}\n\n#contentWrapper .selectedTiddler .viewer a {\n color: #0063dc;\n background-color: transparent;\n}\n\n#contentWrapper .selectedTiddler .viewer a:hover {\n color: #ff0084;\n \n}\n\n#messageArea {\n font-size: 13px;\n font-weight: bold;\n padding: 5px;\n margin: 10px 20px;\n color: #ff0084;\n border: dotted 1px #ccc;\n text-align: center;\n background: transparent;\n}\n\n#messageArea a {\n color: #0063dc !important;\n}\n\n#messageArea a:hover {\n color: #ff0084 !important;\n}\n\n#displayArea .tiddlyLinkExisting {\n font-weight: bold;\n text-decoration: none;\n}\n\n#displayArea .tiddlyLinkNonExisting {\n font-style: italic;\n text-decoration: none;\n}\n\n#displayArea .externalLink {\n text-decoration: underline;\n}\n\n.title {\n font-size: 1.3em;\n padding: 0 0 0 0;\n font-weight: bold;\n display: block;\n color: #0063dc;\n}\n\n.toolbar {\n font-weight: normal;\n font-size: 11px;\n visibility: hidden;\n text-align: right;\n padding: 0 0 5px 0;\n margin: -8px 0 0 0;\n}\n\n.toolbar a.button {\n padding: 1px 5px;\n color: #fff;\n text-decoration: none;\n border: 1px outset #0063dc;\n background: #0063dc;\n}\n\n.toolbar a.button:hover {\n color: #fff;\n background: #ff0084;\n border: 1px outset #ff0084;\n}\n\n.toolbar a.button:active {\n color: #fff;\n background: #ff0084;\n border: 1px inset #ff0084;\n}\n\n.tagLinks {\n padding-top: 5px;\n margin-top: 10px;\n border-top: 1px dotted #ccc;\n color: #aaa;\n}\n\n.tagLinks a {\n color: #aaa;\n}\n\n.selectedTiddler .tagLinks a {\n color: #0063dc;\n}\n\n.tagLinks a:hover {\n color: #ff0084;\n}\n\n\n#contentWrapper .viewer {\n line-height: 140%;\n color: #666;\n}\n\n#contentWrapper .viewer a{\n font-weight: bold;\n color: #666;\n text-decoration: none;\n background-color: transparent;\n}\n\n#contentWrapper .viewer h1, #contentWrapper .viewer h2, #contentWrapper .viewer h3, #contentWrapper .viewer h4, #contentWrapper .viewer h5, #contentWrapper .viewer h6{\n background-color: transparent;\n border-bottom: 1px dotted #666;\n margin-bottom: .25em;\n}\n\n.viewer blockquote {\n border-left: 3px solid #777;\n margin: 5px;\n padding: 5px;\n}\n\n.viewer ul {\n padding-left: 30px;\n}\n\n.viewer ol {\n padding-left: 30px;\n}\n\nol\n{\n list-style-type: decimal;\n}\n\nol ol\n{\n list-style-type: lower-alpha;\n}\n\nol ol ol\n{\n list-style-type: lower-roman;\n}\n\n.viewer ul, .viewer ol, .viewer p {\n margin: 5px 0 12px 0;\n}\n\n.viewer li {\n margin: 3px 0;\n}\n\n.viewer pre{\n font-family: monspace;\n}\n\nh2,h3,h4,h5,h6 {\n font-weight: bold;\n}\n\n#contentWrapper .viewer *{\n color: #666;\n}\n\n\n.viewer h2 {\n font-size: 1.2em;\n}\n\n.viewer h3 {\n font-size: 1.1em;\n font-style: italic;\n}\n\n.viewer h4 {\n font-size: 1em;\n}\n\n.viewer h5 {\n font-size: .9em;\n font-style: italic;\n}\n\n.viewer h6 {\n font-size: .8em;\n}\n\n.viewer table {\n border-collapse: collapse;\n border: 2px solid #303030;\n font-size: 11px;\n margin: 10px 0;\n}\n\n.viewer th {\n background: #eee;\n border: 1px solid #aaa;\n padding: 3px;\n}\n\n.viewer td {\n border: 1px solid #aaa;\n padding: 3px;\n}\n\n.viewer caption {\n padding: 3px;\n}\n\n.viewer hr {\n border: none;\n border-top: dotted 1px #777;\n height: 1px;\n color: #fff;\n margin: 7px 0;\n}\n\n.body {\n margin: 5px 0 0px 0;\n padding: 5px 0;\n/* border-top: 1px dotted #ccc;*/\n}\n\n.highlight {\n color: #000;\n background: #ffe72f;\n}\n\n.editor {\n font-size: 8pt;\n color: #402c74;\n font-weight: normal;\n padding: 10px 0;\n}\n\n.editor input, .editor textarea {\n display: block;\n font: 13px/130% "Andale Mono", "Monaco", "Lucida Console", "Courier New", monospace;\n margin: 0 0 10px 0;\n border: 1px inset #333;\n padding: 2px 0;\n}\n\n.editor textarea {\n height: 500px;\n}\n\n.footer a.button,.editorFooter a.button{\n color: #e6e6e6;\n}\n\n.selectedTiddler .footer a.button,\n.selectedTiddler .editorFooter a.button{\n color: #0063dc;\n}\n\n.selectedTiddler .footer a.button:hover,\n.selectedTiddler .editorFooter a.button:hover{\n color: #ff0084;\n background-color: transparent;\n}\n\ninput:focus, textarea:focus {\n background: #ffe;\n border: 1px solid #000 !important;\n}\n\n#storeArea, #copyright {\n display: none;\n}\n\n.zoomer {\n border: 1px solid #0063dc;\n color: #9cf;\n width: 1px;\n}\n/*}}}*/\n
<div id='header'>\n<div id='titleline'>\n<span id='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span id='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n</div>\n<div id='sidebar'>\n<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>
StyleSheetLayout\nStyleSheetColors\nSideBarTabs\n\n[[internal link(not existing)]]\n[[internal link(exists)|StyleSheet]]\n[[external link|http://www.tiddlywiki.com]]\n[[a pretty link that doesn't exist|blahBlueBlah]]\n\n<<newTiddler>>\n\n!Header 1\n!!Header 2\n!!!Header 3\n!!!!Header 4\n!!!!!Header 5\n\n''Bold''\n==Strike==\n__Underline__\n//Italic//\n2^^3^^=8\na~~ij~~ = -a~~ji~~\n@@highlight@@\n@@color(green):green colored@@\n@@bgcolor(#ff0000):color(#ffffff):red colored@@\n\n[img[Selectutorial|http://css.maxdesign.com.au/selectutorial/images/header.gif][http://css.maxdesign.com.au/selectutorial/]]\n\n{{{\n Preformated text\n}}}\n\nI think this is {{{rendered as code}}}.\n\nTo make quoted bits of text stand out, you can use BlockQuotes within your [[tiddler]]s, like this:\n\nJeremyRuston said:\n<<<\nA TiddlyWiki is like a blog because it's divided up into neat little chunks, but it encourages you to read it by hyperlinking rather than sequentially: if you like, a non-linear blog analogue that binds the individual microcontent items into a cohesive whole.\n<<<\n\nLike BulletPoints and NumberedBulletPoints, you can have three different levels of BlockQuotes. Just [[edit]] this tiddler to see how it's done.\n\n>level 1\n>level 1\n>>level 2\n>>level 2\n>>>level 3\n>>>level 3\n>>level 2\n>level 1\n\nCreating BulletPoints is simple.\n* Just add an asterisk\n* at the beginning of a line.\n** If you want to create sub-bullets\n** start the line with two asterisks\n*** And if you want yet another level\n*** use three asterisks\n* Edit this tiddler to see how it's done\n* You can also do NumberedBulletPoints\n\nIt's easy to create NumberedBulletPoints.\n# Use a single '#' at the start of each line\n# and the tiddler will automatically\n# start numbering your list.\n## If you want a sub-list\n## within any bullets\n## add two '#'s at the start of the lines.\n# When you go back to a single '#'\n# the main numbered list will start up\n# where it left off.\nIt's just as simple to do normal BulletPoints.\n\nEdit this tiddler to see how to insert images.\n[img[Fractal vegetable|fractalveg.jpg]]\n(This curious vegetable is called 'Romanesque broccoli' and is one of [[my photos|http://www.flickr.com/photos/jermy/]])\n\nYou can divide a tiddler into\n----\nsections by typing four dashes on a line by themselves\n\n*sample:\n|!th1111111111|!th2222222222|\n|>| colspan |\n| rowspan |left|\n|~| right|\n|bgcolor(#a0ffa0):colored| center |\n|caption|c\n\n*sample (changed caption and table headers):\n|caption|c\n|th1111111111|th2222222222|h\n|>| colspan |\n| rowspan |left|\n|~| right|\n|bgcolor(#a0ffa0):colored| center |\n\n|Standard Periodic Table (ref. Wikipedia)|c\n|| !1 | !2 |!| !3 | !4 | !5 | !6 | !7 | !8 | !9 | !10 | !11 | !12 | !13 | !14 | !15 | !16 | !17 | !18 |\n|!1|bgcolor(#a0ffa0): @@color(red):H@@ |>|>|>|>|>|>|>|>|>|>|>|>|>|>|>|>||bgcolor(#c0ffff): @@color(red):He@@ |\n|!2|bgcolor(#ff6666): Li |bgcolor(#ffdead): Be |>|>|>|>|>|>|>|>|>|>||bgcolor(#cccc99): B |bgcolor(#a0ffa0): C |bgcolor(#a0ffa0): @@color(red):N@@ |bgcolor(#a0ffa0): @@color(red):O@@ |bgcolor(#ffff99): @@color(red):F@@ |bgcolor(#c0ffff): @@color(red):Ne@@ |\n|!3|bgcolor(#ff6666): Na |bgcolor(#ffdead): Mg |>|>|>|>|>|>|>|>|>|>||bgcolor(#cccccc): Al |bgcolor(#cccc99): Si |bgcolor(#a0ffa0): P |bgcolor(#a0ffa0): S |bgcolor(#ffff99): @@color(red):Cl@@ |bgcolor(#c0ffff): @@color(red):Ar@@ |\n|!4|bgcolor(#ff6666): K |bgcolor(#ffdead): Ca ||bgcolor(#ffc0c0): Sc |bgcolor(#ffc0c0): Ti |bgcolor(#ffc0c0): V |bgcolor(#ffc0c0): Cr |bgcolor(#ffc0c0): Mn |bgcolor(#ffc0c0): Fe |bgcolor(#ffc0c0): Co |bgcolor(#ffc0c0): Ni |bgcolor(#ffc0c0): Cu |bgcolor(#ffc0c0): Zn |bgcolor(#cccccc): Ga |bgcolor(#cccc99): Ge |bgcolor(#cccc99): As |bgcolor(#a0ffa0): Se |bgcolor(#ffff99): @@color(green):Br@@ |bgcolor(#c0ffff): @@color(red):Kr@@ |\n|!5|bgcolor(#ff6666): Rb |bgcolor(#ffdead): Sr ||bgcolor(#ffc0c0): Y |bgcolor(#ffc0c0): Zr |bgcolor(#ffc0c0): Nb |bgcolor(#ffc0c0): Mo |bgcolor(#ffc0c0): Tc |bgcolor(#ffc0c0): Ru |bgcolor(#ffc0c0): Rh |bgcolor(#ffc0c0): Pd |bgcolor(#ffc0c0): Ag |bgcolor(#ffc0c0): Cd |bgcolor(#cccccc): In |bgcolor(#cccccc): Sn |bgcolor(#cccc99): Sb |bgcolor(#cccc99): Te |bgcolor(#ffff99): I |bgcolor(#c0ffff): @@color(red):Xe@@ |\n|!6|bgcolor(#ff6666): Cs |bgcolor(#ffdead): Ba |bgcolor(#ffbfff):^^*1^^|bgcolor(#ffc0c0): Lu |bgcolor(#ffc0c0): Hf |bgcolor(#ffc0c0): Ta |bgcolor(#ffc0c0): W |bgcolor(#ffc0c0): Re |bgcolor(#ffc0c0): Os |bgcolor(#ffc0c0): Ir |bgcolor(#ffc0c0): Pt |bgcolor(#ffc0c0): Au |bgcolor(#ffc0c0): @@color(green):Hg@@ |bgcolor(#cccccc): Tl |bgcolor(#cccccc): Pb |bgcolor(#cccccc): Bi |bgcolor(#cccc99): Po |bgcolor(#ffff99): At |bgcolor(#c0ffff): @@color(red):Rn@@ |\n|!7|bgcolor(#ff6666): Fr |bgcolor(#ffdead): Ra |bgcolor(#ff99cc):^^*2^^|bgcolor(#ffc0c0): Lr |bgcolor(#ffc0c0): Rf |bgcolor(#ffc0c0): Db |bgcolor(#ffc0c0): Sq |bgcolor(#ffc0c0): Bh |bgcolor(#ffc0c0): Hs |bgcolor(#ffc0c0): Mt |bgcolor(#ffc0c0): Ds |bgcolor(#ffc0c0): Rg |bgcolor(#ffc0c0): @@color(green):Uub@@ |bgcolor(#cccccc): Uut |bgcolor(#cccccc): Uuq |bgcolor(#cccccc): Uup |bgcolor(#cccccc): Uuh |bgcolor(#fcfecc): @@color(#cccccc):Uus@@ |bgcolor(#ecfefc): @@color(#cccccc):Uuo@@ |\n\n| !Lanthanides^^*1^^|bgcolor(#ffbfff): La |bgcolor(#ffbfff): Ce |bgcolor(#ffbfff): Pr |bgcolor(#ffbfff): Nd |bgcolor(#ffbfff): Pm |bgcolor(#ffbfff): Sm |bgcolor(#ffbfff): Eu |bgcolor(#ffbfff): Gd |bgcolor(#ffbfff): Tb |bgcolor(#ffbfff): Dy |bgcolor(#ffbfff): Ho |bgcolor(#ffbfff): Er |bgcolor(#ffbfff): Tm |bgcolor(#ffbfff): Yb |\n| !Actinides^^*2^^|bgcolor(#ff99cc): Ac |bgcolor(#ff99cc): Th |bgcolor(#ff99cc): Pa |bgcolor(#ff99cc): U |bgcolor(#ff99cc): Np |bgcolor(#ff99cc): Pu |bgcolor(#ff99cc): Am |bgcolor(#ff99cc): Cm |bgcolor(#ff99cc): Bk |bgcolor(#ff99cc): Cf |bgcolor(#ff99cc): Es |bgcolor(#ff99cc): Fm |bgcolor(#ff99cc): Md |bgcolor(#ff99cc): No |\n\n*Chemical Series of the Periodic Table\n**@@bgcolor(#ff6666): Alkali metals@@\n**@@bgcolor(#ffdead): Alkaline earth metals@@\n**@@bgcolor(#ffbfff): Lanthanides@@\n**@@bgcolor(#ff99cc): Actinides@@\n**@@bgcolor(#ffc0c0): Transition metals@@\n**@@bgcolor(#cccccc): Poor metals@@\n**@@bgcolor(#cccc99): Metalloids@@\n**@@bgcolor(#a0ffa0): Nonmetals@@\n**@@bgcolor(#ffff99): Halogens@@\n**@@bgcolor(#c0ffff): Noble gases@@\n\n*State at standard temperature and pressure\n**those in @@color(red):red@@ are gases\n**those in @@color(green):green@@ are liquids\n**those in black are solids
StyleSheetLayout\nStyleSheetColors\nSideBarTabs\n\n[[internal link(not existing)]]\n[[internal link(exists)|StyleSheet]]\n[[external link|http://www.tiddlywiki.com]]\n[[a pretty link that doesn't exist|blahBlueBlah]]\n\n<<newTiddler>>\n\n!Header 1\n!!Header 2\n!!!Header 3\n!!!!Header 4\n!!!!!Header 5\n\n''Bold''\n==Strike==\n__Underline__\n//Italic//\n2^^3^^=8\na~~ij~~ = -a~~ji~~\n@@highlight@@\n@@color(green):green colored@@\n@@bgcolor(#ff0000):color(#ffffff):red colored@@\n\n[img[Selectutorial|http://css.maxdesign.com.au/selectutorial/images/header.gif][http://css.maxdesign.com.au/selectutorial/]]\n\n{{{\n Preformated text\n}}}\n\nI think this is {{{rendered as code}}}.\n\nTo make quoted bits of text stand out, you can use BlockQuotes within your [[tiddler]]s, like this:\n\nJeremyRuston said:\n<<<\nA TiddlyWiki is like a blog because it's divided up into neat little chunks, but it encourages you to read it by hyperlinking rather than sequentially: if you like, a non-linear blog analogue that binds the individual microcontent items into a cohesive whole.\n<<<\n\nLike BulletPoints and NumberedBulletPoints, you can have three different levels of BlockQuotes. Just [[edit]] this tiddler to see how it's done.\n\n>level 1\n>level 1\n>>level 2\n>>level 2\n>>>level 3\n>>>level 3\n>>level 2\n>level 1\n\nCreating BulletPoints is simple.\n* Just add an asterisk\n* at the beginning of a line.\n** If you want to create sub-bullets\n** start the line with two asterisks\n*** And if you want yet another level\n*** use three asterisks\n* Edit this tiddler to see how it's done\n* You can also do NumberedBulletPoints\n\nIt's easy to create NumberedBulletPoints.\n# Use a single '#' at the start of each line\n# and the tiddler will automatically\n# start numbering your list.\n## If you want a sub-list\n## within any bullets\n## add two '#'s at the start of the lines.\n# When you go back to a single '#'\n# the main numbered list will start up\n# where it left off.\n\nIt's just as simple to do normal BulletPoints.\n\nEdit this tiddler to see how to insert images.\n[img[Fractal vegetable|fractalveg.jpg]]\n(This curious vegetable is called 'Romanesque broccoli' and is one of [[my photos|http://www.flickr.com/photos/jermy/]])\n\nYou can divide a tiddler into\n----\nsections by typing four dashes on a line by themselves\n\n*sample:\n|!th1111111111|!th2222222222|\n|>| colspan |\n| rowspan |left|\n|~| right|\n|bgcolor(#a0ffa0):colored| center |\n|caption|c\n\n*sample (changed caption and table headers):\n|caption|c\n|th1111111111|th2222222222|h\n|>| colspan |\n| rowspan |left|\n|~| right|\n|bgcolor(#a0ffa0):colored| center |\n\n|Standard Periodic Table (ref. Wikipedia)|c\n|| !1 | !2 |!| !3 | !4 | !5 | !6 | !7 | !8 | !9 | !10 | !11 | !12 | !13 | !14 | !15 | !16 | !17 | !18 |\n|!1|bgcolor(#a0ffa0): @@color(red):H@@ |>|>|>|>|>|>|>|>|>|>|>|>|>|>|>|>||bgcolor(#c0ffff): @@color(red):He@@ |\n|!2|bgcolor(#ff6666): Li |bgcolor(#ffdead): Be |>|>|>|>|>|>|>|>|>|>||bgcolor(#cccc99): B |bgcolor(#a0ffa0): C |bgcolor(#a0ffa0): @@color(red):N@@ |bgcolor(#a0ffa0): @@color(red):O@@ |bgcolor(#ffff99): @@color(red):F@@ |bgcolor(#c0ffff): @@color(red):Ne@@ |\n|!3|bgcolor(#ff6666): Na |bgcolor(#ffdead): Mg |>|>|>|>|>|>|>|>|>|>||bgcolor(#cccccc): Al |bgcolor(#cccc99): Si |bgcolor(#a0ffa0): P |bgcolor(#a0ffa0): S |bgcolor(#ffff99): @@color(red):Cl@@ |bgcolor(#c0ffff): @@color(red):Ar@@ |\n|!4|bgcolor(#ff6666): K |bgcolor(#ffdead): Ca ||bgcolor(#ffc0c0): Sc |bgcolor(#ffc0c0): Ti |bgcolor(#ffc0c0): V |bgcolor(#ffc0c0): Cr |bgcolor(#ffc0c0): Mn |bgcolor(#ffc0c0): Fe |bgcolor(#ffc0c0): Co |bgcolor(#ffc0c0): Ni |bgcolor(#ffc0c0): Cu |bgcolor(#ffc0c0): Zn |bgcolor(#cccccc): Ga |bgcolor(#cccc99): Ge |bgcolor(#cccc99): As |bgcolor(#a0ffa0): Se |bgcolor(#ffff99): @@color(green):Br@@ |bgcolor(#c0ffff): @@color(red):Kr@@ |\n|!5|bgcolor(#ff6666): Rb |bgcolor(#ffdead): Sr ||bgcolor(#ffc0c0): Y |bgcolor(#ffc0c0): Zr |bgcolor(#ffc0c0): Nb |bgcolor(#ffc0c0): Mo |bgcolor(#ffc0c0): Tc |bgcolor(#ffc0c0): Ru |bgcolor(#ffc0c0): Rh |bgcolor(#ffc0c0): Pd |bgcolor(#ffc0c0): Ag |bgcolor(#ffc0c0): Cd |bgcolor(#cccccc): In |bgcolor(#cccccc): Sn |bgcolor(#cccc99): Sb |bgcolor(#cccc99): Te |bgcolor(#ffff99): I |bgcolor(#c0ffff): @@color(red):Xe@@ |\n|!6|bgcolor(#ff6666): Cs |bgcolor(#ffdead): Ba |bgcolor(#ffbfff):^^*1^^|bgcolor(#ffc0c0): Lu |bgcolor(#ffc0c0): Hf |bgcolor(#ffc0c0): Ta |bgcolor(#ffc0c0): W |bgcolor(#ffc0c0): Re |bgcolor(#ffc0c0): Os |bgcolor(#ffc0c0): Ir |bgcolor(#ffc0c0): Pt |bgcolor(#ffc0c0): Au |bgcolor(#ffc0c0): @@color(green):Hg@@ |bgcolor(#cccccc): Tl |bgcolor(#cccccc): Pb |bgcolor(#cccccc): Bi |bgcolor(#cccc99): Po |bgcolor(#ffff99): At |bgcolor(#c0ffff): @@color(red):Rn@@ |\n|!7|bgcolor(#ff6666): Fr |bgcolor(#ffdead): Ra |bgcolor(#ff99cc):^^*2^^|bgcolor(#ffc0c0): Lr |bgcolor(#ffc0c0): Rf |bgcolor(#ffc0c0): Db |bgcolor(#ffc0c0): Sq |bgcolor(#ffc0c0): Bh |bgcolor(#ffc0c0): Hs |bgcolor(#ffc0c0): Mt |bgcolor(#ffc0c0): Ds |bgcolor(#ffc0c0): Rg |bgcolor(#ffc0c0): @@color(green):Uub@@ |bgcolor(#cccccc): Uut |bgcolor(#cccccc): Uuq |bgcolor(#cccccc): Uup |bgcolor(#cccccc): Uuh |bgcolor(#fcfecc): @@color(#cccccc):Uus@@ |bgcolor(#ecfefc): @@color(#cccccc):Uuo@@ |\n\n| !Lanthanides^^*1^^|bgcolor(#ffbfff): La |bgcolor(#ffbfff): Ce |bgcolor(#ffbfff): Pr |bgcolor(#ffbfff): Nd |bgcolor(#ffbfff): Pm |bgcolor(#ffbfff): Sm |bgcolor(#ffbfff): Eu |bgcolor(#ffbfff): Gd |bgcolor(#ffbfff): Tb |bgcolor(#ffbfff): Dy |bgcolor(#ffbfff): Ho |bgcolor(#ffbfff): Er |bgcolor(#ffbfff): Tm |bgcolor(#ffbfff): Yb |\n| !Actinides^^*2^^|bgcolor(#ff99cc): Ac |bgcolor(#ff99cc): Th |bgcolor(#ff99cc): Pa |bgcolor(#ff99cc): U |bgcolor(#ff99cc): Np |bgcolor(#ff99cc): Pu |bgcolor(#ff99cc): Am |bgcolor(#ff99cc): Cm |bgcolor(#ff99cc): Bk |bgcolor(#ff99cc): Cf |bgcolor(#ff99cc): Es |bgcolor(#ff99cc): Fm |bgcolor(#ff99cc): Md |bgcolor(#ff99cc): No |\n\n*Chemical Series of the Periodic Table\n**@@bgcolor(#ff6666): Alkali metals@@\n**@@bgcolor(#ffdead): Alkaline earth metals@@\n**@@bgcolor(#ffbfff): Lanthanides@@\n**@@bgcolor(#ff99cc): Actinides@@\n**@@bgcolor(#ffc0c0): Transition metals@@\n**@@bgcolor(#cccccc): Poor metals@@\n**@@bgcolor(#cccc99): Metalloids@@\n**@@bgcolor(#a0ffa0): Nonmetals@@\n**@@bgcolor(#ffff99): Halogens@@\n**@@bgcolor(#c0ffff): Noble gases@@\n\n*State at standard temperature and pressure\n**those in @@color(red):red@@ are gases\n**those in @@color(green):green@@ are liquids\n**those in black are solids\n\n<<tiddler SideBarTabs>>
/***\n!GTD Style\n\n!Generic rules /%==================================================================== %/\n***/\n/*{{{*/\nbody {\n background: #464646 url('http://shared.snapgrid.com/images/tiddlywiki/bodygradient.png') repeat-x top fixed;\n color: #000;\n font: .82em/1.25em "Bitstream Vera Sans", Verdana, Helvetica, Arial, sans-serif;\n/*"Lucida Sans Unicode", "Lucida Grande","Trebuchet MS", */\n}\n/*}}}*/\n/***\n!Header rules /%====================================================================== %/\n***/\n/*{{{*/\n#contentWrapper\n{\n margin: 0 auto;\nwidth: 59em;\nposition: relative;\n}\n\n#header\n{\n color: #fff;\n padding: 1.5em 1em .6em 0;\n}\n\n#siteTitle {\n\n font-size: 2.3em;\n margin: 0;\n}\n\n#siteSubtitle {\n font-size: 1em;\n padding-left: .8em;;\n}\n\n#titleLine{\n background: transparent;\n padding: 0;\n}\n\n#titleLine a {\n color: #cf6;\n}\n\n#titleLine a:hover {\n background: transparent;\n}\n/*}}}*/\n/***\n!Sidebar rules /%====================================================================== %/\n***/\n/*{{{*/\n#sidebar{\n left: 0;\nwidth: 18em;\n margin: .9em .9em 0 0;\n color: #000;\n background: transparent;\n}\n/*}}}*/\n/***\n!Main menu rules /%=================================================================== %/\n***/\n/*{{{*/\n#mainMenu{\n position: static;\n width: auto;\n\n background: #600;\n border-right: 3px solid #500;\npadding: 0;\n text-align: left;\n font-size: 1em;\n}\n\n#mainMenu h1{\n padding: 5px;\n margin: 0;\n font-size: 1em;\n font-weight: bold;\n background: transparent;\n color: #fff;\n}\n\n#mainMenu ul{\n padding: 0;\n margin: 0;\n list-style: none;\n}\n\n#mainMenu h1 a,\n#mainMenu li a,\n#mainMenu li a.button{\n display: block;\n padding: 0 5px 0 10px;\nborder: 0;\n border-bottom: 1px solid #500;\n border-top: 1px solid #900;\nmargin: 0;\n}\n\n#mainMenu a,\n#mainMenu a.button{\n height: 22px;\nheight: 1.83em;\n line-height: 22px;\n color: #fff;\n background: #700;\nmargin-left: 1em;\n}\n\n#mainMenu a:hover,\n#mainMenu a.button:hover {\n background: #b00;\n color: #fff;\n}\n/*}}}*/\n/***\n!Sidebar options rules /%============================================================ %/\n***/\n/*{{{*/\n#sidebarOptions {\n background: #eeb;\n border-right: 3px solid #bb8;\n color: #B4C675;\n padding: .5em 0;\n}\n\n#sidebarOptions a {\n color: #700;\n margin: .2em .8em;\n padding: 0;\n border: 0;\n}\n\n#sidebarOptions a:hover, #sidebarOptions a:active {\n color: #fff;\n background: #700;\n border: 0;\n}\n\n#sidebarOptions input{\n margin: 2px 10px;\n border: 1px inset #333;\npadding: 0;\n}\n\n#sidebarOptions .sliderPanel {\n background: #fff;\n color: #000;\n padding: 5px 10px;\n font-size: .9em;\n}\n\n#sidebarOptions .sliderPanel a{\n font-weight: normal;\n margin: 0;\n}\n\n#sidebarOptions .sliderPanel a:link,#sidebarOptions .sliderPanel a:visited {\n color: #700;\n}\n\n#sidebarOptions .sliderPanel a:hover,#sidebarOptions .sliderPanel a:active {\n color: #fff;\n background: #700;\n}\n/*}}}*/\n/***\n!Sidebar tabs rules /%===================================================================== %/\n***/\n/*{{{*/\n#sidebarTabs {\n background: transparent;\n border-right: 3px solid #740;\n border-bottom: 3px solid #520;\n border: 0;\n padding: 0;\n}\n\n#contentWrapper #sidebarTabs a,\n#contentWrapper #displayArea .tabContents a{\n color: #fff;\n}\n\n#contentWrapper #sidebarTabs a:hover,\n#contentWrapper #displayArea .tabContents a:hover {\n background: #000;\n color: #fff;\n}\n\n#contentWrapper #sidebarTabs a:active,\n#contentWrapper #displayArea .tabContents a:active{\n color: #000;\n}\n\n\n\n#contentWrapper .tabSelected {\n background: #960;\n}\n\n#contentWrapper .tabUnselected{\n background: #660;\n}\n\n#contentWrapper #sidebar .tabset{\n background: #eeb;\n border-right: 3px solid #bb8;\n padding: 0 0 0 .75em;\n}\n\n#contentWrapper .tabContents{\nfont-size: .95em;\nbackground: #960;\nborder:0;\n border-right: 3px solid #740;\n border-bottom: 3px solid #520;\n padding: .75em;\n}\n\n#contentWrapper .tabContents{\n width: auto;\n}\n\n#contentWrapper #sidebarTabs .tabContents .tabset,\n#contentWrapper .tabContents .tabset{\n border: 0;\n padding: 0;\n background: transparent;\n}\n\n#contentWrapper .tabContents .tabSelected,\n#contentWrapper .tabContents .tabContents {\n background: #700;\n border: 0;\n}\n\n#contentWrapper .tabContents .tabUnselected {\n background: #440;\n}\n\n#contentWrapper .tabset a {\n color: #fff;\n padding: .2em .7em;\n margin: 0 .17em 0 0;\n height: 2em;\nposition: static;\n}\n\n#contentWrapper .tabset a:hover {\n background: #000;\n color: #fff;\n}\n\n#contentWrapper .tabset a:active {\n color: #000;\n}\n\n#contentWrapper .tabContents ul{\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n#contentWrapper .tabContents .tabContents ul{\n color: #eeb;\n}\n\n.tabContents ul a,\n.tabContents ul .button{\n color: #fff;\n display: block;\n padding: .1em 0 .1em .7em;\n background: transparent;\n border: 0;\n}\n\n.tabContents ul a:hover {\n color: #fff;\n background: #000;\n}\n/*}}}*/\n/***\n!License panel rules /%==================================================================== %/\n***/\n/*{{{*/\n#licensePanel {\n padding: 0px 1em;\n font-size: .9em;\n}\n\n#licensePanel a {\n color: #960;\n display: block;\n margin-top: .9em;\n}\n\n#licensePanel a:hover {\n color: #fff;\n background: transparent;\n}\n/*}}}*/\n/***\n!Popup rules /%================================================================= %/\n***/\n/*{{{*/\n.popup {\n font-size: .8em;\n padding: 0em;\n background: #333;\n border: 1px solid #000;\n}\n\n.popup hr {\n margin: 1px 0 0 0;\n visibility: hidden;\n}\n\n.popup li.disabled {\n color: #666;\n}\n\n.popup li a,\n.popup li a:visited{\n color: #000;\n border: .1em outset #cf6;\n background: #cf6;\n}\n\n.popup li a:hover {\nborder: .1em outset #cf6;\n background: #ef9;\n color: #000;\n}\n/*}}}*/\n/***\n!Message area rules /%================================================================= %/\n***/\n/*{{{*/\n#messageArea{\n font-size: .9em;\n padding: .4em;\n background: #FFE72F;\n border-right: .25em solid #da1;\n border-bottom: .25em solid #a80;\n\nposition: fixed;\n top: 10px;\n right: 10px;\n color: #000;\n}\n\n#contentWrapper #messageArea a{\n color: #00e;\n text-decoration: none;\n}\n\n#contentWrapper #messageArea a:hover{\n color: #00e;\n text-decoration: underline;\n background: transparent;\n}\n\n#contentWrapper #messageArea .messageToolbar a.button{\n border: 1px solid #da1;\n}\n\n#contentWrapper #messageArea .messageToolbar a.button:hover{\n color: #00e;\n text-decoration: none;\n border: 1px solid #000;\n background: #fff;\n}\n\n\n\n/*}}}*/\n/***\n!Tiddler display rules /%================================================================== %/\n***/\n/*{{{*/\n#displayArea {\n width: 39.75em;\n margin: 0 0 0 17em;\n}\n\n.tiddler {\n margin: 0 0 .9em 0;\n padding: 0 1em;\n border-right: .25em solid #aaa;\n border-bottom: .25em solid #555;\n background: #fff;\n}\n\n.title {\n font-size: 1.5em;\n font-weight: bold;\n color: #900;\n}\n\n.toolbar {\n font-size: .8em;\n padding: .5em 0;\n}\n\n.toolbar .button{\n padding: .1em .3em;\n color: #000;\n\n border: .1em outset #cf6;\n background: #cf6;\nmargin: .1em;\n}\n\n.toolbar .button:hover {\n background: #ef9;\n color: #000;\n}\n\n.toolbar .button:active {\n background: #ff0;\n}\n\n/*}}}*/\n/***\n!Viewer rules /% ------------------------------------------------------------------------------------------ %/\n***/\n/*{{{*/\n.viewer {\n line-height: 1.4em;\n font-size: 1em;\n}\n\n.viewer a:link, .viewer a:visited {\n color: #15b;\n}\n\n.viewer a:hover {\n color: #fff;\n background: #000;\n}\n\n.viewer .button{\n background: transparent;\n border-top: 1px solid #eee;\n border-left: 1px solid #eee;\n border-bottom: 1px solid #000;\n border-right: 1px solid #000;\n}\n\n.viewer .button:hover{\n background: #eee;\n color: #000;\n}\n\n.viewer .button:active{\n background: #ccc;\n border-bottom: 1px solid #eee;\n border-right: 1px solid #eee;\n border-top: 1px solid #111;\n border-left: 1px solid #111;\n}\n\n\n.viewer blockquote {\n border-left: 3px solid #777;\n margin: .3em;\n padding: .3em;\n}\n\n.viewer pre{\n background: #fefefe;\n border: 1px solid #f1f1f1;\n}\n\n.viewer pre, .viewer code{\n color: #000;\n}\n\n.viewer ul {\n padding-left: 30px;\n}\n\n.viewer ol {\n padding-left: 30px;\n}\nul{\nlist-style-type: asquare;\n}\nol{ \n list-style-type: decimal;\n}\n\nol ol{ \n list-style-type: lower-alpha;\n}\n\nol ol ol{ \n list-style-type: lower-roman;\n}\n\n.viewer ul, .viewer ol, .viewer p {\n margin: .0;\n}\n\n.viewer li {\n margin: .2em 0;\n}\n\nh1,h2,h3,h4,h5,h6 {\n color: #000;\n font-weight: bold;\n background: #eee;\n padding: 2px 10px;\n margin: 5px 0;\n}\n\n.viewer h1 {font-size: 1.3em;}\n.viewer h2 {font-size: 1.2em;}\n.viewer h3 {font-size: 1.1em;}\n.viewer h4 {font-size: 1em;}\n.viewer h5 { font-size: .9em;}\n.viewer h6 { font-size: .8em;}\n\n.viewer table {\n border: 2px solid #303030;\n font-size: 11px;\n margin: 10px 0;\n}\n\n.viewer th, .viewer thead td{\n color: #000;\n background: #eee;\n border: 1px solid #aaa;\n padding: 0 3px;\n}\n\n.viewer td {\n border: 1px solid #aaa;\n padding: 0 3px;\n}\n\n.viewer caption {\n padding: 3px;\n}\n\n.viewer hr {\n border: none;\n border-top: dotted 1px #777;\n height: 1px;\n color: #777;\n margin: 7px 0;\n}\n\n.viewer\n{\n margin: .5em 0 0 0;\n padding: .5em 0;\n border-top: 1px solid #ccc;\n}\n\n.highlight {\n color: #000;\n background: #ffe72f;\n}\n/*}}}*/\n/***\n!Editor rules /% ----------------------------------------------------------------------------------------- %/\n***/\n/*{{{*/\n.editor {\n font-size: .8em;\n color: #402C74;\n padding: .3em 0;\n}\n\n.editor input, .editor textarea {\n font: 1.1em/130% "Andale Mono", "Monaco", "Lucida Console", "Courier New", monospace;\n margin: 0;\n border: 1px inset #333;\n padding: 2px 0;\n}\n\n.editor textarea {\n height: 42em;\n width: 100%;\n}\n\ninput:focus, textarea:focus\n{\n background: #ffe;\n border: 1px solid #000;\n}\n.footer\n{\n padding: .5em 0;\n margin: .5em 0;\n border-top: 1px solid #ddd;\n color: #555;\n text-align: center; \n}\n/*}}}*/\n/***\n!IE Display hacks /% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%/\n***/\n/*{{{*/\nbody{\n _text-align: center;\n}\n\n#contentWrapper\n{\n/* _width: 770px; CSS UNDERSCORE HACK FOR PROPER WIN/IE DISPLAY */\n _text-align: left; /* CSS UNDERSCORE HACK FOR PROPER WIN/IE DISPLAY */ \n}\n\n#messageArea{\n _position: absolute;\n}\n/*}}}*/
<div id='header'>\n<div id='titleLine'>\n<span id='siteTitle' refresh='content' tiddler='SiteTitle'></span>\n<span id='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n</div>\n<div id='sidebar'>\n<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div><div id="licensePanel">\n<a rel="license" href="http://shared.snapgrid.com/gtd_tiddlywiki.html#RevisionHistory" target="_new">GTDTW Version <span macro="version"></span></a>\n<a rel="license" href="http://www.tiddlywiki.com" target="_new">\nTiddlyWiki is published by Jeremy Ruston at Osmosoft under a BSD open source license</a>\n<a rel="license" href="http://snapgrid.com" target="_new">GTD TiddlyWiki is a modification by Nathan Bowers at Snapgrid under the same license terms.</a>\n<a rel="license" href="http://davidco.com" target="_new">"Getting Things Done" is &#169; David Allen at Davidco. Davidco has no affiliation with TiddlyWiki or GTD TiddlyWiki.</a></div></div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>
/***\n!General Rules\n***/\n/*{{{*/\na,\n.button{\n color: #06c;\n text-decoration: none;\n background: transparent;\n}\n\na:hover,\n.button:hover{\n background: transparent;\n text-decoration: underline;\n color: #147;\n}\n\nbody {\n font-size: 62.5%; /* Resets 1em to 10px */\n font-family: 'Lucida Grande', Verdana, Arial, Sans-Serif;\n background-color: #d5d6d7;\n color: #666;\n background: #e7e7e7;\n margin: 0 auto;\n}\n\n#contentWrapper{\n background: transparent url("kubrickbg.jpg") repeat-y 0px 0px;\n border: 0;\n margin: 0 auto;\n width: 760px;\n}\n\n/*}}}*/\n/***\n!Header Rules\n***/\n/*{{{*/\n.titleLine{\n margin: 80px auto 0em;\n padding: 0;\n width: 745px;\n text-align: center;\n color: #fff;\n}\n\n.siteTitle{\n font-weight: bold;\n}\n\n.siteTitle a, .siteSubtitle a{\n color: #fff;\n}\n\n.siteTitle a:hover, .siteSubtitle a:hover{\n text-decoration: underline;\n}\n\n.siteSubtitle{\n display: block;\n margin: .5em auto 1em;\n}\n\n.header {\n background: url("kubrickheader.jpg") no-repeat bottom center; \n margin: 0;\n padding: 1px;\n height: 198px;\n width: 758px;\n\n}\n/*}}}*/\n/***\n!Footer Styles\n***/\n/*{{{*/\n#contentFooter {\n text-align: center;\n clear: both;\n background: url("kubrickfooter.jpg") no-repeat bottom;\n border: none;\n padding: 2em;\n height: 3em;\n}\n/*}}}*/\n\n\n/***\n!Sidebar styles /% ============================================== %/\n***/\n/*{{{*/\n#sidebar{\n margin: 1em 2em 0 0;\n position: static;\n float: right;\n}\n\n#sidebar a,\n#sidebar a:hover{\n border: 0;\n}\n\n#sidebar h1{\n font-size: 1.4em;\n font-weight: bold;\n margin: 0;\n background: transparent;\n color: #000;\n}\n\n#sidebar ul{\n padding: 0;\n margin: 0 0 0 1em;\n}\n\n#sidebar li{\n list-style: none;\n}\n\n#sidebar li:before{\n color: #000;\n content: "\s00BB \s0020";\n}\n\n#sidebar, #mainMenu, #sideBarOptions{\n width: 200px;\n text-align: left;\n}\n\n#mainMenu{\n position: static;\n}\n/*}}}*/\n/***\n!Sidebar search styles /% ======================================== %/\n***/\n/*{{{*/\n#sidebarSearch{\n margin: 0 0 0 10px;\n width: 145px;\n}\n\n#sidebarSearch input{\n font-size: .9em;\n width: 100px;\n}\n\n#sidebarSearch .button{\n float: right;\n margin-top: 1px;\n}\n/*}}}*/\n/***\n!Sidebar option styles\n***/\n/*{{{*/\n#sidebarOptions{\n margin-left: .75em;\n}\n\n#sidebarOptions h1{\n font-size: 1.3em;\n}\n\n#sidebarOptions a{\n display: inline;\n border: 0;\n}\n\n#sidebarOptions .sliderPanel{\n background-color: transparent;\n font-size: 1em;\n margin: 0;\n}\n\n#sidebarOptions .sliderPanel a:before,\n#sidebarTabs li:before{\n content: "";\n}\n/*}}}*/\n/***\n!Sidebar tab styles\n***/\n/*{{{*/\n\n#sidebarTabs .tab,\n#sidebarTabs .tab:hover{\n border: 1px solid #ccc;\n text-decoration: none;\n}\n\n#sidebarTabs .tabSelected{\n background: #ccc;\n color: #333;\n}\n\n#sidebarTabs .tabUnselected{\n background: #e6e6e6;\n color: #333;\n}\n\n#sidebarTabs .tabContents{\n background: #ccc;\n color: #333;\n border: 1px solid #ccc;\n width: 95%;\n}\n\n#sidebarTabs .tabContents a{\n color: #06c;\n}\n\n#sidebarTabs .tabContents a:hover{\n color: #147;\n\n}\n\n#sidebarTabs a.tabSelected:hover{\n cursor: default;\n}\n\n#sidebarTabs .txtMoreTab .tab{\n border: 1px solid #aaa;\n color: #333;\n}\n\n#sidebarTabs .txtMoreTab .tabSelected{\n background: #aaa;\n color: #333;\n}\n\n#sidebarTabs .txtMoreTab .tabSelected:hover{\n background: #aaa;\n color: #333\n}\n\n#sidebarTabs .txtMoreTab .tabUnselected{\n background: #ccc;\n color: #333;\n}\n\n#contentWrapper #sidebar .txtMoreTab .tabUnselected:hover,#contentWrapper #displayArea .txtMoreTab .tabUnselected:hover{\n color: #333;\n}\n\n#contentWrapper .txtMoreTab .tabContents{\n background: #aaa;\n color: #333;\n border: 1px solid #aaa;\n}\n/*}}}*/\n/***\n!Message area styles /% ========================================== %/\n***/\n/*{{{*/\n#messageArea {\nbackground-color: #eee;\n border: 1px solid #ccc;\n color: #bbb;\n margin: 0 1em;\n font-size: .8em;\n}\n\n#messageArea a:link{\n color: #aaa;\n}\n#messageArea a:hover{\n color: #06c;\n}\n\n#messageArea .messageToolbar .button{\n border: 1px solid #ccc;\n color: #aaa;\n text-decoration: none;\n}\n#messageArea .messageToolbar .button:hover{\n border: 1px solid #777;\n color: #777;\n}\n/*}}}*/\n/***\n!Popup styles /% ================================================ %/\n***/\n/*{{{*/\n#popup{\n padding: 0;\n background: #eee;\n border: 1px solid #ccc;\n color: #333;\n}\n\n#popup a{\n color: #06c;\n font-weight: normal;\n}\n\n#popup a:hover{\n color: #fff;\n background: #aaa;\n text-decoration: none;\n}\n/*}}}*/\n/***\n!Tiddler display styles /% ====================================== %/\n***/\n/*{{{*/\n#displayArea{\n margin: 1em 18em 1em 1em;\n text-align: left;\n font-size: 1.2em;\n}\n\nh1, h2, h3, h4, h5, .title{\n font-family: 'Trebuchet MS', 'Lucida Grande', Verdana, Arial, Sans-Serif;\ncolor: #333;\npadding: 0;\n}\n\n.viewer h1,.viewer h2,.viewer h3,.viewer h4,.viewer h5,.viewer h6{\n background: transparent;\n border-bottom: 1px dotted #ccc;\n}\n\n.title{\n font-size: 1.6em; \n}\n\n.subtitle{\n color: #777;\n font-size: .9em;\n}\n\n.toolbar{\n font-size: .8em;\n}\n\n.toolbar a:link,.toolbar a:visited{\n background: #e6e6e6;\n border: 1px solid #ccc;\n color: #aaa;\n padding: 1px 3px;\n margin: 0 .5em 0 0;\n}\n\n.toolbar a.button:hover{\n background: #ccc;\n border-color: #bbb;\n color: #06c;\n text-decoration: none;\n}\n\n.viewer a.tiddlyLinkNonExisting:link{\n color: #b85b5a;\n font-style: normal;\n}\n\n.viewer a.tiddlyLinkNonExisting:hover{\n text-decoration: underline; \n}\n\n.viewer a.tiddlyLinkExisting:link,#displayArea .viewer a.externalLink{\n font-weight: normal;\n color: #06c;\n}\n\n.viewer a.tiddlyLinkExisting:hover,.viewer a.externalLink:hover{\n color: #147;\n text-decoration: underline; \n}\n\n.viewer .button{\n border: 0;\n}\n\n.editor {\n font-size: 8pt;\n color: #402c74;\n font-weight: normal;\n}\n\n.editor input, .editor textarea {\n display: block;\n font: 11px/110% "Andale Mono", "Monaco", "Lucida Console", "Courier New", monospace;\n margin: 0 0 10px 0;\n border: 1px inset #333;\n padding: 2px 0;\n}\n\n.footer, .footer a.button,.editorFooter, .footer a.button{\n color: #aaa;\n}\n\n.selectedTiddler .footer,.selectedTiddler .footer a{\n color: #777;\n}\n\n.selectedTiddler .footer a.button,.selectedTiddler .editorFooter a.button{\n color: #06c;\n}\n\n.footer a.button:hover,.editorFooter a.button:hover{\n color: #147;\n background: transparent;\n} \n\n.tagClear{\n clear: none; \n}\n/*}}}*/
<!--{{{-->\n<div class='header'>\n <div class='titleLine'>\n <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n </div>\n</div>\n<div id='sidebar'>\n <div id='sidebarSearch' macro='search'></div>\n <div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\n <div id='sidebarOptions' refresh='content' tiddler='KubrickSidebar'></div>\n <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n <div id='messageArea'></div>\n <div id='tiddlerDisplay'></div>\n</div>\n<div id='contentFooter'><p>TiddlyWiki was created by <a href='http://tiddlywiki.com'>Jeremy Ruston</a> and TiddlyKubrick was created by <a href='http://checkettsweb.com'>Clint Checketts</a></p></div>\n<!--}}}-->
!Categories\n<<allTags>>\n!Blog!\n*<<newTiddler>>\n*<<newJournal 'DD MMM YYYY' journal>>\n\n!Meta\n*<<closeAll>>\n*<<permaview>>\n*<<saveChanges>>\n*<<slider chkSliderOptionsPanel OptionsPanel 'options ยป' 'Change TiddlyWiki advanced options'>>
!Main\n*<<themeSelect style 'Select theme'>>\n*[[Zeldman Orange]]\n*[[TiddlySinister]]\n*''[[DevFire]]''\n\n*[[TiddlyPedia]]\n*[[Rin]]\n*[[Kubrick]]\n*[[GTD Style]]\n*[[Flickr]]\n\n[[TagCloud]]\n[[TagglyTagCloud]]\n[[Blog]]\n[[NewNote]]\n\n*[[Contact Me!]]\n*<<upload http://checkettsweb.com/styles/store.php themes.htm themesBackup>><<redirect TW TiddlyWiki>>
/***\n|Macro|redirect (alias)|\n|Author|[[Clint Checketts]] and Paul Petterson|\n|Version|1.1 Jan 26, 2006|\n|Location|http://checkettsweb.com/styles/themes.htm#RedirectMacro|\n|Description|This macro tells TW to find all instances of a word and makes it point to a different link. For example, whenever I put the word 'Clint' in a tiddler I want TiddlyWiki to turn it into a link that points to a tiddler titled 'Clint Checketts' Or the word 'TW' could point to a tiddler called 'TiddlyWiki' It even matches clint (which is lowercase) [[Clint]] leet lEEt LEET|\n|Usage|{{{<<redirect TW TiddlyWiki>>}}} |\n|Example|<<redirect TW "TiddlyWiki">> <<redirect Clint "Clint Checketts">> (Nothing should appear, its just setting it all up)<<redirectExact lEEt Elite>>|\n\n!Revisions\n1.1- Fixed tiddler refresh so a tiddler declaring a redirect will also render the redirect\n1.0- Updated to work with TiddlyWiki 2.0 (thanks to Udo Borkowski)\n0.9- Original release October 2005\n\n!Code\n***/\n//{{{\nversion.extensions.redirectExact = {major: 1, minor: 2, revision: 0, date: new Date(2005,10,24)};\nconfig.macros.redirectExact = {label: "Pickles Rock!"};\nconfig.macros.redirectExact.handler = function(place,macroName,params,wikifier,paramString,tiddler){\n config.macros.redirect.handler(place,macroName,params,wikifier,paramString,tiddler);\n}\n\nversion.extensions.redirect = {major: 1, minor: 2, revision: 0, date: new Date(2005,10,24)};\nconfig.macros.redirect = {label: "Pickles Rock!"};\n\nconfig.macros.redirect.handler = function(place,macroName,params,wikifier,paramString,tiddler){\n\nvar redirectExists = false\n// Check to see if the wikifier exists\nfor (var i=0;i<config.formatters.length;i++)\n if (config.formatters[i].name == "redirect"+params[0])\n redirectExists = true;\n\n//If it doesn't exist, add it!\nif (!redirectExists){\n for( var i=0; i<config.formatters.length; i++ )\n if ( config.formatters[i].name=='wikiLink') break ;\n\n if ( i >= config.formatters.length ) {\n var e = "Can't find formatter for wikiLink!" ;\n displayMessage( e ) ;\n throw( e ) ;\n }\n\nvar pattern;\n if (macroName == 'redirect'){pattern=params[0].escapeRegExp().replace(/([A-Z])/img, function($1) {return("["+$1.toUpperCase()+$1.toLowerCase()+"]");});\n } else {\n pattern=params[0].escapeRegExp();\n }\n\n config.formatters.splice( i, 0, {\n name: "redirect"+params[0],\n match: "(?:\s\sb)(?:\s\s[\s\s[)?"+pattern+"(?:\s\s]\s\s])?(?:\s\sb)",\n subst: params[1],\n handler: function(w) {\n var link = createTiddlyLink(w.output,this.subst,false);\n w.outputText(link,w.matchStart,w.nextMatch);\n }\n });\n formatter = new Formatter(config.formatters); //update the tiddler\n if(tiddler) story.refreshTiddler(tiddler.title,null,true); //refresh tiddler so the new rule is applied\n} // End if\n}\n//}}}
/***\n/%[[StyleSheetLayout]]\n[[StyleSheetColors]]%/\n!Rin (Beta!!!!) for TiddlyWiki 2.0\ninspired by Broken Kode and implemented by Clint Checketts\n\n!General Styles /% ============================================================ %/\n***/\n/*{{{*/\na,\na.tiddlyLink,\na.button,\na.externalLink{\n color: #005d93;\n text-decoration: none;\n background: transparent;\n border: 0;\n}\n\na:hover,\na.tiddlyLink:hover,\na.button:hover,\na.externalLink:hover{\n border: 0;\n color: #900;\n text-decoration: underline;\n}\n\nbody {\n background-color: #fff;\n font-family: Verdana, Arial, Helvetica, sans-serif;\n}\n\n#contentWrapper{\n border: 0;\n margin: .5em 1em;\n\n}\n\n/*}}}*/\n/***\n!Header Styles /% ============================================================ %/\n***/\n/*{{{*/\n.header {\n height: 150px;\n background: url('rinback.jpg') repeat-x bottom left;\n position: relative;\n}\n\n.titleLine{\n background: #ccc url('ringradient.jpg') repeat-x top center;\n padding: 0 5px;\n}\n\n.siteTitle, .siteSubtitle{\n display: inline;\n font-size: 11px;\n line-height: 25px;\n font-weight: bold;\n color: #000;\n}\n\n.siteTitle a{\n color: #000;\n}\n\n.siteTitle a:hover, .siteSubtitle a:hover,.header .headerOptions a:hover{\n color: #cdcecf;\n text-decoration: none;\n background: transparent;\n}\n\n.siteSubtitle, #siteSubtitle a{\n font-weight: normal;\n color: #8b9198;\n}\n\n.headerOptions{\n position: absolute;\n z-index: 10;\n top: 4px;\n right: 17px;\n text-align: right;\n font-size: .9em;\n}\n\n.headerOptions a{\n position: relative;\n top: -2px;\n color: #8b9190;\n}\n\n.headerOptions .sliderPanel{\n color: #000;\n background: #fff;\n border-right: 2px solid #999;\n border-bottom: 2px solid #999;\n border-left: 1px solid #ccc;\n font-size: 10px;\n text-align: left;\n line-height: 1.2em;\n padding: .5em 1em;\n margin: -3px -2px 0 0;\n width: 180px; \n}\n\n.headerOptions input{\n margin: 0em 1em 0 .5em;\n font-size: 9px;\n}\n/*}}}*/\n/***\n!Top menu styles /% =========================================================== %/\n***/\n/*{{{*/\n#rinTopMenu{\n position: absolute;\n bottom: 0;\n left: 0;\n width: auto;\n padding: 0;\n margin: 0;\n color: #fff;\n}\n#rinTopMenu br{\n display: none;\n}\n\n#rinTopMenu a{\ncolor: #e6e6e6;\n}\n\n#rinTopMenu ul{\n margin: 0 0 2px 2px;\n padding: 0;\n}\n\n#rinTopMenu li{\n display: inline;\n\n}\n\n#rinTopMenu li a.tiddlyLink,#rinTopMenu li a.button,#rinTopMenu li a.externalLink{\n padding: 2px 10px;\n color: #e6e6e6;\n text-decoration: none;\n}\n\n#rinTopMenu li a.tiddlyLink:hover,#rinTopMenu li a.button:hover,#rinTopMenu li a.externalLink:hover{\n background: #97ced5;\n color: #19729e;\n}\n/*}}}*/\n/***\n!Sidebar styles /% =========================================================== %/\n***/\n/*{{{*/\n#rinSidebar{\n float: left;\n margin: 9px 0 0 15px;\n width: 220px;\n}\n\n#sidebarOptions a.button{\n display: inline;\n}\n\n.sidebarBlock{\n display: block;\n margin: 0 0 .5em 0;\n background: #fff;\n padding-bottom: 5px;\n}\n\n.sidebarBlock h1, .sidebarBlock h2, .sidebarBlock h3, .sidebarBlock .tabset{\n background: #ccc url('ringradient.jpg') repeat-x top left;\n font-size: 11px;\n line-height: 23px;\n font-weight: bold;\n color: #000; \n padding-left: 5px ;\n}\n\n.sidebarBlock .tabset{\n padding: 0;\n}\n\n#rinSidebar .sidebarBlock .tabContents,\n#displayArea .sidebarBlock .tabContents .tabContents, \n#displayArea .viewer .tabUnselected,\n#displayArea .viewer .tabContents .tabSelected{\n background: #fff;\n border: 0;\n width: 205px;\n}\n\n\n#sidebar .sidebarBlock .tabContents .tabContents,\n#displayArea .sidebarBlock .tabContents,\n#displayArea .viewer .tabSelected,\n#displayArea .viewer .tabContents .tabUnselected{\n background: #f5f6f7;\n}\n\n#sidebar .sidebarBlock .tabContents .tab{\n background: #f5f6f8;\n}\n\n\n#sidebar .sidebarBlock .tabContents .tabUnselected{\n background: #f0f0f0;\n}\n\n#sidebar .sidebarBlock .tabContents .tabUnselected:hover{\n text-decoration: underline;\n}\n\n\n#contentWrapper .tab{\n position: relative;\n padding-bottom: 2px;\n font-weight: normal;\n top: 3px;\n background: #f5f6f8;\n color: #000;\n text-decoration: none;\n}\n\n#contentWrapper .tabSelected{\n border: 0;\n top: 1px;\n padding-bottom: 4px !important;\n background: #fff;\n font-weight: bold;\n cursor: default;\n}\n\n#sidebarTabs .tabContents li.listTitle,#sidebarTabs .tabContents li.listTitle:hover{\n padding: 0 0 0 .5em;\n margin: 0;\n background: transparent;\n}\n\n#sidebarTabs .tabContents li.listLink{\n margin-left: 1em; \n}\n\n#sidebarTabs .sidebarBlock li{\n list-style: none;\n margin-left: 1em;\n padding: 1px 0 1px 1.5em;\n background: transparent url('rinbulletOver.gif') no-repeat left center;\n}\n\n#sidebarTabs .sidebarBlock li:hover{\n background: transparent url('rinbullet.gif') no-repeat left center;\n}\n\n#contentWrapper .tabContents a.tiddlyLink,#contentWrapper .tabContents a.button{\n display: block;\n color: #005d93;\n border: 0;\n}\n\n#contentWrapper .tabContents a.tiddlyLink:hover,#contentWrapper .tabContents a.button:hover{\n color: #900;\n background: #f0f0f0;\n text-decoration: none;\n}\n\n#rinSidebar ul,\n#rinSidebar li{\n list-style: none;\n padding: 0;\n margin: 0;\n}\n\n#rinSidebar li a{\n display: block;\n margin: 0 0 0 .5em;\n padding: 0 0 0 1.5em;\n background: transparent url('rinbullet.gif') no-repeat 5px -22px;\n}\n\n#rinSidebar li a:hover,\n#rinSidebar #sidebarTabs li a:hover{\n background: transparent url('rinbullet.gif') no-repeat 5px 0;\n text-decoration: underline;\n}\n\n#rinSidebar #sidebarTabs li{\n margin: 0;\n padding: 0;\n}\n\n/*}}}*/\n/***\n!Message area styles /% =========================================================== %/\n***/\n/*{{{*/\n#messageArea{\n background: #cdced2 url('ringradient.jpg') repeat-x left top;\n color: #000;\n position: absolute;\n top: 135px;\n right: 10px;\n}\n\n#messageArea a:link{\n color: #000;\n}\n\n#messageArea a:hover{\n text-decoration: none;\n}\n/*}}}*/\n/***\n!Display styles /% =========================================================== %/\n***/\n/*{{{*/\n#bodyWrapper{\n border: 1px solid #d5d7db;\n border-width: 15px 1px 3px 1px;\n margin: 10px 0;\n background: #f5f6f7;\n}\n\n\n\n#displayArea{\n margin: 0 0 0 20em;\n}\n\n#contentFooter{\n clear: both;\n background: #d5d7db;\n text-align: center;\n}\n\n#contentFooter p{\n margin: 0;\n}\n\n.tiddler{\n background: #fff;\n margin: 10px 0;\n}\n\n.tiddler .toolbar a.button,.tiddler .footer a.button,.tiddler .editorFooter a.button{\n padding: 2px 5px;\n color: #19729e;\n text-decoration: none;\n}\n\n.tiddler .toolbar a.button:hover,.tiddler .footer a.button:hover,.tiddler .editorFooter a.button:hover{\n background: #97ced5;\n color: #19729e;\n}\n\n.title{\n font-size: 16px;\n}\n\n.tagClear{\n clear: none;\n}\n\n.viewer h1,\n.viewer h2,\n.viewer h3,\n.viewer h4,\n.viewer h5,\n.viewer h6{\n background: transparent;\n}\n\n.viewer h1{\n border-bottom: 1px dotted #97ced5;\n}\n\n.viewer th,\n.viewer thead td{\n background: #2b7ea6\n}\n\n#popup{\n color: #000;\n background: #d5d7db;\n}\n\n#popup hr{\n color: #999;\n border-top: 1px solid #999;\n width: 96%;\n}\n\n#popup a{\n display: block;\n color: #005d93;\n}\n\n#popup a:hover{\n color: #900;\n background: #f0f0f0;\n text-decoration: none;\n }\n/*}}}*/
*[[A link]]\n*[[A link]]\n*[[A link]]
<!--{{{-->\n<div class='titleLine'>\n <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n\n <div class="headerOptions">\n <span macro="search"></span>\n <span macro="slider chkSliderOptionsPanel OptionsPanel options 'Change TiddlyWiki advanced options'"></span>\n </div>\n</div>\n\n<div class='header'>\n <div id='rinTopMenu' refresh='content' tiddler='RinTopMenu'></div>\n</div>\n\n<div id='messageArea'></div>\n\n<div id='bodyWrapper'>\n <div id='rinSidebar'>\n <div class='sidebarBlock'>\n <h3>Tools</h3>\n <div refresh='content' tiddler='RinTools'></div>\n </div>\n\n <div class='sidebarBlock'>\n <h3>Links</h3>\n <div refresh='content' tiddler='RinLinks'></div>\n </div>\n \n <div class='sidebarBlock'>\n <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n </div>\n </div>\n\n <div id='displayArea'>\n <div id='tiddlerDisplay'></div>\n </div>\n <div id='contentFooter'><p>TiddlyWiki was created by <a href="http://www.tidlywiki.com" title="TiddlyWiki">Jeremy Ruston</a> and TiddlyRin was created by <a href="http://www.checkettsweb.com" title="Checketts Web">Clint Checketts</a></p></div>\n</div>\n<!--}}}-->
*<<closeAll>>\n*<<permaview>>\n*<<saveChanges>>
*<<themeSelect style 'Select theme'>>\n*[[Themes|themes]]\n*[[TagCloud]]\n*[[TagglyTagCloud]]\n*[[Blog]]\n*[[NewNote]]\n*<<newTiddler>>\n*<<upload http://checkettsweb.com/styles/store.php themes.htm themesBackup>><<redirect TW TiddlyWiki>>
Classes\nIS455\nAdvanced Languages\nNotes Quizes\nIS460\nWeb Development II\nNote Presentations
/***\n\n''This plugin was previously called StyleChooser.''\n\n|Name|SelectThemePlugin|\n|Created by|SimonBaird and SaqImtiaz|\n|Location|http://lewcid.googlepages.com/lewcid.html#SelectThemePlugin|\n|Version|1.2.3|\n|Requires|~TW2.x|\n!Description\n*An alternative style switcher, can be used to switch just stylesheets and/or pagetemplates, or a combination of both (a theme)\n*you can add your own stylesheets and pagetemplates, or use a ThemePack, like BigThemePack.\n\n!Usage\n* You have to have fetch or create some styleSheets and pageTemplates to use this plugin.\n**You can either get a ThemePack like BigThemePack which automatically adds themes to ThemeSelect.\n**or create tiddlers with styleSheets and pageTemplates and tag them styleSheets and pageTemplates respectively.\n* Put {{{<<themeSelect style 'Select theme'>>}}} in your SideBarOptions.\n\n!Creating Theme Packs\n*You can create your own theme pack if you like. Instructions can be found [[here.|CreateThemePack]]\n\n!History\n* 15-May-06, v1.2.3, added paramifier so you can put theme on url, eg http://www.somewhere.com/twfile.html#theme:#Berry2, thanks Clint (Simon).\n* 28-Apr-o6, v1.2.2, fixed bug with opening TW after deleting themepacks. (Saq)\n* 26-Apr-06, v1.2.1, more code optimization, dropdowns now updated on the fly. (Saq)\n* 25-Apr-06, v1.2.0, added 3rd party ThemePack support, and made various other improvements.(Simon & Saq)\n* 24-Apr-06, v1.1.0, added: no styles and default styles options,<<br>>support for ThemePack, support for tag variations(Saq)\n* 21-Apr-06, v1.0.0, Reworked dropdowns to include option for pagetemplates (Saq)\n* 21-Apr-06, v0.9.0, Rewrote and added Saq's lovely dropdown select (Simon)\n* 20-Apr-06, v0.0.1, Basic switcher working (Simon)\n\n!Examples\n|!Source|!Output|h\n|{{{<<themeSelect style>>}}} for a dropdown with StyleSheets|<<themeSelect style>>|\n|{{{<<themeSelect pagetemplate>>}}} for a dropdown with PageTemplates|<<themeSelect pagetemplate>>|\n|{{{<<themeSelect style customlabel>>}}} to use a customlabel|<<themeSelect style customlabel>>|\n* When applying a stylesheet or template, it also looks for a template or stylesheet respectively based on naming convention, eg MyFunkyStyleSheet and MyFunkyPageTemplate.\n\n!Notes\n* See also http://www.tiddlytools.com/#SelectStyleSheetPlugin for a more feature-rich style sheet switcher\n\n! Ideas\n* do ViewTemplate also?\n* Pretty up the [x] bit\n\n!Code\n***/\n//{{{\n// for compatibility with TW <2.0.9\nif (!Array.prototype.contains)\n Array.prototype.contains = function(item)\n {\n return this.find(item) != null;\n };\n\n// for compatibility with TW <2.0.9\nif (!Array.prototype.containsAny)\n Array.prototype.containsAny = function(items)\n {\n for(var i=0; i<items.length; i++)\n if (this.contains(items[i]))\n return true;\n return false;\n };\n//}}}\n\n//{{{\nversion.extensions.SelectTheme = { major: 1, minor: 2, revision: 2, date: new Date(2006,4,28),\n source: "http://lewcid.googlepages.com/lewcid.html#SelectTheme"\n};\n\nconfig.SelectTheme = {\n things: {\n style: {\n tag: ["StyleSheets","StyleSheet","styleSheet","styleSheets","stylesheet","stylesheets"],\n theDefault: "StyleSheet",\n suffix: "StyleSheet",\n notify: refreshStyles,\n cookie: "txtStyleSheet",\n otherThing: "pagetemplate",\n label: "Choose StyleSheet: ",\n tooltip: "Choose a StyleSheet",\n caseNone: { text:"None", title:"NoStyleSheet"},\n caseDefault: { text:"Default", title:"StyleSheet" }\n\n },\n pagetemplate: {\n tag: ["PageTemplates","PageTemplate","pageTemplates","pageTemplate","pagetemplate","pagetemplates"],\n theDefault: "PageTemplate",\n suffix: "PageTemplate",\n notify: refreshPageTemplate,\n cookie: "txtPageTemplate",\n otherThing: "style",\n label: "Choose PageTemplate: ",\n tooltip: "Choose a PageTemplate",\n caseNone: { text:"None", title:"NoPageTemplate"},\n caseDefault: { text:"Default", title:"PageTemplate" }\n }\n\n },\n\n specialCases: ["caseNone","caseDefault"]\n\n};\n\nTiddlyWiki.prototype.removeNotification = function(title,fn) {\n for (var i=0;i<this.namedNotifications.length;i++)\n if((this.namedNotifications[i].name == title) && (this.namedNotifications[i].notify == fn))\n this.namedNotifications.splice(i,1); // counting on it only being there once\n}\n\n\nvar things = config.SelectTheme.things;\nvar specialCases=config.SelectTheme.specialCases;\n\nfor (var t in things) {\n // make sure we have a value\n if (!config.options[things[t].cookie])\n config.options[things[t].cookie] = things[t].theDefault;\n\n // remove core notify\n store.removeNotification(things[t].theDefault,things[t].notify);\n\n // and add our one\n store.addNotification(config.options[things[t].cookie],things[t].notify);\n\n}\n\n//checks to see if a tiddler exists in store or as a shadow.\nTiddlyWiki.prototype.isTiddler= function (title)\n {return store.tiddlerExists(title) || store.isShadowTiddler(title)}\n\n//hijack core function & make sure template exists\nwindow.applyPageTemplate_themeSelect=window.applyPageTemplate;\nwindow.applyPageTemplate=function(title){\n if(!store.isTiddler(title))\n {title = things.pagetemplate.theDefault;}\n applyPageTemplate_themeSelect(title);\n }\n\nTiddlyWiki.prototype.makeActiveTheme = function(what,title,alsoCheckOtherThing) {\n\n var thing = things[what];\n if (!store.isTiddler(title))\n title = thing.theDefault;\n\n var oldTitle = config.options[thing.cookie];\n\n if (what == "style") {\n // remove old style element from DOM\n var oldStyleElement = document.getElementById(oldTitle);\n oldStyleElement.parentNode.removeChild(oldStyleElement);\n }\n\n store.removeNotification(oldTitle,thing.notify);\n store.addNotification(title,thing.notify);\n store.notify(title);\n\n config.options[thing.cookie] = title;\n saveOptionCookie(thing.cookie);\n if (alsoCheckOtherThing)\n this.makeActiveTheme(thing.otherThing,\n title.replace(new RegExp(thing.suffix+"$"),"") + things[thing.otherThing].suffix,\n false);\n};\n\n\nconfig.shadowTiddlers.NoStyleSheet = "";\nconfig.shadowTiddlers.NoPageTemplate = config.shadowTiddlers.PageTemplate;\n\n\nfunction switchTheme(e){\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var theLink = theTarget;\n var switchTo= theLink.getAttribute("switchTo");\n var mode = theLink.getAttribute("mode");\n if ((config.options[things[mode].cookie])!=switchTo)\n {store.makeActiveTheme(mode,switchTo,true);};\n return(false);\n}\n\n\nconfig.macros.themeSelect={};\nconfig.macros.themeSelect.dropdownchar = (document.all?"โ–ผ":"โ–พ");\nconfig.macros.themeSelect.handler = function(place,macroName,params,wikifier,paramString,tiddler){\n var arrow = config.macros.themeSelect.dropdownchar;\n var mode = params[0];\n var label = (params[1]?params[1]:things[mode].label) + arrow;\n var cookie = (config.options[things[mode].cookie]);\n\n var onclick = function(e)\n { if (!e) var e = window.event;\n var popup = Popup.create(this);\n\n var tagged=[];\n\n store.forEachTiddler(function(title,tiddler) {\n if ((tiddler.tags).containsAny(things[mode].tag)){\n tagged.push(tiddler.title);}\n });\n\n //integrate ThemePacks\n if (config.themes) {\n // see what themes have been loaded...\n for (var i=0;i<config.themes.length;i++) {\n // see if there is one\n var lookForThis = config.themes[i] + things[mode].suffix;\n if (store.isShadowTiddler(lookForThis)) {\n tagged.pushUnique(lookForThis);\n }\n }\n tagged = tagged.sort();\n }\n\n //this function used later to create buttons\n var createThemeButton = function(switchTo){\n var theButton = createTiddlyButton(createTiddlyElement(popup,"li"),text,null,switchTheme,useClass);\n theButton.setAttribute("switchTo",switchTo);\n theButton.setAttribute("mode",mode);};\n\n //create Buttons for None(shadow styles) & Default (StyleSheet)\n // Default button is not created if StyleSheet doesnt exist.\n for(var t=0; t<specialCases.length; t++){\n var special = specialCases[t];\n var text = things[mode][special].text;\n var useClass = "tiddlyLinkExisting"; //redundant, optimize!\n if ((things[mode][special].title==cookie)||(special=="caseNone"&&!store.isTiddler(cookie)))\n {text+= " [x]";\n useClass = "currentlySelected";}\n if (!((special=="caseDefault")&&(!store.getTiddler(things[mode][special].title))))\n createThemeButton(things[mode][special].title); }\n\n //insert horizontal rule\n createTiddlyElement(createTiddlyElement(popup,"li"),"hr");\n\n //create buttons for all other stylesheet tiddlers\n for(var t=0; t<tagged.length; t++)\n { var useClass = "tiddlyLinkExisting";\n var text = (tagged[t]).replace((things[mode].suffix),"");\n if (tagged[t]==(cookie) )\n {text+=" [x]"; useClass="currentlySelected";}\n if ((tagged[t]!= (things[mode].theDefault))&&tagged[t]!= (things[mode].none))\n {createThemeButton(tagged[t]);}}\n Popup.show(popup,false);\n e.cancelBubble = true;\n if (e.stopPropagation)\n e.stopPropagation();\n return(false);\n };\n\n var createdropperButton = function(place){\n var sp = createTiddlyElement(place,"span",null,"ThemeChooserButton");\n var theDropDownBtn = createTiddlyButton(sp,label,things[mode].tooltip,onclick);\n };\n\n createdropperButton(place);\n};\n\n\nsetStylesheet(".popup li a.currentlySelected {background:#ccc;color:black;font-weight:bold;}","currentlySelectedStyle"); // could do better probably...\n\nconfig.macros.layoutChooser=config.macros.themeSelect;\n\n//shadow tiddler to hold instructions for creating ThemePacks\nconfig.shadowTiddlers.ThemePack='See http://simonbaird.com/mptw/#CreateThemePack'; \n\nconfig.macros.applyTheme = {handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n var theme = params[0];\n var label = params[1]?params[1]:'Apply theme "' + theme + '"';\n var tooltip = 'Apply the "'+theme+'" theme to this TiddlyWiki';\n createTiddlyButton(place,label,tooltip,function() {\n store.makeActiveTheme("style",theme+things.style.suffix,true);\n });\n}};\n\n\n// this means you can put #theme:ThemeName in url. suggested by Clint\nconfig.paramifiers.theme = {\n onstart: function(themeName) {\n store.makeActiveTheme("style",themeName+config.SelectTheme.things.style.suffix,true);\n }\n};\n\n//}}}
Clint's collection of TiddlyWiki creations
[[Themes & Plugins]]
http://checkettsweb.com/styles/
[[zRin]]
<!--{{{-->\n<div class='titleLine'>\n <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n\n <div class="headerOptions">\n <span macro="search"></span>\n <span macro="slider chkSliderOptionsPanel OptionsPanel options 'Change TiddlyWiki advanced options'"></span>\n </div>\n</div>\n\n<div class='header'>\n <div id='rinTopMenu' refresh='content' tiddler='RinTopMenu'></div>\n</div>\n\n<div id='messageArea'></div>\n\n<div id='bodyWrapper'>\n <div id='rinSidebar'>\n <div class='sidebarBlock'>\n <h3>Tools</h3>\n <div refresh='content' tiddler='RinTools'></div>\n </div>\n\n <div class='sidebarBlock'>\n <h3>Links</h3>\n <div refresh='content' tiddler='RinLinks'></div>\n </div>\n \n <div class='sidebarBlock'>\n <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n </div>\n </div>\n\n <div id='displayArea'>\n <div id='tiddlerDisplay'></div>\n </div>\n <div id='contentFooter'><p>TiddlyWiki was created by <a href="http://www.tidlywiki.com" title="TiddlyWiki">Jeremy Ruston</a> and TiddlyRin was created by <a href="http://www.checkettsweb.com" title="Checketts Web">Clint Checketts</a></p></div>\n</div>\n<!--}}}-->
//{{{\nvar tabTitle = "Categories";\n\nif (store.tiddlerExists("SESideBarCategories")){\n var shortCat = new Array();\n var longCat = new Array();\n var tagsCat = new Array();\n \n var twseCats = store.getTiddlerText("SESideBarCategories");\n var catsArray = twseCats .split("\sn");\n tabTitle = catsArray[0];\n \n for (var i=1; i< catsArray.length; i++){\n var catType = (i-1)%3; //0 Short Name, 1 Long Name, 2 Tags List\n if(catType == 0) {\n //alert("short"+catsArray[i]);\n shortCat.push(catsArray[i]);\n } else if (catType == 1){\n //alert("long"+catsArray[i]);\n longCat.push(catsArray[i]);\n } else if (catType == 2){\n //alert("tags"+catsArray[i]);\n tagsCat.push(catsArray[i]);\n }\n }\n \n //Date format\n var noteDateFormat = "0DD MMM YYYY";\n var now = new Date();\n \n var categoryString = "";\n for(var i=0;i<shortCat.length;i++){\n categoryString += "+++("+shortCat[i]+"SliderCookie)!!["+shortCat[i]+"|"+longCat[i]+"]>\sn+++!!![New....]\sn";\n var tagsArray = new String(tagsCat[i]).readMacroParams();\n for (var j=0;j<tagsArray.length;j++){\n categoryString +='<<newTiddlerSE "New '+tagsArray[j]+'" "'+shortCat[i]+' '+tagsArray[j]+'- '+now.formatString(noteDateFormat.trim())+'" "'+shortCat[i]+'" "'+tagsArray[j]+'">>\sn';\n }\n categoryString += '===\sn';\n for (var j=0;j<tagsArray.length;j++){\n categoryString += "!!!!"+tagsArray[j]+"\sn";\n categoryString += "<<forEachTiddler where 'tiddler.tags.containsAll([\s""+shortCat[i]+"\s",\s""+tagsArray[j]+"\s"])'>>\sn";\n }\n categoryString += '===\sn';\n }\n config.shadowTiddlers.TabCategories = categoryString;\n} else {\n //Put in a place holder description if the tiddler didn't exist\n config.shadowTiddlers.TabCategories = "You haven't set up any categories yet.\sn\snCreate a tiddler called [[SESideBarCategories]] and put your categories in it (don't forget to refresh the page after you create the tiddler).\sn\snMake the first line the title you want this tab to have ('Contexts' or 'Classes' are good options)\sn\snNext, cycle through a short category name, a long category name, and reference tags on each of the next three lines.\snLike so:\sn\snClasses\snGEO101\snIntro to Geology\snNote Quiz\snBIO301\snAdvanced Amphibian Disection\snVocabulary 'Frog Parts' Note\sn\snYou can repeat the three lines for as many categories as you need to. Notice how 'Frog Parts' has two words and thus requires quotes.";\n}\n\n//Rearrange the sidebar\nconfig.shadowTiddlers.SideBarTabs = "<<tabs txtMainTab '"+tabTitle+"' '"+tabTitle+"' TabCategories Index 'Tiddlers listed by date or name' TabIndex Tags 'All tags' TabTags More 'More lists' TabMore>>";\nconfig.shadowTiddlers.TabIndex = "<<tabs txtMoreTab 'by date' Timeline TabTimeline 'alphabetically' 'All tiddlers' TabAll>>";\n\nvar seStyleSheetString = "#sidebar blockquote{\sn margin: 0;\sn padding: 3px;\sn position: relative;\sn background: #ccc;\sn}\sn#sidebar h2 a{\sn display: block;\sn}\sn#sidebar h2, #sidebar h3,#sidebar h4{\sn padding: 0;\sn margin: 0;\sn}\sn#sidebar blockquote h3{\sn position: absolute;\sn top: -1.25em;\sn right: 0;\sn border: 0;\sn}\sn#sidebar blockquote .sliderPanel{\sn position: absolute;\sn border: 1px solid #666;\sn top: -.25em;\sn right: 0;\sn background: #fff;\sn padding: .5em;\sn";\nsetStylesheet(seStyleSheetString,'seStyleSheet');\n//}}}\n/***\n|''Name:''|ForEachTiddlerPlugin|\n|''Version:''|1.0.4 (2006-01-06)|\n|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|\n|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|\n|''Licence:''|[[BSD open source license]]|\n|''Macros:''|[[ForEachTiddlerMacro]] v1.0.4|\n|''TiddlyWiki:''|1.2.38+, 2.0|\n|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|\n!Description\n\nCreate customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.\n\n''Syntax:'' \n|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|\n|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|\n|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|\n|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|\n|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|\n|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]] is used.|\n|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|\n|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|\n\nSee details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].\n\n!Revision history\n* v1.0.4 (2006-01-06)\n** Support TiddlyWiki 2.0\n* v1.0.3 (2005-12-22)\n** Features: \n*** Write output to a file supports multi-byte environments (Thanks to Bram Chen) \n*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)\n** Enhancements:\n*** Improved error messages on InternetExplorer.\n* v1.0.2 (2005-12-10)\n** Features: \n*** context object also holds reference to store (TiddlyWiki)\n** Fixed Bugs: \n*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)\n* v1.0.1 (2005-12-08)\n** Features: \n*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".\n*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.\n*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).\n*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .\n*** Improved script evaluation (for where/sort clause and write scripts).\n* v1.0.0 (2005-11-20)\n** initial version\n\n!Code\n***/\n//{{{\n\n//============================================================================\n//============================================================================\n// ForEachTiddlerPlugin\n//============================================================================\n//============================================================================\n\nversion.extensions.ForEachTiddlerPlugin = {major: 1, minor: 0, revision: 4, date: new Date(2006,1,6), source: "http://tiddlywiki.abego-software.de/#ForEachTiddlergPlugin"};\n\n// For backward compatibility with TW 1.2.x\n//\nif (!TiddlyWiki.prototype.forEachTiddler) {\n TiddlyWiki.prototype.forEachTiddler = function(callback) {\n for(var t in this.tiddlers) {\n callback.call(this,t,this.tiddlers[t]);\n };\n }\n}\n\n//============================================================================\n// forEachTiddler Macro\n//============================================================================\n\nversion.extensions.forEachTiddler = {major: 1, minor: 0, revision: 4, date: new Date(2006,1,6), provider: "http://tiddlywiki.abego-software.de"};\n\n// ---------------------------------------------------------------------------\n// Configurations and constants \n// ---------------------------------------------------------------------------\n\nconfig.macros.forEachTiddler = {\n // Standard Properties\n label: "forEachTiddler",\n prompt: "Perform actions on a (sorted) selection of tiddlers",\n\n // actions\n actions: {\n addToList: {},\n write: {}\n }\n}\n\n// ---------------------------------------------------------------------------\n// The forEachTiddler Macro Handler \n// ---------------------------------------------------------------------------\n\nconfig.macros.forEachTiddler.handler = function(place,macroName,params) {\n // config.macros.forEachTiddler.traceMacroCall(place,macroName,params);\n\n // --- Parsing ------------------------------------------\n\n var i = 0; // index running over the params\n // Parse the "in" clause\n var tiddlyWikiPath = undefined;\n if ((i < params.length) && params[i] == "in") {\n i++;\n if (i >= params.length) {\n this.handleError(place, "TiddlyWiki path expected behind 'in'.");\n return;\n }\n tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the where clause\n var whereClause ="true";\n if ((i < params.length) && params[i] == "where") {\n i++;\n whereClause = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the sort stuff\n var sortClause = null;\n var sortAscending = true; \n if ((i < params.length) && params[i] == "sortBy") {\n i++;\n if (i >= params.length) {\n this.handleError(place, "sortClause missing behind 'sortBy'.");\n return;\n }\n sortClause = this.paramEncode(params[i]);\n i++;\n\n if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {\n sortAscending = params[i] == "ascending";\n i++;\n }\n }\n\n // Parse the script\n var scriptText = null;\n if ((i < params.length) && params[i] == "script") {\n i++;\n scriptText = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the action. \n // When we are already at the end use the default action\n var actionName = "addToList";\n if (i < params.length) {\n if (!config.macros.forEachTiddler.actions[params[i]]) {\n this.handleError(place, "Unknown action '"+params[i]+"'.");\n return;\n } else {\n actionName = params[i]; \n i++;\n }\n } \n \n // Get the action parameter\n // (the parsing is done inside the individual action implementation.)\n var actionParameter = params.slice(i);\n\n\n // --- Processing ------------------------------------------\n try {\n this.performMacro({\n place: place, \n whereClause: whereClause, \n sortClause: sortClause, \n sortAscending: sortAscending, \n actionName: actionName, \n actionParameter: actionParameter, \n scriptText: scriptText, \n tiddlyWikiPath: tiddlyWikiPath});\n\n } catch (e) {\n this.handleError(place, e);\n }\n}\n\n// Returns an object with properties "tiddlers" and "context".\n// tiddlers holds the (sorted) tiddlers selected by the parameter,\n// context the context of the execution of the macro.\n//\n// The action is not yet performed.\n//\n// @parameter see performMacro\n//\nconfig.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {\n\n var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath);\n\n var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;\n context["tiddlyWiki"] = tiddlyWiki;\n \n // Get the tiddlers, as defined by the whereClause\n var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);\n context["tiddlers"] = tiddlers;\n\n // Sort the tiddlers, when sorting is required.\n if (parameter.sortClause) {\n this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);\n }\n\n return {tiddlers: tiddlers, context: context};\n}\n\n// Returns the (sorted) tiddlers selected by the parameter.\n//\n// The action is not yet performed.\n//\n// @parameter see performMacro\n//\nconfig.macros.forEachTiddler.getTiddlers = function(parameter) {\n return this.getTiddlersAndContext(parameter).tiddlers;\n}\n\n// Performs the macros with the given parameter.\n//\n// @param parameter holds the parameter of the macro as separate properties.\n// The following properties are supported:\n//\n// place\n// whereClause\n// sortClause\n// sortAscending\n// actionName\n// actionParameter\n// scriptText\n// tiddlyWikiPath\n//\n// All properties are optional. \n// For most actions the place property must be defined.\n//\nconfig.macros.forEachTiddler.performMacro = function(parameter) {\n var tiddlersAndContext = this.getTiddlersAndContext(parameter);\n\n // Perform the action\n var actionName = parameter.actionName ? parameter.actionName : "addToList";\n var action = config.macros.forEachTiddler.actions[actionName];\n if (!action) {\n this.handleError(parameter.place, "Unknown action '"+actionName+"'.");\n return;\n }\n\n var actionHandler = action.handler;\n actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);\n}\n\n// ---------------------------------------------------------------------------\n// The actions \n// ---------------------------------------------------------------------------\n\n// Internal.\n//\n// --- The addToList Action -----------------------------------------------\n//\nconfig.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {\n // Parse the parameter\n var p = 0;\n\n // Check for extra parameters\n if (parameter.length > p) {\n config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);\n return;\n }\n\n // Perform the action.\n var list = document.createElement("ul");\n place.appendChild(list);\n for (var i = 0; i < tiddlers.length; i++) {\n var tiddler = tiddlers[i];\n var listItem = document.createElement("li")\n list.appendChild(listItem);\n createTiddlyLink(listItem, tiddler.title, true);\n }\n}\n\n// Internal.\n//\n// --- The write Action ---------------------------------------------------\n//\nconfig.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {\n // Parse the parameter\n var p = 0;\n if (p >= parameter.length) {\n this.handleError(place, "Missing expression behind 'write'.");\n return;\n }\n\n var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);\n p++;\n\n // Parse the "toFile" option\n var filename = null;\n var lineSeparator = undefined;\n if ((p < parameter.length) && parameter[p] == "toFile") {\n p++;\n if (p >= parameter.length) {\n this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");\n return;\n }\n \n filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));\n p++;\n if ((p < parameter.length) && parameter[p] == "withLineSeparator") {\n p++;\n if (p >= parameter.length) {\n this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");\n return;\n }\n lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);\n p++;\n }\n }\n \n // Check for extra parameters\n if (parameter.length > p) {\n config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);\n return;\n }\n\n // Perform the action.\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);\n var count = tiddlers.length;\n var text = "";\n for (var i = 0; i < count; i++) {\n var tiddler = tiddlers[i];\n text += func(tiddler, context, count, i);\n }\n \n if (filename) {\n if (lineSeparator != undefined) {\n lineSeparator = lineSeparator.replace(/\s\sn/mg, "\sn").replace(/\s\sr/mg, "\sr");\n text = text.replace(/\sn/mg,lineSeparator);\n }\n saveFile(filename, convertUnicodeToUTF8(text));\n } else {\n var wrapper = createTiddlyElement(place, "span");\n wikify(text, wrapper);\n }\n}\n\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// Internal.\n//\nconfig.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam) {\n return {\n place : placeParam, \n whereClause : whereClauseParam, \n sortClause : sortClauseParam, \n sortAscending : sortAscendingParam, \n script : scriptText,\n actionName : actionNameParam, \n actionParameter : actionParameterParam,\n tiddlyWikiPath : tiddlyWikiPathParam\n }\n}\n\n// Internal.\n//\n// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of \n// the given path.\n//\nconfig.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {\n if (!idPrefix) {\n idPrefix = "store";\n }\n \n // Read the content of the given file\n var content = loadFile(this.getLocalPath(path));\n if(content == null) {\n throw "TiddlyWiki '"+path+"' not found.";\n }\n \n // Locate the storeArea div's\n var posOpeningDiv = content.indexOf(startSaveArea);\n var posClosingDiv = content.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1)) {\n throw "File '"+path+"' is not a TiddlyWiki.";\n }\n var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);\n \n // Create a "div" element that contains the storage text\n var myStorageDiv = document.createElement("div");\n myStorageDiv.innerHTML = storageText;\n myStorageDiv.normalize();\n \n // Create all tiddlers in a new TiddlyWiki\n // (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)\n var tiddlyWiki = new TiddlyWiki();\n var store = myStorageDiv.childNodes;\n for(var t = 0; t < store.length; t++) {\n var e = store[t];\n var title = null;\n if(e.getAttribute)\n title = e.getAttribute("tiddler");\n if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)\n title = e.id.substr(lenPrefix);\n if(title && title != "") {\n var tiddler = tiddlyWiki.createTiddler(title);\n tiddler.loadFromDiv(e,title);\n }\n }\n tiddlyWiki.dirty = false;\n\n return tiddlyWiki;\n}\n\n\n \n// Internal.\n//\n// Returns a function that has a function body returning the given javaScriptExpression.\n// The function has the parameters:\n// \n// (tiddler, context, count, index)\n//\nconfig.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {\n var script = context["script"];\n var functionText = "theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";\n var fullText = (script ? script+";" : "")+functionText;\n return eval(fullText);\n}\n\n// Internal.\n//\nconfig.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {\n var result = [];\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);\n tiddlyWiki.forEachTiddler(function(title,tiddler) {\n if (func(tiddler, context, undefined, undefined)) {\n result.push(tiddler);\n }\n });\n return result;\n}\n\n// Internal.\n//\nconfig.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {\n var message = "Extra parameter behind '"+actionName+"':";\n for (var i = firstUnusedIndex; i < parameter.length; i++) {\n message += " "+parameter[i];\n }\n this.handleError(place, message);\n}\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {\n var result = \n (tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) \n ? 0\n : (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)\n ? -1 \n : +1; \n return result;\n}\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {\n var result = \n (tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) \n ? 0\n : (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)\n ? +1 \n : -1; \n return result;\n}\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {\n // To avoid evaluating the sortClause whenever two items are compared \n // we pre-calculate the sortValue for every item in the array and store it in a \n // temporary property ("forEachTiddlerSortValue") of the tiddlers.\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);\n var count = tiddlers.length;\n for (var i = 0; i < count; i++) {\n var tiddler = tiddlers[i];\n tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);\n }\n\n // Do the sorting\n tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);\n\n // Delete the temporary property that holds the sortValue. \n for (var i = 0; i < tiddlers.length; i++) {\n delete tiddlers[i].forEachTiddlerSortValue;\n }\n}\n\n\n// Internal.\n//\nconfig.macros.forEachTiddler.trace = function(message) {\n displayMessage(message);\n}\n\n// Internal.\n//\nconfig.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {\n var message ="<<"+macroName;\n for (var i = 0; i < params.length; i++) {\n message += " "+params[i];\n }\n message += ">>";\n displayMessage(message);\n}\n\n\n// Internal.\n//\n// Creates an element that holds an error message\n// \nconfig.macros.forEachTiddler.createErrorElement = function(place, exception) {\n var message = (exception.description) ? exception.description : exception.toString();\n return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);\n}\n\n// Internal.\n//\n// @param place [may be null]\n//\nconfig.macros.forEachTiddler.handleError = function(place, exception) {\n if (place) {\n this.createErrorElement(place, exception);\n } else {\n throw exception;\n }\n}\n\n// Internal.\n//\n// Encodes the given string.\n//\n// Replaces \n// "$))" to ">>"\n// "$)" to ">"\n//\nconfig.macros.forEachTiddler.paramEncode = function(s) {\n var reGTGT = new RegExp("\s\s$\s\s)\s\s)","mg");\n var reGT = new RegExp("\s\s$\s\s)","mg");\n return s.replace(reGTGT, ">>").replace(reGT, ">");\n}\n\n// Internal.\n//\n// Returns the given original path (that is a file path, starting with "file:")\n// as a path to a local file, in the systems native file format.\n//\n// Location information in the originalPath (i.e. the "#" and stuff following)\n// is stripped.\n// \nconfig.macros.forEachTiddler.getLocalPath = function(originalPath) {\n // Remove any location part of the URL\n var hashPos = originalPath.indexOf("#");\n if(hashPos != -1)\n originalPath = originalPath.substr(0,hashPos);\n // Convert to a native file format assuming\n // "file:///x:/path/path/path..." - pc local file --> "x:\spath\spath\spath..."\n // "file://///server/share/path/path/path..." - FireFox pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n // "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."\n // "file://server/share/path/path/path..." - pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n var localPath;\n if(originalPath.charAt(9) == ":") // pc local file\n localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file://///") == 0) // FireFox pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file:///") == 0) // mac/unix local file\n localPath = unescape(originalPath.substr(7));\n else if(originalPath.indexOf("file:/") == 0) // mac/unix local file\n localPath = unescape(originalPath.substr(5));\n else // pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\s\s"); \n return localPath;\n}\n\n// ---------------------------------------------------------------------------\n// Stylesheet Extensions (may be overridden by local StyleSheet)\n// ---------------------------------------------------------------------------\n//\nsetStylesheet(\n ".forEachTiddlerError{color: #ffffff;background-color: #880000;}",\n "forEachTiddler");\n\n//============================================================================\n// End of forEachTiddler Macro\n//============================================================================\n\n\n//============================================================================\n// String.startsWith Function\n//============================================================================\n//\n// Returns true if the string starts with the given prefix, false otherwise.\n//\nversion.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.startsWith = function(prefix) {\n var n = prefix.length;\n return (this.length >= n) && (this.slice(0, n) == prefix);\n}\n\n\n\n//============================================================================\n// String.endsWith Function\n//============================================================================\n//\n// Returns true if the string ends with the given suffix, false otherwise.\n//\nversion.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.endsWith = function(suffix) {\n var n = suffix.length;\n return (this.length >= n) && (this.right(n) == suffix);\n}\n\n\n//============================================================================\n// String.contains Function\n//============================================================================\n//\n// Returns true when the string contains the given substring, false otherwise.\n//\nversion.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.contains = function(substring) {\n return this.indexOf(substring) >= 0;\n}\n\n//============================================================================\n// Array.indexOf Function\n//============================================================================\n//\n// Returns the index of the first occurance of the given item in the array or \n// -1 when no such item exists.\n//\n// @param item [may be null]\n//\nversion.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.indexOf = function(item) {\n for (var i = 0; i < this.length; i++) {\n if (this[i] == item) {\n return i;\n }\n }\n return -1;\n}\n\n//============================================================================\n// Array.contains Function\n//============================================================================\n//\n// Returns true when the array contains the given item, otherwise false. \n//\n// @param item [may be null]\n//\nversion.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.contains = function(item) {\n return (this.indexOf(item) >= 0);\n}\n\n//============================================================================\n// Array.containsAny Function\n//============================================================================\n//\n// Returns true when the array contains at least one of the elements \n// of the item. Otherwise (or when items contains no elements) false is returned.\n//\nversion.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.containsAny = function(items) {\n for(var i = 0; i < items.length; i++) {\n if (this.contains(items[i])) {\n return true;\n }\n }\n return false;\n}\n\n\n//============================================================================\n// Array.containsAll Function\n//============================================================================\n//\n// Returns true when the array contains all the items, otherwise false.\n// \n// When items is null false is returned (even if the array contains a null).\n//\n// @param items [may be null] \n//\nversion.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.containsAll = function(items) {\n for(var i = 0; i < items.length; i++) {\n if (!this.contains(items[i])) {\n return false;\n }\n }\n return true;\n}\n\n\n\n//}}}\n\n\n/***\n!Licence and Copyright\nCopyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of abego Software nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n***/\n/***\n''NestedSlidersPlugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman\nsource: http://www.elsdesign.com/tiddlywiki/#NestedSlidersPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nQuickly make any tiddler content into an expandable 'slider' panel, without needing to create a separate tiddler to contain the slider content. Optional syntax allows ''default to open'', ''custom button label/tooltip'' and ''automatic blockquote formatting.''\n\nYou can also 'nest' these sliders as deep as you like (see complex nesting example below), so that expandable 'tree-like' hierarchical displays can be created. This is most useful when converting existing in-line text content to create in-line annotations, footnotes, context-sensitive help, or other subordinate information displays.\n\nFor more details, please click on a section headline below:\n++++!!!!![Configuration]>\nDebugging messages for 'lazy sliders' deferred rendering:\n<<option chkDebugLazySliderDefer>> show debugging alert when deferring slider rendering\n<<option chkDebugLazySliderRender>> show debugging alert when deferred slider is actually rendered\n===\n++++!!!!![Usage]>\nWhen installed, this plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content. Use {{{+++}}} and {{{===}}} to delimit the slider content. Additional optional syntax elements let you specify\n*default to open\n*cookiename\n*heading level\n*floater\n*rollover\n*custom label/tooltip\n*automatic blockquote\n*deferred rendering\nThe complete syntax, using all options, is:\n//{{{\n++++(cookiename)!!!!!^*[label|tooltip]>...\ncontent goes here\n===\n//}}}\nwhere:\n* {{{+++}}} (or {{{++++}}}) and {{{===}}}^^\nmarks the start and end of the slider definition, respectively. When the extra {{{+}}} is used, the slider will be open when initially displayed.^^\n* {{{(cookiename)}}}^^\nsaves the slider opened/closed state, and restores this state whenever the slider is re-rendered.^^\n* {{{!}}} through {{{!!!!!}}}^^\ndisplays the slider label using a formatted headline (Hn) style instead of a button/link style^^\n* {{{"^"}}} //(without the quotes)//^^\nmakes the slider 'float' on top of other content rather than shifting that content downward^^\n* {{{"*"}}} //(without the quotes)//^^\nautomatically opens/closes slider on "rollover" as well as when clicked^^\n* {{{[label]}}} or {{{[label|tooltip]}}}^^\nuses custom label/tooltip. (defaults are: ">" (more) and "<" (less)^^\n* {{{">"}}} //(without the quotes)//^^\nautomatically adds blockquote formatting to slider content^^\n* {{{"..."}}} //(without the quotes)//^^\ndefers rendering of closed sliders until the first time they are opened. //Note: deferred rendering may produce unexpected results in some cases. Use with care.//^^\n\n//Note: to make slider definitions easier to read and recognize when editing a tiddler, newlines immediately following the {{{+++}}} 'start slider' or preceding the {{{===}}} 'end slider' sequence are automatically supressed so that excess whitespace is eliminated from the output.//\n===\n++++!!!!![Examples]>\nsimple in-line slider: \n{{{\n+++\n content\n===\n}}}\n+++\n content\n===\n----\nuse a custom label and tooltip: \n{{{\n+++[label|tooltip]\n content\n===\n}}}\n+++[label|tooltip]\n content\n===\n----\ncontent automatically blockquoted: \n{{{\n+++>\n content\n===\n}}}\n+++>\n content\n===\n----\nall options combined //(default open, cookie, heading, floater, rollover, label/tooltip, blockquoted, deferred)//\n{{{\n++++(testcookie)!!!^*[label|tooltip]>...\n content\n===\n}}}\n++++(testcookie)!!!^*[label|tooltip]>...\n content\n===\n----\ncomplex nesting example:\n{{{\n+++^[get info...|click for information]\n put some general information here, plus a floating slider with more specific info:\n +++^[view details...|click for details]\n put some detail here, which could include a rollover with a +++^*[glossary definition]explaining technical terms===\n ===\n===\n}}}\n+++^[get info...|click for information]\n put some general information here, plus a floating slider with more specific info:\n +++^[view details...|click for details]\n put some detail here, which could include a rollover with a +++^*[glossary definition]explaining technical terms===\n ===\n===\n----\nnested floaters\n>menu: <<tiddler NestedSlidersExample>>\n(see [[NestedSlidersExample]] for definition)\n----\n===\n+++!!!!![Installation]>\nimport (or copy/paste) the following tiddlers into your document:\n''NestedSlidersPlugin'' (tagged with <<tag systemConfig>>)\n===\n+++!!!!![Revision History]>\n\n++++[2006.01.18 - 1.7.4]\nonly define adjustSliderPos() function if it has not already been provided by another plugin. This lets other plugins 'hijack' the function even when they are loaded first.\n===\n\n++++[2006.01.16 - 1.7.3]\nadded adjustSliderPos(place,btn,panel,panelClass) function to permit specialized logic for placement of floating panels. While it provides improved placement for many uses of floating panels, it exhibits a relative offset positioning error when used within *nested* floating panels. Short-term workaround is to only adjust the position for 'top-level' floaters.\n===\n\n++++[2006.01.16 - 1.7.2]\nadded button property to slider panel elements so that slider panel can tell which button it belongs to. Also, re-activated and corrected animation handling so that nested sliders aren't clipped by hijacking Slider.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends\n===\n\n++++[2006.01.14 - 1.7.1]\nadded optional "^" syntax for floating panels. Defines new CSS class, ".floatingPanel", as an alternative for standard in-line ".sliderPanel" styles.\n===\n\n++++[2006.01.14 - 1.7.0]\nadded optional "*" syntax for rollover handling to show/hide slider without requiring a click (Based on a suggestion by tw4efl)\n===\n\n+++[2006.01.03 - 1.6.2]\nWhen using optional "!" heading style, instead of creating a clickable "Hn" element, create an "A" element inside the "Hn" element. (allows click-through in SlideShowPlugin, which captures nearly all click events, except for hyperlinks)\n===\n\n+++[2005.12.15 - 1.6.1]\nadded optional "..." syntax to invoke deferred ('lazy') rendering for initially hidden sliders\nremoved checkbox option for 'global' application of lazy sliders\n===\n\n+++[2005.11.25 - 1.6.0]\nadded optional handling for 'lazy sliders' (deferred rendering for initially hidden sliders)\n===\n\n+++[2005.11.21 - 1.5.1]\nrevised regular expressions: if present, a single newline //preceding// and/or //following// a slider definition will be suppressed so start/end syntax can be place on separate lines in the tiddler 'source' for improved readability. Similarly, any whitespace (newlines, tabs, spaces, etc.) trailing the 'start slider' syntax or preceding the 'end slider' syntax is also suppressed.\n===\n\n+++[2005.11.20 - 1.5.0]\n added (cookiename) syntax for optional tracking and restoring of slider open/close state\n===\n\n+++[2005.11.11 - 1.4.0]\n added !!!!! syntax to render slider label as a header (Hn) style instead of a button/link style\n===\n\n+++[2005.11.07 - 1.3.0]\n removed alternative syntax {{{(((}}} and {{{)))}}} (so they can be used by other\n formatting extensions) and simplified/improved regular expressions to trim multiple excess newlines\n===\n\n+++[2005.11.05 - 1.2.1]\n changed name to NestedSlidersPlugin\n more documentation\n===\n\n+++[2005.11.04 - 1.2.0]\n added alternative character-mode syntax {{{(((}}} and {{{)))}}}\n tweaked "eat newlines" logic for line-mode {{{+++}}} and {{{===}}} syntax\n===\n\n+++[2005.11.03 - 1.1.1]\n fixed toggling of default tooltips ("more..." and "less...") when a non-default button label is used\n code cleanup, added documentation\n===\n\n+++[2005.11.03 - 1.1.0]\n changed delimiter syntax from {{{(((}}} and {{{)))}}} to {{{+++}}} and {{{===}}}\n changed name to EasySlidersPlugin\n===\n\n+++[2005.11.03 - 1.0.0]\n initial public release\n===\n\n===\n+++!!!!![Credits]>\nThis feature was implemented by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]] with research, programming and suggestions from RodneyGomes, GeoffSlocock, and PaulPetterson\n===\n***/\n// //+++!!!!![Code]\n//{{{\nversion.extensions.nestedSliders = {major: 1, minor: 7, revision: 4, date: new Date(2006,1,18)};\n//}}}\n\n//{{{\n// options for deferred rendering of sliders that are not initially displayed\nif (config.options.chkDebugLazySliderDefer==undefined) config.options.chkDebugLazySliderDefer=false;\nif (config.options.chkDebugLazySliderRender==undefined) config.options.chkDebugLazySliderRender=false;\n\n// default styles for 'floating' class\nsetStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \s\n background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");\n//}}}\n\n//{{{\nconfig.formatters.push( {\n name: "nestedSliders",\n match: "\s\sn?\s\s+{3}",\n terminator: "\s\ss*\s\s={3}\s\sn?",\n lookahead: "\s\sn?\s\s+{3}(\s\s+)?(\s\s([^\s\s)]*\s\s))?(\s\s!*)?(\s\s^)?(\s\s*)?(\s\s[[^\s\s]]*\s\s])?(\s\s>)?(\s\s.\s\s.\s\s.)?\s\ss*",\n handler: function(w)\n {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n // location for rendering button and panel\n var place=w.output;\n\n // default to closed, no cookie\n var show="none"; var title=">"; var tooltip="show"; var cookie="";\n\n // extra "+", default to open\n if (lookaheadMatch[1])\n { show="block"; title="<"; tooltip="hide"; }\n\n // cookie, use saved open/closed state\n if (lookaheadMatch[2]) {\n cookie=lookaheadMatch[2].trim().substr(1,lookaheadMatch[2].length-2);\n cookie="chkSlider"+cookie;\n if (config.options[cookie]==undefined)\n { config.options[cookie] = (show=="block") }\n if (config.options[cookie])\n { show="block"; title="<"; tooltip="hide"; }\n else\n { show="none"; title=">"; tooltip="show"; }\n }\n\n // custom label/tooltip\n if (lookaheadMatch[6]) {\n title = lookaheadMatch[6].trim().substr(1,lookaheadMatch[6].length-2);\n if ((pos=title.indexOf("|")) != -1)\n { tooltip = title.substr(pos+1,title.length); title = title.substr(0,pos); }\n else\n { tooltip += " "+title; }\n }\n\n // create the button\n if (lookaheadMatch[3]) { // use "Hn" header format instead of button/link\n var lvl=(lookaheadMatch[3].length>6)?6:lookaheadMatch[3].length;\n var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,null,title);\n btn.onclick=onClickNestedSlider;\n btn.setAttribute("href","javascript:;");\n btn.setAttribute("title",tooltip);\n }\n else\n var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider);\n btn.sliderCookie = cookie; // save the cookiename (if any) in the button object\n\n // "non-click" MouseOver open/close slider\n if (lookaheadMatch[5]) btn.onmouseover=onClickNestedSlider;\n\n // create slider panel\n var panelClass=lookaheadMatch[4]?"floatingPanel":"sliderPanel";\n var panel=createTiddlyElement(place,"div",null,panelClass,null);\n panel.style.display = show;\n panel.button = btn; // so the slider panel know which button it belongs to\n btn.sliderPanel=panel;\n\n // render slider (or defer until shown) \n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n if (lookaheadMatch[1]||!lookaheadMatch[8]) {\n // render now if "++++" (init open) or NOT "..." (deferred render)\n w.subWikify(lookaheadMatch[7]?createTiddlyElement(panel,"blockquote"):panel,this.terminator);\n // align slider/floater position with button\n adjustSliderPos(place,btn,panel,panelClass);\n }\n else {\n var src = w.source.substr(w.nextMatch);\n var endpos=findMatchingDelimiter(src,"+++","===");\n panel.setAttribute("raw",src.substr(0,endpos));\n panel.setAttribute("blockquote",lookaheadMatch[7]?"true":"false");\n panel.setAttribute("rendered","false");\n w.nextMatch += endpos+3;\n if (w.source.substr(w.nextMatch,1)=="\sn") w.nextMatch++;\n if (config.options.chkDebugLazySliderDefer) alert("deferred '"+title+"':\sn\sn"+panel.getAttribute("raw"));\n }\n }\n }\n }\n)\n\n// TBD: ignore 'quoted' delimiters (e.g., "{{{+++foo===}}}" isn't really a slider)\nfunction findMatchingDelimiter(src,starttext,endtext) {\n var startpos = 0;\n var endpos = src.indexOf(endtext);\n // check for nested delimiters\n while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {\n // count number of nested 'starts'\n var startcount=0;\n var temp = src.substring(startpos,endpos-1);\n var pos=temp.indexOf(starttext);\n while (pos!=-1) { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }\n // set up to check for additional 'starts' after adjusting endpos\n startpos=endpos+endtext.length;\n // find endpos for corresponding number of matching 'ends'\n while (startcount && endpos!=-1) {\n endpos = src.indexOf(endtext,endpos+endtext.length);\n startcount--;\n }\n }\n return (endpos==-1)?src.length:endpos;\n}\n//}}}\n\n//{{{\nfunction onClickNestedSlider(e)\n{\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var theLabel = theTarget.firstChild.data;\n var theSlider = theTarget.sliderPanel\n var isOpen = theSlider.style.display!="none";\n // if using default button labels, toggle labels\n if (theLabel==">") theTarget.firstChild.data = "<";\n else if (theLabel=="<") theTarget.firstChild.data = ">";\n // if using default tooltips, toggle tooltips\n if (theTarget.getAttribute("title")=="show")\n theTarget.setAttribute("title","hide");\n else if (theTarget.getAttribute("title")=="hide")\n theTarget.setAttribute("title","show");\n if (theTarget.getAttribute("title")=="show "+theLabel)\n theTarget.setAttribute("title","hide "+theLabel);\n else if (theTarget.getAttribute("title")=="hide "+theLabel)\n theTarget.setAttribute("title","show "+theLabel);\n // deferred rendering (if needed)\n if (theSlider.getAttribute("rendered")=="false") {\n if (config.options.chkDebugLazySliderRender)\n alert("rendering '"+theLabel+"':\sn\sn"+theSlider.getAttribute("raw"));\n var place=theSlider;\n if (theSlider.getAttribute("blockquote")=="true")\n place=createTiddlyElement(place,"blockquote");\n wikify(theSlider.getAttribute("raw"),place);\n theSlider.setAttribute("rendered","true");\n }\n // show/hide the slider\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));\n else\n theSlider.style.display = isOpen ? "none" : "block";\n if (this.sliderCookie && this.sliderCookie.length)\n { config.options[this.sliderCookie]=!isOpen; saveOptionCookie(this.sliderCookie); }\n // align slider/floater position with target button\n adjustSliderPos(theSlider.parentNode,theTarget,theSlider,theSlider.className);\n return false;\n}\n\n// hijack animation handler 'stop' handler so overflow is visible after animation has completed\nSlider.prototype.coreStop = Slider.prototype.stop;\nSlider.prototype.stop = function() { this.coreStop(); this.element.style.overflow = "visible"; }\n\n// adjust panel position based on button position\nif (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel,panelClass) {\n ///////////////////////////////////////////////////////////////////////////////\n /// EXPERIMENTAL HACK - WORKS IN SOME CASES, NOT IN OTHERS\n ///////////////////////////////////////////////////////////////////////////////\n // "if this panel is floating and the parent is not also a floating panel"...\n if (panelClass=="floatingPanel" && place.className!="floatingPanel") {\n var left=0; var top=btn.offsetHeight;\n if (place.style.position!="relative") { left+=findPosX(btn); top+=findPosY(btn); }\n panel.style.left=left+"px"; panel.style.top=top+"px";\n }\n}\n//}}}\n// //===\n/***\nMacro: newNoteSE\nAuthor: Clint Checketts\nVersion: 1.1 Jan 18, 2006\n\nusage: {{{<<newTiddlerSE (button text) (title for the created tiddler) (default tags, unlimited) >>}}}\nexample: <<newTiddlerSE "Note for IS 410" "IS410 Notes- Sept/07" Tag1 Tag2 OtherTag>>\n\n***/\nversion.extensions.newTiddlerSE = {major: 1, minor: 1, revision: 0, date: new Date(2006,1,18)};\nconfig.macros.newTiddlerSE = {label: "new note (this.label isn't used anymore)", prompt: "Blah tag"};\n\n//{{{\nconfig.macros.newTiddlerSE.handler = function(place,macroName,params){\n var title = params[1]\n\n var createTiddlerSE = function() {\n story.displayTiddler(null,title,"EditTemplate");\n for(var t=2;t<params.length;t++)\n story.setTiddlerTag(title,params[t],+1);\n story.focusTiddler(title,"text");\n return false;\n };\n\n createTiddlyButton(place,params[0],title,createTiddlerSE,null,null);\n}\n//}}}
/***\n''Plugin:'' Tag Cloud Macro\n''Author:'' Clint Checketts\n''Source URL:''\n\n!Usage\n<<tagCloud>>\n\n!Code\n***/\n//{{{\nversion.extensions.tagCloud = {major: 1, minor: 0 , revision: 0, date: new Date(2006,2,04)};\n//Created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman\n\nconfig.macros.tagCloud = {\n noTags: "No tag cloud created because there are no tags.",\n tooltip: "%1 tiddlers tagged with '%0'"\n};\n\nconfig.macros.tagCloud.handler = function(place,macroName,params) {\n \nvar tagCloudWrapper = createTiddlyElement(place,"div",null,"tagCloud",null);\n\nvar tags = store.getTags();\nfor (var t=0; t<tags.length; t++) {\n for (var p=0;p<params.length; p++) if (tags[t][0] == params[p]) tags[t][0] = "";\n}\n\n if(tags.length == 0) \n createTiddlyElement(tagCloudWrapper,"span",null,null,this.noTags);\n //Findout the maximum number of tags\n var mostTags = 0;\n for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){\n if (tags[t][1] > mostTags) mostTags = tags[t][1];\n }\n //divide the mostTags into 4 segments for the 4 different tagCloud sizes\n var tagSegment = mostTags / 4;\n\n for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){\n var tagCloudElement = createTiddlyElement(tagCloudWrapper,"span",null,null,null);\n tagCloudWrapper.appendChild(document.createTextNode(" "));\n var theTag = createTiddlyButton(tagCloudElement,tags[t][0],this.tooltip.format(tags[t]),onClickTag,"tagCloudtag tagCloud" + (Math.round(tags[t][1]/tagSegment)+1));\n theTag.setAttribute("tag",tags[t][0]);\n }\n\n};\n\nsetStylesheet(".tagCloud span{height: 1.8em;margin: 3px;}.tagCloud1{font-size: 1.2em;}.tagCloud2{font-size: 1.4em;}.tagCloud3{font-size: 1.6em;}.tagCloud4{font-size: 1.8em;}.tagCloud5{font-size: 1.8em;font-weight: bold;}","tagCloudsStyles");\n//}}}
/***\n''Plugin:'' TagglyTag Cloud Macro\n''Author:'' Clint Checketts\n''Source URL:''\n\n//Note the macro name was changed to stop it from clashing with the original TagCloud plugin//\n\n!Usage\n<<tagglyTagCloud>>\n\n!Code\n***/\n//{{{\nversion.extensions.tagglyTagCloud = {major: 1, minor: 0 , revision: 0, date: new Date(2006,2,4)};\n//Created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman\n\nconfig.macros.tagglyTagCloud = {\n noTags: "No tag cloud created because there are no tags.",\n tooltip: "%1 tiddlers tagged with '%0'"\n};\n\nconfig.macros.tagglyTagCloud .handler = function(place,macroName,params) {\n \nvar tagCloudWrapper = createTiddlyElement(place,"div",null,"tagCloud",null);\n\nvar tags = store.getTags();\nfor (var t=0; t<tags.length; t++) {\n for (var p=0;p<params.length; p++) if (tags[t][0] == params[p]) tags[t][0] = "";\n}\n\n if(tags.length == 0) \n createTiddlyElement(tagCloudWrapper,"span",null,null,this.noTags);\n //Findout the maximum number of tags\n var mostTags = 0;\n for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){\n if (tags[t][1] > mostTags) mostTags = tags[t][1];\n }\n //divide the mostTags into 4 segments for the 4 different tagCloud sizes\n var tagSegment = mostTags / 4;\n\n for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){\n var tagCloudElement = createTiddlyElement(tagCloudWrapper,"span",null,null,null);\n tagCloudWrapper.appendChild(document.createTextNode(" "));\n var theTag = createTiddlyLink(tagCloudElement,tags[t][0],true);\n theTag.className += " tagCloudtag tagCloud" + (Math.round(tags[t][1]/tagSegment)+1);\n\n// theTag.setAttribute("tag",tags[t][0]);\n }\n\n};\n\nsetStylesheet(".tagCloud span{height: 1.8em;margin: 3px;}.tagCloud1{font-size: 1.2em;}.tagCloud2{font-size: 1.4em;}.tagCloud3{font-size: 1.6em;}.tagCloud4{font-size: 1.8em;}.tagCloud5{font-size: 1.8em;font-weight: bold;}","tagCloudsStyles");\n//}}}
/*{{{*/\nbody{\n background: #f9f9f9 url(headbg.jpg) no-repeat top left;\n}\n\n#titleLine{\n display: block;\n background: transparent url(wiki.png) no-repeat 18px -7px;\n height: 120px;\n _height: 135px;\n width: 150px;\n color: #000;\n border: 1px;\n padding: 0;\n margin: 0;\n}\n\n#contentWrapper #siteTitle a{\n display: inline;\n font-weight: bold;\n color: #000;\n font-size: 13px;\n}\n\n#siteSubtitle{\n padding: 0;\n}\n\n#siteTitle, #mainMenu{\n position: static;\n}\n\n#contentWrapper #sidebar{\n top: 0;\n left: 0;\n}\n\n#displayArea {\n margin: 0 0 0 15em;\n}\n\n#messageArea{\n position: fixed;\n top: 0;\n right: 0;\n font-size: 10px;\n border: 1px solid #aaa;\n background: #fff;\n z-index: 25;\n}\n\n#messageArea a:link{\n color: #002bb8;\n text-decoration: none;\n}\n\n#messageArea a:hover{\n text-decoration: underline;\n}\n\n.viewer{\n background: #fff;\n border: 1px solid #aaa;\n padding: 1em;\nmargin: 0;\n}\n\n.body{\n padding: 1px;\n}\n\n.title{\n background: #fff;\n border: 1px solid #aaa;\n display: inline;\n margin-left: .5em;\n padding: 2px .5em;\n border-bottom: 0;\n font-weight: bold;\n color: #000;\n font-size: 1.2em;\n}\n\n.toolbar{\n visibility: visible;\n display: inline;\n padding: 0;\n font-family: sans-serif;\n}\n\n.toolbar a.button:link,.toolbar a.button:visited{\n background: #fff;\n border: 1px solid #aaa;\n color:#002bb8;\n font-size: 11px;\n padding-bottom: 0;\n margin-right: .25em;\n}\n\n/* TiddlyPedia was Created by Clinton Checketts based on the Monobook skin of Wikipedia */\n\n#contentWrapper .toolbar .button:hover{\n border-bottom: 1px solid #fff;\n background: #fff;\n color:#002bb8;\n}\n\n.toolbar a.button:hover{\n border-bottom: 1px solid #fff;\n background: #fff;\n color:#000;\n}\n\n#displayArea .viewer a,a.button:link,a.button:visited,\na.tiddlyLink:link,a.tiddlyLink:visited,\n#sidebarOptions .sliderPanel a{\n color:#002bb8;\n background: transparent;\n}\n\n.viewer a:hover,a.button:hover,a.button:active,\na.tiddlyLink:hover,a.tiddlyLink:active,\n.viewer a.button:hover,\n#sidebarOptions .sliderPanel a:hover{\n color:#002bb8;\n background: transparent;\n text-decoration: underline;\n}\n\n#mainMenu{\n font-family: sans-serif;\n text-align: left;\n font-size: x-small;\n width: 100%;\n margin: 0;\n padding: 0;\n}\n\n#mainMenu h1{\n font-size: 11px;\n font-weight: normal;\n padding: 0;\n margin: 0;\n}\n\n#mainMenu ul{\n font-size: 11px;\n border: 1px solid #aaa;\n padding: .25em 0;\n margin: 0;\n list-style-type: square;\n list-style-image: url(bullet.gif);\n background: #fff;\n width: 100%;\n}\n\n#mainMenu li{\n margin: 0 0 0 2em;\n padding: 0;\n}\n\n#contentWrapper #mainMenu a:link,#contentWrapper #mainMenu a:visited{\n color:#002bb8;\n padding: 0;\n margin: 0;\n background: transparent;\n}\n\n#mainMenu .externalLink {\n text-decoration: none;\n}\n\n#mainMenu .externalLink:hover {\n text-decoration: underline;\n}\n\n#sidebar{\n padding: .5em;\n font-family: sans-serif;\n}\n\n#sidebarOptions{\n border: 1px solid #aaa;\n background: #fff;\n margin-top: .5em;\n width: 100%;\n}\n\n#contentWrapper #sidebarOptions .button,#contentWrapper #sidebarOptions .button:hover{\n color:#002bb8;\n padding: .1em 0 .1em 2em;\n background: transparent url(bullet.gif) 10px -2px no-repeat;\n}\n\n#sidebarOptions input{\n width: 80%;\n margin: 0 .5em;\n}\n\n#sidebarTabs{\n background: #fff;\n margin-top: .5em;\n width: 100%;\n}\n\n#sidebarTabs .tabContents,#sidebarTabs .tabContents .tabContents{\n border: 1px solid #aaa;\n background: #fff;\n}\n\n#sidebarTabs .tabSelected,#sidebarTabs .tabcontents .tabSelected {\n background: #fff;\n border: 1px solid #aaa;\n border-bottom: 0;\n cursor: default;\n padding-bottom: 3px;\n color: #000;\n}\n\n#sidebarTabs .tabUnselected,#sidebarTabs .tabContents .tabUnselected{\n background: #aaa;\n padding-bottom: 0;\n color: #000; \n}\n\n#contentWrapper #sidebarTabs .tiddlyLink,#contentWrapper #sidebarTabs .button,\n#contentWrapper #sidebarTabs a.tiddlyLink:hover,#contentWrapper #sidebarTabs a.button:hover{\n background: transparent;\n color: #002bb8;\n}\n\n.footer{\n margin: -1em 0 1em 0; \n}\n\n.footer .button:hover,.editorFooter .button:hover{\nbackground: transparent;\n color: #002bb8;\n border-bottom: 1px solid #002bb8;\n}\n\n#popup{\n background: #e9e9e9;\n color: #000;\n}\n\n#popup hr{\n border-color: #aaa;\n background-color: #aaa;\n width: 75%;\n}\n\n#popup a{\n color: #000;\n}\n\n#popup a:hover,#contentWrapper #sidebarTabs #popup a:hover{\n background: #666;\n color: #fff;\n text-decoration: none;\n}\n\n#displayArea .tiddler a.tiddlyLinkNonExisting{\n color: #ba0000;\n}\n\n#displayArea .tiddler a.externalLink{\n text-decoration: none;\n color:#002bb8;\n padding-right: 1em;\n background: transparent url(external.png) 100% 50% no-repeat;\n}\n\n#displayArea .tiddler a.externalLink:hover{\n text-decoration: underline;\n}\n\n.viewer pre{\n background: #e9e9e9;\n border: 1px solid #666;\n}\n\n.viewer h1, .viewer h2, .viewer h3, .viewer h4, .viewer h5, .viewer h6{\n background: transparent;\n border-bottom: .2em solid #aaa;\n}\n\n#sidebar .sliderPanel{\n background: #e9e9e9;\n}\n\n#sidebar .sliderPanel input{width: auto;}\n/*}}}*/
<div class='title' macro='view title'></div>\n<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler'></div>\n<div class='editor' macro='edit title'></div>\n<div class='editor' macro='edit text'></div>\n<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
<!--{{{-->\n<div id='header'>\n</div>\n<div id='sidebar'>\n<div id='titleLine'></div>\n<span id='siteTitle' refresh='content' tiddler='SiteTitle'></span>- <span id='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>\n\n<!--}}}-->
<!--{{{-->\n<div class='title' macro='view title'></div>\n<div class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump'></div>\n<div class='tagging' macro='tagging'></div>\n<div class='tagged' macro='tags'></div>\n<div class='viewer' macro='view text wikified'></div>\n<div class='tagClear'></div>\n<!--}}}-->
/***\n!TiddlySinister \ndesgined by Clint Checketts (http://www.checkettsweb.com) and inspired from Minz Meyer (http://www.minzweb.de)\n\n!Sections in this Tiddler:\n*Generic rules\n**Links styles\n**Link Exceptions\n*Header\n*Main menu\n*Sidebar\n**Sidebar options\n**Sidebar tabs\n*Message area\n*Popup\n*Tabs\n*Tiddler display\n**Viewer\n**Editor\n*Misc. rules\n\n!Generic Layout Rules /% ============================================================= %/\n***/\n/*{{{*/\nbody{\n background: #000;\n}\n\nh1, h2, h3, h4, h5, h6{\n background: transparent;\n}\n/*}}}*/\n/***\n!Link Styles /% ============================================================= %/\n***/\n/*{{{*/\n#sidebarOptions .tiddlyLink{\n padding: .5em 0 .5em 1em;\n display: block;\n font-weight: normal;\n}\n\n#sidebarOptions .sliderPanel .tiddlyLink{\n display:inline;\n padding: 0;\n}\n\n#contentWrapper #mainMenu a, \n#messageArea a:link, \n#contentWrapper #sidebar a{\n color: #fb9950;\n text-decoration: none;\n}\n\n#messageArea a:link{\nfont-weight: bold;\n}\n\n#contentWrapper #mainMenu a:hover,\n#messageArea a:hover,\n#contentWrapper #sidebar a:hover{\n background: transparent;\n text-decoration: underline;\n}\n\na,.tiddler .button{\n color: #fb9950;\n background: transparent;\n border: 0;\n}\n\na:hover,#contentWrapper a:active,\n.tiddler .button:hover,.tiddler .button:active {\n color: #c17135;\n background: transparent;\n text-decoration: underline;\n}\n\n/*}}}*/\n/***\n!Header styles /% ============================================================= %/\n***/\n/*{{{*/\n#titleLine{\n color: #94532d;\n background: #000;\n border-bottom: 1px solid #613725;\n padding: 1em 0;\n}\n\n#titleLine a{\n color: #fb9950;\n}\n\n#siteTitle{\n font-size: 2em;\n font-weight: bold;\n}\n/*}}}*/\n/***\n!Main menu styles /% ============================================================= %/\n***/\n/*{{{*/\n#mainMenu{\n position: relative;\n float: left;\n font-size: 12px;\n text-align: left;\n background: #321c10;\n color: #c5886b;\n width: 15em;\n padding: .2em .5em .2em 0;\n}\n\n#mainMenu h1{\n font-size: 13px;\n font-weight: normal;\n margin: 0 0 0 2px;\n}\n\n#mainMenu li, #mainMenu ul{\n padding: 0;\n margin: 0;\n list-style: none;\n}\n\n#mainMenu ul, #messageArea{\n display: block;\n border: 1px solid #905437;\n padding: 0 0 0 1em;\n background: #522d1e;\n margin: 0 0 1em 0;\n}\n\n#messageArea{\n display: none;\n padding: 1em;\n}\n/*}}}*/\n/***\n!Sidebar styles /% ============================================================= %/\n***/\n/*{{{*/\n#sidebar{\n padding: 10px;\nbackground: #000;\n right: 0;\n}\n\n#sidebarTabs .tabContents { overflow:visible; white-space:normal; width:auto; }\n\n#contentWrapper{\n margin: 0 10px;\n background: #321c10;\n border: 1px solid #613725;\n}\n\n#sidebar .sliderPanel{\n background: #000;\n color: #94532d;\n}\n\n#sidebar, #sidebarOptions, #sidebarTabs{\n background: transparent;\n}\n\n#sidebarTabs .tabSelected{\n background: #522d1e;\n border: 1px solid #905437;\n border-bottom: 0;\n padding-bottom: 3px;\n cursor: default;\n color: #fb9950;\n font-weight: bold;\n}\n\n#sidebarTabs .tabUnselected,#sidebarTabs .tabcontents .tabSelected{\n background: #2a170d;\n border: 1px solid #542e21;\n border-bottom: 0;\n padding-bottom: 0px;\n color: #fb9950;\n}\n\n#sidebarTabs .tabUnselected:hover{\n color: #c17135\n}\n\n#sidebarTabs .tabcontents .tabSelected{\n padding-bottom: 3px;\n border: 1px solid #905437;\n border-bottom: 0;\n}\n\n#sidebarTabs .tabcontents .tabUnselected{\nbackground: #522d1e;\n border: 1px solid #613725;\n border-bottom: 0;\n padding-bottom: 0;\n}\n\n#sidebarTabs .tabContents{\n background: #522d1e;\n border: 1px solid #905437;\n border-width: 1px 0;\n}\n\n#sidebarTabs .tabContents .tabContents{\nbackground: #2a170d;\n border: 1px solid #905437;\n}\n\n#sidebarTabs .tabContents li.listTitle{\n color: #c5886b;\n}\n/*}}}*/\n/***\n!Popup styles /% ============================================================= %/\n***/\n/*{{{*/\n#popup{\n background: #522d1e;\n border: 1px solid #905437;\n}\n\n#popup hr{\n border-top: 1px solid #905437;\n width: 75%;\n}\n\n#popup a{\n color: #fb9950\n}\n\n#popup a:hover{\n color: #c17135;\n background: transparent;\n text-decoration: underline;\n}\n/*}}}*/\n/***\n!Tiddler display styles /% ============================================================= %/\n***/\n/*{{{*/\n#displayArea{\n margin: 0 15em 0em 15.5em;\n padding: 1em 2em 0 2em;\n background: #33180a;\n border: 1px solid #613725;\n min-height: 400px;\n _position: static;\n}\n\n.unselectedTiddler, .selectedTiddler{\n border-top: 25px solid #000;\n}\n\n.tiddler{\n background: #2a170d;\n border: 1px solid #542e21;\n margin: 0 0 2em 0;\n position: relative;\n _position; static;\npadding: 0;\n}\n\n.title{\n color: #fb9950;\n font-size: 14px;\n font-weight: normal;\n line-height: 23px;\n _position: static;\n}\n\n/*}}}*/\n/***\n''Viewer styles'' /% --------------------------------------------------------------------------------------------------------------- %/\n***/\n/*{{{*/\n.viewer table {\n border: 1px solid #905437;\n}\n\n.viewer td {\n color: #c5886b;\n background: #522d1e;\n border: 1px solid #905437;\n}\n\n.viewer, .editer, .editorFooter{\n color: #c5886b;\n}\n/*}}}*/\n/***\n''Editor styles''/% --------------------------------------------------------------------------------------------------------------- %/\n***/\n/*{{{*/\n.editor textarea, input{\n max-height: 35em;\n background: #c5886b;\n border: 2px inset #613725;\n}\n\n.editor textarea:focus, input:focus{\n background: #ddb9a8;\n}\n/*}}}*/
<div id='header'>\n<div id='titleline'>\n<span id='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span id='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n</div>\n<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\n<div id='sidebar'>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>
|!Date|!url|!toFilename|!backupDir|!user|!status|\n| 29/3/2006 20:44:48 | [[store.php|http://checkettsweb.com/styles/store.php]] | [[themes.htm|http://checkettsweb.com/styles/themes.htm]] | themesBackup | Clint Checketts |
/***\n\n\n----\nUploadPlugin, with [[store.php]] and [[.htaccess]] provide the @@upload@@ and the @@save to web@@ functions. See HowToUpload.\nThe french translation available as a separate tiddler UploadPluginMsgFR\n----\n\n\n***/\n\n/***\n|''Name:''|UploadPlugin|\n|''Type:''|Plugin|\n|''Version:''|3.0.3 (03/02/2006)|\n|''Source:''|[[TiddlyWiki.BidiX.info|http://tiddlywiki.BidiX.info/#UploadPlugin]]|\n|''Author:''|BidiX[at]BidiX.info|\n|''Compatibility:''|TW1.2 & TW2|\n!Usage : \n{{{\n<<upload storeUrl [toFilename [backupDir]]>>\n storeUrl : the url of the store.php to POST the TiddlyWiki\n toFilename : the filename in the storeUrl directory\n backupDir : if present backup the previous toFilename file\n to the backupDir directory\n}}}\n\nInstall the {{{<<upload ... >>}}} macro in SideBarOptions just below the {{{<<saveChanges>>}}} macro.\n\n!Description\n!!Plugin\n*If the TiddlyWiki came from @@local disk@@ :\n**{{{<<saveChanges>>}}} \n***display as ''save to disk''\n***work as usual\n**{{{<<upload ...>>}}}\n***display as ''upload''\n***after saving to disk, upload in the storeUrl directory.\n*If the TiddlyWiki came from @@website@@ :\n**{{{<<saveChanges>>}}} \n***print nothing\n***has been disabled\n**{{{<<upload ...>>}}}\n***display as '''save to web''\n***save in the storeUrl directory.\n*If GenerateAnRssFeed is set :\n**generate the content of the RSSFeed \n**upload the RssFile\n**Caution : use the SiteUrl tiddler to specify url of the TiddlyWiki in the generated RssFile\n*DisplayMessage\n*Log upload in UploadLog\nhint : if UploadLog is the first tiddler in the Timeline Tab, no tiddler has been updated since last upload.\n\n!!store.php\n*method GET\n**display an information page\n*method POST\n**if toFilename already exists and backDir parameter specified\n***rename toFilename to backupDir/toFilename.AAAAMMDD.HHSS.html\n**copy temporaryUploadedFile to toFilename\n** return status\n!User manual\nSee HowToUpload\n!Installation :\n*Install the UploadPlugin as usual\n*Upload the [[store.php]] file on your php aware webserver in your TiddlyWiki directory\n*Protect your directory : \n**for Apache web server ([[for detail see Apache documentation|http://httpd.apache.org/docs/1.3/howto/htaccess.html]]) : \n***configure the [[.htaccess]] :\n****Set the /full/path/from/root/to/your/.passwd file\n****<limit xxx> :\n*****For a private access to your TiddlyWiki directory set ''<limit GET POST>''\n*****For a public access to your TiddlyWiki files, but a private uploading facility set ''<limit POST>''\n***Upload [[.passwd]] and [[.htaccess]] files\n**for other web servers see the appropriate documentation\n*Configure an upload button, for example in the SideBarOptions\n!Suppported Browser\n*Firefox : Ok\n*Internet Explorer : Ok\n*Others : Not tested, please report status.\n\n!Revision history\n* v1.0.0 (17-Dec-2005)\n** first public working version\n*v1.0.1 (23-Dec-2005)\n**reformatting code\n*v1.0.2 (24-Dec-2005)\n**Optional parameter toFilename\n**Optional parameter backupDir\n*v1.0.3 (26-Dec-2005)\n**UploadLog tiddler\n*v1.1.0 (27-Dec-2005)\n**Upload RSS File\n*V2.0.0 (3-Jan-2006)\n**Save to web\n**Compatibilty with TiddlyWiki 1.2.39 and TiddlyWiki 2.0.0 Beta 6\n*V2.0.1 (8-Jan-2006)\n**Compatibilty with TiddlyWiki 2.0.1\n*V2.0.2 (8-Jan-2006)\n**SiteTitle and SiteSubtitle in web page Title\n*V3.0.0 (15-Jan-2006)\n**Asynchronous upload\n**Synchronous upload before unload of the page\n**All strings extracted in macro config\n**Compatibility checked with TW 2.0.2 & TW 1.2.39 for both FF 1.5 and IE 6\n*V3.0.1 (18-Jan-2006)\n**UTF8toUnicode conversion problem in Firefox\n*V3.0.2 (25-Jan-2006)\n**HTTPS compatible\n*V3.0.3 (03/02/2006)\n**Firefox 1.5.0.1 crashes due to global var fixed\n\n!Code\n***/\n//{{{\nversion.extensions.UploadPlugin = {major: 3, minor: 0, revision: 3, date: new Date(2006,2,3)};\n\n//\n// Upload Macro\n//\n\nconfig.macros.upload = {\n label: "upload", \n saveLabel: "save to web", \n prompt: "Save and Upload this TiddlyWiki in ", \n accessKey: "U",\n formName: "UploadPlugin",\n contentType: "text/html;charset=UTF-8",\n defaultStoreScript: "store.php"\n};\n\n// only this config need to be translated\nconfig.macros.upload.messages = {\n aboutToUpload: "About to upload TiddlyWiki to %0",\n errorDownloading: "Error downloading",\n errorUploadingContent: "Error uploading content",\n fileNotFound: "file to upload not found",\n fileNotUploaded: "File %0 NOT uploaded",\n label: "upload", \n mainFileUploaded: "Main TiddlyWiki file uploaded to %0",\n prompt: "Save and Upload this TiddlyWiki in ", \n urlParamMissing: "url param missing",\n rssFileNotUploaded: "RssFile %0 NOT uploaded",\n rssFileUploaded: "Rss File uploaded to %0",\n saveLabel: "save to web", \n saveToDisk: "save to disk"\n};\n\nconfig.macros.upload.label = config.macros.upload.messages.label; \nconfig.macros.upload.saveLabel = config.macros.upload.messages.saveLabel; \nconfig.macros.upload.prompt = config.macros.upload.messages.prompt;\n\n\nconfig.macros.upload.handler = function(place,macroName,params){\n var url;\n if (params[0]) {\n url = params[0];\n this.defaultStoreScript = basename(url);\n }\n else\n url = dirname(document.location.toString())+"/"+ this.defaultStoreScript;\n var toFilename=params[1];\n var backupDir=params[2];\n var label;\n if (document.location.toString().substr(0,4) == "http")\n label = this.saveLabel;\n else\n label = this.label;\n createTiddlyButton(place, label, this.prompt+dirname(url), \n function () {upload(url, toFilename, backupDir, true); return false;}, \n null, null, this.accessKey);\n};\n\n//\n// TiddlyWiki Core patches\n//\n\n// overwrite the saveChanges handler \n// configure no Macro instead of saveChanges Macro in case of http: access\nconfig.macros.saveChanges.label = config.macros.upload.messages.saveToDisk;\nconfig.macros.saveChanges.handler = function(place,macroName,params)\n{\n if(!readOnly) {\n if (document.location.toString().substr(0,4) != "http") \n createTiddlyButton(place,this.label,this.prompt,function () {saveChanges(); return false;},null,null,this.accessKey);\n // else no TiddlyButton\n }\n}\n\n// Check if there is any unsaved changes before exiting\n// if unsaved changes : saveOrUpload\n//function checkUnsavedChanges()\ncheckUnsavedChanges = function ()\n{\n if(store && store.dirty) {\n if(confirm(config.messages.unsavedChangesWarning))\n saveOrUpload(false); // Because called by <body onunload=... Upload must be synchronous\n }\n}\n\n//\n// Utility functions \n//\n\nfunction dirname(filePath)\n{\n if ((lastpos = filePath.lastIndexOf("/")) != -1)\n return filePath.substring(0, lastpos);\n else\n return filePath.substring(0, filePath.lastIndexOf("\s\s"));\n}\n\nfunction basename(filePath)\n{\n if ((lastpos = filePath.lastIndexOf("#")) != -1) \n filePath = filePath.substring(0, lastpos);\n if ((lastpos = filePath.lastIndexOf("/")) != -1)\n return filePath.substring(lastpos + 1);\n else\n return filePath.substring(filePath.lastIndexOf("\s\s")+1);\n}\n\n// TiddlyWiki utilities\n\nfunction getLocalPath() {\n //extract from the Jeremy's SaveFile \n var originalPath = document.location.toString();\n // Check we were loaded from a file URL\n if(originalPath.substr(0,5) != "file:")\n {\n alert(config.messages.notFileUrlError);\n displayTiddler(null,"SaveChanges",0,null,null,false,false);\n return;\n }\n // Remove any location part of the URL\n var hashPos = originalPath.indexOf("#");\n if(hashPos != -1)\n originalPath = originalPath.substr(0,hashPos);\n // Convert to a native file format assuming\n // "file:///x:/path/path/path..." - pc local file --> "x:\spath\spath\spath..."\n // "file://///server/share/path/path/path..." - FireFox pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n // "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."\n // "file://server/share/path/path/path..." - pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n var localPath;\n if(originalPath.charAt(9) == ":") // pc local file\n localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file://///") == 0) // FireFox pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file:///") == 0) // mac/unix local file\n localPath = unescape(originalPath.substr(7));\n else if(originalPath.indexOf("file:/") == 0) // mac/unix local file\n localPath = unescape(originalPath.substr(5));\n else // pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\s\s");\n return localPath;\n}\n\n//\n// LogUpload\n//\n\nfunction getLogUploadTiddler() {\n var tiddler;\n if (version.major < 2)\n tiddler = store.tiddlers['UploadLog'];\n else\n tiddler = store.getTiddler("UploadLog");\n if (!tiddler) \n {\n tiddler = new Tiddler();\n tiddler.title = 'UploadLog';\n tiddler.text = "|!Date|!url|!toFilename|!backupDir|!user|!status|";\n if (version.major < 2)\n store.tiddlers['UploadLog'] = tiddler;\n else\n store.addTiddler(tiddler);\n }\n return tiddler;\n}\n\nfunction logUpload(url, toFilename, backupDir) \n{\n var tiddler = getLogUploadTiddler();\n var now = new Date();\n var newText = "| ";\n //newText += now.toLocaleString() + " | ";\n \n newText += now.getDate()+"/"+(now.getMonth()+1)+"/"+now.getFullYear() + " ";\n newText += now.getHours()+":"+now.getMinutes()+":"+now.getSeconds()+" | ";\n newText += "[["+basename(url)+"|"+url + "]] | ";\n newText += "[["+basename(toFilename) + "|" + dirname(url)+"/"+basename(toFilename) + "]] | ";\n newText += backupDir + " | ";\n newText += config.options.txtUserName + " |";\n\n tiddler.text = tiddler.text + "\sn" + newText;\n tiddler.modifier = config.options.txtUserName;\n tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers['UploadLog'] = tiddler;\n else\n store.addTiddler(tiddler);\n //displayTiddler(document.getElementById('sidebar'),"UploadLog",1,null,null,false);\n if (version.major < 2)\n store.notifyAll();\n}\n\nfunction logUploadStatusOk() \n{\n var tiddler = getLogUploadTiddler();\n var newText = " ok |";\n tiddler.text = tiddler.text + newText;\n tiddler.modifier = config.options.txtUserName;\n tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers['UploadLog'] = tiddler;\n else\n store.addTiddler(tiddler);\n //displayTiddler(document.getElementById('sidebar'),"UploadLog",1,null,null,false);\n if (version.major < 2)\n store.notifyAll();\n store.notify('UploadLog',true);\n}\n\n//\n// download file before save it\n// \n\nfunction download(uploadUrl, uploadToFilename, uploadBackupDir, asynchronous) {\n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n try {\n if (uploadUrl.substr(0,4) == "http") {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");\n }\n else {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n }\n } catch (e) { }\n\n request.open("GET",document.location.toString(), asynchronous);\n if (asynchronous) {\n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if(request.status == 200) {\n uploadChangesFrom(uploadUrl, uploadToFilename, uploadBackupDir, request.responseText, asynchronous);\n }\n else\n alert(config.macros.upload.messages.errorDownloading.format([document.location.toString()]));\n }\n }\n }\n request.send(null);\n if (! asynchronous) {\n if(request.status == 200) {\n uploadChangesFrom(uploadUrl, uploadToFilename, uploadBackupDir, request.responseText, asynchronous);\n }\n else\n alert(config.macros.upload.messages.errorDownloading.format([document.location.toString()]));\n }\n\n}\n\n// saveOrUpload\n\nfunction saveOrUpload(asynchronous) {\n if (document.location.toString().substr(0,4) == "http") {\n // try a default synchronous upload\n var url = dirname(document.location.toString())+"/"+ config.macros.upload.defaultStoreScript;\n upload(url, null, null, asynchronous);\n }\n else \n saveChanges();\n}\n\n//\n//Upload\n//\n\nfunction upload(url, toFilename, backupDir, asynchronous)\n{\n clearMessage();\n // only for forcing the message to display\n if (version.major < 2)\n store.notifyAll();\n if (url == null) {\n alert(config.macros.upload.messages.urlParamMissing);\n return;\n }\n if (backupDir == null)\n backupDir = '';\n var toPath;\n if (toFilename)\n toPath = toFilename;\n else {\n toPath = basename(document.location.toString());\n }\n logUpload(url, toPath, backupDir);\n if (document.location.toString().substr(0,5) == "file:") {\n saveChanges();\n }\n displayMessage(config.macros.upload.messages.aboutToUpload.format([dirname(url)]), dirname(url));\n uploadChanges(url, toPath, backupDir, asynchronous);\n if(config.options.chkGenerateAnRssFeed) {\n //var rssContent = convertUnicodeToUTF8(generateRss());\n var rssContent = generateRss();\n var rssPath = toPath.substr(0,toPath.lastIndexOf(".")) + ".xml";\n uploadContent(url, rssContent, rssPath, '', asynchronous, function (responseText) {\n if (responseText.substring(0,1) != 0) {\n alert(responseText);\n displayMessage(config.macros.upload.messages.rssFileNotUploaded.format([rssPath]));\n }\n else {\n displayMessage(config.macros.upload.messages.rssFileUploaded.format([dirname(url)+"/"+basename(rssPath)]), dirname(url)+"/"+basename(rssPath));\n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n }\n );\n }\n return;\n}\n\nfunction uploadChanges(url, toFilename, backupDir, asynchronous)\n{\n var original;\n if (document.location.toString().substr(0,4) == "http") {\n original = download(url, toFilename, backupDir, asynchronous);\n return;\n }\n else {\n // standard way : Local file\n original = loadFile(getLocalPath());\n if(window.Components)\n // it's a mozilla browser\n try {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]\n .createInstance(Components.interfaces.nsIScriptableUnicodeConverter);\n converter.charset = /* The character encoding you want, using UTF-8 here */ "UTF-8";\n original = converter.ConvertToUnicode(original);\n }\n catch(e) {\n }\n }\n //DEBUG alert(original);\n uploadChangesFrom(url, toFilename, backupDir, original, asynchronous);\n}\n\nfunction uploadChangesFrom(url, toFilename, backupDir, original, asynchronous)\n{\n\n var startSaveArea = '<div id="' + 'storeArea">'; // Split up into two so that indexOf() of this source doesn't find it\n var endSaveArea = '</d' + 'iv>';\n // Locate the storeArea div's\n var posOpeningDiv = original.indexOf(startSaveArea);\n var posClosingDiv = original.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1))\n {\n alert(config.messages.invalidFileError.format([document.location.toString()]));\n return;\n }\n // I think conversion is automatically done\n //var revised = original.substr(0,posOpeningDiv + startSaveArea.length) + \n // convertUnicodeToUTF8(allTiddlersAsHtml()) + "\sn\st\st" +\n // original.substr(posClosingDiv);\n \n var revised = original.substr(0,posOpeningDiv + startSaveArea.length) + \n allTiddlersAsHtml() + "\sn\st\st" +\n original.substr(posClosingDiv);\n\n // I think conversion is automatically done\n // var newSiteTitle = convertUnicodeToUTF8((getElementText("siteTitle") + " - " + getElementText("siteSubtitle")).htmlEncode());\n var newSiteTitle;\n if(version.major < 2){ //version is set in core TW code\n newSiteTitle = (getElementText("siteTitle") + " - " + getElementText("siteSubtitle")).htmlEncode();\n } else {\n newSiteTitle = (wikifyPlain ("SiteTitle") + " - " + wikifyPlain ("SiteSubtitle")).htmlEncode();\n }\n revised = revised.replace(new RegExp("<title>[^<]*</title>", "im"),"<title>"+ newSiteTitle +"</title>");\n var response = uploadContent(url, revised, toFilename, backupDir, asynchronous, function (responseText) {\n if (responseText.substring(0,1) != 0) {\n alert(responseText);\n displayMessage(config.macros.upload.messages.fileNotUploaded.format([getLocalPath()]));\n }\n else {\n displayMessage(config.macros.upload.messages.mainFileUploaded.format([dirname(url)+"/"+basename(toFilename)]), dirname(url)+"/"+basename(toFilename));\n logUploadStatusOk();\n store.setDirty(false);\n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n }\n );\n}\n\nfunction uploadContent(url, content, toPath, backupDir, asynchronous, callbackFn) {\n var boundary = "---------------------------"+"AaB03x";\n //Create XMLHttpRequest Object\n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n try {\n // Needed for Mozilla if local file tries to access an http URL\n if (document.location.toString().substr(0,4) == "http") {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");\n }\n else {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n }\n } catch (e) { }\n // compose headers data\n var sheader = "\sr\sn";\n sheader += "--" + boundary + "\sr\snContent-disposition: form-data;name=\s"" + config.macros.upload.formName +"\s"\sr\sn\sr\sn";\n sheader += "backupDir="+backupDir+";user=" + config.options.txtUserName + "\sr\sn"; \n sheader += "\sr\sn" + "--" + boundary + "\sr\sn";\n sheader += "Content-disposition: form-data;name=\s"userfile\s";filename=\s""+toPath+"\s"\sr\sn";\n sheader += "Content-Type: " + config.macros.upload.contentType + "\sr\sn";\n sheader += "Content-Length: " + content.length + "\sr\sn\sr\sn";\n // compose trailer data\n var strailer = new String();\n strailer = "\sr\sn--" + boundary + "--\sr\sn";\n var data;\n data = sheader + content + strailer;\n request.open("POST",url,asynchronous);\n if (asynchronous) {\n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if(request.status == 200)\n callbackFn(request.responseText);\n else\n alert(config.macros.upload.messages.errorUploadingContent);\n }\n };\n }\n request.setRequestHeader("Content-Length",data.length);\n request.setRequestHeader("Content-Type","multipart/form-data; boundary="+boundary);\n request.send(data); \n if (! asynchronous) {\n if(request.status == 200)\n callbackFn(request.responseText);\n else\n alert(config.macros.upload.messages.errorUploadingContent);\n }\n\n}\n\n//}}}
/***\n''Name:'' Weblog\n''Version:'' 1.2.0\n''Location:'' http://checkettsweb.com/styles/themes.htm#WeblogPlugin\n''Author:'' Clint Checketts\n\n''Description:'' Posts the most recently edited tiddlers when the TiddlyWiki is opened, similar to a blog.\n\n''Syntax:'' Change the daysOrPosts and numOfDaysOrPosts variables in the code section. \nExamples: \n{{{\n var daysOrPosts = "days";\n var numOfDaysOrPosts = "2";\n}}}\nwill display the defaultTiddlers then all the tiddlers from the 2 most recent days, except those tagged as SystemTiddlers.\n{{{\n var daysOrPosts = "posts";\n var numOfDaysOrPosts = "15";\n}}}\nwill display the defaultTiddlers then the 15 most recent posts, except those tagged as SystemTiddlers.\n\n''Directions:'' Copy this tiddler and tag it as systemConfig. Next, change the daysOrPosts and numOfDaysOrPosts variable to your liking in the 'Settings section'\n\n''Know Issues:'' If a defaultTiddlers references a tiddler that has recently been referenced it will appear in the chronological order rather than at the top of the page. Also, if you are inserting the 15 most recent posts and default tiddlers new enough they too will be part of that count. If there is not text in the default tiddler, the weblog plugin isn't run.\n\n''Revision History:''\n v0.1.0 (03 Aug 2005): initial release\n v0.1.2 (03 Aug 2005): fixed 'day' sorting order and permalink breakage\n v0.1.3 (10 Aug 2005): fixed error for when the numOfDaysOrPosts is greater than number of tiddlers.\n v1.1.0 (25 Jan 2005): updated to be compatible with TiddlyWiki 2.0\n v1.2.0 (26 Jan 2005): enabled displaying of tiddlers by date created in addition to date modified\n\n!Settings section: (edit these)\n***/\n//{{{\nvar daysOrPosts = "posts";\nvar numOfDaysOrPosts = "10";\nvar modifiedOrCreate = "modified" \n//}}}\n\n\n\n/***\n!Code section:\n***/\n//{{{\n//modified is the other option\n// // We don't want to show tiddlers tagged as systemTiddlers etc. (this doesn't work yet...)\nvar ignoreTags = ("systemTiddlers","systemConfig","weblogIgnore");\n\nStory.prototype.displayTiddlers_original_TiddlyBlog = Story.prototype.displayTiddlers;\nStory.prototype.displayTiddlers = function(src,titles,state,highlightText,highlightCaseSensitive,animate,slowly) {\n // if using the addressbar to select tiddlers return\n if(window.location.hash) daysOrPosts = "";\n if(daysOrPosts == "posts"){\n //lookup the last few posts\n var tiddlerNames = store.reverseLookup("tags","systemTiddlers",false,modifiedOrCreate);\n //Just display all tiddlers if there aren't enough\n if(tiddlerNames.length-numOfDaysOrPosts<0) numOfDaysOrPosts = tiddlerNames.length; \n for(var t = tiddlerNames.length-numOfDaysOrPosts;t<=tiddlerNames.length-1;t++)\n displayTiddler(src,tiddlerNames[t].title,state,highlightText,highlightCaseSensitive,animate,slowly);\n }\n if (daysOrPosts == "days"){\n var lastDay = "";\n var tiddlerNames = store.reverseLookup("tags","systemTiddlers",false,modifiedOrCreate);\n var t = tiddlerNames.length -1;\n var tFollower = 0;\n for(t;t>=0;t--) if(numOfDaysOrPosts >= 0){\n var theDay = tiddlerNames[t].modified.convertToYYYYMMDDHHMM().substr(0,8);\n if(theDay != lastDay){\n numOfDaysOrPosts = numOfDaysOrPosts -1;\n lastDay = theDay;\n tFollower = t;\n }\n }\n\n for(tFollower = tFollower+1; tFollower < tiddlerNames.length;tFollower++){\n displayTiddler(src,tiddlerNames[tFollower].title,state,highlightText,highlightCaseSensitive,animate,slowly);\n }\n\n }\n\n // call the original displayTiddlers function\n this.displayTiddlers_original_TiddlyBlog(src,titles,state,highlightText,highlightCaseSensitive,animate,slowly);\n\n}\n//}}}
Here is a cloud of the tags used here: <<tagCloud>>
/***\n!Zeldman Orange\n\n!Popup styles /% ================================================================== %/\n***/\n/*{{{*/\n#popup {\n padding: 0;\n background: #fff;\n color: #f79b60;\n}\n\n#popup a{\n color: #f79b60;\n font-weight: normal;\n}\n\n#popup a:hover {\n background: #f5d7b4;\n color: #930;\n}\n\n#popup hr {\n border-top: solid 1px #f5d7b8; \n}\n/*}}}*/\n/***\n!Generic styles /% ================================================================== %/\n***/\n/*{{{*/\nh1,h2,h3,h4,h5,h6 {\n background-color: transparent;\n}\n\nh1 {\nborder-bottom: 2px dotted #ccc;\n}\n\nh2 {\nborder-bottom: 1px dotted #ccc;\n}\n/*}}}*/\n/***\n!Header styles /% ================================================================== %/\n***/\n/*{{{*/\n.titleLine {\n height: 7.5em;\n background: #c51;\n border-bottom: 8px solid #b8764c;\n color: #fff;\n}\n\n.titleLine a:link{\n color: #fff;\n}\n\n.titleLine a:hover{\nborder-bottom: 2px dotted;\n}\n\n.headerLine{\n padding: 0px;\n border-top: 5px solid #cf936c;\n border-bottom: 3px solid #f5d7b4;\n}\n\n.siteTitle {\n text-align: right;\n font-size: 4.5em;\n font-weight: bold;\n padding-right: .5em;\n}\n\n.siteSubtitle {\n text-align: right;\n font-size: 1.5em;\n font-family: georgia,times;\n padding-right: 1.5em;\n}\n/*}}}*/\n/***\n!Main menu styles /% ================================================================== %/\n***/\n/*{{{*/\n#mainMenu {\n width: 11em;\n padding: 0;\n top: 8.5em;\n left: 1em;\n border: 1px solid #f5d7b4;\n color: #666\n}\n\n#mainMenu ul,\n#mainMenu li{\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n#mainMenu li strong a:link {\n color: #fff;\n background: #d16400;\n}\n\n#mainMenu li strong a:hover,#mainMenu li strong .button:hover{\n color: #f5d7b4;\n background: #930;\n text-decoration: none;\n}\n\n#mainMenu li a:link{\n display: block; \n text-decoration: none;\n padding-right: 5px;\n margin-right: 0;\n color: #f79b60;\n}\n\n#mainMenu li a:hover, #mainMenu li .button:hover{\n color: #930;\n background-color: #f5d7b4;\n text-decoration: none;\n}\n\n#mainMenu a:link{\n text-decoration: none;\n color: #f79b60;\n margin-right: 5px;\n}\n\n#mainMenu a:hover,#mainMenu .button:hover{\n text-decoration: underline;\n background: transparent;\n color: #930;\n}\n/*}}}*/\n\n/***\n!Message area styles /% ================================================================== %/\n***/\n/*{{{*/\n#messageArea {\n background-color: #f5d7b4;\n color: #867663;\n padding: 0.5em;\n margin: 0em 0em 0.6em 0em;\n border: 1px solid #cecece;\n}\n\n#messageArea a:link, #messageArea a:visited {\n color: #c51;\n}\n\n#messageArea a:hover {\n color: #f79b60;\n}\n\n#messageArea a:active {\n color: #fff;\n}\n/*}}}*/\n/***\n!Sidebar styles /% ================================================================== %/\n***/\n/*{{{*/\n#sidebar {\n width: 14.5em;\n border-bottom:1px solid #aaa; \n border-left: 1px solid #aaa;\n}\n\n#sidebarOptions{\n background-color: #fff;\n}\n\n#sidebarOptions a{\n color: #f79b60;\n background: transparent;\n text-decoration: none;\n}\n\n#sidebarOptions a:hover{\n color: #c51;\n background: #fff;\n text-decoration: underline;\n}\n\n#sidebarOptions .sliderPanel{\n background: #f5d7b4;\n}\n\n#sidebarOptions .sliderPanel a{\n color: #922;\n font-weight:normal;\n}\n\n#sidebarOptions .sliderPanel a:hover{\n color: #b44;\n background: transparent;\n}\n\n#sidebarTabs {\n background-color: #fff;\n}\n\n#sidebarTabs a {\n background: transparent;\n}\n\n#sidebarTabs .tabContents a:hover {\n color: #922;\n text-decoration: underline;\n background-color: transparent;\n}\n\n.tab {\n margin: 0px 1px; \n border:1px solid #aaa;\n border-bottom:none;\n color: #922;\n}\n\n.tab:hover {\n border-color: black;\n text-decoration: none;\n}\n\n#sidebarTabs .tabSelected {\n background: #f5d7b4;\n padding: 2px 4px;\n color: #922;\n}\n\n#sidebarTabs .tabUnselected {\n background: #c51;\n padding: 2px 4px 0px 4px;\n color: #fff;\n}\n\n#sidebarTabs .tabContents {\n background-color: #f5d7b4;\n width: auto;\n}\n\n#sidebarTabs .tabContents a{\n color: #922;\n}\n\n#sidebarTabs .tabContents a:hover{\n color: #b44;\n}\n\n#sidebarTabs .txtMoreTab .tabSelected,\n#sidebarTabs .txtMoreTab .tabSelected:hover{\n background: #cf936c ;\n color: #000 ;\n text-decoration: none;\n}\n\n#sidebarTabs .txtMoreTab .tabUnselected,\n#sidebarTabs .txtMoreTab .tabUnselected:hover{\n background: #f5d7b4 ;\n color: #000 ;\n text-decoration: none;\n}\n\n#sidebarTabs .txtMoreTab .tabContents {\n color: #fff;\n background: #cf936c;\n border-bottom: solid #aaa 1px;\n}\n/*}}}*/\n/***\n!Tiddler display styles /% ================================================================== %/\n***/\n/*{{{*/\n#displayArea {\n margin: 1em 15em 0em 15em;\n}\n\n.tiddler{\n padding: 0;\n}\n\n.unselectedTiddler{\n border: 1px solid #fff;\n padding: 5px;\n}\n\n.selectedTiddler{\n border: 1px solid #ccc;\n padding: 5px;\n}\n\n.title {\n font-size: 1.5em;\n color: #867663;\n font-weight: bold;\n}\n\n.toolbar {\n font-size: .9em;\n}\n\n.toolbar .button{\n color: #f79b60;\n border: 1px solid #f5d7b4;\n}\n\n.toolbar .button:hover {\n color: #930;\n background: #f5d7b4;\n border-color: #f79b60;\n}\n\n.toolbar a:active {\n color: #666;\n}\n\n.highlight {\n color: #000000;\n background-color: #bcd;\n}\n\n.body {\n border-top:1px solid #ccc;\n padding-top: 0.5em;\n margin-top:0.3em;\n}\n/*}}}*/\n/***\n''Viewer styles'' /% --------------------------------------------------------------------------------------------- %/\n***/\n/*{{{*/\n.tiddler .button {\n color: #f96;\n}\n\n.tiddler .button:hover {\n color: #be540b;\n background: transparent;\n}\n\n.viewer {\n color: #867663;\n}\n\n.viewer .button{\n background: transparent;\n color: #888;\n border: 1px solid transparent;\n}\n\n.viewer .button:hover{\n color: #f96;\n background-color: transparent;\n}\n\n.viewer a,.footer .button {\n color: #f96;\n background-color: transparent;\n}\n\n.viewer a:link, .body a:visited{\n color: #be540b;\n}\n\n.viewer a:hover {\n background-color: transparent;\n text-decoration: underline;\ncolor: #f96;\n}\n\n.viewer blockquote {\n border-left: 1px solid #ccc;\n}\n\n.viewer table {\n border: 2px solid #303030;\n}\n\n.viewer th, .viewer thead td {\n color: #606060;\n background-color: #bcd;\n border: 1px solid #606060;\n font-weight: bold;\n}\n\n.viewer td, tr {\n border: 1px solid #606060;\n padding: 3px;\n}\n\n.viewer hr {\n border-color: #606060;\n color: #666666;\n}\n\n.viewer pre {\n border: 1px solid #adaaad;\n background: #f7d7b5;\n color: #333;\n}\n\n.viewer code {\n color: #9c3000;\n}\n/*}}}*/\n/***\n''Editor styles'' /% --------------------------------------------------------------------------------------------- %/\n***/\n/*{{{*/\n.footer .button {\n padding: 0;\n}\n\n#contentWrapper .editorFooter a:hover,\n#contentWrapper .footer a:hover{\n text-decoration: underline;\n background: transparent;\n}\n\n.editor {\n font-size: .9em;\n}\n\n.editor input,\n.editor textarea {\n border: 1px solid black;\n}\n/*}}}*/
<div class='header'>\n<div class='titleLine'>\n<div class='siteTitle' refresh='content' tiddler='SiteTitle'></div>\n<div class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></div>\n</div>\n<div class='headerLine'></div>\n</div>\n<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\n<div id='sidebar'>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>