<<option chkGenerateAnRssFeed>> GenerateAnRssFeed\n<<option chkOpenInNewWindow>> OpenLinksInNewWindow\n<<option chkSaveEmptyTemplate>> SaveEmptyTemplate\n<<option chkToggleLinks>> Clicking on links to tiddlers that are already open causes them to close\n^^(override with Control or other modifier key)^^\n<<option chkHttpReadOnly>> HideEditingFeatures when viewed over HTTP\n<<option chkForceMinorUpdate>> Treat edits as MinorChanges by preserving date and time\n^^(override with Shift key when clicking 'done' or by pressing Ctrl-Shift-Enter^^\n<<option chkConfirmDelete>> ConfirmBeforeDeleting\nMaximum number of lines in a tiddler edit box: <<option txtMaxEditRows>>\nFolder name for backup files: <<option txtBackupFolder>>\n<<option chkInsertTabs>> Use tab key to insert tab characters instead of jumping to next field (doesn't work in InternetExplorer)\n\n<<option chkDisableWikiLinks>> Disable automatic linking of WikiWords\n
|!Format|!Markup|!Example|\n|Bold|{{{''Bold''}}} (2 single quotes)|''Bold''|\n|Italic|{{{//Italic//}}}|//Italic//|\n|Bold Italic|{{{''//Bold Italic//''}}}|''//Bold Italic//''|\n|Underlined|{{{__Underline__}}}(2 underscores)|__Underlined__|\n|Strikethough|{{{--Strikethrough--}}}<<br>>{{{--}}} replaced {{{==}}} for Stikethrough in TiddlyWiki 2.1|--Strikethrough--|\n|Superscript|{{{Text^^Superscript^^}}}|Text^^Superscript^^|\n|Subscript|{{{Text~~Subscript~~}}}|Text~~Subscript~~|\n|Monospaced text|<html><code>{{{Monospaced}}}</code></html>|{{{Monospaced}}}|\n|Monospaced multiline block|Put <html><code>{{{</code></html> and <html><code>}}}</code></html> on their own lines|<html><pre>{{{<br/>Monospaced<br/>Multi-line<br/>Block<br/>}}}</pre></html>|\n|Highlight|{{{@@Highlight@@}}}|@@Highlight@@|\n|Color|{{{@@color(green):green text@@}}}|@@color(green):green text@@ |\n|~|{{{@@bgcolor(green):text@@}}}|@@bgcolor(green):text@@ |\n|~|{{{@@bgcolor(#3399ff):text@@}}}|@@bgcolor(#3399ff):text@@|\n|~|{{{@@bgcolor(#39f):text@@}}}|@@bgcolor(#39f):text@@|\n|CSS Extended Highlights|{{{@@some css;Highlight@@}}}<<br>>For backwards compatibility, the following highlight syntax is also accepted:<<br>>{{{@@bgcolor(#ff0000):color(#ffffff):red coloured@@}}}|@@background-color:#ff0000;color:#ffffff;red coloured@@<<br>><<slider AtEg ./atEg 'Extended example ...'>>|\n|Custom CSS Class|<html><code>{{wrappingClass{Text that is now accentuated}}}</code></html><<br>>By default, the text is placed in a <span>. To use a <div> instead, insert a line break before the text (after the single {)<<br>>In the CSS:<<br>>{{{.wrappingClass {color: red;} }}}|Add .wrappingClass to StyleSheet|\n|Any HTML|{{{<html><span>any</span><br />}}}<<br>>{{{<b>valid</b> <em>xhtml</em></html>}}}|<html><span>any</span><br /><b>valid</b> <em>xhtml</em></html>|
[[PageTemplate]]\n|>|>|[[SiteTitle]] - [[SiteSubtitle]]|\n|[[MainMenu]]|[[DefaultTiddlers]]<br><br><br><br>[[ViewTemplate]] <br><br>[[EditTemplate]]|[[SideBarOptions]]|\n|~|~|[[OptionsPanel]]|\n|~|~|[[AdvancedOptions]]|\n|~|~|<<tiddler Configuration.SideBarTabs>>|\n\n''StyleSheet:'' [[StyleSheetColors]] - [[StyleSheetLayout]] - [[StyleSheetPrint]]\n\n[[SiteUrl]]\n
SideBarTabs\n|[[Timeline|TabTimeline]]|[[All|TabAll]]|[[Tags|TabTags]]|>|>|[[More|TabMore]] |\n|>|>||[[Missing|TabMoreMissing]]|[[Orphans|TabMoreOrphans]]|[[Shadowed|TabMoreShadowed]]|
/***\n|''Name:''|CreoleFormatterPlugin|\n|''Description:''|Extension of TiddlyWiki syntax to support [[Creole|http://www.wikicreole.org/]] text formatting|\n|''Source:''|http://martinswiki.com/prereleases.html#CreoleFormatterPlugin - for pre-release|\n|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|\n|''Version:''|0.1.5|\n|''Status:''|alpha pre-release|\n|''Date:''|Oct 28, 2006|\n|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.1.0|\n\nThis is an early release of the CreoleFormatterPlugin, which extends the TiddlyWiki syntax to support Creole\ntext formatting. See [[testCreoleFormat]] for an example.\n\nThe Creole formatter is different from the other formatters in that Tiddlers are not required to be\ntagged: instead the Creole format adds formatting that augments TiddlyWiki's format.\n\nThe Creole formatter adds the following:\n# {{{**}}} for bold\n# {{{== Heading 2==}}} with 2 to 6 equals signs for headings\n# {{{[[link|title]]}}} format for links (rather than TW's {{{[[title|link]]}}}).\n\nSince Creole augments rather than replaces TW's formatting there is a problem of how to resolve a prettyLink:\nthe formatter has some intelligence to determine if whether a link is a TW style link or a Creole style link.\nAdditionally a tiddler can be tagged "titleThenLinkFormat" or "linkThenTitleFormat" to force resolution one\nway or the other.\n\nSee: http://www.wikicreole.org/wiki/Home\n\nPlease report any defects you find at http://groups.google.co.uk/group/TiddlyWikiDev\n\nThis is an early alpha release, with (at least) the following known issues:\n# Creole image format not yet supported\n\n***/\n\n//{{{\n// Ensure that the CreoleFormatterPlugin is only installed once.\nif(!version.extensions.CreoleFormatterPlugin) {\nversion.extensions.CreoleFormatterPlugin = {installed:true};\n\nif(version.major < 2 || (version.major == 2 && version.minor < 1)) {\n alertAndThrow("CreoleFormatterPlugin requires TiddlyWiki 2.1 or later.");\n}\n\ncreoleFormatter = {}; // "namespace" for local functions\n\nconfig.creoleFormatters = [\n{\n name: "creoleHeading",\n match: "^={2,6}(?!=)",\n termRegExp: /(={0,6}\sn+)/mg,\n handler: function(w) {w.subWikifyTerm(createTiddlyElement(w.output,"h" + w.matchLength),this.termRegExp);}\n},\n{\n name: "creoleBoldByChar",\n match: "\s\s*\s\s*",\n termRegExp: /(\s*\s*|(?=\sn\sn))/mg,\n element: "strong",\n handler: config.formatterHelpers.createElementAndWikify\n}\n];\n\ncreoleFormatter.explicitLink = {\n name: "creoleExplicitLink",\n match: "\s\s[\s\s[",\n lookaheadRegExp: /\s[\s[(.*?)(?:\s|(.*?))?\s]\s]/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var e;\n var link = lookaheadMatch[1];\n var text = lookaheadMatch[2];\n if(text) {\n // both text and link defined, so try and workout which is which\n var wlRegExp = new RegExp(config.textPrimitives.wikiLink,"mg");\n wlRegExp.lastIndex = 0;\n if(w.tiddler.isTagged("titleThenLinkFormat")) {\n // format is [[text|link]]\n link = text;\n text = lookaheadMatch[1];\n e = config.formatterHelpers.isExternalLink(link) ? createExternalLink(w.output,link) : createTiddlyLink(w.output,link,false,null,w.isStatic);\n } else if(w.tiddler.isTagged("linkThenTitleFormat")) {\n // standard format is [[link|text]]\n e = config.formatterHelpers.isExternalLink(link) ? createExternalLink(w.output,link) : createTiddlyLink(w.output,link,false,null,w.isStatic);\n } else if(config.formatterHelpers.isExternalLink(link)) {\n e = createExternalLink(w.output,link);\n } else if(config.formatterHelpers.isExternalLink(text)) {\n link = text;\n text = lookaheadMatch[1];\n e = createExternalLink(w.output,link);\n } else if(store.tiddlerExists(link)) {\n e = createTiddlyLink(w.output,link,false,null,w.isStatic);\n } else if(store.tiddlerExists(text)) {\n link = text;\n text = lookaheadMatch[1];\n e = createTiddlyLink(w.output,link,false,null,w.isStatic);\n } else if(wlRegExp.exec(text)) {\n //text is a WikiWord, so assume its a tiddler link\n link = text;\n text = lookaheadMatch[1];\n e = createTiddlyLink(w.output,link,false,null,w.isStatic);\n } else {\n // assume standard link format\n e = config.formatterHelpers.isExternalLink(link) ? createExternalLink(w.output,link) : createTiddlyLink(w.output,link,false,null,w.isStatic);\n }\n } else {\n text = link;\n e = config.formatterHelpers.isExternalLink(link) ? createExternalLink(w.output,link) : createTiddlyLink(w.output,link,false,null,w.isStatic);\n }\n createTiddlyText(e,text);\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }//# end handler\n};\n\nfor(var i in config.formatters) {\n // replace formatters as required\n if(config.formatters[i].name == "prettyLink") {\n config.formatters[i] = creoleFormatter.explicitLink;\n } else if(config.formatters[i].name == "italicByChar") {\n config.formatters[i].termRegExp = /(\s/\s/|(?=\sn\sn))/mg;\n } else if(config.formatters[i].name == "list") {\n // require a space after the list character (required for "*" which otherwise clashes with bold\n config.formatters[i].match = "^[\s\s*#;:]+ ";\n }\n}\n\nfor(i in config.creoleFormatters){ \n // add new formatters\n config.formatters.push(config.creoleFormatters[i]);\n}\n\n}// end of "install only once"\n//}}}\n
[[Home]]
/***\n|''Name:''|DisableWikiLinksPlugin|\n|''Description:''|Allows you to disable TiddlyWiki's automatic linking of WikiWords|\n|''Source:''|http://martinswiki.com/prereleases.html#PmWikiFormatterPlugin|\n|''Author:''|Martin Budden (mjbudden (at) gmail (dot) com)|\n|''Version:''|0.1.1|\n|''Status:''|alpha pre-release|\n|''Date:''|Aug 5, 2006|\n|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.1.0|\n***/\n\n//{{{\n\n// Ensure that the DisableWikiLinksPlugin is only installed once.\nif(!version.extensions.DisableWikiLinksPlugin) {\nversion.extensions.DisableWikiLinksPlugin = {installed:true};\n\nif(version.major < 2 || (version.major == 2 && version.minor < 1))\n alertAndThrow("DisableWikiLinksPlugin requires TiddlyWiki 2.1 or newer.");\n\nif (config.options.chkDisableWikiLinks==undefined)\n config.options.chkDisableWikiLinks= false;\n\nTiddler.prototype.autoLinkWikiWords = function()\n{\n if(config.options.chkDisableWikiLinks==true)\n return false;\n return !this.isTagged("systemConfig") && !this.isTagged("excludeMissing");\n}\n\n} // end of "install only once"\n//}}}\n
/***\n<<tiddler DividedListsPluginDocumentation>>\n!Code\n***/\n//{{{\nversion.extensions.DividedListsPlugin = { major: 1, minor: 1, revision: 0, date: new Date(2006,17,3),\n source: "http://yann.perrin.googlepages.com/twkd.html#DividedListsPlugin"\n};\n//}}}\n/***\n// //Partial Tiddler List\n***/\n//{{{\nconfig.macros.listPart = {};\nconfig.macros.listPart.handler = function (place,macroName,params,wikifier,paramString,tiddler) {\nvar type = params[0] ? params[0] : "all";\nvar theList = document.createElement("ul");\nplace.appendChild(theList);\nif(config.macros.list[type].prompt)\n createTiddlyElement(theList,"li",null,"listTitle",config.macros.list[type].prompt);\nvar results;\nif(config.macros.list[type].handler)\n results = config.macros.list[type].handler(params);\nvar model = new RegExp("^["+params[1]+"]","i");\nfor (var t = 0; t < results.length; t++)\n {\n var theListItem = document.createElement("li")\n if(typeof results[t] == "string")\n {\n if (model.test(results[t]))\n {\n theList.appendChild(theListItem);\n createTiddlyLink(theListItem,results[t],true);\n }\n }\n else\n {\n if (model.test(results[t].title))\n {\n theList.appendChild(theListItem);\n createTiddlyLink(theListItem,results[t].title,true);\n }\n }\n }\n}\n//}}}\n// //Partial Tag List\n//{{{\nconfig.macros.tagListPart = {};\nconfig.macros.tagListPart.handler = function (place,macroName,params,wikifier,paramString,tiddler) {\nvar model = new RegExp("^["+params[0]+"]","i");\nvar tags = store.getTags();\nvar theDateList = createTiddlyElement(place,"ul",null,null,null);\nif(tags.length == 0)\n createTiddlyElement(theDateList,"li",null,"listTitle",config.macros.allTags.noTags);\nfor (var t=0; t<tags.length; t++) {\n if (model.test(tags[t])) {\n var theListItem =createTiddlyElement(theDateList,"li",null,null,null);\n var theTag = createTiddlyButton(theListItem,tags[t][0] + " (" + tags[t][1] + ")",config.macros.allTags.tooltip.format([tags[t][0]]),onClickTag);\n theTag.setAttribute("tag",tags[t][0]);\n }\n }\n}\n//}}}\n/***\n// //Defining shadow tiddlers\n***/\n//{{{\nfunction defineTabShadow (listType,tabsTitle,containerTitle)\n{\nvar tabdef = "<<tabs txtTabbedList" + listType + " ";\nfor (var t = 0; t < tabsTitle.length; t++)\n {\n tabdef += tabsTitle[t] + " 'Tiddlers in " + tabsTitle[t] +"' " + listType.toUpperCase()+tabsTitle[t] + " ";\n if (containerTitle != 'TabTags')\n config.shadowTiddlers[listType.toUpperCase()+tabsTitle[t]]="<<listPart " + listType + " " + tabsTitle[t] + ">>";\n else\n config.shadowTiddlers[listType.toUpperCase()+tabsTitle[t]]="<<tagListPart " + tabsTitle[t] + ">>";\n }\ntabdef += ">>";\nconfig.shadowTiddlers[containerTitle]=tabdef;\n}\ntabs=['a-e','f-j','k-o','p-s','t-z','\s\sW'];\ndefineTabShadow('all',tabs,'TabAll');\ndefineTabShadow('tags',tabs,'TabTags');\ndefineTabShadow('missing',tabs,'TabMoreMissing');\ndefineTabShadow('orphans',tabs,'TabMoreOrphans');\ndefineTabShadow('shadowed',tabs,'TabMoreShadowed');\nconfig.shadowTiddlers.DividedListsPluginDocumentation = "Documentation for this plugin is available [[here|" + version.extensions.DividedListsPlugin.source +"Documentation]]";\n//}}}\n// // Optionally replace timeline by a calendar\n//{{{\nif (config.macros.calendar!=undefined)\n {\n if (config.options.chkCalendarAsTimeline==undefined)\n config.options.chkCalendarAsTimeline=false;\n config.shadowTiddlers.AdvancedOptions +="\sn<<option chkCalendarAsTimeline>> Replace timeline with a calendar of the current month"; \n if (config.options.chkCalendarAsTimeline)\n config.shadowTiddlers.TabTimeline = "<<calendar thismonth>>";\n }\n//}}}
|Name|DividedListsPlugin|\n|Author|YannPerrin|\n|Location|http://yann.perrin.googlepages.com/twkd.html#DividedListsPlugin|\n|Version|1.1.0|\n|Requires|~TW2.x|\n\n!Description\nThis plugin defines two macros (listPart and tagListPart) and uses them to provide tabbed lists of tiddlers and tags in SideBarTabs\n\n!Installation\n*import (or copy/paste in edit mode) the following tiddlers into your document:<<br>>DividedListsPlugin (tagged with systemConfig)\n*if you want to have offline access to this plugin documentation, import (or copy/paste in edit mode) the following tiddlers into your document:<<br>>DividedListsPluginDocumentation\n\n!Usage\n''Once properly installed'' (see above), this plugin should significantly decrease the height of SideBarTabs lists.\nIf CalendarPlugin (by [[Steve Rumsby]]) is installed it also provides an option to replace the timeline with a calendar (see AdvancedOptions)\nIf you want to have this option turned on by default, createa tiddler tagged with <<tag systemConfig>> and include in it these lines :\n{{{\nif (config.options.chkCalendarAsTimeline==undefined)\nconfig.options.chkCalendarAsTimeline=true;\n}}}\nThe title of such a tiddler should be before DividedListsPlugin in alphabetical order\nIt may be interesting as most screens are wider than tall.\nAnd with the help of CalendarPlugin or [[ArchivedTimeline|http://ptw.sourceforge.net/include/ArchivedTimeline.js]] (by [[Bram Chen]]) and a little StyleSheet tweak, you could obtain a fairly usable FixedSidebar.\n\n!Revision History\n2006.17.03-1.1.0\n>added an option to replace the timeline with a calendar if CalendarPlugin is installed\n2006.16.03-1.0.0\n>Initial release\n
|!Format|!Markup|!Example|\n|''Headings''|{{{!!Heading 2}}}<<br>>{{{!!!Heading 3}}}<<br>>{{{!!!!Heading 4}}}<<br>>{{{!!!!!Heading 5}}}<<br>><<br>>Usually avoid Heading1 as Tiddler titles are nominally Heading1.|<html><h2>Heading 2</h2><h3>Heading 3</h3><h4>Heading 4</h4><h5>Heading 5</h5></html>|\n|''Lists''|{{{*Bulleted list}}}|<html><ul><li>Bulleted List</li></ul></html>|\n|~|{{{#Numbered list}}}|<html><ol><li>Numbered List</li></ol></html>|\n|~|Definition list<<br>>{{{;Term}}}<<br>>{{{:definition}}}|<html><dl><dt>Term</dt><dd>definition</dd></dl></html>|\n|~|Lists can be mixed and nested<<br>>{{{*}}}Bullet<<br>>{{{*#}}}Number<<br>>{{{*#;}}}Item<<br>>{{{*#:}}}Definition|<html><ul><li>Bullet<ol><li>Numbered<dl><dt></dt>Item<dd>Definition</dd></dl></li></ol></li></ul></html>|\n|''Block quotes''|{{{>Blockquote}}}<<br>>{{{>>Nested quote}}}|<html><blockquote>Blockquote<blockquote>Nested<br/> quote</blockquote></blockquote></html>|\n|~|{{{<<<}}}<<br>>{{{multi-line}}}<<br>>{{{blockquote}}}<<br>>{{{<<<}}}|<html><blockquote>multi-line<br/>blockquote</blockquote></html>|\n|''Horizontal Rule''|{{{----}}} (4 dashes on a line of their own)|<html><hr></html>|\n|''Links''|Any {{{WikiWord}}} creates a link to a tiddler (whether it exists or not).<<br>>Note that a WikiWord has to start with a capital letter and have a further mix of upper and lower case.|[[WikiWord]]|\n|~|Manual link<<br>>{{{[[Table of Contents]]}}} (Especially for tiddlers with spaces in their titles)|[[Table of Contents]]|\n|~|{{{[[Pretty Link|Link]]}}}|[[Pretty Link|Link]]|\n|~|Automatic external link {{{http://www.tiddlywiki.com}}}|http://www.tiddlywiki.com|\n|~|Pretty external link<<br>>{{{[[My Home Page|http://www.tiddlywiki.com]]}}}|[[My Home Page|http://www.tiddlywiki.com]]|\n|~|OS Folder link<<br>>Windows Share: {{{file://///server/share}}}<<br>>Windows Local: {{{file:///c:/folder/file}}}<<br>>Un*x Local File: {{{file://folder/file}}}<<br>>Relative File: {{{[[folder/file]]}}}|file://///server/share <<br>>file:///c:/folder/file <<br>>file://folder/file <<br>> [[folder/file]]|\n|''Images''|{{{[img[favicon.ico]]}}}<<br>>Note that image files are always external to the TW file|[img[http://www.tiddlywiki.com/favicon.ico]]|\n|~|Right aligned<<br>>{{{[>img[favicon.ico]]}}}|[>img[http://www.tiddlywiki.com/favicon.ico]]|\n|~|Left aligned<<br>>{{{[<img[favicon.ico]]}}}|[<img[http://www.tiddlywiki.com/favicon.ico]]|\n|''Image Links''|{{{[img[fav.ico][TiddlerName]]}}}|[img[http://www.tiddlywiki.com/favicon.ico][TiddlerName]]|\n|~|{{{[img[fav.ico][Alias|TiddlerName]]}}}|[img[http://www.tiddlywiki.com/favicon.ico][Alias|TiddlerName]]|\n|~|{{{[img[fav.ico][http://www.aa.com]]}}}|[img[http://www.tiddlywiki.com/favicon.ico][http://www.tiddlywiki.com]]|\n|~|>|also see ''Links'' and ''Images'' sections in this table|\n|''Inline''<<br>>''Comments''|{{{Not shown: /% hidden comment %/}}}<<br>>Text between the markers will not be shown|Not shown:/% hidden text %/|
Wellcome.\n\nThis is where I post [[TiddlyWiki]] macros, plugins and other extensions, that are under development, prior to posting them on the main TiddlyWiki site.\n\nThe aim is to let people try them out, give me feedback and report bugs. Items on this site may be in alpha, beta or release candidate status. They might contain bugs (but shouldn't contain anything that will crash your TiddlyWiki, or make it unusable).\n<<tiddler [[Plugins]]>>\nSee http://tiddlypedia.com and http://solarsystem.tiddlypedia.com for examples of the TiddlyWikis using Wikipedia format and content.\n\nยฉ 2006 Martin Budden\n^^[img[http://www.tiddlywiki.com/favicon.ico]] TiddlyWiki <<version>>^^\n
[[Home]]\n\n[[Plugins]]\n\n[[Basic Formatting]]\n[[Document Formatting]]\n[[Table Formatting]]\n\n[[Configuration]]\n
That's me.
/***\n|''Name:''|MediaWikiFormatterPlugin|\n|''Description:''|Allows Tiddlers to use [[MediaWiki|http://meta.wikimedia.org/wiki/Help:Wikitext]] ([[WikiPedia|http://meta.wikipedia.org/]]) text formatting|\n|''Source:''|http://martinswiki.com/prereleases.html#MediaWikiFormatterPlugin|\n|''Author:''|Martin Budden (mjbudden (at) gmail (dot) com)|\n|''Version:''|0.3.8|\n|''Status:''|alpha pre-release|\n|''Date:''|Oct 21, 2006|\n|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.1.0|\n\n|''Display instrumentation''|<<option chkDisplayInstrumentation>>|\n|''Display empty template links:''|<<option chkMediaWikiDisplayEmptyTemplateLinks>>|\n|''Allow zooming of thumbnail images''|<<option chkMediaWikiDisplayEnableThumbZoom>>|\n|''List references''|<<option chkMediaWikiListReferences>>|\n\nThis is an early release of the MediaWikiFormatterPlugin, which allows you to insert MediaWiki\nformated text into a TiddlyWiki.\n\nThe aim is not to fully emulate MediaWiki, but to allow you to create MediaWiki content off-line\nand then paste the content into your MediaWiki later on, with the expectation that only minor\nedits will be required.\n\nTo use MediaWiki format in a Tiddler, tag the Tiddler with MediaWikiFormat. See [[testMediaWikiFormat]]\nfor an example.\n\n!!!Issues\nThis is an early alpha release, with (at least) the following known issues:\n# Not all styles from http://meta.wikimedia.org/wiki/MediaWiki:Common.css incorporated\n## Styles for tables don't yet match Wikipedia styles.\n## Styles for image galleries don't yet match Wikipedia styles.\n# Anchors not yet supported.\n\n!!!Not supported\n# Magic words and variables http://meta.wikimedia.org/wiki/Help:Magic_words\n# Template substitution http://meta.wikimedia.org/wiki/Help:Substitution\n# Template colon functions http://meta.wikimedia.org/wiki/Help:Colon_function\n# Template parser functions (eg #if) http://meta.wikimedia.org/wiki/ParserFunctions\n\n***/\n\n//{{{\n// Ensure that the MediaWikiFormatter Plugin is only installed once.\nif(!version.extensions.MediaWikiFormatterPlugin) {\nversion.extensions.MediaWikiFormatterPlugin = {installed:true};\n\nif(version.major < 2 || (version.major == 2 && version.minor < 1))\n {alertAndThrow("MediaWikiFormatterPlugin requires TiddlyWiki 2.1 or later.");}\n\nif(config.options.chkDisplayInstrumentation == undefined)\n {config.options.chkDisplayInstrumentation = false;}\n\nif(config.options.chkMediaWikiDisplayEmptyTemplateLinks == undefined)\n {config.options.chkMediaWikiDisplayEmptyTemplateLinks = false;}\nif(config.options.chkMediaWikiDisplayEnableThumbZoom == undefined)\n {config.options.chkMediaWikiDisplayEnableThumbZoom = false;}\nif(config.options.chkMediaWikiListReferences == undefined)\n {config.options.chkMediaWikiListReferences = false;}\n\nMediaWikiFormatter = {}; // "namespace" for local functions\n\nmwDebug = function(out,str)\n{\n createTiddlyText(out,str.replace(/\sn/mg,"\s\sn").replace(/\sr/mg,"RR"));\n createTiddlyElement(out,"br");\n};\n\nwikify = function(source,output,highlightRegExp,tiddler)\n{\n if(source && source != "") {\n var w = new Wikifier(source,getParser(tiddler),highlightRegExp,tiddler);\n w.linkCount = 0;\n w.tableDepth = 0;\n w.output = tiddler==null ? output : createTiddlyElement(output,"p");\n var time1,time0 = new Date();\n w.subWikifyUnterm(w.output);\n if(tiddler && config.options.chkDisplayInstrumentation) {\n time1 = new Date();\n var t = tiddler ? tiddler.title : source.substr(0,10);\n displayMessage("Wikify '"+t+"' in " + (time1-time0) + " ms");\n }\n }\n//#at point of usage can use:\n//#var output = w.output.nodeType==1 && w.output.nodeName=="P" ? w.output.parentNode : w.output;\n};\n\nMediaWikiFormatter.getTemplateParams = function(w)\n{\n//#{{test|a|b}}\n//#{{test|n=a|m=b}}\n var params = {};\n\n var i = 1;\n var text = w.source + "|";\n var pRegExp = /(?:([^\s|]*)=)?([^\s|]*)\s|/mg;\n var match = pRegExp.exec(text);\n if(match) {\n // skip template name\n match = pRegExp.exec(text);\n }\n while(match) {\n //params[match[1] ? match[1] : i++] = match[2];\n if(match[1]) {\n params[match[1]] = match[2];\n } else {\n params[i] = match[2];\n i++;\n }\n match = pRegExp.exec(text);\n }\n return params;\n};\n\nMediaWikiFormatter.expandTemplate = function(w,tiddler,params)\n// see http://meta.wikimedia.org/wiki/Help:Template\n{\n var text = tiddler.text;\n text = text.replace(/<noinclude>((?:.|\sn)*?)<\s/noinclude>/mg,"");// remove text between noinclude tags\n var ioRegExp = /<includeonly>((?:.|\sn)*?)<\s/includeonly>/mg;\n var t = "";\n var match = ioRegExp.exec(text);\n while(match) {\n t += match[1];\n match = ioRegExp.exec(text);\n }\n text = t == "" ? text : t;\n\n var paramsRegExp = /\s{\s{\s{(.*?)(?:\s|(.*?))?\s}\s}\s}/mg;\n t = "";\n var pi = 0;\n match = paramsRegExp.exec(text);\n while(match) {\n var name = match[1];\n var def = match[2];\n var val = params[name];\n if(!val) {\n val = def;\n }\n if(!val) {\n val = match[0];\n }\n t += text.substring(pi,match.index) + val;\n pi = paramsRegExp.lastIndex;\n match = paramsRegExp.exec(text);\n }\n return t == "" ? text : t;\n};\n\nMediaWikiFormatter.endOfParams = function(w,text)\n{\n var p = 0;\n var i = text.indexOf("|");\n if(i==-1) {return -1;}\n var n = text.indexOf("\sn");\n if(n!=-1 && n<i) {return -1;}\n var b = text.indexOf("[[");\n if(b!=-1 && b<i) {return -1;}// can't have [[ in parameters\n \n b = text.indexOf("{{");\n while(b!=-1 && b<i) {\n // have {{ before |, so need to find first "|" after "{{..}}" pairs\n //cut off the ..{{, find the }} cut off and repeat\n p += b;\n text = text.substr(b);\n var c = text.indexOf("}}");\n p += c;\n text = text.substr(c);\n i = text.indexOf("|");\n if(i==-1) {return -1;}\n n = text.indexOf("\sn");\n if(n!=-1 && n<i) {return -1;}\n b = text.indexOf("{{");\n i = -1;\n }\n return i;\n};\n\nMediaWikiFormatter.readToDelim = function(w)\n//!!! this is a bit rubish, needs doing properly.\n{\n//#delimiter, startBracket terminatorBracket\n var dRegExp = /\s|/mg;\n var sRegExp = /\s[\s[/mg;\n var tRegExp = /\s]\s]/mg;\n\n dRegExp.lastIndex = w.startMatch;\n var dMatch = dRegExp.exec(w.source);\n sRegExp.lastIndex = w.startMatch;\n var sMatch = sRegExp.exec(w.source);\n tRegExp.lastIndex = w.startMatch;\n var tMatch = tRegExp.exec(w.source);\n if(!tMatch) {\n //mwDebug(w.output,"ERROR1");\n return false;\n }\n\n while(sMatch && sMatch.index<tMatch.index) {\n if(dMatch && dMatch.index<sMatch.index) {\n //# delim is before startBracket, so return it\n//mwDebug(w.output,"di:"+dMatch.index+" dl:"+sRegExp.lastIndex);\n w.nextMatch = dRegExp.lastIndex;\n w.matchLength = dMatch.index - w.startMatch;\n return true;\n }\n//mwDebug(w.output,"si:"+sMatch.index+" sl:"+sRegExp.lastIndex);\n//mwDebug(w.output,"ti:"+tMatch.index+" tl:"+tRegExp.lastIndex);\n //# startBracket before termBracket, so skip over bracket pairs\n // found eg [[, so look for ]]\n tRegExp.lastIndex = sRegExp.lastIndex;\n tMatch = tRegExp.exec(w.source);\n//mwDebug(w.output,"xti:"+tMatch.index+" tl:"+tRegExp.lastIndex);\n \n // and look for another [[\n w.nextMatch = tRegExp.lastIndex;\n dRegExp.lastIndex = w.nextMatch;\n dMatch = dRegExp.exec(w.source);\n sRegExp.lastIndex = w.nextMatch;\n sMatch = sRegExp.exec(w.source);\n tRegExp.lastIndex = w.nextMatch;\n tMatch = tRegExp.exec(w.source);\n }\n \n if(dMatch && dMatch.index<tMatch.index) {\n //# delim is before term, so return it\n//mwDebug(w.output,"2di:"+dMatch.index+" dl:"+sRegExp.lastIndex);\n w.nextMatch = dRegExp.lastIndex;\n w.matchLength = dMatch.index - w.startMatch;\n return true;\n }\n if(tMatch) {\n //# delim is before term, so return it\n//mwDebug(w.output,"2ti:"+tMatch.index+" tl:"+tRegExp.lastIndex);\n w.nextMatch = tRegExp.lastIndex;\n w.matchLength = tMatch.index - w.startMatch;\n return false;\n }\n //mwDebug(w.output,"ERROR2");\n //# return term\n w.nextMatch = tRegExp.lastIndex;\n w.matchLength = -1;\n return false;\n};\n\nMediaWikiFormatter.getParams = function(w)\n{\n var params = [];\n var i = 1;\n w.startMatch = w.nextMatch;\n var read = MediaWikiFormatter.readToDelim(w);\n if(w.matchLength!=-1) {\n params[i] = w.source.substr(w.startMatch,w.matchLength);\n }\n while(read) {\n i++;\n w.startMatch = w.nextMatch;\n read = MediaWikiFormatter.readToDelim(w);\n if(w.matchLength!=-1) {\n params[i] = w.source.substr(w.startMatch,w.matchLength);\n }\n }\n return params;\n};\n\nMediaWikiFormatter.setFromParams = function(w,p)\n{\n var r = {};\n var re = /\ss*(.*?)=(?:(?:"(.*?)")|(?:'(.*?)')|((?:\sw|%|#)*))/mg;\n var match = re.exec(p);\n while(match)\n {\n var s = match[1].unDash();\n if(match[2]) {\n r[s] = match[2];\n } else if(match[3]) {\n r[s] = match[3];\n } else {\n r[s] = match[4];\n }\n match = re.exec(p);\n }\n return r;\n};\n\nMediaWikiFormatter.setAttributesFromParams = function(e,p)\n{\n var re = /\ss*(.*?)=(?:(?:"(.*?)")|(?:'(.*?)')|((?:\sw|%|#)*))/mg;\n var match = re.exec(p);\n while(match) {\n var s = match[1].unDash();\n if(s == "bgcolor") {\n s = "backgroundColor";\n }\n try {\n if(match[2]) {\n e.setAttribute(s,match[2]);\n } else if(match[3]) {\n e.setAttribute(s,match[3]);\n } else {\n e.setAttribute(s,match[4]);\n }\n }\n catch(ex) {}\n match = re.exec(p);\n }\n};\n\nconfig.mediaWikiFormatters = [\n{\n name: "mediaWikiHeading",\n match: "^={2,6}(?!=)\s\sn?",\n termRegExp: /(={2,6}\sn?)/mg,\n handler: function(w)\n {\n var output = w.output.nodeType==1 && w.output.nodeName=="P" ? w.output.parentNode : w.output;\n var e = createTiddlyElement(output,"h" + w.matchLength);\n var a = createTiddlyElement(e,"a");// drop anchor\n var t = w.tiddler ? w.tiddler.title + ":" : "";\n var len = w.source.substr(w.nextMatch).indexOf("=");\n a.setAttribute("name",t+w.source.substr(w.nextMatch,len));\n w.subWikifyTerm(e,this.termRegExp);\n w.output = createTiddlyElement(output,"p");\n }\n},\n\n{\n name: "mediaWikiTable",\n match: "^\s\s{\s\s|", // ^{|\n tableTerm: "\s\sn\s\s|\s\s}", // |}\n rowStart: "\s\sn\s\s|\s\s-", // \sn|-\n cellStart: "\s\sn!|!!|\s\s|\s\s||\s\sn\s\s|", //\sn! or !! or || or \sn|\n caption: "\s\sn\s\s|\s\s+",\n rowTerm: null,\n cellTerm: null,\n inCellTerm: null,\n tt: 0,\n debug: null,\n rowTermRegExp: null,\n handler: function(w)\n {\n if(!this.rowTermRegExp) {\n this.rowTerm = "(" + this.tableTerm +")|(" + this.rowStart + ")";\n this.cellTerm = this.rowTerm + "|(" + this.cellStart + ")";\n this.inCellTerm = "(" + this.match + ")|" + this.rowTerm + "|(" + this.cellStart + ")";\n this.caption = "(" + this.caption + ")|" + this.cellTerm;\n\n this.rowTermRegExp = new RegExp(this.rowTerm,"mg");\n this.cellTermRegExp = new RegExp(this.cellTerm,"mg");\n this.inCellTermRegExp = new RegExp(this.inCellTerm,"mg");\n this.captionRegExp = new RegExp(this.caption,"mg");\n }\n//this.debug = createTiddlyElement(w.output,"p");\n//mwDebug(this.debug,"start table");\n this.captionRegExp.lastIndex = w.nextMatch;\n var match = this.captionRegExp.exec(w.source);\n if(!match) {return;}\n //var inPara = w.output.nodeType==1 && w.output.nodeName=="P" ? true : false;\n //var output = inPara ? w.output.parentNode : w.output;\n var output = w.output;\n var table = createTiddlyElement(output,"table");\n var rowContainer = table;\n\n var i = w.source.indexOf("\sn",w.nextMatch);\n if(i>w.nextMatch) {\n MediaWikiFormatter.setAttributesFromParams(table,w.source.substring(w.nextMatch,i));\n w.nextMatch = i;\n }\n\n var rowCount = 0;\n var eot = false;\n if(match[1]) {\n // caption\n var caption = createTiddlyElement(table,"caption");\n w.nextMatch = this.captionRegExp.lastIndex;\n var captionText = w.source.substring(w.nextMatch);\n var n = captionText.indexOf("\sn");\n captionText = captionText.substr(0,n);\n i = MediaWikiFormatter.endOfParams(w,captionText);\n if(i!=-1) {\n captionText = w.source.substr(w.nextMatch,i);\n //captionText = captionText.replace(/^\s+/mg,"")//!!hack until I fix this properly\n //MediaWikiFormatter.setAttributesFromParams(caption,captionText);\n w.nextMatch += i+1;\n }\n if(caption != table.firstChild) {\n table.insertBefore(caption,table.firstChild);\n }\n w.subWikify(caption,this.cellTerm);\n w.nextMatch -= w.matchLength;// rewind to before the match\n this.cellTermRegExp.lastIndex = w.nextMatch;\n var match2 = this.cellTermRegExp.exec(w.source);\n if(match2) {\n if(match2[3]) {\n // no first row marker\n eot = this.rowHandler(w,createTiddlyElement(rowContainer,"tr"));\n rowCount++;\n }\n }\n } else if(match[3]) {\n // row\n w.nextMatch = this.captionRegExp.lastIndex-match[3].length;// rewind to before the match\n } else if(match[4]) {\n // cell, no first row marker in table\n w.nextMatch = this.captionRegExp.lastIndex-match[4].length;// rewind to before the match\n eot = this.rowHandler(w,createTiddlyElement(rowContainer,"tr"));\n rowCount++;\n }\n\n this.rowTermRegExp.lastIndex = w.nextMatch;\n match = this.rowTermRegExp.exec(w.source);\n while(match && eot==false) {\n if(match[1]) {\n // end table\n w.nextMatch = this.rowTermRegExp.lastIndex;\n if(w.tableDepth==0) {\n return;\n }\n } else if(match[2]) {\n // row\n var rowElement = createTiddlyElement(rowContainer,"tr");\n w.nextMatch += match[2].length;// skip over the match\n i = w.source.indexOf("\sn",w.nextMatch);\n if(i>w.nextMatch) {\n MediaWikiFormatter.setAttributesFromParams(rowElement,w.source.substring(w.nextMatch,i));\n w.nextMatch = i;\n }\n eot = this.rowHandler(w,rowElement);\n }\n rowCount++;\n this.rowTermRegExp.lastIndex = w.nextMatch;\n match = this.rowTermRegExp.exec(w.source);\n }//# end while\n if(w.tableDepth==0) {\n w.nextMatch +=3;// skip over tableterm, \sn|}\n }\n //if(inPara)\n // w.output = createTiddlyElement(output,"p");\n },//# end handler\n\n rowHandler: function(w,e)\n {// assumes w.nextMatch points to first cell terminator, returns false if any improperly terminated element\n var cell;\n this.inCellTermRegExp.lastIndex = w.nextMatch;\n var match = this.inCellTermRegExp.exec(w.source);\n while(match) {\n if(match[1])\n {// nested table\n w.tableDepth++;\n w.subWikify(cell,this.tableTerm);\n w.nextMatch = this.tt;\n w.tableDepth--;\n return false;\n } else if(match[2]) {\n //# end table\n this.tt = this.inCellTermRegExp.lastIndex;\n return true;\n } else if(match[3]) {\n //# end row\n return false;\n } else if(match[4]) {\n //# cell\n var len = match[4].length;\n cell = createTiddlyElement(e,match[4].substr(len-1)=="!"?"th":"td");\n w.nextMatch += len;//skip over the match\n\n this.inCellTermRegExp.lastIndex = w.nextMatch;\n var lookahead = this.inCellTermRegExp.exec(w.source);\n if(!lookahead) {\n return false;// improperly terminated table\n }\n var cellText = w.source.substr(w.nextMatch,lookahead.index-w.nextMatch);\n var oldSource = w.source;\n var i = MediaWikiFormatter.endOfParams(w,cellText);//cellText.indexOf("|");\n if(i!=-1) {\n cellText = cellText.replace(/^\s+/mg,""); //!!hack until I fix this properly\n MediaWikiFormatter.setAttributesFromParams(cell,cellText.substr(0,i-1));\n cellText = cellText.substring(i+1);\n }\n cellText = cellText.replace(/^\ss*/mg,""); //# remove leading spaces so not treated as preformatted\n w.source = cellText;\n w.nextMatch = 0;\n w.subWikifyUnterm(cell);\n w.source = oldSource;\n w.nextMatch = lookahead.index;\n }\n this.inCellTermRegExp.lastIndex = w.nextMatch;\n match = this.inCellTermRegExp.exec(w.source);\n }//# end while\n return false;\n }//# end rowHandler\n},\n\n{\n name: "mediaWikiList",\n match: "^[\s\s*#;:]+ ",\n lookaheadRegExp: /^([\s*#;:])+ /mg,\n termRegExp: /(\sn)/mg,\n handler: function(w)\n {\n var output = w.output.parentNode;\n var stack = [output];\n var currLevel = 0, currType = null;\n var listType, itemType;\n w.nextMatch = w.matchStart;\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n while(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {\n switch(lookaheadMatch[1]) {\n case "*":\n listType = "ul";\n itemType = "li";\n break;\n case "#":\n listType = "ol";\n itemType = "li";\n break;\n case ";":\n listType = "dl";\n itemType = "dt";\n break;\n case ":":\n listType = "dl";\n itemType = "dd";\n break;\n default:\n break;\n }\n var listLevel = lookaheadMatch[0].length;\n w.nextMatch += listLevel;\n if(listLevel > currLevel) {\n for(var i=currLevel; i<listLevel; i++) {\n stack.push(createTiddlyElement(stack[stack.length-1],listType));\n }\n } else if(listLevel < currLevel) {\n for(i=currLevel; i>listLevel; i--) {\n stack.pop();\n }\n } else if(listLevel == currLevel && listType != currType) {\n stack.pop();\n stack.push(createTiddlyElement(stack[stack.length-1],listType));\n }\n currLevel = listLevel;\n currType = listType;\n var e = createTiddlyElement(stack[stack.length-1],itemType);\n w.subWikifyTerm(e,this.termRegExp);\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n }\n w.output = createTiddlyElement(output,"p");\n }\n},\n\n{\n name: "mediaWikiRule",\n match: "^----+$\s\sn?",\n handler: function(w)\n {\n var output = w.output.parentNode;\n createTiddlyElement(output,"hr");\n w.output = createTiddlyElement(output,"p");\n }\n},\n\n{\n name: "mediaWikiLeadingSpaces",\n match: "^ ",\n lookaheadRegExp: /^ /mg,\n termRegExp: /(\sn)/mg,\n handler: function(w)\n {\n var e = createTiddlyElement(w.output,"pre");\n while(true) {\n w.subWikifyTerm(e,this.termRegExp);\n createTiddlyElement(e,"br");\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {\n w.nextMatch += lookaheadMatch[0].length;\n } else {\n break;\n }\n }\n }\n},\n\n/*\n[[Image:Westminstpalace.jpg|frame|none|caption text]]\n//http://en.wikipedia.org/wiki/Image:Westminstpalace.jpg\n<a href="/wiki/Image:Westminstpalace.jpg" class="internal" title="caption text">\n<img src="http://upload.wikimedia.org/wikipedia/commons/3/39/Westminstpalace.jpg"\n alt="caption text" width="400" height="300" longdesc="/wiki/Image:Westminstpalace.jpg" />\n</a>\n\n[[image:Stockholm.jpg|right|350px|thumb|Stockholm panorama from the City Hall]]\n<div class="thumb tright">\n <div style="width:352px;">\n <a href="/wiki/Image:Stockholm.jpg" class="internal" title="Stockholm panorama from the City Hall">\n <img src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Stockholm.jpg/350px-Stockholm.jpg" alt="Stockholm panorama from the City Hall" width="350" height="84" longdesc="/wiki/Image:Stockholm.jpg" />\n </a>\n <div class="thumbcaption">\n <div class="magnify" style="float:right">\n <a href="/wiki/Image:Stockholm.jpg" class="internal" title="Enlarge">\n <img src="/skins-1.5/common/images/magnify-clip.png" width="15" height="11" alt="Enlarge" />\n </a>\n </div>\n Stockholm panorama from the City Hall\n </div>\n </div>\n</div>\n*/\n\n{\n name: "mediaWikiImage",\n match: "\s\s[\s\s[(?:[Ii]mage|Bild):",\n lookaheadRegExp: /\s[\s[(?:[Ii]mage|Bild):/mg,\n defaultPx: 180,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var params = MediaWikiFormatter.getParams(w);\n var src = params[1];\n src = src.trim().replace(/ /mg,"_");\n src = src.substr(0,1).toUpperCase() + src.substring(1);\n var palign = null;\n var ptitle = null;\n var psrc = false;\n var px = null;\n var pthumb = false;\n var pframed = false;\n for(var i=2;i<params.length;i++) {\n //# right, left, center, none, sizepx, thumbnail (thumb), frame, and alternate (caption) text.\n var p = params[i];\n if(p=="right"||p=="left"||p=="center"||p=="none") {\n palign = p;\n } else if(p=="thumbnail"||p=="thumb") {\n pthumb = true;\n } else if(p=="framed") {\n pframed = true;\n } else if(/\sd{1,4} ?px/.exec(p)) {\n px = p.substr(0,p.length-2).trim();\n } else {\n ptitle = p;\n }\n }//#end for\n if(pthumb) {\n var output = w.output.nodeType==1 && w.output.nodeName=="P" ? w.output.parentNode : w.output;\n if(!palign) {\n palign = "right";\n }\n if(!px) {\n px = 180;\n }\n psrc = px + "px-" + src;\n var t = createTiddlyElement(output,"div",null,"thumb"+(palign?" t"+palign:""));\n var s = createTiddlyElement(t,"div");\n s.style["width"] = Number(px) + 2 + "px";\n var a = createTiddlyElement(s,"a",null,"internal");\n if(config.options.chkMediaWikiDisplayEnableThumbZoom) {\n a.href = src;\n }\n a.title = ptitle;\n var img = createTiddlyElement(a,"img");\n img.src = psrc;\n img.width = px;\n img.longdesc = "Image:" + src;\n img.alt = ptitle;\n\n var tc = createTiddlyElement(s,"div",null,"thumbcaption");\n var oldSource = w.source; var oldMatch = w.nextMatch;\n w.source = ptitle; w.nextMatch = 0;\n w.subWikifyUnterm(tc);\n w.source = oldSource; w.nextMatch = oldMatch;\n\n if(config.options.chkMediaWikiDisplayEnableThumbZoom) {\n var tm = createTiddlyElement(tc,"div",null,"magnify");\n tm.style["float"] = "right";\n var ta = createTiddlyElement(tm,"a",null,"internal");\n ta.title = "Enlarge";\n timg = createTiddlyElement(ta,"img"); timg.src = "magnify-clip.png"; timg.alt = "Enlarge"; timg.width = "15"; timg.height = "11";\n ta.href = src;\n }\n } else {\n // not pthumb\n a = createTiddlyElement(w.output,"a",null,"image");\n a.title = ptitle;\n img = createTiddlyElement(a,"img");\n if(palign) {img.align = palign;}\n img.src = px ? px + "px-" + src : src;\n if(px) {img.width = px;}\n img.longdesc = "Image:" + src;\n img.alt = ptitle;\n }\n }\n }//#end image handler\n},\n\n{\n name: "mediaWikiExplicitLink",\n match: "\s\s[\s\s[",\n lookaheadRegExp: /\s[\s[(?:([a-z]{2,3}:)?)(#?)([^\s|\s]]*?)(?:(\s]\s](\sw)*)|(\s|(.*?)\s]\s]))/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n if(!lookaheadMatch[1]) {\n // not (eg) [[en:...]]\n var e;\n var link = lookaheadMatch[3];\n var text = link;\n link = link.substr(0,1).toUpperCase() + link.substring(1);\n if(lookaheadMatch[4]) {\n // Simple bracketted link\n if(lookaheadMatch[2]) {\n var a = createTiddlyElement(e,"a");// drop anchor\n a.setAttribute("name",link);\n } else {\n e = createTiddlyLink(w.output,link,false,null,w.isStatic);\n if(lookaheadMatch[5]) {\n text += lookaheadMatch[5];//add any non-space after the ]]\n }\n createTiddlyText(e,text);\n }\n } else if(lookaheadMatch[6]) {\n // Piped link\n if(config.formatterHelpers.isExternalLink(link)) {\n e = createExternalLink(w.output,link);\n } else {\n e = createTiddlyLink(w.output,link,false,null,w.isStatic);\n }\n var oldSource = w.source; var oldMatch = w.nextMatch;\n w.source = lookaheadMatch[7].trim(); w.nextMatch = 0;\n w.subWikifyUnterm(e);\n w.source = oldSource; w.nextMatch = oldMatch;\n }\n }\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n//#{{Audio|sv-Stockholm.ogg|Stockholm}}\n//**tem//\n{\n name: "mediaWikiTemplate",\n match: "\s\s{\s\s{[^\s\s{]",\n lookaheadRegExp: /\s{\s{((?:.|\sn)*?)\s}\s}/mg,\n handler: function(w)\n {\n//mwDebug(w.output,"wt:"+w.matchText+" ws:"+w.matchStart+" wn:"+w.nextMatch+" wl:"+w.matchLength);\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n//mwDebug(w.output,"lm:"+lookaheadMatch);\n//mwDebug(w.output,"lmi:"+lookaheadMatch.index+" lI:"+this.lookaheadRegExp.lastIndex);\n//mwDebug(w.output,"lm1:"+lookaheadMatch[1]);\n//mwDebug(w.output,"lm2:"+lookaheadMatch[2]);\n var lastIndex = this.lookaheadRegExp.lastIndex;\n var contents = lookaheadMatch[1];\n // see http://meta.wikimedia.org/wiki/Help:Variable\n if(contents=="PAGENAME") {\n createTiddlyText(w.output,w.tiddler.title);\n w.nextMatch = lastIndex;\n return;\n }\n var i = contents.indexOf("|");\n var title = i==-1 ? contents : contents.substr(0,i);\n title = title.trim().replace(/_/mg," ");// Underscore in template name is equivalent to space\n title = "Template:" + title.substr(0,1).toUpperCase() + title.substring(1);\n var tiddler = store.fetchTiddler(title);\n var oldSource = w.source;\n if(tiddler) {\n params = {};\n w.source = lookaheadMatch[1];\n if(i!=-1) {\n w.nextMatch = 0;\n params = MediaWikiFormatter.getTemplateParams(w);\n }\n w.source = MediaWikiFormatter.expandTemplate(w,tiddler,params);\n w.nextMatch = 0;\n w.subWikifyUnterm(w.output);\n } else {\n if(config.options.chkMediaWikiDisplayEmptyTemplateLinks) {\n // for conveniece, output the name of the template so can click on it and create tiddler\n w.source = "[["+title+"]]";\n w.nextMatch = 0;\n w.subWikifyUnterm(w.output);\n }\n }\n w.source = oldSource;\n w.nextMatch = lastIndex;\n }\n }\n},\n\n{\n name: "mediaWikiParagraph",\n match: "\s\sn{2,}",\n handler: function(w)\n {\n var output = w.output.nodeType==1 && w.output.nodeName=="P" ? w.output.parentNode : w.output;\n w.output = createTiddlyElement(output,"p");\n }\n},\n\n{\n name: "mediaWikiExplicitLineBreak",\n match: "<br ?/?>",\n handler: function(w)\n {\n createTiddlyElement(w.output,"br");\n }\n},\n\n{\n name: "mediaWikiExplicitLineBreakWithParams",\n match: "<br(?:\s\ss*(?:(?:.*?)=[\s"']?(?:.*?)[\s"']?))*?\s\ss*/?>",\n lookaheadRegExp: /<br((?:\ss+(?:.*?)=["']?(?:.*?)["']?)*?)?\ss*\s/?>/mg,\n handler: function(w)\n {\n //# copes with erroneous <br clear="right">\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var e =createTiddlyElement(w.output,"br");\n if(lookaheadMatch[1]) {\n MediaWikiFormatter.setAttributesFromParams(e,lookaheadMatch[1]);\n }\n w.nextMatch = this.lookaheadRegExp.lastIndex;// empty tag\n }\n }\n},\n\n{\n name: "mediaWikiTitledUrlLink",\n match: "\s\s[" + config.textPrimitives.urlPattern + "(?:\s\ss+[^\s\s]]+)?" + "\s\s]",\n //# eg [http://www.nupedia.com] or [http://www.nupedia.com Nupedia]\n //# <sup id="_ref-1" class="reference"><a href="#_note-1" title="">[2]</a>\n handler: function(w)\n {\n var lookaheadRegExp = new RegExp("\s\s[(" + config.textPrimitives.urlPattern + ")(?:\s\ss+([^\s[]+))?" + "\s\s]","mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index==w.matchStart) {\n var link = lookaheadMatch[1];\n var s = createTiddlyElement(w.output,"sup");\n var e = createExternalLink(s,link);\n if(lookaheadMatch[2]) {\n var oldSource = w.source; var oldMatch = w.nextMatch;\n w.source = lookaheadMatch[2].trim(); w.nextMatch = 0;\n w.subWikifyUnterm(e);\n w.source = oldSource; w.nextMatch = oldMatch;\n } else {\n w.linkCount++;\n createTiddlyText(e,"["+w.linkCount+"]");\n }\n w.nextMatch = lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "mediaWikiUrlLink",\n match: config.textPrimitives.urlPattern,\n handler: function(w)\n {\n w.outputText(createExternalLink(w.output,w.matchText),w.matchStart,w.nextMatch);\n }\n},\n\n{\n name: "mediaWikiBold",\n match: "'''",\n termRegExp: /('''|\sn)/mg,\n element: "strong",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "mediaWikiItalic",\n match: "''(?!')",\n termRegExp: /(''(?!')|\sn)/mg,\n element: "em",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "mediaWikiUnderline",\n match: "<u>",\n termRegExp: /(<\s/u>|\sn)/mg,\n element: "u",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "mediaWikiStrike",\n match: "<s>",\n termRegExp: /(<\s/s>|\sn)/mg,\n element: "strike",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "mediaWikiBoldTag",\n match: "<b>",\n termRegExp: /(<\s/b>|\sn)/mg,\n element: "b",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "mediaWikiTemplateParam",// note, this only gets invoked when viewing the template\n match: "\s\s{\s\s{\s\s{",\n lookaheadRegExp: /(\s{\s{\s{(?:.|\sn)*?\s}\s}\s})/mg,\n element: "span",\n handler: config.formatterHelpers.enclosedTextHelper\n},\n\n//# See http://en.wikipedia.org/wiki/Wikipedia:Footnotes\n//# for an explanation of how to generate footnotes using the <ref(erences/)> tags\n{\n name: "mediaWikiInsertReference",\n match: "<ref[^/]*>",\n lookaheadRegExp: /<ref(\ss+(?:.*?)=["']?(?:.*?)["']?)?>([^<]*?)<\s/ref>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var x = {id:"",value:""};\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n if(!w.referenceCount) {\n w.referenceCount = 0;\n w.references = {};\n }\n var s = createTiddlyElement(w.output,"sup",null,"reference");\n var a = createTiddlyElement(s,"a");\n var prefix = w.tiddler ? w.tiddler.title + ":" : "";\n if(lookaheadMatch[1]) {\n var r = {};\n r = MediaWikiFormatter.setFromParams(w,lookaheadMatch[1]);\n var name = r.name ? r.name.trim() : "";\n name = name.replace(/ /g,"_");\n s.id = prefix + "_ref-" + name;// + "_" + nameCount;(w.referenceCount+1);\n if(!w.references[name]) {\n w.references[name] = x;\n w.references[name].id = w.referenceCount;\n w.references[name].value = lookaheadMatch[2].trim();\n }\n } else {\n w.references[w.referenceCount] = x;\n w.references[w.referenceCount].id = w.referenceCount;\n w.references[w.referenceCount].value = lookaheadMatch[2].trim();\n name = w.referenceCount;\n s.id = prefix + "_ref-" + w.referenceCount;\n }\n w.referenceCount++;\n a.title = lookaheadMatch[2].trim();//mb, extra to wikipedia\n a.href = "#" + prefix + "_note-" + name;\n a.innerHTML = "["+w.referenceCount+"]";\n//#<sup id="_ref-0" class="reference"><a href="#_note-0" title="">[1]</a></sup>\n//#<sup id="_ref-foreign_ministry_0" class="reference"><a href="#_note-foreign_ministry" title="">[2]</a></sup>\n }\n }\n},\n\n{\n name: "mediaWikiListReferences",\n match: "<references ?/>",\n lookaheadRegExp: /<references ?\s/>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(config.options.chkMediaWikiListReferences && w.referenceCount) {\n var ol = createTiddlyElement(w.output,"ol",null,"references");\n var oldSource = w.source;\n if(w.referenceCount>0) {\n for(var i in w.references) {\n var li = createTiddlyElement(ol,"li");\n var prefix = w.tiddler ? w.tiddler.title + ":" : "";\n var b = createTiddlyElement(li,"b");\n var a = createTiddlyElement(b,"a");\n li.id = prefix + "_note-" + i;\n a.href = "#" + prefix + "_ref-" + i;\n a.innerHTML = "^";\n w.source = w.references[i].value;\n w.nextMatch = 0;\n w.subWikifyUnterm(li);\n }\n }\n w.source = oldSource;\n }\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n},\n\n{\n name: "mediaWikiRepeatReference",\n match: "<ref[^/]*/>",\n lookaheadRegExp: /<ref(\ss+(?:.*?)="(?:.*?)")?\ss*\s/>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var x = {id:"",value:""};\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n//#<ref name="foreign ministry">\n//#<sup id="_ref-foreign_ministry_1" class="reference"><a href="#_note-foreign_ministry" title="">[2]</a></sup>\n var s = createTiddlyElement(w.output,"sup",null,"reference");\n var a = createTiddlyElement(s,"a");\n var prefix = w.tiddler ? w.tiddler.title : "";\n if(lookaheadMatch[1]) {\n var r = {};\n r = MediaWikiFormatter.setFromParams(w,lookaheadMatch[1]);\n var name = r.name ? r.name.trim() : "";\n name = name.replace(/ /g,"_");\n s.id = prefix + "_ref-" + name +"_" + (w.referenceCount+1);\n var count = w.references && w.references[name] ? (w.references[name].id+1) : "?";\n }\n a.href = "#" + prefix + "_note-" + name;\n a.innerHTML = "["+count+"]";\n a.title = name;\n }\n }//# end handler\n},\n\n{\n name: "mediaWikiHtmlEntitiesEncoding",\n match: "&#?[a-zA-Z0-9]{2,8};",\n handler: function(w)\n {\n createTiddlyElement(w.output,"span").innerHTML = w.matchText;\n }\n},\n\n{\n name: "mediaWikiComment",\n match: "<!\s\s-\s\s-",\n lookaheadRegExp: /<!\s-\s-((?:.|\sn)*?)\s-\s->/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "mediaWikiIncludeOnly",\n match: "<includeonly>",\n lookaheadRegExp: /<includeonly>((?:.|\sn)*?)<\s/includeonly>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "mediaWikiNoWiki",\n match: "<nowiki>",\n lookaheadRegExp: /<nowiki>((?:.|\sn)*?)<\s/nowiki>/mg,\n element: "span",\n handler: config.formatterHelpers.enclosedTextHelper\n},\n\n{\n name: "mediaWikiPreNoWiki",\n match: "<pre>\ss*<nowiki>",\n lookaheadRegExp: /<pre>\ss*<nowiki>((?:.|\sn)*?)<\s/nowiki>\ss*<\s/pre>/mg,\n element: "pre",\n handler: config.formatterHelpers.enclosedTextHelper\n},\n\n{\n name: "mediaWikiPre",\n match: "<pre>",\n lookaheadRegExp: /<pre>((?:.|\sn)*?)<\s/pre>/mg,\n element: "pre",\n handler: config.formatterHelpers.enclosedTextHelper\n},\n\n{\n name: "mediaWikiGallery",\n match: "<gallery>",\n lookaheadRegExp: /[Ii]mage:(.*?)\sn/mg,\n handler: function(w)\n {\n//#basic syntax is:\n//#<gallery>\n//#Image:Wiki.png\n//#Image:Wiki.png|Captioned\n//#Image:Wiki.png|[[Help:Contents/Links|Links]] can be put in captions.\n//#Image:Wiki.png|Full [[MediaWiki]]<br />[[syntax]] may now be usedโฆ\n//#</gallery>\n//#<table class="gallery" cellspacing="0" cellpadding="0">\n//#<tr>\n//#...\n//#</tr>\n//#</table>\n var table = createTiddlyElement(w.output,"table",null,"gallery");\n table.cellspacing = "0";\n table.cellpadding = "0";\n var rowElem = createTiddlyElement(table,"tr");\n var col = 0;\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var nM = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n var oldSource = w.source;\n while(lookaheadMatch) {\n nM += lookaheadMatch[1].length;\n w.source = lookaheadMatch[1] +"]]";//!! ]] is hack until getParams is working\n w.nextMatch = 0;\n var params = MediaWikiFormatter.getParams(w);\n var src = params[1];\n src = src.trim().replace(/ /mg,"_");\n src = src.substr(0,1).toUpperCase() + src.substring(1);\n var palign = "right"; \n var psrc = "120px-"+src;\n var px = 120;\n var pframed = false;\n ptitle = null;\n for(var i=2;i<params.length;i++) {\n //right, left, center, none, sizepx, thumbnail (thumb), frame, and alternate (caption) text.\n var p = params[i];\n if(p=="right"||p=="left"||p=="center"||p=="none") {\n palign = p;\n } else if(p=="framed") {\n pframed = true;\n } else if(/\sd{1,4}px/.exec(p)) {\n px = p.substr(0,p.length-2).trim();\n psrc = px + "px-" + src;\n } else {\n ptitle = p;\n }\n }//#end for\n//#<td>\n//#<div class="gallerybox">\n//# <div class="thumb" style="padding: 26px 0;">\n//# <a href="/wiki/Image:Paul_C%C3%A9zanne_184.jpg" title="Image:Paul Cรฉzanne 184.jpg">\n//# <img src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Paul_C%C3%A9zanne_184.jpg/120px-Paul_C%C3%A9zanne_184.jpg" width="120" height="94" alt="" />\n//# </a>\n//# </div>\n//# <div class="gallerytext">\n//# <p><i>La Pain et les Oeufs</i> (Bread and Eggs), thought to present austerity, 1865. Signed and dated. Possibly in Spanish style.</p>\n//# </div>\n//#</div>\n//#</td>\n var td = createTiddlyElement(rowElem,"td");\n var gb = createTiddlyElement(td,"div",null,"gallerybox");\n var t = createTiddlyElement(gb,"div",null,"thumb");\n t.style["padding"] = "26px 0";\n\n var a = createTiddlyElement(t,"a");\n if(config.options.chkMediaWikiDisplayEnableThumbZoom) {\n a.href = src;\n }\n a.title = ptitle;\n var img = createTiddlyElement(a,"img");\n img.src = psrc;\n img.width = px;\n img.alt = "";//ptitle;\n\n var gt = createTiddlyElement(gb,"div",null,"gallerytext");\n p = createTiddlyElement(gt,"p");\n var oldSource2 = w.source; var oldMatch = w.nextMatch;\n w.source = ptitle; w.nextMatch = 0;\n w.subWikifyUnterm(p);\n w.source = oldSource2; w.nextMatch = oldMatch;\n\n col++;\n if(col>3) {\n rowElem = createTiddlyElement(table,"tr");\n col = 0;\n }\n w.source = oldSource;\n lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n }\n w.nextMatch = nM + "<gallery>".length*2+1+"Image:".length;//!! hack\n }\n},\n\n{\n name: "mediaWikiHtmlTag",\n match: "<[a-zA-Z]{2,}(?:\s\ss*(?:(?:.*?)=[\s"']?(?:.*?)[\s"']?))*?>",\n lookaheadRegExp: /<([a-zA-Z]{2,})((?:\ss+(?:.*?)=["']?(?:.*?)["']?)*?)?\ss*(\s/)?>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var e =createTiddlyElement(w.output,lookaheadMatch[1]);\n if(lookaheadMatch[2]) {\n MediaWikiFormatter.setAttributesFromParams(e,lookaheadMatch[2]);\n }\n if(lookaheadMatch[3]) {\n w.nextMatch = this.lookaheadRegExp.lastIndex;// empty tag\n } else {\n w.subWikify(e,"</"+lookaheadMatch[1]+">");\n }\n }\n }\n}\n];\n\nconfig.parsers.mediaWikiFormatter = new Formatter(config.mediaWikiFormatters);\nconfig.parsers.mediaWikiFormatter.formatTag = "MediaWikiFormat";\n} // end of "install only once"\n//}}}\n
/***\n|''Name:''|PBWikiFormatterPlugin|\n|''Description:''|Allows Tiddlers to use [[PBWiki|http://yummy.pbwiki.com/WikiStyle]] text formatting|\n|''Source:''|http://martinswiki.com/prereleases.html#PBWikiFormatterPlugin - for pre-release|\n|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|\n|''Version:''|0.1.7|\n|''Status:''|alpha pre-release|\n|''Date:''|Oct 28, 2006|\n|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.1.0|\n\nThis is an early release of the PBWikiFormatterPlugin, which allows you to insert PBWiki formated text\ninto a TiddlyWiki.\n\nThe aim is not to fully emulate PBWiki, but to allow you to create PBWiki content off-line and then paste\nthe content into your PBWiki wiki later on, with the expectation that only minor edits will be required.\n\nTo use PBWiki format in a Tiddler, tag the Tiddler with PBWikiFormat. See [[testPBWikiFormat]] for an example.\n\nPlease report any defects you find at http://groups.google.co.uk/group/TiddlyWikiDev\n\nThis is an early alpha release, with (at least) the following known issues:\n\n!!!Issues\n# Strikethrough yet not supported.\n# Vertical bars to create |boxes| not supported.\n# Space at the begining of a line to create a box not supported.\n# email links not supported.\n# <top>, <toc>, <random> and <views> not supported.\n\n***/\n\n//{{{\n// Ensure that the PBWikiFormatterPlugin is only installed once.\nif(!version.extensions.PBWikiFormatterPlugin) {\nversion.extensions.PBWikiFormatterPlugin = {installed:true};\n\nif(version.major < 2 || (version.major == 2 && version.minor < 1))\n {alertAndThrow("PBWikiFormatterPlugin requires TiddlyWiki 2.1 or later.");}\n\nPBWikiFormatter = {}; // "namespace" for local functions\n\npbDebug = function(out,str)\n{\n createTiddlyText(out,str.replace(/\sn/mg,"\s\sn").replace(/\sr/mg,"RR"));\n createTiddlyElement(out,"br");\n};\n\n/*wikify = function(source,output,highlightRegExp,tiddler)\n{\n if(source && source != "")\n {\n var w = new Wikifier(source,getParser(tiddler),highlightRegExp,tiddler);\n w.output = tiddler==null ? output : createTiddlyElement(output,"p");\n w.subWikifyUnterm(w.output);\n }\n};*/\n\nPBWikiFormatter.setAttributesFromParams = function(e,p)\n{\n var re = /\ss*(.*?)=(?:(?:"(.*?)")|(?:'(.*?)')|((?:\sw|%|#)*))/mg;\n var match = re.exec(p);\n while(match) {\n var s = match[1].unDash();\n if(s=="bgcolor") {\n s = "backgroundColor";\n }\n try {\n if(match[2]) {\n e.setAttribute(s,match[2]);\n } else if(match[3]) {\n e.setAttribute(s,match[3]);\n } else {\n e.setAttribute(s,match[4]);\n }\n }\n catch(ex) {}\n match = re.exec(p);\n }\n};\n\nconfig.pbWikiFormatters = [\n{\n name: "pBWikiHeading",\n match: "^!{1,6}",\n termRegExp: /(\sn)/mg,\n handler: function(w)\n {\n w.subWikifyTerm(createTiddlyElement(w.output,"h" + w.matchLength),this.termRegExp);\n }\n},\n{\n name: "pBWikiTable",\n match: "^\s\s|(?:[^\s\sn]*)\s\s|$",\n lookaheadRegExp: /^\s|([^\sn]*)\s|$/mg,\n rowTermRegExp: /(\s|$\sn?)/mg,\n cellRegExp: /(?:\s|([^\sn\s|]*)\s|)|(\s|$\sn?)/mg,\n cellTermRegExp: /((?:\sx20*)\s|)/mg,\n handler: function(w)\n {\n var table = createTiddlyElement(w.output,"table");\n var rowContainer = createTiddlyElement(table,"tbody");\n var prevColumns = [];\n w.nextMatch = w.matchStart;\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n while(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {\n this.rowHandler(w,createTiddlyElement(rowContainer,"tr"),prevColumns);\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n }\n },\n rowHandler: function(w,e,prevColumns)\n {\n var col = 0;\n this.cellRegExp.lastIndex = w.nextMatch;\n var cellMatch = this.cellRegExp.exec(w.source);\n while(cellMatch && cellMatch.index == w.nextMatch) {\n if(cellMatch[2]) {\n // End of row\n w.nextMatch = this.cellRegExp.lastIndex;\n break;\n } else {\n // Cell\n w.nextMatch++;\n var spaceLeft = false;\n var chr = w.source.substr(w.nextMatch,1);\n while(chr == " ") {\n spaceLeft = true;\n w.nextMatch++;\n chr = w.source.substr(w.nextMatch,1);\n }\n var cell = createTiddlyElement(e,"td");\n prevColumns[col] = {rowSpanCount:1, element:cell};\n w.subWikifyTerm(cell,this.cellTermRegExp);\n if(w.matchText.substr(w.matchText.length-2,1) == " ") {\n // spaceRight\n cell.align = spaceLeft ? "center" : "left";\n } else if(spaceLeft) {\n cell.align = "right";\n }\n w.nextMatch--;\n }\n col++;\n this.cellRegExp.lastIndex = w.nextMatch;\n cellMatch = this.cellRegExp.exec(w.source);\n }\n }\n},\n{\n name: "pBWikiList",\n match: "^[\s\s*#]+ ",\n lookaheadRegExp: /^([\s*#])+ /mg,\n termRegExp: /(\sn)/mg,\n handler: function(w)\n {\n var stack = [w.output];\n var currLevel = 0, currType = null;\n var listLevel, listType;\n var itemType = "li";\n w.nextMatch = w.matchStart;\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n while(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {\n listType = lookaheadMatch[1] == "*" ? "ul" : "ol";\n listLevel = lookaheadMatch[0].length;\n w.nextMatch += listLevel;\n if(listLevel > currLevel) {\n for(var i=currLevel; i<listLevel; i++) {\n stack.push(createTiddlyElement(stack[stack.length-1],listType));\n }\n } else if(listLevel < currLevel) {\n for(i=currLevel; i>listLevel; i--) {\n stack.pop();\n }\n } else if(listLevel == currLevel && listType != currType) {\n stack.pop();\n stack.push(createTiddlyElement(stack[stack.length-1],listType));\n }\n currLevel = listLevel;\n currType = listType;\n var e = createTiddlyElement(stack[stack.length-1],itemType);\n w.subWikifyTerm(e,this.termRegExp);\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n }\n }\n},\n{\n name: "pBWikiRule",\n match: "^---+$\s\sn?",\n handler: function(w) {createTiddlyElement(w.output,"hr");}\n},\n{\n name: "macro",\n match: "<<",\n lookaheadRegExp: /<<([^>\ss]+)(?:\ss*)((?:[^>]|(?:>(?!>)))*)>>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[1]) {\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n invokeMacro(w.output,lookaheadMatch[1],lookaheadMatch[2],w,w.tiddler);\n }\n }\n},\n{\n name: "pBWikiExplicitLink",\n match: "\s\s[",\n lookaheadRegExp: /\s[(.*?)(?:\s|(.*?))?\s]/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var link = lookaheadMatch[1];\n var text = lookaheadMatch[2] ? lookaheadMatch[2] : link;\n if(/.*\s.(?:gif|jpg|png)/g.exec(link)) {\n var img = createTiddlyElement(w.output,"img");\n if(lookaheadMatch[2]) {\n img.title = text;\n }\n img.src = link;\n } else {\n var e = config.formatterHelpers.isExternalLink(link) ? createExternalLink(w.output,link) : createTiddlyLink(w.output,link,false,null,w.isStatic);\n createTiddlyText(e,text);\n }\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n{\n name: "pbWikiNotWikiLink",\n match: "~" + config.textPrimitives.wikiLink,\n handler: function(w) {w.outputText(w.output,w.matchStart+1,w.nextMatch);}\n},\n{\n name: "pbWikiWikiLink",\n match: config.textPrimitives.wikiLink,\n handler: function(w)\n {\n if(w.matchStart > 0) {\n var preRegExp = new RegExp(config.textPrimitives.anyLetter,"mg");\n preRegExp.lastIndex = w.matchStart-1;\n var preMatch = preRegExp.exec(w.source);\n if(preMatch.index == w.matchStart-1) {\n w.outputText(w.output,w.matchStart,w.nextMatch);\n return;\n }\n }\n var output = w.output;\n if(w.autoLinkWikiWords == true || store.isShadowTiddler(w.matchText)) {\n output = createTiddlyLink(w.output,w.matchText,false,null,w.isStatic);\n }\n w.outputText(output,w.matchStart,w.nextMatch);\n }\n},\n{\n name: "pbWikiUrlLink",\n match: config.textPrimitives.urlPattern,\n handler: function(w) {w.outputText(createExternalLink(w.output,w.matchText),w.matchStart,w.nextMatch);}\n},\n{\n name: "pbWikiBoldByChar",\n match: "\s\s*\s\s*",\n termRegExp: /(\s*\s*)/mg,\n element: "strong",\n handler: config.formatterHelpers.createElementAndWikify\n},\n{\n name: "pbWikiItalicByChar",\n match: "''",\n termRegExp: /('')/mg,\n element: "em",\n handler: config.formatterHelpers.createElementAndWikify\n},\n{\n name: "pbWikiUnderlineByChar",\n match: "__",\n termRegExp: /(__)/mg,\n element: "u",\n handler: config.formatterHelpers.createElementAndWikify\n},\n/*{\n name: "pbWikiStrikeByChar",\n match: " -",\n termRegExp: /(- )/mg,\n element: "strike",\n handler: config.formatterHelpers.createElementAndWikify\n},*/\n{\n name: "pbWikiParagraph",\n match: "\s\sn{2,}",\n handler: function(w) {createTiddlyElement(w.output,"p");}\n},\n{\n name: "pbWikiExplicitLineBreak",\n match: "<br ?/?>",\n handler: function(w) {createTiddlyElement(w.output,"br");}\n},\n{\n name: "pbWikiLineBreak",\n match: "\s\sn",\n handler: function(w) {createTiddlyElement(w.output,"br");}\n},\n{\n name: "pbWikiHtmlEntitiesEncoding",\n match: "&#?[a-zA-Z0-9]{2,8};",\n handler: function(w) {createTiddlyElement(w.output,"span").innerHTML = w.matchText;}\n},\n{\n name: "pbWikiNotSupported",\n match: "<(?:toc|top|random|views).*?>",\n handler: function(w) {createTiddlyText(w.output,w.matchText);}\n},\n{\n name: "pBWikiRaw",\n match: "<raw>",\n lookaheadRegExp: /<raw>((?:.|\sn)*?)<\s/raw>/mg,\n element: "span",\n handler: config.formatterHelpers.enclosedTextHelper\n},\n{\n name: "pBWikiVerbatim",\n match: "<verbatim>",\n lookaheadRegExp: /<verbatim>((?:.|\sn)*?)<\s/verbatim>/mg,\n element: "span",\n handler: config.formatterHelpers.enclosedTextHelper\n},\n{\n name: "pbWikiHtmlTag",\n match: "<[a-zA-Z]{2,}(?:\s\ss*(?:(?:.*?)=[\s"']?(?:.*?)[\s"']?))*?>",\n lookaheadRegExp: /<([a-zA-Z]{2,})((?:\ss+(?:.*?)=["']?(?:.*?)["']?)*?)?\ss*(\s/)?>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var e =createTiddlyElement(w.output,lookaheadMatch[1]);\n if(lookaheadMatch[2]) {\n PBWikiFormatter.setAttributesFromParams(e,lookaheadMatch[2]);\n }\n if(lookaheadMatch[3]) {\n w.nextMatch = this.lookaheadRegExp.lastIndex;// empty tag\n } else {\n w.subWikify(e,"</"+lookaheadMatch[1]+">");\n }\n }\n }\n}\n];\n\nconfig.parsers.pBWikiFormatter = new Formatter(config.pbWikiFormatters);\nconfig.parsers.pBWikiFormatter.formatTag = "PBWikiFormat";\n} // end of "install only once"\n//}}}\n
<div class='header'>\n<div class='headerShadow'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n</div>\n\n<div id='topMenu' refresh='content' tiddler='MainMenu'></div>\n\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\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>\n
<div class='header' macro='gradient vert #000 #069'>\n <div class='headerShadow'>\n <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>\n <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n </div>\n <div class='headerForeground'>\n <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \n <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n </div>\n <div id='topMenu' refresh='content' tiddler='MainMenu'></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|<html><a name="Top"/></html>''Name:''|PartTiddlerPlugin|\n|''Version:''|1.0.5 (2006-03-02)|\n|''Source:''|http://tiddlywiki.abego-software.de/#PartTiddlerPlugin|\n|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|\n|''Licence:''|[[BSD open source license]]|\n|''TiddlyWiki:''|2.0|\n|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|\n!Table of Content<html><a name="TOC"/></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Description',null, event)">Description, Syntax</a></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Applications',null, event)">Applications</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('LongTiddler',null, event)">Refering to Paragraphs of a Longer Tiddler</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Citation',null, event)">Citation Index</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('TableCells',null, event)">Creating "multi-line" Table Cells</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Tabs',null, event)">Creating Tabs</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Sliders',null, event)">Using Sliders</a></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Revisions',null, event)">Revision History</a></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Code',null, event)">Code</a></html>\n!Description<html><a name="Description"/></html>\nWith the {{{<part aPartName> ... </part>}}} feature you can structure your tiddler text into separate (named) parts. \nEach part can be referenced as a "normal" tiddler, using the "//tiddlerName//''/''//partName//" syntax (e.g. "About/Features"). E.g. you may create links to the parts, use it in {{{<<tiddler...>>}}} or {{{<<tabs...>>}}} macros etc.\n\n''Syntax:'' \n|>|''<part'' //partName// [''hidden''] ''>'' //any tiddler content// ''</part>''|\n|//partName//|The name of the part. You may reference a part tiddler with the combined tiddler name "//nameOfContainerTidder//''/''//partName//.|\n|''hidden''|When defined the content of the part is not displayed in the container tiddler. But when the part is explicitly referenced (e.g. in a {{{<<tiddler...>>}}} macro or in a link) the part's content is displayed.|\n|<html><i>any tiddler content</i></html>|<html>The content of the part.<br>A part can have any content that a "normal" tiddler may have, e.g. you may use all the formattings and macros defined.</html>|\n|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Applications<html><a name="Applications"/></html>\n!!Refering to Paragraphs of a Longer Tiddler<html><a name="LongTiddler"/></html>\nAssume you have written a long description in a tiddler and now you want to refer to the content of a certain paragraph in that tiddler (e.g. some definition.) Just wrap the text with a ''part'' block, give it a nice name, create a "pretty link" (like {{{[[Discussion Groups|Introduction/DiscussionGroups]]}}}) and you are done.\n\nNotice this complements the approach to first writing a lot of small tiddlers and combine these tiddlers to one larger tiddler in a second step (e.g. using the {{{<<tiddler...>>}}} macro). Using the ''part'' feature you can first write a "classic" (longer) text that can be read "from top to bottom" and later "reuse" parts of this text for some more "non-linear" reading.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Citation Index<html><a name="Citation"/></html>\nCreate a tiddler "Citations" that contains your "citations". \nWrap every citation with a part and a proper name. \n\n''Example''\n{{{\n<part BAX98>Baxter, Ira D. et al: //Clone Detection Using Abstract Syntax Trees.// \nin //Proc. ICSM//, 1998.</part>\n\n<part BEL02>Bellon, Stefan: //Vergleich von Techniken zur Erkennung duplizierten Quellcodes.// \nThesis, Uni Stuttgart, 2002.</part>\n\n<part DUC99>Ducasse, Stรฉfane et al: //A Language Independent Approach for Detecting Duplicated Code.// \nin //Proc. ICSM//, 1999.</part>\n}}}\n\nYou may now "cite" them just by using a pretty link like {{{[[Citations/BAX98]]}}} or even more pretty, like this {{{[[BAX98|Citations/BAX98]]}}}.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Creating "multi-line" Table Cells<html><a name="TableCells"/></html>\nYou may have noticed that it is hard to create table cells with "multi-line" content. E.g. if you want to create a bullet list inside a table cell you cannot just write the bullet list\n{{{\n* Item 1\n* Item 2\n* Item 3\n}}}\ninto a table cell (i.e. between the | ... | bars) because every bullet item must start in a new line but all cells of a table row must be in one line.\n\nUsing the ''part'' feature this problem can be solved. Just create a hidden part that contains the cells content and use a {{{<<tiddler >>}}} macro to include its content in the table's cell.\n\n''Example''\n{{{\n|!Subject|!Items|\n|subject1|<<tiddler ./Cell1>>|\n|subject2|<<tiddler ./Cell2>>|\n\n<part Cell1 hidden>\n* Item 1\n* Item 2\n* Item 3\n</part>\n...\n}}}\n\nNotice that inside the {{{<<tiddler ...>>}}} macro you may refer to the "current tiddler" using the ".".\n\nBTW: The same approach can be used to create bullet lists with items that contain more than one line.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Creating Tabs<html><a name="Tabs"/></html>\nThe build-in {{{<<tabs ...>>}}} macro requires that you defined an additional tiddler for every tab it displays. When you want to have "nested" tabs you need to define a tiddler for the "main tab" and one for every tab it contains. I.e. the definition of a set of tabs that is visually displayed at one place is distributed across multiple tiddlers.\n\nWith the ''part'' feature you can put the complete definition in one tiddler, making it easier to keep an overview and maintain the tab sets.\n\n''Example''\nThe standard tabs at the sidebar are defined by the following eight tiddlers:\n* SideBarTabs\n* TabAll\n* TabMore\n* TabMoreMissing\n* TabMoreOrphans\n* TabMoreShadowed\n* TabTags\n* TabTimeline\n\nInstead of these eight tiddlers one could define the following SideBarTabs tiddler that uses the ''part'' feature:\n{{{\n<<tabs txtMainTab \n Timeline Timeline SideBarTabs/Timeline \n All 'All tiddlers' SideBarTabs/All \n Tags 'All tags' SideBarTabs/Tags \n More 'More lists' SideBarTabs/More>>\n<part Timeline hidden><<timeline>></part>\n<part All hidden><<list all>></part>\n<part Tags hidden><<allTags>></part>\n<part More hidden><<tabs txtMoreTab \n Missing 'Missing tiddlers' SideBarTabs/Missing \n Orphans 'Orphaned tiddlers' SideBarTabs/Orphans \n Shadowed 'Shadowed tiddlers' SideBarTabs/Shadowed>></part>\n<part Missing hidden><<list missing>></part>\n<part Orphans hidden><<list orphans>></part>\n<part Shadowed hidden><<list shadowed>></part>\n}}}\n\nNotice that you can easily "overwrite" individual parts in separate tiddlers that have the full name of the part.\n\nE.g. if you don't like the classic timeline tab but only want to see the 100 most recent tiddlers you could create a tiddler "~SideBarTabs/Timeline" with the following content:\n{{{\n<<forEachTiddler \n sortBy 'tiddler.modified' descending \n write '(index < 100) ? "* [["+tiddler.title+"]]\sn":""'>>\n}}}\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Using Sliders<html><a name="Sliders"/></html>\nVery similar to the build-in {{{<<tabs ...>>}}} macro (see above) the {{{<<slider ...>>}}} macro requires that you defined an additional tiddler that holds the content "to be slid". You can avoid creating this extra tiddler by using the ''part'' feature\n\n''Example''\nIn a tiddler "About" we may use the slider to show some details that are documented in the tiddler's "Details" part.\n{{{\n...\n<<slider chkAboutDetails About/Details details "Click here to see more details">>\n<part Details hidden>\nTo give you a better overview ...\n</part>\n...\n}}}\n\nNotice that putting the content of the slider into the slider's tiddler also has an extra benefit: When you decide you need to edit the content of the slider you can just doubleclick the content, the tiddler opens for editing and you can directly start editing the content (in the part section). In the "old" approach you would doubleclick the tiddler, see that the slider is using tiddler X, have to look for the tiddler X and can finally open it for editing. So using the ''part'' approach results in a much short workflow.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Revision history<html><a name="Revisions"/></html>\n* v1.0.5 (2006-03-02)\n** Bugfix: Example with multi-line table cells does not work in IE6. Thanks to Paulo Soares for reporting the bug.\n* v1.0.4 (2006-02-28)\n** Bugfix: Shadow tiddlers cannot be edited (in TW 2.0.6). Thanks to Torsten Vanek for reporting the bug.\n* v1.0.3 (2006-02-26)\n** Adapt code to newly introduced Tiddler.prototype.isReadOnly() function (in TW 2.0.6). Thanks to Paulo Soares for reporting the problem.\n* v1.0.2 (2006-02-05)\n** Also allow other macros than the "tiddler" macro use the "." in the part reference (to refer to "this" tiddler)\n* v1.0.1 (2006-01-27)\n** Added Table of Content for plugin documentation. Thanks to RichCarrillo for suggesting.\n** Bugfix: newReminder plugin does not work when PartTiddler is installed. Thanks to PauloSoares for reporting.\n* v1.0.0 (2006-01-25)\n** initial version\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Code<html><a name="Code"/></html>\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n***/\n//{{{\n//============================================================================\n// PartTiddlerPlugin\n\n// Ensure that the PartTiddler Plugin is only installed once.\n//\nif (!version.extensions.PartTiddlerPlugin) {\n\n\n\nversion.extensions.PartTiddlerPlugin = {\n major: 1, minor: 0, revision: 5,\n date: new Date(2006, 3, 2), \n type: 'plugin',\n source: "http://tiddlywiki.abego-software.de/#PartTiddlerPlugin"\n};\n\nif (!window.abego) window.abego = {};\nif (version.major < 2) alertAndThrow("PartTiddlerPlugin requires TiddlyWiki 2.0 or newer.");\n\n//============================================================================\n// Common Helpers\n\n// Looks for the next newline, starting at the index-th char of text. \n//\n// If there are only whitespaces between index and the newline \n// the index behind the newline is returned, \n// otherwise (or when no newline is found) index is returned.\n//\nvar skipEmptyEndOfLine = function(text, index) {\n var re = /(\sn|[^\ss])/g;\n re.lastIndex = index;\n var result = re.exec(text);\n return (result && text.charAt(result.index) == '\sn') \n ? result.index+1\n : index;\n}\n\n\n//============================================================================\n// Constants\n\nvar partEndOrStartTagRE = /(<\s/part>)|(<part(?:\ss+)((?:[^>])+)>)/mg;\nvar partEndTagREString = "<\s\s/part>";\nvar partEndTagString = "</part>";\n\n//============================================================================\n// Plugin Specific Helpers\n\n// Parse the parameters inside a <part ...> tag and return the result.\n//\n// @return [may be null] {partName: ..., isHidden: ...}\n//\nvar parseStartTagParams = function(paramText) {\n var params = paramText.readMacroParams();\n if (params.length == 0 || params[0].length == 0) return null;\n \n var name = params[0];\n var paramsIndex = 1;\n var hidden = false;\n if (paramsIndex < params.length) {\n hidden = params[paramsIndex] == "hidden";\n paramsIndex++;\n }\n \n return {\n partName: name, \n isHidden: hidden\n };\n}\n\n// Returns the match to the next (end or start) part tag in the text, \n// starting the search at startIndex.\n// \n// When no such tag is found null is returned, otherwise a "Match" is returned:\n// [0]: full match\n// [1]: matched "end" tag (or null when no end tag match)\n// [2]: matched "start" tag (or null when no start tag match)\n// [3]: content of start tag (or null if no start tag match)\n//\nvar findNextPartEndOrStartTagMatch = function(text, startIndex) {\n var re = new RegExp(partEndOrStartTagRE);\n re.lastIndex = startIndex;\n var match = re.exec(text);\n return match;\n}\n\n//============================================================================\n// Formatter\n\n// Process the <part ...> ... </part> starting at (w.source, w.matchStart) for formatting.\n//\n// @return true if a complete part section (including the end tag) could be processed, false otherwise.\n//\nvar handlePartSection = function(w) {\n var tagMatch = findNextPartEndOrStartTagMatch(w.source, w.matchStart);\n if (!tagMatch) return false;\n if (tagMatch.index != w.matchStart || !tagMatch[2]) return false;\n\n // Parse the start tag parameters\n var arguments = parseStartTagParams(tagMatch[3]);\n if (!arguments) return false;\n \n // Continue processing\n var startTagEndIndex = skipEmptyEndOfLine(w.source, tagMatch.index + tagMatch[0].length);\n var endMatch = findNextPartEndOrStartTagMatch(w.source, startTagEndIndex);\n if (endMatch && endMatch[1]) {\n if (!arguments.isHidden) {\n w.nextMatch = startTagEndIndex;\n w.subWikify(w.output,partEndTagREString);\n }\n w.nextMatch = skipEmptyEndOfLine(w.source, endMatch.index + endMatch[0].length);\n \n return true;\n }\n return false;\n}\n\nconfig.formatters.push( {\n name: "part",\n match: "<part\s\ss+[^>]+>",\n \n handler: function(w) {\n if (!handlePartSection(w)) {\n w.outputText(w.output,w.matchStart,w.matchStart+w.matchLength);\n }\n }\n} )\n\n//============================================================================\n// Extend "fetchTiddler" functionality to also recognize "part"s of tiddlers \n// as tiddlers.\n\nvar currentParent = null; // used for the "." parent (e.g. in the "tiddler" macro)\n\n// Return the match to the first <part ...> tag of the text that has the\n// requrest partName.\n//\n// @return [may be null]\n//\nvar findPartStartTagByName = function(text, partName) {\n var i = 0;\n \n while (true) {\n var tagMatch = findNextPartEndOrStartTagMatch(text, i);\n if (!tagMatch) return null;\n\n if (tagMatch[2]) {\n // Is start tag\n \n // Check the name\n var arguments = parseStartTagParams(tagMatch[3]);\n if (arguments && arguments.partName == partName) {\n return tagMatch;\n }\n }\n i += tagMatch[0].length;\n }\n}\n\n// Return the part "partName" of the given parentTiddler as a "readOnly" Tiddler \n// object, using fullName as the Tiddler's title. \n//\n// All remaining properties of the new Tiddler (tags etc.) are inherited from \n// the parentTiddler.\n// \n// @return [may be null]\n//\nvar getPart = function(parentTiddler, partName, fullName) {\n var text = parentTiddler.text;\n var startTag = findPartStartTagByName(text, partName);\n if (!startTag) return null;\n \n var endIndexOfStartTag = skipEmptyEndOfLine(text, startTag.index+startTag[0].length);\n var indexOfEndTag = text.indexOf(partEndTagString, endIndexOfStartTag);\n\n if (indexOfEndTag >= 0) {\n var partTiddlerText = text.substring(endIndexOfStartTag,indexOfEndTag);\n var partTiddler = new Tiddler();\n partTiddler.set(\n fullName,\n partTiddlerText,\n parentTiddler.modifier,\n parentTiddler.modified,\n parentTiddler.tags,\n parentTiddler.created);\n partTiddler.hasReadOnlyFlag = true;\n return partTiddler;\n }\n \n return null;\n}\n\n// Hijack the store.fetchTiddler to recognize the "part" addresses.\n//\n\nvar oldFetchTiddler = store.fetchTiddler ;\nstore.fetchTiddler = function(title) {\n var result = oldFetchTiddler.apply(this, arguments);\n if (!result && title) {\n var i = title.lastIndexOf('/');\n if (i > 0) {\n var parentName = title.substring(0, i);\n var partName = title.substring(i+1);\n var parent = (parentName == ".") \n ? currentParent \n : oldFetchTiddler.apply(this, [parentName]);\n if (parent) {\n return getPart(parent, partName, parent.title+"/"+partName);\n }\n }\n }\n return result; \n};\n\n\n// The user must not edit a readOnly/partTiddler\n//\n\nconfig.commands.editTiddler.oldIsReadOnlyFunction = Tiddler.prototype.isReadOnly;\n\nTiddler.prototype.isReadOnly = function() {\n // Tiddler.isReadOnly was introduced with TW 2.0.6.\n // For older version we explicitly check the global readOnly flag\n if (config.commands.editTiddler.oldIsReadOnlyFunction) {\n if (config.commands.editTiddler.oldIsReadOnlyFunction.apply(this, arguments)) return true;\n } else {\n if (readOnly) return true;\n }\n\n return this.hasReadOnlyFlag;\n}\n\nconfig.commands.editTiddler.handler = function(event,src,title)\n{\n var t = store.getTiddler(title);\n // Edit the tiddler if it either is not a tiddler (but a shadowTiddler)\n // or the tiddler is not readOnly\n if(!t || !t.isReadOnly())\n {\n clearMessage();\n story.displayTiddler(null,title,DEFAULT_EDIT_TEMPLATE);\n story.focusTiddler(title,"text");\n return false;\n }\n}\n\n// To allow the "./partName" syntax in macros we need to hijack \n// the invokeMacro to define the "currentParent" while it is running.\n// \nvar oldInvokeMacro = window.invokeMacro;\nfunction myInvokeMacro(place,macro,params,wikifier,tiddler) {\n var oldCurrentParent = currentParent;\n if (tiddler) currentParent = tiddler;\n try {\n oldInvokeMacro.apply(this, arguments);\n } finally {\n currentParent = oldCurrentParent;\n }\n}\nwindow.invokeMacro = myInvokeMacro;\n\n// Scroll the anchor anchorName in the viewer of the given tiddler visible.\n// When no tiddler is defined use the tiddler of the target given event is used.\nwindow.scrollAnchorVisible = function(anchorName, tiddler, evt) {\n var tiddlerElem = null;\n if (tiddler) {\n tiddlerElem = document.getElementById(story.idPrefix + tiddler);\n }\n if (!tiddlerElem && evt) {\n var target = resolveTarget(evt);\n tiddlerElem = story.findContainingTiddler(target);\n }\n if (!tiddlerElem) return;\n\n var children = tiddlerElem.getElementsByTagName("a");\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n var name = child.getAttribute("name");\n if (name == anchorName) {\n var y = findPosY(child);\n window.scrollTo(0,y);\n return;\n }\n }\n}\n\n} // of "install only once"\n//}}}\n\n/***\n<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Licence and Copyright\nCopyright (c) abego Software ~GmbH, 2006 ([[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\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\n<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n***/\n
<<plugins>>
\n|!Plugin|!Description|\n|[[CreoleFormatterPlugin]]|Pre-release - allows Tiddlers to use [[Creole|http://www.wikicreole.org/]] text formatting|\n|[[MediaWikiFormatterPlugin]]|Pre-release - allows Tiddlers to use [[MediaWiki|http://en.wikipedia.org/wiki/Help:Wikitext_quick_reference#Basic_text_formatting]] ([[WikiPedia|http://www.wikipedia.org]]) text formatting|\n|[[PBWikiFormatterPlugin]]|Pre-release - allows Tiddlers to use [[PBWiki|http://yummy.pbwiki.com/WikiStyle]] text formatting|\n|[[PmWikiFormatterPlugin]]|Pre-release - allows Tiddlers to use [[PmWiki|http://pmwiki.org/wiki/PmWiki/TextFormattingRules]] text formatting|\n|[[SocialTextFormatterPlugin]]|Pre-release - allows Tiddlers to use [[SocialText|http://www.socialtext.com/]] text formatting|\n|[[TracFormatterPlugin]]|Pre-release - allows Tiddlers to use [[Trac|http://trac.edgewall.org/wiki/WikiFormatting]] text formatting|\n|[[TWikiFormatterPlugin]]|Pre-release - allows Tiddlers to use [[TWiki|http://twiki.org/cgi-bin/view/TWiki/TextFormattingRules]] text formatting|\n|[[DisableWikiLinksPlugin]]|Pre-release - allows you to disable TiddlyWiki's automatic linking of WikiWords|\n\n[[PluginManager]]
/***\n|''Name:''|PmWikiFormatterPlugin|\n|''Description:''|Pre-release - Allows Tiddlers to use [[PmWiki|http://pmwiki.org/wiki/PmWiki/TextFormattingRules]] text formatting|\n|''Source:''|http://martinswiki.com/prereleases.html#PmWikiFormatterPlugin - for pre-release|\n|''Author:''|Martin Budden (mjbudden (at) gmail (dot) com)|\n|''Version:''|0.2.5|\n|''Status:''|alpha pre-release|\n|''Date:''|Oct 21, 2006|\n|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.1.0|\n\nThis is an early release of the PmWikiFormatterPlugin, which allows you to insert PmWiki formated text\ninto a TiddlyWiki.\n\nThe aim is not to fully emulate PmWiki, but to allow you to create PmWiki content off-line and then paste\nthe content into your PmWiki later on, with the expectation that only minor edits will be required.\n\nTo use PmWiki format in a Tiddler, tag the Tiddler with PmWikiFormat. See [[testPmWikiFormat]] for an example.\n\nSee http://www.pmwiki.org/wiki/PmWiki/MarkupMasterIndex for PmWiki Markup.\n\nThis is an early alpha release, with (at least) the following known issues:\n# Proper paragraph handling requires fix to TiddlyWiki that will be available in TiddlyWiki v2.2\n# Tables not fully supported\n## Table attributes not supported (eg || border=1)\n## Table captions not supported\n# Anchors not supported.\n# Images not supported.\n# Image links not supported\n# Leading spaces to preserve formatting only work partially.\n# Directives not supported eg (:directive (attr...):) - except for the (:markup:)...(:markupend:) directive\n# White space list rules not supported\n# Definition lists not supported\n\n***/\n\n//{{{\n\n// Ensure that the PmWikiFormatter Plugin is only installed once.\nif(!version.extensions.PmWikiFormatterPlugin) {\nversion.extensions.PmWikiFormatterPlugin = {installed:true};\n\nif(version.major < 2 || (version.major == 2 && version.minor < 1))\n {alertAndThrow("PmWikiFormatterPlugin requires TiddlyWiki 2.1 or later.");}\n\nPmWikiFormatter = {}; // "namespace" for local functions\n\npmDebug = function(out,str)\n{\n createTiddlyText(out,str.replace(/\sn/mg,"\s\sn").replace(/\sr/mg,"RR"));\n createTiddlyElement(out,"br");\n};\n\nPmWikiFormatter.setFromParams = function(w,p)\n{\n var r = {};\n var re = /\ss*(.*?)=(?:(?:"(.*?)")|(?:'(.*?)')|((?:\sw|%|#)*))/mg;\n var match = re.exec(p);\n while(match)\n {\n var s = match[1].unDash();\n if(match[2])\n {\n r[s] = match[2];\n }\n else if(match[3])\n {\n r[s] = match[3];\n }\n else\n {\n r[s] = match[4];\n }\n match = re.exec(p);\n }\n return r;\n};\n\nconfig.formatterHelpers.setAttributesFromParams = function(e,p)\n{\n var re = /\ss*(.*?)=(?:(?:"(.*?)")|(?:'(.*?)')|((?:\sw|%|#)*))/mg;\n var match = re.exec(p);\n while(match)\n {\n var s = match[1].unDash();\n if(s=="bgcolor")\n {\n s = "backgroundColor";\n }\n try {\n if(match[2])\n {\n e.setAttribute(s,match[2]);\n }\n else if(match[3])\n {\n e.setAttribute(s,match[3]);\n }\n else\n {\n e.setAttribute(s,match[4]);\n }\n }\n catch(ex) {}\n match = re.exec(p);\n }\n};\n\nconfig.pmWikiFormatters = [\n{\n/*<div class='vspace'></div>\n<table class='markup vert' align='center'>\n<tr><td class='markup1' valign='top'>\n<pre>->Four score and seven years ago our fathers placed upon this continent\na new nation, conceived in liberty and dedicated to the proposition that\nall men are created equal.\n</pre>\n</td></tr>\n<tr><td class='markup2' valign='top'>\n<div class='indent'>Four score and seven years ago our fathers placed upon this continent a new nation, conceived in liberty and dedicated to the proposition that all men are created equal.\n</div>\n</td></tr>\n</table>*/\n name: "pmWikiMarkup",\n match: "\s\s(:markup:\s\s)\s\ss*\s\sn",\n lookaheadRegExp: /\s(:markup:\s)\ss*\sn((?:.|\sn)*?)\s(:markupend:\s)/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n var text = lookaheadMatch[1];\n if(config.browser.isIE)\n {\n text = text.replace(/\sn/g,"\sr");\n }\n var t = createTiddlyElement(w.output,"table",null,"markup vert");\n var tr1 = createTiddlyElement(t,"tr");\n var td1 = createTiddlyElement(tr1,"td",null,"markup1");\n var tr2 = createTiddlyElement(t,"tr");\n var td2 = createTiddlyElement(tr2,"td",null,"markup2");\n \n createTiddlyElement(td1,"pre",null,null,text);\n var oldSource = w.source;\n w.source = text; w.nextMatch = 0;\n w.subWikifyUnterm(td2);\n w.source = oldSource;\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n},\n\n{\n name: "pmWikiHeading",\n match: "^!{1,6}",\n termRegExp: /(\sn)/mg,\n handler: function(w)\n {\n var e = createTiddlyElement(w.output,"h" + w.matchLength);\n w.subWikifyTerm(e,this.termRegExp);\n }\n},\n\n{\n name: "pmWikiTableParams",\n match: "^\s\s|\s\s|(?:[^\s\sn\s\s|]*)\s\sn",\n lookaheadRegExp: /^\s|\s|([^\sn\s|]*)\sn/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n /*if(!w.tableParams)\n w.tableParams = {};\n w.tableParams = PmWikiFormatter.setFromParams(w,lookaheadMatch[1]);*/\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "pmWikiTable",\n match: "^\s\s|\s\s|(?:[^\s\sn]*)\s\s|\s\s|$",\n lookaheadRegExp: /^\s|\s|([^\sn]*)\s|\s|$/mg,\n rowTermRegExp: /(\s|\s|$\sn?)/mg,\n cellRegExp: /(?:\s|\s|([^\sn]*)\s|\s|)|(\s|\s|$\sn?)/mg,\n cellTermRegExp: /((?:\sx20*)\s|\s|)/mg,\n handler: function(w)\n {\n//this.debug = createTiddlyElement(w.output,"p");\n var table = createTiddlyElement(w.output,"table");\n /*for(var i in w.tableParams)\n {\n table.setAttribut(i,w.tableParams[i])\n }*/\n var rowContainer = createTiddlyElement(table,"tbody");\n var rowCount = 0;\n w.nextMatch = w.matchStart;\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n while(lookaheadMatch && lookaheadMatch.index == w.nextMatch)\n {\n this.rowHandler(w,createTiddlyElement(rowContainer,"tr",null,(rowCount&1)?"oddRow":"evenRow"));\n rowCount++;\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n }\n },//# end handler\n rowHandler: function(w,e)\n {\n var col = 0;\n var colSpanCount = 1;\n var prevCell = null;\n this.cellRegExp.lastIndex = w.nextMatch;\n var cellMatch = this.cellRegExp.exec(w.source);\n while(cellMatch && cellMatch.index == w.nextMatch)\n {\n if(w.source.substr(w.nextMatch,4) == "||||")\n {// Colspan\n//pmDebug(this.debug,w.source.substr(w.nextMatch,10));\n//pmDebug(this.debug,"nm:"+w.nextMatch+" li:"+this.cellRegExp.lastIndex);\n colSpanCount++;\n w.nextMatch += 2;\n }\n else if(cellMatch[2])\n {// End of row\n if(colSpanCount > 1)\n {\n prevCell.setAttribute("colspan",colSpanCount);\n prevCell.setAttribute("colSpan",colSpanCount); // Needed for IE\n }\n w.nextMatch = this.cellRegExp.lastIndex;\n break;\n }\n else\n {// Cell\n w.nextMatch += 2; //skip over ||\n var chr = w.source.substr(w.nextMatch,1);\n var cell;\n if(chr == "!")\n {\n cell = createTiddlyElement(e,"th");\n w.nextMatch++;\n chr = w.source.substr(w.nextMatch,1);\n }\n else\n {\n cell = createTiddlyElement(e,"td");\n }\n var spaceLeft = false;\n while(chr == " ")\n {\n spaceLeft = true;\n w.nextMatch++;\n chr = w.source.substr(w.nextMatch,1);\n }\n if(colSpanCount > 1)\n {\n cell.setAttribute("colspan",colSpanCount);\n cell.setAttribute("colSpan",colSpanCount); // Needed for IE\n colSpanCount = 1;\n }\n w.subWikifyTerm(cell,this.cellTermRegExp);\n if(w.matchText.substr(w.matchText.length-3,1) == " ") // spaceRight\n {\n cell.align = spaceLeft ? "center" : "left";\n }\n else if(spaceLeft)\n {\n cell.align = "right";\n }\n prevCell = cell;\n w.nextMatch -= 2;\n }\n col++;\n this.cellRegExp.lastIndex = w.nextMatch;\n cellMatch = this.cellRegExp.exec(w.source);\n }\n }//# end rowHandler\n},\n\n{\n name: "pmWikilist",\n match: "^(?:(?:(?:\s\s*)|(?:#))+)",\n lookaheadRegExp: /^(?:(?:(\s*)|(#))+)/mg,\n termRegExp: /(\sn)/mg,\n handler: function(w)\n {\n var placeStack = [w.output];\n var currLevel = 0, currType = null;\n var listLevel, listType, itemType;\n w.nextMatch = w.matchStart;\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n while(lookaheadMatch && lookaheadMatch.index == w.nextMatch)\n {\n if(lookaheadMatch[1])\n {\n listType = "ul";\n itemType = "li";\n }\n else if(lookaheadMatch[2])\n {\n listType = "ol";\n itemType = "li";\n }\n listLevel = lookaheadMatch[0].length;\n w.nextMatch += lookaheadMatch[0].length;\n if(listLevel > currLevel)\n {\n for(var i=currLevel; i<listLevel; i++)\n {placeStack.push(createTiddlyElement(placeStack[placeStack.length-1],listType));}\n }\n else if(listLevel < currLevel)\n {\n for(i=currLevel; i>listLevel; i--)\n {placeStack.pop();}\n }\n else if(listLevel == currLevel && listType != currType)\n {\n placeStack.pop();\n placeStack.push(createTiddlyElement(placeStack[placeStack.length-1],listType));\n }\n currLevel = listLevel;\n currType = listType;\n var e = createTiddlyElement(placeStack[placeStack.length-1],itemType);\n w.subWikifyTerm(e,this.termRegExp);\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n }\n }\n},\n\n{\n name: "pmWikiRule",\n match: "^----+$\s\sn?",\n handler: function(w)\n {\n createTiddlyElement(w.output,"hr");\n }\n},\n\n{\n//Multiple indents are dealt with in PmWiki as: <dl><dd><div class='indent'>indentedevenmore</div></dd></dl>\n name: "pmWikiIndent",\n match: "^-+>",\n termRegExp: /(\sn)/mg,\n handler: function(w)\n {\n var e = createTiddlyElement(w.output,"div",null,"indent");\n w.subWikifyTerm(e,this.termRegExp);\n }\n},\n\n{\n name: "pmWikiOutdent",\n match: "^-+<",\n termRegExp: /(\sn)/mg,\n handler: function(w)\n {\n var e = createTiddlyElement(w.output,"div",null,"outdent");\n w.subWikifyTerm(e,this.termRegExp);\n }\n},\n\n{\n name: "pmWikiLeadingSpaces",\n match: "^ ",\n lookaheadRegExp: /^ /mg,\n termRegExp: /(\sn)/mg,\n handler: function(w)\n {\n var e = createTiddlyElement(w.output,"pre");\n while(true)\n {\n w.subWikifyTerm(e,this.termRegExp);\n createTiddlyElement(e,"br");\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.nextMatch)\n {\n w.nextMatch += lookaheadMatch[0].length;\n }\n else\n {\n break;\n }\n }\n }\n},\n\n{\n name: "pmWikiExplicitLink",\n match: "\s\s[\s\s[",\n lookaheadRegExp: /\s[\s[(.*?)(?:\s|(.*?))?\s]\s]/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n var link = lookaheadMatch[1];\n if(lookaheadMatch[2])\n {// Titled link\n var e = config.formatterHelpers.isExternalLink(link) ? createExternalLink(w.output,link) : createTiddlyLink(w.output,link,false,null,w.isStatic);\n var text = lookaheadMatch[2];\n }\n else\n {// Simple bracketted link\n e = createTiddlyLink(w.output,link,false,null,w.isStatic);\n text = link;\n }\n createTiddlyText(e,text);\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "pmWikiNotWikiLink",\n match: "`" + config.textPrimitives.wikiLink,\n handler: function(w)\n {\n w.outputText(w.output,w.matchStart+1,w.nextMatch);\n }\n},\n\n{\n name: "pmWikiLink",\n match: config.textPrimitives.wikiLink,\n handler: function(w)\n {\n if(w.matchStart > 0)\n {\n var preRegExp = new RegExp(config.textPrimitives.anyLetter,"mg");\n preRegExp.lastIndex = w.matchStart-1;\n preMatch = preRegExp.exec(w.source);\n if(preMatch.index == w.matchStart-1)\n {\n w.outputText(w.output,w.matchStart,w.nextMatch);\n return;\n }\n }\n var output = w.output;\n if(w.autoLinkWikiWords == true || store.isShadowTiddler(w.matchText))\n {\n output = createTiddlyLink(w.output,w.matchText,false,null,w.isStatic);\n }\n w.outputText(output,w.matchStart,w.nextMatch);\n }\n},\n\n{\n name: "urlLink",\n match: config.textPrimitives.urlPattern,\n handler: function(w)\n {\n w.outputText(createExternalLink(w.output,w.matchText),w.matchStart,w.nextMatch);\n }\n},\n\n{\n name: "pmWikiBoldByChar",\n match: "'''",\n termRegExp: /('''|\sn)/mg,\n element: "strong",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "pmWikiItalicByChar",\n match: "''",\n termRegExp: /(''|\sn)/mg,\n element: "em",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "pmWikiMonospacedByChar",\n match: "@@",\n termRegExp: /(@@|\sn)/mg,\n element: "code",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "pmWikiUnderlineByChar",\n match: "\s\s{\s\s+",\n termRegExp: /(\s+\s}|\sn)/mg,\n element: "u",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "pmWikiStrikeByChar",\n match: "\s\s{-",\n termRegExp: /(-\s}|\sn)/mg,\n element: "strike",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "pmWikiSuperscriptByChar",\n match: "\s\s'\s\s^",\n termRegExp: /(\s^\s'|\sn)/mg,\n element: "sup",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "pmWikiSubscriptByChar",\n match: "\s\s'_",\n termRegExp: /(_\s'|\sn)/mg,\n element: "sub",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "pmWikiBigByChar",\n match: "\s\s'\s\s+",\n termRegExp: /(\s+\s'|\sn)/mg,\n element: "big",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "pmWikiSmallByChar",\n match: "\s\s'\s\s-",\n termRegExp: /(\s-\s'|\sn)/mg,\n element: "small",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "pmWikiLargerFont",\n match: "\s\s[\s\s+{1,2}",\n termRegExp: /(\s+{1,2}\s]|\sn)/mg,\n handler: function(w)\n {\n //# <span style='font-size:120%'>big</span>, <span style='font-size:144%'>bigger</span>,\n var e = createTiddlyElement(w.output,"span");\n e.style["fontSize"] = w.matchLength==2 ? "120%" : "144%";\n w.subWikifyTerm(e,this.termRegExp);\n }\n},\n\n{\n name: "pmWikiSmallerFont",\n match: "\s\s[\s\s-{1,2}",\n termRegExp: /(\s-{1,2}\s]|\sn)/mg,\n element: "span",\n handler: function(w)\n {\n //# <span style='font-size:83%'>small</span>, <span style='font-size:69%'>smaller</span> text\n var e = createTiddlyElement(w.output,"span");\n e.style["fontSize"] = w.matchLength==2 ? "83%" : "69%";\n w.subWikifyTerm(e,this.termRegExp);\n }\n},\n\n{\n name: "pmWikiExplicitLineBreak",\n match: "\s\s{2,3}\s\sn",\n handler: function(w)\n {\n createTiddlyElement(w.output,"br");\n if(w.matchLength==4)\n {\n createTiddlyElement(w.output,"br");\n }\n }\n},\n\n{\n name: "pmWikiParagraph",\n match: "\s\sn{2,}",\n handler: function(w)\n {\n createTiddlyElement(w.output,"p");\n }\n},\n\n{\n name: "pmWikiEscapedText",\n match: "\s\s[=",\n lookaheadRegExp: /\s[=((?:.|\sn)*?)=\s]/mg,\n element: "span",\n cls: "escaped",\n handler: config.formatterHelpers.enclosedTextHelper\n},\n\n{\n name: "pmWikiEscapedCode",\n match: "\s\s[@",\n lookaheadRegExp: /\s[@((?:.|\sn)*?)@\s]/mg,\n element: "code",\n cls: "escaped",\n handler: config.formatterHelpers.enclosedTextHelper\n},\n\n{\n name: "pmWikiComment",\n match: "<!\s\s-\s\s-",\n lookaheadRegExp: /<!\s-\s-((?:.|\sn)*?)\s-\s-!>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "pmWikiHtmlEntitiesEncoding",\n match: "&#?[a-zA-Z0-9]{2,8};",\n handler: function(w)\n {\n createTiddlyElement(w.output,"span").innerHTML = w.matchText;\n }\n}\n\n];\n\nconfig.parsers.pmWikiFormatter = new Formatter(config.pmWikiFormatters);\nconfig.parsers.pmWikiFormatter.formatTag = "PmWikiFormat";\n} // end of "install only once"\n//}}}\n
/***\nfrom: http://pmwiki.org/wiki/PmWiki/TextFormattingRules\n***/\n/*{{{*/\nul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; }\ncode.escaped { white-space: nowrap; }\n.vspace { margin-top:1.33em; }\n.indent { margin-left:40px; }\n.outdent { margin-left:40px; text-indent:-40px; }\na.createlinktext { text-decoration:none; border-bottom:1px dotted gray; }\na.createlink { text-decoration:none; position:relative; top:-0.5em;\nfont-weight:bold; font-size:smaller; border-bottom:none; }\nimg { border:0px; }\n.apprlink { font-size:smaller; }\n.Pm { color:purple; font-style:italic; }\n.note { color:green; font-style:italic; }\n.editconflict { color:green; \nfont-style:italic; margin-top:1.33em; margin-bottom:1.33em; }\n\ntable.markup { border:2px dotted #ccf; width:90%; }\ntd.markup1, td.markup2 { padding-left:10px; padding-right:10px; }\ntable.vert td.markup1 { border-bottom:1px solid #ccf; }\ntable.horiz td.markup1 { width:23em; border-right:1px solid #ccf; }\ntable.markup caption { text-align:left; }\ndiv.faq p, div.faq pre { margin-left:2em; }\ndiv.faq p.question { margin:1em 0 0.75em 0; font-weight:bold; }\n\n.frame { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }\n.lfloat { float:left; margin-right:0.5em; }\n.rfloat { float:right; margin-left:0.5em; }\na.varlink { text-decoration:none; }\n/*}}}*/\n
/***\nfrom: http://www.pmwiki.org/pmwiki/pub/skins/pmwiki/pmwiki.css\n\npmwiki.css\nCopyright 2004-2006 Patrick R. Michaud (pmichaud@pobox.com)\nCopyright 2006 Hagan Fox\nThis file is part of PmWiki; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published\nby the Free Software Foundation; either version 2 of the License, or\n(at your option) any later version. See pmwiki.php for full details.\n\n***/\n\n/*{{{*/\n/* This sets the overall frame for the site */\nbody {\n margin:0px; background-color:#f7f7f7; \n font-family:Arial,Helvetica,sans-serif; font-size:11pt;\n}\n\n/* These control the fixed-width text elements of the page */\ntextarea, pre, code { font-size:0.9em; }\npre, code { font-family:'Lucida Console','Andale Mono','Courier New',Courier; }\npre { line-height:1.2em; }\npre code, code code, pre pre { font-size:100%; }\n\n/* These primarily adjust the size and spacing of heading elements,\n** most browsers have atrocious defaults for these. */\nh1, h2, h3, h4, h5, h6 { margin-top:1.0em; margin-bottom:0.6em; }\nh1, h2, h3, h6 { font-weight:normal; }\nh4, h5 { font-weight:bold; }\nh1 code, h2 code, h3 code, h4 code { font-size:1em; }\nh1 { font-size:1.8em; }\nh2 { font-size:1.44em; }\nh3 { font-size:1.22em; }\nh4 { font-size:1.07em; }\nh5 { font-size:1.0em; }\nh6 { font-size:1.0em; }\n\n/* The #wikilogo element is the logo from $PageLogoFmt */\n#wikilogo { margin-top:4px; padding:6px; border-bottom:1px #cccccc solid; }\n\n/* This controls the rest of the heading (primarily the search box) */\n#wikihead { \n position:absolute; right:10px; top:10px; \n font-family:Verdana,sans-serif; font-size:85%; \n}\n#wikihead input { font-size:85%; } \n\n/* These are for the left-sidebar. */\n#wikileft { \n width:155px; \n padding:6px; border-right:1px #cccccc solid; \n line-height:1.33em;\n font-size:9.4pt; font-family:Verdana,sans-serif;\n}\n#wikileft .vspace { margin-top:1.125em; }\n#wikileft a { text-decoration:none; color:black; }\n#wikileft a:hover { text-decoration:underline; color:blue; }\n#wikileft ul { list-style:none; padding:0px; margin:0px; }\n#wikileft li { margin:0px; padding-left: 6px; }\n/* The "#wikileft h1" and "#wikileft h5" settings are for\n** backwards compatibility with previous releases of PmWiki.\n** They are deprecated (replaced with the .sidehead class),\n** and may be removed in a future release. */\n#wikileft h1, #wikileft h5, .sidehead {\n margin:0px; padding:4px 2px 2px 2px;\n font-size:11pt; font-weight:bold; font-style:normal; \n}\n#wikileft h1 a, #wikileft h5 a, .sidehead a \n { color:#505050; font-weight:bold; font-style:normal; }\n\n/* These affect the main content area. */\n#wikibody { \n padding:0px 10px 10px 10px; background-color:white; \n font-size:11pt; \n}\n#wikicmds { \n float:right; white-space:nowrap; \n font-family:Verdana,sans-serif; font-size:80%; \n}\n#wikicmds ul { list-style:none; margin:0px; padding:0px; }\n#wikicmds li { display:inline; margin:0px 5px; }\n#wikicmds li a { text-decoration:none; color:black; border:none; }\n#wikicmds li a.createlink { display:none; }\n#wikicmds li a:hover { text-decoration:underline; color:blue; }\n.pagegroup { margin-top:8px; margin-bottom:2px; }\n.pagetitle { line-height:1em; margin:0px; font-size:1.6em; font-weight:normal; }\n.wikiaction { margin-top:4px; margin-bottom:4px; }\n#wikitext { margin-top:12px; line-height:1.33em; }\n#wikitext table { font-size:100%; line-height:1.33em; } /* For MSIE 5.5 */\n\n/* These are for the edit form. */\n#wikiedit form { margin:0px; width:100%; }\n#wikiedit textarea { width:100%; }\n.wikimessage { margin-top:4px; margin-bottom:4px; font-style:italic; }\n\n/* These affect the lines at the very bottom. */\n#wikifoot { \n padding-left:178px; padding-bottom:4px; border-top:1px #cccccc solid;\n font-family:Verdana,sans-serif; font-size:80%; \n}\n\n/* These affect the printed appearance of the web view (not the separate\n** print view) of pages. The sidebar and action links aren't printed. */\n@media print {\n body { width:auto; margin:0px; padding:0.5em; }\n #wikihead, #wikileft, #wikicmds, .footnav { display:none; }\n #wikifoot { padding:2px; }\n}\n/*}}}*/
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal 'YYYY-0MM-0DD wk0WW DD3''journal'>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel 'options ยป' 'Change TiddlyWiki advanced options'>><<slider chkSliderSideBarTabs SideBarTabs 'tabs ยป' 'Sidebar tabs'>>
<<slider chkSliderOptionsPanel SideBarTabs 'tabs ยป' 'Sidebar tabs'>>
for plugins under development
Martin's pre-release ~TiddlyWiki
/***\n|''Name:''|SnipSnapFormatterPlugin|\n|''Description:''|Allows Tiddlers to use [[SnipSnap|http://snipsnap.org/space/snipsnap-help]] text formatting|\n|''Source:''|http://martinswiki.com/prereleases.html#SnipSnapFormatterPlugin|\n|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|\n|''Version:''|0.1.6|\n|''Status:''|alpha pre-release|\n|''Date:''|Sep 23, 2006|\n|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.1.0|\n\nThis is an early release of the SnipSnapFormatterPlugin, which allows you to insert SnipSnap formated text\ninto a TiddlyWiki.\n\nThe aim is not to fully emulate SnipSnap, but to allow you to create SnipSnap content off-line and then paste\nthe content into your SnipSnap later on, with the expectation that only minor edits will be required.\n\nTo use SnipSnap format in a Tiddler, tag the Tiddler with SnipSnapFormat. See [[testSnipSnapFormat]] for an \nexample.\n\nSee http://snipsnap.org/theme/default.css and especially http://snipsnap.org/theme/css/wiki.css for css.\n\nThis is an early alpha release, with (at least) the following known issues:\n#Tables not supported\n\n***/\n\n//{{{\n\n// Ensure that the SnipSnapFormatterPlugin is only installed once.\nif(!version.extensions.SnipSnapFormatterPlugin) {\nversion.extensions.SnipSnapFormatterPlugin = {installed:true};\n\nif(version.major < 2 || (version.major == 2 && version.minor < 1))\n {alertAndThrow("SnipSnapFormatterPlugin requires TiddlyWiki 2.1 or later.");}\n\nsnipSnapDebug = function(out,str)\n{\n createTiddlyText(out,str.replace(/\sn/mg,"\s\sn").replace(/\sr/mg,"RR"));\n createTiddlyElement(out,"br");\n};\n\n/*wikify = function(source,output,highlightRegExp,tiddler)\n{\n if(source && source != "")\n {\n var w = new Wikifier(source,getParser(tiddler),highlightRegExp,tiddler);\n w.output = tiddler==null ? output : createTiddlyElement(output,"p");\n w.subWikifyUnterm(w.output);\n }\n};*/\n\nconfig.snipSnapFormatters = [\n{\n name: "snipSnapHeading",\n match: "^(?:(?:1 )|(?:1\s\s.1 ))",\n lookaheadRegExp: /^(?:(1 )|(1\s.1 ))/mg,\n termRegExp: /(\sn)/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n var h = "h1";\n if(lookaheadMatch[2])\n {//1.1\n h = "h2";\n }\n w.subWikifyTerm(createTiddlyElement(w.output,h),this.termRegExp);\n }\n }\n},\n\n{\n name: "snipSnapList",\n match: "^(?:(?:\s\s* )|(?:\s\s- )|(?:1\s\s. )|(?:A\s\s. )|(?:a\s\s. )|(?:I\s\s. )|(?:i\s\s. )|(?:g\s\s. )|(?:h\s\s. )|(?:k\s\s. )|(?:j\s\s. ))",\n lookaheadRegExp: /^(?:(\s* )|(\s- )|(1\s. )|(A\s. )|(a\s. )|(I\s. )|(i\s. )|(g\s. )|(h\s. )|(k\s. )|(j\s. ))/mg,\n termRegExp: /(\sn)/mg,\n handler: function(w)\n {\n var placeStack = [w.output];\n var currLevel = 0;\n var currType = null;\n var listLevel, listType, itemType;\n w.nextMatch = w.matchStart;\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n while(lookaheadMatch && lookaheadMatch.index == w.nextMatch)\n {\n listType = "ol";\n itemType = "li";\n listLevel = lookaheadMatch[0].length-2;\n var style = null;\n if(lookaheadMatch[1])\n {//*\n listType = "ul";\n listLevel = lookaheadMatch[0].length-1;\n style = "circle";\n }\n else if(lookaheadMatch[2])\n {//-\n listType = "ul";\n listLevel = lookaheadMatch[0].length-1;\n style = "square";\n }\n else if(lookaheadMatch[3])\n {//1.\n style = "decimal";\n }\n else if(lookaheadMatch[4])\n {//A.\n style = "upper-alpha";\n }\n else if(lookaheadMatch[5])\n {//a.\n style = "lower-alpha";\n }\n else if(lookaheadMatch[6])\n {//I.\n style = "upper-roman";\n }\n else if(lookaheadMatch[7])\n {//i.\n style = "lower-roman";\n }\n else if(lookaheadMatch[8])\n {//g.\n style = "lower-greek";\n }\n else if(lookaheadMatch[9])\n {//h.\n style = "hiragana";\n }\n else if(lookaheadMatch[10])\n {//k.\n style = "katakana";\n }\n else if(lookaheadMatch[11])\n {//j.\n style = "hebrew";\n }\n w.nextMatch += lookaheadMatch[0].length;\n if(listLevel > currLevel)\n {\n for(var i=currLevel; i<listLevel; i++)\n {placeStack.push(createTiddlyElement(placeStack[placeStack.length-1],listType));}\n }\n else if(listLevel < currLevel)\n {\n for(i=currLevel; i>listLevel; i--)\n {placeStack.pop();}\n }\n else if(listLevel == currLevel && listType != currType)\n {\n placeStack.pop();\n placeStack.push(createTiddlyElement(placeStack[placeStack.length-1],listType));\n }\n currLevel = listLevel;\n currType = listType;\n var e = createTiddlyElement(placeStack[placeStack.length-1],itemType);\n if(config.browser.isIE)\n {\n e.style["list-style-type"] = style;\n }\n else\n {\n e.style["listStyleType"] = style;\n }\n w.subWikifyTerm(e,this.termRegExp);\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n }\n }\n},\n\n{\n name: "snipSnapRule",\n match: "^----+$\s\sn?",\n handler: function(w)\n {\n createTiddlyElement(w.output,"hr");\n }\n},\n\n{\n name: "macro",\n match: "<<",\n lookaheadRegExp: /<<([^>\ss]+)(?:\ss*)((?:[^>]|(?:>(?!>)))*)>>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[1])\n {\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n invokeMacro(w.output,lookaheadMatch[1],lookaheadMatch[2],w,w.tiddler);\n }\n }\n},\n\n{\n name: "snipSnapExplicitLineBreak",\n match: "\s\s\s\s\s\s\s\s\s\s\s\s",\n handler: function(w)\n {\n createTiddlyElement(w.output,"br");\n }\n},\n\n{\n name: "snipSnapEscapeChar",\n match: "\s\s\s\s.",\n handler: function(w)\n {\n w.outputText(w.output,w.matchStart+1,w.nextMatch);\n }\n},\n\n{\n name: "snipSnapExplicitLink",\n match: "\s\s[",\n lookaheadRegExp: /\s[(.*?)\s]/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n var link = lookaheadMatch[1];\n var text = link;\n createTiddlyText(createTiddlyLink(w.output,link,false,null,w.isStatic),text);\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "snipSnapExternalLink",\n match: "{link:",\n lookaheadRegExp: /\s{link:(?:(.*?)\s|)(.*?)\s}/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n var link = lookaheadMatch[2];\n var text = lookaheadMatch[1] ? lookaheadMatch[1] : link;\n var e = createExternalLink(w.output,link);\n createTiddlyText(e,text);\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "snipSnapNotWikiLink",\n match: "!" + config.textPrimitives.wikiLink,\n handler: function(w)\n {\n w.outputText(w.output,w.matchStart+1,w.nextMatch);\n }\n},\n\n{\n name: "snipSnapWikiLink",\n match: config.textPrimitives.wikiLink,\n handler: function(w)\n {\n if(w.matchStart > 0)\n {\n var preRegExp = new RegExp(config.textPrimitives.anyLetter,"mg");\n preRegExp.lastIndex = w.matchStart-1;\n var preMatch = preRegExp.exec(w.source);\n if(preMatch.index == w.matchStart-1)\n {\n w.outputText(w.output,w.matchStart,w.nextMatch);\n return;\n }\n }\n var output = w.output;\n if(w.autoLinkWikiWords == true || store.isShadowTiddler(w.matchText))\n {\n output = createTiddlyLink(w.output,w.matchText,false);\n }\n w.outputText(output,w.matchStart,w.nextMatch);\n }\n},\n\n{\n name: "snipSnapUrlLink",\n match: config.textPrimitives.urlPattern,\n handler: function(w)\n {\n w.outputText(createExternalLink(w.output,w.matchText),w.matchStart,w.nextMatch);\n }\n},\n\n{\n name: "snipSnapBoldByChar",\n match: "__",\n termRegExp: /(__)/mg,\n element: "strong",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "snipSnapItalicByChar",\n match: "~~",\n termRegExp: /(~~)/mg,\n element: "em",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "snipSnapStrikeByChar",\n match: "--(?!\s\ss|$)",\n termRegExp: /((?!\ss)--|(?=\sn\sn))/mg,\n element: "strike",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "snipSnapMonospacedByChar",\n match: "\s\s{\s\s{\s\s{",\n lookaheadRegExp: /\s{\s{\s{((?:.|\sn)*?)\s}\s}\s}/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n createTiddlyElement(w.output,"code",null,null,lookaheadMatch[1]);\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n } \n},\n\n{\n name: "snipSnapParagraph",\n match: "\s\sn{2,}",\n handler: function(w)\n {\n w.output = createTiddlyElement(w.output,"p");\n }\n},\n\n{\n name: "snipSnapHtmlEntitiesEncoding",\n match: "&#?[a-zA-Z0-9]{2,8};",\n handler: function(w)\n {\n createTiddlyElement(w.output,"span").innerHTML = w.matchText;\n }\n}\n\n];\n\nconfig.parsers.snipSnapFormatter = new Formatter(config.snipSnapFormatters);\nconfig.parsers.snipSnapFormatter.formatTag = "SnipSnapFormat";\n} // end of "install only once"\n//}}}\n
/***\n|''Name:''|SocialtextFormatterPlugin|\n|''Description:''|Allows Tiddlers to use [[Socialtext|http://www.socialtext.com/]] text formatting|\n|''Source:''|http://martinswiki.com/prereleases.html#SocialtextFormatterPlugin|\n|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|\n|''Version:''|0.9.1|\n|''Date:''|Nov 4, 2006|\n|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.1.0|\n\nThis is the SocialtextFormatterPlugin, which allows you to insert Socialtext formated text into a TiddlyWiki.\n\nThe aim is not to fully emulate Socialtext, but to allow you to work with Socialtext content off-line and then resynch the content with your Socialtext wiki later on, with the expectation that only minor edits will be required.\n\nTo use Socialtext format in a Tiddler, tag the Tiddler with SocialtextFormat.\n\nPlease report any defects you find at http://groups.google.co.uk/group/TiddlyWikiDev\n\n***/\n\n//{{{\n\n// Ensure that the SocialtextFormatter Plugin is only installed once.\nif(!version.extensions.SocialtextFormatterPlugin) {\nversion.extensions.SocialtextFormatterPlugin = {installed:true};\n\nif(version.major < 2 || (version.major == 2 && version.minor < 1))\n {alertAndThrow("SocialtextFormatterPlugin requires TiddlyWiki 2.1 or later.");}\n\nwikify = function(source,output,highlightRegExp,tiddler)\n{\n if(source && source != "") {\n var w = new Wikifier(source,getParser(tiddler),highlightRegExp,tiddler);\n var out = output;\n if(tiddler && tiddler.isTagged("SocialtextFormat")) {\n var d1 = createTiddlyElement(output,"div","content-display-body","content-section-visible");\n var d2 = createTiddlyElement(d1,"div","wikipage");\n out = createTiddlyElement(d2,"div",null,"wiki");\n }\n var time1,time0 = new Date();\n w.subWikifyUnterm(out);\n if(tiddler&& config.options.chkDisplayInstrumentation) {\n time1 = new Date();\n var t = tiddler ? tiddler.title : source.substr(0,10);\n displayMessage("Wikify '"+t+"' in " + (time1-time0) + " ms");\n }\n }\n};\n\nsocialtextFormatter = {}; // "namespace" for local functions\n\nstDebug = function(out,str)\n{\n createTiddlyText(out,str.replace(/\sn/mg,"\s\sn").replace(/\sr/mg,"RR"));\n createTiddlyElement(out,"br");\n};\n\nsocialtextFormatter.wafl = function(w)\n{\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var lm2 = lookaheadMatch[2];\n switch(lookaheadMatch[1]) {\n case "image":\n var img = createTiddlyElement(w.output,"img");\n img.src = w.tiddler.title + "/" + lm2;\n createTiddlyText(img,lm2);\n break;\n case "file":\n var s = createTiddlyElement(w.output,"span",null,"nlw_phrase");\n var a = createTiddlyElement(s,"a");\n a.href = w.tiddler.title + "/" + lm2;\n createTiddlyText(a,lm2);\n break;\n case "link":\n//Test: link to header: <span class="nlw_phrase"><a title="section link" href="#googlesoap">googlesoap</a><!-- wiki: {link: googlesoap} --></span></p>\n s = createTiddlyElement(w.output,"span",null,"nlw_phrase");\n a = createTiddlyElement(s,"a");\n var t = w.tiddler ? w.tiddler.title + ":" : "";\n a.setAttribute("href","#" + t + lm2);\n a.title = "section link";\n createTiddlyText(a,lm2);\n break;\n case "weblog":\n s = createTiddlyElement(w.output,"span",null,"nlw_phrase");\n var text = lm2;\n var link = "Weblog: " + lm2;\n createTiddlyText(createTiddlyLink(s,link,false,null,w.isStatic),text);\n break;\n case "section":\n a = createTiddlyElement(w.output,"a");// drop anchor\n t = w.tiddler ? w.tiddler.title + ":" : "";\n a.setAttribute("name",t + lm2);\n break;\n case "date":\n createTiddlyText(w.output,lm2);\n break;\n case "user":\n var oldSource = w.source;\n w.source = lm2;\n w.nextMatch = 0;\n w.subWikifyUnterm(w.output);\n w.source = oldSource;\n break;\n// Shortcut expansions - not strictly syntax\n case "google":\n//# google: http://www.google.com/search?q=%s\n s = createTiddlyElement(w.output,"span",null,"nlw_phrase");\n a = createExternalLink(s,"http://www.google.com/search?q="+lm2);\n createTiddlyText(a,lm2);\n break;\n case "fedex":\n//# fedex: http://www.fedex.com/Tracking?tracknumbers=%s\n s = createTiddlyElement(w.output,"span",null,"nlw_phrase");\n a = createExternalLink(s,"http://www.fedex.com/Tracking?tracknumbers="+lm2);\n createTiddlyText(a,lm2);\n break;\n case "map":\n//# map: http://maps.google.com/maps?q=%s\n s = createTiddlyElement(w.output,"span",null,"nlw_phrase");\n a = createExternalLink(s,"http://maps.google.com/maps?q="+lm2);\n createTiddlyText(a,lm2);\n break;\n case "wikipedia":\n//# wikipedia: http://en.wikipedia.org/wiki/%s\n s = createTiddlyElement(w.output,"span",null,"nlw_phrase");\n a = createExternalLink(s,"http://en.wikipedia.org/wiki/"+lm2);\n createTiddlyText(a,lm2);\n break;\n case "rt":\n//# rt: http://rt.socialtext.net/Ticket/Display.html?id=%s\n s = createTiddlyElement(w.output,"span",null,"nlw_phrase");\n a = createExternalLink(s,"http://rt.socialtext.net/Ticket/Display.html?id="+lm2);\n createTiddlyText(a,lm2);\n break;\n case "stcal":\n//# stcal: https://calendar.socialtext.net:445/view_t.php?timeb=1&id=3&date=%s\n s = createTiddlyElement(w.output,"span",null,"nlw_phrase");\n a = createExternalLink(s,"https://calendar.socialtext.net:445/view_t.php?timeb=1&id=3&date="+lm2);\n createTiddlyText(a,lm2);\n break;\n case "svn":\n//# svn: https://repo.socialtext.net/listing.php?rev=%s&sc=1\n s = createTiddlyElement(w.output,"span",null,"nlw_phrase");\n a = createExternalLink(s,"https://repo.socialtext.net/listing.php?rev="+lm2+"sc=1");\n createTiddlyText(a,lm2);\n break;\n default:\n w.outputText(w.output,w.matchStart,w.nextMatch);\n return;\n }\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n } else {\n w.outputText(w.output,w.matchStart,w.nextMatch);\n }\n};\n\nsocialtextFormatter.presence = function(w)\n{\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var p = lookaheadMatch[1];\n var text = lookaheadMatch[2];\n var link;\n var src;\n if(p=="aim") {\n link = "aim:goim?screenname=" + text + "&message=hello";\n src = "http://big.oscar.aol.com/sleepleft?on_url=http://www.aim.com/remote/gr/MNB_online.gif&off_url=http://www.aim.com/remote/gr/MNB_offline.gif";\n } else if(p=="yahoo"||p=="ymsgr") {\n link = "ymsgr:sendIM?"+text;\n src = "http://opi.yahoo.com/online?u=chrislondonbridge&f=.gif";\n } else if(p=="skype"||p=="callto") {\n link = "callto:"+text;\n src = "http://goodies.skype.com/graphics/skypeme_btn_small_green.gif";\n } else if(p=="asap") {\n link = "http://asap2.convoq.com/AsapLinks/Meet.aspx?l="+text;\n src = "http://asap2.convoq.com/AsapLinks/Presence.aspx?l="+text;\n }\n var s = createTiddlyElement(w.output,"span",null,"nlw_phrase");\n var a = createExternalLink(s,link);\n var img = createTiddlyElement(a,"img");\n createTiddlyText(a,text);\n img.src = src;\n img.border="0";\n img.alt = "(" + lookaheadMatch[1] + ")";\n if(p=="aim") {\n img.width="11"; img.height="13";\n }\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n};\n\nconfig.formatterHelpers.singleCharFormat = function(w)\n{\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[0].substr(lookaheadMatch[0].length-2,1) != " ") {\n w.subWikifyTerm(createTiddlyElement(w.output,this.element),this.termRegExp);\n } else {\n w.outputText(w.output,w.matchStart,w.nextMatch);\n }\n};\n\nconfig.socialTextFormatters = [\n{\n name: "socialtextHeading",\n match: "^\s\s^{1,6} ?",\n termRegExp: /(\sn+)/mg,\n handler: function(w)\n {\n var len = w.matchText.trim().length;\n var e = createTiddlyElement(w.output,"h" + len);\n var a = createTiddlyElement(e,"a");// drop anchor\n var t = w.tiddler ? w.tiddler.title + ":" : "";\n len = w.source.substr(w.nextMatch).indexOf("\sn");\n a.setAttribute("name",t+w.source.substr(w.nextMatch,len));\n w.subWikifyTerm(e,this.termRegExp);\n }\n},\n\n{\n name: "socialtextTable",\n match: "^\s\s|(?:(?:.|\sn)*)\s\s|$",\n lookaheadRegExp: /^\s|(?:(?:.|\sn)*)\s|$/mg,\n cellRegExp: /(?:\s|(?:[^\s|]*)\s|)(\sn|$)?/mg,\n cellTermRegExp: /((?:\sx20*)\s|)/mg,\n handler: function(w)\n {\n var table = createTiddlyElement(w.output,"table");\n var rowContainer = createTiddlyElement(table,"tbody");\n var prevColumns = [];\n w.nextMatch = w.matchStart;\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n while(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {\n var r = this.rowHandler(w,createTiddlyElement(rowContainer,"tr"),prevColumns);\n if(!r) {\n w.nextMatch++;\n break;\n }\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n }\n },\n rowHandler: function(w,e,prevColumns)\n {\n this.cellRegExp.lastIndex = w.nextMatch;\n var cellMatch = this.cellRegExp.exec(w.source);\n while(cellMatch && cellMatch.index == w.nextMatch) {\n w.nextMatch++;\n var cell = createTiddlyElement(e,"td");\n w.subWikifyTerm(cell,this.cellTermRegExp);\n if(cellMatch[1]) {\n // End of row\n w.nextMatch = this.cellRegExp.lastIndex;\n return true;\n }\n // Cell\n w.nextMatch--;\n this.cellRegExp.lastIndex = w.nextMatch;\n cellMatch = this.cellRegExp.exec(w.source);\n }\n return false;\n }\n},\n\n{\n name: "socialtextList",\n match: "^[\s\s*#]+ ",\n lookaheadRegExp: /^([\s*#])+ /mg,\n termRegExp: /(\sn+)/mg,\n handler: function(w)\n {\n var stack = [w.output];\n var currLevel = 0, currType = null;\n var itemType = "li";\n w.nextMatch = w.matchStart;\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n while(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {\n var listType = lookaheadMatch[1] == "*" ? "ul" : "ol";\n var listLevel = lookaheadMatch[0].length;\n w.nextMatch += listLevel;\n if(listLevel > currLevel) {\n for(var i=currLevel; i<listLevel; i++) {\n stack.push(createTiddlyElement(stack[stack.length-1],listType));\n }\n } else if(listLevel < currLevel) {\n for(i=currLevel; i>listLevel; i--) {\n stack.pop();\n }\n } else if(listLevel == currLevel && listType != currType) {\n stack.pop();\n stack.push(createTiddlyElement(stack[stack.length-1],listType));\n }\n currLevel = listLevel;\n currType = listType;\n var e = createTiddlyElement(stack[stack.length-1],itemType);\n w.subWikifyTerm(e,this.termRegExp);\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n }\n }\n},\n\n{\n name: "socialtextQuoteByLine",\n match: "^>+",\n lookaheadRegExp: /^>+/mg,\n termRegExp: /(\sn)/mg,\n element: "blockquote",\n handler: function(w)\n {\n var stack = [w.output];\n var currLevel = 0;\n var newLevel = w.matchLength;\n var i;\n do {\n if(newLevel > currLevel) {\n for(i=currLevel; i<newLevel; i++) {\n stack.push(createTiddlyElement(stack[stack.length-1],this.element));\n }\n } else if(newLevel < currLevel) {\n for(i=currLevel; i>newLevel; i--) {\n stack.pop();\n }\n }\n currLevel = newLevel;\n w.subWikifyTerm(stack[stack.length-1],this.termRegExp);\n createTiddlyElement(stack[stack.length-1],"br");\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n var matched = lookaheadMatch && lookaheadMatch.index == w.nextMatch;\n if(matched) {\n newLevel = lookaheadMatch[0].length;\n w.nextMatch += newLevel;\n }\n } while(matched);\n }\n},\n\n{\n name: "socialtextRule",\n match: "^----+$\s\sn+",\n handler: function(w)\n {\n createTiddlyElement(w.output,"hr");\n }\n},\n\n{\n name: "socialtextPreformatted",\n match: "^\s\s.pre\s\ss*\s\sn",\n lookaheadRegExp: /^.pre\ss*\sn((?:.|\sn)*?)\sn.pre\ss*\sn/mg,\n element: "pre",\n handler: config.formatterHelpers.enclosedTextHelper\n},\n\n{\n name: "socialtextHtml",\n match: "^\s\s.html",\n lookaheadRegExp: /\s.html((?:.|\sn)*?)\s.html/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n createTiddlyElement(w.output,"span").innerHTML = lookaheadMatch[1];\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "macro",\n match: "<<",\n lookaheadRegExp: /<<([^>\ss]+)(?:\ss*)((?:[^>]|(?:>(?!>)))*)>>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[1]) {\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n invokeMacro(w.output,lookaheadMatch[1],lookaheadMatch[2],w,w.tiddler);\n }\n }\n},\n\n{\n name: "socialtextExplicitLink",\n match: '(?:".*?" ?)?\s\s[',\n lookaheadRegExp: /(?:\s"(.*?)\s" ?)?\s[([^\s]]*?)\s]/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var link = lookaheadMatch[2];\n var text = lookaheadMatch[1] ? lookaheadMatch[1] : link;\n createTiddlyText(createTiddlyLink(w.output,link,false,null,w.isStatic),text);\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "socialtextExternalLink",\n match: '(?:".*?" ?)?<[a-z]{2,8}:',\n lookaheadRegExp: /(?:\s"(.*?)\s" ?)?<([a-z]{2,8}:.*?)>/mg,\n imgRegExp: /\s.(?:gif|ico|jpg|png)/g,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var link = lookaheadMatch[2];\n var text = lookaheadMatch[1] ? lookaheadMatch[1] : link;\n this.imgRegExp.lastIndex = 0;\n if(this.imgRegExp.exec(link)) {\n var img = createTiddlyElement(w.output,"img");\n if(lookaheadMatch[1]) {\n img.title = text;\n }\n img.alt = text;\n img.src = link;\n } else {\n createTiddlyText(createExternalLink(w.output,link),text);\n }\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "socialtextUrlLink",\n match: config.textPrimitives.urlPattern,\n handler: function(w)\n {\n w.outputText(createExternalLink(w.output,w.matchText),w.matchStart,w.nextMatch);\n }\n},\n\n{\n name: "socialtextBold",\n match: "\s\s*(?![\s\ss\s\s*])",\n lookaheadRegExp: /\s*(?!\ss)(?:.*?)(?!\ss)\s*(?=[$\ss\s._\s-])/mg,\n termRegExp: /((?!\ss)\s*(?=[$\ss\s.\s-_]))/mg,\n element: "strong",\n handler: config.formatterHelpers.singleCharFormat\n},\n\n{\n name: "socialtextItalic",\n match: "_(?![\s\ss_])",\n lookaheadRegExp: /_(?!\ss)(?:.*?)(?!\ss)_(?=[$\ss\s.\s*\s-])/mg,\n termRegExp: /((?!\ss)_(?=[$\ss\s.\s*\s-]))/mg,\n element: "em",\n handler: config.formatterHelpers.singleCharFormat\n},\n\n{\n name: "socialtextStrike",\n match: "-(?![\s\ss\s\s-])",\n lookaheadRegExp: /-(?!\ss)(?:.*?)(?!\ss)-(?=[$\ss\s.\s*_])/mg,\n termRegExp: /((?!\ss)-(?=[$\ss\s.\s*_]))/mg,\n element: "del",\n handler: config.formatterHelpers.singleCharFormat\n},\n\n{\n name: "socialtextMonoSpaced",\n match: "`(?![\s\ss`])",\n lookaheadRegExp: /`(?!\ss)(?:.*?)(?!\ss)`(?=[$\ss\s.\s*\s-_])/mg,\n termRegExp: /((?!\ss)`(?=[$\ss\s.\s*\s-_]))/mg,\n element: "tt",\n handler: config.formatterHelpers.singleCharFormat\n},\n\n{\n name: "socialtextParagraph",\n match: "\s\sn{2,}",\n handler: function(w)\n {\n createTiddlyElement(w.output,"p");\n }\n},\n\n{\n name: "socialtextLineBreak",\n match: "\s\sn",\n handler: function(w)\n {\n createTiddlyElement(w.output,"br");\n }\n},\n\n{\n name: "socialtextNoWiki",\n match: "\s\s{\s\s{",\n lookaheadRegExp: /\s{\s{((?:.|\sn)*?)\s}\s}/mg,\n element: "span",\n handler: config.formatterHelpers.enclosedTextHelper\n},\n\n{\n name: "socialtextTrademark",\n match: "\s\s{tm\s\s}",\n handler: function(w)\n {\n createTiddlyElement(w.output,"span").innerHTML = "™";\n }\n},\n\n{\n name: "socialtextWafl",\n match: "\s\s{(?:[a-z]{2,16}): ?.*?\s\s}",\n lookaheadRegExp: /\s{([a-z]{2,16}): ?(.*?)\s}/mg,\n handler: socialtextFormatter.wafl\n},\n\n{\n name: "socialtextPresence",\n match: "(?:aim|yahoo|ymsgr|skype|callto|asap):\s\sw+",\n lookaheadRegExp: /(aim|yahoo|ymsgr|skype|callto|asap):(\sw+)/mg,\n handler: socialtextFormatter.presence\n},\n\n{\n name: "socialtextMailTo",\n match: "[\s\sw\s.]+@[\s\sw]+\s.[\s\sw\s.]+",\n lookaheadRegExp: /([\sw\s.]+@[\sw]+\s.[\sw\s.]+)/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var text = lookaheadMatch[1];\n createTiddlyText(createExternalLink(w.output,"mailto:"+text),text);\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "socialtextHtmlEntitiesEncoding",\n match: "&#?[a-zA-Z0-9]{2,8};",\n handler: function(w)\n {\n createTiddlyElement(w.output,"span").innerHTML = w.matchText;\n }\n}\n];\n\nconfig.parsers.socialTextFormatter = new Formatter(config.socialTextFormatters);\nconfig.parsers.socialTextFormatter.formatTag = "SocialtextFormat";\n} // end of "install only once"\n//}}}\n
/***\nhttp://www.eu.socialtext.net/static/1.10.4.1/css/tasteofblue/screen.css\n\n=head1 Socialtext Style Customization Guide\n\nThis document describes the CSS used to style Socialtext wikis.\n\nThe selectors listed in this document conform to the styles applied by the\ndefault Socialtext look-and-feel. This way your designer is familiar with what\nSocialtext has done to define its style, which is excellent contextual\ninformation.\n\n=head2 Skill Set Required for Customization\n\nAt the time of this writing, it's important to have a member of your staff\nthat is extremely familiar with authoring HTML and CSS. The process for\nstyling works best when these skills are in place.\n\n=head2 Main Element/Content Setup\n\nThe following selectors style major elements of the interface.\n\n***/\n\n/*{{{*/\nbody { /* gets shared with the wikiwyg <body> */\n margin: 0;\n font-family: Tahoma, Helvetica, Verdana, Arial, Sans-Serif;\n font-size: 14px;\n color: #283033;\n}\n* html body {\n font-size: 13px;\n height: 100%;\n}\n\n#nlw-main-body {\n background-color: #f2f6f1;\n}\n* html #nlw-main-body {\n overflow: hidden; /* to cover IE's confusion about the fixed bar */\n}\n\na {\n color: #276181;\n}\n\na:hover {\n text-decoration: underline;\n color: #000;\n}\n\nli, hr, form {\n margin-top: .2em; \n margin-bottom: .2em\n}\n\nhr {\n padding: 0px; \n height: 1px; \n color: #8bd; \n background-color: transparent;\n border: none;\n color: #fff;\n}\n* html hr {\n margin-bottom: 0px !important;\n}\n\nimg.link {\n border: 0; /* this one's the main one */\n margin: 0;\n vertical-align: bottom;\n text-decoration: none; /* for some reason this isn't working */\n}\n\n#workspace-bar a,\n.page-control-bar a,\n#content-attachments a, #content-categories a {\n color: #276181;\n}\n\n#workspace-bar a:hover,\n.page-control-bar a:hover,\n#content-attachments a:hover, #content-categories a:hover {\n text-decoration: underline;\n color: #283033;\n}\n\n/*\n\n=head2 Reference Card\n\nThe reference card is found by clicking on the "Edit Tips" link in the editing\ninterface.\n\n*/\n\n#refcard {\n background-color: white;\n}\n\n#refcard .refcard-table {\n background-color: #ccc;\n margin: 1em;\n clear: both;\n border-spacing: 2px;\n}\n\n#refcard .refcard-table-row {\n background-color: white;\n}\n\n#refcard .refcard-table-row td {\n padding: 1px;\n}\n\n#refcard #refcard-print-button {\n float: right;\n}\n\n/*\n\n=head2 HTML Archive\n\nStyles for the HTML Archive, used when a wiki is exported in static form. For\nexample, when backing up the content of a wiki.\n\n*/\n\n#html-archive {\n background: #fff;\n margin: 0.7em;\n}\n\n#html-archive #html-archive-export-title {\n margin: 0 0 0.1em 0;\n font-size: 1.5em;\n}\n\n/*\n\n=head2 Wikiwyg Styling\n\nThese styles apply to the Wikiwyg Open Source WYSIWYG editing system.\n\n*/\n\n#wikiwyg_wikitext_textarea {\n background: #fff;\n border: 1px solid #276181;\n}\n\n.wikiwyg_toolbar {\n clear: both;\n letter-spacing: 0;\n padding: 3px 0 0 0;\n}\n\n.wikiwyg_control_link a {\n padding-right: 8px;\n}\n\n.wikiwyg_button {\n cursor: pointer;\n background: #D3E9F5;\n width: 20px;\n height: 20px;\n margin-right: 2px;\n border: 1px solid #407fa1;\n vertical-align: bottom;\n}\n\n.wikiwyg_button:hover {\n border: 1px solid #fff;\n}\n\n.wikiwyg_button:active {\n border: 1px solid #fff;\n}\n\n.wikiwyg_separator {\n width: 10px;\n height: 20px;\n margin-right: 2px;\n vertical-align: bottom;\n}\n\n.wikiwyg_selector {\n width: 70px;\n}\n\n.wikiwyg_wysiwyg table {\n border-collapse: collapse;\n margin-bottom: .2em;\n}\n\n.wikiwyg_wysiwyg table td {\n border: 1px;\n border-style: solid;\n padding: .2em;\n vertical-align: top;\n}\n\n\n/*\n\n=head2 EIP Styling\n\nThese styles apply to the older editing system known as "Edit In Place" (EIP).\n\n*/\n\n.toolbar .btn- img {\n width: 20px;\n height: 20px;\n}\n\n.toolbar .btn-, .toolbar .btn-hover, .toolbar .btn-pressed {\n height: 2.5em;\n padding: 1px;\n margin: 5px 0 0 0;\n cursor: pointer;\n}\n\n.toolbar .btn- {\n border: 1px solid #407fa1;\n}\n\n\n/*\n\n=head2 New Form Page\n\nIf your wiki uses a "New Form Page" as a means to collect information and\ncreate a personal page for your users, these styles apply to that form.\n\n*/\n\ntable.new_form_page\n{\n border: 1px solid #353;\n margin-bottom: 1em;\n border-collapse: collapse;\n}\n\ntable.new_form_page tr td\n{\n margin: 0;\n padding: 0.4em;\n color: #353;\n}\n\ntable.new_form_page tr.odd\n{\n background-color: #cec;\n}\n\ntable.new_form_page tr.even\n{\n background-color: white;\n}\n\ntable.new_form_page span.label\n{\n padding-right: 1em;\n}\n\ntable.new_form_page input, table.new_form_page textarea {\n width: 260px;\n text-align: left;\n border: 1px solid #276181; \n}\n\n#new_form_page_error_message_div {\n color: red;\n}\n\n/*\n\n=head2 Fixed Bar\n\nThese styles apply to the fixed navigational bar on the top of the page.\n\nIt's important to remember that the fixed bar must be fixed in place (it\ndoesn't scroll). At this time, there are JavaScript routines that require the\nfixed bar to stay in place.\n\n*/\n\n\n#fixed-bar {\n position: fixed;\n top: 0px;\n left: 0px;\n z-index: 99;\n width: 100%;\n padding: 0;\n}\n* html #fixed-bar {\n position: absolute;\n padding-right: 16px;\n}\n\n#fixed-bar-body {\n background: #363e41 url('back_head.gif') repeat-x bottom left;\n margin: 0px;\n padding: 0 0 10px 0;\n border: none;\n border-bottom: 2px solid #888;\n}\n\n#fixed-bar-body a {\n color: #aaa;\n}\n\n#fixed-bar-body a:hover {\n color: #fff;\n}\n\n#workspace-bar {\n width: 100%;\n}\n\n#workspace-bar-wiki-nav-container {\n\n}\n\n#workspace-bar-wiki-nav-primary {\n background-color: #283033;\n border-bottom: 1px solid #666;\n margin: 0 0 2px 0;\n padding: 5px 20px 2px 40px;\n vertical-align: middle;\n font-size: 1.1em;\n}\n\n#workspace-bar-wiki-nav-secondary {\n margin: 0 20px 0 40px;\n padding: 0 0 8px 0;\n font-size: 0.9em;\n}\n\n#workspace-bar-wiki-nav-secondary-label {\n color: #666;\n}\n\n.workspace-bar-link-separator {\n width: 0px;\n margin: 0px;\n padding: 0px;\n margin-right: 4px;\n}\n\n#workspace-bar-home-link {\n}\n\n#workspace-bar-recentchanges-link {\n}\n\n#workspace-bar-new-page-link {\n}\n\n#workspace-bar-invite-link {\n}\n\n#workspace-bar-people-link {\n}\n\n#workspace-bar-weblogs-link {\n}\n\n#workspace-bar-categories-link {\n}\n\n#workspace-bar-attachments-link {\n}\n\n#st-logo-link {\n margin-right: 10px;\n display: block;\n float: right;\n clear: right;\n}\n\n#st-logo-link:hover {\n background-color: transparent !important;\n}\n\n#st-logo-image {\n\n}\n\n/*\n\n=head3 User Login System\n\nThe User Login System houses links for Logging in and out, Settings, and Help.\nThese styles apply for the login system for various convigurations of wikis.\nFor example, there are links for Self Login and Register based wikis. Most\nwikis are normal Socialtext configurations and require authentication, so some\nof these do not apply.\n\n*/\n\n#workspace-bar-user-login-system {\n color: #666;\n position: absolute;\n top: 6px;\n right: 25px;\n}\n* html #workspace-bar-user-login-system {\n right: 45px;\n}\n\n#logout-link {\n}\n\n#user-welcome-message {\n color: #666;\n}\n\n#user-settings-link {\n}\n\n#user-help-link {\n\n}\n\n#user-invite-self-login-link {\n}\n\n#user-login-link {\n}\n\n.user-login-link {\n}\n\n#user-register-link {\n}\n\n/*\n\n=head3 Fixed bar page controls\n\nStyles for the containers around page-level navigational controls.\n\n*/\n\n#workspace-bar-page-control-container {\n margin: 0 20px 0 40px;\n vertical-align: top;\n}\n\n#workspace-bar-page-control-container .workspace-bar-link {\n text-decoration: underline;\n font-weight: normal;\n}\n\n#workspace-bar-page-control-bounding-box-control {\n display: none;\n height: 0px;\n clear: both;\n}\n\n/*\n\n=head4 Page controls: display\n\nStyles for page-level navigational controls when displaying a page in the\nwiki.\n\n*/\n\n.page-control-bar {\n}\n#page-control-bar a:visited,\n#page-control-bar a:active { color: #283033; }\n\n.page-control-bar .workspace-bar-link {\n text-decoration: underline;\n font-weight: normal;\n}\n\n#page-control-display-bar {\n font-size: 0.9em;\n}\n\n#page-control-edit-requires-login {\n}\n\n.page-control-container {\n\n}\n\n#page-control-display {\n padding: 0 0 5px 0;\n}\n\n#page-control-edit-link {\n background: #283033;\n padding: 2px 5px;\n}\n#page-control-edit-link:hover {\n background-color: #8bd;\n}\n\na.page-control-comment-link,\na.page-control-comment-link:visited,\na.page-control-comment-link:active {\n\n}\n\n.page-control-comment-link {\n font-size: 0.9em;\n}\n\n#page-control-view-history-link {\n}\n\n#page-control-more-actions-dropdown {\n}\n\n#page-control-email-actions-dropdown {\n}\n\n#more-actions-dropdown-menu {\n}\n\n#email-actions-dropdown-menu {\n}\n\n.page-control-actions-item {\n padding: .2em 0 .2em 0;\n}\n\n.page-control-actions-dropdown-menu {\n visibility: hidden;\n display: inline;\n position: absolute;\n top: 5em;\n z-index: 10;\n background: #666;\n min-width: 14em;\n margin-left: 20px;\n margin-top: 5px;\n padding: 8px 8px 8px 8px;\n border: 1px solid #283033;\n font-size: 0.9em;\n color: #fff;\n}\n\n#more-actions-dropdown-menu .page-control-actions-item a {\n color: #eee;\n}\n\n#more-actions-dropdown-menu .page-control-actions-item a:hover {\n color: #283033;\n}\n\n#page-control-printer-friendly-link {\n}\n\n#page-control-duplicate-page-link {\n}\n\n#page-control-delete-page-link {\n}\n\na.page-control-send-page-by-email-link {\n}\n\n#page-control-send-page-to-workspace-link {\n}\n\n#more-actions-dropdown-arrow {\n}\n#email-actions-dropdown-arrow {\n}\n\n#more-actions-dropdown-link {\n}\n\n#email-actions-dropdown-link {\n}\n\n.page-control-actions-dropdown-arrow {\n border: 0;\n}\n\n.page-control-actions-dropdown-arrow-link {\n}\n\n#fixed-bar a.page-control-actions-dropdown-arrow-link:hover {\n background-color: transparent;\n}\n\n\n#page-control-email-in-link {\n}\n\n#page-control-email-to-this-page-link {\n}\n\n#page-control-send-page-by-email-link {\n}\n\n#page-control-edit {\n display: none;\n color: #333;\n}\n\n#page-control-edit-eip {\n display: none;\n color: #333;\n}\n\n#page-control-edit-eip a:visited,\n#page-control-edit-eip a:active {\n\n} \n\n#edit-eip-controls {\n position: relative;\n}\n\n#edit-eip-standard-links {\n float: left;\n}\n\n#edit-eip-save-link {\n background: #ff801f;\n padding: 2px 5px;\n color: #000;\n}\n\n#edit-eip-preview-link {\n background: #8bd;\n padding: 2px 5px;\n}\n\n#edit-eip-cancel-link {\n}\n\n#edit-eip-tips-link {\n margin-left: 15px;\n}\n\n#edit-eip-bounding-box-control {\n height: 0px;\n clear: both;\n}\n\n#page-control-edit-wikiwyg {\n display: none;\n}\n\n#edit-wikiwyg-controls {\n\n}\n\n#edit-wikiwyg-standard-links {\n float: left;\n}\n\n#page-control-edit #edit-wikiwyg-save-link {\n background: #C3E0F0;\n padding: 2px;\n color: #000;\n}\n\n#page-control-edit #edit-wikiwyg-save-link:hover {\n background: #fff;\n}\n\n#edit-wikiwyg-preview-link {\n}\n\n#edit-wikiwyg-cancel-link {\n}\n\n#edit-wikiwyg-mode-links {\n float: left;\n background: #C3E0F0;\n margin-top: 1px;\n margin-left: 25px;\n padding: 1px;\n border: 1px solid #407fa1;\n font-size: 0.9em;\n}\n\n#edit-wikiwyg-mode-label {\n font-size: 0.9em;\n}\n\n#edit-wikiwyg-wysiwyg-link,\n#edit-wikiwyg-wikitext-link {\n padding-left: 6px;\n padding-right: 6px;\n}\n\n#edit-wikiwyg-wikitext-link.workspace-bar-link {\n color: #000;\n}\n\n#edit-wikiwyg-whats-this-link-container {\n float: left;\n padding: 2px;\n padding-top: 0px;\n margin-top: 1px;\n color: #666;\n}\n\n#edit-wikiwyg-whats-this-link {\n color: #666;\n}\n\n#edit-wikiwyg-debug-links {\n float: left;\n margin-left: 25px;\n}\n\n#edit-wikiwyg-html-link {\n}\n\n#edit-wikiwyg-tips-link {\n float: left;\n margin-left: 25px;\n}\n\n#page-control-preview {\n display: none;\n float: left;\n clear: left;\n}\n#page-control-preview a:visited,\n#page-control-preview a:active {\n\n} \n\n\n#preview-eip-controls {\n position: relative;\n}\n\n#preview-eip-save-link {\n}\n\n#preview-eip-edit-more-link {\n}\n\n#preview-eip-cancel-link {\n}\n\n#preview-controls {\n position: relative;\n}\n\n/*\n\n=head4 Page control: changes\n\nPage-level navigational elements while viewing "Recent Changes."\n\n*/\n\n#page-control-changes-bar {\n}\n\n#page-control-changes {\n}\n\n#page-control-show-all-pages-link {\n}\n\n/*\n\n=head4 Page control: revision view\n\nPage-level navigational elements while viewing a page revision.\n\n*/\n\n#page-control-revision-view-bar {\n}\n\n\n#page-control-revision-view {\n}\n\n#page-control-view-current-revision-link {\n}\n\n#page-control-all-revisions-link {\n}\n\n#page-control-revision-view-normal-link {\n}\n\n#page-control-revision-view-source-link {\n}\n\n#page-control-restore-revision-button {\n height: 80%;\n}\n\n/*\n\n=head4 Page control: revision compare\n\nPage-level navigational elements while comparing two revisions of a page.\n\n*/\n\n#page-control-revision-compare-bar {\n}\n\n#page-control-revision-compare {\n}\n\n#page-control-back-to-current-revision-link {\n}\n\n#page-control-view-formatted-link {\n}\n\n#page-control-view-unformatted-link {\n}\n\n/*\n\n=head4 Page control: revision list\n\nPage-level controls for viewing the revision listing of a wiki page.\n\n*/\n\n#page-control-revision-list-bar {\n}\n\n#page-control-revision-list {\n}\n\n/*\n\n=head4 Page control: weblog\n\nPage-level controls for viewing a weblog.\n\n*/\n\n#page-control-weblog-bar {\n\n}\n\n#page-control-weblog-bar .workspace-bar-link {\n\n}\n\n\n#page-control-weblog {\n\n}\n\n#page-control-category-selector {\n}\n\n#page-control-weblog-post-select-controls {\nmargin-right: 14em;\nmargin-top: -1.8em;\ntext-align: right;\n}\n\n/*\n\n=head3 Wikiwyg Message Center\n\nThese styles refer to the Wikiwyg Message Center, used to provide useful tips\nto users while editing pages with Wikiwyg.\n\n*/\n\n#edit-wikiwyg-message-center {\n font-family: sans-serif;\n font-size: 0.9em;\n padding: 2px;\n padding-bottom: 0;\n margin: 1px;\n margin-top: 25px;\n width: 20em;\n position: absolute;\n right: 20px;\n display: none;\n background: #ff9;\n border: #cc0 1px solid;\n}\n* html #edit-wikiwyg-message-center {\n right: 60px;\n}\n\n\n#edit-wikiwyg-message-center-title {\n}\n\n#edit-wikiwyg-message-center-body {\n display: none;\n margin-top: 0.4em;\n}\n\n#edit-wikiwyg-message-center-controls {\n float: right;\n}\n\n#edit-wikiwyg-message-center-controls a:hover {\n background: none;\n}\n\n#edit-wikiwyg-message-center-controls a {\n text-decoration: none;\n color: black;\n font-size: 0.9em;\n padding-left: 2px;\n padding-right: 2px;\n}\n\n#edit-wikiwyg-message-center-arrow {\n}\n\n#edit-wikiwyg-message-center-close {\n}\n\n#edit-wikiwyg-message-center-close-icon {\n border: none;\n}\n\n/*\n\n=head2 Movable Elemenents\n\n=head3 #workspace-title\n\nBy default the workspace title is placed in the sidebar. Support can assist in\nmoving it to the fixed bar. These styles apply in either situation.\n\n*/\n\n#workspace-title {\n display: block;\n padding: 40px 0 5px 0;\n font-size: 1.1em;\n color: #fff;\n}\n\n#workspace-title-prefix {\n display: none;\n}\n\n/*\n\n=head2 Utility Classes\n\nThe following styles are utility classes that are used in a number of\nsituations throughout the wiki.\n\n*/\n\n.error-text, .loading-message {\n color: red;\n}\n\n.status-message {\n font-size: 0.9em;\n color: #ff801f;\n margin: 5px 0 0 0;\n}\n\n#fixed-bar .status-message {\n margin: 5px 20px 0 40px;\n}\n\n.window-button {\n font-size: 0.7em;\n}\n\n.workspace-bar-link {\n text-decoration: none;\n padding: 0px 0px 0px 0px;\n font-size: 0.9em;\n}\n\n.revision-header-emphasis {\n color: #ff801f;\n}\n\n.important-message {\n color: #ff801f;\n}\n\n.error-message {\n color: #ff801f;\n}\n\n.edit-requires-login-label {\n color: red;\n}\n\n.disabled-link {\n color: #666;\n}\n\n.inactive {\n color: #ccc;\n text-decoration: line-through;\n}\n\n.w-st-even-row, .trbg-even {\n background-color: #C3E0F0;\n}\n\n.w-st-odd-row, .trbg-odd {\n}\n\n.standard-button-cancel, .popup .standard-button-cancel {\n background-color: #276181;\n border: 1px solid #ff801f;\n color: #ff801f;\n width: 8em;\n\n}\n\n.standard-button-submit, .popup .standard-button-submit {\n background-color: #276181;\n border: 1px solid #57EC70;\n color: #57EC70;\n width: 8em;\n}\n\n/*\n\n=head2 Error Messages\n\nStyles for specific error messages.\n\n*/\n\n#error-no-javascript {\n}\n\n/*\n\n=head2 Page Containment\n\nThese styles apply to the containers around the page content and sidebar.\n\n*/\n\n#page-container {\n margin: 0px;\n width: auto;\n}\n* html #page-container {\n width: 100%;\n height: 100%;\n overflow: auto;\n}\n\n#page-container-body {\n height: 100%;\n margin: 0px;\n}\n* html #page-container-body {\n margin-top: -2px;\n padding-left: 0px;\n padding-right: 0px;\n}\n\n#page-top-marker {\n}\n\n#page-container-top-control {\n display: none;\n}\n\n#page-center-control-table {\n background: #fff;\n width: 100%;\n padding: 0 15px;\n}\n\n#page-center-control-content-cell {\n background: #bcd2de url('../../images/tasteofblue/back_wide_pale.gif') no-repeat 0 -30px;\n padding: 0;\n vertical-align: top;\n}\n\n.page-center-control-sidebar-cell {\n vertical-align: top;\n width: 16em;\n padding: 8px;\n}\n\n.page-center-control-sidebar-cell img {\n border: 0px;\n}\n\n.page-center-control-sidebar-cell .sidebar-box .wiki p {\n margin: -10px 0 0 0;\n}\n\n#page-center-control-sidebar-left-cell, #page-center-control-sidebar-right-cell {\n background: #83acc2 url('../../images/tasteofblue/back_narrow_dark.gif') no-repeat 100% -30px;\n}\n\n#page-center-control-sidebar-right-cell #sidebar-workspace-logo {\n padding-right: 5px;\n text-align: right;\n}\n\n#page-center-control-sidebar-left-cell #sidebar-workspace-logo {\n margin-left: -10px;\n text-align: left;\n}\n\n#sidebar-workspace-logo-link {\n}\n\n#sidebar-workspace-logo-image {\n\n}\n\n#sidebar-user-welcome-message {\n font-size: 0.7em;\n color: white;\n}\n\n\n.sidebar-box {\n margin-bottom: 3px;\n width: 16em;\n}\n* html .sidebar-box {\n overflow: hidden;\n}\n\n.sidebar-box-header {\n text-align: left;\n padding: 2px 2px 2px 2px;\n color: #fff;\n\n cursor: pointer;\n}\n\n.sidebar-box-content {\n background-color: #a4c8dB;\n padding: 1px 4px 2px 4px;\n border: 1px solid #eff3ef;\n font-size: 0.9em;\n line-height: 150%;\n}\n\n.sidebar-box-content input {\n background-color: #83acc2;\n padding: 2px;\n border: 1px solid #eff3ef;\n color: #fff;\n}\n\n.sidebar-box-content a:visited,\n.sidebar-box-content a:active {\n\n}\n\n\n.sidebar-box-content-open {\n display: block;\n}\n\n.sidebar-box-content-closed {\n display: none;\n}\n\n#box-search-query {\n width: 13em;\n margin-left: .5em;\n margin-right: .5em;\n}\n\n.sidebar-box-content-edit-link {\n text-align: right;\n}\n\n.sidebar-box-content-entry {\n overflow: hidden;\n white-space: nowrap;\n}\n* html .sidebar-box-content-entry {\n width: 100%;\n}\n\n/*\n\n=head2 Product ID\n\nThe product ID exists on the bottom of every page. The following styles apply.\n\n*/\n\n#product-id {\n margin-left: 1%;\n margin-right: 1%;\n padding: 5px;\n}\n\n#product-id-link {\n color: #468;\n text-decoration: none;\n}\n\n\n/*\n\n=head2 Content Section\n\nThese styles apply to the content section of the Socialtext wiki.\n\n*/\n\n#content-display-title,\n#content-preview-title {\n margin-bottom: 20px;\n font-size: 1.5em;\n color: #83acc2;\n}\n\n#content-display-title-prefix {\n}\n\n.content-display-rss-link {\n float: right;\n}\n\n.content-display-rss-link-image {\n margin-top: 5px;\n}\n\n.content-display-watchlist-link {\n display: block;\n text-align: right;\n}\n\n#page-center-control-content {\n border: none;\n min-height: 80%;\n margin: 10px 0 15px 20px;\n padding: 0;\n}\n\n.content-section-hidden {\n display: none;\n}\n\n.content-section-visible {\n display: block;\n}\n\n#content-display-header {\n\n}\n\n#content-edit-header {\n\n}\n\n#content-display-body {\n margin: 15px 20px 15px 0;\n}\n\n#content-edit-body {\n}\n\n#content-edit-title {\n}\n\n#content-edit-title-input {\n margin-bottom: 10px;\n padding: 0 0 0 0;\n border-style: inset;\n border-width: thin;\n font-size: 1.5em;\n background-color: #ffffdd;\n color: black;\n}\n\n#content-preview-title {\n color: #a00;\n}\n\n#content-preview-title:before {\n content: "PREVIEW: ";\n}\n\n#content-display-body, #content-edit-body {\n\n}\n* html #wikipage {\n margin-top: 0px;\n padding-top: 0px !important;\n}\n\n#wikipage h1,\n#wikipage ul,\n#wikipage ol {\n color: #276181;\n}\n\n#wikipage h2,\n#wikipage h3,\n#wikipage h4,\n#wikipage h5,\n#wikipage h6,\n#wikipage p,\n#wikipage blockqoute {\n\n}\n\n#edit-wikiwyg-iframe {\n}\n\n#content-display-body-to-top {\n font-size: 0.7em;\n text-align: right;\n margin-top: 1em;\n}\n\n#content-display-body-to-top-link,\n#content-display-body-to-top-link a:visited,\n#content-display-body-to-top-link a:active {\n\n} \n\n#content-display-body-last-updated {\n font-style: italic;\n text-align: right;\n border-bottom: 1px dashed #fff;\n padding-bottom: 5px;\n color: #407fa1;\n}\n\n#content-edit-body-container {\n border-top: 1px dashed #aaa;\n}\n\n#content-edit-body-textarea {\n padding: 0;\n border-style: inset;\n border-width: 1px;\n background-color: #ffffdd;\n color: black;\n}\n\n#content-categories, #content-attachments, #content-categories {\n margin: 0 20px 0 0;\n text-align: right;\n color: #407fa1;\n}\n\n#content-categories a,\n#content-categories a:visited,\n#content-categories a:active {\n\n} \n\n.content-attributes-list {\n font-size: 0.9em;\n}\n\n#content-categories-editor {\n display: none;\n margin: 10px 0;\n padding: 10px;\n border: 1px solid #fff;\n background-color: #bcd2de;\n}\n\n#content-categories-editor input, #content-categories-editor textarea, #content-categories-editor select {\n background-color: #fff;\n margin-bottom: 5px;\n border: 1px solid #276181;\n color: #283033;\n}\n\n#content-categories-summary {\n display: inline;\n}\n\n.content-categories-summary-category-link {\n}\n\n#content-categories-toggle-button {\n font-style: italic;\n}\n\n#content-categories-editor-listing {\n}\n\n#content-categories-editor-new {\n}\n\n#content-categories-editor-add-new {\n}\n\n#content-attachments a,\n#content-attachments a:visited,\n#content-attacments a:active {\n\n} \n\n\n#content-attachments-summary {\n display: inline;\n}\n\n.content-attachments-summary-attachment-link {\n}\n\n#content-attachments-summary-overflow {\n font-style: italic;\n}\n\n#content-attachments-toggle-button {\n font-style: italic;\n}\n\n#content-attachments-editor {\n display: none;\n margin: 10px 0;\n padding: 5px 10px;\n border: 1px solid #fff;\n background-color: #bcd2de;\n}\n\n#content-attachments-editor input, #content-attachments-editor textarea, #content-attachments-editor select, #content-attachments-editor checkbox, #content-attachments-editor submit {\n background: #fff;\n border: 1px solid #276181;\n}\n\n#content-attachments-editor-new {\n}\n\n#content-attachments-editor-upload {\n}\n\n#content-attachments-upload-warning {\n display: none;\n}\n\n#content-attachments-upload-option-embed {\n}\n\n#content-attachments-upload-option-unpack {\n}\n\n#content-attachments-weblog-return {\n}\n\n#content-attachments-weblog-return-link {\n}\n\n/*\n\n=head2 Sortable Tables\n\nClasses associated to sortable tables, such as on the recent changes, search,\nand category listing pages.\n\n*/\n\n.sortable {\n}\n\n.sortable-header-links {\n}\n\n.sortable-header-links a:visited {\n\n}\n\n.sortable-header {\n}\n\n.sortable-header-link {\n}\n\n.sortable-row-cell {\n}\n\n.sortable-row-cell-link {\n}\n\n/*\n\n=head2 Orphans Listing\n\nStyles for the orphans listing.\n\n*/\n\n#orphans-list {\n}\n\n#orphans-list-entry {\n}\n\n/*\n\n=head2 Formatted Wikitext\n\nStyles dedicated to the wikitext formatting in Socialtext wikis.\n\nUse these styles when changing the look and feel of content.\n\n*/\n\n.wafl_syntax_error {\n color: rgb(200,0,0);\n border-bottom: 0.2em solid rgb(200,0,0);\n}\n\n.wafl_permission_error {\n}\n\n.wafl_existence_error {\n color: rgb(200,0,0);\n border-bottom: 0.2em dashed rgb(200,0,0);\n}\n\n.wiki hr {\n margin-top: .4em;\n margin-bottom: .4em;\n}\n\n.wiki .short-rule {\n width: 25%;\n}\n\n.wiki .medium-rule {\n width: 50%\n}\n\n.wiki ul,\n.wiki ol,\n.wiki blockquote {\n margin-left: 2em;\n padding-left: 0em;\n}\n\n.wiki table {\n border-collapse: collapse;\n}\n\n.wiki td {\n border: 1px;\n border-style: solid;\n padding: .2em;\n vertical-align: top;\n}\n\n.wiki h1,\n.wiki h2, \n.wiki h3,\n.wiki h4,\n.wiki h5,\n.wiki h6 {\n font-style: normal;\n margin-top: 0.4em;\n margin-bottom: 0.2em;\n}\n\n.wiki h1 {font-size: 2em;}\n.wiki h2 {font-size: 1.7em;}\n.wiki h3 {font-size: 1.45em;}\n.wiki h4 {font-size: 1.25em;}\n.wiki h5 {font-size: 1.10em;}\n.wiki h6 {font-size: 1em;}\n\n.wiki pre {\n background-color: #a4c8dB;\n margin-left: 1em;\n margin-right: 1em;\n padding: 0.5em;\n border: 1px solid #fff;\n}\n\n* html .wiki p,\n* html .wiki ul,\n* html .wiki ol,\n* html .wiki table,\n* html .wiki h1,\n* html .wiki h2,\n* html .wiki h3,\n* html .wiki h4,\n* html .wiki h5,\n* html .wiki blockqoute {\n position: relative;\n}\n\n* html .wiki table {\n border-collapse: collapse;\n}\n\n.wiki .incipient {\n text-decoration: none; \n border-bottom: 1px dashed;\n}\n\n.sidebar-box-content .wiki * {\n line-height: 150%;\n white-space: normal;\n}\n\n.formatter_pre {\n font-family: monospace;\n background-color: #eee;\n padding: 2px;\n padding-left: 10px;\n margin-left: 20px;\n margin-right: 20px;\n}\n\n.formatter_table {\n border-collapse: collapse;\n margin-bottom: .2em;\n}\n\n.formatter_table td {\n border: 1px solid black;\n padding: .2em;\n vertical-align: top;\n}\n\n.wafl_error {\n color: #f00;\n text-decoration: underline;\n}\n\n.tt {\n font-family: monospace;\n}\n\n.query_wafl_box {\n clear: both;\n background-color: white;\n font-family: Arial,Helvetica,Verdana,sans-serif;\n margin: 0px;\n width: auto;\n border: none;\n}\n\n.query_wafl_titlebox {\n padding: 0.3em 0.5em 0.3em 0.5em;\n background-color: #eff3ec;\n color: #353;\n}\n\n.query_wafl_titlebox a {\n color: #353;\n}\n\n.query_wafl_title a {\n color: #286aa0;\n font-size: 0.9em;\n}\n\n.query_wafl_title { font-weight: bold; font-size: large; }\n\nul.query_wafl_items {\n margin: 0;\n padding: 0;\n}\n\n.query_wafl_item { margin: 0.1em 0.2em 0.1em 0em; }\n\n.fetchrss_box {\n color: #333;\n clear: both;\n width: 80%;\n margin-top: 5px;\n margin-left: 5px;\n border: 2px solid #cec;\n background-color: white;\n font-family: Arial,Helvetica,Verdana,sans-serif;\n}\n\n.fetchrss_copyright {\n font-size: 0.9em;\n padding: 0.3em 0.5em 0.3em 0.5em;\n background-color: #cec;\n color: #353;\n}\n\n.fetchrss_titlebox {\n padding: 0.3em 0.5em 0.3em 0.5em;\n color: #353;\n background-color: #eff3ef;\n}\n\n.googlesoap_title a,\n.fetchrss_title a {\n color: #286aa0;\n}\n.fetchrss_titlebox a {\n color: #353;\n}\n\n.fetchrss_title { font-weight: bold; font-size: large; }\n\nul.fetchrss_items {\n margin: 0;\n padding: 0;\n}\n\n.fetchrss_item { margin: 0.1em 0.2em 0.1em 0em; }\n\n.fetchrss_description { font-size: 0.9em; margin: 0em 0.4em 0em 0.2em; }\n.googlesoap_box {\n clear: both;\n width: 80%;\n margin-top: 5px;\n margin-left: 5px;\n border: 2px solid #ced;\n background-color: white;\n font-family: Arial,Helvetica,Verdana,sans-serif;\n color: #333;\n}\n\n.googlesoap_titlebox {\n padding: 0.3em 0.5em 0.3em 0.5em;\n color: #353;\n background-color: #eff3ef;\n}\n\n.googlesoap_titlebox a {\n color: #353;\n}\n\n.googlesoap_title { font-weight: bold; font-size: large; }\n\nul.googlesoap_results {\n margin: 0;\n padding: 0;\n}\n\nli.googlesoap_result { margin: 0.1em 0em 0.1em 0em; }\n\n.googlesoap_snippet { font-size: 0.9em; margin: 0em 0.4em 0em 0.2em; }\ndiv.attachment_box_header {\n border: 1px solid #306e87;\n border-bottom-style: none;\n font-size: 0.9em;\n text-align: center;\n color: #fff;\n background-color: #326354;\n padding: 2px 2px 4px 2px;\n margin-top: 3em;\n}\n\n/*\n\n=head3 Included Page Formatted Wikitext\n\nThese styles are for wikipages included inside of other wiki pages.\n\n*/\n\n.wiki .wiki {\n padding: .25em;\n border: none !important;\n}\n* html .wiki .wiki {\n position: relative;\n}\n\n.wiki-include-title {\n color: white;\n background-color: #eff3ec;\n text-align: left;\n}\n\n.wiki-include-title .wiki {\n background-color: transparent;\n border: none;\n}\n\n.wiki-include-title a {\n color: #286aa0;\n}\n\n/*\n\n=head3 Table of Contents Formatted Wikitext\n\nWikitext formatted inside of a table of contents.\n\n*/\n\n.toc {\n padding: 0px;\n margin: 0px;\n position: relative;\n}\n\n.toc .wiki {\n border: none !important;\n}\n\n.toc p {\n color: #286aa0;\n padding: 3px;\n margin: 0px;\n}\n\n/*\n\n=head2 Recent Changes Content \n\nChange these styles to update the look of the recent changes page.\n\n*/\n\n#recent-changes-content {\n}\n* html #recent-changes-content { font-size: 0.9em;}\n\n#recent-changes-header-title {\n text-align: left;\n}\n\n#recent-changes-header-last-edited-by {\n}\n\n#recent-changes-header-date {\n}\n\n#recent-changes-header-revisions {\n}\n\n#recent-changes-content th {\n padding: 2px 5px;\n text-transform: capitalize;\n border: 1px solid #a4c8dB;\n}\n\n#recent-changes-content th a {\n color: #276181;\n}\n\n#recent-changes-content th a:hover {\n text-decoration: underline;\n color: #283033;\n}\n\n#recent-changes-content td {\n padding: 2px 5px;\n border-left: 1px dashed #a4c8dB;\n border-right: 1px dashed #a4c8dB;\n border-bottom: 1px solid #a4c8dB;\n}\n\n#recent-changes-content .w-st-even-row,\n#recent-changes-content .w-st-even-row td {\n background-color: #C3E0F0;\n}\n\n.recent-changes-row {\n}\n\n.recent-changes-row-title {\n}\n\n.recent-chagnes-row-last-edited-by {\n}\n\n.recent-chagnes-row-date {\n}\n\n.recent-changes-row-revisions {\n}\n\n.recent-changes-header-link {\n}\n\n#recent-changes-header-row {\n}\n\n/*\n\n=head2 Query Results Set \n\nThese styles apply to query results tables like recent changes and search results.\n\n*/\n\n.query-results-row {\n}\n\n.query-results-row-title {\n text-align: left;\n}\n\n.query-results-row-last-edited-by {\n text-align: center;\n}\n\n.query-results-row-date {\n}\n\n.query-results-row-revisions {\n text-align: right;\n}\n\n.query-resuls-header-link {\n}\n\n.query-results-header-row {\n}\n\n.query-results-content {\n margin-top: 1em;\n border-collapse: collapse;\n border: 1px solid #ccc;\n}\n\n.query-results-header-title {\n}\n\n.query-results-header-last-edited-by {\n}\n\n.query-results-header-date {\n}\n\n.query-results-header-revisions {\n}\n\n/*\n\n=head2 Weblog Display\n\nThese styles are specific to the weblog display.\n\n*/\n\n.weblog-date {\n font-size: 1.2em;\n color: #276181;\n}\n\n.weblog-posttitle {\n font-size: 1.5em;\n margin: 0.5em 0px 0px 0px;\n color: #276181;\n}\n\n.weblog-post {\n margin: 0px 0px 10px 0px; \n}\n\n.weblog-byline {\n margin-right: 10px;\n padding-bottom: 5px;\n border-top: 1px dotted #407fa1;\n text-align: right;\n font-size: 0.9em;\n color: #276181;\n}\n\n.weblog-byline a:visited,\n.weblog_byline a:active { \n\n} \n\n.weblog-post-links {\n margin-right: 10px;\n margin-bottom: 4em;\n text-align: right;\n font-size: 0.9em;\n}\n\n#page-control-weblog-bar a:hover,\n.weblog-post-links a:hover {\n background-color: #8bd;\n color: white;\n}\n\n/*\n\n=head2 Category Display\n\nChange these styles to update the category display page.\n\n*/\n\n#category-display {\n\n}\n\n#category-display-links {\n margin-bottom: 1em;\n}\n\n.category-display-page-url {\n}\n\n/*\n\n=head2 Revision List Display\n\nChange these styles to update the page revision list.\n\n*/\n\n#revision-list-table {\n width: 100%;\n color: #283033;\n}\n\n.revision-list-compare-button-row {\n}\n\n.revision-list-compare-button-cell {\n text-align: center;\n}\n\n.revision-list-compare-button {\n background: #bcd2de;\n margin: 3px 0;\n border: 1px solid #407fa1;\n color: #276181;\n}\n\n#revision-list-header-row {\n}\n\n#revision-list-header-select {\n}\n\n#revision-list-header-revision {\n}\n\n#revision-list-header-edited-by {\n}\n\n#revision-list-header-date {\n}\n\n.revision-list-row {\n}\n\n.revision-list-row-select {\n text-align: center;\n}\n\n.revision-list-row-select-old {\n}\n\n.revision-list-row-select-new {\n}\n\n.revision-list-row-revision {\n}\n\n.revision-list-row-revision-link {\n}\n\n.revision-list-row-edited-by {\n}\n\n.revision-list-row-date {\n}\n\n/*\n\n=head2 Revision View Display\n\nWhen viewing a page, this style applies.\n\n*/\n\n#source-view {\n}\n\n/*\n\n=head2 Revision Compare Display\n\nWhen comparing two revisions of a page, these styles apply.\n\n*/\n\n#revision-compare-table { \n background-color: #c3e0f0;\n margin: 10px 20px 10px 5px;\n border: 1px solid #276181;\n}\n\n#revision-compare-table td {\n background-color: #c3e0f0;\n padding: 3px;\n border-bottom: 1px solid #fff;\n}\n\n.revision-compare-old {\n background-color: #fdd;\n text-decoration: line-through;\n}\n.revision-compare-new {\n background-color: #dfd;\n}\n\n/*\n\n=head2 Comment UI\n\nThese styles are for the comment interface, which is accessed by clickign "Add\nComment" in the page display interface.\n\n*/\n\n\nbody#comment-ui {\n background: #276181;\n}\n\n#comment-ui-container {\n background: #c3e0f0;\n padding: 10px;\n border: 1px solid #fff;\n}\n\n#comment-ui-container a:visited,\n#comment-ui-container a:active {\n\n} \n\n#comment-ui-note-top {\n}\n\n#comment-ui-controls {\n}\n\n#comment-ui-save-link {\n background-color: #407fa1;\n padding: 3px;\n color: #fff;\n}\n\n#comment-ui-cancel-link {\n}\n\n.comment-ui-custom-field {\n}\n\n.comment-ui-custom-field-label {\n}\n\n.comment-ui-custom-field-input {\n}\n\n#comment-ui-textarea {\n background-color: #fff;\n width: 99%;\n height: 150px;\n padding: 0;\n color: black;\n border: 1px solid #276181;\n}\n\n/*\n\n=head2 Duplicate Page Display\n\nStyles for the duplicate page popup.\n\n*/\n\n#duplicate-page {\n background: #276181;\n color: #407fa1;\n}\n\n#duplicate-page form {\n background: #c3e0f0;\n padding: 10px;\n border: 1px solid #fff;\n color: #283033;\n}\n\n#duplicate-page-buttons {\n margin-top: 1em;\n}\n\n#duplicate-page-page-title {\n}\n\n.duplicate-page-form-element {\n clear: both;\n display: block;\n}\n\n.duplicate-page-form-element input {\n background: #fff;\n padding: 3px;\n border: 1px solid #276181;\n}\n\n/*\n\n=head2 Delete Page\n\nStyles for the content after deleting a page.\n\n*/\n\n#deleted-epilogue {\n}\n\n/*\n\n=head2 Send Page by Email\n\nStyles for the "Send Page by Email" popup, accessed from the "Email" dropdown\nmenu on the page bar.\n\n*/\n\n#email-page {\n}\n\n.email-page-row {\n clear: both;\n}\n\n.email-page-row-label {\n float: left;\n width: 5em;\n margin-left: 1.2em;\n margin-right: 1.2em;\n text-align: right;\n}\n\n.email-page-row-content {\n float: left;\n padding-bottom: 1.2em;\n}\n\n.email-page-user-select-column {\n float: left;\n padding-right: 1.2em;\n width: 14em;\n}\n\n#email-page-user-select-column-center {\n width: 10em;\n}\n\n.email-page-user-select-label {\n text-align: center;\n}\n\n#email-page-user-select-add-label {\n padding-top: 1em;\n}\n\n.email-page-user-select-button-group {\n padding-bottom: 2em;\n}\n\n.email-page-input {\n width: 120px;\n clear: both;\n display: block;\n}\n\n\n.email-page-select {\n width: 175px;\n font-size: 0.9em;\n}\n\n#email-page-error-message {\n text-align: center;\n}\n\n#email-page-buttons-container {\n clear: both;\n}\n\n#email-page-buttons {\n text-align: center;\n}\n\n.email-page-input-new {\n width: 175px;\n}\n/*\n\n=head2 Popup Pages\n\nStyles relating to popup dialogs for the Socialtext wiki.\n\n*/\n\n.popup {\n background: #276181;\n margin: 10px;\n}\n\n.popup form {\n background: #c3e0f0;\n padding: 10px;\n border: 1px solid #fff;\n}\n\n.popup form input, .popup form textarea, .popup form select {\n background: #fff;\n padding: 3px;\n border: 1px solid #276181;\n}\n\n.popup p, .popup ul, .popup ol, .popup li, .popup td, .popup th, .popup hr, .popup blockquote, .popup h1, .popup h2, .popup h3, .popup h4, .popup h5, .popup h6 {\n margin-top: 0em; margin-bottom: 0em;\n}\n\n.popup h1 {}\n.popup h2 {}\n.popup h3 {}\n.popup h4 {}\n.popup h5, .popup h6 {}\n\n/*\n\n=head2 Send Page to Workspace Display\n\nStyles for the "Send Page to Workspace" popup accessed from the "More Actions"\ndropdown menu in the page bar.\n\n*/\n\n#send-to-workspace-page-title {\n}\n\n#send-to-workspace-new-page-title {\n clear: both;\n}\n\n#send-to-workspace-buttons-container {\n padding-top: 1em;\n}\n\n/*\n\n=head2 Search Content\n\nStyles related to search results.\n\n*/\n\n#search-content {\n}\n\n#search-index-update-message {\n}\n\n#search-header-row {\n}\n\n#search-header-title {\n text-align: left;\n}\n\n#search-header-last-edited-by {\n}\n\n#search-header-date {\n}\n\n#search-header-revisions {\n}\n\n.search-header-link {\n}\n\n.search-row {\n}\n\n.search-row-title {\n}\n\n.search-row-last-edited-by {\n}\n\n.search-row-revisions {\n}\n\n.search-attachment-row {\n}\n\n.search-attachment-filename {\n}\n\n.search-attachment-filename-link {\n}\n\n.search-attachment-date {\n}\n\n/*\n\n=head2 Edit Contention\n\nStyles for edit contention.\n\n*/\n\n#edit-contention {\n}\n\n#edit-contention-text {\n}\n\n/*\n\n=head2 Settings Display\n\nStyles for the settings section, accessed from the User Login System.\n\n*/\n\n#settings-pane {\n}\n\n.settings-start-table {\n}\n\n#settings-select {\n padding: 0px 10px 10px 10px;\n vertical-align: top; \n width: 1px;\n\n background-color: #C3E0F0;\n border: none;\n}\n\n#settings-section {\n padding: 0px 10px 10px 10px;\n vertical-align: top; \n}\n\n.settings-top-header {\n margin-top: 1em;\n width: 15em;\n}\n\n.settings-header {\n margin-top: 1em;\n}\n\n.settings-selections {\n padding: 0px 0px 0px 20px;\n line-height: 1.5em;\n}\n\n.settings-selections a:visited, .settings-selections a:active {\n\n}\n\n.settings-link {\n clear: both;\n display: block;\n}\n\n.settings-section-left {\n text-align: right;\n}\n\n.settings-label {\n}\n\n.settings-help {\n color: #888;\n}\n\n.settings-comment {\n}\n\n.users-invite-message {\n padding: 0.5em 0.5em 0.5em 2em;\n background-color: #eee;\n}\n\n.workspace-entry-header {\n margin-top: .5em;\n}\n\n.workspace-entry {\n margin-left: 3em;\n}\n\n.workspace-entry-p {\n margin-top: .5em;\n margin-bottom: .75em;\n}\n\n.workspace-subentry {\n font-style: italic;\n margin-left: 1.5em;\n}\n\n.preferences-td {\n padding:.5em 0 1.5em 0;\n}\n\n.preferences-query {\n text-align: left;\n}\n\n.preference-radio {\n background-color: #cec;\n}\n.user-settings-listall-headings td {\n background-color: #eff3ef;\n}\n\n#settings-save {\n padding-bottom: 0.5em;\n}\n\n/*\n\n=head2 Category Listing\n\nStyles for the category listings display.\n\n*/\n\n#category-list-page-url {\n}\n#category-list-body {\n border-top: 1px dashed #aaa;\n}\n\n/*\n\n=head2 Attachments Listing\n\nStyles for listing all attachments in the wiki.\n\n*/\n\n#attachments-list-body {\n border-top: 1px dashed #aaa;\n}\n\n\n/* Typography */\n\n* {\n font-weight: normal;\n}\n\nstrong, b {\n font-weight: bold;\n}\n\nimg {\n border: 0;\n}\n/*}}}*/
/***\nPlace your custom CSS here\n***/\n/*{{{*/\n[[StyleSheetMB]]\n[[Styles HorizontalMainMenu]]\n/*}}}*/\n
\n\n\n\n/*{{{*/\n\nh1 {font-size: 1.5em;font-variant: small-caps;}\nh2 {font-size: 1.35em;font-variant: small-caps;}\nh3 {font-size: 1.25em;font-variant: small-caps;}\nh4 {font-size: 1.1em;}\nh5 {font-size: 1em;}\n\n/*element,padding,border,margin*/\nh1, h2, h3, h4, h5 {\ncolor:#014;background:transparent;\npadding-left:0;padding-bottom:1px;\nmargin-top:1.2em;margin-bottom:0.3em;margin-left:0em;\n}\n\nh1 {border-bottom:2px solid #ccc;}\nh2, h3 {border-bottom:1px solid #ccc;}\nh4, h5 {border-bottom:0px;margin-top:1em;margin-bottom:0em;}\n\nhr {height:0px;border:0;border-top:1px solid silver;}\n\n.headerShadow {padding:.5em 0em .5em 1em;}\n.headerForeground {padding:.5em 0em .5em 1em;}\n\n.header {background: darkblue;}\n.headerShadow {color: white;}\n\n\n#displayArea { /* The bit that contains all tiddlers */\n/* background-color:#eef;*/\n margin-top:0;margin-right:15.5em;margin-bottom:0;margin-left:12.5em;\n padding-top:.1em;padding-bottom:.1em;\n -moz-border-radius:1em;}\n\n#displayArea .tiddlyLinkExisting {\n text-decoration: underline;\n}\n\n.title { /* Tiddler title */\n color:black;border-bottom:2px solid #ddd;}\n.subtitle { /* Tiddler subtitle */\n font-size:0.9em;text-align:right;border-bottom:1px solid #ddd;}\n.toolbar {padding-top:0px;padding-bottom:0px;color: #04b;}\n.tiddler {/* Tiddler body */\n -moz-border-radius:1em;\n border:1px solid #ccc;\n margin:0.5em;\n background:#fff;\n padding:0.5em;}\n\n.tabContents {white-space: nowrap;}\n\n.viewer pre {padding: 0;margin-left: 0;}\n.viewer hr {border: solid 1px silver;}\n\n/*.toolbar {visibility:visible}*/\n\n.selected .toolbar {visibility:visible;color:#00f;}\n\n.toolbar .button { color:#dee; }\n.selected .toolbar .button { color:#014;}\n\n.tagging, .tagged, .selected .tagging, .selected .tagged {\n font-size:75%; padding:0.3em; background-color:#eee;\n border-top:1px solid #ccc; border-left:1px solid #ccc;\n border-bottom:3px solid #ccc; border-right:3px solid #ccc;\n max-width:45%;-moz-border-radius:1em;}\n\n/*}}}*/
/***\nCopied from: [[tiddlywikitips.com|http://tiddlywikitips.com/#%5B%5BStyles%20HorizontalMainMenu%5D%5D]]\nTo use, add {{{[[Styles HorizontalMainMenu]]}}} to your StyleSheet tiddler.\nYou must also copy the contents of [[PageTemplate HorizontalMenu]] to PageTemplate.\nSee http://www.w3schools.com/css/css_colors.asp for a color chart.\n***/\n/*{{{*/\n.header {background: #330099; }\n#topMenu br {display:none; }\n#topMenu { background: #336699; }\n#topMenu { padding:2px; }\n#topMenu .button, #topMenu .tiddlyLink {\n padding-left:1em; padding-right:1em;\n color:white;\n font-size:115%;}\n\n#displayArea { margin: 1em 15.7em 0em 1em; }\n\n/* just in case want some QuickOpenTags in your topMenu */\n#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }\n#topMenu .quickopentag .tiddlyLink { padding-right:1px; }\n#topMenu .quickopentag .button { padding-left:1px; border:0px; }\n\n@media print { #topMenu {display: none ! important;} }\n/*}}}*/
/***\n|''Name:''|TWikiFormatterPlugin|\n|''Description:''|Allows Tiddlers to use [[TWiki|http://twiki.org/cgi-bin/view/TWiki/TextFormattingRules]] text formatting|\n|''Source:''|http://martinswiki.com/prereleases.html#TWikiFormatterPlugin|\n|''Author:''|Martin Budden (mjbudden (at) gmail (dot) com)|\n|''Version:''|0.2.1|\n|''Status:''|beta release|\n|''Date:''|Nov 5, 2006|\n|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.1.3|\n\n|''Display unsupported TWiki variables''|<<option chkDisplayTWikiVariables>>|\n\nThis the TWikiFormatterPlugin, which allows you to insert TWiki formated text into a TiddlyWiki.\n\nThe aim is not to fully emulate TWiki, but to allow you to create TWiki content off-line and then paste\nthe content into your TWiki later on, with the expectation that only minor edits will be required.\n\nTo use TWiki format in a Tiddler, tag the Tiddler with TWikiFormat. See [[testTwikiFormat]] for an example.\n\nPlease report any defects you find at http://groups.google.co.uk/group/TiddlyWikiDev\n\nThis is a beta release, with (at least) the following known issues:\n# Table code is incomplete.\n## Table headings not yet supported.\n# Anchors not yet supported.\n# TWiki variables not supported\n\n***/\n\n//{{{\n// Ensure that the TWikiFormatter Plugin is only installed once.\nif(!version.extensions.TWikiFormatterPlugin) {\nversion.extensions.TWikiFormatterPlugin = {installed:true};\n\nif(version.major < 2 || (version.major == 2 && version.minor < 1))\n {alertAndThrow("TWikiFormatterPlugin requires TiddlyWiki 2.1 or later.");}\n\nif(config.options.chkDisplayTWikiVariables == undefined)\n {config.options.chkDisplayTWikiVariables = false;}\n\nTWikiFormatter = {}; // "namespace" for local functions\n\ntwDebug = function(out,str)\n{\n createTiddlyText(out,str.replace(/\sn/mg,"\s\sn").replace(/\sr/mg,"RR"));\n createTiddlyElement(out,"br");\n};\n\nTiddler.prototype.escapeLineBreaks = function()\n{\n var r = this.text.escapeLineBreaks();\n if(this.isTagged("TWikiFormat")) {\n //# need to escape space characters because IE collapses multiple spaces into a single space\n r = r.replace(/\sx20\sx20\sx20/mg,"\s\sb \s\sb")\n r = r.replace(/\sx20\sx20/mg,"\s\sb ")\n }\n return r;\n};\n\nconfig.textPrimitives.twikiLink = "(?:" + \n config.textPrimitives.upperLetter + "+" + config.textPrimitives.lowerLetter + "+" +\n config.textPrimitives.upperLetter + config.textPrimitives.anyLetter + "*)";\n\nTWikiFormatter.setAttributesFromParams = function(e,p)\n{\n var re = /\ss*(.*?)=(?:(?:"(.*?)")|(?:'(.*?)')|((?:\sw|%|#)*))/mg;\n var match = re.exec(p);\n while(match) {\n var s = match[1].unDash();\n if(s == "bgcolor") {\n s = "backgroundColor";\n }\n try {\n if(match[2]) {\n e.setAttribute(s,match[2]);\n } else if(match[3]) {\n e.setAttribute(s,match[3]);\n } else {\n e.setAttribute(s,match[4]);\n }\n }\n catch(ex) {}\n match = re.exec(p);\n }\n};\n\nconfig.formatterHelpers.singleCharFormat = function(w)\n//# single character adjacent to the wikitext, eg *bold*\n{\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[0].substr(lookaheadMatch[0].length-2,1) != " ") {\n w.subWikifyTerm(createTiddlyElement(w.output,this.element),this.termRegExp);\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n } else {\n w.outputText(w.output,w.matchStart,w.nextMatch);\n }\n};\n\nconfig.formatterHelpers.doubleCharFormat = function(w)\n{\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n//twDebug(w.output,"dcmt:"+w.matchText);\n//twDebug(w.output,"lm:"+lookaheadMatch);\n//twDebug(w.output,"lm0:"+lookaheadMatch[0]+" lm:"+lookaheadMatch[0].length);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart &&\n lookaheadMatch[0].substr(lookaheadMatch[0].length-3,1) != " ") {\n var e = createTiddlyElement(w.output,this.element);\n w.subWikifyTerm(createTiddlyElement(e,this.element2),this.termRegExp);\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n } else {\n w.outputText(w.output,w.matchStart,w.nextMatch);\n }\n};\n\nconfig.twikiFormatters = [\n{\n name: "twikiTable",\n match: "^\s\s|(?:[^\s\sn]*)\s\s|$",\n lookaheadRegExp: /^\s|([^\sn]*)\s|$/mg,\n rowTermRegExp: /(\s|$\sn?)/mg,\n cellRegExp: /(?:\s|([^\sn\s|]*)\s|)|(\s|$\sn?)/mg,\n cellTermRegExp: /((?:\sx20*)\s|)/mg,\n handler: function(w)\n {\n var table = createTiddlyElement(w.output,"table");\n var rowContainer = createTiddlyElement(table,"tbody");\n var prevColumns = [];\n w.nextMatch = w.matchStart;\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n while(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {\n this.rowHandler(w,createTiddlyElement(rowContainer,"tr"),prevColumns);\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n }\n },\n rowHandler: function(w,e,prevColumns)\n {\n var col = 0;\n var colSpanCount = 1;\n var prevCell = null;\n this.cellRegExp.lastIndex = w.nextMatch;\n var cellMatch = this.cellRegExp.exec(w.source);\n while(cellMatch && cellMatch.index == w.nextMatch) {\n if(cellMatch[1] == "^") {\n // Rowspan\n var last = prevColumns[col];\n if(last) {\n last.rowSpanCount++;\n last.element.setAttribute("rowspan",last.rowSpanCount);\n last.element.setAttribute("rowSpan",last.rowSpanCount); // Needed for IE\n last.element.valign = "center";\n }\n w.nextMatch = this.cellRegExp.lastIndex-1;\n } else if(cellMatch[1] === "") {\n // Colspan\n colSpanCount++;\n w.nextMatch = this.cellRegExp.lastIndex-1;\n } else if(cellMatch[2]) {\n // End of row\n if(prevCell && colSpanCount > 1) {\n prevCell.setAttribute("colspan",colSpanCount);\n prevCell.setAttribute("colSpan",colSpanCount); // Needed for IE\n }\n w.nextMatch = this.cellRegExp.lastIndex;\n break;\n } else {\n // Cell\n w.nextMatch++;\n var spaceLeft = false;\n var chr = w.source.substr(w.nextMatch,1);\n while(chr == " ") {\n spaceLeft = true;\n w.nextMatch++;\n chr = w.source.substr(w.nextMatch,1);\n }\n var cell = createTiddlyElement(e,"td");\n prevCell = cell;\n prevColumns[col] = {rowSpanCount:1, element:cell};\n if(colSpanCount > 1) {\n cell.setAttribute("colspan",colSpanCount);\n cell.setAttribute("colSpan",colSpanCount); // Needed for IE\n colSpanCount = 1;\n }\n \n w.subWikifyTerm(cell,this.cellTermRegExp);\n if(w.matchText.substr(w.matchText.length-2,1) == " ") {\n // spaceRight\n cell.align = spaceLeft ? "center" : "left";\n } else if(spaceLeft) {\n cell.align = "right";\n }\n w.nextMatch--;\n }\n col++;\n this.cellRegExp.lastIndex = w.nextMatch;\n cellMatch = this.cellRegExp.exec(w.source);\n }\n }\n},\n\n{\n name: "twikiRule",\n match: "^---+$\s\sn?",\n handler: function(w)\n {\n createTiddlyElement(w.output,"hr");\n }\n},\n\n{\n//<h1><a name="TWiki_Text_Formatting"></a> TWiki Text Formatting </h1>\n name: "twikiHeading",\n match: "^---[\s\s+#]{0,5}",\n lookaheadRegExp: /^---[\s+#]{0,5}(?:!!)? ?(.*?)\sn/mg,\n termRegExp: /(\sn)/mg,\n handler: function(w)\n {\n var h = createTiddlyElement(w.output,"h" + (w.matchLength-2));\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var a = createTiddlyElement(w.output,"a");\n var prefix = w.tiddler ? w.tiddler.title : "";\n var name = "#"+ prefix + lookaheadMatch[1];\n name = name.replace(/ /g,"_");\n a.name = name;\n w.nextMatch = this.lookaheadRegExp.lastIndex - lookaheadMatch[1].length - 1;\n w.subWikifyTerm(h,this.termRegExp);\n }\n }\n},\n\n{\n name: "twikiAnchor",\n match: "^#" + config.textPrimitives.wikiLink + "\s\ss",\n lookaheadRegExp: /^#(.*?)\ss/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var a = createTiddlyElement(w.output,"a");\n var prefix = w.tiddler ? w.tiddler.title : "";\n var name = "#"+ prefix + lookaheadMatch[1];\n name = name.replace(/ /g,"_");\n a.name = name;\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "twikiDefinitionList",\n match: "^ \s\s$ .+?:.+?\s\sn",\n lookaheadRegExp: /^ \s$ (.+?):(.+?)\sn/mg,\n termRegExp: /(\sn)/mg,\n handler: function(w)\n {\n var li = createTiddlyElement(w.output,"dl");\n w.nextMatch = w.matchStart;\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n while(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {\n w.nextMatch += 5;\n w.subWikifyTerm(createTiddlyElement(li,"dt"),/(:)/mg);\n w.subWikifyTerm(createTiddlyElement(li,"dd"),this.termRegExp);\n lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n }\n }\n},\n\n{\n name: "twikiList",\n match: "^(?: )+(?:(?:\s\s*)|(?:[1AaIi](?:\s\s.)?)) ",\n lookaheadRegExp: /^(?: )+(?:(\s*)|(?:([1AaIi])(\s.)?)) /mg,\n //termRegExp: /(\sn\sn|\sn(?=(?: )+[\s\s*1AaIi]))/mg,\n termRegExp: /(\sn)/mg,\n handler: function(w)\n {\n//twDebug(w.output,"mt:"+w.matchText);\n var stack = [w.output];\n var currLevel = 0;\n var currType = null;\n var listLevel, listType;\n var itemType = "li";\n w.nextMatch = w.matchStart;\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n while(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {\n//twDebug(w.output,"lm0:"+lookaheadMatch[0]);\n listType = "ol";\n listLevel = (lookaheadMatch[0].length-(lookaheadMatch[3]?3:2))/3;\n var style = null;\n if(lookaheadMatch[1]=="*") {\n listType = "ul";\n } else if(lookaheadMatch[2]=="1") {\n style = "decimal";\n } else if(lookaheadMatch[2]=="A") {\n style = "upper-alpha";\n } else if(lookaheadMatch[2]=="a") {\n style = "lower-alpha";\n } else if(lookaheadMatch[2]=="I") {\n style = "upper-roman";\n } else if(lookaheadMatch[2]=="i") {\n style = "lower-roman";\n }\n w.nextMatch += lookaheadMatch[0].length;\n if(listLevel > currLevel) {\n for(var i=currLevel; i<listLevel; i++) {\n stack.push(createTiddlyElement(stack[stack.length-1],listType));\n }\n } else if(listLevel < currLevel) {\n for(i=currLevel; i>listLevel; i--) {\n stack.pop();\n }\n } else if(listLevel == currLevel && listType != currType) {\n stack.pop();\n stack.push(createTiddlyElement(stack[stack.length-1],listType));\n }\n currLevel = listLevel;\n currType = listType;\n var e = createTiddlyElement(stack[stack.length-1],itemType);\n e.style[config.browser.isIE ? "list-style-type" : "listStyleType"] = style;\n w.subWikifyTerm(e,this.termRegExp);\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n }\n }\n},\n\n{\n name: "twikiNoAutoLink",\n match: "^\s\ss*<noautolink>",\n lookaheadRegExp: /\ss*<noautolink>((?:.|\sn)*?)<\s/noautolink>/mg,\n termRegExp: /(<\s/noautolink>)/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var autoLinkWikiWords = w.autoLinkWikiWords;\n w.autoLinkWikiWords = false;\n w.subWikifyTerm(w.output,this.termRegExp);\n w.autoLinkWikiWords = autoLinkWikiWords;\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n } else {\n w.outputText(w.output,w.matchStart,w.nextMatch);\n }\n }\n},\n\n{\n name: "macro",\n match: "<<",\n lookaheadRegExp: /<<([^>\ss]+)(?:\ss*)((?:[^>]|(?:>(?!>)))*)>>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[1]) {\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n invokeMacro(w.output,lookaheadMatch[1],lookaheadMatch[2],w,w.tiddler);\n }\n }\n},\n\n{\n name: "twikiNotExplicitLink",\n match: "!\s\s[\s\s[",\n handler: function(w)\n {\n w.outputText(w.output,w.matchStart+1,w.nextMatch);\n }\n},\n\n//[[WikiWord#NotThere]]\n//[[#MyAnchor][Jump]]\n//<a href="/cgi-bin/view/Sandbox/WebHome#Sandbox_Web_Site_Tools"> Sandbox Web Site Tools </a>\n//<a href="/cgi-bin/view/Sandbox/MeetingMinutes" class="twikiLink">MeetingMinutes</a>\n{\n name: "twikiAnchorLink",\n match: "\s\s[\s\s[(?:"+ config.textPrimitives.twikiLink +")?#",\n lookaheadRegExp: /\s[\s[(.*?)?#(.*?)(?:\s]\s[(.*?))?\s]\s]/mg,\n handler: function(w)\n {\n//twDebug(w.output,"al:"+w.matchText);\n//twDebug(w.output,"lm:"+lookaheadMatch);\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n//twDebug(w.output,"lm0:"+lookaheadMatch[0]);\n var a = createTiddlyElement(w.output,"a");\n var prefix = w.tiddler ? w.tiddler.title : "";\n var href = lookaheadMatch[1] ? lookaheadMatch[1] : "";\n href += "#" + prefix + lookaheadMatch[2];\n href = href.replace(/ /g,"_");\n//twDebug(w.output,"hr:"+href);\n a.href = href;\n a.innerHTML = lookaheadMatch[3] ? lookaheadMatch[3] : lookaheadMatch[2];\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "twikiExplicitLink",\n match: "\s\s[\s\s[",\n lookaheadRegExp: /\s[\s[(.*?)(?:\s]\s[(.*?))?\s]\s]/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var e = null;\n var link = lookaheadMatch[1];\n if (lookaheadMatch[2]) {\n // titled bracketted link\n var text = lookaheadMatch[2];\n e = config.formatterHelpers.isExternalLink(link) ? createExternalLink(w.output,link) : createTiddlyLink(w.output,link,false,null,w.isStatic);\n } else {\n // simple bracketted link\n text = link;\n var s = text.indexOf(" ");\n if(s!=-1) {\n link = text.substring(0,s).trim();\n if(config.formatterHelpers.isExternalLink(link)) {\n e = createExternalLink(w.output,link);\n text = text.substring(s+1).trim();\n } else {\n e = createTiddlyLink(w.output,text,false,null,w.isStatic);\n }\n } else {\n e = createTiddlyLink(w.output,link,false,null,w.isStatic);\n }\n }\n createTiddlyText(e,text);\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "twikiNotWikiLink",\n match: "(?:!|<nop>)" + config.textPrimitives.wikiLink,\n handler: function(w)\n {\n w.outputText(w.output,w.matchStart+(w.matchText.substr(0,1)=="!"?1:5),w.nextMatch);\n }\n},\n\n{\n name: "twikiWikiLink",\n match: config.textPrimitives.twikiLink,\n handler: function(w)\n {\n if(w.matchStart > 0) {\n var preRegExp = new RegExp(config.textPrimitives.anyLetter,"mg");\n preRegExp.lastIndex = w.matchStart-1;\n var preMatch = preRegExp.exec(w.source);\n if(preMatch.index == w.matchStart-1) {\n w.outputText(w.output,w.matchStart,w.nextMatch);\n return;\n }\n }\n if(w.autoLinkWikiWords == true || store.isShadowTiddler(w.matchText)) {\n var link = createTiddlyLink(w.output,w.matchText,false,null,w.isStatic);\n w.outputText(link,w.matchStart,w.nextMatch);\n } else {\n w.outputText(w.output,w.matchStart,w.nextMatch);\n }\n }\n},\n\n{\n name: "twikiUrlLink",\n match: config.textPrimitives.urlPattern,\n handler: function(w)\n {\n w.outputText(createExternalLink(w.output,w.matchText),w.matchStart,w.nextMatch);\n }\n},\n\n{\n name: "twikiBoldByChar",\n match: "\s\s*(?!\s\ss)",\n lookaheadRegExp: /\s*(?!\ss)(?:.*?)(?!\ss)\s*(?=\sW)/mg,\n termRegExp: /((?!\ss)\s*(?=\sW))/mg,\n element: "strong",\n handler: config.formatterHelpers.singleCharFormat\n},\n\n{\n name: "twikiBoldTag",\n match: "<b>",\n termRegExp: /(<\s/b>)/mg,\n element: "b",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "twikiBoldItalicByChar",\n match: "__(?!\s\ss)",\n lookaheadRegExp: /__(?!\ss)(?:.*?)(?!\ss)__(?=\sW)/mg,\n termRegExp: /((?!\ss)__(?=\sW))/mg,\n element: "strong",\n element2: "em",\n handler: config.formatterHelpers.doubleCharFormat\n},\n\n{\n name: "twikiItalicByChar",\n match: "_(?![\s\ss|_])",\n lookaheadRegExp: /_(?!\ss)(?:.*?)(?!\ss)_(?=\sW)/mg,\n termRegExp: /((?!\ss)_(?=\sW))/mg,\n element: "em",\n handler: config.formatterHelpers.singleCharFormat\n},\n\n{\n name: "twikiBoldMonoSpacedByChar",\n match: "==(?!\s\ss)",\n lookaheadRegExp: /==(?!\ss)(?:.*?)(?!\ss)==(?=\sW)/mg,\n termRegExp: /((?!\ss)==(?=\sW))/mg,\n element: "strong",\n element2: "code",\n handler: config.formatterHelpers.doubleCharFormat\n},\n\n{\n name: "twikiMonoSpacedByChar",\n match: "=(?![\s\ss=])",\n lookaheadRegExp: /=(?!\ss)(?:.*?)(?!\ss)=(?!\sw|\s'|\s")/mg,\n termRegExp: /((?!\ss)=(?!\sw|\s'|\s"))/mg,\n element: "code",\n handler: config.formatterHelpers.singleCharFormat\n},\n\n{\n name: "twikiPreByChar",\n match: "<pre>",\n lookaheadRegExp: /<pre>((?:.|\sn)*?)<\s/pre>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n createTiddlyElement(w.output,"pre",null,null,lookaheadMatch[1]);\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "twikiVerbatimByChar",\n match: "<verbatim>",\n lookaheadRegExp: /\s<verbatim>((?:.|\sn)*?)<\s/verbatim>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n createTiddlyElement(w.output,"span",null,null,lookaheadMatch[1]);\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "twikiParagraph",\n match: "\s\sn{2,}",\n handler: function(w)\n {\n createTiddlyElement(w.output,"p");\n }\n},\n\n{\n name: "twikiNop",\n match: "<nop>",\n handler: function(w)\n {\n w.outputText(w.output,w.matchStart+5,w.nextMatch);\n }\n},\n\n{\n name: "twikiExplicitLineBreak",\n match: "%BR%|<br ?/?>",\n handler: function(w)\n {\n createTiddlyElement(w.output,"br");\n }\n},\n\n{\n name: "twikiColorByChar",\n match: "%(?:YELLOW|ORANGE|RED|PINK|PURPLE|TEAL|NAVY|BLUE|AQUA|LIME|GREEN|OLIVE|MAROON|BROWN|BLACK|GRAY|SILVER|WHITE)%",\n lookaheadRegExp: /%(YELLOW|ORANGE|RED|PINK|PURPLE|TEAL|NAVY|BLUE|AQUA|LIME|GREEN|OLIVE|MAROON|BROWN|BLACK|GRAY|SILVER|WHITE)/mg,\n termRegExp: /(%ENDCOLOR%)/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var e = createTiddlyElement(w.output,"span");\n e.style.color = lookaheadMatch[1];\n w.subWikifyTerm(e,this.termRegExp);\n }\n }\n},\n\n{\n name: "twikiVariable",\n match: "(?:!)?%(?:<nop>)?[A-Z]+(?:\s\s{.*?\s\s})?%",\n lookaheadRegExp: /(!)?%(<nop>)?([A-Z]+)(?:\s{(.*?)\s})?%/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n if(lookaheadMatch[1]) {\n // ! - escape variable\n w.outputText(w.output,w.matchStart+1,w.nextMatch);\n } else if(lookaheadMatch[2]) {\n //nop\n var text = w.matchText.replace(/<nop>/g,"");\n createTiddlyText(w.output,text);\n } else {\n // deal with variables by name here\n if(lookaheadMatch[3]=="BB") {\n createTiddlyElement(w.output,"br");\n createTiddlyElement(w.output,"span").innerHTML = "•";\n } else if(config.options.chkDisplayTWikiVariables) {\n // just output the text of any variables that are not understood\n w.outputText(w.output,w.matchStart,w.nextMatch);\n }\n }\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "twikiHtmlEntitiesEncoding",\n match: "&#?[a-zA-Z0-9]{2,8};",\n handler: function(w)\n {\n createTiddlyElement(w.output,"span").innerHTML = w.matchText;\n }\n},\n\n{\n name: "twikiComment",\n match: "<!\s\s-\s\s-",\n lookaheadRegExp: /<!\s-\s-((?:.|\sn)*?)\s-\s->/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "twikiHtmlTag",\n match: "<(?:[a-zA-Z]{2,}|a)(?:\s\ss*(?:[a-z]*?=[\s"']?[^>]*?[\s"']?))*?>",\n lookaheadRegExp: /<([a-zA-Z]+)((?:\ss+[a-z]*?=["']?[^>\s/\s"\s']*?["']?)*?)?\ss*(\s/)?>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var e =createTiddlyElement(w.output,lookaheadMatch[1]);\n if(lookaheadMatch[2]) {\n TWikiFormatter.setAttributesFromParams(e,lookaheadMatch[2]);\n }\n if(lookaheadMatch[3]) {\n w.nextMatch = this.lookaheadRegExp.lastIndex;// empty tag\n } else {\n w.subWikify(e,"</"+lookaheadMatch[1]+">");\n }\n }\n }\n}\n];\n\nconfig.parsers.twikiFormatter = new Formatter(config.twikiFormatters);\nconfig.parsers.twikiFormatter.formatTag = "TWikiFormat";\n} // end of "install only once"\n//}}}\n
|!Markup|!Explanation|\n| {{{|}}} |Column Seperator |\n| {{{!}}} |Heading (Row or Column) |\n| {{{>}}} |Column Span |\n| {{{~}}} |Row Span |\n| {{{|Left |}}} |Left Align |\n| {{{| Right|}}} |Right Align|\n| {{{| Center |}}} |Center Align |\n| {{{|Caption|c}}} |Table Caption (Can be at top or bottom)|\n| {{{|Header|h}}} |Marks the row as being a header row (will be wrapped with a {{{<thead>}}} and so all entries are automatically formatted as per {{{|!}}} cells)|\n| {{{|Footer|f}}} |Marks the row as being a footer row (will be wrapped with a {{{<tfoot>}}}, no special formatting is pre-defined for this but can be added to your own CSS)|\n| {{{|CSSclass|k}}} |Applies a CSS class to the table to allow additional formatting (NB: only works if no whitespace after the k)|\n|>|To have a table with no borders at all. Use {{{|noBorder|k}}} with the CSS (in your StyleSheet tiddler):<<br>>{{{ .noBorder,.noBorder td,.noBorder th,.noBorder tr{border:0} }}}|\n|>|!Sample Table|\n|>|{{{|table caption|c}}}<<br>>{{{|header|header|h}}}<<br>>{{{|text|more text|}}}<<br>>{{{|!heading|!heading|}}}<<br>>{{{|>|colspan|}}}<<br>>{{{|rowspan|left align |}}}<<br>>{{{|~| center |}}}<<br>>{{{|bgcolor(green):green| right|}}}<<br>>{{{|footer|footer|f}}} |\n|>|<<tiddler ./tblShow>>|\n\n!Notes\nYou can use the custom CSS formatter in combination with headers and lists to allow new lines within the entry. e.g.:\n{{{\n#{{block{\nBullet 1\nSome text in the same bullet\n(Note that "block" can be anything, it is the formatters CSS class name)\n }}}\n# Bullet 2 \n}}}\n#{{block{\nBullet 1\nSome text in the same bullet\n}}}\n# Bullet 2 \n\n(Julian Knight, 2006-05-11)\n<part atEg hidden>\n{{{\nThis is before the indented text\n@@display:block;margin-left:2em;This text will be indented...\n...and can even span across several lines...\n\n...or even include blank lines.\n@@This is after the indented text \n}}}\nThis is before the indented text\n@@display:block;margin-left:2em;This text will be indented...\n...and can even span across several lines...\n\n...or even include blank lines.\n@@This is after the indented text \n</part>\n<part tblMarkup hidden>\n{{{\n|table caption|c\n|header|header|h\n|text|more text|\n|!heading|!heading|\n|>|colspan|\n|rowspan|left align |\n|~| center |\n|bgcolor(green):green| right|\n|footer|footer|f\n}}}\n</part>\n<part tblShow hidden>\n|table caption|c\n|header|header|h\n|text|more text|\n|!heading|!heading|\n|>|colspan|\n|rowspan|left align |\n|~| center |\n|bgcolor(green):green| right|\n|footer|footer|f\n</part>
/***\n|''Plugin:''|Tag Cloud Plugin|\n|''Author:''|Clint Checketts|\n|''Source:''|http://checkettsweb.com/styles/themes.htm#TagCloud|\n\n!!Usage\n\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\nif(tags.length == 0)\n createTiddlyElement(tagCloudWrapper,"span",null,null,this.noTags);\n//Findout the maximum number of tags\nvar mostTags = 0;\nfor (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\n//divide the mostTags into 4 segments for the 4 different tagCloud sizes\nvar tagSegment = mostTags/4;\n\nfor (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){\n var tagCloudElement = createTiddlyElement(tagCloudWrapper,"span");\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//}}}
A wiki that stores it data in a single HTML file and requires just JavaScript and a web browser to run.\n\nFor more information visit http://www.tiddlywiki.com/.\n
!!New Journal\nYou can change title of the tiddler produced by //new journal// in the [[SideBar|SideBarOptions]]. The {{{newJournal}}} macro is parameterised, the first parameter is the date format for the tiddler title and the following parameters are tags for the tiddler. So for example changing the entry to:\n{{{<<newJournal 'YYYY-0MM-0DD''journal'>>}}}\nwill create journals with a title of (eg) //2006-06-05// and a tag of //journal//. This is useful, since the journal entries will then be listed in date order under the SideBar //All// tiddlers tag.\n\n!!Todo List\nJim Barr's [[Tip #10|http://tiddlywikitips.com/#%5B%5BTip%20%2310%3A%20Tabbed%20Self-referencing%20Tagged%20To%20Do%20List%20*%5D%5D]] at http://TiddlyWikiTips.com can be combined with Udo Borkowski's PartTiddlerPlugin http://tiddlywiki.abego-software.de/#PartTiddlerPlugin to form a useful Todo List manager. Combining it with Udo's IntelliTaggerPlugin http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin makes it even easier to use. See [[Todo List]] for an example.\n\n!! Horizontal MainMenu\nTo change to a horizontal main menu you need to change the PageTemplate (see [[PageTemplate HorizontalMenu]]) and set the appropriate styles (see [[Styles HorizontalMainMenu]]).\n\n!! Round Corners\nThe [[Styles RoundCorners]] tiddler does //'what it says on the tin'//.\n\n!! Line breaks\nYou can use <br> to force a line break.
<<tabs txtFavourite\nToday "Today" TodoItems/Today\nPriority1 "Priority 1" TodoItems/Priority1\nPriority2 "Priority 2" TodoItems/Priority2\nArea1 "Area1" TodoItems/Area1\nArea2 "Area2" TodoItems/Area2\nCompleted "Completed" TodoItems/Completed\n>>
!!Today\n<part Today><<listTodos Todo Today>></part>\n!!Priority1\n<part Priority1><<listTodos Todo Priority1>></part>\n!!Priority2\n<part Priority2><<listTodos Todo Priority2>></part>\n!!Area1\n<part Area1><<listTodos Todo Area1>></part>\n!!Area2\n<part Area2><<listTodos Todo Area2>></part>\n!!Completed\n<part Completed><<listTags TodoCompleted>></part>\n
/***\n|''Name:''|TodoListPlugin|\n|''Version:''|0.0.1 (2006-05-24)|\n|''Author:''|Martin Budden ( mjbudden [at] gmail [dot] com)|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''TiddlyWiki:''|2.0+|\n***/\n\n/*{{{*/\nconfig.macros.listTodos = {\n todoTag:"Todo",\n todoCompletedTag:"TodoCompleted",\n todoAbandonedTag:"TodoAbandoned",\n todoOnHoldTag:"TodoOnHold"\n};\nconfig.macros.listTodos.handler=function(place,macroName,params,wikifier,paramString,aTiddler)\n{\nvar tag0 = params[0];\nvar tag1 = params[1];\nvar tag2 = params[2];\nvar tag3 = params[3];\nvar results = [];\nvar fn = function(title,tiddler) {\n if(tiddler.isTagged(config.macros.listTodos.todoTag)\n && (!tiddler.isTagged(config.macros.listTodos.todoCompletedTag))\n && (!tiddler.isTagged(config.macros.listTodos.todoAbandonedTag))\n && (!tiddler.isTagged(config.macros.listTodos.todoOnHoldTag))\n && (tag0==null || tiddler.isTagged(tag0))\n && (tag1==null || tiddler.isTagged(tag1))\n && (tag2==null || tiddler.isTagged(tag2))\n && (tag3==null || tiddler.isTagged(tag3))\n )\n results.push(tiddler);\n};\n\n store.forEachTiddler(fn);\n var ul = createTiddlyElement(place,"ul",null,null,"");\n for(var i=0;i<results.length;i++)\n {\n var li = createTiddlyElement(ul,"li",null,null,"");\n createTiddlyLink(li,results[i].title,true);\n }\n}\n/*}}}*/\n/*{{{*/\nconfig.macros.listCompletedTodos = {};\n\nconfig.macros.listCompletedTodos.handler=function(place,macroName,params,wikifier,paramString,aTiddler)\n{\nvar tag1 = params[1];\nvar tag2 = params[2];\nvar tag3 = params[3];\nvar results = [];\nvar fn = function(title,tiddler) {\n if(tiddler.isTagged(config.macros.listTodos.todoTag)\n && tiddler.isTagged(config.macros.listTodos.todoCompletedTag)\n &&(tag1==null || tiddler.isTagged(tag1))\n &&(tag2==null || tiddler.isTagged(tag2))\n &&(tag3==null || tiddler.isTagged(tag3))\n )\n results.push(tiddler);\n};\n\n store.forEachTiddler(fn);\n var ul = createTiddlyElement(place,"ul",null,null,"");\n for(var i=0;i<results.length;i++)\n {\n var li = createTiddlyElement(ul,"li",null,null,"");\n createTiddlyLink(li,results[i].title,true);\n }\n}\n/*}}}*/\n/*{{{*/\nconfig.macros.newTodo = {\nlabel: "new Todo",\nprompt: "new Todo",\ntitle: "New Todo"\n};\n\nconfig.macros.newTodo.handler = function(place,macroName,params)\n{\nif (readOnly) return;\n\nvar title = params[0]==null?config.macros.newTodo.title:params[0];\n//var title = config.macros.newTodo.title;\n//var btn = createTiddlyButton(place,this.label,this.prompt,this.onClick,null,null,this.accessKey);\nvar btn = createTiddlyButton(place,this.label,this.prompt,this.onClick,null,null,null);\nbtn.setAttribute("title",config.macros.newTodo.title);\nbtn.setAttribute("params",params.join("|"));\n}\n\nconfig.macros.newTodo.onClick = function(e)\n{\n//var title = this.getAttribute("title");\nvar title = config.macros.newTodo.title;\nvar params = this.getAttribute("params").split("|");\nstory.displayTiddler(null,title,DEFAULT_EDIT_TEMPLATE);\nfor(var i=1;i<params.length;i++)\n story.setTiddlerTag(title,params[i],+1);\nstory.setTiddlerTag(title,config.macros.listTodos.todoTag,+1);\nstory.focusTiddler(title,"text");\nreturn false;\n}\n/*}}}*/\n
/***\n|''Name:''|TracFormatterPlugin|\n|''Description:''|Allows Tiddlers to use [[Trac|http://trac.edgewall.org/wiki/WikiFormatting]] text formatting|\n|''Source:''|http://martinswiki.com/prereleases.html#TracFormatterPlugin|\n|''Author:''|Martin Budden (mjbudden (at) gmail (dot) com)|\n|''Version:''|0.1.5|\n|''Status:''|alpha pre-release|\n|''Date:''|Aug 12, 2006|\n|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.1.0|\n\nThis is an early release of the TracFormatterPlugin, which allows you to insert Trac formated text into a TiddlyWiki.\n\nThe aim is not to fully emulate Trac, but to allow you to create Trac content off-line and then paste the content\ninto your Trac wiki later on, with the expectation that only minor edits will be required.\n\nTo use Trac format in a Tiddler, tag the Tiddler with TracFormat. See [[testTracFormat]] for an example.\n\nPlease report any defects you find at http://groups.google.co.uk/group/TiddlyWikiDev\n\nThis is an early alpha release, with (at least) the following known issues:\n\n!!!Issues\n# Citations yet not supported.\n\n***/\n\n//{{{\n// Ensure that the TracFormatter Plugin is only installed once.\nif(!version.extensions.TracFormatterPlugin) {\nversion.extensions.TracFormatterPlugin = {installed:true};\n\nif(version.major < 2 || (version.major == 2 && version.minor < 1))\n {alertAndThrow("TracFormatterPlugin requires TiddlyWiki 2.1 or later.");}\n\ntracDebug = function(out,str)\n{\n createTiddlyText(out,str.replace(/\sn/mg,"\s\sn").replace(/\sr/mg,"RR"));\n createTiddlyElement(out,"br");\n};\n\nconfig.tracFormatters = [\n{\n name: "tracHeading",\n match: "^={1,6} ",\n termRegExp: /( ={1,6}.*?$\sn?)/mg,\n handler: function(w)\n {\n w.subWikifyTerm(createTiddlyElement(w.output,"h" + (w.matchLength-1)),this.termRegExp);\n }\n},\n\n{\n name: "tracTable",\n match: "^\s\s|\s\s|(?:[^\s\sn]*)\s\s|\s\s|$",\n lookaheadRegExp: /^\s|\s|([^\sn]*)\s|\s|$/mg,\n rowTermRegExp: /(\s|\s|$\sn?)/mg,\n cellRegExp: /(?:\s|\s|([^\sn]*)\s|\s|)|(\s|\s|$\sn?)/mg,\n cellTermRegExp: /((?:\sx20*)\s|\s|)/mg,\n\n handler: function(w)\n {\n var table = createTiddlyElement(w.output,"table");\n var rowContainer = createTiddlyElement(table,"tbody");\n var rowCount = 0;\n w.nextMatch = w.matchStart;\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n while(lookaheadMatch && lookaheadMatch.index == w.nextMatch)\n {\n this.rowHandler(w,createTiddlyElement(rowContainer,"tr",null,(rowCount&1)?"oddRow":"evenRow"));\n rowCount++;\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n }\n },//# end handler\n rowHandler: function(w,e)\n {\n var col = 0;\n var colSpanCount = 1;\n var prevCell = null;\n this.cellRegExp.lastIndex = w.nextMatch;\n var cellMatch = this.cellRegExp.exec(w.source);\n while(cellMatch && cellMatch.index == w.nextMatch)\n {\n if(w.source.substr(w.nextMatch,4) == "||||")\n {// Colspan\n colSpanCount++;\n w.nextMatch += 2;\n }\n else if(cellMatch[2])\n {// End of row\n if(colSpanCount > 1)\n {\n prevCell.setAttribute("colspan",colSpanCount);\n prevCell.setAttribute("colSpan",colSpanCount); // Needed for IE\n }\n w.nextMatch = this.cellRegExp.lastIndex;\n break;\n }\n else\n {// Cell\n w.nextMatch += 2; //skip over ||\n var chr = w.source.substr(w.nextMatch,1);\n var cell;\n if(chr == "!")\n {\n cell = createTiddlyElement(e,"th");\n w.nextMatch++;\n chr = w.source.substr(w.nextMatch,1);\n }\n else\n {\n cell = createTiddlyElement(e,"td");\n }\n var spaceLeft = false;\n while(chr == " ")\n {\n spaceLeft = true;\n w.nextMatch++;\n chr = w.source.substr(w.nextMatch,1);\n }\n if(colSpanCount > 1)\n {\n cell.setAttribute("colspan",colSpanCount);\n cell.setAttribute("colSpan",colSpanCount); // Needed for IE\n colSpanCount = 1;\n }\n w.subWikifyTerm(cell,this.cellTermRegExp);\n if(w.matchText.substr(w.matchText.length-3,1) == " ")\n {// SpaceRight\n cell.align = spaceLeft ? "center" : "left";\n }\n else if(spaceLeft)\n {\n cell.align = "right";\n }\n prevCell = cell;\n w.nextMatch -= 2;\n }\n col++;\n this.cellRegExp.lastIndex = w.nextMatch;\n cellMatch = this.cellRegExp.exec(w.source);\n }\n }//# end rowHandler\n},\n\n{\n name: "tracDefinitionList",\n match: "^\s\ss+\s\sS+::\s\ss*\s\sn",\n lookaheadRegExp: /^\ss+\sS+::\ss*\sn/mg,\n l2RegExp: /^\ss{2,}\sS+/mg,\n handler: function(w)\n {\n var li = createTiddlyElement(w.output,"dl");\n w.nextMatch = w.matchStart;\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n while(lookaheadMatch && lookaheadMatch.index == w.nextMatch)\n {\n w.subWikifyTerm(createTiddlyElement(li,"dt"),/(::\ss*\sn)/mg);\n var dd = createTiddlyElement(li,"dd");\n this.l2RegExp.lastIndex = w.nextMatch;\n var l2Match = this.l2RegExp.exec(w.source);\n while(l2Match && l2Match.index == w.nextMatch)\n {\n while(w.source.substr(w.nextMatch,1) == " ")\n {//# skip past any leading spaces which would be rendered as blockquote\n w.nextMatch++;\n }\n w.subWikifyTerm(dd,/(\sn)/mg);\n l2Match = this.l2RegExp.exec(w.source);\n if(l2Match)\n {\n createTiddlyText(dd," ");\n }\n }\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n }\n }\n},\n\n{\n name: "tracList",\n match: "^(?: )+(?:(?:\s\s* )|(?:1\s\s. )|(?:a\s\s. )|(?:i\s\s. ))",\n lookaheadRegExp: /^(?: )+(?:(\s* )|(1\s. )|(a\s. )|(i\s. ))/mg,\n termRegExp: /(\sn)/mg,\n handler: function(w)\n {\n var placeStack = [w.output];\n var currLevel = 0, currType = null;\n var listLevel, listType, itemType;\n w.nextMatch = w.matchStart;\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n while(lookaheadMatch && lookaheadMatch.index == w.nextMatch)\n {\n listType = "ol";\n itemType = "li";\n listLevel = (lookaheadMatch[0].length-3)/3;\n var style = null;\n if(lookaheadMatch[1])\n {//*\n listType = "ul";\n listLevel = (lookaheadMatch[0].length-2)/3;\n }\n else if(lookaheadMatch[2])\n {//1.\n style = "decimal";\n }\n else if(lookaheadMatch[3])\n {//a.\n style = "lower-alpha";\n }\n else if(lookaheadMatch[4])\n {//i.\n style = "lower-roman";\n }\n w.nextMatch += lookaheadMatch[0].length;\n if(listLevel > currLevel)\n {\n for(var i=currLevel; i<listLevel; i++)\n {placeStack.push(createTiddlyElement(placeStack[placeStack.length-1],listType));}\n }\n else if(listLevel < currLevel)\n {\n for(i=currLevel; i>listLevel; i--)\n {placeStack.pop();}\n }\n else if(listLevel == currLevel && listType != currType)\n {\n placeStack.pop();\n placeStack.push(createTiddlyElement(placeStack[placeStack.length-1],listType));\n }\n currLevel = listLevel;\n currType = listType;\n var e = createTiddlyElement(placeStack[placeStack.length-1],itemType);\n e.style["list-style-type"] = style;\n w.subWikifyTerm(e,this.termRegExp);\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n }\n }\n},\n\n{\n name: "tracQuoteByLine",\n match: "^ ",\n lookaheadRegExp: /^ /mg,\n termRegExp: /(\sn)/mg,\n element: "blockquote",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "tracRule",\n match: "^---+$\s\sn?",\n handler: function(w)\n {\n createTiddlyElement(w.output,"hr");\n }\n},\n\n// {{{\n// #!html\n// <h1 style="text-align: right; color: blue">HTML Test</h1>\n// }}}\n{\n name: "tracHtml",\n match: "^\s\s{\s\s{\s\s{\sn#!html",\n lookaheadRegExp: /^\s{\s{\s{\sn#!html\sn((?:.|\sn)*?)\s}\s}\s}/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n createTiddlyElement(w.output,"span").innerHTML = lookaheadMatch[1];\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "tracMonospacedByLine",\n match: "^\s\s{\s\s{\s\s{\s\sn",\n lookaheadRegExp: /^\s{\s{\s{\sn((?:^[^\sn]*\sn)+?)(^\s}\s}\s}$\sn?)/mg,\n element: "pre",\n handler: config.formatterHelpers.enclosedTextHelper\n},\n\n{\n name: "macro",\n match: "<<",\n lookaheadRegExp: /<<([^>\ss]+)(?:\ss*)((?:[^>]|(?:>(?!>)))*)>>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[1])\n {\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n invokeMacro(w.output,lookaheadMatch[1],lookaheadMatch[2],w,w.tiddler);\n }\n }\n},\n\n{\n name: "tracExplicitLineBreak",\n match: "\s\s[\s\s[BR\s\s]\s\s]",\n handler: function(w)\n {\n createTiddlyElement(w.output,"br");\n }\n},\n\n{\n name: "tracExplicitLink",\n match: "\s\s[",\n lookaheadRegExp: /\s[([^\ss\s]]*?)(?:(?:\s])|(?:\ss(.*?))\s])/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n var link = lookaheadMatch[1];\n var text = lookaheadMatch[2] ? lookaheadMatch[2] : link;\n var e = config.formatterHelpers.isExternalLink(link) ? createExternalLink(w.output,link) : createTiddlyLink(w.output,link,false,null,w.isStatic);\n createTiddlyText(e,text);\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "tracNotWikiLink",\n match: "!" + config.textPrimitives.wikiLink,\n handler: function(w)\n {\n w.outputText(w.output,w.matchStart+1,w.nextMatch);\n }\n},\n\n{\n name: "tracWikiLink",\n match: config.textPrimitives.wikiLink,\n handler: function(w)\n {\n if(w.matchStart > 0)\n {\n var preRegExp = new RegExp(config.textPrimitives.anyLetter,"mg");\n preRegExp.lastIndex = w.matchStart-1;\n var preMatch = preRegExp.exec(w.source);\n if(preMatch.index == w.matchStart-1)\n {\n w.outputText(w.output,w.matchStart,w.nextMatch);\n return;\n }\n }\n var output = w.output;\n if(w.autoLinkWikiWords == true || store.isShadowTiddler(w.matchText))\n {\n output = createTiddlyLink(w.output,w.matchText,false,null,w.isStatic);\n }\n w.outputText(output,w.matchStart,w.nextMatch);\n }\n},\n\n{\n name: "tracUrlLink",\n match: config.textPrimitives.urlPattern,\n handler: function(w)\n {\n w.outputText(createExternalLink(w.output,w.matchText),w.matchStart,w.nextMatch);\n }\n},\n\n{\n name: "tracBoldByChar",\n match: "'''",\n termRegExp: /(''')/mg,\n element: "strong",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "tracItalicByChar",\n match: "''",\n termRegExp: /('')/mg,\n element: "em",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "tracUnderlineByChar",\n match: "__",\n termRegExp: /(__)/mg,\n element: "u",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "tracStrikeByChar",\n match: "~~",\n termRegExp: /(~~)/mg,\n element: "strike",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "tracSuperscriptByChar",\n match: "\s\s^",\n termRegExp: /(\s^)/mg,\n element: "sup",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "tracSubscriptByChar",\n match: ",,",\n termRegExp: /(,,)/mg,\n element: "sub",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "tracMonospacedByChar0",\n match: "`",\n lookaheadRegExp: /`((?:.|\sn)*?)`/mg,\n element: "code",\n handler: config.formatterHelpers.enclosedTextHelper\n},\n\n{\n name: "tracMonospacedByChar",\n match: "\s\s{\s\s{\s\s{",\n lookaheadRegExp: /\s{\s{\s{((?:.|\sn)*?)\s}\s}\s}/mg,\n element: "code",\n handler: config.formatterHelpers.enclosedTextHelper\n},\n\n{\n name: "tracParagraph",\n match: "\s\sn{2,}",\n handler: function(w)\n {\n createTiddlyElement(w.output,"p");\n }\n},\n\n{\n name: "tracLineBreak",\n match: "\s\sn",\n handler: function(w)\n {\n createTiddlyElement(w.output,"br");\n }\n},\n\n{\n name: "tracHtmlEntitiesEncoding",\n match: "&#?[a-zA-Z0-9]{2,8};",\n handler: function(w)\n {\n createTiddlyElement(w.output,"span").innerHTML = w.matchText;\n }\n}\n\n];\n\nconfig.parsers.tracFormatter = new Formatter(config.tracFormatters);\nconfig.parsers.tracFormatter.formatTag = "TracFormat";\n} // end of "install only once"\n//}}}\n
UploadPlugin with <<tag UploadService>> extend TiddlyWiki with @@upload@@ and @@save to web@@ commands. \n\nSee [[HowToUpload]].\n!!Todo\n*Better UploadLog\n*limit the number of backup files\n\n[[Upload]] is... <<tagging Upload>>
//last update: UploadPlugin v 3.4.1//\n\n!Description\nUploadPlugin with <<tag UploadService>> extend TiddlyWiki with @@upload@@ and @@save to web@@ commands. \nUploadPlugin uses Username and Password from UploadOptions stored in cookies to authenticate itself to [[store.php]] or [[store.cgi]].\nFrench translation available as a separate tiddler UploadPluginMsgFR\n\n!!UploadPlugin\n*If the TiddlyWiki is viewed 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 is viewed from @@website@@ and is @@readOnly@@ (in core TiddlyWiki since 2.0.6) :\n**{{{<<saveChanges>>}}} \n***print nothing\n***has been disabled\n**{{{<<upload>>}}}\n***display as '''save to web''\n***save in the uploadDir directory.\n*If GenerateAnRssFeed in AdvancedOptions is set :\n**generate the content of the RSSFeed \n**upload the RssFile in uploadDir directory\n**Caution : use the SiteUrl tiddler to specify the right url of the TiddlyWiki in the generated RssFile\n*DisplayMessage\n*Log upload action 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*UserVariables to set :\n//{{{\n$AUTHENTICATE_USER = true; // true | false\n$USERS = array(\n 'UserName1'=>'Password1', \n 'UserName2'=>'Password2', \n 'UserName3'=>'Password3'); // set usernames and strong passwords\n$DEBUG = false; // true | false\n//}}}\n*method GET\n**display an information page\n*method POST\n**if $~AUTHENTICATE_USER is ''true''\n***presence and value of user and password are checked with $USER and $PASSWORD \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\n!![[store.cgi]]\n*UserVariables to set :\n//{{{\nCONFIG = {\n :users => {\n 'UserName1'=>'Password1', \n 'UserName2'=>'Password2', \n 'UserName3'=>'Password3')\n },\n :authenticateUser => true,\n :backupExistingFile => true,\n :withUploadDir => true\n}\n//}}}\n*same processing as store.php above\n\n!Usage : \n{{{\n<<upload>>\n uses UploadOptions saved in cookies :\n txtUploadUserName: username\n pasUploadPassword : password\n txtUploadStoreUrl : store script\n txtUploadDir : relative path for upload directory\n txtUploadFilename : upload filename\n txtUploadBackupDir : relative path for backup directory\n\n<<upload [storeUrl [toFilename [backupDir [uploadDir [username]]]]]>>\n Optional positional parameters can be passed to overwrite \n UploadOptions. \n}}}\n\nInstall the {{{<<upload ... >>}}} macro in SideBarOptions just below {{{<<saveChanges>>}}} macro.\n\n\n!User manual\nSee HowToUpload\n\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 server against malicious upload. Two approaches :\n**set $~AUTHENTICATE_USER to true in the [[store.php]] script\n***configure $USER and $PASSWORD in the [[store.php]] script on your webserver\n***set UploadOptions in conformity with [[store.php]]\n**Use server protection :\n***for Apache web server ([[for detail see Apache documentation|http://httpd.apache.org/docs/1.3/howto/htaccess.html]]) : \n****configure and upload the [[.htaccess]] [[.passwd]]\n***for other web servers see the appropriate documentation\n*Configure an upload button, for example in the SideBarOptions\n!Suppported Browser\n*Firefox and Gecko based browser: tested Ok\n*Internet Explorer : tested Ok\n*Safari : tested ok on OS X\n*Others : Not tested, please report status.\n\n!Revision history\n*V 3.4.1 (19/08/2006)\n**Error management improvement\n*V 3.4.0 (25/07/2006)\n**Manage Lock parameters for GroupAuthoring\n**Small code refactoring for new PluginFormat in TW 2.1\n*V 3.3.3 (30/06/2006)\n**reinstall saveChanges Hijacking\n*V 3.3.2 (26/06/2006)\n** make "save to disk" disappear when TiddlyWiki is located on the web\n** small reformatting of post headers for store.cgi compatibility\n*V 3.3.1 (30/03/2006)\n**bug in backup folder when uploading rssfile fixed\n*V 3.3.0 (12/03/2006)\n**Code refactoring\n**suppress saveChanges hijacking\n+++[previous revisions]\n*V3.2.2 (25/02/2006)\n**Use PasswordTweak 1.0.1\n**uploaddir is a relative path\n**backupdir is a relative path\n*V3.2.1 (13/02/2006)\n**name and password added to open.request (Thanks to TedPavlic)\n*V3.2.0 (14/02/2006)\n**Use PassworDTweak (http://tiddlyWiki.bidix.info/#PasswordTweak) for password\n*V3.1.0 (12/02/2006)\n**UploadOptions in Cookies\n**Username and password from UploadOptions pass to store.php script for authentification check\n*V3.0.3 (03/02/2006)\n**Firefox 1.5.0.1 crashes due to global var fixed\n*V3.0.2 (25-Jan-2006)\n**HTTPS compatible\n*V3.0.1 (18-Jan-2006)\n**UTF8toUnicode conversion problem in Firefox\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*V2.0.2 (8-Jan-2006)\n**conversion of SiteTitle and SiteSubtitle in web page Title\n*V2.0.1 (8-Jan-2006)\n**Compatibilty with TiddlyWiki 2.0.1\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*v1.1.0 (27-Dec-2005)\n**Upload RSS File\n*v1.0.3 (26-Dec-2005)\n**UploadLog tiddler\n*v1.0.2 (24-Dec-2005)\n**Optional parameter toFilename\n**Optional parameter backupDir\n*v1.0.1 (23-Dec-2005)\n**reformatting code\n* v1.0.0 (17-Dec-2005)\n** first public working version\n===\n\n
This form upload any file with an UploadService describe in [[Upload]]\n----\n<html><center>\n<form enctype="multipart/form-data" action="store.cgi" method="post" target="_blank">\n <input type="hidden" name="MAX_FILE_SIZE" value="3000000" />\nThis file : <input name="userfile" type="file" /><p>\nOptions* : <input type="text" name="UploadPlugin" size=70 value="backupDir=BACKUP_DIR;user=UPLOAD_USER;password=UPLOAD_PASSWORD;" /><p>\n <input type="submit" value="Upload" />\n</form></center>\n</html>\n----\n * Substitute BACKUP_DIR, UPLOAD_USER and UPLOAD_PASSWORD with your values. See UploadPlugin for option details. \nFor security reason, don't save your password in a tiddler.
!Options used by UploadPlugin\nUsername: <<option txtUploadUserName>>\nPassword: <<option pasUploadPassword>>\n\nUrl of the UploadService script^^(1)^^: <<option txtUploadStoreUrl 50>>\nRelative Directory where to store the file^^(2)^^: <<option txtUploadDir 50>>\nFilename of the uploaded file^^(3)^^: <<option txtUploadFilename 40>>\nDirectory to backup file on webserver^^(4)^^: <<option txtUploadBackupDir>>\n\n^^(1)^^Mandatory either in UploadOptions or in macro parameter\n^^(2)^^If empty stores in the script directory\n^^(3)^^If empty takes the actual filename\n^^(4)^^If empty existing file with same name on webserver will be overwritten\n\n<<upload>> with these options.\n\n!Upload Macro parameters\n{{{\n<<upload [storeUrl [toFilename [backupDir [uploadDir [username]]]]]>>\n Optional positional parameters can be passed to overwrite \n UploadOptions. \n}}}\n\n
/***\n|''Name:''|UploadPlugin|\n|''Description:''|To save to web a TiddlyWiki|\n|''Version:''|3.4.1|\n|''Date:''|Aug 19, 2006|\n|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|\n|''Documentation:''|http://tiddlywiki.bidix.info/#UploadDoc|\n|''Author:''|BidiX (BidiX (at) bidix (dot) info)|\n|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|\n|''~CoreVersion:''|2.0.0|\n|''Browser:''|Firefox 1.5; InternetExplorer 6.0; Safari|\n|''Include:''|config.lib.file; config.lib.log; config.lib.options; PasswordTweak|\n|''Require:''|[[UploadService|http://tiddlywiki.bidix.info/#UploadService]]|\n***/\n//{{{\nversion.extensions.UploadPlugin = {\n major: 3, minor: 4, revision: 1, \n date: new Date(2006,7,19),\n source: 'http://tiddlywiki.bidix.info/#UploadPlugin',\n documentation: 'http://tiddlywiki.bidix.info/#UploadDoc',\n author: 'BidiX (BidiX (at) bidix (dot) info',\n license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',\n coreVersion: '2.0.0',\n browser: 'Firefox 1.5; InternetExplorer 6.0; Safari'\n};\n//}}}\n\n////+++!![config.lib.file]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.file) config.lib.file= {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\nconfig.lib.file.dirname = function (filePath) {\n var lastpos;\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};\nconfig.lib.file.basename = function (filePath) {\n var lastpos;\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};\nwindow.basename = function() {return "@@deprecated@@";};\n//}}}\n////===\n\n////+++!![config.lib.log]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.log) config.lib.log= {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\nconfig.lib.Log = function(tiddlerTitle, logHeader) {\n if (version.major < 2)\n this.tiddler = store.tiddlers[tiddlerTitle];\n else\n this.tiddler = store.getTiddler(tiddlerTitle);\n if (!this.tiddler) {\n this.tiddler = new Tiddler();\n this.tiddler.title = tiddlerTitle;\n this.tiddler.text = "| !date | !user | !location |" + logHeader;\n this.tiddler.created = new Date();\n this.tiddler.modifier = config.options.txtUserName;\n this.tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers[tiddlerTitle] = this.tiddler;\n else\n store.addTiddler(this.tiddler);\n }\n return this;\n};\n\nconfig.lib.Log.prototype.newLine = function (line) {\n var now = new Date();\n var newText = "| ";\n newText += now.getDate()+"/"+(now.getMonth()+1)+"/"+now.getFullYear() + " ";\n newText += now.getHours()+":"+now.getMinutes()+":"+now.getSeconds()+" | ";\n newText += config.options.txtUserName + " | ";\n var location = document.location.toString();\n var filename = config.lib.file.basename(location);\n if (!filename) filename = '/';\n newText += "[["+filename+"|"+location + "]] |";\n this.tiddler.text = this.tiddler.text + "\sn" + newText;\n this.addToLine(line);\n};\n\nconfig.lib.Log.prototype.addToLine = function (text) {\n this.tiddler.text = this.tiddler.text + text;\n this.tiddler.modifier = config.options.txtUserName;\n this.tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers[this.tiddler.tittle] = this.tiddler;\n else {\n store.addTiddler(this.tiddler);\n story.refreshTiddler(this.tiddler.title);\n store.notify(this.tiddler.title, true);\n }\n if (version.major < 2)\n store.notifyAll(); \n};\n//}}}\n////===\n\n////+++!![config.lib.options]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.options) config.lib.options = {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\n\nconfig.lib.options.init = function (name, defaultValue) {\n if (!config.options[name]) {\n config.options[name] = defaultValue;\n saveOptionCookie(name);\n }\n};\n//}}}\n////===\n\n////+++!![PasswordTweak]\n\n//{{{\nversion.extensions.PasswordTweak = {\n major: 1, minor: 0, revision: 2, date: new Date(2006,3,11),\n type: 'tweak',\n source: 'http://tiddlywiki.bidix.info/#PasswordTweak'\n};\n//}}}\n/***\n!!config.macros.option\n***/\n//{{{\nconfig.macros.option.passwordCheckboxLabel = "Save this password on this computer";\nconfig.macros.option.passwordType = "password"; // password | text\n\nconfig.macros.option.onChangeOption = function(e)\n{\n var opt = this.getAttribute("option");\n var elementType,valueField;\n if(opt) {\n switch(opt.substr(0,3)) {\n case "txt":\n elementType = "input";\n valueField = "value";\n break;\n case "pas":\n elementType = "input";\n valueField = "value";\n break;\n case "chk":\n elementType = "input";\n valueField = "checked";\n break;\n }\n config.options[opt] = this[valueField];\n saveOptionCookie(opt);\n var nodes = document.getElementsByTagName(elementType);\n for(var t=0; t<nodes.length; t++) {\n var optNode = nodes[t].getAttribute("option");\n if (opt == optNode) \n nodes[t][valueField] = this[valueField];\n }\n }\n return(true);\n};\n\nconfig.macros.option.handler = function(place,macroName,params)\n{\n var opt = params[0];\n var size = 15;\n if (params[1])\n size = params[1];\n if(config.options[opt] === undefined) {\n return;}\n var c;\n switch(opt.substr(0,3)) {\n case "txt":\n c = document.createElement("input");\n c.onkeyup = this.onChangeOption;\n c.setAttribute ("option",opt);\n c.size = size;\n c.value = config.options[opt];\n place.appendChild(c);\n break;\n case "pas":\n // input password\n c = document.createElement ("input");\n c.setAttribute("type",config.macros.option.passwordType);\n c.onkeyup = this.onChangeOption;\n c.setAttribute("option",opt);\n c.size = size;\n c.value = config.options[opt];\n place.appendChild(c);\n // checkbox link with this password "save this password on this computer"\n c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick = this.onChangeOption;\n c.setAttribute("option","chk"+opt);\n place.appendChild(c);\n c.checked = config.options["chk"+opt];\n // text savePasswordCheckboxLabel\n place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));\n break;\n case "chk":\n c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick = this.onChangeOption;\n c.setAttribute("option",opt);\n place.appendChild(c);\n c.checked = config.options[opt];\n break;\n }\n};\n//}}}\n/***\n!! Option cookie stuff\n***/\n//{{{\nwindow.loadOptionsCookie_orig_PasswordTweak = window.loadOptionsCookie;\nwindow.loadOptionsCookie = function()\n{\n var cookies = document.cookie.split(";");\n for(var c=0; c<cookies.length; c++) {\n var p = cookies[c].indexOf("=");\n if(p != -1) {\n var name = cookies[c].substr(0,p).trim();\n var value = cookies[c].substr(p+1).trim();\n switch(name.substr(0,3)) {\n case "txt":\n config.options[name] = unescape(value);\n break;\n case "pas":\n config.options[name] = unescape(value);\n break;\n case "chk":\n config.options[name] = value == "true";\n break;\n }\n }\n }\n};\n\nwindow.saveOptionCookie_orig_PasswordTweak = window.saveOptionCookie;\nwindow.saveOptionCookie = function(name)\n{\n var c = name + "=";\n switch(name.substr(0,3)) {\n case "txt":\n c += escape(config.options[name].toString());\n break;\n case "chk":\n c += config.options[name] ? "true" : "false";\n // is there an option link with this chk ?\n if (config.options[name.substr(3)]) {\n saveOptionCookie(name.substr(3));\n }\n break;\n case "pas":\n if (config.options["chk"+name]) {\n c += escape(config.options[name].toString());\n } else {\n c += "";\n }\n break;\n }\n c += "; expires=Fri, 1 Jan 2038 12:00:00 UTC; path=/";\n document.cookie = c;\n};\n//}}}\n/***\n!! Initializations\n***/\n//{{{\n// define config.options.pasPassword\nif (!config.options.pasPassword) {\n config.options.pasPassword = 'defaultPassword';\n window.saveOptionCookie('pasPassword');\n}\n// since loadCookies is first called befor password definition\n// we need to reload cookies\nwindow.loadOptionsCookie();\n//}}}\n////===\n\n////+++!![config.macros.upload]\n\n//{{{\nconfig.macros.upload = {\n accessKey: "U",\n formName: "UploadPlugin",\n contentType: "text/html;charset=UTF-8",\n defaultStoreScript: "store.php"\n};\n\n// only this two configs need to be translated\nconfig.macros.upload.messages = {\n aboutToUpload: "About to upload TiddlyWiki to %0",\n crossDomain: "Certainly a cross-domain isue: access to an other site isn't allowed",\n errorDownloading: "Error downloading",\n errorUploadingContent: "Error uploading content",\n fileLocked: "Files is locked: You are not allowed to Upload",\n fileNotFound: "file to upload not found",\n fileNotUploaded: "File %0 NOT uploaded",\n mainFileUploaded: "Main TiddlyWiki file uploaded to %0",\n urlParamMissing: "url param missing",\n rssFileNotUploaded: "RssFile %0 NOT uploaded",\n rssFileUploaded: "Rss File uploaded to %0"\n};\n\nconfig.macros.upload.label = {\n promptOption: "Save and Upload this TiddlyWiki with UploadOptions",\n promptParamMacro: "Save and Upload this TiddlyWiki in %0",\n saveLabel: "save to web", \n saveToDisk: "save to disk",\n uploadLabel: "upload" \n};\n\nconfig.macros.upload.handler = function(place,macroName,params){\n // parameters initialization\n var storeUrl = params[0];\n var toFilename = params[1];\n var backupDir = params[2];\n var uploadDir = params[3];\n var username = params[4];\n var password; // for security reason no password as macro parameter\n var label;\n if (document.location.toString().substr(0,4) == "http")\n label = this.label.saveLabel;\n else\n label = this.label.uploadLabel;\n var prompt;\n if (storeUrl) {\n prompt = this.label.promptParamMacro.toString().format([this.dirname(storeUrl)]);\n }\n else {\n prompt = this.label.promptOption;\n }\n createTiddlyButton(place, label, prompt, \n function () {\n config.macros.upload.upload(storeUrl, toFilename, uploadDir, backupDir, username, password); \n return false;}, \n null, null, this.accessKey);\n};\nconfig.macros.upload.UploadLog = function() {\n return new config.lib.Log('UploadLog', " !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |" );\n};\nconfig.macros.upload.UploadLog.prototype = config.lib.Log.prototype;\nconfig.macros.upload.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir, backupDir) {\n var line = " [[" + config.lib.file.basename(storeUrl) + "|" + storeUrl + "]] | ";\n line += uploadDir + " | " + toFilename + " | " + backupDir + " |";\n this.newLine(line);\n};\nconfig.macros.upload.UploadLog.prototype.endUpload = function() {\n this.addToLine(" Ok |");\n};\nconfig.macros.upload.basename = config.lib.file.basename;\nconfig.macros.upload.dirname = config.lib.file.dirname;\nconfig.macros.upload.upload = function(storeUrl, toFilename, uploadDir, backupDir, username, password)\n{\n // parameters initialization\n storeUrl = (storeUrl ? storeUrl : config.options.txtUploadStoreUrl);\n toFilename = (toFilename ? toFilename : config.options.txtUploadFilename);\n backupDir = (backupDir ? backupDir : config.options.txtUploadBackupDir);\n uploadDir = (uploadDir ? uploadDir : config.options.txtUploadDir);\n username = (username ? username : config.options.txtUploadUserName);\n password = config.options.pasUploadPassword; // for security reason no password as macro parameter\n if (storeUrl === '') {\n storeUrl = config.macros.upload.defaultStoreScript;\n }\n if (config.lib.file.dirname(storeUrl) === '') {\n storeUrl = config.lib.file.dirname(document.location.toString())+'/'+storeUrl;\n }\n if (toFilename === '') {\n toFilename = config.lib.file.basename(document.location.toString());\n }\n\n clearMessage();\n // only for forcing the message to display\n if (version.major < 2)\n store.notifyAll();\n if (!storeUrl) {\n alert(config.macros.upload.messages.urlParamMissing);\n return;\n }\n // Check that file is not locked\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n if (BidiX.GroupAuthoring.lock.isLocked() && !BidiX.GroupAuthoring.lock.isMyLock()) {\n alert(config.macros.upload.messages.fileLocked);\n return;\n }\n }\n \n var log = new this.UploadLog();\n log.startUpload(storeUrl, toFilename, uploadDir, backupDir);\n if (document.location.toString().substr(0,5) == "file:") {\n saveChanges();\n }\n displayMessage(config.macros.upload.messages.aboutToUpload.format([this.dirname(storeUrl)]), this.dirname(storeUrl));\n this.uploadChanges(storeUrl, toFilename, uploadDir, backupDir, username, password);\n if(config.options.chkGenerateAnRssFeed) {\n //var rssContent = convertUnicodeToUTF8(generateRss());\n var rssContent = generateRss();\n var rssPath = toFilename.substr(0,toFilename.lastIndexOf(".")) + ".xml";\n this.uploadContent(rssContent, storeUrl, rssPath, uploadDir, '', username, password, \n function (responseText) {\n if (responseText.substring(0,1) != '0') {\n displayMessage(config.macros.upload.messages.rssFileNotUploaded.format([rssPath]));\n }\n else {\n if (uploadDir) {\n rssPath = uploadDir + "/" + config.macros.upload.basename(rssPath);\n } else {\n rssPath = config.macros.upload.basename(rssPath);\n }\n displayMessage(config.macros.upload.messages.rssFileUploaded.format(\n [config.macros.upload.dirname(storeUrl)+"/"+rssPath]), config.macros.upload.dirname(storeUrl)+"/"+rssPath);\n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n });\n }\n return;\n};\n\nconfig.macros.upload.uploadChanges = function(storeUrl, toFilename, uploadDir, backupDir, \n username, password) {\n var original;\n if (document.location.toString().substr(0,4) == "http") {\n original = this.download(storeUrl, toFilename, uploadDir, backupDir, username, password);\n return;\n }\n else {\n // standard way : Local file\n \n original = loadFile(getLocalPath(document.location.toString()));\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 = "UTF-8";\n original = converter.ConvertToUnicode(original);\n }\n catch(e) {\n }\n }\n }\n //DEBUG alert(original);\n this.uploadChangesFrom(original, storeUrl, toFilename, uploadDir, backupDir, \n username, password);\n};\n\nconfig.macros.upload.uploadChangesFrom = function(original, storeUrl, toFilename, uploadDir, backupDir, \n username, password) {\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 var revised = original.substr(0,posOpeningDiv + startSaveArea.length) + \n allTiddlersAsHtml() + "\sn\st\st" +\n original.substr(posClosingDiv);\n var newSiteTitle;\n if(version.major < 2){\n newSiteTitle = (getElementText("siteTitle") + " - " + getElementText("siteSubtitle")).htmlEncode();\n } else {\n newSiteTitle = (wikifyPlain ("SiteTitle") + " - " + wikifyPlain ("SiteSubtitle")).htmlEncode();\n }\n\n revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");\n revised = revised.replaceChunk("<!--PRE-HEAD-START--"+">","<!--PRE-HEAD-END--"+">","\sn" + store.getTiddlerText("MarkupPreHead","") + "\sn");\n revised = revised.replaceChunk("<!--POST-HEAD-START--"+">","<!--POST-HEAD-END--"+">","\sn" + store.getTiddlerText("MarkupPostHead","") + "\sn");\n revised = revised.replaceChunk("<!--PRE-BODY-START--"+">","<!--PRE-BODY-END--"+">","\sn" + store.getTiddlerText("MarkupPreBody","") + "\sn");\n revised = revised.replaceChunk("<!--POST-BODY-START--"+">","<!--POST-BODY-END--"+">","\sn" + store.getTiddlerText("MarkupPostBody","") + "\sn");\n\n var response = this.uploadContent(revised, storeUrl, toFilename, uploadDir, backupDir, \n username, password, function (responseText) {\n if (responseText.substring(0,1) != '0') {\n alert(responseText);\n displayMessage(config.macros.upload.messages.fileNotUploaded.format([getLocalPath(document.location.toString())]));\n }\n else {\n if (uploadDir !== '') {\n toFilename = uploadDir + "/" + config.macros.upload.basename(toFilename);\n } else {\n toFilename = config.macros.upload.basename(toFilename);\n }\n displayMessage(config.macros.upload.messages.mainFileUploaded.format(\n [config.macros.upload.dirname(storeUrl)+"/"+toFilename]), config.macros.upload.dirname(storeUrl)+"/"+toFilename);\n var log = new config.macros.upload.UploadLog();\n log.endUpload();\n store.setDirty(false);\n // erase local lock\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n BidiX.GroupAuthoring.lock.eraseLock();\n // change mtime with new mtime after upload\n var mtime = responseText.substr(responseText.indexOf("mtime:")+6);\n BidiX.GroupAuthoring.lock.mtime = mtime;\n }\n \n \n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n }\n );\n};\n\nconfig.macros.upload.uploadContent = function(content, storeUrl, toFilename, uploadDir, backupDir, \n username, password, callbackFn) {\n var boundary = "---------------------------"+"AaB03x"; \n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n if (window.netscape){\n try {\n if (document.location.toString().substr(0,4) != "http") {\n netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');}\n }\n catch (e) {}\n } \n //DEBUG alert("user["+config.options.txtUploadUserName+"] password[" + config.options.pasUploadPassword + "]");\n // compose headers data\n var sheader = "";\n sheader += "--" + boundary + "\sr\snContent-disposition: form-data; name=\s"";\n sheader += config.macros.upload.formName +"\s"\sr\sn\sr\sn";\n sheader += "backupDir="+backupDir\n +";user=" + username \n +";password=" + password\n +";uploaddir=" + uploadDir;\n // add lock attributes to sheader\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n var l = BidiX.GroupAuthoring.lock.myLock;\n sheader += ";lockuser=" + l.user\n + ";mtime=" + l.mtime\n + ";locktime=" + l.locktime;\n }\n sheader += ";;\sr\sn"; \n sheader += "\sr\sn" + "--" + boundary + "\sr\sn";\n sheader += "Content-disposition: form-data; name=\s"userfile\s"; filename=\s""+toFilename+"\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", storeUrl, true, username, password);\n try {\n request.open("POST", storeUrl, true); \n }\n catch(e) {\n alert(config.macros.upload.messages.crossDomain + "\snError:" +e);\n exit;\n }\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 + "\snStatus: "+request.status.statusText);\n }\n };\n request.setRequestHeader("Content-Length",data.length);\n request.setRequestHeader("Content-Type","multipart/form-data; boundary="+boundary);\n request.send(data); \n};\n\n\nconfig.macros.upload.download = function(uploadUrl, uploadToFilename, uploadDir, uploadBackupDir, \n username, password) {\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 //request.open("GET", document.location.toString(), true, username, password);\n try {\n request.open("GET", document.location.toString(), true);\n }\n catch(e) {\n alert(config.macros.upload.messages.crossDomain + "\snError:" +e);\n exit;\n }\n \n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if(request.status == 200) {\n config.macros.upload.uploadChangesFrom(request.responseText, uploadUrl, \n uploadToFilename, uploadDir, uploadBackupDir, username, password);\n }\n else\n alert(config.macros.upload.messages.errorDownloading.format(\n [document.location.toString()]) + "\snStatus: "+request.status.statusText);\n }\n };\n request.send(null);\n};\n\n//}}}\n////===\n\n////+++!![Initializations]\n\n//{{{\nconfig.lib.options.init('txtUploadStoreUrl','store.php');\nconfig.lib.options.init('txtUploadFilename','');\nconfig.lib.options.init('txtUploadDir','');\nconfig.lib.options.init('txtUploadBackupDir','');\nconfig.lib.options.init('txtUploadUserName',config.options.txtUserName);\nconfig.lib.options.init('pasUploadPassword','');\nconfig.shadowTiddlers.UploadDoc = "[[Full Documentation|http://tiddlywiki.bidix.info/l#UploadDoc ]]\sn"; \n\n\n//}}}\n////===\n\n////+++!![Core Hijacking]\n\n//{{{\nconfig.macros.saveChanges.label_orig_UploadPlugin = config.macros.saveChanges.label;\nconfig.macros.saveChanges.label = config.macros.upload.label.saveToDisk;\n\nconfig.macros.saveChanges.handler_orig_UploadPlugin = config.macros.saveChanges.handler;\n\nconfig.macros.saveChanges.handler = function(place)\n{\n if ((!readOnly) && (document.location.toString().substr(0,4) != "http"))\n createTiddlyButton(place,this.label,this.prompt,this.onClick,null,null,this.accessKey);\n};\n\n//}}}\n////===\n
/***\n|''Name:''|UploadPluginMsgEN|\n|''Description:''|English Translation|\n|''Date:''|Aug 11, 2006|\n|''Source:''|http://tiddlywiki.bidix.info/#UploadPluginMsgEN|\n|''Author:''|BidiX (BidiX (at) bidix (dot) info) with modifications by YannPerrin|\n|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|\n|''Include:''|none|\n|''Require:''|UploadPlugin 3.4.0|\n***/\n/***\n!Usage : \nFor an english translation of UploadPlugin Message when using PolyGlotPlugin, import this tiddler in the TiddlyWiki. Make sure it is tagged with {{{en}}} and {{{linguo}}}. \nComments and suggestions are welcome.\n***/\n//{{{\nconfig.macros.upload.messages = {\n aboutToUpload: "About to upload TiddlyWiki to %0",\n errorDownloading: "Error downloading",\n errorUploadingContent: "Error uploading content",\n fileLocked: "Files is locked: You are not allowed to Upload",\n fileNotFound: "file to upload not found",\n fileNotUploaded: "File %0 NOT uploaded",\n mainFileUploaded: "Main TiddlyWiki file uploaded to %0",\n urlParamMissing: "url param missing",\n rssFileNotUploaded: "RssFile %0 NOT uploaded",\n rssFileUploaded: "Rss File uploaded to %0"\n};\n\nconfig.macros.upload.label = {\n promptOption: "Save and Upload this TiddlyWiki with UploadOptions",\n promptParamMacro: "Save and Upload this TiddlyWiki in %0",\n saveLabel: "save to web", \n saveToDisk: "save to disk",\n uploadLabel: "upload" \n};\n\nconfig.macros.saveChanges.label = config.macros.upload.label.saveToDisk;\n//}}}\n
<script src="UploadPlugin.js">\nif (config.macros.upload) {\n return "loaded"; \n}\nelse {\nreturn "not loaded";\n}\n</script>
/***\n|''Name:''|UploadToFileMacro|\n|''Description:''|Upload a tiddler as a file using UploadPlugin context. Used with the SimonBaird's RunMacroIfTagged in [[ViewTemplate|BidiXStyleViewTemplate]] provides a new command in the tiddler toolbar.|\n|''Version:''|1.0.0|\n|''Date:''|Mar 14, 2006|\n|''Source:''|http://tiddlywiki.bidix.info/#UploadToFileMacro|\n|''Documentation:''|http://tiddlywiki.bidix.info/#UploadToFileMacroDoc|\n|''Author:''|BidiX (BidiX (at) bidix (dot) info)|\n|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|\n|''~CoreVersion:''|2.0.0|\n|''Browser:''|Firefox 1.5; InternetExplorer 6.0; Safari|\n|''Include:''|none|\n|''Require:''|UploadPlugin|\n***/\n//{{{\nversion.extensions.UploadToFileMacro = {\n major: 1, minor: 0, revision: 0, \n date: new Date(2006,3,13),\n source: 'http://tiddlywiki.bidix.info/#UploadToFilePlugin',\n documentation: 'http://tiddlywiki.bidix.info/#UploadToFilePluginDoc',\n author: 'BidiX (BidiX (at) bidix (dot) info',\n license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',\n coreVersion: '2.0.0',\n browser: 'Firefox 1.5; InternetExplorer 6.0; Safari'\n};\n\nconfig.macros.uploadToFile = {\n label: "uploadToFile",\n prompt: "upload tiddler '%0' to file '%1' ",\n warning: "Are you sure you want to upload '%0'?",\n dirname: config.lib.file.dirname,\n basename: config.lib.file.dirname\n};\n\nconfig.macros.uploadToFile.messages = {\n fileUploaded: "tiddler '%0' uploaded to file '%1'",\n fileNotUploaded: "tiddler '%0' NOT uploaded"\n};\n\nconfig.macros.uploadToFile.handler = function(place, macroName, params, wikifier,paramString, tiddler) {\n // parameters initialization\n var toFilename = params[0];\n var tiddlerTitle = params[1];\n if (!tiddlerTitle) { \n tiddlerTitle = tiddler.title;\n } else {\n tiddler = store.getTiddler(tiddlerTitle);\n }\n if (!toFilename) { \n toFilename = tiddlerTitle;\n } \n var prompt = this.prompt.format([tiddlerTitle, toFilename]);\n createTiddlyButton(place, this.label, this.prompt.format([tiddlerTitle, toFilename]), \n function () {\n config.macros.uploadToFile.upload(tiddler, toFilename); \n return false;}, \n null, null, null);\n};\n\nconfig.macros.uploadToFile.upload = function(tiddler, toFilename, storeUrl, toFilename, uploadDir, backupDir, username, password) {\n var uploadIt = true; \n if (this.warning)\n uploadIt = confirm(this.warning.format([tiddler.title])); \n if (uploadIt) {\n if (!tiddler) {\n alert("Tiddler not found.");\n return;\n }\n if (!config.macros.upload.uploadContent) {\n alert ("no UploadPlugin extension");\n return;\n }\n // parameters initialization\n storeUrl = (storeUrl ? storeUrl : config.options.txtUploadStoreUrl);\n toFilename = (toFilename ? toFilename : tiddler.title);\n backupDir = (backupDir ? backupDir : config.options.txtUploadBackupDir);\n uploadDir = (uploadDir ? uploadDir : config.options.txtUploadDir);\n username = (username ? username : config.options.txtUploadUserName);\n password = (password ? password :config.options.pasUploadPassword); \n config.macros.upload.uploadContent(tiddler.text, storeUrl, toFilename, uploadDir, backupDir, username, password, \n function (responseText) {\n if (responseText.substring(0,1) != '0') {\n displayMessage(config.macros.uploadToFile.messages.fileNotUploaded.format([tiddler.title]));\n }\n else {\n if (uploadDir) {\n toFilename = uploadDir + "/" + config.macros.uploadToFile.basename(toFilename);\n } \n displayMessage(config.macros.uploadToFile.messages.fileUploaded.format(\n [tiddler.title, config.macros.uploadToFile.dirname(storeUrl)+"/"+toFilename]), config.macros.upload.dirname(storeUrl)+"/"+toFilename);\n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n });\n }\n return false;\n};\n\nconfig.shadowTiddlers.UploadToFileMacroDoc= "[[Full Documentation|http://tiddlywiki.bidix.info/l#UploadToFileMacroDoc]]\sn"; \n//}}}
//last update: UploadToFileMacro v 1.4.0//\n\n!Description\nUpload a tiddler as a file using UploadPlugin context. \n\nUsed with the SimonBaird's RunMacroIfTagged in [[ViewTemplate]] provides a new command in the tiddler toolbar.\n\n!Usage\n{{{\n <<uploadToFile>>\n <<uploadTofile [filename [tiddlerTitle]]>>\n \n tiddlerTitle: if omitted the title of the current tiddler \n filename: if omitted the title of the current tiddler\n\n}}}\n\n!Revision history\n* v1.0.0 (14/03/2006)\n** initial release\n
<div class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump'></span></span></div>\n<div class='tagged' macro='tags'></div>\n<div class='title' macro='view title'></div>\n<div class='tagging' macro='tagging'></div>\n<div class='viewer' macro='view text wikified'></div>\n<div class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler'></div>\n\n
<div class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump'><span macro='encrypt'></span><span macro='decrypt'></span></div>\n<div class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump'></div>\n<div class='title' macro='view title'></div>\n<div class='tagging' macro='tagging'></div>\n<div class='viewer' macro='view text wikified'></div>\n<div class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump'></div>\n
A [[WikiWord]] consists of two or more words with initial capitals, run together. WikiWords are [[Tiddler|http://www.tiddlywiki.com/#Tiddler]] names.
/*{{{*/\nconfig.macros.listTags = {};\nconfig.macros.listTags.handler = function(place,macroName,params)\n{\n// Second parameter is field to sort by (eg, title, modified, modifier or text)\nvar tags = store.getTaggedTiddlers(params[0],params[1]); \nvar ul = createTiddlyElement(place,"ul",null,null,"");\nfor(var r=0;r<tags.length;r++)\n{\nvar li = createTiddlyElement(ul,"li",null,null,"");\ncreateTiddlyLink(li,tags[r].title,true);\n}\n}\n/*}}}*/
\n\n/***\n|''Name:''|settings|\n|''Description:''|set preferences|\n|''~CoreVersion:''|2.1.0|\n***/\n\n/*{{{*/\nconfig.views.editor.defaultText = "";\nconfig.options.chkAnimate = false;\nconfig.options.chkDisableWikiLinks = true;\n/*}}}*/
== Headings\n\n== Heading2\n=== Heading3\n==== Heading4\n===== Heading5\n\n==Heading2\n===Heading3\n====Heading4\n=====Heading5\n\n== Heading2 =\n=== Heading3 =\n==== Heading4 =====\n===== Heading5 ==\n\n\n\n== Bold and Italic\n\n**bold**\n//italic//\n**//bolditalic//**\n\nA normal sentence. **A bold sentence\nthat continues in bold over a line break.** And another normal sentence.\n\nA normal sentence. **A bold sentence that is not terminated by star-star, but is instead is terminated by a paragraph break.\n\nA normal sentence.\n\nA normal sentence. //An italic sentence\nthat continues in italic over a line break.// And another normal sentence.\n\nA normal sentence. //An italic sentence that is not terminated by slash-slash, but is instead is terminated by a paragraph break.\n\nA normal sentence.\n\n== Preformatted text\n\nNormal text {{{preformatted text}}} Normal text.\n\n{{{\nA block\nof preformatted text\n}}}\n\n== Links\n[[explicitlink]]\n\n[[link|explicitlinkTitle]]\n\nhttp://www.wikicreole.org\n\n[[http://www.wikicreole.org|Wiki Creole Site]]\n\n== Misc\n\nA horizontal rule follows\n----\n\n== Lists\n* bulleted list\n* bullet 2\n** bullet level 2\n*** bullet level 3\n\n# numbered list\n# item 2\n## item 2.1\n### item 2.1.1\n#### item 2.1.1.1\n##### item 2.1.1.1.1\n# item 3\n# item 4\n
'''bold'''\n''italic''\n<b>bold</b>\n<sub>subscript</sub>\n<sup>superscript</sup>\n<u>underline</u>\n<s>strikethrough</s>\n<code>code</code>\n\n'''bold''' ''italic'' <b>bold</b> <sub>subscript</sub> <sup>superscript</sup> <u>underline</u> <s>strikethrough</s> <code>code</code>\n\n\n* You can even create mixed lists\n*# and nest them\n*#* like this\n*#*; can I mix definition list as well?\n*#*: yes\n*#*; how?\n*#*: it's easy as\n*#*:* a \n*#*:* b\n*#*:* c\n\n<blockquote>\na block to\nquote\n</blockquote>\n\n=H1=\n== H2==\nsome text\n===H3===\n====H4====\n=====H5=====\n======H6======\n=======H7=======\n----\n[[BasicLink]]\n[[BasicLink|PipedLink]]\n\n[[0PeriodicTable]]\n[[0PeriodicTable|PipedLink to PeriodicTable]]\n\n
some text\n{| \n| Cell 1, row 1 \n| Cell 2, row 1 \n|- \n| Cell 1, row 2 \n| Cell 2, row 2 \n|}\n\n{| \n| Cell 1, row 1 || Cell 2, row 1 \n|- \n| Cell 1, row 2 || Cell 2, row 2 \n|}\n\nsome text\n\n{| \n| Cell 1, row 1 \n| Cell 2, row 1 \n|- \n| Cell 1, row 2 \n| Cell 2, row 2 \n|}\n\n{| \n| Cell 1, row 1 \n| Cell 2, row 1 \n|- \n| Cell 1, row 2 \n| Cell 2, row 2 \n|}\n\n
PBwiki uses standard, simple wiki formatting. You can click the "view page source" link in the footer to see how this page is formatted.\n\n! Text formatting\n\n!! Lists\n* One ''* (asterisk) + a space'' at the beginning of a line makes a bullet point, like this.\n# Use ''# + a space'' at the beginning of a line to make a numbered list, like this.\n## Nested lists like this one are made by doubling the * or # for subpoints\n\n# item1\n# item2\n## item2.1\n### item2.1.1\n# item3\n\n* item1\n* item2\n** item2.1\n* item3\n\n!!Character Formatting\nCharacter formatting is quite easy:\n\n* To make something **bold**, put 2 * (asterisk) before and after it: <raw>**word**</raw>\n* To make something ''italicized'', put 2 ' (apostrophe) before and after it: <raw>''word''</raw>\n* By using 2 _ (underscore) before and after, text can be __underlined__: <raw>__word__</raw>\n* -Strikethrough- is done with (space +) 1 - (dash) before and 1 - (dash) (+ space) after: <raw>-word-</raw> \n\nHere it is at a glance:\n|Effect|Preceding|Text|Following|\n|**Bold**|<raw>**</raw>|word|<raw>**</raw>|\n|''Italic''|<raw>''</raw>|word|<raw>''</raw>|\n|__Underlined__|<raw>__</raw>|word|<raw>__</raw>|\n| -Strikethrough- | - |word| - |\n\n!!Sections\n* One ! at the beginning of a line makes a huge headline (like "Text formatting" above)\n* Two !! make a big headline (like "Sections" over the Sections section right here)\n* Three !!! and more--up to 6--make successively smaller headlines\n\n!Heading1\n!!Heading2\n!!!Heading3\n\n* 3 - (hypen) on a line by themselves make a dividing line (horizontal rule) like the one below\n\n---\n\n! Links\n* **If you use two capital letters in a word with lowercase letters in between, PBwiki will automatically recognize the word as a link to a page.** For example, LookFunny and SandBox link to pages, but sandbox and Sandbox don't. If you use a word like FunnyWord but don't yet have a page called FunnyWord, you can create that page just by clicking on the word. (Until the page is created, the link will have a dashed underline decoration. This way you can tell at a glance which pages have been created and which haven't.) On the other hand, to prevent the word from becoming a link, add ~ in front of it.\n* **You can also just type or paste in URLs** like http://pbwiki.com/ or put <raw>[ ]</raw> brackets around a word. Brackets will force the word to become a link even if it isn't in the FunnyWord style.\n* You can beautify links by using <raw>[ ]</raw> brackets and <raw>|</raw>, like <raw>[http://pbwiki.com/|PBwiki]</raw> to get [http://pbwiki.com/|PBwiki].\n\n\n! Pictures\n* You can also show pictures in your wiki. Just add the link to the picture in <raw>[ ]</raw> brackets! For example, <raw>[http://pbwiki.com/sandwch2.jpg]</raw> gives:\n\n[http://pbwiki.com/sandwch2.jpg]\n\n\n---\n\n!Tables\n\n* Table rows can be made by beginning and ending a line with <raw>|</raw> (vertical bar). The content of the row is placed between the bars. If more than one cell is desired for any particular row, an additional <raw>|</raw> is used as the separator.\n\n|Look Mom!|A table!!|\n\n* Adjacent table rows will be automagically combined into a single table.\n\n|a|b|\n|c|d|\n\n\n---\n\n!Use ~WikiStyle Characters Normally\n\n* The tags <raw> and <verbatim> can be used to prevent PBwiki from interpreting special characters like <raw>**</raw> before and after a word, which normally would make the word bold. For shorter sections of text (a few words), use <raw>; for longer sections, use <verbatim>.\n* These tags act like HTML tags in that there is both an opening tag and a closing tag, the opening before the text and the closing after the text: <raw><raw>**words that aren't bolded**</raw></raw>.\n\n\n---\n\n!More\n\n* PBwiki accepts HTML, so if there's something that you'd like to do that can't be done with WikiStyle--and you know HTML--go for it!\n\n---\n\n!Not supported yet\n\n* 1 <raw>|</raw> (vertical bar) before and after something puts a |box around it|\n\nA box like this is made by putting a space in front of the line. ''If it doesn't seem to work, try adding an extra blank line before/after it.''\n\n* **Just type in email addresses** like support@pbwiki.com.\n* Or type them in and beautify them by adding brackets: <raw>[support@pbwiki.com|help!!]</raw> gives [support@pbwiki.com|help!!].\n\n\n!Not supported\n\n* **A special "top" link (to return a user to the top of the page) can be made with <top>.** The top link can be customized by inserting your own link description inside the angle brackets: <top link description>.\n* Uploaded files can be linked to in the same way as everything else--you'll just need the file's location (URL). You can find a list of all the files you have uploaded to your wiki by selecting the 'Files' link at the top or bottom of the page. While there, right-click on a file link to copy its URL.\n* A table with links to all the (!, !!, and !!!) sections on that page can be made by inserting <toc> wherever you'd like the table. See the top of this page for an example.\n* To make the table only link to the largest (!) headlines, use <toc!>.\n* To make the table only link to the largest and second-largest headlines (! and !!), use <toc!!>.\n* To display the view count for a page, insert <views> where you'd like to see it.\n* To link to a random page, insert <random>\n* RecentChanges (the 'Changes' link at the top and bottom) shows you all of the changes made to the wiki.\n* AllPages lists all of the pages in the wiki. Choosing "except revisions" at the top of AllPages reveals the earlier versions of the pages as well. AllPages is also the place to go if you would like to delete pages or revisions.\n* The SideBar that appears in the upper right may be edited like any other page in the wiki. If you don't have a SideBar, simply create a page with this name and add something to it.\n\n<br />\n
This page provides a test of some of the markup sequences available in PmWiki.\n\n----\n\n!! Paragraphs\n\nTo create paragraphs, simply enter text. Use a blank line to start a new paragraph.\n\nWords on two lines in a row will wrap and fill as needed (the normal XHTML behavior).\n\n* Use [@\s@] (single backslash) at the end of a line to join the current line to the next one.\n* Use [@\s\s@] (two backslashes) at the end of a line to force a line break.\n* Use [@\s\s\s@] (three backslashes) at the end of a line to force 2 line breaks.\n* Use [@[[<<]]@] to force a line break that will clear floating elements.\n\n\n!! Indented Paragraphs ''(Quotes)''\n\nArrows ([@->@]) at the beginning of a paragraph can be used to produce an indented paragraph. More hyphens at the beginning ([@--->@]) produce larger indents.\n\n(:markup:)\n->Four score and seven years ago our fathers placed upon this continent a new nation, conceived in liberty and dedicated to the proposition that all men are created equal.\n(:markupend:)\n\nInverted Arrows ([@-<@]) at the beginning of a paragraph can be used to produce a paragraph with a hanging indent. Adding hyphens at the beginning ([@---<@]) causes all the text to indent.\n\n(:markup:)\n-<Four score and seven years ago our fathers placed upon this continent a new nation, conceived in liberty and dedicated to the proposition that all men are created equal. \n(:markupend:)\n\n(:markup:)\n--<Four score and seven years ago our fathers placed upon this continent a new nation, conceived in liberty and dedicated to the proposition that all men are created equal. And that food would be good to.\n(:markupend:)\n\n\n!! Bulleted and Numbered Lists\n\nBullet lists are made by placing asterisks at the left margin. Numbered lists are made by placing number-signs (#) at the left margin. More asterisks/number-signs increases the level of bullet:\n\n(:markup:) \n* First-level list item\n** Second-level list item\n### Order this\n#### And this (optional)\n### Then this\n** Another second-level item\n* A first-level item: cooking\n## Prepare the experiment\n### Unwrap the pop-tart\n### Insert the pop-tart into the toaster\n## Begin cooking the pop tart\n## Stand back\n(:markupend:)\n\n\n!! Horizontal Line\n\nFour or more dashes ([=----=]) at the beginning of a line produce a horizontal line.\n\n----\n\n\n!! Emphasis\n\n* Enclose text in doubled single-quotes ([=''text''=]), i.e., ''two apostrophes'', for emphasis (usually ''italics'')\n* Enclose text in tripled single-quotes ([='''text'''=]), i.e. ''three apostrophes'', for strong emphasis (usually '''bold''')\n* Enclose text in five single-quotes ([='''''text'''''=]), or triples within doubles (''five apostrophes''), for some other kind of emphasis (usually '''''bold italics''''')\n* Enclose text in doubled at-signs ([=@@text@@=]) for @@monospace@@ text\n* Use [=[+large+]=] for [+large+] text, [=[++larger++]=] for [++larger++], [=[-small-]=] for [-small-] text, and [=[--smaller--]=] for [--smaller--].\n* Emphasis can be used multiple times within a line, but cannot span across markup line boundaries (i.e., you can't put a paragraph break in the middle of bold text).\n\nOther styling \n(:markup:)\n'+big+', '-small-', '^super^', '_sub_', \n\n{+insert or underscore+}, \n\n{-delete or strikethrough or strikeout-}\n(:markupend:)\n* [@`WikiWord@] `WikiWord neutralisation\n\n\n!! References\n\n* Use words and phrases in double brackets (e.g., [=[[text formatting rules]]=]) to create links to other pages on this wiki.\n* Capitalized words joined together (e.g., [[WikiWord]]s) can also be used to make references to other pages without needing the double-brackets.\n* Precede [=URLs=] with "@@http:@@", "@@ftp:@@", or "@@mailto:@@" to create links automatically, as in http://www.pmichaud.com/toast.\n* '''NOT DONE YET:''' [=URLs=] ending with @@.gif@@, @@.jpg@@, or @@.png@@ are displayed as images in the page\n* '''NOT DONE YET:''' Links with arbitrary text can be created as either [=[[=]''target'' | ''text'']] or [=[[=]''text'' -> ''target''[=]]=]. ''Text'' can be an image URL, in which case the image becomes the link to the remote ''url'' or ''[[WikiWord]]''.\n* '''NOT DONE YET:''' [[#Anchors]] Anchor targets within pages (#-links) can be created using @@[=[[#target]]=]@@.\n\n\n!! Headings\n\nHeadings are made by placing an exclamation mark ('''!''') at the left margin. More exclamation marks increase the level of heading. For example,\n\n(:markup:)\n! Level 1 Heading\n!! Level 2 Heading\n!!! Level 3 Heading\n!!!! Level 4 Heading\n(:markupend:)\n\n\n!! Escape sequence\n\nAnything placed between [=[= and =]=] is not interpreted by PmWiki. This makes it possible to turn off special formatting interpretations and neutralise [=WikiWords=] that are not links (even easier is to use a tick ` in front, like [=`WikiWord=]).\n\nFor preformatted text blocks, use the [=[@...@]=] markup. \n\n(:markup:)\n[@\nCode goes here like [[PmWiki.PmWiki]]\n'$CurrentTime $[by] $AuthorLink: [=$ChangeSummary=]'; #just some code\n@]\n(:markupend:)\n\n!! Tables\n\nTables are defined by enclosing cells with '||'. A cell with leading and trailing spaces is centered; a cell with leading spaces is right-aligned; all other cells are left-aligned. An empty cell will cause the previous cell to span multiple columns. (There is currently no mechanism for spanning multiple rows.) A '!' as the first character in a cell provides emphasis that can be used to provide headings.\n\n'''NOT DONE YET:''' A line beginning with '||' specifies the table attributes for subsequent tables.\n(:markup:)\n\n||border=1 width=50%\n||!Table||!Heading||!Example||\n||!Left || Center || Right||\n||A ||! a B || C||\n|| || single || ||\n|| || multi span ||||\n(:markupend:)\n
1 Major heading (H1)\n1.1 Minor heading (H2)\n\n\s\sX \sX escape special character X (i.e. \s{)\n\nline\s\s\sbreak\n\n\s[start\s] [start] internal link\n\n\shttp://snipsnap.org/ http://snipsnap.org/ external link\n\nlink {link:SnipSnap|http://snipsnap.org}\n\n\s_\s_bold\s_\s_ __bold__\n\s~\s~italics\s~\s~ ~~italics~~\n\s-\s-strike\s-\s- --strike--\n\nList(using dash)\n- item 1\n- item 2\n\nList(using star)\n* item 1\n* item 2\n\nenumerated list\n1. item-1\n1. item-2\n\nalphabetical enumerated list\na. item-a\na. item-b\n\nuppercase alphabetical enumerated list\nA. item-A\nA. item-B\n\nroman enumerated list\ni. item-ii\ni. item-ii\n\nuppercase roman enumerated list\nI. item-I\nI. item-II\n\ngreek enumerated list\ng. item-alpha\ng. item-beta\n\nhiragana (japanese) enumerated list\nh. item-h1\nh. item-h2\n\nkatakana (japanese) enumerated list\nk. item-k1\nk. item-k2\n\nhebrew enumerated list\nj. item-heb1\nj. item-heb2\n\n{table}\na|b|c\nd|e|f\n{table}\n\n(empty line) produces a new paragraph\n
^^ Markup\n\n*bold* * notbold* *notbold *\n_italic_\n-strikethrough-\n`monospace`\n\n.pre\nBlock of text with no *special* punctuation\n.pre\n\n{{*this text is not bold*}}\n\n^^ Headings\n^ H1\n^^H2\n^^^ H3\n^^^^ H4\n^^^^^ H5\n^^^^^^ H6\n\n\n^^ Rule:\n----\n\n^^ Numbered list:\n# item 1\n## subitem 1\n# item 2\n\n^^ Bulleted list:\n* item 1\n** subitem 1\n* item 2\n\n^^ Indented text\n> Indented\n>> Indented twice\n\n^^ Table\n|aa | bb| cc |\n|dd | ee| ff |\n\n^^ Misc\n\ntrademark {tm}\n\n\n^^ Images\nImage attachment(.ico): {image: http://www.eu.socialtext.net/favicon.ico}\nImage attachment(.gif): {image: http://www.eu.socialtext.net/static/images/socialtext-logo-30.gif}\nExternal image(.ico): <http://www.eu.socialtext.net/favicon.ico>\nExternal image(.gif): <http://www.eu.socialtext.net/static/images/socialtext-logo-30.gif>\nExternal image(.gif): <http://www.eu.socialtext.net/exchange/index.cgi/new.gif>\n\n^^ Links\n\nPage Link: [Page Link]\nLink text: "Link text" [Page Link]\nExternal link: <http://www.socialtext.com>\nSocialtext Home Page: "Socialtext Home Page"<http://www.socialtext.com>\nSocialtext Email: "Socialtext Email"<mailto:info@socialtext.com>\nURL link: http://www.socialtext.com/\n\n\n----\n\n^^ Not supported\n\nproposal.pdf on this page {file: proposal.pdf} on this page\nproposal.pdf on page name {file: [page name] proposal.pdf} on [page name]\n\nMail link: info@socialtext.com\nPage Link to different-workspace: {link: different-workspace [Page link]} to different-workspace\nLink to section of a page: {link: different-workspace [Page link] Section} to (optional) different-workspace\n\nPage section {section: Name}\nMy Weblog weblog {weblog: My Weblog}\nMeeting notes category {category: Meeting Notes}\n\nYahoo user (yahoouser) presence {ymsgr:yahoouser}\nAOL user (aimuser) presence {aim:aimuser}\n\nTable of contents {toc}\n
//{{{//\n\nhttp://www.tiddlywiki.com\n\n[[http://www.tiddlywiki.com][tiddlywiki]]\n\n[[http://www.tiddlywiki.com tiddlywiki]]\n\nWikiWord\n\n[[Forced Link]] ![[Not Forced Link]] [[Tiddler][textforlink]]\n\n!NotWikiWord <nop>NopWikiWord\n\n%RED%red%ENDCOLOR% %BLUE%blue%ENDCOLOR% %SILVER%silver%ENDCOLOR%\n\n!%RED% not red\n\n<pre>Pre *x* [[abcd]]</pre>\n\n<verbatim>\nThis text\n\n\nshould come out *verbatim*\n</verbatim>\n\n& < > and "\n\n*bold* * prenotbold* *notboldpost *\n\nsome text *notbold*text more normal text. \n\nAnd *thisIsBold*. some normal text\n\n*thisIsBold*. some normal text\n\n_italic_ _ prenotitalic_ _notitalicpost _\n\n__bolditalic__ __ prenotbolditalic__ __notbolditalicpost __\n\n=mono= = prenotmono= =notmonopost =\n\n==boldmono== == prenotboldmono== ==notboldmonopost ==\n\nline%BR%break\n\n|a|b|c|\n|d||f|\n|g|h|i|\n\n\n * bullet\n 1. number\n 1. number2\n a. number3a\n 1. number1\n A. numberB\n a. numberc\n I. numberIV\n i. numberv\n 1. number6\n\n---\n $ item : definition\n $ anotherItem : anotherDefinition\n----\n\n---+Heading1\n---++Heading2\n---+++Heading3\n\nThe *bold* * notbold* _italic_ _ notitalic_ __bolditalic__\n\nThe quick brown _fox_ jumps _over_ the lazy @@dog@@.\n\nThe quick brown *fox* jumps over the *lazy * dog.\n\nThe quick =brown= fox jumps ==over== the lazy dog.\n\nThe __quick__ brown fox jumps over the lazy dog.\n<noautolink>\n\nWikiWord (not autolinked)\nsome text\n\n</noautolink>\n\n//}}}//
%INCLUDE{DistributionDocHeader}%\n%STARTSECTION{"distributiondoc"}%\n%TOC{depth="4"}%\n%STARTINCLUDE%\n---# TWiki Text Formatting\n\nWorking in TWiki is as easy as typing in text - *exactly like email*. You don't need to know HTML, though you can use it if you prefer. Links to topics are created automatically when you enter WikiWords. And TWiki shorthand gives you all the power of HTML with a simple coding system that takes no time to learn. It's all laid out below - refer back to this page in a pop-up window from the *Edit* screen.\n\n#TWikiShorthand\n---++ TWiki Editing Shorthand\n\n<table border="1" cellpadding="3" cellspacing="1" bgcolor="#000000">\n<tr bgcolor="#ffffff">\n<td>\n *Formatting Command:*\n</td><td>\n *Example: You write:*\n</td><td>\n *You get:*\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *Paragraphs:* %BR%\n Blank lines will create new paragraphs.\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n1st paragraph\n\n2nd paragraph\n</pre>\n</font></span>\n</td><td valign="top">\n1st paragraph\n\n2nd paragraph\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *Headings:* %BR%\n At least three dashes at the beginning of a line, followed by plus signs and the heading text. One plus creates a level 1 heading (most important), two pluses a level 2 heading; the maximum is level 6. __Note:__ A Table of Content can be created automatically with the =%<nop>TOC%= variable, see TWikiVariables. Any heading text after =!!= is excluded from the TOC; for example, write =---+!! text= if you do not want to list a header in the TOC.\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n<nop>---++ Sushi\n\n<nop>---+++ Maguro\n</pre>\n</font></span>\n</td><td valign="top">\n<h2 >Sushi</h2>\n\n<h3 >Maguro</h3>\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *Bold Text:* %BR%\n Words get *bold* by enclosing them in =*= asterisks.\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n*Bold*\n</pre>\n</font></span>\n</td><td valign="top">\n*Bold*\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *Italic Text:* %BR%\n Words get _italic_ by enclosing them in =_= underscores.\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n_Italic_\n</pre>\n</font></span>\n</td><td valign="top">\n_Italic_\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *Bold Italic:* %BR%\n Words get __bold italic_ by enclosing them in =_= double-underscores.\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n__Bold italic__\n</pre>\n</font></span>\n</td><td valign="top">\n__Bold italic__\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *Fixed Font:* %BR%\n Words get shown in =fixed font= by enclosing them in =<nop>=<nop>= equal signs.\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n=Fixed font=\n</pre>\n</font></span>\n</td><td valign="top">\n=Fixed font=\n\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *Bold Fixed Font:* %BR%\n Words get shown in ==bold fixed font== by enclosing them in ==<nop>== double equal signs.\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n==Bold fixed==\n</pre>\n</font></span>\n</td><td valign="top">\n==Bold fixed==\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n __Note:__ Make sure there is no space between the text and the bold, italic, or other indicators (=* _ __ = ===).\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n_This works_,\n_this not _\n</pre>\n</font></span>\n</td><td valign="top">\n_This works_,%BR%\n_this not _\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *Verbatim Mode:* %BR%\n Surround code excerpts and other formatted text with =<verbatim>= and =</verbatim>= tags. %BR% __Note:__ Use =<pre>= and =</pre>= tags instead if you want that HTML code is interpreted. %BR% __Note:__ Each tag must be on a line by itself.\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n<verbatim>\nclass CatAnimal {\n void purr() {\n <code here>\n }\n}\n</verbatim>\n</pre>\n</font></span>\n</td><td valign="top">\n<verbatim>\nclass CatAnimal {\n void purr() {\n <code here>\n }\n}\n</verbatim>\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *Separator:* %BR%\n At least three dashes at the beginning of a line.\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n-------\n</pre>\n</font></span>\n</td><td valign="top">\n-------\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *List Item:* %BR%\n Three spaces, an asterisk, and another space.\n %BR% __Note:__ If you don't want to cram long text onto one line, wrap it and align continuation lines with leading spaces.\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n * bullet item\n * another\n bullet\n item\n * last bullet item\n</pre>\n</font></span>\n</td><td valign="top">\n * bullet item\n * another\n bullet\n item\n * last bullet item\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *Nested List Item:* %BR%\n Six, nine, ... spaces, an asterisk, and another space.\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n * level 1\n * level 2\n</pre>\n</font></span>\n</td><td valign="top">\n * level 1\n * level 2\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *Ordered List:* %BR%\n Three spaces, a number, a dot, and another space. Several types are available besides a number:\n| *Type* | *Generated Style* | *Sample Sequence* |\n| 1. | Arabic numerals | 1, 2, 3, 4... |\n| A. | Uppercase letters | A, B, C, D... |\n| a. | Lowercase letters | a, b, c, d... |\n| I. | Uppercase Roman Numerals | I, II, III, IV... |\n| i. | Lowercase Roman Numerals | i, ii, iii, iv... |\n\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n 1. Sushi\n 1. Dim Sum\n\n A. Sushi\n A. Dim Sum\n\n i. Sushi\n i. Dim Sum\n</pre>\n</font></span>\n</td><td valign="top">\n 1. Sushi\n 1. Dim Sum\n\n A. Sushi\n A. Dim Sum\n\n i. Sushi\n i. Dim Sum\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *Definition List:* %BR%\n Three spaces, a dollar sign, the term, a colon, a space, followed by the definition.\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n $ Sushi: Japan\n $ Dim Sum: S.F.\n</pre>\n</font></span>\n</td><td valign="top">\n $ Sushi: Japan\n $ Dim Sum: S.F.\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *Table:* %BR%\n Any number of lines of text. Each line is one row of the table consisting of one or more cells. Each cell starts and ends with a vertical bar '|'. Any spaces at the beginning of a line are ignored.%BR%\n __Notes:__ %BB%\n =| <nop>*bold*<nop> |= cells are displayed as table headers.%BB%\n =| center-spaced |= cells are displayed center aligned.%BB%\n =| right-spaced |= cells are displayed right aligned.%BB%\n =| 2 colspan ||= cells are displayed as multi-span columns (i.e., a cell with no text spans a column).%BB%\n =|^|= cells with a caret indicate follow-up rows of multi-span rows (this functionality is provided by TablePlugin).%BB%\n If a row contains a large amount of text, and you want it to be more readable while editing the table, split the row into multiple text lines by ending each line with a backslash character ='\s'=.%BB%\n Table cells wrap automatically as determined by the browser.\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n| *L* | *C* | *R* |\n| A2 | 2 | 2 |\n| A3 | 3 | 3 |\n| multi span |||\n| A4-6 | four | four |\n|^| five | five |\n|^| six | six |\n</pre>\n</font></span>\n</td><td valign="top">\n| *L* | *C* | *R* |\n| A2 | 2 | 2 |\n| A3 | 3 | 3 |\n| multi span |||\n| A4-6 | four | four |\n|^| five | five |\n|^| six | six |\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *<nop>WikiWord Links:* %BR%\n <nop>CapitalizedWordsStuckTogether (or WikiWords) will produce a link automatically if preceded by whitespace or parenthesis. %BR% __Note:__ In case you want to link to a topic in a different %WIKITOOLNAME% web write =Otherweb.TopicName=. (The link label is the the name of the web in case the is <nop>%HOMETOPIC%, else it is the topic name)\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\nWebNotify\n\n%MAINWEB%.TWikiUsers\n</pre>\n</font></span>\n</td><td valign="top">\nWebNotify\n\n%MAINWEB%.TWikiUsers\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n#SquareBrackets\n *Forced Links:* %BR%\n You can create a forced internal link by enclosing words in double square brackets.\n %BR% __Note:__ Text within the brackets may contain optional spaces; the topic name is formed by capitalizing the initial letter and by removing the spaces; for example, =[<nop>[text formatting FAQ]]= links to topic TextFormattingFAQ. You can also refer to a different web and use anchors.\n %BR% __Note:__ To "escape" double square brackets that would otherwise be a correct link, prefix the leading left square brackets with an exclamation point, that is, begin with =![<nop>[....=\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n[[wiki syntax]]\n\n[[%MAINWEB%.TWiki users]]\n\nescaped:\n![[wiki syntax]]\n</pre>\n</font></span>\n</td><td valign="top">\n[[wiki syntax]]\n\n[[%MAINWEB%.TWiki users]]\n\nescaped:\n![[wiki syntax]]\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *Specific Links:* %BR%\n Create a link where you can specify the link text and the link reference separately, using nested square brackets like =[<nop>[reference][text]]=. Internal link references (e.g. WikiSyntax) and external link references (e.g. http://TWiki.org/) are supported.\n %BR% __Note:__ The same __Forced Links__ rules apply for internal link references.\n %BR% __Note:__ For external link references, you can simply use a space instead of =][= to separate the link URL from the descriptive text.\n %BR% __Note:__ Anchor names can be added as well, like =[<nop>[%HOMETOPIC%#MyAnchor][go home]]= and =[<nop>[http://gnu.org/#Action][GNU Action]]=.\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n[[WikiSyntax][syntax]]\n\n[[http://gnu.org][GNU]]\n\n[[http://xml.org XML]]\n</pre>\n</font></span>\n</td><td valign="top">\n[[WikiSyntax][syntax]]\n\n[[http://gnu.org][GNU]]\n\n[[http://xml.org XML]]\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *Anchors:* %BR%\n You can define a link reference inside a %WIKITOOLNAME% topic (called an anchor name) and link to that. To __define__ an anchor write =#AnchorName= at the beginning of a line. The anchor name must be a WikiWord. To __link to__ an anchor name use the =[<nop>[MyTopic#MyAnchor]]= syntax. You can omit the topic name if you want to link within the same topic.\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n[[WikiWord#NotThere]]\n\n[[#MyAnchor][Jump]]\n\n#MyAnchor To here\n</pre>\n</font></span>\n</td><td valign="top">\n[[WikiWord#NotThere]]\n\n[[#MyAnchor][Jump]]\n\n#MyAnchor To here\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *Prevent a Link:* %BR%\n Prevent a WikiWord from being linked by prepending it with an exclamation point.\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n!SunOS\n</pre>\n</font></span>\n</td><td valign="top">\n!SunOS\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n *Disable Links:* %BR%\n You can disable automatic linking of WikiWords by surrounding text with =<noautolink>= and =</noautolink>= tags.\n %BR% __Note:__ Each tag must be on a line by itself. \n %BR% __Note:__ This also works for TWiki tables, but only if you add a blank line between the end of the table and the closing =</noautolink>= tag (known issue of the TablePlugin).\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<verbatim>\n <noautolink>\n RedHat &\n SuSE\n </noautolink>\n</verbatim>\n</font></span>\n</td><td valign="top">\n <noautolink>\n RedHat &\n SuSE\n </noautolink>\n</td>\n</tr>\n<tr bgcolor="#ffffff">\n<td valign="top">\n*Mailto: Links:* %BR%\nTo create 'mailto:' links that have more descriptive link text, specify subject lines or message bodies, or omit the email address, you can write =[<nop>[mailto:user@domain descriptive text]]=.\n</td><td valign="top">\n<span style='background : #FFFFCC;'><font color="#990000">\n<pre>\n[[mailto:a@z.com Mail]]\n\n[[mailto:?subject=Hi Hi]]\n</pre>\n</font></span>\n</td><td valign="top">\n[[mailto:a@z.com Mail]]\n\n[[mailto:?subject=Hi Hi]]\n</td>\n</tr>\n</table>
|*L* | *C* | *R*|\n| A2 | 2 | 2 |\n| A3 | 3 | 3 |\n|||m|\n|A4-6 | four | four |\n|^| five | five |\n| | six | six |
= H1 =\n\n== H2 ==\n\n=== H3 ===\n\n[TracGuideToc]\n\n[http://moinmoin.wikiwikiweb.de/ MoinMoin]\n \n\n\nline[[BR]]break
= WikiFormatting =\n\nWiki markup is a core feature in Trac, tightly integrating all the other parts of Trac into a flexible and powerful whole.\n\nTrac has a built in small and powerful wiki rendering engine. This wiki engine implements an ever growing subset of the commands from other popular Wikis,\nespecially [http://moinmoin.wikiwikiweb.de/ MoinMoin]. \n\nThis page demonstrates the formatting syntax available anywhere WikiFormatting is allowed.\n\n\n== Font Styles ==\n\nThe Trac wiki supports the following font styles:\n{{{\n * '''bold'''\n * ''italic''\n * '''''bold italic'''''\n * __underline__\n * {{{monospace}}} or `monospace`\n * ~~strike-through~~\n * ^superscript^ \n * ,,subscript,,\n}}}\n\nDisplay:\n * '''bold'''\n * ''italic''\n * '''''bold italic'''''\n * __underline__\n * {{{monospace}}} or `monospace`\n * ~~strike-through~~\n * ^superscript^ \n * ,,subscript,,\n\nNotes:\n * `{{{...}}}` and {{{`...`}}} commands not only select a monospace font, but also treat their content as verbatim text, meaning that no further wiki processing is done on this text.\n * {{{ ! }}} tells wiki parser to not take the following characters as wiki format, so pay attention to put a space after !, e.g. when ending bold.\n\n== Headings ==\n\nYou can create heading by starting a line with one up to five ''equal'' characters ("=")\nfollowed by a single space and the headline text. The line should end with a space \nfollowed by the same number of ''='' characters.\nThe heading might optionally be followed by an explicit id. If not, an implicit but nevertheless readable id will be generated.\n\nExample:\n{{{\n= Heading =\n== Subheading ==\n=== About ''this'' ===\n=== Explicit id === #using-explicit-id-in-heading\n}}}\n\nDisplay:\n= Heading =\n== Subheading ==\n=== About ''this'' ===\n=== Explicit id === #using-explicit-id-in-heading\n\n== Paragraphs ==\n\nA new text paragraph is created whenever two blocks of text are separated by one or more empty lines.\n\nA forced line break can also be inserted, using:\n{{{\nLine 1[[BR]]Line 2\n}}}\nDisplay:\n\nLine 1[[BR]]Line 2\n\n\n== Lists ==\n\nThe wiki supports both ordered/numbered and unordered lists.\n\nExample:\n{{{\n * Item 1\n * Item 1.1\n * Item 2\n\n 1. Item 1\n a. Item 1.a\n a. Item 1.b\n i. Item 1.b.i\n i. Item 1.b.ii\n 1. Item 2\nAnd numbered lists can also be given an explicit number:\n 3. Item 3\n}}}\n\nDisplay:\n * Item 1\n * Item 1.1\n * Item 2\n\n 1. Item 1\n a. Item 1.a\n a. Item 1.b\n i. Item 1.b.i\n i. Item 1.b.ii\n 1. Item 2\nAnd numbered lists can also be given an explicit number:\n 3. Item 3\n\nNote that there must be one or more spaces preceding the list item markers, otherwise the list will be treated as a normal paragraph.\n\n\n== Definition Lists ==\n\n\nThe wiki also supports definition lists.\n\nExample:\n{{{\n llama::\n some kind of mammal, with hair\n ppython::\n some kind of reptile, without hair\n (can you spot the typo?)\n}}}\n\nDisplay:\n llama::\n some kind of mammal, with hair\n ppython::\n some kind of reptile, without hair\n (can you spot the typo?)\n\nNote that you need a space in front of the defined term.\n\n\n== Preformatted Text ==\n\nBlock containing preformatted text are suitable for source code snippets, notes and examples. Use three ''curly braces'' wrapped around the text to define a block quote. The curly braces need to be on a separate line.\n \nExample:\n{{{\n {{{\n def HelloWorld():\n print "Hello World"\n }}}\n}}}\n\nDisplay:\n{{{\n def HelloWorld():\n print "Hello World"\n}}}\n\n\n== Blockquotes ==\n\nIn order to mark a paragraph as blockquote, indent that paragraph with two spaces.\n\nExample:\n{{{\n This text is a quote from someone else.\n}}}\n\nDisplay:\n This text is a quote from someone else.\n\n== Discussion Citations ==\n\nTo delineate a citation in an ongoing discussion thread, such as the ticket comment area, e-mail-like citation marks (">", ">>", etc.) may be used. \n\nExample:\n{{{\n>> Someone's original text\n> Someone else's reply text\nMy reply text\n}}}\n\nDisplay:\n>> Someone's original text\n> Someone else's reply text\nMy reply text\n\n''Note: Some WikiFormatting elements, such as lists and preformatted text, are lost in the citation area. Some reformatting may be necessary to create a clear citation.''\n\n== Tables ==\n\nSimple tables can be created like this:\n{{{\n||Cell 1||Cell 2||Cell 3||\n||Cell 4||Cell 5||Cell 6||\n}}}\n\nDisplay:\n||Cell 1||Cell 2||Cell 3||\n||Cell 4||Cell 5||Cell 6||\n\nNote that more complex tables can be created using\n[wiki:WikiRestructuredText#BiggerReSTExample reStructuredText].\n\n\n== Links ==\n\nHyperlinks are automatically created for WikiPageNames and URLs. !WikiPageLinks can be disabled by prepending an exclamation mark "!" character, such as {{{!WikiPageLink}}}.\n\nExample:\n{{{\n TitleIndex, http://www.edgewall.com/, !NotAlink\n}}}\n\nDisplay:\n TitleIndex, http://www.edgewall.com/, !NotAlink\n\nLinks can be given a more descriptive title by writing the link followed by a space and a title and all this inside square brackets. If the descriptive title is omitted, then the explicit prefix is discarded, unless the link is an external link. This can be useful for wiki pages not adhering to the WikiPageNames convention.\n\nExample:\n{{{\n * [http://www.edgewall.com/ Edgewall Software]\n * [wiki:TitleIndex Title Index]\n * [wiki:ISO9000]\n}}}\n\nDisplay:\n * [http://www.edgewall.com/ Edgewall Software]\n * [wiki:TitleIndex Title Index]\n * [wiki:ISO9000]\n\n\n=== Trac Links ===\n\nWiki pages can link directly to other parts of the Trac system. Pages can refer to tickets, reports, changesets, milestones, source files and other Wiki pages using the following notations:\n{{{\n * Tickets: #1 or ticket:1\n * Reports: {1} or report:1\n * Changesets: r1, [1] or changeset:1\n * ...\n}}}\n\nDisplay:\n * Tickets: #1 or ticket:1\n * Reports: {1} or report:1\n * Changesets: r1, [1] or changeset:1\n * ... \n\nSee TracLinks for more in-depth information.\n\n\n== Escaping Links and WikiPageNames ==\n\nYou may avoid making hyperlinks out of TracLinks by preceding an expression with a single "!" (exclamation mark).\n\nExample:\n{{{\n !NoHyperLink\n !#42 is not a link\n}}}\n\nDisplay:\n !NoHyperLink\n !#42 is not a link\n\n\n== Images ==\n\nUrls ending with `.png`, `.gif` or `.jpg` are no longer automatically interpreted as image links, and converted to `<img>` tags.\n\nYou now have to use the ![[Image]] macro (see below).\n\n\n== Macros ==\n\nMacros are ''custom functions'' to insert dynamic content in a page.\n\nExample:\n{{{\n [[Timestamp]]\n}}}\n\nDisplay:\n [[Timestamp]]\n\nSee WikiMacros for more information, and a list of installed macros.\n\n\n== Processors ==\n\nTrac supports alternative markup formats using WikiProcessors. For example, processors are used to write pages in \n[wiki:WikiRestructuredText reStructuredText] or [wiki:WikiHtml HTML]. \n\nExample 1:\n{{{\n#!html\n<pre class="wiki">{{{\n#!html\n<h1 style="text-align: right; color: blue">HTML Test</h1>\n}}}</pre>\n}}}\n\nDisplay:\n{{{\n#!html\n<h1 style="text-align: right; color: blue">HTML Test</h1>\n}}}\n\n== Miscellaneous ==\n\nFour or more dashes will be replaced by a horizontal line (<HR>)\n\nExample:\n{{{\n ----\n}}}\n\nDisplay:\n----\n\n\n----\nSee also: TracLinks, TracGuide, WikiHtml, WikiMacros, WikiProcessors, TracSyntaxColoring.
/***\nhttp://yummy.pbwiki.com/themes/skin3/screen.css\nCOMMON GRID ELEMENTS\n***/\n\n/*{{{*/\nbody {\n background: #949494;\n color:#63534c;\n font:100% Georgia, Arial, Verdana, Tahoma, sans-serif;\n margin:0 0 23px;\n padding:0;\n text-align:center;\n}\n\n#root {\n text-align:left;\n margin: 0 23px 0;\n min-width:760px;\n background: #fbf9f8;\n position:relative;\n}\n\n\n/****************************************************************\n SUBPAGE SPECIFIC ELEMENTS\n****************************************************************/\n/*\n Header\n*/\n#wrapper-header {\n background: url("images/bg_header.gif") 0 0 repeat-x;\n height: 66px;\n position: relative;\n}\n#header {\n text-align: center;\n padding: 18px 0 0;\n}\n #header h1 {\n background:url("images/logo_small.gif") 0 0 no-repeat;\n position:absolute;\n right:13px;\n top:0;\n margin: 0;\n padding: 0;\n }\n \n #header h1 a {\n display:block;\n height:41px;\n width:51px;\n }\n #header h1 a span {\n display:none;\n }\n\n #header h2 {\n color:#ad0000;\n font:175% Georgia, "Times New Roman", Times, serif;\n margin:0 18px 0 0;\n padding:0;\n display: inline;\n }\n #header h2 a {\n color:#ad0000;\n text-decoration: none;\n }\n #header h2 a:hover {\n text-decoration: underline;\n }\n #header h3 {\n color: #303030;\n font:175% Georgia, "Times New Roman", Times, serif;\n border-left: 2px solid #404040;\n margin:0;\n padding:0 0 0 20px;\n display: inline;\n }\n #header p.premium {\n margin:0 12px 0 -8px;\n padding:0;\n display:inline;height:1px;\n }\n * html #header p.premium {\n height:1px;\n }\n #header p.premium img {\n display:inline;\n vertical-align:baseline;\n }\n /* search-box */\n .search-box {\n position: absolute;\n height: 38px;\n top: 0;\n right:0;\n width: 215px;\n text-align: right;\n }\n\n .search-box form {\n margin:24px 35px 0 0;\n padding:0;\n }\n .search-box form div .input-search {\n height: 17px;\n he\sight: 13px;\n width: 121px;\n w\sidth: 117px;\n padding: 2px;\n margin: 0 3px 0 0;\n vertical-align: middle;\n background: #fff;\n font: normal 68.75% Tahoma, Verdana, Arial, "Times New Roman", Times, serif;\n color: #616161;\n border: none;\n }\n .search-box form div .input-search:focus {\n background: #fffacc;\n color: #272727;\n }\n .search-box form div .button-search {\n height: 17px;\n padding: 0 9px 2px;\n margin: 0;\n vertical-align: middle;\n border: none;\n background: #decfc8;\n font: normal 68.75% Tahoma, Verdana, Arial, "Times New Roman", Times, serif;\n color: #616161;\n }\n\n\n\n/*\n Menu\n*/\n#menu {\n position: absolute;\n top:0;\n left: 50%;\n text-align: center;\n background: url("images/bg_menu-1.gif") 0 0 no-repeat;\n height: 41px;\n margin: 0 0 0 -160px;\n width:320px;\n\n}\n #menu ul {\n margin: 0 auto 0 20px;\n padding: 0 23px 0 0;\n list-style: none;\n background: url("images/bg_menu-2.gif") 100% 0 no-repeat;\n height: 41px;\n display: inline;\n }\n #menu ul:after {\n content: "."; \n display: block; \n height:0; \n clear: both; \n visibility: hidden;\n }\n #menu ul {\n display:block;\n }\n #menu ul li {\n margin: 0;\n padding: 0;\n float: left;\n background: url("images/dots_menu.gif") 100% 10px no-repeat;\n }\n #menu ul li.last {\n background: none;\n }\n #menu ul li a,\n #menu ul li span {\n text-decoration: none;\n color: #646464;\n font: normal 68.75% Tahoma, Verdana, Arial, "Times New Roman", Times, serif;\n padding:13px 12px 11px 12px;\n display: block;\n }\n #menu ul li span {\n text-decoration: underline;\n color:#ad0000;\n }\n #menu ul li a:hover,\n #menu ul li a:hover span {\n color:#ad0000;\n text-decoration: underline;\n cursor:pointer;cursor:hand;\n }\n #menu ul li a span {\n font-size: 100%;\n background: none;\n padding:0;\n text-decoration: none;\n color: #646464;\n }\n\n/*\n wrapper-functional\n*/\n.wrapper-functional {\n position: relative;\n background: url("images/bg_wrapper-functional.gif") 0 0 repeat-x;\n}\n.wrapper-functional:after {\n content: "."; \n display: block; \n height:0; \n clear: both; \n visibility: hidden;\n}\n.wrapper-functional {\n display:block;\n}\n\n /* sub-menu */\n .sub-menu {\n padding: 0 210px 0 0;\n background: url("images/bg_wrapper-functional-1.gif") 0 0 no-repeat;\n }\n .sub-menu ul {\n margin: 0 0 0 25px;\n padding: 12px 0 0;\n list-style: none;\n }\n .sub-menu ul:after {\n content: "."; \n display: block; \n height:0; \n clear: both; \n visibility: hidden;\n }\n .sub-menu ul {\n display:block;\n }\n .sub-menu ul li {\n margin: 0;\n padding: 0;\n float: left;\n background: url("images/dots_submenu.gif") 100% 100% no-repeat;\n }\n .sub-menu ul li a,\n .sub-menu ul li span {\n text-decoration: none;\n color: #fff;\n font: normal 68.75% Tahoma, Verdana, Arial, "Times New Roman", Times, serif;\n padding:7px 13px 5px 13px;\n display: block;\n cursor:pointer;cursor:hand;\n }\n .sub-menu ul li span {\n text-decoration: underline;\n color:#fffdc5;\n }\n .sub-menu ul li a:hover,\n .sub-menu ul li a:hover span,\n .sub-menu ul li.active a,\n .sub-menu ul li.active a span{\n color:#fffdc5;\n text-decoration: none;\n }\n .sub-menu ul li a span {\n font-size: 100%;\n background: none;\n padding:0;\n text-decoration: none;\n color: #fff;\n }\n /* sub-menu-2 */\n .sub-menu-2 {\n background: url("images/bg_wrapper-functional-1.gif") 100% 0 no-repeat;\n position: absolute;\n height: 38px;\n heigh\st: 26px;\n top: 0;\n right:0;\n width: 215px;\n widt\sh: 188px;\n padding:12px 27px 0 0;\n text-align: right;\n font: normal 68.75% Verdana, Arial, "Times New Roman", Times, serif;\n }\n .sub-menu-2 a {\n background: url("images/arrow1.gif") 0 50% no-repeat;\n padding:0 0 0 10px;\n margin:0 10px 0 0;\n color:#ffffff;\n }\n\n/*\n wrapper-functional-sub\n*/\n.wrapper-functional.wrapper-functional-sub {\n background: url("images/bg_wrapper-functional-sub.gif") 0 100% repeat-x;\n}\n .wrapper-functional.wrapper-functional-sub .sub-menu {\n background: url("images/bg_wrapper-functional-sub-1.gif") 0 100% no-repeat;\n padding: 0 0 11px;\n\n }\n .wrapper-functional.wrapper-functional-sub .sub-menu ul {\n margin: 0 0 0 25px;\n padding: 0 0 0;\n list-style: none;\n }\n .wrapper-functional.wrapper-functional-sub .sub-menu ul li {\n background-position:100% 0;\n }\n .wrapper-functional.wrapper-functional-sub .sub-menu ul li a,\n .wrapper-functional.wrapper-functional-sub .sub-menu ul li span {\n padding:8px 13px 7px 13px;\n }\n .wrapper-functional.wrapper-functional-sub .sub-menu ul li a span {\n padding:0;\n }\n .wrapper-functional.wrapper-functional-sub .search-box {\n background: url("images/bg_wrapper-functional-sub-1.gif") 100% 100% no-repeat;\n\n }\n .wrapper-functional.wrapper-functional-sub .search-box form {\n margin:2px 32px 0 0;\n }\n\n\n/*\n last-modified\n*/\n.last-modified {\n background: #e9e8e7;\n color: #606060;\n font: normal 62.5% Verdana, Arial, "Times New Roman", Times, serif;\n padding: 4px 36px 4px;\n}\n .last-modified p a {\n color: #707070;\n }\n/*\n wrapper-information\n*/\n.wrapper-information {\n padding:19px 24px 22px;\n color:#7a7a7a;\n background: url("images/bg_wrapper-information.gif") 0 0 repeat-x;\n}\n .wrapper-information table {\n margin:0;\n padding:0;\n border:0;\n border-collapse:collapse;\n width:100%;\n }\n .wrapper-information table td {\n border:4px solid #e3e3e3;\n vertical-align:top;\n width:33%;\n font:normal 68.75% Verdana, Tahoma, sans-serif;\n }\n .wrapper-information #page-information,\n .wrapper-information #wiki-information{\n background:#ffffff;\n }\n .wrapper-information #wiki-premium {\n /*background:#fcf592;*/\n /*background:#f2eec6;*/\n background:#FFFDDF;\n }\n\n .wrapper-information a { \n color:#7f7f7f;\n }\n\n .wrapper-information h3 {\n font-size:118.18%;\n font-weight:bold;\n margin:0 0 12px;\n padding:10px 11px 9px;\n border-bottom:1px solid #cfcfcf;\n }\n .wrapper-information #wiki-premium h3 {\n font:normal 163.64% Georgia, Verdana, Tahoma, sans-serif;\n /*color:#d13123;*/\n color:#f2d1a6;\n margin:0 17px 12px;\n padding:7px 0 7px;\n border-bottom:1px solid #9d9d9d;\n }\n .wrapper-information p {\n margin:0 17px 15px;\n padding:0;\n line-height:1.5em;\n }\n .wrapper-information p.learn-more {\n font-weight:bold;\n text-align:right;\n margin:0 17px 10px;\n }\n .wrapper-information #wiki-premium {\n color:#7f7f7f;\n }\n .wrapper-information ul {\n margin:0 17px 15px;\n padding:0;\n line-height:1.5em;\n }\n .wrapper-information ul li {\n list-style:none;\n margin:0 0 4px;\n padding:0 0 0 15px;\n background: url("images/arrow1.gif") 0 7px no-repeat;\n }\n .wrapper-information ul.page li {\n padding:0 0 0 20px;\n background: url("images/icon_page.gif") 0 3px no-repeat;\n }\n\n\n/*\n Footer\n*/\n#footer {\n padding: 9px 0;\n font: normal 62.5% Verdana, Arial, "Times New Roman", Times, serif;\n color: #3a3a3a;\n background: #949494;\n}\n#footer:after {\n content: "."; \n display: block; \n height:0; \n clear: both; \n visibility: hidden;\n}\n#footer {\n display:block;\n}\n\n#footer p.f-menu {\n text-align:right;\n}\n#footer p.f-menu a {\n text-decoration:none; \n padding:0 0 0 8px;\n background: url("images/arrow2.gif") 0 50% no-repeat;\n color: #ffffff;\n margin: 0 12px 0 0;\n}\n#footer p.f-menu a.rss {\n margin: 0 6px 0 0;\n}\n #footer p.f-menu img {\n margin:-2px 0 0 8px;\n vertical-align:middle;\n position:relative;\n }\n\n\n\n/*\n Content\n*/\n\n#displaycontent {\n margin: 0 0 0;\n padding: 28px 30px 14px;\n font-size:75%;\n line-height:1.5em;\n}\n\n#displaycontent:after {\n content: " ";\n display: block;\n height:0;\n clear: both;\n visibility: hidden;\n}\n#displaycontent {\n display:block;\n}\n\n/****************************************************************\n COMMON CONTENT ELEMENTS\n****************************************************************/\n\nimg {\n border:0;\n}\n\n/* Links */\n\na {\n color:#ad0000;\n text-decoration:underline;\n}\n\na:hover {\n text-decoration:none;\n}\n\n/* Typography */\n\np {\n margin:0;\n padding:0;\n}\n#displaycontent span.underlined {\n text-decoration: underline;\n}\n#displaycontent span.box {\n border: 1px solid #b8b7b7;\n background:#e2d5cf;\n color: #5c5c5c;\n padding:0 4px;\n}\n#displaycontent h1 {\n font-size: 2em;\n font-weight: bold;\n font-family: Garamond;\n padding: 0;\n margin: 0.67em 0;\n}\n#displaycontent h2 {\n font-size: 1.5em;\n font-weight: bold;\n font-family: Garamond;\n padding: 0;\n margin: 0.83em 0;\n}\n#displaycontent h3 {\n font-size: 1.17em;\n font-weight: bold;\n font-family: Garamond;\n padding: 0;\n margin: 1em 0;\n}\n#displaycontent h4 {\n font-size: 1em;\n font-weight: bold;\n font-family: Garamond;\n padding: 0;\n margin: 1.33em 0;\n}#displaycontent h5 {\n font-size: 0.83em;\n font-weight: bold;\n font-family: Garamond;\n padding: 0;\n margin: 1.67em 0;\n}#displaycontent h6 {\n font-size: 0.67em;\n font-weight: bold;\n font-family: Garamond;\n padding: 0;\n margin: 2.33em 0;\n}\n#displaycontent p {\n padding: 0;\n margin: 0 0 16px;\n}\n#displaycontent blockquote {\n background:#e2d5cf;\n border: 1px solid #b8b7b7;\n color: #63534c;\n font-style: italic;\n width: 85%;\n margin: 0 auto 22px;\n padding: 14px 18px 14px;\n font: normal 100% "Courier New", Courier, Arial, Verdana, "Times New Roman", Times, serif;\n}\n\n/* Lists */\n#displaycontent ul {\n margin-left: 12px;\n padding: 0;\n list-style: none;\n}\n #displaycontent ul li {\n margin: 0;\n padding: 0 0 0 12px;\n background: url("images/dots1.gif") 0 6px no-repeat;\n }\n\n\n/****************************************************************\n CONTENT SPECIFIC ELEMENTS\n****************************************************************/\n\n/*\n SandBox\n*/\n\n#displaycontent p.random-text {\n margin: 0 0 23px;\n}\n\n#displaycontent ul.examples-elements {\n margin: 0;\n padding: 0;\n}\n #displaycontent ul.examples-elements li {\n margin: 0 0 1px;\n padding: 0;\n background: none;\n }\n #displaycontent ul.examples-elements ul {\n margin: 10px 0 13px 12px;\n padding: 0;\n list-style: none;\n }\n #displaycontent ul.examples-elements ul li {\n margin: 0;\n padding: 0 0 0 12px;\n background: url("images/dots1.gif") 0 6px no-repeat;\n }\n\n\n#displaycontent ul.gallery {\n margin:9px 0 0;\n padding: 0;\n}\n#displaycontent ul.gallery:after {\n content: "."; \n display: block; \n height:0; \n clear: both; \n visibility: hidden;\n}\n#displaycontent ul.gallery {\n display:block;\n}\n #displaycontent ul.gallery li {\n margin:0;\n padding: 0;\n background: none;\n float: left;\n margin: 0 25px 14px 0;\n }\n #displaycontent ul.gallery li a {\n border: 5px solid #9a9a99;\n display: block;\n }\n #displaycontent ul.gallery li a:hover {\n border: 5px solid #63534c;\n }\n #displaycontent ul.gallery li a img {\n display: block;\n }\n\n#SideBar {\n background: #eee;\n border-right: 1px solid #666;\n border-bottom: 1px solid #666;\n border-top:1px solid #ccc;\n border-left:1px solid #ccc;\n clear:both; \n float: right;\n font-size:0.8em;\n margin:0 0 0 20px;\n padding:3px;\n width: 200px;\n}\n.SideBarTitle {\n border-bottom:1px solid #666;\n color:#666;\n font-size:1.5em;\n font-weight:bold;\n text-align:center;\n}\n.SideBarTitle a {\n text-decoration:none;\n}\n\n.toc { \n background:#eee; \n border:1px solid #666; \n float:left; \n padding:0 10px 0 30px;\n margin-bottom:10px;\n}\n .toc a { \n color:#666; \n text-decoration:none; \n }\n .toc a:hover { \n text-decoration:underline; \n }\n .toc li { \n color:#666; \n }\n .toc ol {\n padding:0; \n margin:0 0 0 10px; \n font-weight:bold; \n color:#666; \n }\n .toc li ol { \n font-weight:normal; \n }\n .toc li li ol { \n font-size:80% \n }\n\n#displaycontent table {\n border:1px solid #fff;\n border-collapse:collapse;\n margin:10px 0;\n}\n\n #displaycontent table th,\n #displaycontent table td {\n background:#F5E8E3; \n border:2px solid #fff;\n padding:2px 4px;\n }\n\n #displaycontent table th {\n background:#616161;\n color:#fff;\n }\n/*\n Settings - toolbox\n*/\n#settings {\n color: #747474;\n font:11px Verdana, serif;\n} \n #settings h3 {\n color: #494949;\n font:12px Verdana, serif;\n font-weight:normal;\n padding: 0 0 6px;\n margin:0 0 7px;\n border-bottom:1px solid #e4e4e4;\n position:relative;\n }\n #settings .active h3 {\n color: #0367ad;\n }\n #settings-content input, label {\n vertical-align:middle;\n }\n #settings-content input.text {\n font:11px Verdana, serif;\n color:#747474;\n border:1px solid #5f5f5f;\n background:#ffffff;\n height:20px;\n heigh\st:16px;\n padding:4px 0 0 5px;\n }\n #settings-content a {\n color: #494949;\n }\n\n\n/* settings-menu */\n#settings-menu {\n float: left;\n width:173px;\n widt\sh:141px;\n border:1px solid #5f5f5f;\n background:#fff;\n padding:9px 15px 0;\n}\n #settings-menu h3 {\n color: #232323;\n font-weight:bold;\n margin:0 0 10px;\n }\n #settings-menu ul {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n #settings-menu ul li {\n margin: 0 0 12px;\n padding: 0;\n background:none;\n color:#7c7c7c;\n font-weight:bold;\n }\n #settings-menu ul li a {\n font-weight:normal;\n }\n\n/* settings-content */\n#settings-content {\n margin:0 0 0 173px;\n}\n #settings-content .step {\n border:1px solid #5f5f5f;\n background:#fff;\n padding:9px 15px 4px;\n margin: 0 0 10px 14px;\n position:relative;\n }\n #settings-content .active {\n border:3px solid #fffdc5;\n background:#fff;\n padding:7px 13px 2px;\n margin: 0 0 10px 14px;\n }\n \n #settings-content .step p {\n padding:0;\n margin: 0 0 18px;\n }\n /* add-tags */\n #settings-content .step h3 a.help {\n position:absolute;\n right:3px;\n top:0;\n background: url("images/icon_help.gif") 0 0 no-repeat;\n width:15px;\n height:15px;\n }\n #settings-content .step h3 a:hover.help {\n background-position:0 -30px;\n }\n #settings-content .step h3 a.help span {\n display:none;\n }\n #settings-content .step form.add-tags {\n background: url("images/bg_line.gif") 50% 0 repeat-y;\n margin: 0 0 19px;\n padding:0;\n }\n #settings-content .step form.add-tags:after {\n content: "."; \n /*display: block;*/ \n height:0; \n clear: both; \n visibility: hidden;\n }\n #settings-content .step form.add-tags {\n display:block;\n }\n\n #settings-content .step form.add-tags .tag {\n width:50%;\n float:left;\n }\n #settings-content .step form.add-tags .tag label {\n font-weight:bold;\n width:13%;\n float:left;\n margin:4px 0 0;\n }\n #settings-content .step form.add-tags .tag input.text {\n width:80%;\n }\n #settings-content .step form.add-tags .tag p.example {\n font-size:10px;\n width:80%;\n margin:3px 0 8px 13%;\n }\n #settings-content .step form.add-tags .tag .row-submit {\n text-align:center;\n }\n #settings-content .step form.add-tags .tag .row-submit #submit-1 {\n margin:0 auto;\n padding:0;\n }\n #settings-content .step form.add-tags .select {\n width:50%;\n float:left;\n }\n #settings-content .step form.add-tags .select div {\n margin: 0 0 0 7%;\n background:#fffdc5;\n padding: 12px;\n\n }\n #settings-content .step form.add-tags .select div:after {\n content: "."; \n display: block;\n height:0; \n clear: both; \n visibility: hidden;\n }\n #settings-content .step form.add-tags .select div {\n display:block;\n }\n #settings-content .step form.add-tags .select ul {\n width:50%;\n float:left;\n margin: 0 0 0 0;\n }\n #settings-content .step form.add-tags .select ul li {\n font-size:10px;\n margin:0 10px 2px 0;\n padding:0;\n background:none;\n }\n #settings-content .step form.add-tags .select ul li a {\n color:#272727;\n text-decoration:none;\n padding: 0 19px 0 0;\n }\n #settings-content .step form.add-tags .select ul li a:hover {\n text-decoration:none;\n }\n /* submit-wiki */\n #settings-content .step form.submit-wiki {\n text-align:center;\n margin: 17px 0 18px;\n }\n #settings-content .step form.submit-wiki label {\n font-weight:bold;\n margin:0 6px 0 0;\n }\n #settings-content .step form.submit-wiki input.text {\n width:40%;\n margin:0 14px 0 0;\n }\n /* invite-others */\n #settings-content .step p.invite-others {\n margin: 15px 0 14px;\n }\n #settings-content .step p.invite-others a {\n color:#515151;\n padding:0 0 0 8px;\n background: url("images/arrow1.gif") 0 50% no-repeat;\n font-weight:bold;\n margin: 0 0 0 6px;\n }\n /* spread-the-word */\n #settings-content .step table.spread-the-word {\n margin: 0 0 10px;\n width:100%;\n border:none;\n }\n #settings-content .step table.spread-the-word th {\n background: none;\n color:#747474;\n font-weight:bold;\n text-align: center;\n border:none;\n padding:0 12px 4px;\n font-size:11px;\n }\n #settings-content .step table.spread-the-word td {\n background: #f1f2f4;\n color:#444444;\n text-align: center;\n border:none;\n border-bottom:1px solid #ffffff;\n padding:8px 12px;\n vertical-align:middle;\n font-size:11px;\n }\n #settings-content .step table.spread-the-word td blockquote {\n background: #ffffff;\n color:#444444;\n border:1px solid #c0cdab;\n padding:14px 20px;\n margin:0;\n width:auto;\n text-align:left;\n }\n #settings-content .step table.spread-the-word td blockquote p {\n padding:0;\n margin:0;\n }\n #settings-content .step table.spread-the-word td blockquote p span.nobr {\n /* white-space:nowrap; */\n }\n #settings-content .step table.spread-the-word td a.visit-pbwiki-1 {\n background: url("images/bg_visit-pbwiki-1.gif") 0 0 no-repeat;\n width:171px;\n height:60px;\n display:block;\n margin:0 auto;\n }\n #settings-content .step table.spread-the-word td a:hover.visit-pbwiki-1 {\n background-position:0 -120px;\n }\n #settings-content .step table.spread-the-word td a.visit-pbwiki-1 span{\n display:none;\n }\n #settings-content .step table.spread-the-word td a.visit-pbwiki-2 {\n background: url("images/bg_visit-pbwiki-2.gif") 0 0 no-repeat;\n width:150px;\n height:150px;\n display:block;\n margin:0 auto;\n }\n #settings-content .step table.spread-the-word td a:hover.visit-pbwiki-2 {\n background-position:0 -300px;\n }\n #settings-content .step table.spread-the-word td a.visit-pbwiki-2 span{\n display:none;\n }\n #settings-content .step table.spread-the-word tr.odd td {\n background: #f7f8f9;\n }\n /* add-more */\n #settings-content .step form.add-more {\n margin: 0 auto 13px;\n text-align:center;\n }\n #settings-content .step form.add-more div.row {\n margin: 0 0 20px 0;\n }\n #settings-content .step form.add-more input.checkbox {\n margin: 0 5px 0 0;\n }\n #settings-content .step form.add-more label {\n color:#444;\n margin: 0 14px 0 0;\n padding:3px 0 3px 25px;\n }\n #settings-content .step form.add-more label.del {\n background: url("/ficons/logo_small_del.icio.us.gif") 0 50% no-repeat;\n }\n #settings-content .step form.add-more label.digg {\n background: url("/ficons/logo_small_digg.gif") 0 50% no-repeat;\n }\n #settings-content .step form.add-more label.reddit {\n background: url("/ficons/logo_small_reddit.gif") 0 50% no-repeat;\n padding:3px 0 3px 22px;\n }\n #settings-content .step form.add-more label.furl {\n background: url("/ficons/logo_small_furl.gif") 0 50% no-repeat;\n padding:3px 0 3px 23px;\n }\n #settings-content .step form.add-more label.spurl {\n background: url("/ficons/logo_small_spurl.gif") 0 50% no-repeat;\n padding:3px 0 3px 21px;\n }\n #settings-content .step form.add-more #submit-3 {\n margin:0 auto;\n padding:0;\n }\n\n /* saved-step */\n #settings-content .saved-step {\n background:#fffdcb;\n width:100%;\n position:absolute;\n left:0;\n top:0;\n text-align:center;\n -moz-opacity:0.8;\n opacity:0.8;\n }\n #settings-content .saved-step div {\n position:absolute;\n left:50%;\n width:80%;\n }\n #settings-content .saved-step h3 {\n color:#655b2d;\n font-size:14px;\n font-weight:bold;\n padding:2px 0 7px 0;\n border-bottom:1px solid #d0cc9b;\n text-align:center;\n }\n #settings-content .saved-step h3 img {\n margin-right:8px;\n vertical-align:middle;\n }\n\n #settings-content .saved-step p {\n color:#4b4b4b;\n font-size:12px;\n clear:left;\n margin:0;\n }\n\n.upsell { \n border:2px solid green;\n background:#ccffcc;\n padding:10px; \n}\n.msg { \n padding-bottom:0px; \n margin-bottom: 10px; \n}\n/*}}}*/