config.options.chkHttpReadOnly = false;\n
|!Format |!Codes used|\n|''Bold'' |{{{''Bold'' }}}|\n|==Strike== |{{{==Strike== }}}|\n|__Underline__ |{{{__Underline__ }}}|\n|//Italic// |{{{//Italic// }}}|\n|Superscript: 2^^3^^=8 |{{{Superscript: 2^^3^^=8 }}}|\n|Subscript: a~~ij~~ = -a~~ji~~|{{{Subscript: a~~ij~~ = -a~~ji~~}}}|\n|@@highlight@@ highlighting. |{{{@@highlight@@ highlighting. }}}|\n|@@color(green):green colored@@ |{{{@@color(green):green colored@@ }}}|\n|@@bgcolor(#ff0000): bg red colored@@ |{{{@@bgcolor(#ff0000): bg red colored@@ }}}|\n|@@bgcolor(#ff0000):color(#ffffff):red colored@@ |{{{@@bgcolor(#ff0000):color(#ffffff):red colored@@ }}}|\n\n!Header Level 1 ({{{!Header Level 1}}})\n!!Header Level 2 ({{{!!Header Level 2}}})\n!!!Header Level 3 ({{{!!!Header Level 3}}})\n!!!!Header Level 4 ({{{!!!!Header Level 4}}})\n!!!!!Header Level 5 ({{{!!!!!Header Level 5}}})\n\n!!!Unordered Lists (control through CSS in StyleSheet, see StyleSheetLayout)\n*Item ({{{*Item}}})\n**Sub Item ({{{**Sub Item}}})\n***Sub Sub Item ({{{***Sub Sub Item}}})\n****Sub Sub Sub Item ({{{****Sub Sub Sub Item}}})\n*****Sub Sub Sub Sub Item ({{{*****Sub Sub Sub Sub Item}}})\n\n!!!Ordered Lists (control through CSS in StyleSheet, see StyleSheetLayout)\n#Item 1 ({{{#Item 1}}})\n##Item 1.a ({{{##Item 1.a}}})\n###Item 1.a.i ({{{{###Item 1.a.i}}})\n####Item 1.a.i.1 ({{{####Item 1.a.i.1}}})\n#####Item 1.a.i.1a ({{{#####Item 1.a.i.1a}}})\n\n!!!Mixed Lists (unordered and order together)\n*Unordered Item ({{{*Unordered Item}}})\n##Sub Item 1 ({{{##Sub Item 1}}})\n##Sub Item 2 ({{{##Sub Item 2}}})\n***Unordered Sub Sub Item ({{{***Unordered Item}}})\n##Item 3 ({{{###Item 3}}})\n*Unordered Item ({{{*Unordered Item}}})\n**Unordered Sub Item ({{{***Unordered Sub Item}}})\n###Sub Sub Item 1 ({{{###Sub Sub Item 1}}})\n###Sub Sub Item 2 ({{{###Sub Sub Item 2}}})\n**Unordered Sub Item ({{{***Unordered Sub Item}}})\n###Sub Sub Item 1 ({{{###Sub Sub Item 1}}})\n###Sub Sub Item 2 ({{{###Sub Sub Item 2}}})\n####Sub Sub Sub Item 2.a ({{{####Sub Sub Item 2.a}}})\n####Sub Sub Sub Item 2.b ({{{####Sub Sub Item 2.b}}})\n###Sub Sub Item 2 ({{{###Sub Sub Item 2}}})\n**Unordered Sub Item ({{{***Unordered Sub Item}}})\n*Unordered Item ({{{*Unordered Item}}})\n\n!!!Other Formatting Items\n*Monospace Text - use {/{/{/ and }/}/}/ around text\n\n
/***\n| Name:|CloseOnCancelPlugin|\n| Description:|Closes the tiddler if you click new tiddler then cancel. Default behaviour is to leave it open|\n| Version:|6.9.3|\n| Date:|30-Sep-2006|\n| Source:|http://mptw.tiddlyspot.com/#CloseOnCancelPlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\n| CoreVersion:|2.1.x|\n***/\n//{{{\nmerge(config.commands.cancelTiddler,{\n\n handler_orig_closeUnsaved: config.commands.cancelTiddler.handler,\n\n handler: function(event,src,title) {\n this.handler_orig_closeUnsaved(event,src,title);\n if (!store.tiddlerExists(title) && !store.isShadowTiddler(title))\n story.closeTiddler(title,true);\n return false;\n }\n\n});\n\n//}}}\n\n
Background: #fff\nForeground: #000\nPrimaryPale: #69c\nPrimaryLight: #36a\nPrimaryMid: #025\nPrimaryDark: #012\nSecondaryPale: #ffc\nSecondaryLight: #fe8\nSecondaryMid: #db4\nSecondaryDark: #520\nTertiaryPale: #eee\nTertiaryLight: #ccc\nTertiaryMid: #999\nTertiaryDark: #666\nError: #f88
|Version|<<tiddler MonkeyGTDVersion>>|\n|[[Upgrade]]|Upgrade to the latest MonkeyGTD|\n|[[Area]]|To add/remove Areas of Responsibilty|\n|[[Role]]|To add/remove Roles|\n|[[ViewDashboardTemplate]]|This defines the dashboards and lists|\n|[[ViewPanelTemplate]]|This controls the toolbar panels|\n|MainMenu|Defines the menu bar|\n|DefaultTiddlers|Defines what to show at startup|\n|SiteTitle|Site title|\n|SiteSubtitle|Site subtitle|\n|GTDComponent|For advanced use only|\n\n!Notes\n* I have hard coded references to "Professional" and "Personal" in a couple of places so it's better to just use those at least for now.\n* If you add a new context/area etc you won't see it until you click "refresh" on one of your tiddler toolbars\n\n!What's New\n* 24 Oct 06\n** Drop down select for projects and areas as suggested by Ken Girard.\n
//{{{\nconfig.options.chkHttpReadOnly = false; // means web visitors can experiment with your site by clicking edit\nconfig.options.chkInsertTabs = true; // tab inserts a tab when editing a tiddler\nconfig.views.wikified.defaultText = ""; // don't need message when a tiddler doesn't exist\nconfig.views.editor.defaultText = ""; // don't need message when creating a new tiddler \nif (config.options.txtUserName == "BJBackitis")\n config.options.txtUserName = "TampaGeek"; // override cookie so that name is constant; \nconfig.options.chkDsplGTDTypeView = false; // initially override so no GTD type in view\nconfig.options.chkDsplGTDTypeEdit = false; // initially override so no GTD type in edit\n\n//}}}\n
\n\n//{{{\nmerge(config.shadowTiddlers,{\n\nTicklerTiddlerDashboard:[\n "<table width=\s"100%\s"><tr>",\n "<td width=\s"50%\s" style=\s"vertical-align:top\s">",\n "",\n "<div macro=\s"listByTag title:'Current Ticklers'",\n " tags:'!Processed'",\n " view:tickler",\n " sort:tickleDate",\n " where:'tiddler.tickleDate() <= (new Date()).convertToLocalYYYYMMDDHHMM()'",\n " \s"></div>",\n "",\n "<div macro=\s"listByTag title:'Upcoming Ticklers'",\n " tags:'!Processed'",\n " view:tickler",\n " sort:tickleDate",\n " where:'tiddler.tickleDate() > (new Date()).convertToLocalYYYYMMDDHHMM()'",\n " \s"></div>",\n "",\n "",\n "</td>",\n "<td width=\s"50%\s" style=\s"vertical-align:top\s">",\n "<!--",\n "<div macro=\s"listByTag title:'Ticklers by Project'",\n " group:Project",\n " \s"></div>",\n "-->",\n "",\n "",\n "</td></tr></table>",\n ""\n].join("\sn"),\n\nActionPanel:[\n "<tr><td class=\s"label\s">Role:</td><td><span macro=\s"checkboxList Role\s"></span></td></tr>",\n "<tr macro=\s"showWhen tiddler.getProject() == ''\s"><td class=\s"label\s">Area:</td><td><span macro=\s"dropdownSelect Area\s"></span></td></tr>",\n "<tr><td class=\s"label\s">Project:</td><td><span macro=\s"dropdownSelect Project\s"></span></td></tr>",\n "<tr><td class=\s"label\s">Context:</td><td><span macro=\s"checkboxList Context\s"></span></td></tr>",\n "<tr><td class=\s"label\s">Status:</td><td><span macro=\s"checkboxList ActionStatus\s"></span></td></tr>",\n ""\n].join("\sn"),\n\nActionTiddlerDashboard:[\n "<table width=\s"100%\s"><tr>",\n "<td width=\s"50%\s" style=\s"vertical-align:top\s">",\n "",\n "<div macro=\s"listByTag title:'Actions by Status'",\n " tags:!Done",\n " group:ActionStatus",\n " \s"></div>",\n "",\n "</td>",\n "<td width=\s"50%\s" style=\s"vertical-align:top\s">",\n "",\n "<div macro=\s"listByTag title:'Actions by Role'",\n " group:Role",\n " tags:!Done",\n " \s"></div>",\n "",\n "",\n "",\n "</td></tr></table>",\n ""\n].join("\sn"),\n\nAreaDashboard:[\n "<table width=\s"100%\s"><tr>",\n "<td width=\s"50%\s" style=\s"vertical-align:top\s">",\n "",\n "<div macro=\s"listByTag title:Projects",\n " tags:Project",\n " \s"></div>",\n "",\n "</td>",\n "<td width=\s"50%\s" style=\s"vertical-align:top\s">",\n "",\n "<div macro=\s"listByTag title:'Next Actions'",\n " tags:'Next && Action && !Done'",\n " view:action_proj",\n " \s"></div>",\n "",\n "<div macro=\s"listByTag title:'Waiting For'",\n " tags:'[(Waiting For)] && Action && !Done'",\n " view:action_proj",\n " \s"></div>",\n "",\n "<div macro=\s"listByTag title:'Reference'",\n " tags:'Reference'",\n " \s"></div>",\n "",\n "<div macro=\s"listByTag title:'Sub Areas'",\n " tags:Area",\n " \s"></div>",\n "",\n "</td>",\n "</td></tr></table>",\n ""\n].join("\sn"),\n\nAreaPanel:[\n "<tr><td class=\s"label\s">Role:</td><td><span macro=\s"checkboxList Role\s"></span></td></tr>",\n "",\n "<tr><td class=\s"label\s"></td><td>",\n " <span macro=\s"newTiddlerPlus title:'New Project' label:'new project' gtdtype: Project gtdparent: * gtdparenttype: Area tag: Project * \s"></span>",\n " <span macro=\s"newTiddlerPlus title:'New Action' label:'new next action' gtdtype: Action gtdparent: * gtdparenttype: Area tag: Action Next *\s"></span>",\n " <span macro=\s"newTiddlerPlus title:'New Action' label:'new waiting action' gtdtype: Action gtdparent: * gtdparenttype: Area tag: Action 'Waiting For' *\s"></span>",\n " <span macro=\s"newTiddlerPlus title:'New Action' label:'new future action' gtdtype: Action gtdparent: * gtdparenttype: Area tag: Action *\s"></span>",\n "</td></tr>",\n ""\n].join("\sn"),\n\nAreaTiddlerDashboard:[\n "<table width=\s"100%\s"><tr>",\n "<td width=\s"33%\s" style=\s"vertical-align:top\s">",\n "",\n "<div macro=\s"listByTag title:'Areas by Role'",\n " group:Role",\n " \s"></div>",\n "",\n "</td>",\n "<td width=\s"33%\s" style=\s"vertical-align:top\s">",\n "",\n "<div macro=\s"listByTag title:'Projects by Area'",\n " tags:Project",\n " group:Area",\n " mode:global",\n " \s"></div>",\n "",\n "</td>",\n "</tr></table>",\n ""\n].join("\sn"),\n\nContextDashboard:[\n "<table width=\s"100%\s">",\n "<tr>",\n "<td valign=\s"top\s" width=\s"50%\s">",\n " <div macro=\s"listByTag title:'Next Actions'",\n " tags:'Action && Next && !Done'",\n " view:action_proj",\n " group:Role",\n " \s"></div>",\n "</td>",\n "<td valign=\s"top\s" width=\s"50%\s">",\n " <div macro=\s"listByTag title:'Waiting For Actions'",\n " tags:'Action && [(Waiting For)] && !Next && !Done'",\n " view:action_proj",\n " group:Role",\n " \s"></div>",\n "",\n " <div macro=\s"listByTag title:'Future Actions'",\n " tags:'Action && ![(Waiting For)] && !Next && !Done'",\n " view:action_proj",\n " group:Role",\n " \s"></div>",\n "</td>",\n "</tr>",\n "</table>",\n ""\n].join("\sn"),\n\nContextTiddlerDashboard:[\n "<table width=\s"100%\s"><tr>",\n "<td style=\s"vertical-align:top\s">",\n "",\n "<div macro=\s"listByTag title:'Contexts'",\n " \s"></div>",\n "",\n "</td>",\n "</tr></table>",\n ""\n].join("\sn"),\n\nMainDashboard:[\n "<table width=\s"100%\s">",\n "<tr>",\n "<td valign=\s"top\s" width=\s"50%\s">",\n "",\n "",\n " <div macro=\s"listByTag title:'Current Ticklers'",\n " tags:'Tickler && !Processed'",\n " view:tickler",\n " sort:tickleDate",\n " where:'tiddler.tickleDate() <= (new Date()).convertToLocalYYYYMMDDHHMM()'",\n " mode:global",\n " \s"></div>",\n "",\n " <!-- sorry about hard coded Roles. will be gone eventually -->",\n "",\n " <div macro=\s"listByTag title:'Professional Next Actions'",\n " tags:'Action && Next && !Done && Professional'",\n " view:action_proj",\n " group:Context",\n " mode:global",\n " \s"></div>",\n "",\n " <div macro=\s"listByTag title:'Professional Waiting For'",\n " tags:'Action && [(Waiting For)] && !Done && Professional'",\n " view:action_proj",\n " group:Context",\n " mode:global",\n " \s"></div>",\n "",\n " <div macro=\s"listByTag title:'Upcoming Ticklers'",\n " tags:'Tickler && !Processed'",\n " view:tickler",\n " sort:tickleDate",\n " where:'tiddler.tickleDate() > (new Date()).convertToLocalYYYYMMDDHHMM()'",\n " mode:global",\n " \s"></div>",\n "",\n "",\n "</td>",\n "<td valign=\s"top\s" width=\s"50%\s">",\n "",\n " <div macro=\s"listByTag title:'Personal Next Actions'",\n " tags:'Action && Next && !Done && Personal'",\n " view:action_proj",\n " group:Context",\n " mode:global",\n " \s"></div>",\n "",\n " <div macro=\s"listByTag title:'Personal Waiting For'",\n " tags:'Action && [(Waiting For)] && !Done && Personal'",\n " view:action_proj",\n " group:Context",\n " mode:global",\n " \s"></div>",\n "",\n " <div macro=\s"listByTag title:'Other Next Actions'",\n " tags:'Action && Next && !Done && !Personal && !Professional'",\n " view:action_proj",\n " group:Context",\n " mode:global",\n " \s"></div>",\n "",\n "</td>",\n "</tr>",\n "</table>",\n ""\n].join("\sn"),\n\nMainDashboardPanel:[\n "<tr><td class=\s"label\s"></td><td>",\n " <span macro=\s"newTiddlerPlus title:'New Project' label:'new project' gtdtype: Project tag: Project\s"></span>",\n " <span macro=\s"newTiddlerPlus title:'New Action' label:'new next action' gtdtype: Action tag: Action Next\s"></span>",\n " <span macro=\s"newTiddlerPlus title:'New Action' label:'new waiting action' gtdtype: Action tag: Action GTD 'Waiting For'\s"></span>",\n " <span macro=\s"newTiddlerPlus title:'New Action' label:'new future action' gtdtype: Action tag: Action\s"></span>",\n " <span macro=\s"newTiddlerPlus title:'New Tickler' label:'new tickler' gtdtype: Tickler tag: Tickler\s"></span>",\n " <span macro=\s"newTiddlerPlus title:'New Context' label:'new context' gtdtype: Context tag: Context\s"></span>",\n " <span macro=\s"newTiddlerPlus title:'New Area' label:'new area' gtdtype: Area tag: Area\s"></span>",\n "</td></tr>",\n ""\n].join("\sn"),\n\nNextTiddlerDashboard:[\n "<table width=\s"100%\s"><tr>",\n "<td width=\s"33%\s" style=\s"vertical-align:top\s">",\n "",\n "<div macro=\s"listByTag title:'Next Actions by Context'",\n " tags:!Done",\n " view:action_proj",\n " group:Context",\n " \s"></div>",\n "",\n "</td>",\n "<td width=\s"34%\s" style=\s"vertical-align:top\s">",\n "",\n "<div macro=\s"listByTag title:'Next Actions by Role'",\n " tags:!Done",\n " view:action_proj",\n " group:Role",\n " \s"></div>",\n "",\n "</td><td width=\s"34%\s" style=\s"vertical-align:top\s">",\n "",\n "<div macro=\s"listByTag title:'Next Actions by Project'",\n " tags:!Done",\n " view:action",\n " group:Project",\n " \s"></div>",\n "",\n "",\n "</td></tr></table>",\n ""\n].join("\sn"),\n\nProjectDashboard:[\n "<table style=\s"width:100%\s"><tr>",\n "",\n "<td valign=\s"top\s" width=\s"33%\s" cellspacing=\s"0\s" border=\s"0\s">",\n "",\n " <div macro=\s"listByTag title:'Next Actions'",\n " tags:'Action && Next && !Done'",\n " view:action",\n " group:Context",\n " \s"></div>",\n "",\n " <div macro=\s"listByTag title:'Waiting For'",\n " tags:'Action && [(Waiting For)] && !Done'",\n " view:action",\n " \s"></div>",\n "",\n "</td><td valign=\s"top\s" width=\s"34%\s">",\n "",\n " <div macro=\s"listByTag title:'Ticklers'",\n " tags:'Tickler && !Done'",\n " \s"></div>",\n "",\n "",\n " <div macro=\s"listByTag title:'Sub Projects'",\n " tags:'Project'",\n " \s"></div>",\n "",\n " <div macro=\s"listByTag title:'Future Actions'",\n " tags:'Action && ![(Waiting For)] && !Next && !Done'",\n " view:action",\n " \s"></div>",\n "",\n "</td><td valign=\s"top\s" width=\s"33%\s">",\n "",\n " <div macro=\s"listByTag title:'Reference'",\n " tags:'Reference'",\n " \s"></div>",\n "",\n " <div macro=\s"listByTag title:'Recently Done'",\n " tags:'Action && Done'",\n " limit:10",\n " view:action_plain",\n " sortBy:-modified",\n " \s"></div>",\n "",\n "</td>",\n "</tr></table>",\n ""\n].join("\sn"),\n\nProjectPanel:[\n "<tr><td class=\s"label\s">Role:</td><td><span macro=\s"checkboxList Role\s"></span></td></tr>",\n "<!-- <tr><td class=\s"label\s">Area:</td><td><span macro=\s"checkboxList Area\s"></span></td></tr> -->",\n "<tr macro=\s"showWhenTagged Professional\s"><td class=\s"label\s">Area:</td><td><span macro=\s"dropdownSelect Area && Professional\s"></span></td></tr>",\n "<tr macro=\s"showWhenTagged Personal\s"><td class=\s"label\s">Area:</td><td><span macro=\s"dropdownSelect Area && Personal\s"></span></td></tr>",\n "<tr macro=\s"hideWhen tiddler.tags.containsAny(['Professional','Personal'])\s"><td class=\s"label\s">Area:</td><td><span macro=\s"dropdownSelect Area\s"></span></td></tr>",\n "<tr><td class=\s"label\s">Status:</td><td><span macro=\s"checkboxList ProjectStatus\s"></span></td>",\n "",\n "<tr><td class=\s"label\s"></td><td>",\n " <span macro=\s"newTiddlerPlus title:'New Action' label:'new next action' gtdtype: Action gtdparent: * gtdparenttype: Project tag: Action Next *\s"></span>",\n " <span macro=\s"newTiddlerPlus title:'New Action' label:'new waiting action' gtdtype: Action gtdparent: * gtdparenttype: Project tag: Action 'Waiting For' *\s"></span>",\n " <span macro=\s"newTiddlerPlus title:'New Action' label:'new future action' gtdtype: Action gtdparent: * gtdparenttype: Project tag: Action *\s"></span>",\n " <span macro=\s"newTiddlerPlus title:'New Project' label:'new sub-project' gtdtype: Project gtdparent: * gtdparenttype: Project tag: Project *\s"></span>",\n " <span macro=\s"newTiddlerPlus title:'New Tickler' label:'new tickler' gtdtype: Tickler gtdparent: * gtdparenttype: Project tag: Tickler *\s"></span>",\n " <!-- <span macro=\s"newTiddlerPlus title:'New Context' label:'new context' gtdtype: Context tag: Context\s"></span> -->",\n " <!-- <span macro=\s"newTiddlerPlus title:'New Area' label:'new area' gtdtype: Area tag: Area\s"></span> -->",\n "</td></tr>",\n ""\n].join("\sn"),\n\nProjectTiddlerDashboard:[\n "<table width=\s"100%\s"><tr>",\n "<td width=\s"50%\s" style=\s"vertical-align:top\s">",\n "",\n "<div macro=\s"listByTag title:'Projects by Area'",\n " tags:!Complete",\n " group:Area",\n " \s"></div>",\n "",\n "</td>",\n "<td width=\s"50%\s" style=\s"vertical-align:top\s">",\n "",\n "<div macro=\s"listByTag title:'Projects by Role'",\n " group:Role",\n " tags:!Complete",\n " sort:-title",\n " \s"></div>",\n "",\n "",\n "",\n "</td></tr></table>",\n "",\n "",\n ""\n].join("\sn"),\n\nRoleDashboard:[\n "<table width=\s"100%\s"><tr>",\n "<td width=\s"50%\s" style=\s"vertical-align:top\s">",\n "",\n "<div macro=\s"listByTag title:'Next Actions'",\n " tags:'Next && Action && !Done && ![(Waiting For)]'",\n " view:action_proj",\n " group:Context",\n " \s"></div>",\n "",\n "<div macro=\s"listByTag title:'Waiting For'",\n " tags:'[(Waiting For)] && Action && !Done'",\n " view:action_proj",\n " \s"></div>",\n "",\n "</td>",\n "<td width=\s"50%\s" style=\s"vertical-align:top\s">",\n "",\n "",\n "<div macro=\s"listByTag title:Projects",\n " tags:'Project && !Complete && ![(Someday/Maybe)]'",\n " group:Area",\n " \s"></div>",\n "",\n "<div macro=\s"listByTag title:'Someday/Maybe'",\n " tags:'Project && !Complete && [(Someday/Maybe)]'",\n " group:Area",\n " \s"></div>",\n "",\n "",\n "<div macro=\s"listByTag title:Areas",\n " tags:Area",\n " \s"></div>",\n "",\n "</td></tr></table>",\n ""\n].join("\sn"),\n\nRolePanel:[\n "<tr><td class=\s"label\s"></td><td>",\n "<span macro=\s"newTiddlerPlus title:'New Area' label:'new area' gtdtype: Area gtdparent: * gtdparenttype: Role tag: Area *\s"></span>",\n "<!-- <span macro=\s"newTiddlerPlus title:'New Project' label:'new project' gtdtype: Project gtdparent: * gtdparenttype: Role tag: Project *\s"></span> -->",\n "</td></tr>",\n ""\n].join("\sn"),\n\nRoleTiddlerDashboard:[\n "<table width=\s"100%\s"><tr>",\n "<td width=\s"33%\s" style=\s"vertical-align:top\s">",\n "",\n "<div macro=\s"listByTag title:'Roles'",\n " \s"></div>",\n "",\n "</td>",\n "<td width=\s"33%\s" style=\s"vertical-align:top\s">",\n "",\n "<div macro=\s"listByTag title:'Areas by Role'",\n " tags:Area",\n " group:Role",\n " mode:global",\n " \s"></div>",\n "",\n "",\n "",\n "</td>",\n "",\n "</tr></table>",\n ""\n].join("\sn"),\n\nTicklerPanel:[\n "<tr><td class=\s"label\s">Role:</td><td><span macro=\s"checkboxList Role\s"></span></td></tr>",\n "<tr><td class=\s"label\s">Processed:</td><td><span macro=\s"toggleTag Processed\s"></span></td></tr>",\n "<tr><td class=\s"label\s">Tickler:</td><td>",\n "<tr><td class=\s"label\s">Date:</td><td>",\n "<span macro=\s"view mgtd.tmonth\s"></span>&nbsp;",\n "<span macro=\s"view mgtd.tday\s"></span>,",\n "<span macro=\s"view mgtd.tyear\s"></span>",\n "<!--",\n " <table class=\s"ticklerDate\s">",\n " <tr>",\n " <td macro=\s"hideWhen store.getValue('MonkeyGTDSettings','mgtd.usemdy')=='true'\s" align=\s"right\s"><span macro=\s"view mgtd.tday\s"></span></td>",\n " <td macro=\s"showWhen store.getValue('MonkeyGTDSettings','mgtd.usemdy')=='true'\s" align=\s"right\s"><span macro=\s"view mgtd.tmonth\s"></span></td>",\n " <td>/</td>",\n " <td macro=\s"hideWhen store.getValue('MonkeyGTDSettings','mgtd.usemdy')=='true'\s" align=\s"center\s"><span macro=\s"view mgtd.tmonth\s"></span></td>",\n " <td macro=\s"showWhen store.getValue('MonkeyGTDSettings','mgtd.usemdy')=='true'\s" align=\s"center\s"><span macro=\s"view mgtd.tday\s"></span></td>",\n " <td>/</td>",\n " <td align=\s"left\s" macro=\s"view mgtd.tyear\s"></td>",\n " </tr>",\n " </table>",\n "-->",\n "</td></tr>",\n ""\n].join("\sn")\n\n});\n//}}}\n
//{{{\n//\n// Temporary fix for Date.formatString problem where "mmm" (for short month) is not getting translated properly.\n// Instead of using "mmm" for short month, use "MMM" instead; use "MMMM" for long month\n//\n\nDate.prototype.hijack_formatString = Date.prototype.formatString;\n\n// Substitute date components into a string\nDate.prototype.formatString = function(template)\n{\n var t = template.replace(/0hh12/g,String.zeroPad(this.getHours12(),2));\n t = t.replace(/hh12/g,this.getHours12());\n t = t.replace(/0hh/g,String.zeroPad(this.getHours(),2));\n t = t.replace(/hh/g,this.getHours());\n t = t.replace(/0mm/g,String.zeroPad(this.getMinutes(),2));\n t = t.replace(/mm/g,this.getMinutes());\n t = t.replace(/0ss/g,String.zeroPad(this.getSeconds(),2));\n t = t.replace(/ss/g,this.getSeconds());\n t = t.replace(/[ap]m/g,this.getAmPm().toLowerCase());\n t = t.replace(/[AP]M/g,this.getAmPm().toUpperCase());\n t = t.replace(/wYYYY/g,this.getYearForWeekNo());\n t = t.replace(/wYY/g,String.zeroPad(this.getYearForWeekNo()-2000,2));\n t = t.replace(/YYYY/g,this.getFullYear());\n t = t.replace(/YY/g,String.zeroPad(this.getFullYear()-2000,2));\n t = t.replace(/sMMM/g,config.messages.dates.shortMonths[this.getMonth()]);\n t = t.replace(/MMM/g,config.messages.dates.months[this.getMonth()]);\n t = t.replace(/0MM/g,String.zeroPad(this.getMonth()+1,2));\n t = t.replace(/MM/g,this.getMonth()+1);\n t = t.replace(/0WW/g,String.zeroPad(this.getWeek(),2));\n t = t.replace(/WW/g,this.getWeek());\n t = t.replace(/DDD/g,config.messages.dates.days[this.getDay()]);\n t = t.replace(/ddd/g,config.messages.dates.shortDays[this.getDay()]);\n t = t.replace(/0DD/g,String.zeroPad(this.getDate(),2));\n t = t.replace(/DDth/g,this.getDate()+this.daySuffix());\n t = t.replace(/DD/g,this.getDate());\n return t;\n}\n\n//}}}
[[Welcome]]\n[[Dashboard]]\n
<!--{{{-->\n\n<!--\n<div style="display:none" macro="showWhen tiddler.tags.containsAll(['GTD','Action']) || tiddler.title == 'New Action'">\n-->\n\n<div macro='showWhen (store.tiddlerExists(tiddler.title) && tiddler.fields["gtdtype"] != undefined && tiddler.fields["gtdtype"] == "Action") || tiddler.title == "New Action"'>\n <span class="hideIt">Project field (not used yet):</span><span class="hideIt" macro="edit mgtd.project"></span>\n</div>\n\n<!--\n<div macro="showWhen tiddler.tags.containsAll(['GTD','Tickler']) || tiddler.title == 'New Tickler'">\n-->\n\n\n<div macro='showWhen (store.tiddlerExists(tiddler.title) && tiddler.fields["gtdtype"] != undefined && tiddler.fields["gtdtype"] == "Tickler") || tiddler.title == "New Tickler"'>\n\n <table><tr>\n<tr><td align="right"><b>Date:</b></td><td>\n\n<span\n macro="select mgtd.tday '1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31' "></span>-<span\n macro="select mgtd.tmonth {{config.messages.dates.shortMonths.join(' ')}} "></span>-<span\n macro="select mgtd.tyear '2006 2007 2008' "></span>\n</td></tr>\n\n<tr><td align="right"><b>Time:</b></td><td>\n\n<span\n macro="select mgtd.thour '00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23' "></span>:<span\n macro="select mgtd.tminute '00 05 10 15 20 25 30 35 40 45 50 55' "></span>\n\n</td></tr>\n\n</table>\n\n</div>\n\n\n\n<!--}}}-->\n
<!--{{{-->\n\n<div style="display:none" macro="showWhen tiddler.tags.containsAll(['GTD','Action']) || tiddler.title == 'New Action'">\n <span>Project field (not used yet):</span><span macro="edit mgtd.project"></span>\n</div>\n<div macro="showWhen tiddler.tags.containsAll(['GTD','Tickler']) || tiddler.title == 'New Tickler'">\n\n <table>\n <tr><td class="editLabel" valign="top" rowspan="2">Tickler</td>\n <td class="editLabel">Month</td><td class="editLabel">Day</td><td class="editLabel">Year</td></tr>\n <tr>\n <td class="shorterEdit" macro="edit mgtd.tmonth"></td>\n <td class="shorterEdit" macro="edit mgtd.tday"></td>\n <td class="shorterEdit" macro="edit mgtd.tyear"></td>\n </tr>\n </table>\n\n</div>\n\n<!--}}}-->\n
<!--{{{-->\n<div class="toolbar" macro="toolbar +saveTiddler closeOthers -cancelTiddler deleteTiddler"></div>\n<div>\n<span macro="showWhenExists GTDTitleTemplate">[[GTDTitleTemplate]]</span>\n<span class="title" macro="view title"></span>\n</div>\n<div class="editLabel">Title</div><div class="editor" macro="edit title"></div>\n<div macro="showWhenExists EditPanelTemplate">[[EditPanelTemplate]]</div>\n<div class="editor" macro="edit text"></div>\n\n<div macro="showWhen config.options.chkDsplGTDTypeEdit == true">\n<div class="editLabel">GTDType</div><div class="editor" macro="edit gtdtype"></div>\n<div class="editLabel">GTDParent</div><div class="editor" macro="edit gtdparent"></div>\n<div class="editLabel">GTDParentType</div><div class="editor" macro="edit gtdparenttype"></div>\n</div>\n\n<div macro="showWhen config.options.chkDsplGTDTypeEdit != true">\n<div class="hideIt">GTDType</div><div class="hideIt" macro="edit gtdtype"></div>\n<div class="hideIt">GTDParent</div><div class="hideIt" macro="edit gtdparent"></div>\n<div class="hideIt">GTDParentType</div><div class="hideIt" macro="edit gtdparenttype"></div>\n</div>\n\n<div class="editLabel">Tags</div><div class="editor" macro="edit tags"></div>\n<div class="editorFooter"><span macro="message views.editor.tagPrompt"></span><span macro="tagChooser"></span></div>\n\n<!--}}}-->\n\n
/***\n|''Name:''|ForEachTiddlerPlugin|\n|''Version:''|1.0.6 (2006-09-16)|\n|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|\n|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|\n|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|\n|''Copyright:''|&copy; 2005-2006 [[abego Software|http://www.abego-software.de]]|\n|''TiddlyWiki:''|1.2.38+, 2.0|\n|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|\n!Description\n\nCreate customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.\n\n''Syntax:'' \n|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|\n|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|\n|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|\n|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|\n|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|\n|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]] is used.|\n|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|\n|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|\n\nSee details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].\n\n!Revision history\n* v1.0.6 (2006-09-16)\n** Context provides "viewerTiddler", i.e. the tiddler used to view the macro. Most times this is equal to the "inTiddler", but when using the "tiddler" macro both may be different.\n** Support "begin", "end" and "none" expressions in "write" action\n* v1.0.5 (2006-02-05)\n** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.\n** Support Firefox 1.5.0.1\n** Internal\n*** Make "JSLint" conform\n*** "Only install once"\n* v1.0.4 (2006-01-06)\n** Support TiddlyWiki 2.0\n* v1.0.3 (2005-12-22)\n** Features: \n*** Write output to a file supports multi-byte environments (Thanks to Bram Chen) \n*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)\n** Enhancements:\n*** Improved error messages on InternetExplorer.\n* v1.0.2 (2005-12-10)\n** Features: \n*** context object also holds reference to store (TiddlyWiki)\n** Fixed Bugs: \n*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)\n* v1.0.1 (2005-12-08)\n** Features: \n*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".\n*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.\n*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).\n*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .\n*** Improved script evaluation (for where/sort clause and write scripts).\n* v1.0.0 (2005-11-20)\n** initial version\n\n!Code\n***/\n//{{{\n\n \n//============================================================================\n//============================================================================\n// ForEachTiddlerPlugin\n//============================================================================\n//============================================================================\n\n// Only install once\nif (!version.extensions.ForEachTiddlerPlugin) {\n\nif (!window.abego) window.abego = {};\n\nversion.extensions.ForEachTiddlerPlugin = {\n major: 1, minor: 0, revision: 6, \n date: new Date(2006,8,16), \n source: "http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin",\n licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",\n copyright: "Copyright (c) abego Software GmbH, 2005-2006 (www.abego-software.de)"\n};\n\n// For backward compatibility with TW 1.2.x\n//\nif (!TiddlyWiki.prototype.forEachTiddler) {\n TiddlyWiki.prototype.forEachTiddler = function(callback) {\n for(var t in this.tiddlers) {\n callback.call(this,t,this.tiddlers[t]);\n }\n };\n}\n\n//============================================================================\n// forEachTiddler Macro\n//============================================================================\n\nversion.extensions.forEachTiddler = {\n major: 1, minor: 0, revision: 5, date: new Date(2006,2,5), provider: "http://tiddlywiki.abego-software.de"};\n\n// ---------------------------------------------------------------------------\n// Configurations and constants \n// ---------------------------------------------------------------------------\n\nconfig.macros.forEachTiddler = {\n // Standard Properties\n label: "forEachTiddler",\n prompt: "Perform actions on a (sorted) selection of tiddlers",\n\n // actions\n actions: {\n addToList: {},\n write: {}\n }\n};\n\n// ---------------------------------------------------------------------------\n// The forEachTiddler Macro Handler \n// ---------------------------------------------------------------------------\n\nconfig.macros.forEachTiddler.getContainingTiddler = function(e) {\n while(e && !hasClass(e,"tiddler"))\n e = e.parentNode;\n var title = e ? e.getAttribute("tiddler") : null; \n return title ? store.getTiddler(title) : null;\n};\n\nconfig.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n // config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);\n\n if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);\n // --- Parsing ------------------------------------------\n\n var i = 0; // index running over the params\n // Parse the "in" clause\n var tiddlyWikiPath = undefined;\n if ((i < params.length) && params[i] == "in") {\n i++;\n if (i >= params.length) {\n this.handleError(place, "TiddlyWiki path expected behind 'in'.");\n return;\n }\n tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the where clause\n var whereClause ="true";\n if ((i < params.length) && params[i] == "where") {\n i++;\n whereClause = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the sort stuff\n var sortClause = null;\n var sortAscending = true; \n if ((i < params.length) && params[i] == "sortBy") {\n i++;\n if (i >= params.length) {\n this.handleError(place, "sortClause missing behind 'sortBy'.");\n return;\n }\n sortClause = this.paramEncode(params[i]);\n i++;\n\n if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {\n sortAscending = params[i] == "ascending";\n i++;\n }\n }\n\n // Parse the script\n var scriptText = null;\n if ((i < params.length) && params[i] == "script") {\n i++;\n scriptText = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the action. \n // When we are already at the end use the default action\n var actionName = "addToList";\n if (i < params.length) {\n if (!config.macros.forEachTiddler.actions[params[i]]) {\n this.handleError(place, "Unknown action '"+params[i]+"'.");\n return;\n } else {\n actionName = params[i]; \n i++;\n }\n } \n \n // Get the action parameter\n // (the parsing is done inside the individual action implementation.)\n var actionParameter = params.slice(i);\n\n\n // --- Processing ------------------------------------------\n try {\n this.performMacro({\n place: place, \n inTiddler: tiddler,\n whereClause: whereClause, \n sortClause: sortClause, \n sortAscending: sortAscending, \n actionName: actionName, \n actionParameter: actionParameter, \n scriptText: scriptText, \n tiddlyWikiPath: tiddlyWikiPath});\n\n } catch (e) {\n this.handleError(place, e);\n }\n};\n\n// Returns an object with properties "tiddlers" and "context".\n// tiddlers holds the (sorted) tiddlers selected by the parameter,\n// context the context of the execution of the macro.\n//\n// The action is not yet performed.\n//\n// @parameter see performMacro\n//\nconfig.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {\n\n var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);\n\n var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;\n context["tiddlyWiki"] = tiddlyWiki;\n \n // Get the tiddlers, as defined by the whereClause\n var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);\n context["tiddlers"] = tiddlers;\n\n // Sort the tiddlers, when sorting is required.\n if (parameter.sortClause) {\n this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);\n }\n\n return {tiddlers: tiddlers, context: context};\n};\n\n// Returns the (sorted) tiddlers selected by the parameter.\n//\n// The action is not yet performed.\n//\n// @parameter see performMacro\n//\nconfig.macros.forEachTiddler.getTiddlers = function(parameter) {\n return this.getTiddlersAndContext(parameter).tiddlers;\n};\n\n// Performs the macros with the given parameter.\n//\n// @param parameter holds the parameter of the macro as separate properties.\n// The following properties are supported:\n//\n// place\n// whereClause\n// sortClause\n// sortAscending\n// actionName\n// actionParameter\n// scriptText\n// tiddlyWikiPath\n//\n// All properties are optional. \n// For most actions the place property must be defined.\n//\nconfig.macros.forEachTiddler.performMacro = function(parameter) {\n var tiddlersAndContext = this.getTiddlersAndContext(parameter);\n\n // Perform the action\n var actionName = parameter.actionName ? parameter.actionName : "addToList";\n var action = config.macros.forEachTiddler.actions[actionName];\n if (!action) {\n this.handleError(parameter.place, "Unknown action '"+actionName+"'.");\n return;\n }\n\n var actionHandler = action.handler;\n actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);\n};\n\n// ---------------------------------------------------------------------------\n// The actions \n// ---------------------------------------------------------------------------\n\n// Internal.\n//\n// --- The addToList Action -----------------------------------------------\n//\nconfig.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {\n // Parse the parameter\n var p = 0;\n\n // Check for extra parameters\n if (parameter.length > p) {\n config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);\n return;\n }\n\n // Perform the action.\n var list = document.createElement("ul");\n place.appendChild(list);\n for (var i = 0; i < tiddlers.length; i++) {\n var tiddler = tiddlers[i];\n var listItem = document.createElement("li");\n list.appendChild(listItem);\n createTiddlyLink(listItem, tiddler.title, true);\n }\n};\n\nabego.parseNamedParameter = function(name, parameter, i) {\n var beginExpression = null;\n if ((i < parameter.length) && parameter[i] == name) {\n i++;\n if (i >= parameter.length) {\n throw "Missing text behind '%0'".format([name]);\n }\n \n return config.macros.forEachTiddler.paramEncode(parameter[i]);\n }\n return null;\n}\n\n// Internal.\n//\n// --- The write Action ---------------------------------------------------\n//\nconfig.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {\n // Parse the parameter\n var p = 0;\n if (p >= parameter.length) {\n this.handleError(place, "Missing expression behind 'write'.");\n return;\n }\n\n var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);\n p++;\n\n // Parse the "begin" option\n var beginExpression = abego.parseNamedParameter("begin", parameter, p);\n if (beginExpression !== null) \n p += 2;\n var endExpression = abego.parseNamedParameter("end", parameter, p);\n if (endExpression !== null) \n p += 2;\n var noneExpression = abego.parseNamedParameter("none", parameter, p);\n if (noneExpression !== null) \n p += 2;\n\n // Parse the "toFile" option\n var filename = null;\n var lineSeparator = undefined;\n if ((p < parameter.length) && parameter[p] == "toFile") {\n p++;\n if (p >= parameter.length) {\n this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");\n return;\n }\n \n filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));\n p++;\n if ((p < parameter.length) && parameter[p] == "withLineSeparator") {\n p++;\n if (p >= parameter.length) {\n this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");\n return;\n }\n lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);\n p++;\n }\n }\n \n // Check for extra parameters\n if (parameter.length > p) {\n config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);\n return;\n }\n\n // Perform the action.\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);\n var count = tiddlers.length;\n var text = "";\n if (count > 0 && beginExpression)\n text += config.macros.forEachTiddler.getEvalTiddlerFunction(beginExpression, context)(undefined, context, count, undefined);\n \n for (var i = 0; i < count; i++) {\n var tiddler = tiddlers[i];\n text += func(tiddler, context, count, i);\n }\n \n if (count > 0 && endExpression)\n text += config.macros.forEachTiddler.getEvalTiddlerFunction(endExpression, context)(undefined, context, count, undefined);\n\n if (count == 0 && noneExpression) \n text += config.macros.forEachTiddler.getEvalTiddlerFunction(noneExpression, context)(undefined, context, count, undefined);\n \n\n if (filename) {\n if (lineSeparator !== undefined) {\n lineSeparator = lineSeparator.replace(/\s\sn/mg, "\sn").replace(/\s\sr/mg, "\sr");\n text = text.replace(/\sn/mg,lineSeparator);\n }\n saveFile(filename, convertUnicodeToUTF8(text));\n } else {\n var wrapper = createTiddlyElement(place, "span");\n wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);\n }\n};\n\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// Internal.\n//\nconfig.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {\n return {\n place : placeParam, \n whereClause : whereClauseParam, \n sortClause : sortClauseParam, \n sortAscending : sortAscendingParam, \n script : scriptText,\n actionName : actionNameParam, \n actionParameter : actionParameterParam,\n tiddlyWikiPath : tiddlyWikiPathParam,\n inTiddler : inTiddlerParam, // the tiddler containing the <<forEachTiddler ...>> macro call.\n viewerTiddler : config.macros.forEachTiddler.getContainingTiddler(placeParam) // the tiddler showing the forEachTiddler result\n };\n};\n\n// Internal.\n//\n// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of \n// the given path.\n//\nconfig.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {\n if (!idPrefix) {\n idPrefix = "store";\n }\n var lenPrefix = idPrefix.length;\n \n // Read the content of the given file\n var content = loadFile(this.getLocalPath(path));\n if(content === null) {\n throw "TiddlyWiki '"+path+"' not found.";\n }\n \n // Locate the storeArea div's\n var posOpeningDiv = content.indexOf(startSaveArea);\n var posClosingDiv = content.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1)) {\n throw "File '"+path+"' is not a TiddlyWiki.";\n }\n var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);\n \n // Create a "div" element that contains the storage text\n var myStorageDiv = document.createElement("div");\n myStorageDiv.innerHTML = storageText;\n myStorageDiv.normalize();\n \n // Create all tiddlers in a new TiddlyWiki\n // (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)\n var tiddlyWiki = new TiddlyWiki();\n var store = myStorageDiv.childNodes;\n for(var t = 0; t < store.length; t++) {\n var e = store[t];\n var title = null;\n if(e.getAttribute)\n title = e.getAttribute("tiddler");\n if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)\n title = e.id.substr(lenPrefix);\n if(title && title !== "") {\n var tiddler = tiddlyWiki.createTiddler(title);\n tiddler.loadFromDiv(e,title);\n }\n }\n tiddlyWiki.dirty = false;\n\n return tiddlyWiki;\n};\n\n\n \n// Internal.\n//\n// Returns a function that has a function body returning the given javaScriptExpression.\n// The function has the parameters:\n// \n// (tiddler, context, count, index)\n//\nconfig.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {\n var script = context["script"];\n var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";\n var fullText = (script ? script+";" : "")+functionText+";theFunction;";\n return eval(fullText);\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {\n var result = [];\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);\n tiddlyWiki.forEachTiddler(function(title,tiddler) {\n if (func(tiddler, context, undefined, undefined)) {\n result.push(tiddler);\n }\n });\n return result;\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {\n var message = "Extra parameter behind '"+actionName+"':";\n for (var i = firstUnusedIndex; i < parameter.length; i++) {\n message += " "+parameter[i];\n }\n this.handleError(place, message);\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {\n var result = \n (tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) \n ? 0\n : (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)\n ? -1 \n : +1; \n return result;\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {\n var result = \n (tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) \n ? 0\n : (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)\n ? +1 \n : -1; \n return result;\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {\n // To avoid evaluating the sortClause whenever two items are compared \n // we pre-calculate the sortValue for every item in the array and store it in a \n // temporary property ("forEachTiddlerSortValue") of the tiddlers.\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);\n var count = tiddlers.length;\n var i;\n for (i = 0; i < count; i++) {\n var tiddler = tiddlers[i];\n tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);\n }\n\n // Do the sorting\n tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);\n\n // Delete the temporary property that holds the sortValue. \n for (i = 0; i < tiddlers.length; i++) {\n delete tiddlers[i].forEachTiddlerSortValue;\n }\n};\n\n\n// Internal.\n//\nconfig.macros.forEachTiddler.trace = function(message) {\n displayMessage(message);\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {\n var message ="<<"+macroName;\n for (var i = 0; i < params.length; i++) {\n message += " "+params[i];\n }\n message += ">>";\n displayMessage(message);\n};\n\n\n// Internal.\n//\n// Creates an element that holds an error message\n// \nconfig.macros.forEachTiddler.createErrorElement = function(place, exception) {\n var message = (exception.description) ? exception.description : exception.toString();\n return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);\n};\n\n// Internal.\n//\n// @param place [may be null]\n//\nconfig.macros.forEachTiddler.handleError = function(place, exception) {\n if (place) {\n this.createErrorElement(place, exception);\n } else {\n throw exception;\n }\n};\n\n// Internal.\n//\n// Encodes the given string.\n//\n// Replaces \n// "$))" to ">>"\n// "$)" to ">"\n//\nconfig.macros.forEachTiddler.paramEncode = function(s) {\n var reGTGT = new RegExp("\s\s$\s\s)\s\s)","mg");\n var reGT = new RegExp("\s\s$\s\s)","mg");\n return s.replace(reGTGT, ">>").replace(reGT, ">");\n};\n\n// Internal.\n//\n// Returns the given original path (that is a file path, starting with "file:")\n// as a path to a local file, in the systems native file format.\n//\n// Location information in the originalPath (i.e. the "#" and stuff following)\n// is stripped.\n// \nconfig.macros.forEachTiddler.getLocalPath = function(originalPath) {\n // Remove any location part of the URL\n var hashPos = originalPath.indexOf("#");\n if(hashPos != -1)\n originalPath = originalPath.substr(0,hashPos);\n // Convert to a native file format assuming\n // "file:///x:/path/path/path..." - pc local file --> "x:\spath\spath\spath..."\n // "file://///server/share/path/path/path..." - FireFox pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n // "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."\n // "file://server/share/path/path/path..." - pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n var localPath;\n if(originalPath.charAt(9) == ":") // pc local file\n localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file://///") === 0) // FireFox pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file:///") === 0) // mac/unix local file\n localPath = unescape(originalPath.substr(7));\n else if(originalPath.indexOf("file:/") === 0) // mac/unix local file\n localPath = unescape(originalPath.substr(5));\n else // pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\s\s"); \n return localPath;\n};\n\n// ---------------------------------------------------------------------------\n// Stylesheet Extensions (may be overridden by local StyleSheet)\n// ---------------------------------------------------------------------------\n//\nsetStylesheet(\n ".forEachTiddlerError{color: #ffffff;background-color: #880000;}",\n "forEachTiddler");\n\n//============================================================================\n// End of forEachTiddler Macro\n//============================================================================\n\n\n//============================================================================\n// String.startsWith Function\n//============================================================================\n//\n// Returns true if the string starts with the given prefix, false otherwise.\n//\nversion.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.startsWith = function(prefix) {\n var n = prefix.length;\n return (this.length >= n) && (this.slice(0, n) == prefix);\n};\n\n\n\n//============================================================================\n// String.endsWith Function\n//============================================================================\n//\n// Returns true if the string ends with the given suffix, false otherwise.\n//\nversion.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.endsWith = function(suffix) {\n var n = suffix.length;\n return (this.length >= n) && (this.right(n) == suffix);\n};\n\n\n//============================================================================\n// String.contains Function\n//============================================================================\n//\n// Returns true when the string contains the given substring, false otherwise.\n//\nversion.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.contains = function(substring) {\n return this.indexOf(substring) >= 0;\n};\n\n//============================================================================\n// Array.indexOf Function\n//============================================================================\n//\n// Returns the index of the first occurance of the given item in the array or \n// -1 when no such item exists.\n//\n// @param item [may be null]\n//\nversion.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.indexOf = function(item) {\n for (var i = 0; i < this.length; i++) {\n if (this[i] == item) {\n return i;\n }\n }\n return -1;\n};\n\n//============================================================================\n// Array.contains Function\n//============================================================================\n//\n// Returns true when the array contains the given item, otherwise false. \n//\n// @param item [may be null]\n//\nversion.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.contains = function(item) {\n return (this.indexOf(item) >= 0);\n};\n\n//============================================================================\n// Array.containsAny Function\n//============================================================================\n//\n// Returns true when the array contains at least one of the elements \n// of the item. Otherwise (or when items contains no elements) false is returned.\n//\nversion.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.containsAny = function(items) {\n for(var i = 0; i < items.length; i++) {\n if (this.contains(items[i])) {\n return true;\n }\n }\n return false;\n};\n\n\n//============================================================================\n// Array.containsAll Function\n//============================================================================\n//\n// Returns true when the array contains all the items, otherwise false.\n// \n// When items is null false is returned (even if the array contains a null).\n//\n// @param items [may be null] \n//\nversion.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.containsAll = function(items) {\n for(var i = 0; i < items.length; i++) {\n if (!this.contains(items[i])) {\n return false;\n }\n }\n return true;\n};\n\n\n} // of "install only once"\n\n// Used Globals (for JSLint) ==============\n// ... DOM\n/*global document */\n// ... TiddlyWiki Core\n/*global convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink, \n displayMessage, endSaveArea, hasClass, loadFile, saveFile, \n startSaveArea, store, wikify */\n//}}}\n\n\n/***\n!Licence and Copyright\nCopyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of abego Software nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY\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\n
These tiddlers are important so don't delete them.
!!!gtdtype = GTDComponent\n<<forEachTiddler\n where 'tiddler.fields["gtdtype"] == "GTDComponent"'\n>>\n\n!!!gtdparent = root and gtdparenttype = root\n<<forEachTiddler\n where 'tiddler.fields["gtdparent"] == "Root" && tiddler.fields["gtdparenttype"] == "Root"'\n>>\n\n!!!gtdparent = root and gtdparenttype not = root\n<<forEachTiddler\n where 'tiddler.fields["gtdparent"] == "Root" && tiddler.fields["gtdparenttype"] != "Root"'\n>>\n\n!!!gtdparenttype = root and gtdparent not = root\n<<forEachTiddler\n where 'tiddler.fields["gtdparent"] != "Root" && tiddler.fields["gtdparenttype"] == "Root"'\n>>\n\n!!!gtdtype = non-blank and gtdparent undefined\n<<forEachTiddler\n where 'tiddler.fields["gtdtype"] != undefined && tiddler.fields["gtdtype"] != "" && tiddler.fields["gtdparent"] == undefined'\n>>\n\n!!!gtdtype = non-blank and gtdparent blank\n<<forEachTiddler\n where 'tiddler.fields["gtdtype"] != undefined && tiddler.fields["gtdtype"] != "" && tiddler.fields["gtdparent"] == ""'\n>>\n\n!!!gtdtype = non-blank and gtdparenttype undefined\n<<forEachTiddler\n where 'tiddler.fields["gtdtype"] != undefined && tiddler.fields["gtdtype"] != "" && tiddler.fields["gtdparenttype"] == undefined'\n>>\n\n!!!gtdtype = non-blank and gtdparenttype blank\n<<forEachTiddler\n where 'tiddler.fields["gtdtype"] != undefined && tiddler.fields["gtdtype"] != "" && tiddler.fields["gtdparenttype"] == ""'\n>>\n\n!!!gtdtype = undefined\n<<forEachTiddler\n where 'tiddler.fields["gtdtype"] == undefined'\n>>\n\n!!!gtdtype = null\n<<forEachTiddler\n where 'tiddler.fields["gtdtype"] == null'\n>>\n\n!!!gtdtype = blank\n<<forEachTiddler\n where 'tiddler.fields["gtdtype"] == ""'\n>>\n\n
<!--{{{-->\n\n<span macro='showWhen store.tiddlerExists(tiddler.title) && tiddler.fields["gtdtype"] != undefined && tiddler.fields["gtdtype"] != ""'>\n <span class='title' macro='showWhen tiddler.fields["gtdtype"] == "GTDComponent" || tiddler.fields["gtdtype"] == "MainDash"'>GTD:&nbsp;</span> \n <span class='title' macro='hideWhen tiddler.fields["gtdtype"] == "GTDComponent" || tiddler.fields["gtdtype"] == "MainDash"'> \n <span macro='view gtdtype'></span>\n <span>:&nbsp;</span>\n </span>\n</span>\n\n<!--}}}-->
/***\n| Name:|HideWhenPlugin|\n| Description:|Allows conditional inclusion/exclusion in templates|\n| Version:|6.1.2|\n| Date:|20-Oct-2006|\n| Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\nFor use in ViewTemplate and EditTemplate. Eg\n{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}\n{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}\n***/\n//{{{\n\nwindow.removeElementWhen = function(test,place) {\n if (test) {\n removeChildren(place);\n place.parentNode.removeChild(place);\n }\n};\n\nmerge(config.macros,{\n\n hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( eval(paramString), place);\n }},\n\n showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !eval(paramString), place);\n }},\n\n hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( tiddler.tags.containsAll(params), place);\n }},\n\n showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !tiddler.tags.containsAll(params), place);\n }},\n\n hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( tiddler.tags.containsAny(params), place);\n }},\n\n showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !tiddler.tags.containsAny(params), place);\n }},\n\n hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);\n }},\n\n showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);\n }}\n\n});\n\n//}}}\n\n
@@font-size:120%;[[Dashboard]]@@\n@@font-size:100%;''<<newTiddlerPlus label:"+" prompt: 'Create a new GTD context' title:'New Context' gtdtype: Context gtdparent: Root gtdparenttype: Root tag: Context>>''@@\n@@font-size:80%;margin-left:-1.1em;<<tag Context>>@@\n@@font-size:100%;''<<newTiddlerPlus label:"+" prompt: 'Create a new GTD role' title:'New Role' gtdtype: Role gtdparent: Root gtdparenttype: Root tag: Role>>''@@\n@@font-size:80%;margin-left:-1.1em;<<tag Role>>@@\n@@font-size:100%;''<<newTiddlerPlus label:"+" prompt: 'Create a new GTD area' title:'New Area' gtdtype: Area tag: Area>>''@@\n@@font-size:80%;margin-left:-1.1em;<<tag Area>>@@\n@@font-size:100%;''<<newTiddlerPlus label:"+" prompt: 'Create a new GTD project' title:'New Project' tag: Project gtdtype: Project >>''@@\n@@font-size:80%;margin-left:-1.1em;<<tag Project>>@@\n@@font-size:100%;''<<newTiddlerPlus label:"+" prompt: "Create a new GTD action" title:"New Action" tag: Action Next gtdtype:Action>>''@@\n@@font-size:80%;margin-left:-1.1em;<<tag Action>>@@\n@@font-size:100%;''<<newTiddlerPlus label:"+" prompt: 'Create a new GTD tickler' title:'New Tickler' gtdtype: Tickler tag: Tickler>>''@@\n@@font-size:80%;margin-left:-1.1em;<<tag Tickler>>@@\n@@font-size:100%;''<<newTiddlerPlus label:"+" prompt: 'Create a new GTD event' title:'New Event' gtdtype: Event tag: Event>>''@@\n@@font-size:80%;margin-left:-1.1em;<<tag Event>>@@\n@@font-size:70%;color:#ccc;<<showClock>>@@
@@font-size:120%;[[Dashboard]]@@\n@@font-size:100%;''<<newTiddlerPlus label:"+" prompt: 'Create a new GTD context' title:'New Context' gtdtype: Context gtdparent: Root gtdparenttype: Root tag: Context>>''@@\n@@font-size:80%;margin-left:-1.1em;<<tag Context>>@@\n@@font-size:100%;''<<newTiddlerPlus label:"+" prompt: 'Create a new GTD role' title:'New Role' gtdtype: Role gtdparent: Root gtdparenttype: Root tag: Role>>''@@\n@@font-size:80%;margin-left:-1.1em;<<tag Role>>@@\n@@font-size:100%;''<<newTiddlerPlus label:"+" prompt: 'Create a new GTD area' title:'New Area' gtdtype: Area tag: Area>>''@@\n@@font-size:80%;margin-left:-1.1em;<<tag Area>>@@\n@@font-size:100%;''<<newTiddlerPlus label:"+" prompt: 'Create a new GTD project' title:'New Project' tag: Project gtdtype: Project >>''@@\n@@font-size:80%;margin-left:-1.1em;<<tag Project>>@@\n@@font-size:100%;''<<newTiddlerPlus label:"+" prompt: "Create a new GTD action" title:"New Action" tag: Action Next gtdtype:Action>>''@@\n@@font-size:80%;margin-left:-1.1em;<<tag Action>>@@\n@@font-size:100%;''<<newTiddlerPlus label:"+" prompt: 'Create a new tickler' title:'New Tickler' gtdtype: Tickler tag: Tickler>>''@@\n@@font-size:80%;margin-left:-1.1em;<<tag Tickler>>@@\n@@font-size:100%;''<<newTiddlerPlus label:"+" prompt: 'Create a new event' title:'New Event' gtdtype: Event tag: Event>>''@@\n@@font-size:80%;margin-left:-1.1em;<<tag Event>>@@\n@@font-size:100%;''<<newTiddlerPlus label:"+" prompt: 'Create a new contact' title:'New Contact' gtdtype: Contact tag: Contact>>''@@\n@@font-size:80%;margin-left:-1.1em;<<tag Contact>>@@\n@@font-size:100%;''<<newTiddlerPlus label:"+" prompt: 'Create a new reference' title:'New Reference' gtdtype: Reference tag: Reference>>''@@\n@@font-size:80%;margin-left:-1.1em;<<tag Reference>>@@\n@@font-size:70%;color:#ccc;<<showClock>>@@
/***\n\n\n***/\n//{{{\n\nconfig.mGTD = {\n config: {}, // gets populated by populateLists\n\n tiddlerViews: {\n phoneList:\n "'|[['+this.title+']]"+\n "|'+config.mGTD.undefBlank(store.getTiddlerSlice(this.title,'phone'))+'"+\n "|\s\sn'",\n tickler:\n "'|<<toggleTag Processed [['+this.title+']] ->>|[['+this.title+']]"+\n "|'+this.mGet('tmonth')+' '+this.mGet('tday')+', '+this.mGet('tyear')+'|\s\sn'",\n groupBy:\n "'*@@display:block;line-height:200%;font-size:120%;[['+this.title+']]@@\s\sn'",\n action:\n "'{{action{"+\n "@@font-size:80%;"+\n "<<toggleTag Done [['+this.title+']] ->>"+\n "<<tTag tag:Next mode:text text:N title:[['+this.title+']]>>"+\n "<<tTag tag:[[Waiting For]] mode:text text:W title:[['+this.title+']]>>"+\n " @@"+\n "[['+this.title+']] "+\n "}}}\s\sn'",\n action2:\n "'{{action2{"+\n "@@font-size:80%;"+\n "<<toggleTag Done [['+this.title+']] ->>"+\n "<<tTag tag:Next mode:text text:N title:[['+this.title+']]>>"+\n "<<tTag tag:[[Waiting For]] mode:text text:W title:[['+this.title+']]>>"+\n " @@"+\n "[['+this.title+']] "+\n "}}}\s\sn'",\n action_proj:\n "'{{action{"+\n "@@font-size:80%;"+\n "<<toggleTag Done [['+this.title+']] ->>"+\n "<<tTag tag:Next mode:text text:N title:[['+this.title+']]>>"+\n "<<tTag tag:[[Waiting For]] mode:text text:W title:[['+this.title+']]>>"+\n " @@"+\n "[['+this.title+']] "+\n "'+this.getProjectTextForList()+'"+\n "}}}\s\sn'",\n action_proj2:\n "'{{action2{"+\n "@@font-size:80%;"+\n "<<toggleTag Done [['+this.title+']] ->>"+\n "<<tTag tag:Next mode:text text:N title:[['+this.title+']]>>"+\n "<<tTag tag:[[Waiting For]] mode:text text:W title:[['+this.title+']]>>"+\n " @@"+\n "[['+this.title+']] "+\n "'+this.getProjectTextForList()+'"+\n "}}}\s\sn'",\n action_plain:\n "'{{action{"+\n "@@font-size:80%;"+\n "<<toggleTag Done [['+this.title+']] ->>"+\n " @@"+\n "[['+this.title+']] "+\n "}}}\s\sn'",\n action_plain2:\n "'{{action2{"+\n "@@font-size:80%;"+\n "<<toggleTag Done [['+this.title+']] ->>"+\n " @@"+\n "[['+this.title+']] "+\n "}}}\s\sn'"\n\n },\n\n getListByTag: function(tag) {\n return store.getTaggedTiddlers(tag).map( function(t) { return t.title; } );\n },\n\n populateLists: function() {\n\n // the meta list\n this.config.GTDComponent = store.getTiddlersByField("gtdtype","GTDComponent","title","title");\n \n for (var i=0;i<this.config.GTDComponent.length;i++) {\n this.config[this.config.GTDComponent[i]] = store.getTiddlersByField("gtdtype",this.config.GTDComponent[i],"title","title");\n }\n \n },\n\n undefBlank: function(value) {\n return value ? value.toString() : "";\n },\n\n commands: {\n refresh: {\n text: 'refresh',\n tooltip: 'Refresh this tiddler',\n handler: function(e,src,title) {\n clearMessage();\n if (config.mGTD.populateLists)\n config.mGTD.populateLists();\n story.refreshTiddler(title,null,true);\n return false; \n }\n }\n },\n\n macros: {\n listByTag: {\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n var parsedParams = paramString.parseParams("tags",null,true);\n var tagExpr = getParam(parsedParams,"tags","true");\n var whereExpr = getParam(parsedParams,"where","true");\n var groupBy = getParam(parsedParams,"group");\n var mode = getParam(parsedParams,"mode","local");\n var title = getParam(parsedParams,"title","local");\n var sortBy = getParam(parsedParams,"sort","title");\n var limit = getParam(parsedParams,"limit");\n var className = getParam(parsedParams,"class","");\n var viewType = getParam(parsedParams,"view");\n if (mode != "global")\n tagExpr = '( '+tagExpr+' ) && ( [[' + tiddler.title + ']] )';\n var markup = "{{mList "+className+"{\sn";\n\n if (title)\n markup += "{{mListTitle{"+title+"}}}\sn";\n \n if (groupBy) {\n markup += store.getByTagExpr(groupBy,sortBy).asList(1,viewType,limit,tagExpr,sortBy);\n\n var catchLeftoversExpr = "( "+tagExpr+" ) && !parent:" + groupBy;\n var leftovers = store.getByTagExpr(catchLeftoversExpr,sortBy).asList(2,viewType,limit);\n if (leftovers != "") {\n markup += "*(No "+groupBy+")\sn";\n markup += leftovers;\n }\n\n }\n else\n markup += store.getByTagExpr(tagExpr,sortBy,whereExpr).asList(1,viewType,limit);\n\n markup += "}}}\sn";\n wikify(markup,place,null,tiddler); \n }\n },\n\n checkboxList: {\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n var itemType = params[0];\n for (var i=0;i<config.mGTD.config[itemType].length;i++)\n wikify("<<toggleTag [["+config.mGTD.config[itemType][i]+"]]>>",place,null,tiddler);\n }\n },\n\n dropdownSelect: {\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n\n var values = store.getByTagExpr(paramString);\n\n var selectFrom = [];\n var currentVal = "";\n selectFrom.push({name:"", caption:"(none)"});\n for (var i=0;i<values.length;i++) {\n if (tiddler.tags.contains(values[i].title))\n currentVal = values[i].title; \n selectFrom.push({name:values[i].title, caption:values[i].title});\n }\n\n var onChangeHandler = function() {\n // this will be better when we use fields:\n store.setTiddlerTag(tiddler.title,false,currentVal);\n tiddler.mSet("project",null);\n if (this.value != "") {\n tiddler.mSet("project",this.value);\n store.setTiddlerTag(tiddler.title,true,this.value);\n }\n return true;\n };\n\n var selector = createTiddlyDropDown(place,onChangeHandler,selectFrom,currentVal);\n if (currentVal != "")\n wikify(" [[>>|"+currentVal+"]]",place);\n }\n }\n\n },\n \n stringMethods: {\n parseTagExpr: function() {\n var spaced = this.\n replace(/\s[\s(/g," [["). // because square brackets in templates no good\n replace(/\s)\s]/g,"]] "). \n replace(/(!|&&|\s|\s||\s(|\s))/g," $1 ");\n var tokens = spaced.readBracketedList(false); // false means not unique. thanks Jeremy!\n var expr = "";\n var logicOps = ['(',')','||','&&','!','true','false'];\n for (var i=0;i<tokens.length;i++) {\n if (logicOps.contains(tokens[i])) {\n expr += tokens[i];\n }\n else if (tokens[i].match(/^parent:/)) {\n var lookForTagInParent = tokens[i].split(":")[1];\n expr += "tiddler.parents().anyHasTag('"+lookForTagInParent+"')";\n } \n else {\n expr += "tiddler.tags.contains('"+tokens[i]+"')";\n }\n }\n //alert(expr);\n return '('+expr+')';\n }\n },\n\n storeMethods: {\n\n //\n // fieldName = name of field to check\n // fieldValue = value to check for (if field = value, then that tiddler is used)\n // sortField = name of field in the tiddler by which to sort the results array; if blank, sort by title\n // resultField = name of tiddler field to return in the array; if blank, return the entire tiddler object\n // \n getTiddlersByField: function(fieldName,fieldValue,sortField,resultField) {\n var results = [];\n\n this.forEachTiddler(function(title,tiddler) {\n var val = this.getValue(tiddler,fieldName);\n if (val && val == fieldValue) \n results.push(tiddler);\n });\n if(!sortField)\n sortField = "title"; \n results.sort(function(a,b) {\n return a[sortField] < b[sortField] ? -1 :\n (a[sortField] == b[sortField] ? 0 : +1);\n });\n //\n // if resultField is blank, return the entire tiddler in the array\n // if resultField is not blank, return only that field name (it had better be a valid field name!)\n //\n if(!resultField)\n return results;\n else {\n var tresults = [];\n for (var i=0;i<results.length;i++)\n tresults[i] = results[i][resultField]; \n return tresults;\n }\n },\n\n getByTagExpr: function(tagExpr,sortBy,whereExpr) {\n var parsed = tagExpr.parseTagExpr();\n\n sortBy = sortBy ? sortBy : 'title';\n var desc = false;\n if (sortBy.substr(0,1) == '-') {\n desc = true;\n sortBy.replace(/^-/,'');\n }\n\n if (whereExpr) {\n parsed = "( "+parsed+" ) && ( "+whereExpr+" ) ";\n }\n\n\n var output = [];\n this.forEachTiddler(function(title,tiddler) {\n if (eval(parsed))\n output.push(tiddler);\n });\n if (sortBy == "tickleDate") {\n output.sort(function(a,b) {\n return a.tickleDate() < b.tickleDate() ? -1 :\n (a.tickleDate() == b.tickleDate() ? 0 : +1);\n });\n }\n else {\n output.sort(function(a,b) {\n return a[sortBy] < b[sortBy] ? -1 :\n (a[sortBy] == b[sortBy] ? 0 : +1);\n });\n }\n\n if (desc)\n return output.reverse();\n else\n return output;\n }\n },\n\n arrayMethods: {\n map: function(func) {\n var result = [];\n for (var i=0;i<this.length;i++)\n result.push(func(this[i]));\n return result;\n },\n\n asList: function(level, viewType, limit, subExpr, sortBy, sortExpr) {\n var output = "";\n for (var i=0;(i<this.length && (!limit || i<limit));i++)\n if (!subExpr)\n output += this[i].mGTDrender(level,viewType);\n else {\n var newExpr = "( " + subExpr + " ) && ( [[" + this[i].title + "]] )";\n var sublist = store.getByTagExpr(newExpr,sortBy).asList(level+1, viewType, limit);\n if (sublist != "") {\n output += this[i].mGTDrender(level,"groupBy");\n output += sublist;\n }\n }\n return output;\n },\n\n anyHasTag: function(tagName) {\n for (var i=0;i<this.length;i++)\n if (this[i].tags.contains(tagName))\n return true;\n return false;\n }\n },\n\n tiddlerMethods: {\n \n getProjectTextForList: function() {\n var proj = this.getProject();\n if (proj == '')\n return '';\n return "@@font-size:80%;"+\n " [/%%/[[P|"+proj+"]]/%%/]"+\n "@@";\n },\n\n getProject: function() {\n return this.getValueByTag('Project').join("/"); // maybe two projects??\n },\n\n getValueByTag: function(value) {\n // this gets a lot better when we use fields also\n var values = store.getByTagExpr(value); // probably just getTaggedTiddlers would do here..?\n var result = [];\n for (var i=0;i<values.length;i++) {\n if (this.tags.contains(values[i].title)) {\n result.push(values[i].title);\n }\n }\n return result;\n },\n\n mGTDrender: function(level,viewType) {\n var output = "";\n if (viewType) {\n if (config.mGTD.tiddlerViews[viewType+level])\n return eval(config.mGTD.tiddlerViews[viewType+level]);\n else\n return eval(config.mGTD.tiddlerViews[viewType]);\n }\n else {\n for (var i=0; i<level; i++)\n output += "*";\n output += "[[%0]]\sn".format([this.title]);\n }\n return output;\n },\n\n parents: function() {\n var output = [];\n for (var i=0;i<this.tags.length;i++) {\n var t = store.fetchTiddler(this.tags[i]);\n if (t)\n output.push(t);\n }\n return output;\n },\n\n mGet: function(field) {\n return store.getValue(this,"mgtd."+field);\n },\n\n mSet: function(field,value) {\n store.setValue(this,"mgtd."+field,value);\n },\n\n tickleDate: function() {\n var d = this.mGet("tday");\n var m = this.mGet("tmonth");\n var y = this.mGet("tyear");\n var result = "";\n if (d && m && y)\n result = y + String.zeroPad(parseInt(m,10),2) + String.zeroPad(parseInt(d,10),2) + '0000';\n return result;\n }\n },\n\n styles: [\n ".mListTitle { font-weight:bold; }",\n ".mList { border:solid 1px pink; }",\n ".mList ul { margin-top:0px; padding-top:0px; }",\n ""],\n\n coreFunctions: {\n\n // Extending this to put in a defaultValue\n createTiddlyDropDown: function(place,onchange,options,defaultValue) {\n var sel = createTiddlyElement(place,"select");\n sel.onchange = onchange;\n var foo = 0;\n for(var t=0; t<options.length; t++)\n {\n var e = createTiddlyElement(sel,"option",null,null,options[t].caption);\n if (options[t].name == defaultValue) foo = t;\n e.value = options[t].name;\n }\n sel.selectedIndex = foo;\n return sel;\n }\n\n },\n\n init: function() {\n\n merge(config.macros,this.macros);\n merge(config.commands,this.commands);\n\n merge(TiddlyWiki.prototype,this.storeMethods);\n merge(Tiddler.prototype,this.tiddlerMethods);\n merge(String.prototype,this.stringMethods);\n merge(Array.prototype,this.arrayMethods);\n merge(window,this.coreFunctions);\n\n\n merge(config.shadowTiddlers,{MonkeyGTDStyles:this.styles.join("\sn")});\n store.addNotification("MonkeyGTDStyles",refreshStyles);\n\n // config.macros.newTiddler.onClickNewTiddler = this.onClickNewTiddler; // over-ride\n\n this.populateLists();\n \n }\n};\n\nconfig.mGTD.init();\n\n//}}}\n\n
\n.mToolbar .ticklerDate tr td {\n padding:0;\n margin:0;\n}\n\n.mToolbar {\n background-color:[[ColorPalette::TertiaryPale]];\n border:solid 1px [[ColorPalette::TertiaryMid]];\n}\n.mToolbar td {\n padding:0.5em;\n}\n.mToolbar .label {\n width:1%;\n text-align:right;\n font-weight:bold;\n background-color:[[ColorPalette::TertiaryPale]];\n color:[[ColorPalette::TertiaryMid]];\n padding-left:0.5em;\n padding-right:0;\n}\n.mListTitle {\n font-weight:bold;\n background-color:[[ColorPalette::TertiaryPale]];\n color:[[ColorPalette::TertiaryMid]];\n display:block;\n padding:0.25em 0.5em;\n border-bottom:1px solid [[ColorPalette::TertiaryMid]];\n\n}\n.mList br { display:none; }\n.mList {\n border:solid 1px [[ColorPalette::TertiaryMid]];\n margin:0 0.5em 0 0;\n padding-bottom:1em;\n}\n.mList ul {\n margin:0.25em 0 0;\n padding:0px;\n padding-left:1.8em;\n}\n.mList ul li { }\n\n.mList .action {\n display:block;\n padding-left:0.25em;\n padding-bottom:0.1em;\n /*\n overflow:hidden;\n white-space:no-wrap;*/\n /* border-bottom:1px solid #eee; */\n}\n\n.mList .action span { white-space:no-wrap; }\n.mList .action2 span { white-space:no-wrap; }\n\n.mList .action2 {\n display:block;\n padding-left:1.5em;\n padding-bottom:0.1em;\n /*overflow:hidden;\n white-space:no-wrap;*/\n /*border-bottom:1px solid #eee;*/\n}\n/* the nowrap and hidden doesnt work :( */\n\n.shorterEdit input { width:2.5em; }\n\n#topMenu .new a { padding-right:0; margin-right:0; }\n#topMenu .tag a { padding-left:0; margin-left:0; }\n\n.mList .off {border-style:none;background:#fff;color:#ccc;}\n.mList .on {border-style:none;background:#fff;color:#000;}\n.mList .WaitingForButton.off {border-style:none;background:#fff;color:#ccc;}\n.mList .WaitingForButton.on {border-style:none;background:#fdb;color:#000;}\n.mList .NextButton.off {border-style:none;background:#fff;color:#ccc;}\n.mList .NextButton.on {border-style:none;background:#cfa;color:#000;}\n\n
URL: http://mgtd-alpha.tiddlyspot.com/upgrade.html\n
URL: /proxy/mgtd-alpha.tiddlyspot.com/upgrade.html\n
~MonkeyGTD 2.1 alpha 061130\n
/***\n| Name:|MptwLayoutPlugin|\n| Description:|A package containing templates and css for the MonkeyPirateTiddlyWiki layout|\n| Version:|6.1.2|\n| Date:|02-Oct-2006|\n| Source:|http://mptw.tiddlyspot.com/#MptwLayoutPlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\n| CoreVersion:|2.1.x|\n!Notes\nPresumes you have TagglyTaggingPlugin installed.\n***/\n//{{{\nconfig.shadowTiddlers.GettingStarted += "\sn\snSee also MonkeyPirateTiddlyWiki.";\n\n//}}}\n\n//{{{\nmerge(config.shadowTiddlers,{\n\nMptwStyleSheet:[\n "/*{{{*/",\n "/* a contrasting background so I can see where one tiddler ends and the other begins */",\n "body {",\n " background: [[ColorPalette::TertiaryLight]];",\n "}",\n "",\n "/* sexy colours and font for the header */",\n ".headerForeground {",\n " color: [[ColorPalette::PrimaryPale]];",\n "}",\n ".headerShadow, .headerShadow a {",\n " color: [[ColorPalette::PrimaryMid]];",\n "}",\n ".headerForeground, .headerShadow {",\n " padding: 1em 1em 0;",\n " font-family: 'Trebuchet MS' sans-serif;",\n " font-weight:bold;",\n "}",\n ".headerForeground .siteSubtitle {",\n " color: [[ColorPalette::PrimaryLight]];",\n "}",\n ".headerShadow .siteSubtitle {",\n " color: [[ColorPalette::PrimaryMid]];",\n "}",\n "",\n "/* make shadow go and down right instead of up and left */",\n ".headerShadow {",\n " left: 1px;",\n " top: 1px;",\n "}",\n "",\n "/* prefer monospace for editing */",\n ".editor textarea {",\n " font-family: 'Consolas' monospace;",\n "}",\n "",\n "/* sexy tiddler titles */",\n ".title {",\n " font-size: 250%;",\n " color: [[ColorPalette::PrimaryLight]];",\n " font-family: 'Trebuchet MS' sans-serif;",\n "}",\n "",\n "/* more subtle tiddler subtitle */",\n ".subtitle {",\n " padding:0px;",\n " margin:0px;",\n " padding-left:0.5em;",\n " font-size: 90%;",\n " color: [[ColorPalette::TertiaryMid]];",\n "}",\n ".subtitle .tiddlyLink {",\n " color: [[ColorPalette::TertiaryMid]];",\n "}",\n "",\n "/* a little bit of extra whitespace */",\n ".viewer {",\n " padding-bottom:3px;",\n "}",\n "",\n "/* don't want any background color for headings */",\n "h1,h2,h3,h4,h5,h6 {",\n " background: [[ColorPalette::Background]];",\n " color: [[ColorPalette::Foreground]];",\n "}",\n "",\n "/* give tiddlers 3d style border and explicit background */",\n ".tiddler {",\n " background: [[ColorPalette::Background]];",\n " border-right: 2px [[ColorPalette::TertiaryMid]] solid;",\n " border-bottom: 2px [[ColorPalette::TertiaryMid]] solid;",\n " margin-bottom: 1em;",\n " padding-bottom: 2em;",\n "}",\n "",\n "/* make options slider look nicer */",\n "#sidebarOptions .sliderPanel {",\n " border:solid 1px [[ColorPalette::PrimaryLight]];",\n "}",\n "",\n "",\n "/* the borders look wrong with the body background */",\n "#sidebar .button {",\n " border-style: none;",\n "}",\n "",\n "/* displays the list of a tiddler's tags horizontally. used in ViewTemplate */",\n ".tagglyTagged li.listTitle {",\n " display:none",\n "}",\n ".tagglyTagged li {",\n " display: inline; font-size:90%;",\n "}",\n ".tagglyTagged ul {",\n " margin:0px; padding:0px;",\n "}",\n "",\n "/* this means you can put line breaks in SidebarOptions for readability */",\n "#sidebarOptions br {",\n " display:none;",\n "}",\n "/* undo the above in OptionsPanel */",\n "#sidebarOptions .sliderPanel br {",\n " display:inline;",\n "}",\n "",\n "/* horizontal main menu stuff */",\n "#displayArea {",\n " margin: 1em 15.7em 0em 1em; /* use the freed up space */",\n "}",\n "#topMenu br {",\n " display: none;",\n "}",\n "#topMenu {",\n " background: [[ColorPalette::PrimaryMid]];",\n " color:[[ColorPalette::PrimaryPale]];",\n "}",\n "#topMenu {",\n " padding:2px;",\n "}",\n "#topMenu .button, #topMenu .tiddlyLink, #topMenu a {",\n " margin-left: 0.5em;",\n " margin-right: 0.5em;",\n " padding-left: 3px;",\n " padding-right: 3px;",\n " color: [[ColorPalette::PrimaryPale]];",\n " font-size: 115%;",\n "}",\n "#topMenu .button:hover, #topMenu .tiddlyLink:hover {",\n " background: [[ColorPalette::PrimaryDark]];",\n "}",\n "",\n "/* make it print a little cleaner */",\n "@media print {",\n " #topMenu {",\n " display: none ! important;",\n " }",\n " /* not sure if we need all the importants */",\n " .tiddler {",\n " border-style: none ! important;",\n " margin:0px ! important;",\n " padding:0px ! important;",\n " padding-bottom:2em ! important;",\n " }",\n " .tagglyTagging .button, .tagglyTagging .hidebutton {",\n " display: none ! important;",\n " }",\n " .headerShadow {",\n " visibility: hidden ! important;",\n " }",\n " .tagglyTagged .quickopentag, .tagged .quickopentag {",\n " border-style: none ! important;",\n " }",\n " .quickopentag a.button, .miniTag {",\n " display: none ! important;",\n " }",\n "}",\n "/*}}}*/",\n ""\n].join("\sn"),\n\nMptwPageTemplate:[\n "<!--{{{-->",\n "<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>",\n " <div class='headerShadow'>",\n " <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;",\n " <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>",\n " </div>",\n " <div class='headerForeground'>",\n " <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;",\n " <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>",\n " </div>",\n "</div>",\n "<!-- horizontal MainMenu -->",\n "<div id='topMenu' refresh='content' tiddler='MainMenu'></div>",\n "<!-- original MainMenu menu -->",\n "<!-- <div id='mainMenu' refresh='content' tiddler='MainMenu'></div> -->",\n "<div id='sidebar'>",\n " <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>",\n " <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>",\n "</div>",\n "<div id='displayArea'>",\n " <div id='messageArea'></div>",\n " <div id='tiddlerDisplay'></div>",\n "</div>",\n "<!--}}}-->",\n ""\n].join("\sn"),\n\nMptwViewTemplate:[\n "<!--{{{-->",\n "",\n "<div class='toolbar'>",\n " <span macro=\s"showWhenTagged systemConfig\s">",\n " <span macro=\s"toggleTag systemConfigDisable . '[[disable|systemConfigDisable]]'\s"></span>",\n " </span>",\n " <span style=\s"padding:1em;\s"></span>",\n " <span macro='toolbar closeTiddler closeOthers +editTiddler deleteTiddler undoChanges permalink references jump newHere newJournalHere'></span>",\n "</div>",\n "",\n "<div class=\s"tagglyTagged\s" macro=\s"tags\s"></div>",\n "",\n "<div class='titleContainer'>",\n " <span class='title' macro='view title'></span>",\n " <span macro=\s"miniTag\s"></span>",\n "</div>",\n "",\n "<div class='subtitle'>",\n " <span macro='view modifier link'></span>,",\n " <span macro='view modified date [[DD-mmm-YY]]'></span>",\n " (<span macro='message views.wikified.createdPrompt'></span>",\n " <span macro='view created date [[DD-mmm-YY]]'></span>)",\n "</div>",\n "",\n "<div macro=\s"showWhenExists ViewPanelTemplate\s">[[ViewPanelTemplate]]</div>",\n "",\n "<div macro=\s"hideWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')\s">",\n " <div class='viewer' macro='view text wikified'></div>",\n "</div>",\n "<div macro=\s"showWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')\s">",\n " <div class='viewer'><pre macro='view text'></pre></div>",\n "</div>",\n "",\n "<div macro=\s"showWhenExists ViewDashboardTemplate\s">[[ViewDashboardTemplate]]</div>",\n "",\n "<div class=\s"tagglyTagging\s" macro=\s"tagglyTagging\s"></div>",\n "",\n "<!--}}}-->",\n ""\n].join("\sn"),\n\nMptwEditTemplate:[\n "<!--{{{-->",\n "<div class=\s"toolbar\s" macro=\s"toolbar +saveTiddler closeOthers -cancelTiddler deleteTiddler\s"></div>",\n "<div class=\s"title\s" macro=\s"view title\s"></div>",\n "<div class=\s"editLabel\s">Title</div><div class=\s"editor\s" macro=\s"edit title\s"></div>",\n "<div class=\s"editLabel\s">Tags</div><div class=\s"editor\s" macro=\s"edit tags\s"></div>",\n "<div class=\s"editorFooter\s"><span macro=\s"message views.editor.tagPrompt\s"></span><span macro=\s"tagChooser\s"></span></div>",\n "<div macro=\s"showWhenExists EditPanelTemplate\s">[[EditPanelTemplate]]</div>",\n "<div class=\s"editor\s" macro=\s"edit text\s"></div>",\n "<!--}}}-->",\n ""\n].join("\sn"),\n\nMonkeyPirateTiddlyWiki:[\n "[[MonkeyPirateTiddlyWiki|http://mptw.tiddlyspot.com]] is a distribution of [[TiddlyWiki|http://www.tiddlywiki.com/]] created by Simon Baird. See [[the web site|http://mptw.tiddlyspot.com/]] for more information.",\n "!!Upgrading ~MonkeyPirateTiddlyWiki",\n "This \s"empty\s" ~MonkeyPirateTiddlyWiki file comes pre-installed with the core ~MonkeyPirateTiddlyWiki plugins. You can upgrade these core plugins to the latest version by doing the following:",\n "* Click ImportTiddlers",\n "* Click \s"Choose...\s" and select \s"~MptwUpgradeURL\s"",\n "* Click \s"fetch\s"",\n "* Click the checkbox in the first column heading to select all tiddlers",\n "* Click \s"More actions...\s" and select \s"Import these tiddlers\s"",\n "* Click \s"OK\s" to confirm you want to overwrite the tiddlers",\n "* Save and reload",\n ""\n].join("\sn")\n\n});\n//}}}\n
/***\n| Name:|NewCollapseTiddlersPlugin|\n| Created by:|BJ Backitis|\n| Location:|http://www.tampageek.com/newcollapse.html|\n| Version:|0.7 (13 October 2006)|\n| Requires:|~TW2.x|\n!Description\nThis is a different way of doing the collapse and expand functions of the CollapseTiddlerPlugin, which does not do any switching around of templates. Instead, you modify any view templates you are using to identify which parts of the template you do NOT want displayed when the tiddler is "collapsed", and the display style property takes care of the rest.\n!Usage\n* In the toolbar of your view templates include the following commands:\n** toggleView (collapses and expands that one tiddler)\n** focusHere (expands this tiddler and collapses all other tiddlers)\n* In the body of the view template, surround any sections to be removed when the tiddler is collapsed by the following:\n{{{<div class="collapse"> ..... </div>}}}\nSee ViewTemplate for example.\n* In the main menu or Sidebar Options menus (or where ever you like) include the following macros:\n** {{{<<collapseAll>>}}} (collapses all tiddlers)\n** {{{<<expandAll>>}}} (expands all tiddlers)\n** {{{<<toggleHeader>>}}} (collapses and expands the header)\n!Revision History\n* v0.5 -- BJ Backitis, 16 Aug 2006 (Original)\n* v0.6 -- BJ Backitis, 17 Aug 2006\n** applied suggestion from Eric Shulmann to handle nesting issue\n** tidied up conditional code in toggleView (another suggestion from Eric)\n* v0.7 -- BJ Backitis, 13 Oct 2006\n** added toggleHeader macro to be able to collapse and expand page header\n** coded the commands in proper format\n{{{ merge(config.commands,( }}}\n{{{ toggleView: { ... }}} \n* v0.8 -- BJ Backitis, 20 Nov 2006\n** added toggleSidebar macro\n!To Do\n* ==Be able to handle <div> and <span> nested within other <div> or <span> elements== (done! Thanks, Eric)\n\n!Code\n***/\n//{{{\n\nmerge(config.commands,{\n\n toggleView: {\n text: "toggle",\n tooltip: "Collapse/Expand this tiddler",\n handler: function(event,src,title){\n var nodes = story.findContainingTiddler(src).getElementsByTagName("*"); \n for(var t=0; t<nodes.length; t++)\n if(nodes[t].className == "collapse")\n nodes[t].style.display=(nodes[t].style.display=="none")?"block":"none";\n }\n }, \n focusHere: {\n text: "focus",\n tooltip: "Expand this tiddler and collapse all others",\n handler: function(event,src,title){\n var e = story.findContainingTiddler(src);\n var nodes = story.findContainingTiddler(src).getElementsByTagName("*"); \n for(var t=0; t<nodes.length; t++)\n if(nodes[t].className == "collapse")\n nodes[t].style.display = "block"\n story.forEachTiddler(function(title,tiddler){\n if (tiddler!=e) {\n var nodes = tiddler.getElementsByTagName("*");\n for(var t=0; t<nodes.length; t++)\n if(nodes[t].className == "collapse")\n nodes[t].style.display = "none"\n }\n })\n }\n }\n});\n\nmerge(config.macros,{\n \n collapseAll: {\n handler: function(place,macroName,params,wikifier,paramString,tiddler){\n createTiddlyButton(place,"collapse all","Collapse all displayed tiddlers",function(){\n story.forEachTiddler(function(title,tiddler){\n var nodes = tiddler.getElementsByTagName("*"); \n for(var t=0; t<nodes.length; t++)\n if(nodes[t].className == "collapse")\n nodes[t].style.display = "none"\n })\n })\n }\n },\n expandAll: {\n handler: function(place,macroName,params,wikifier,paramString,tiddler){\n createTiddlyButton(place,"expand all","Expand all collapsed tiddlers",function(){\n story.forEachTiddler(function(title,tiddler){\n var nodes = tiddler.getElementsByTagName("*"); \n for(var t=0; t<nodes.length; t++)\n if(nodes[t].className == "collapse")\n nodes[t].style.display = "block"\n })\n })\n }\n },\n toggleHeader: {\n handler: function(place,macroName,params,wikifier,paramString,tiddler){\n createTiddlyButton(place,"toggle header","Collapse/expand the header",function(){\n var e = document.getElementById('header');\n e.style.display=(e.style.display=="none")?"block":"none"; \n })\n }\n },\n toggleSidebarX: {\n handler: function(place,macroName,params,wikifier,paramString,tiddler){\n createTiddlyButton(place,"toggle sidebar","Collapse/expand the sidebar",function(){\n var e = document.getElementById('sidebar');\n e.style.display=(e.style.display=="none")?"block":"none"; \n })\n }\n },\n toggleSidebar: {\n handler: function(place,macroName,params,wikifier,paramString,tiddler){\n createTiddlyButton(place,"toggle sidebar","Collapse/expand the sidebar",function(){\n var e = document.getElementById('sidebar');\n var s = document.getElementById('displayArea');\n if (e.style.display=="none") {\n e.style.display = "block";\n s.style.marginRight = "15.7em";\n }\n else {\n e.style.display = "none";\n s.style.marginRight = "1em";\n \n } \n \n })\n }\n }});\n\n//\n//}}}\n
/***\n| Name:|NewHerePlugin|\n| Description:|Creates the new here and new journal toolbar commands|\n| Version:|6.1.6|\n| Date:|06-Oct-2006|\n| Source:|http://mptw.tiddlyspot.com/#NewHerePlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\n| CoreVersion:|2.1.x|\nTo use edit your ViewTemplate and add newHere to the toolbar div, eg\n{{{<div class='toolbar' macro='toolbar ... newHere'></div>}}}\nNote: would be good if we could do this instead some day\n{{{<<newTiddler tag:{{tiddler.title}} label:'new here'>>}}}\n***/\n//{{{\nmerge(config.commands,{\n\n newHere: {\n text: 'new here',\n tooltip: 'Create a new tiddler tagged as this tiddler',\n hideReadOnly: true,\n handler: function(e,src,title) {\n if (!readOnly) {\n clearMessage();\n var t=document.getElementById('tiddler'+title);\n story.displayTiddler(t,config.macros.newTiddler.title,DEFAULT_EDIT_TEMPLATE);\n story.setTiddlerTag(config.macros.newTiddler.title, title, 0);\n story.focusTiddler(config.macros.newTiddler.title,"title"); // doesn't work??\n return false;\n }\n }\n },\n\n newJournalHere: {\n //text: 'new journal here', // too long\n text: 'new journal',\n hideReadOnly: true,\n dataFormat: 'DD MMM YYYY', // adjust to your preference\n //dataFormat: 'YYYY-0MM-0DD', \n tooltip: 'Create a new journal tiddler tagged as this tiddler',\n handler: function(e,src,title) {\n if (!readOnly) {\n clearMessage();\n var now = new Date();\n var t=document.getElementById('tiddler'+title);\n var newtitle = now.formatString(this.dataFormat)\n story.displayTiddler(t,newtitle,DEFAULT_EDIT_TEMPLATE);\n story.setTiddlerTag(newtitle, title, 0);\n story.focusTiddler(newtitle,"title");\n return false;\n }\n }\n }\n\n});\n//}}}\n
/***\n| Name:|NewTiddlerPlusPlugin (formerly NewTiddlerWithFieldsPlugin)|\n| Created by:|BJ Backitis|\n| Location:|http://tampageekland.tiddlyspot.com#NewTiddlerPlusPlugin|\n| Version:|0.3.0 (10 Dec 2006)|\n| Requires:|~TW2.1.0|\n!Description\nThis is a clone of the NewTiddler core macro that allows for the following:\n*Adding custom fields and values. Any param "name: value" pair where the name is not a \nrecognized param (title, text, label, prompt, accessKey, template, focus, and tag) will be treated as a custom field name and value. \n*Specifying a special tag that causes the new Tiddler to be tagged with the title of the tidder where the NewTiddlerPlus was invoked (aka "newHere"). The special tag value to be used is customizable, and can be a single character (like "*") or string ("tagNewHere"). Custom fields can also be set to title of the tiddler by using the special value.\n*Specifying a special tag that causes the new Tiddler to be tagged with the title //as well as all of the tags// of the tiddler where the NewTiddlerPlus was invoked. The special tag value to be used is customizable, and can be a single character (like "*") or string ("tagNewHereAll").\n!Usage\nUse like the existing {{{<<newTiddler>>}}} macro, but any unknown param "name: value" pairs will be treated as a custom field name and value. Be sure to have the custom field defined in your view and/or edit templates so you can see them (if you wish)!\n\nExamples:\n*Specify value for field "gtdtype":\n<<newTiddlerPlus title: 'New Example Tiddler' label:'New Example' tag: special customTiddler gtdtype: Example>> (produced by: {{{<<newTiddlerPlus title: 'New Example Tiddler' label:'New Example' tag: special customTiddler gtdtype: Example>>}}})\n*Specify value for field "gtdtype", plus tag: * (default newHere with title from parent tiddler)\n<<newTiddlerPlus title: 'New Example newHere Tiddler' label:'New Example' tag: * special customTiddler gtdtype: Example>> (produced by: {{{<<newTiddlerPlus title: 'New Example newHere Tiddler' label:'New Example' tag: * special customTiddler gtdtype: Example>>}}})\n*Specify value for field "ftdtype", plus tag: ** (default for newHere with title and all tags from parent tiddler)\n<<newTiddlerPlus title: 'New Example newHere Tiddler' label:'New Example' tag: ** special customTiddler gtdtype: Example>> (produced by: {{{<<newTiddlerPlus title: 'New Example newHere Tiddler' label:'New Example' tag: ** special customTiddler gtdtype: Example>>}}})\n\n!Revision History\n* v0.1.0 -- BJ Backitis, 16 Nov 2006 (Original, based on a suggestion from Simon Baird)\n** v0.1.1 -- BJ Backitis, 17 Nov 2006 (fixed default label)\n* v0.2.0 -- BJ Backitis, 18 Nov 2006 (a little cleanup, plus added "newHere" capability with special customizable tag strings to tag new tiddler with title, or title and all tags, of the tiddler where the NewTiddlerWithFields was invoked)\n* v0.3.0 -- BJ Backitis, 10 Dec 2006 (name changed to NewTiddlerPlus; added ability to use "newHere" to set a custom field to a tiddler title)\n!To Do\n* {{{<<newJournalPlus>>}}}???\n\n\n!Code\n***/\n\n//{{{\n\nconfig.macros.newTiddlerPlus = {\n label: "new Tiddler",\n prompt: "Create a new tiddler with custom fields",\n newTitle: "new Tiddler"\n} \n \nconfig.macros.newTiddlerPlus.fixedParams = ["title", "tag", "label", "text", "prompt", "accessKey", "focus", "template", "anon"];\nconfig.macros.newTiddlerPlus.tagHere = "*";\nconfig.macros.newTiddlerPlus.tagAll = "**";\n\n\nconfig.macros.newTiddlerPlus.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n if(!readOnly) {\n params = paramString.parseParams("anon",null,true,false,false);\n var newTitle = params[1] && params[1].name == "anon" ? params[1].value : this.newTitle;\n newTitle = getParam(params,"title",newTitle);\n if (tiddler instanceof Tiddler) {\n var hereTitle = tiddler.title;\n var hereTags = tiddler.tags;\n this.createNewTiddlerPlusButton(place,newTitle,params,this.label,this.prompt,this.accessKey,"title",false,hereTitle,hereTags);\n }\n else\n this.createNewTiddlerPlusButton(place,newTitle,params,this.label,this.prompt,this.accessKey,"title",false);\n }\n}\n\nconfig.macros.newTiddlerPlus.createNewTiddlerPlusButton = function(place,newTitle,params,label,prompt,accessKey,newFocus,isJournal,hereTitle,hereTags) {\n var tags = [];\n var custFields = [];\n var custValues = [];\n for(var t=1; t<params.length; t++) {\n if (!this.fixedParams.contains(params[t].name)) {\n custFields.push(params[t].name);\n if (hereTitle && params[t].value == config.macros.newTiddlerPlus.tagHere)\n custValues.push(hereTitle);\n else\n custValues.push(params[t].value);\n }\n else if((params[t].name == "anon" && t != 1) || (params[t].name == "tag")) {\n if (!hereTitle)\n tags.push(params[t].value);\n else { \n if (params[t].value == config.macros.newTiddlerPlus.tagHere) \n tags.push(hereTitle);\n if (params[t].value == config.macros.newTiddlerPlus.tagAll) {\n tags.push(hereTitle); \n for (var i=0; i<hereTags.length; i++) \n tags.push(hereTags[i]);\n } \n if ((params[t].value != config.macros.newTiddlerPlus.tagHere) && (params[t].value != config.macros.newTiddlerPlus.tagAll)) \n tags.push(params[t].value);\n }\n } \n } \n label = getParam(params,"label",label);\n prompt = getParam(params,"prompt",prompt);\n accessKey = getParam(params,"accessKey",accessKey);\n newFocus = getParam(params,"focus",newFocus);\n var btn = createTiddlyButton(place,label,prompt,this.onClickNewTiddlerPlus,null,null,accessKey);\n btn.setAttribute("newTitle",newTitle);\n btn.setAttribute("isJournal",isJournal);\n btn.setAttribute("params",tags.join("|"));\n btn.setAttribute("custFields",custFields.join("|"));\n btn.setAttribute("custValues",custValues.join("|"));\n btn.setAttribute("newFocus",newFocus);\n btn.setAttribute("newTemplate",getParam(params,"template",DEFAULT_EDIT_TEMPLATE));\n var text = getParam(params,"text");\n if(text !== undefined) \n btn.setAttribute("newText",text);\n return btn;\n}\n\n\nconfig.macros.newTiddlerPlus.onClickNewTiddlerPlus = function() {\n var newTitle = this.getAttribute("newTitle");\n if(this.getAttribute("isJournal")) {\n var now = new Date();\n newTitle = now.formatString(newTitle.trim());\n }\n var params = this.getAttribute("params").split("|");\n var custFields = this.getAttribute("custFields").split("|");\n var custValues = this.getAttribute("custValues").split("|");\n var focus = this.getAttribute("newFocus");\n var template = this.getAttribute("newTemplate");\n story.displayTiddler(null,newTitle,template);\n var text = this.getAttribute("newText");\n if (typeof text == "string")\n story.getTiddlerField(newTitle,"text").value = text.format([newTitle]);\n for (var t=0;t<params.length;t++)\n story.setTiddlerTag(newTitle,params[t],+1);\n for (var i=0;i<custFields.length;i++) \n story.setTiddlerField(newTitle,custValues[i],+1,custFields[i]);\n story.focusTiddler(newTitle,focus);\n return false;\n}\n\n\n//}}}\n
/***\n| Name:|NewTiddlerWithFieldsPlugin|\n| Created by:|BJ Backitis|\n| Location:|http://tampageekland.tiddlyspot.com#NewTiddlerWithFieldsPlugin|\n| Version:|0.2.0 (25 Nov 2006)|\n| Requires:|~TW2.1.x|\n!Description\nThis is a clone of the NewTiddler core macro that allows for the following:\n*Adding custom fields and values. Any param "name: value" pair where the name is not a \nrecognized param (title, text, label, prompt, accessKey, template, focus, and tag) will be treated as a custom field name and value. \n*Specifying a special tag that causes the new Tiddler to be tagged with the title of the tidder where the NewTiddlerWithFields was invoked (aka "newHere"). The special tag value to be used is customizable, and can be a single character (like "*") or string ("tagNewHere").\n*Specifying a special tag that causes the new Tiddler to be tagged with the title //as well as all of the tags// of the tiddler where the NewTiddlerWithFields was invoked. The special tag value to be used is customizable, and can be a single character (like "*") or string ("tagNewHereAll").\n!Usage\nUse like the existing {{{<<newTiddler>>}}} macro, but any unknown param "name: value" pairs will be treated as a custom field name and value. Be sure to have the custom field defined in your view and/or edit templates so you can see them (if you wish)!\n\nExamples:\n*Specify value for field "gtdtype":\n<<newTiddlerWithFields title: 'New Example Tiddler' label:'New Example' tag: special customTiddler gtdtype: Example>> (produced by: {{{<<newTiddlerWithFields title: 'New Example Tiddler' label:'New Example' tag: special customTiddler gtdtype: Example>>}}})\n*Specify value for field "gtdtype", plus tag: * (default newHere with title from parent tiddler)\n<<newTiddlerWithFields title: 'New Example newHere Tiddler' label:'New Example' tag: * special customTiddler gtdtype: Example>> (produced by: {{{<<newTiddlerWithFields title: 'New Example newHere Tiddler' label:'New Example' tag: * special customTiddler gtdtype: Example>>}}})\n*Specify value for field "ftdtype", plus tag: ** (default for newHere with title and all tags from parent tiddler)\n<<newTiddlerWithFields title: 'New Example newHere Tiddler' label:'New Example' tag: ** special customTiddler gtdtype: Example>> (produced by: {{{<<newTiddlerWithFields title: 'New Example newHere Tiddler' label:'New Example' tag: ** special customTiddler gtdtype: Example>>}}})\n\n!Revision History\n* v0.1.0 -- BJ Backitis, 16 Nov 2006 (Original, based on a suggestion from Simon Baird)\n** v0.1.1 -- BJ Backitis, 17 Nov 2006 (fixed default label)\n* v0.2.0 -- BJ Backitis, 18 Nov 2006 (a little cleanup, plus added "newHere" capability with special customizable tag strings to tag new tiddler with title, or title and all tags, of the tiddler where the NewTiddlerWithFields was invoked)\n!To Do\n* {{{<<newJournalWithFields>>}}}???\n\n\n!Code\n***/\n\n//{{{\n\nconfig.macros.newTiddlerWithFields = {\n label: "new Tiddler",\n prompt: "Create a new tiddler with custom fields",\n newTitle: "new Tiddler"\n} \n \nconfig.macros.newTiddlerWithFields.fixedParams = ["title", "tag", "label", "text", "prompt", "accessKey", "focus", "template", "anon"];\nconfig.macros.newTiddlerWithFields.tagHere = "*";\nconfig.macros.newTiddlerWithFields.tagAll = "**";\n\n\nconfig.macros.newTiddlerWithFields.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n if(!readOnly) {\n params = paramString.parseParams("anon",null,true,false,false);\n var newTitle = params[1] && params[1].name == "anon" ? params[1].value : this.newTitle;\n newTitle = getParam(params,"title",newTitle);\n if (tiddler instanceof Tiddler) {\n var hereTitle = tiddler.title;\n var hereTags = tiddler.tags;\n this.createNewTiddlerWithFieldsButton(place,newTitle,params,this.label,this.prompt,this.accessKey,"title",false,hereTitle,hereTags);\n }\n else\n this.createNewTiddlerWithFieldsButton(place,newTitle,params,this.label,this.prompt,this.accessKey,"title",false);\n }\n}\n\nconfig.macros.newTiddlerWithFields.createNewTiddlerWithFieldsButton = function(place,newTitle,params,label,prompt,accessKey,newFocus,isJournal,hereTitle,hereTags) {\n var tags = [];\n var custFields = [];\n var custValues = [];\n for(var t=1; t<params.length; t++) {\n if (!this.fixedParams.contains(params[t].name)) {\n custFields.push(params[t].name);\n custValues.push(params[t].value);\n }\n else if((params[t].name == "anon" && t != 1) || (params[t].name == "tag")) {\n if (!hereTitle)\n tags.push(params[t].value);\n else { \n if (params[t].value == config.macros.newTiddlerWithFields.tagHere) \n tags.push(hereTitle);\n if (params[t].value == config.macros.newTiddlerWithFields.tagAll) {\n tags.push(hereTitle); \n for (var i=0; i<hereTags.length; i++) \n tags.push(hereTags[i]);\n } \n if ((params[t].value != config.macros.newTiddlerWithFields.tagHere) && (params[t].value != config.macros.newTiddlerWithFields.tagAll)) \n tags.push(params[t].value);\n }\n } \n } \n label = getParam(params,"label",label);\n prompt = getParam(params,"prompt",prompt);\n accessKey = getParam(params,"accessKey",accessKey);\n newFocus = getParam(params,"focus",newFocus);\n var btn = createTiddlyButton(place,label,prompt,this.onClickNewTiddlerWithFields,null,null,accessKey);\n btn.setAttribute("newTitle",newTitle);\n btn.setAttribute("isJournal",isJournal);\n btn.setAttribute("params",tags.join("|"));\n btn.setAttribute("custFields",custFields.join("|"));\n btn.setAttribute("custValues",custValues.join("|"));\n btn.setAttribute("newFocus",newFocus);\n btn.setAttribute("newTemplate",getParam(params,"template",DEFAULT_EDIT_TEMPLATE));\n var text = getParam(params,"text");\n if(text !== undefined) \n btn.setAttribute("newText",text);\n return btn;\n}\n\n\nconfig.macros.newTiddlerWithFields.onClickNewTiddlerWithFields = function() {\n var newTitle = this.getAttribute("newTitle");\n if(this.getAttribute("isJournal")) {\n var now = new Date();\n newTitle = now.formatString(newTitle.trim());\n }\n var params = this.getAttribute("params").split("|");\n var custFields = this.getAttribute("custFields").split("|");\n var custValues = this.getAttribute("custValues").split("|");\n var focus = this.getAttribute("newFocus");\n var template = this.getAttribute("newTemplate");\n story.displayTiddler(null,newTitle,template);\n var text = this.getAttribute("newText");\n if (typeof text == "string")\n story.getTiddlerField(newTitle,"text").value = text.format([newTitle]);\n for (var t=0;t<params.length;t++)\n story.setTiddlerTag(newTitle,params[t],+1);\n for (var i=0;i<custFields.length;i++) \n story.setTiddlerField(newTitle,custValues[i],+1,custFields[i]);\n story.focusTiddler(newTitle,focus);\n return false;\n}\n\n\n//}}}\n
tiddlyspot password:\n<<option pasUploadPassword>>\n\nThese InterfaceOptions for customising TiddlyWiki are saved in your browser\n\nYour username for signing your edits. Write it as a WikiWord (eg JoeBloggs)\n\n<<option txtUserName>>\n<<option chkSaveBackups>> SaveBackups\n<<option chkAutoSave>> AutoSave\n<<option chkRegExpSearch>> RegExpSearch\n<<option chkCaseSensitiveSearch>> CaseSensitiveSearch\n<<option chkAnimate>> EnableAnimations\n\nGTD function options:\n\n<<option chkDsplGTDTypeView>> Display GTD type (View)\n<<option chkDsplGTDTypeEdit>> Display GTD type (Edit)\n\n----\nAdvancedOptions\nPluginManager\nImportTiddlers\n[[Configuration|Config]]\n----\nVersion Information\nTW: <<version>>\nMGTD: <<tiddler MonkeyGTDVersion>>
\n<!--{{{-->\n<!--div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>\n <div class='headerShadow'>\n <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n </div>\n <div class='headerForeground'>\n <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n </div>\n</div-->\n<!-- horizontal MainMenu -->\n<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>\n<div id='topMenu' refresh='content' tiddler='MainMenu' ></div>\n<div id='topMenu2' refresh='content' tiddler='SubMenu' ></div>\n</div>\n<!-- original MainMenu menu -->\n<!-- <div id='mainMenu' refresh='content' tiddler='MainMenu'></div> -->\n<div id='sidebar'>\n <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n <div id='messageArea'></div>\n <div id='tiddlerDisplay'></div>\n</div>\n<!--}}}-->\n\n
/***\n| Name:|QuickOpenTagPlugin|\n| Description:|Changes tag links to make it easier to open tags as tiddlers|\n| Version:|6.1.1|\n| Date:|01-Oct-2006|\n| Source:|http://mptw.tiddlyspot.com/#QuickOpenTagPlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\n| CoreVersion:|2.1.x|\n***/\n//{{{\nconfig.quickOpenTag = {\n\n dropdownChar: (document.all ? "\su25bc" : "\su25be"), // the little one doesn't work in IE\n\n createTagButton: function(place,tag,excludeTiddler) {\n // little hack so we can to <<tag PrettyTagName|RealTagName>>\n var splitTag = tag.split("|");\n var pretty = tag;\n if (splitTag.length == 2) {\n tag = splitTag[1];\n pretty = splitTag[0];\n }\n \n var sp = createTiddlyElement(place,"span",null,"quickopentag");\n createTiddlyText(createTiddlyLink(sp,tag,false),pretty);\n \n var theTag = createTiddlyButton(sp,config.quickOpenTag.dropdownChar,\n config.views.wikified.tag.tooltip.format([tag]),onClickTag);\n theTag.setAttribute("tag",tag);\n if (excludeTiddler)\n theTag.setAttribute("tiddler",excludeTiddler);\n return(theTag);\n },\n\n miniTagHandler: function(place,macroName,params,wikifier,paramString,tiddler) {\n var tagged = store.getTaggedTiddlers(tiddler.title);\n if (tagged.length > 0) {\n var theTag = createTiddlyButton(place,config.quickOpenTag.dropdownChar,\n config.views.wikified.tag.tooltip.format([tiddler.title]),onClickTag);\n theTag.setAttribute("tag",tiddler.title);\n theTag.className = "miniTag";\n }\n },\n\n allTagsHandler: function(place,macroName,params) {\n var tags = store.getTags();\n var theDateList = createTiddlyElement(place,"ul");\n if(tags.length == 0)\n createTiddlyElement(theDateList,"li",null,"listTitle",this.noTags);\n for (var t=0; t<tags.length; t++) {\n var theListItem = createTiddlyElement(theDateList,"li");\n var theLink = createTiddlyLink(theListItem,tags[t][0],true);\n var theCount = " (" + tags[t][1] + ")";\n theLink.appendChild(document.createTextNode(theCount));\n var theDropDownBtn = createTiddlyButton(theListItem," " +\n config.quickOpenTag.dropdownChar,this.tooltip.format([tags[t][0]]),onClickTag);\n theDropDownBtn.setAttribute("tag",tags[t][0]);\n }\n },\n\n // todo fix these up a bit\n styles: \n"/*{{{*/\sn"+\n"/* created by QuickOpenTagPlugin */\sn"+\n".tagglyTagged .quickopentag, .tagged .quickopentag \sn"+\n" { margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }\sn"+\n".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }\sn"+\n".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}\sn"+\n"/* extra specificity to make it work right */\sn"+\n"#displayArea .viewer .quickopentag a.button, \sn"+\n"#displayArea .viewer .quickopentag a.tiddyLink, \sn"+\n"#mainMenu .quickopentag a.tiddyLink, \sn"+\n"#mainMenu .quickopentag a.tiddyLink \sn"+\n" { border:0px solid black; }\sn"+\n"#displayArea .viewer .quickopentag a.button, \sn"+\n"#mainMenu .quickopentag a.button \sn"+\n" { margin-left:0px; padding-left:2px; }\sn"+\n"#displayArea .viewer .quickopentag a.tiddlyLink, \sn"+\n"#mainMenu .quickopentag a.tiddlyLink \sn"+\n" { margin-right:0px; padding-right:0px; padding-left:0px; margin-left:0px; }\sn"+\n"a.miniTag {font-size:150%;} \sn"+\n"#mainMenu .quickopentag a.button \sn"+\n" /* looks better in right justified main menus */\sn"+\n" { margin-left:0px; padding-left:2px; margin-right:0px; padding-right:0px; }\sn" + \n"#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }\sn" +\n"#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }\sn" +\n"#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }\sn" +\n"/*}}}*/\sn"+\n "",\n\n init: function() {\n // we fully replace these builtins. can't hijack them easily\n window.createTagButton = this.createTagButton;\n config.macros.allTags.handler = this.allTagsHandler;\n config.macros.miniTag = { handler: this.miniTagHandler };\n config.shadowTiddlers["QuickOpenTagStyles"] = this.styles;\n if (store)\n store.addNotification("QuickOpenTagStyles",refreshStyles);\n else\n config.notifyTiddlers.push({name:"QuickOpenTagStyles", notify: refreshStyles});\n }\n\n}\n\nconfig.quickOpenTag.init();\n\n//}}}\n
/***\n|''Name:''|RearrangeTiddlersPlugin|\n|''Source:''|http://www.TiddlyTools.com/#RearrangeTiddlersPlugin|\n|''Author:''|Joe Raii|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.0.10|\n\nadapted from: http://www.cs.utexas.edu/~joeraii/dragn/#Draggable\nchanges by ELS:\n* hijack refreshTiddler() instead of overridding createTiddler()\n* find title element by className instead of elementID\n* set cursor style via code instead of stylesheet\n* set tooltip help text\n* set tiddler "position:relative" when starting drag event, restore saved value when drag ends\n* update 2006.08.07: use getElementsByTagName("*") to find title element, even when it is 'buried' deep in tiddler DOM elements (due to custom template usage)\n\n***/\n//{{{\n\nStory.prototype.rearrangeTiddlersHijack_refreshTiddler = Story.prototype.refreshTiddler;\nStory.prototype.refreshTiddler = function(title,template,unused1,unused2,unused3,unused4,unused5)\n{\n this.rearrangeTiddlersHijack_refreshTiddler(title,template,unused1,unused2,unused3,unused4,unused5);\n var theTiddler = document.getElementById(this.idPrefix + title); if (!theTiddler) return;\n var theHandle;\n var children=theTiddler.getElementsByTagName("*");\n for (var i=0; i<children.length; i++) if (hasClass(children[i],"title")) { theHandle=children[i]; break; }\n if (!theHandle) return theTiddler;\n\n Drag.init(theHandle, theTiddler, 0, 0, null, null);\n theHandle.style.cursor="move";\n theHandle.title="drag title to re-arrange tiddlers"\n theTiddler.onDrag = function(x,y,myElem) {\n if (this.style.position!="relative")\n { this.savedstyle=this.style.position; this.style.position="relative"; }\n y = myElem.offsetTop;\n var next = myElem.nextSibling;\n var prev = myElem.previousSibling;\n if (next && y + myElem.offsetHeight > next.offsetTop + next.offsetHeight/2) { \n myElem.parentNode.removeChild(myElem);\n next.parentNode.insertBefore(myElem, next.nextSibling);//elems[pos+1]);\n myElem.style["top"] = -next.offsetHeight/2+"px";\n }\n if (prev && y < prev.offsetTop + prev.offsetHeight/2) { \n myElem.parentNode.removeChild(myElem);\n prev.parentNode.insertBefore(myElem, prev);\n myElem.style["top"] = prev.offsetHeight/2+"px";\n }\n };\n theTiddler.onDragEnd = function(x,y,myElem) {\n myElem.style["top"] = "0px";\n if (this.savedstyle!=undefined)\n this.style.position=this.savedstyle;\n }\n return theTiddler;\n}\n\n/**************************************************\n * dom-drag.js\n * 09.25.2001\n * www.youngpup.net\n **************************************************\n * 10.28.2001 - fixed minor bug where events\n * sometimes fired off the handle, not the root.\n **************************************************/\n\nvar Drag = {\n obj:null,\n\n init:\n function(o, oRoot, minX, maxX, minY, maxY) {\n o.onmousedown = Drag.start;\n o.root = oRoot && oRoot != null ? oRoot : o ;\n if (isNaN(parseInt(o.root.style.left))) o.root.style.left="0px";\n if (isNaN(parseInt(o.root.style.top))) o.root.style.top="0px";\n o.minX = typeof minX != 'undefined' ? minX : null;\n o.minY = typeof minY != 'undefined' ? minY : null;\n o.maxX = typeof maxX != 'undefined' ? maxX : null;\n o.maxY = typeof maxY != 'undefined' ? maxY : null;\n o.root.onDragStart = new Function();\n o.root.onDragEnd = new Function();\n o.root.onDrag = new Function();\n },\n\n start:\n function(e) {\n var o = Drag.obj = this;\n e = Drag.fixE(e);\n var y = parseInt(o.root.style.top);\n var x = parseInt(o.root.style.left);\n o.root.onDragStart(x, y, Drag.obj.root);\n o.lastMouseX = e.clientX;\n o.lastMouseY = e.clientY;\n if (o.minX != null) o.minMouseX = e.clientX - x + o.minX;\n if (o.maxX != null) o.maxMouseX = o.minMouseX + o.maxX - o.minX;\n if (o.minY != null) o.minMouseY = e.clientY - y + o.minY;\n if (o.maxY != null) o.maxMouseY = o.minMouseY + o.maxY - o.minY;\n document.onmousemove = Drag.drag;\n document.onmouseup = Drag.end;\n Drag.obj.root.style["z-index"] = "10";\n return false;\n },\n\n drag:\n function(e) {\n e = Drag.fixE(e);\n var o = Drag.obj;\n var ey = e.clientY;\n var ex = e.clientX;\n var y = parseInt(o.root.style.top);\n var x = parseInt(o.root.style.left);\n var nx, ny;\n if (o.minX != null) ex = Math.max(ex, o.minMouseX);\n if (o.maxX != null) ex = Math.min(ex, o.maxMouseX);\n if (o.minY != null) ey = Math.max(ey, o.minMouseY);\n if (o.maxY != null) ey = Math.min(ey, o.maxMouseY);\n nx = x + (ex - o.lastMouseX);\n ny = y + (ey - o.lastMouseY);\n Drag.obj.root.style["left"] = nx + "px";\n Drag.obj.root.style["top"] = ny + "px";\n Drag.obj.lastMouseX = ex;\n Drag.obj.lastMouseY = ey;\n Drag.obj.root.onDrag(nx, ny, Drag.obj.root);\n return false;\n },\n\n end:\n function() {\n document.onmousemove = null;\n document.onmouseup = null;\n Drag.obj.root.style["z-index"] = "0";\n Drag.obj.root.onDragEnd(parseInt(Drag.obj.root.style["left"]), parseInt(Drag.obj.root.style["top"]), Drag.obj.root);\n Drag.obj = null;\n },\n\n fixE:\n function(e) {\n if (typeof e == 'undefined') e = window.event;\n if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;\n if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;\n return e;\n }\n};\n//}}}\n
/***\n| Name:|RenameTagsPlugin|\n| Description:|Allows you to easily rename or delete tags across multiple tiddlers|\n| Version:|6.1.18|\n| Date:|18-Oct-2006|\n| Source:|http://mptw.tiddlyspot.com/#RenameTagsPlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\n| CoreVersion:|2.1.x|\nRename a tag and you will be prompted to rename it in all its tagged tiddlers.\n***/\n//{{{\nconfig.renameTags = {\n\n prompts: {\n rename: "Rename the tag '%0' to '%1' in %2 tidder%3?",\n remove: "Remove the tag '%0' from %1 tidder%2?"\n },\n\n removeTag: function(tag,tiddlers) {\n store.suspendNotifications();\n for (var i=0;i<tiddlers.length;i++) {\n store.setTiddlerTag(tiddlers[i].title,false,tag);\n }\n store.resumeNotifications();\n store.notifyAll();\n },\n\n renameTag: function(oldTag,newTag,tiddlers) {\n store.suspendNotifications();\n for (var i=0;i<tiddlers.length;i++) {\n store.setTiddlerTag(tiddlers[i].title,false,oldTag); // remove old\n store.setTiddlerTag(tiddlers[i].title,true,newTag); // add new\n }\n store.resumeNotifications();\n store.notifyAll();\n },\n\n storeMethods: {\n\n saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,\n\n saveTiddler: function(title,newTitle,newBody,modifier,modified,tags,fields) {\n if (title != newTitle) {\n var tagged = this.getTaggedTiddlers(title);\n if (tagged.length > 0) {\n // then we are renaming a tag\n if (confirm(config.renameTags.prompts.rename.format([title,newTitle,tagged.length,tagged.length>1?"s":""])))\n config.renameTags.renameTag(title,newTitle,tagged);\n\n if (!this.tiddlerExists(title) && newBody == "")\n // dont create unwanted tiddler\n return null;\n }\n }\n return this.saveTiddler_orig_renameTags(title,newTitle,newBody,modifier,modified,tags,fields);\n },\n\n removeTiddler_orig_renameTags: TiddlyWiki.prototype.removeTiddler,\n\n removeTiddler: function(title) {\n var tagged = this.getTaggedTiddlers(title);\n if (tagged.length > 0)\n if (confirm(config.renameTags.prompts.remove.format([title,tagged.length,tagged.length>1?"s":""])))\n config.renameTags.removeTag(title,tagged);\n return this.removeTiddler_orig_renameTags(title);\n }\n\n },\n\n init: function() {\n merge(TiddlyWiki.prototype,this.storeMethods);\n }\n}\n\nconfig.renameTags.init();\n\n//}}}\n\n
/***\n|''Name:''|Select macro|\n|''Description:''|To make it easy to edit tiddler relationships|\n|''Version:''|0.1|\n|''Date:''|Aug 1, 2006|\n|''Source:''|http://www.tiddlystyles.com|\n|''Author:''|ClintChecketts (checketts (at) gmail (dot) com)|\n|''License:''|[[BSD open source license]]|\n|''~CoreVersion:''|2.1.0|\n|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|\n\n!Updates\n* added a couple of bits - Simon\n\n***/\n\n//{{{\nversion.extensions.select = {major: 0, minor: 0, revision: 1, date: new Date(2006,8,1)};\nconfig.macros.select = {tooltip: "Show tiddlers tagged with '%0'",noTags: "There are no tags to display"};\n\nconfig.macros.select.handler = function(place,macroName,params,wikifier,paramString,tiddler)\n{\n authors = [];\n\n var selectFrom = params[1].readBracketedList();\n\n for(var i=0; i<selectFrom.length; i++)\n authors.push({name:selectFrom[i], caption:selectFrom[i]});\n\n var selector = createTiddlyDropDown(place,null,authors,store.getValue(tiddler.title,params[0]));\n selector.setAttribute("edit",params[0]);\n}\n\n// //Extending this for fun\n\nfunction createTiddlyDropDown(place,onchange,options,defaultValue)\n{\n var sel = createTiddlyElement(place,"select");\n sel.onchange = onchange;\n var foo = 0;\n for(var t=0; t<options.length; t++)\n {\n var e = createTiddlyElement(sel,"option",null,null,options[t].caption);\n if (options[t].name == defaultValue) foo = t;\n e.value = options[t].name;\n }\n sel.selectedIndex = foo;\n return sel;\n}\n\n//}}}
/***\n!Example Usage\n| Local|{{{<<showClock>>}}}|\n| Queensland|{{{<<showClock +10>>}}}|\n| England (DST)|{{{<<showClock +1>>}}}|\n| California (DST)|{{{<<showClock -7>>}}}|\n***/\n//{{{\nversion.extensions.ShowClockMacro = { major: 0, minor: 0, revision: 1, date: new Date(2006,7,12),\n source: "http://tiddlyspot.com/timezones/#ShowClockMacro"\n};\n\nconfig.macros.showClock = {\n\n defaultClass: 'clock',\n\n // this for seconds\n //tickDelay: 1000, \n //format: "0DD MMM, YYYY 0hh:0mm:0ss",\n\n // this for minute\n tickDelay: 1000 * 15, \n format: "0DD MMM YYYY 0hh:0mm",\n\n// styles: \n// ".clock {\sn"+\n// " padding:0 0.5em;\sn"+\n// "}\sn" +\n// ".clock .dow { color:#000; }\sn" +\n// ".clock .time { color:#000; }\sn" +\n// ".clock .offset { color:#999; }\sn" +\n// "",\n\n styles: \n ".clock {\sn" +\n " margin: 0em 0.2em;\sn" + \n " padding: 0.2em 0.3em;\sn" +\n " font-weight:bold;\sn" +\n " position:relative;float:right;\sn" + \n "}\sn" +\n ".clock .dow { }\sn" +\n ".clock .time { }\sn" +\n ".clock .offset { }\sn" +\n "",\n\n count: 0,\n\n handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n var offset = params[0] || '';\n var useClass = params[1] || this.defaultClass;\n var c = this.count++;\n var clockElement = createTiddlyElement(place, "span", "clock" + c, useClass);\n clockElement.setAttribute("offset",offset);\n this.refreshDisplay(c);\n this.waitForTick(c);\n },\n\n waitForTick: function(c) {\n setTimeout("config.macros.showClock.tick(" + c + ")", this.tickDelay);\n },\n\n tick: function(c) {\n if (this.stillHere(c)) {\n this.refreshDisplay(c)\n this.waitForTick(c);\n }\n },\n\n getClock: function(c) {\n return document.getElementById("clock" + c);\n },\n\n stillHere: function(c) {\n return this.getClock(c) != null;\n },\n\n refreshDisplay: function(c) {\n var clock = this.getClock(c);\n var offset = clock.getAttribute("offset")\n var now = new Date();\n //var label = "local";\n var label = "";\n if (offset && offset != '') {\n var offsetInt = parseInt(offset);\n now.setHours(now.getHours() + (now.getTimezoneOffset() / 60) + offsetInt);\n label = "GMT " + (offsetInt == 0 ? "" : offsetInt > 0 ? "+"+offsetInt : offsetInt);\n }\n// '<span class="time">' + now.formatString(this.format) + '</span>' + \n clock.innerHTML =\n '<span class="time">' + now.formatString("0hh:0mm") + ' </span>' + \n '<span class="dow">' + now.formatString("DDD").substr(0,3) + ' </span>' +\n '<span class="time">' + now.formatString("0DD") + ' ' + now.formatString("MMM").substr(0,3) +\n ' ' + now.formatString("YY") + '</span>' +\n '<span class="offset"> ' + label + '</span>'\n }\n\n};\n\nsetStylesheet(config.macros.showClock.styles,"showClockStyles");\n\n//}}}\n
/***\n| Name:|showTagsMacro|\n| Version:|0.0.1 (11 November 2006)|\n| Source:|to be determined|\n| Author:|BJ Backitis (from incredible stuff by Simon Baird)|\n| Core TW:|~TiddlyWiki 2.1.x|\n| Other Req's:|needs MonkeyGTDPlugin (http://mgtd-alpha.tiddlyspot.com/#MonkeyGTDPlugin), which is currently in alpha version so it will likely change!!!|\n!Description\nI really missed the HideSomeTags function in an older version of Simon Baird's TagglyListPlugin (found at http://mptw2.tiddlyspot.com/#TagglyListPlugin). The newer TagglyTaggingPlugin (found at http://mptw.tiddlyspot.com/#TagglyTaggingPlugin) doesn't have that function from what I could see. Then I started using the alpha version of MonkeyGTD which is fantastic but has a self-admitted "tag abuse" problem. I know this is going to get corrected, but in the meantime I was getting very annoyed with all the tags showing up for the different GTD-ish tiddlers. \n\nLooking at the MonkeyGTD 2.1 alpha, the key plugin MonkeyGTDPlugin (found at http://mgtd-alpha.tiddlyspot.com/#MonkeyGTDPlugin) has a pretty neat feature where it builds up a list of all the items tagged as GTD Components, which ends up being a list of tags that I really didn't want to see separately because they already were visible other ways (usually through checkbox lists or other parts of the special GTD viewing panel). \n\nThe MonkeyGTDPlugin also creates a list of all of the tiddlers tagged with each of these "GTD Component" items; so there is a list of all tiddlers tagged with "Project", and a list of all tiddlers tagged with "Action", and so on. These can also be tags that I'm not interested in seeing; for example, an Action has a tag of GTD, Action, one of the ActionStatus values, and may have a tag of the name of a Project, an Area, a Role, and a Context. The plugin provides lists of all the possible Project, Area, Role, Context, etc. tags that could be found.\n\nSo the little macro found below builds off of that by taking, as a start, the {{{<<tags>>}}} macro found in the TW Core code, which generates the list of the tags for the tidder to be displayed, and applies some conditional logic on whether or not to actually list that tag. There is a fixed list of tags to be skipped (which you can update as you wish), plus it uses the MonkeyGTDPlugin lists to always skip those as well. I'm sure it's not written in the cleanest form of JavaScript as it could be but it appears to do the job. \n!Major Disclaimer and Warning\nThis is all based off the alpha version of MonkeyGTD 2.1, by Simon Baird, which is absolutely positively without a doubt going to change. Those changes, which will likely remove a lot of the GTD based tagging to relieve the "tag-abuse", will then eliminate the need for some of the code in this macro (the parts dealing with the GTD Component lists). All that will remain is just skipping the tags in the fixed list, but even still that will be a useful thing. \n!Usage\n*Add a new Tiddler with the showTagsMacro code, tagged with systemConfig (just like any other plugin)\n**Update the fixed list of tags to be skipped (config.macros.showTags.tagsToHide). If you want, it may be good to stick your list in a ConfigTweaks or some other configuration tiddler if you have one with other lists you keep updated for other plugins (like the DatePlugin, CalendarPlugin, etc).\n*In the ViewTemplate where {{{macro="tags"}}} is invoked, change it to {{{macro="showTags"}}}. You don't have to change the CSS class in the {{{<div>}}} or {{{<span>}}} where this change is done. It's typically found right before where the tiddler title is displayed. \n!Revision History\n* v0.0.1 -- BJ Backitis, 11 Nov 2006 (Created)\n!To Do\n*Perhaps modify so that the processing of the GTD Component lists is only done if the tiddler has the GTD tag, so that non-GTD tiddlers WOULD display any tags that otherwise would have been hidden. (Not sure if it's worth it or not.)\n*Perhaps use an "excludeTags" tiddler to contain the list of tags to hide, rather than as a fixed list. (Again, not sure if it's worth it or not.)\n!Code\n***/\n\n//{{{\n\nmerge(config.macros,{\n showTags: {\n tagsToHide: ['GTD','GTDComponent','systemConfig','systemConfigDisable','html','css','feed','plugin','tiddlyspot','systemTiddler','excludeSearch'],\n handler: function(place,macroName,params,wikifier,paramString,tiddler){\n params = paramString.parseParams("anon",null,true,false,false);\n var theList = createTiddlyElement(place,"ul");\n var title = getParam(params,"anon","");\n if(title && store.tiddlerExists(title))\n tiddler = store.getTiddler(title);\n var sep = getParam(params,"sep"," ");\n var lingo = config.views.wikified.tag;\n var prompt = tiddler.tags.length == 0 ? lingo.labelNoTags : lingo.labelTags;\n createTiddlyElement(theList,"li",null,"listTitle",prompt.format([tiddler.title]));\n for(var t=0; t<tiddler.tags.length; t++) {\n if (!config.macros.showTags.tagsToHide.contains(tiddler.tags[t]) && \n !config.mGTD.config.GTDComponent.contains(tiddler.tags[t])) {\n for (var i=0, showTag=true;i<config.mGTD.config.GTDComponent.length && (showTag);i++) \n if (config.mGTD.config[config.mGTD.config.GTDComponent[i]].contains(tiddler.tags[t])) \n showTag = false;\n if (showTag) {\n createTagButton(createTiddlyElement(theList,"li"),tiddler.tags[t],tiddler.title);\n if (t<tiddler.tags.length-1) createTiddlyText(theList,sep);\n }\n }\n }\n }\n }\n});\n\n\n//}}}
<<search>><<upload http://tampageek-mgtd21.tiddlyspot.com/store.cgi index.html . . tampageek-mgtd21>><html><a href='http://tampageek-mgtd21.tiddlyspot.com/download' class='button'>download</a></html><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>>
<<slider chkSliderSideBarTabsPanel SideBarTabsPanel 'contents »' 'View tabs of contents'>>
<<tabs txtMainTab Timeline Timeline TabTimeline All 'All tiddlers' TabAll Tags 'All tags' TabTags More 'More lists' TabMore>>
running <<tiddler MonkeyGTDVersion>>
TampaGeek's GTD Wiki
/*{{{*/\n\n[[MptwStyleSheet]]\n[[MonkeyGTDStyles]]\n\n.title { color:[[ColorPalette::PrimaryDark]]; }\n\n#topMenu {\n/* background:url(http://simonbaird.com/monkeygtd/logo-trans.gif) no-repeat -15px 2px transparent; */\n padding:5px;\n/* padding-left:80px; */\n padding-left: 0em;\n}\n\n/* the png is way superior due to alpha transparency. stupid IE */\n/* html>body #topMenu {background-image:url(http://simonbaird.com/monkeygtd/logo-trans.png)} */\n\n#topMenu {font-size: 135%;}\n\n#topMenu a { color:white ! important; }\n\n#topMenu a.button {\n border-style:none;\n}\n\n#topMenu2 a { color:white ! important; }\n\n#topMenu2 a.button {\n border-style:none;\n}\n\n#topMenu2 br {\n display: none;\n}\n#topMenu2 {\n background: [[ColorPalette::SecondaryDark]];\n color:[[ColorPalette::PrimaryPale]];\n}\n#topMenu2 {\n padding:2px;\n}\n#topMenu2 .button, #topMenu2 .tiddlyLink, #topMenu2 a {\n margin-left: 0.5em;\n margin-right: 0.5em;\n padding-left: 3px;\n padding-right: 3px;\n color: [[ColorPalette::PrimaryPale]];\n font-size: 100%;\n}\n#topMenu2 .button:hover, #topMenu2 .tiddlyLink:hover {\n background: [[ColorPalette::PrimaryDark]];\n}\n\n#topMenu2 input { font-size:.8em;\n margin: 0.4em 0.5em;\n}\n\n\n#sidebarTabs a {\n margin: 0em 0.2em;\n padding: 0.2em 0.3em;\n display: block;\n}\n\n#sidebarTabs .sliderPanel .tiddlyLinkNonExisting{\n font-weight: normal;\n font-style: normal;\n}\n\n#sidebarTabs .sliderPanel .tiddlyLinkExisting {\n font-weight: bold;\n font-style: normal;\n}\n\n#sidebarTabs .sliderPanel a {\n display: inline;\n padding: 0;\n}\n\n#sidebarTabs .sliderPanel .tabContents {\n width: 15em;\n overflow: hidden;\n}\n\n.hideIt { display: none; }\n\n/*}}}*/
''<<newTiddler label:'new tiddler' title:'New Tiddler'>>''\n''<<newJournal '0DD MMM YYYY' label:'new journal'>>''\n<html><span style="color: white;font-size:1.1em; padding: 0em 1em 0em 1em;">&bull;</span></html>\n''<<saveChanges>><<closeAll>><<collapseAll>><<expandAll>><<permaview>>''\n<html><span style="color: white;font-size:1.1em; padding: 0em 1em 0em 1em;">&bull;</span></html>\n''<<toggleSidebar>>''\n\n\n
/***\nThis plugin makes it possible to have different templates to use for view and/or edit, based on the tags in the tiddler. The default name for the alternate template is the tagname concatenated to "ViewTemplate" or "EditTemplate", such as "EventViewTemplate" and "EventEditTemplate" to use when the tiddler is tagged with Event. Some of this could more easily be done using the ShowWhen and HideWhen macros that are available, but those don't seem to work when initially CREATING a tiddler... using the TaggedTemplates approach allows you to use the specific template when the tiddler is first created, as long as the tag is part of the command used to create the tiddler (a parm in the {{{<<newTiddler>>}}} call, for example).\n***/\n\n//{{{\n\nconfig.tagTemplate = { 1: "ViewTemplate",\n 2: "EditTemplate" }; \n\nStory.prototype.chooseTemplateForTiddler_TWcore = Story.prototype.chooseTemplateForTiddler;\n \nStory.prototype.chooseTemplateForTiddler = function(title,template) {\n if (!template)\n template = DEFAULT_VIEW_TEMPLATE;\n if (template == DEFAULT_VIEW_TEMPLATE || template == DEFAULT_EDIT_TEMPLATE) {\n var tiddler = store.getTiddler(title);\n if (tiddler)\n for (var j=0; j<tiddler.tags.length; j++) {\n var newTemplate = tiddler.tags[j] + config.tagTemplate[template];\n if (store.tiddlerExists(newTemplate)) {\n template = newTemplate;\n break;\n }\n }\n } \n return this.chooseTemplateForTiddler_TWcore(title,template);\n} \n\n//}}}\n
/***\n| Name:|TagglyTaggingPlugin|\n| Description:|tagglyTagging macro is a replacement for the builtin tagging macro in your ViewTemplate|\n| Version:|6.1.5|\n| Date:|05-Oct-2006|\n| Source:|http://mptw.tiddlyspot.com/#TagglyTaggingPlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\n| CoreVersion:|2.1.x|\n!Notes\nSee http://mptw.tiddlyspot.com/#TagglyTagging\n***/\n//{{{\nconfig.taggly = {\n\n // for translations\n lingo: {\n labels: {\n asc: "\su2191", // down arrow\n desc: "\su2193", // up arrow\n title: "title",\n modified: "modified",\n created: "created",\n show: "+",\n hide: "-",\n normal: "normal",\n group: "group",\n commas: "commas",\n sitemap: "sitemap",\n numCols: "cols\su00b1", // plus minus sign\n label: "Tagged as '%0':"\n },\n\n tooltips: {\n title: "Click to sort by title",\n modified: "Click to sort by modified date",\n created: "Click to sort by created date",\n show: "Click to show tagging list",\n hide: "Click to hide tagging list",\n normal: "Click to show a normal ungrouped list",\n group: "Click to show list grouped by tag",\n sitemap: "Click to show a sitemap style list",\n commas: "Click to show a comma separated list",\n numCols: "Click to change number of columns"\n }\n },\n\n config: {\n showTaggingCounts: true,\n listOpts: {\n // the first one will be the default\n sortBy: ["title","modified","created"],\n sortOrder: ["asc","desc"],\n hideState: ["show","hide"],\n listMode: ["normal","group","sitemap","commas"],\n numCols: ["1","2","3","4","5","6"]\n },\n valuePrefix: "taggly."\n },\n\n getTagglyOpt: function(title,opt) {\n var val = store.getValue(title,this.config.valuePrefix+opt);\n return val ? val : this.config.listOpts[opt][0];\n },\n\n setTagglyOpt: function(title,opt,value) {\n if (!store.tiddlerExists(title))\n // create it silently\n store.saveTiddler(title,title,config.views.editor.defaultText.format([title]),config.options.txtUserName,new Date(),null);\n // if value is default then remove it to save space\n return store.setValue(title,\n this.config.valuePrefix+opt,\n value == this.config.listOpts[opt][0] ? null : value);\n },\n\n getNextValue: function(title,opt) {\n var current = this.getTagglyOpt(title,opt);\n var pos = this.config.listOpts[opt].indexOf(current);\n // a little usability enhancement. actually it doesn't work right for grouped or sitemap\n var limit = (opt == "numCols" ? store.getTaggedTiddlers(title).length : this.config.listOpts[opt].length);\n var newPos = (pos + 1) % limit;\n return this.config.listOpts[opt][newPos];\n },\n\n toggleTagglyOpt: function(title,opt) {\n var newVal = this.getNextValue(title,opt);\n this.setTagglyOpt(title,opt,newVal);\n }, \n\n createListControl: function(place,title,type) {\n var lingo = config.taggly.lingo;\n var label;\n var tooltip;\n var onclick;\n\n if ((type == "title" || type == "modified" || type == "created")) {\n // "special" controls. a little tricky. derived from sortOrder and sortBy\n label = lingo.labels[type];\n tooltip = lingo.tooltips[type];\n\n if (this.getTagglyOpt(title,"sortBy") == type) {\n label += lingo.labels[this.getTagglyOpt(title,"sortOrder")];\n onclick = function() {\n config.taggly.toggleTagglyOpt(title,"sortOrder");\n return false;\n }\n }\n else {\n onclick = function() {\n config.taggly.setTagglyOpt(title,"sortBy",type);\n config.taggly.setTagglyOpt(title,"sortOrder",config.taggly.config.listOpts.sortOrder[0]);\n return false;\n }\n }\n }\n else {\n // "regular" controls, nice and simple\n label = lingo.labels[type == "numCols" ? type : this.getNextValue(title,type)];\n tooltip = lingo.tooltips[type == "numCols" ? type : this.getNextValue(title,type)];\n onclick = function() {\n config.taggly.toggleTagglyOpt(title,type);\n return false;\n }\n }\n\n // hide button because commas don't have columns\n if (!(this.getTagglyOpt(title,"listMode") == "commas" && type == "numCols"))\n createTiddlyButton(place,label,tooltip,onclick,type == "hideState" ? "hidebutton" : "button");\n },\n\n makeColumns: function(orig,numCols) {\n var listSize = orig.length;\n var colSize = listSize/numCols;\n var remainder = listSize % numCols;\n\n var upperColsize = colSize;\n var lowerColsize = colSize;\n\n if (colSize != Math.floor(colSize)) {\n // it's not an exact fit so..\n upperColsize = Math.floor(colSize) + 1;\n lowerColsize = Math.floor(colSize);\n }\n\n var output = [];\n var c = 0;\n for (var j=0;j<numCols;j++) {\n var singleCol = [];\n var thisSize = j < remainder ? upperColsize : lowerColsize;\n for (var i=0;i<thisSize;i++) \n singleCol.push(orig[c++]);\n output.push(singleCol);\n }\n\n return output;\n },\n\n drawTable: function(place,columns,theClass) {\n var newTable = createTiddlyElement(place,"table",null,theClass);\n var newTbody = createTiddlyElement(newTable,"tbody");\n var newTr = createTiddlyElement(newTbody,"tr");\n for (var j=0;j<columns.length;j++) {\n var colOutput = "";\n for (var i=0;i<columns[j].length;i++) \n colOutput += columns[j][i];\n var newTd = createTiddlyElement(newTr,"td",null,"tagglyTagging"); // todo should not need this class\n wikify(colOutput,newTd);\n }\n return newTable;\n },\n\n createTagglyList: function(place,title) {\n switch(this.getTagglyOpt(title,"listMode")) {\n case "group": return this.createTagglyListGrouped(place,title); break;\n case "normal": return this.createTagglyListNormal(place,title,false); break;\n case "commas": return this.createTagglyListNormal(place,title,true); break;\n case "sitemap":return this.createTagglyListSiteMap(place,title); break;\n }\n },\n\n getTaggingCount: function(title) {\n // thanks to Doug Edmunds\n if (this.config.showTaggingCounts) {\n var tagCount = store.getTaggedTiddlers(title).length;\n if (tagCount > 0)\n return " ("+tagCount+")";\n }\n return "";\n },\n\n // this is for normal and commas mode\n createTagglyListNormal: function(place,title,useCommas) {\n\n var list = store.getTaggedTiddlers(title,this.getTagglyOpt(title,"sortBy"));\n\n if (this.getTagglyOpt(title,"sortOrder") == "desc")\n list = list.reverse();\n\n var output = [];\n for (var i=0;i<list.length;i++) {\n var countString = this.getTaggingCount(list[i].title);\n if (useCommas)\n output.push((i > 0 ? ", " : "") + "[[" + list[i].title + "]]" + countString);\n else\n output.push("*[[" + list[i].title + "]]" + countString + "\sn");\n }\n\n return this.drawTable(place,\n this.makeColumns(output,useCommas ? 1 : parseInt(this.getTagglyOpt(title,"numCols"))),\n useCommas ? "commas" : "normal");\n },\n\n // this is for the "grouped" mode\n createTagglyListGrouped: function(place,title) {\n var sortBy = this.getTagglyOpt(title,"sortBy");\n var sortOrder = this.getTagglyOpt(title,"sortOrder");\n\n var list = store.getTaggedTiddlers(title,sortBy);\n\n if (sortOrder == "desc")\n list = list.reverse();\n\n var leftOvers = []\n for (var i=0;i<list.length;i++)\n leftOvers.push(list[i].title);\n\n var allTagsHolder = {};\n for (var i=0;i<list.length;i++) {\n for (var j=0;j<list[i].tags.length;j++) {\n\n if (list[i].tags[j] != title) { // not this tiddler\n\n if (!allTagsHolder[list[i].tags[j]])\n allTagsHolder[list[i].tags[j]] = "";\n\n allTagsHolder[list[i].tags[j]] += "**[["+list[i].title+"]]"\n + this.getTaggingCount(list[i].title) + "\sn";\n leftOvers.setItem(list[i].title,-1); // remove from leftovers. at the end it will contain the leftovers\n }\n }\n }\n\n var allTags = [];\n for (var t in allTagsHolder)\n allTags.push(t);\n\n var sortHelper = function(a,b) {\n if (a == b) return 0;\n if (a < b) return -1;\n return 1;\n };\n\n allTags.sort(function(a,b) {\n var tidA = store.getTiddler(a);\n var tidB = store.getTiddler(b);\n if (sortBy == "title") return sortHelper(a,b);\n else if (!tidA && !tidB) return 0;\n else if (!tidA) return -1;\n else if (!tidB) return +1;\n else return sortHelper(tidA[sortBy],tidB[sortBy]);\n });\n\n var leftOverOutput = "";\n for (var i=0;i<leftOvers.length;i++)\n leftOverOutput += "*[["+leftOvers[i]+"]]" + this.getTaggingCount(leftOvers[i]) + "\sn";\n\n var output = [];\n\n if (sortOrder == "desc")\n allTags.reverse();\n else if (leftOverOutput != "")\n // leftovers first...\n output.push(leftOverOutput);\n\n for (var i=0;i<allTags.length;i++)\n output.push("*[["+allTags[i]+"]]" + this.getTaggingCount(leftOvers[i]) + "\sn" + allTagsHolder[allTags[i]]);\n\n if (sortOrder == "desc" && leftOverOutput != "")\n // leftovers last...\n output.push(leftOverOutput);\n\n return this.drawTable(place,\n this.makeColumns(output,parseInt(this.getTagglyOpt(title,"numCols"))),\n "grouped");\n\n },\n\n // used to build site map\n treeTraverse: function(title,depth,sortBy,sortOrder) {\n\n var list = store.getTaggedTiddlers(title,sortBy);\n if (sortOrder == "desc")\n list.reverse();\n\n var indent = "";\n for (var j=0;j<depth;j++)\n indent += "*"\n\n var childOutput = "";\n for (var i=0;i<list.length;i++)\n if (list[i].title != title)\n childOutput += this.treeTraverse(list[i].title,depth+1,sortBy,sortOrder);\n\n if (depth == 0)\n return childOutput;\n else\n return indent + "[["+title+"]]" + this.getTaggingCount(title) + "\sn"+childOutput;\n },\n\n // this if for the site map mode\n createTagglyListSiteMap: function(place,title) {\n var output = this.treeTraverse(title,0,this.getTagglyOpt(title,"sortBy"),this.getTagglyOpt(title,"sortOrder"));\n return this.drawTable(place,\n this.makeColumns(output.split(/(?=^\s*\s[)/m),parseInt(this.getTagglyOpt(title,"numCols"))), // regexp magic\n "sitemap"\n );\n },\n\n macros: {\n tagglyTagging: {\n handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n var refreshContainer = createTiddlyElement(place,"div");\n // do some refresh magic to make it keep the list fresh - thanks Saq\n refreshContainer.setAttribute("refresh","macro");\n refreshContainer.setAttribute("macroName",macroName);\n refreshContainer.setAttribute("title",tiddler.title);\n this.refresh(refreshContainer);\n },\n\n refresh: function(place) {\n var title = place.getAttribute("title");\n removeChildren(place);\n if (store.getTaggedTiddlers(title).length > 0) {\n var lingo = config.taggly.lingo;\n config.taggly.createListControl(place,title,"hideState");\n if (config.taggly.getTagglyOpt(title,"hideState") == "show") {\n createTiddlyElement(place,"span",null,"tagglyLabel",lingo.labels.label.format([title]));\n config.taggly.createListControl(place,title,"title");\n config.taggly.createListControl(place,title,"modified");\n config.taggly.createListControl(place,title,"created");\n config.taggly.createListControl(place,title,"listMode");\n config.taggly.createListControl(place,title,"numCols");\n config.taggly.createTagglyList(place,title);\n }\n }\n }\n }\n },\n\n // todo fix these up a bit\n styles: \n"/*{{{*/\sn"+\n"/* created by TagglyTaggingPlugin */\sn"+\n".tagglyTagging { padding-top:0.5em; }\sn"+\n".tagglyTagging li.listTitle { display:none; }\sn"+\n".tagglyTagging ul {\sn"+\n" margin-top:0px; padding-top:0.5em; padding-left:2em;\sn"+\n" margin-bottom:0px; padding-bottom:0px;\sn"+\n"}\sn"+\n".tagglyTagging { vertical-align: top; margin:0px; padding:0px; }\sn"+\n".tagglyTagging table { margin:0px; padding:0px; }\sn"+\n".tagglyTagging .button { display:none; margin-left:3px; margin-right:3px; }\sn"+\n".tagglyTagging .button, .tagglyTagging .hidebutton {\sn"+\n" color:[[ColorPalette::TertiaryLight]]; font-size:90%;\sn"+\n" border:0px; padding-left:0.3em;padding-right:0.3em;\sn"+\n"}\sn"+\n".tagglyTagging .button:hover, .hidebutton:hover {\sn"+\n" background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]];\sn"+\n"}\sn"+\n".selected .tagglyTagging .button {\sn"+\n" display:inline;\sn"+\n"}\sn"+\n".tagglyTagging .hidebutton { color:[[ColorPalette::Background]]; }\sn"+\n".selected .tagglyTagging .hidebutton { color:[[ColorPalette::TertiaryLight]] }\sn"+\n".tagglyLabel { color:[[ColorPalette::TertiaryMid]]; font-size:90%; }\sn"+\n".tagglyTagging ul {padding-top:0px; padding-bottom:0.5em; margin-left:1em; }\sn"+\n".tagglyTagging ul ul {list-style-type:disc; margin-left:-1em;}\sn"+\n".tagglyTagging ul ul li {margin-left:0.5em; }\sn"+\n".editLabel { font-size:90%; padding-top:0.5em; }\sn"+\n".tagglyTagging .commas { padding-left:1.8em; }\sn"+\n"/*}}}*/\sn"+\n "",\n\n init: function() {\n merge(config.macros,this.macros);\n config.shadowTiddlers["TagglyTaggingStyles"] = this.styles;\n if (store)\n store.addNotification("TagglyTaggingStyles",refreshStyles);\n else\n config.notifyTiddlers.push({name:"TagglyTaggingStyles", notify: refreshStyles});\n }\n};\n\nconfig.taggly.init();\n\n//}}}\n\n
<<newTiddlerPlus title: 'New Example newHere Tiddler' label:'New Example' gtdtype: * tag: * special testTiddler >>
//{{{\n\nconfig.macros.testingMacro = {\n label: "testing macro",\n prompt: "this is a testing macro"\n} \n\nconfig.macros.testingMacro.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n params = paramString.parseParams("anon",null,true,false,false);\n alert('Starting testingMacro checks');\n alert('testing (tiddler instanceof Tiddler)');\n if (tiddler instanceof Tiddler) {alert('passed')} else {alert('failed')}\n alert('testing !(tiddler.title == undefined)');\n if (!(tiddler.title == undefined)) {alert('passed')} else {alert('failed')}\n alert('testing !(tiddler.title == null)');\n if (!(tiddler.title == null)) {alert ('passed')} else {alert('failed')}\n alert ('testing (tiddler.title)');\n if (tiddler.title) {alert ('passed: tiddler.title = ' + tiddler.title)} else {alert('failed')}\n return false;\n}\n\n//}}}
<<testingMacro>>
This is a test next action under the SEPG area, not associated to a project
\n/***\n\nAn under construction replacement for toggleTag\n\n<<tTag mode:text text:D tag:Done>>\n<<tTag mode:text text:N tag:Next>>\n***/\n//{{{\n\nmerge(config.macros,{\n\n tTag: {\n\n createIfRequired: true,\n shortLabel: "[[%0]]",\n longLabel: "[[%0]] [[%1]]",\n\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n\n var parsedParams = paramString.parseParams("tags",null,true);\n\n var tag = getParam(parsedParams,"tag","checked");\n var title = getParam(parsedParams,"title",tiddler.title);\n\n var defaultLabel = (title == tiddler.title ? this.shortLabel : this.longLabel);\n var label = getParam(parsedParams,"label",defaultLabel);\n\n var theTiddler = title == tiddler.title ? tiddler : store.getTiddler(title);\n\n var mode = getParam(parsedParams,"mode","checkbox");\n\n var theClass = getParam(parsedParams,"class",tag+"Button");\n\n if (mode == "checkbox") {\n // create the checkbox\n\n var cb = createTiddlyCheckbox(place, label.format([tag,title]), theTiddler && theTiddler.isTagged(tag), function(e) {\n if (!store.tiddlerExists(title)) {\n if (config.macros.toggleTag.createIfRequired) {\n var content = store.getTiddlerText(title); // just in case it's a shadow\n store.saveTiddler(title,title,content?content:"",config.options.txtUserName,new Date(),null);\n }\n else \n return false;\n }\n //store.suspendNotifications(); \n store.setTiddlerTag(title,this.checked,tag);\n //refreshDisplay(); \n //store.resumeNotifications();\n return true;\n });\n }\n else if (mode == "text") {\n var text = getParam(parsedParams,"text","X");\n\n var cl = createTiddlyButton(place, text, "Toggle "+text, function(e) {\n if (!store.tiddlerExists(title)) {\n if (config.macros.toggleTag.createIfRequired) {\n var content = store.getTiddlerText(title); // just in case it's a shadow\n store.saveTiddler(title,title,content?content:"",config.options.txtUserName,new Date(),null);\n }\n else \n return false;\n }\n //store.suspendNotifications(); \n var currentState = this.getAttribute("state")=="true";\n var newState = !currentState;\n\n store.setTiddlerTag(title,newState,tag);\n\n // this is terrible please refactor\n if (currentState) {\n cl.setAttribute("state","false");\n removeClass(cl,"on");\n addClass(cl,"off");\n }\n else {\n cl.setAttribute("state","true");\n removeClass(cl,"off");\n addClass(cl,"on");\n }\n\n //refreshDisplay(); \n //store.resumeNotifications();\n return false;\n });\n\n addClass(cl,theClass.replace(/ /g,''));\n\n if (theTiddler && theTiddler.isTagged(tag)) {\n cl.setAttribute("state","true");\n removeClass(cl,"off");\n addClass(cl,"on");\n }\n else {\n cl.setAttribute("state","false");\n removeClass(cl,"on");\n addClass(cl,"off");\n }\n \n }\n else if (mode == "popup") {\n var cl = createTiddlyButton(place, "zzz", "Toggle "+text, function(e) {\n // props to Saq\n if(!e) var e = window.event;\n var popup = Popup.create(this);\n createTiddlyButton(createTiddlyElement(popup,"li"),"foo","bar",function(e) {\n // under contruction\n alert(this.getAttribute("tag"));\n });\n Popup.show(popup,false);\n e.cancelBubble = true;\n if(e.stopPropagation) e.stopPropagation();\n return false ;\n });\n }\n }\n }\n});\n\nsetStylesheet(["",\n".viewer .button.off {border-style:none;background:#fff;color:#ccc;}",\n".viewer .button.on {border-style:none;background:#ddd;color:#000;}",\n""].join("\sn"),"tTag");\n\n//}}}\n\n\n\n\n
/***\n| Name:|ToggleTagMacro|\n| Description:|Makes a checkbox which toggles a tag in a tiddler|\n| Version:|6.1.2|\n| Date:|20-Oct-2006|\n| Source:|http://tiddlyspot.com/mptw/#ToggleTagMacro|\n| Author:|SimonBaird|\n| License:|[[BSD open source license]]|\n| CoreVersion:|2.1|\n!Usage\n{{{<<toggleTag }}}//{{{TagName TiddlerName LabelText}}}//{{{>>}}}\n* TagName - the tag to be toggled, default value "checked"\n* TiddlerName - the tiddler to toggle the tag in, default value the current tiddler\n* LabelText - the text (gets wikified) to put next to the check box, default value is '{{{[[TagName]]}}}' or '{{{[[TagName]] [[TiddlerName]]}}}'\n(If a parameter is '.' then the default will be used)\n\nExamples:\n\n|Code|Description|Example|h\n|{{{<<toggleTag>>}}}|Toggles the default tag (checked) in this tiddler|<<toggleTag>>|\n|{{{<<toggleTag TagName>>}}}|Toggles the TagName tag in this tiddler|<<toggleTag TagName>>|\n|{{{<<toggleTag TagName TiddlerName>>}}}|Toggles the TagName tag in the TiddlerName tiddler|<<toggleTag TagName TiddlerName>>|\n|{{{<<toggleTag TagName TiddlerName 'click me'>>}}}|Same but with custom label|<<toggleTag TagName TiddlerName 'click me'>>|\n|{{{<<toggleTag . . 'click me'>>}}}|dot means use default value|<<toggleTag . . 'click me'>>|\n(Note if TiddlerName doesn't exist it will be silently created)\n\n!Known issues\n* Doesn't smoothly handle the case where you toggle a tag in a tiddler that is current open for editing. Should it stick the tag in the edit box?\n\n***/\n//{{{\n\nmerge(config.macros,{\n\n toggleTag: {\n\n doRefreshAll: true,\n createIfRequired: true,\n shortLabel: "[[%0]]",\n longLabel: "[[%0]] [[%1]]",\n\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n var tag = (params[0] && params[0] != '.') ? params[0] : "checked";\n var title = (params[1] && params[1] != '.') ? params[1] : tiddler.title;\n var defaultLabel = (title == tiddler.title ? this.shortLabel : this.longLabel);\n var label = (params[2] && params[2] != '.') ? params[2] : defaultLabel;\n label = (label == '-' ? '' : label);\n var theTiddler = title == tiddler.title ? tiddler : store.getTiddler(title);\n var cb = createTiddlyCheckbox(place, label.format([tag,title]), theTiddler && theTiddler.isTagged(tag), function(e) {\n if (!store.tiddlerExists(title)) {\n if (config.macros.toggleTag.createIfRequired) {\n var content = store.getTiddlerText(title); // just in case it's a shadow\n store.saveTiddler(title,title,content?content:"",config.options.txtUserName,new Date(),null);\n }\n else \n return false;\n }\n //store.suspendNotifications(); \n store.setTiddlerTag(title,this.checked,tag);\n //refreshDisplay(); \n //store.resumeNotifications();\n return true;\n });\n }\n }\n});\n\n//}}}\n\n
To upgrade select MonkeyGTDUpgrade (or MonkeyGTDUpgradeTs for tiddlyspot online use) then fetch and install all tiddlers.\n<<importTiddlers>>\n
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |\n| 12/11/2006 17:34:9 | TampaGeek | [[/|http://tampageek-mgtd21.tiddlyspot.com/]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 12/11/2006 17:36:22 | TampaGeek | [[/|http://tampageek-mgtd21.tiddlyspot.com/]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 20/11/2006 6:31:23 | BJBackitis | [[tampageek-mgtd21.tiddlyspot.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.tiddlyspot.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 20/11/2006 7:2:58 | BJBackitis | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 21/11/2006 6:37:11 | BJBackitis | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 21/11/2006 6:54:25 | BJBackitis | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 21/11/2006 14:45:20 | BJBackitis | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 21/11/2006 17:30:30 | BJBackitis | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 21/11/2006 22:34:53 | BJBackitis | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 22/11/2006 7:19:7 | BJBackitis | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 25/11/2006 21:39:51 | BJBackitis | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 25/11/2006 22:22:6 | BJBackitis | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 25/11/2006 22:50:7 | BJBackitis | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 25/11/2006 22:54:52 | BJBackitis | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 25/11/2006 22:58:14 | BJBackitis | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 26/11/2006 16:8:47 | BJBackitis | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 26/11/2006 16:43:38 | BJBackitis | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 26/11/2006 16:45:45 | BJBackitis | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 27/11/2006 22:25:13 | BJBackitis | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 28/11/2006 22:11:27 | TampaGeek | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 28/11/2006 22:21:51 | TampaGeek | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 30/11/2006 6:57:34 | TampaGeek | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 1/12/2006 13:35:11 | BJBackitis | [[tampageek-mgtd21.html|file:///C:/Documents%20and%20Settings/fbackitis/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 1/12/2006 14:5:42 | BJBackitis | [[tampageek-mgtd21.html|file:///C:/Documents%20and%20Settings/fbackitis/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 5/12/2006 22:45:12 | TampaGeek | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 5/12/2006 22:46:12 | TampaGeek | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 6/12/2006 7:2:14 | TampaGeek | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 9/12/2006 22:44:10 | TampaGeek | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 11/12/2006 6:22:8 | TampaGeek | [[tampageek-mgtd21.html|file:///C:/BJ/My%20Documents/Wiki/tampageek-mgtd21.html]] | [[store.cgi|http://tampageek-mgtd21.tiddlyspot.com/store.cgi]] | . | index.html | . |
/***\n|''Name:''|UploadPlugin|\n|''Description:''|Save to web a TiddlyWiki|\n|''Version:''|3.4.4|\n|''Date:''|Sep 30, 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: 4, \n date: new Date(2006,8,30),\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: 1}, \n date: new Date(2006,8,19)\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: 3, date: new Date(2006,8,30),\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 {\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 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.className = "txtOptionInput "+opt;\n place.appendChild(c);\n c.value = config.options[opt];\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.className = "pasOptionInput "+opt;\n place.appendChild(c);\n c.value = config.options[opt];\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 c.className = "chkOptionInput "+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 c.className = "chkOptionInput "+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 backupFileStored: "Previous file backuped in %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 passwordEmpty: "Unable to upload, your password is empty",\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.toDirUrl(storeUrl, uploadDir, username)]);\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.toRootUrl = function (storeUrl, username)\n{\n return root = (this.dirname(storeUrl)?this.dirname(storeUrl):this.dirname(document.location.toString()));\n}\nconfig.macros.upload.toDirUrl = function (storeUrl, uploadDir, username)\n{\n var root = this.toRootUrl(storeUrl, username);\n if (uploadDir && uploadDir != '.')\n root = root + '/' + uploadDir;\n return root;\n}\nconfig.macros.upload.toFileUrl = function (storeUrl, toFilename, uploadDir, username)\n{\n return this.toDirUrl(storeUrl, uploadDir, username) + '/' + toFilename;\n}\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 (!password || password === '') {\n alert(config.macros.upload.messages.passwordEmpty);\n return;\n }\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 var toDir = config.macros.upload.toDirUrl(storeUrl, toFilename, uploadDir, username);\n displayMessage(config.macros.upload.messages.aboutToUpload.format([toDir]), toDir);\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 var toFileUrl = config.macros.upload.toFileUrl(storeUrl, rssPath, uploadDir, username);\n displayMessage(config.macros.upload.messages.rssFileUploaded.format(\n [toFileUrl]), toFileUrl);\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 var toFileUrl = config.macros.upload.toFileUrl(storeUrl, toFilename, uploadDir, username);\n if (responseText.indexOf("destfile:") > 0) {\n var destfile = responseText.substring(responseText.indexOf("destfile:")+9, \n responseText.indexOf("\sn", responseText.indexOf("destfile:")));\n toFileUrl = config.macros.upload.toRootUrl(storeUrl, username) + '/' + destfile;\n }\n else {\n toFileUrl = config.macros.upload.toFileUrl(storeUrl, toFilename, uploadDir, username);\n }\n displayMessage(config.macros.upload.messages.mainFileUploaded.format(\n [toFileUrl]), toFileUrl);\n if (backupDir && responseText.indexOf("backupfile:") > 0) {\n var backupFile = responseText.substring(responseText.indexOf("backupfile:")+11, \n responseText.indexOf("\sn", responseText.indexOf("backupfile:")));\n toBackupUrl = config.macros.upload.toRootUrl(storeUrl, username) + '/' + backupFile;\n displayMessage(config.macros.upload.messages.backupFileStored.format(\n [toBackupUrl]), toBackupUrl);\n }\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 //strailer = "--" + 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','');\nsetStylesheet(\n ".pasOptionInput {width: 11em;}\sn"+\n ".txtOptionInput.txtUploadStoreUrl {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadFilename {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadDir {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadBackupDir {width: 25em;}\sn"+\n "",\n "UploadOptionsStyles");\nconfig.shadowTiddlers.UploadDoc = "[[Full Documentation|http://tiddlywiki.bidix.info/l#UploadDoc ]]\sn"; \nconfig.options.chkAutoSave = false; saveOptionCookie('chkAutoSave');\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\n<div macro='showWhen store.tiddlerExists(tiddler.title) && tiddler.fields["gtdtype"] != undefined && tiddler.fields["gtdtype"] != ""'>\n\n<div macro='showWhen tiddler.fields["gtdtype"] == "MainDash"'>[[MainDashboard]]</div>\n<div macro='showWhen tiddler.fields["gtdtype"] == "Project"'>[[ProjectDashboard]]</div>\n<div macro='showWhen tiddler.fields["gtdtype"] == "Context"'>[[ContextDashboard]]</div>\n<div macro='showWhen tiddler.fields["gtdtype"] == "Area"'>[[AreaDashboard]]</div>\n<div macro='showWhen tiddler.fields["gtdtype"] == "Role"'>[[RoleDashboard]]</div>\n\n<div macro="showWhen tiddler.title == 'Tickler'">[[TicklerTiddlerDashboard]]</div>\n<div macro="showWhen tiddler.title == 'Context'">[[ContextTiddlerDashboard]]</div>\n<div macro="showWhen tiddler.title == 'Realm'">[[RoleTiddlerDashboard]]</div>\n<div macro="showWhen tiddler.title == 'Area'">[[AreaTiddlerDashboard]]</div>\n<div macro="showWhen tiddler.title == 'Next'">[[NextTiddlerDashboard]]</div>\n<div macro="showWhen tiddler.title == 'Action'">[[ActionTiddlerDashboard]]</div>\n<div macro="showWhen tiddler.title == 'Project'">[[ProjectTiddlerDashboard]]</div>\n\n</div>\n\n<!--}}}-->\n\n\n
<!--{{{-->\n\n\n<table macro='showWhen store.tiddlerExists(tiddler.title) && tiddler.fields["gtdtype"] != undefined && tiddler.fields["gtdtype"] != ""' class="mToolbar" width="100%" cellspacing="0" border="0">\n\n<!--\n <tbody macro="hideWhen tiddler.tags.containsAny(config.mGTD.config.GTDComponent) ||\n config.mGTD.config.GTDComponent.contains(tiddler.title)">\n <tr>\n <td class="label">Type:</td>\n <td><span macro="checkboxList GTDComponent"></span></td>\n </tr>\n </tbody>\n-->\n\n <tbody macro='showWhen tiddler.fields["gtdtype"] == "MainDash"'>[[MainDashboardPanel]]</tbody>\n <tbody macro='showWhen tiddler.fields["gtdtype"] == "Role"'>[[RolePanel]]</tbody>\n <tbody macro='showWhen tiddler.fields["gtdtype"] == "Tickler"'>[[TicklerPanel]]</tbody>\n <tbody macro='showWhen tiddler.fields["gtdtype"] == "Project"'>[[ProjectPanel]]</tbody>\n <tbody macro='showWhen tiddler.fields["gtdtype"] == "Action"'>[[ActionPanel]]</tbody>\n <tbody macro='showWhen tiddler.fields["gtdtype"] == "Area"'>[[AreaPanel]]</tbody>\n</table>\n\n\n<!--}}}-->
\n<!--{{{-->\n\n<div class='toolbar'>\n <span macro="showWhenTagged systemConfig">\n <span macro="toggleTag systemConfigDisable . '[[disable|systemConfigDisable]]'"></span>\n <span style="padding:1em;"></span>\n </span>\n <span macro='toolbar toggleView focusHere closeTiddler closeOthers +editTiddler deleteTiddler references newHere refresh'></span>\n</div>\n\n\n<div class='titleContainer'>\n<span macro='showWhenExists GTDTypeTitleTemplate'>[[GTDTypeTitleTemplate]]</span>\n <span class='title' macro='view title'></span>\n <span macro="miniTag"></span>\n</div>\n\n<div class='collapse'>\n<div class='subtitle'>\n <span macro='showWhen config.options.chkDsplGTDTypeView == true'>\n <span macro='view gtdtype'></span> </span>\n <span macro='hideWhen tiddler.modifier == config.options.txtUserName'>\n <span macro='view modifier link'></span>&nbsp;</span>\n <span macro='view modified date [[sMMM 0DD, YYYY 0hh:0mm]]'></span>\n <span macro='showWhen tiddler.modified != tiddler.created'>\n &nbsp;(<span macro='message views.wikified.createdPrompt'></span>\n <span macro='view created date [[sMMM 0DD, YYYY 0hh:0mm]]'></span>)</span>\n</div>\n\n<span class="tagglyTagged" macro="showTags"></span>\n\n<div macro="showWhenExists ViewPanelTemplate">[[ViewPanelTemplate]]</div>\n\n<div macro="hideWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')">\n <div class='viewer' macro='view text wikified'></div>\n</div>\n<div macro="showWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')">\n <div class='viewer'><pre macro='view text'></pre></div>\n</div>\n\n\n<div macro="showWhenExists ViewDashboardTemplate">[[ViewDashboardTemplate]]</div>\n\n<div macro='showWhen !(store.tiddlerExists(tiddler.title) && tiddler.fields["gtdtype"] != undefined && tiddler.fields["gtdtype"] != "")'>\n <div class="tagglyTagging" macro="tagglyTagging"></div>\n</div>\n\n<div macro='showWhen config.options.chkDsplGTDTypeView == true'>\n <div><span class="editLabel">GTDType: </span><span macro='view gtdtype'></span></div>\n <div><span class="editLabel">GTDParent: </span><span macro='view gtdparent'></span></div>\n <div><span class="editLabel">GTDParentType: </span><span macro='view gtdparenttype'></span></div>\n</div>\n\n</div>\n\n<!--}}}-->\n
\n<!--{{{-->\n\n<div class='toolbar'>\n <span macro="showWhenTagged systemConfig">\n <span macro="toggleTag systemConfigDisable . '[[disable|systemConfigDisable]]'"></span>\n <span style="padding:1em;"></span>\n </span>\n <span macro="hideWhen tiddler.tags.containsAny(['systemConfig','systemConfigDisable','html','backup','css','feed','systemTiddler'])">\n <span macro="toggleTag GTD"></span>\n <span style="padding:1em;"></span>\n </span>\n <span macro='toolbar toggleView focusHere closeTiddler closeOthers +editTiddler deleteTiddler references newHere refresh'></span>\n</div>\n\n<div class='titleContainer'>\n <span macro="showWhenExists GTDTitleTemplate">[[GTDTitleTemplate]]</span>\n <span class='title' macro='view title'></span>\n <span macro="miniTag"></span>\n</div>\n\n<div class='collapse'>\n<div class='subtitle'>\n<!--\n<span macro='showWhen tiddler.modifier != config.views.wikified.shadowModifier'>\n<span macro='showWhen (typeof tiddler.fields["gtdtype"] == "string") && (tiddler.fields["gtdtype"].length > 0)'>\n(<span class='viewer' macro='view gtdtype wikified'></span>) </span> </span> \n-->\n<!-- <span macro='view modifier link'></span>, -->\n <span macro='view modified date [[0DD MMM YYYY]]'></span>\n <span macro='showWhen tiddler.modified != tiddler.created'>\n &nbsp;(<span macro='message views.wikified.createdPrompt'></span>\n <span macro='view created date [[0DD MMM YYYY]]'></span>)</span>\n</div>\n\n<span class="tagglyTagged" macro="showTags"></span>\n\n<div macro="showWhenTagged GTD"> \n<div macro="showWhenExists ViewPanelTemplate">[[ViewPanelTemplate]]</div></div>\n\n<div macro="hideWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')">\n <div class='viewer' macro='view text wikified'></div>\n</div>\n<div macro="showWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')">\n <div class='viewer'><pre macro='view text'></pre></div>\n</div>\n\n\n<div macro="showWhenExists ViewDashboardTemplate">[[ViewDashboardTemplate]]</div>\n\n<div macro="hideWhenTagged GTD">\n <div class="tagglyTagging" macro="tagglyTagging"></div>\n</div>\n\n</div>\n\n<!--}}}-->\n
!Some places where I've deviated from the base MonkeyGTD 2.1 alpha...\n*Roles instead of Realms (it fits my existing GTD stuff better)\n*Obvious layout and color changes\n*Adding a second top menu below the main one for functions moved off of the Sidebar Options\n*Being able to toggle the entire Sidebar\n*Other things that I'll think of later!!\n!The horizontal main menu -- I think this is a very streamlined approach for display\n*The "(+)" before a GTD type means "add a new one" (instead of using an entire longer button)\n*Clicking on the GTD type brings up the dashboard for that type\n*Clicking on the quick open tag arrow lists the tiddlers tagged as that GTD type\n!Conversion from tags to custom fields\n*config.mGTD.config.** arrays populated from custom fields, not tags\n*custom field "gtdtype" auto-populated when creating GTD components from dashboards\n*other functions still working off of tags (listing functions in dashboards mostly)
This document is a ~TiddlyWiki from tiddlyspot.com. A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.\n\n@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below. Then configure privacy and other site settings at your [[control panel|http://tampageek-mgtd21.tiddlyspot.com/controlpanel]] (your control panel username is //tampageek-mgtd21//).\n<<tiddler tiddlyspotControls>>\n@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the "save to web" button in the column on the right.\n\n@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick. You can make changes and save them locally without being connected to the Internet. When you're ready to sync up again, just click "upload" and your ~TiddlyWiki will be saved back to tiddlyspot.com.\n\n@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki Guides|http://tiddlywikiguides.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help. If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].\n\n@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions.
| tiddlyspot password:|<<option pasUploadPassword>>|\n| site management:|<<upload http://tampageek-mgtd21.tiddlyspot.com/store.cgi index.html . . tampageek-mgtd21>>//(requires tiddlyspot password)//<<br>>[[control panel|http://tampageek-mgtd21.tiddlyspot.com/controlpanel]], [[download (go offline)|http://tampageek-mgtd21.tiddlyspot.com/download]]|\n| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[announcements|http://announce.tiddlyspot.com/]], [[blog|http://tiddlyspot.com/blog/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|