Welcome to TiddlyWiki by Jeremy Ruston, Copyright © 2006 Osmosoft Limited

asdf

config.options.chkHttpReadOnly = false;



<!--{{{-->

<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler'></div>

<div class='title' macro='view title'></div>

<div class='editor' macro='edit title'></div>

<div class='editor' macro='edit text'></div>

<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>

<!--}}}-->

<<tiddler MainMenu>>



AuthorMainMenu

MainMenu

DefaultTiddlers

PluginManager

PresentationIndex



<!--{{{-->

<div id='header' class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>

<div class='headerShadow'>

<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>

<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>

</div>

<div class='headerForeground'>

<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>

<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>

</div>

</div>

<div id='mainMenu' refresh='content' tiddler='AuthorMainMenu'></div>

<div id='sidebar'>

<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>

<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>

</div>

<div id='displayArea'>

<div id='messageArea'></div>

<div id='tiddlerDisplay'></div>

</div>

<!--}}}-->

/***

Place your custom CSS here

***/

/*{{{*/





[[StyleSheetCommon]]

/*}}}*/



<!--{{{-->

<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler permalink references jump'></div>

<div class='title' macro='view title'></div>

<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date [[DD MMM YYYY]]'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date [[DD MMM YYYY]]'></span>)</div>

<div class='tagging' macro='tagging'></div>

<div class='tagged' macro='tags'></div>

<div class='viewer' macro='view text wikified'></div>

<div class='viewer topbutton' macro='top'></div>

<br><br>

<div class='viewer' macro='navigation tiddlers:{{store.getTiddlerText("PresentationIndex").readBracketedList()}}}'></div>

<div class='tagClear'></div>

<!--}}}-->

!The MonkeyGTD Blog

There is a blog for MonkeyGTD over at http://monkeygtd.blogspot.com/. It includes announcements on updates to MonkeyGTD 2.1 alpha and other bits and pieces.

Story.prototype.refreshTiddler_activelink = Story.prototype.refreshTiddler;

Story.prototype.refreshTiddler = function (title,template,force)

{

var theTiddler = Story.prototype.refreshTiddler_activelink.apply(this,arguments);

if (!theTiddler)

return theTiddler

var menu = document.getElementById("mainMenu");

var links = menu.getElementsByTagName("a");

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

{

if (!links[i].getAttribute("tiddlyLink"))

return;

if (document.getElementById(this.idPrefix+(links[i].getAttribute("tiddlylink"))))

addClass(links[i],"bold");

else

removeClass(links[i],"bold");

}

return theTiddler;

}

config.options.chkAnimate = false;

config.options.chkSinglePageMode = true;

config.options.chkTopOfPageMode = false;

[[mGSD]]

There is a demo of the latest mGSD. It contains some sample projects and actions. Check it out here:

* [[mGSD latest demo|http://monkeygtd.tiddlyspot.com/demo3.html]]



You can also view an empty mGSD here:

* [[mGSD empty|http://monkeygtd.tiddlyspot.com/empty.html]]













See it in action here: http://lewcid.googlepages.com/tots.html



!!Editing this TW:

Open the TW with #author:true at the end of the url/file location to enable editing.

Preview edits by using the "Presentation Mode" button in the MainMenu

//(To make future editing easier, bookmark the file with #author:true at the end of the file name. One click and edit!)//



!!Changing the content and order of the presentation:

Edit the PresentationIndex tiddler to change the contents and order of the presentation.



!! Customizing the default (viewing) interface.

Edit the following tiddlers as needed:

*PageTemplate

*StyleSheet

*ViewTemplate

*EditTemplate

*MainMenu



!!Customizing the editing (author's) interface.

Edit the following tiddlers as needed: //(Note that these files are optional, if any of them dont exist, the standard viewing one will be used instead. So if you only want to change the PageTemplate, you only need an AuthorPageTemplate tiddler.)//

*AuthorPageTemplate

*AuthorStyleSheet

*AuthorViewTemplate

*AuthorEditTemplate

*AuthorMainMenu



!!Using a different stylesheet or theme:

Using your own favorite stylesheet or theme is as simple as importing those tiddlers into this file.

If you are changing the presentation interface, just import the PageTemplate and StyleSheet. If you want to change the editing interface, you will need to copy over the PageTemplate and StyleSheet as AuthorPageTemplate and AuthorStyleSheet respectively.



!!Other tips:

* Use the tiddler StyleSheetCommon and include it using {{{[[StyleSheetCommon]]}}} in your StyleSheet and AuthorStyleSheet when making stlyesheet changes that you want applied to both the presentation and editing interface, to avoid having to type it out twice!

*To provide easy control over the font-size, use the FontSizePlugin: http://lewcid.googlepages.com/lewcid.html#FontSizePlugin

* If this presentation is going to be placed online, you might want to have a splash screen that displays while the TW is loading: http://lewcid.googlepages.com/lewcid.html#SplashScreenPlugin

{{downloadTable{

<html><table><tr><td>

<a class="nounderline" href="http://monkeygtd.tiddlyspot.com/downloadempty"><img src="http://randomibis.com/img/mgtd/downloadbtn2.png"/>

<br>Download an empty mGSD file to use on your local disk

</a>

</td><td>

<a class="nounderline" href="http://tiddlyspot.com/?choose=monkeygtd3"><img src="http://randomibis.com/img/mgtd/tscreatebtn2.png"/>

<br>Create a mGSD Tiddlyspot site that can be used online or from your local disk

</a>

</td></tr></table>

</html>

}}}

!Dummy Tiddler 3



dummy tiddler three

!Dummy Tiddler1



This is the first tiddler of your dummy presentation



Edit the PresentationIndex tiddler to change the contents and order of the presentation.



!DummyTiddler2



This is the second tiddler of your dummy presentation



//{{{

//This ensures that the footer sticks to the bottom of the screen when there are no tiddlers open. If that is not desirable, it can be deleted.

function setFooter() {

if (document.getElementById && document.getElementById("contentFooter") ) {

var windowHeight=findWindowHeight();

if (windowHeight>0) {

var contentHeight= document.getElementById('mainMenu').offsetHeight + document.getElementById("header").offsetHeight + document.getElementById("contentFooter").offsetHeight;

var menu= document.getElementById('mainMenu');

if (windowHeight-(contentHeight)>=0) {

menu.style.position='relative';

menu.style.marginBottom=(windowHeight-(contentHeight))+'px';

}

else {

menu.style.position='';

menu.style.marginBottom='';

}

}

}

}

window.onresize = function() {

setFooter();

}



Story.prototype.refreshTiddler_footerhack=Story.prototype.refreshTiddler;

Story.prototype.refreshTiddler = function (title,template,force)

{

var theTiddler = Story.prototype.refreshTiddler_footerhack.apply(this,arguments);

setFooter();

return theTiddler;}



//}}}

<<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>>

//{{{

config.macros.def ={};

config.macros.def.handler = function(place,macroName,params,wikifier,paramString,tiddler)

{

var sliceName = params[1]? params[1].toLowerCase() : params[0].toLowerCase();

var def = store.getTiddlerSlice("InfoDefinitions",sliceName);

if (def == undefined)

{

wikify(params[0],place);

return false;

}

var theClass = params[2]? params[2] : "info";

var container = createTiddlyElement(place,"span",null,theClass);

wikify(params[0],container);

if (document.all)

{

container.onmouseover = function(){addClass(this,"infoover");};

container.onmouseout = function(){removeClass(this,"infoover");};

}

var tooltip = createTiddlyElement(container,"span",null,null);

wikify(def, tooltip);



}



config.macros.note ={};

config.macros.note.handler = function(place,macroName,params,wikifier,paramString,tiddler)

{

var sliceName = params[1]? params[1].toLowerCase() : params[0].toLowerCase();

var def = store.getTiddlerSlice("InfoDefinitions",sliceName);

if (def == undefined)

{

wikify(params[0],place);

return false;

}

var theClass = params[2]? params[2] : "note";

var container = createTiddlyElement(place,"span",null,theClass);

wikify("^^"+params[0]+"^^",container);

if (document.all)

{

container.onmouseover = function(){addClass(this,"noteover");};

container.onmouseout = function(){removeClass(this,"noteover");};

}

var tooltip = createTiddlyElement(container,"span",null,null);

wikify(def, tooltip);



}



//}}}



//{{{

config.formatters.unshift( {

name: "inlinesliders",

match: "\s\s+\s\s+\s\s+\s\s+|\s\s<slider",

lookaheadRegExp: /(?:\s+\s+\s+\s+|<slider) ([\sw\ss\s.]*)(?:>?)\sn((?:.|\sn)*?)\sn(?:====|<\s/slider>)/mg,

handler: function(w)

{

this.lookaheadRegExp.lastIndex = w.matchStart;

var lookaheadMatch = this.lookaheadRegExp.exec(w.source)

if(lookaheadMatch && lookaheadMatch.index == w.matchStart )

{

var btn = createTiddlyButton(w.output,lookaheadMatch[1] + " "+"\su00BB",lookaheadMatch[1],this.onClickSlider,"button sliderButton");

var panel = createTiddlyElement(w.output,"div",null,"sliderPanel");

panel.style.display = "none";

wikify(lookaheadMatch[2],panel);

w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;

}

},

onClickSlider : function(e)

{

if(!e) var e = window.event;

var n = this.nextSibling;

n.style.display = (n.style.display=="none") ? "block" : "none";

return false;

}

})

//}}}

//{{{

config.formatters.unshift( {

name: "inlinetabs",

match: "\s\s<tabs",

lookaheadRegExp: /(?:<tabs (.*)>\sn)((?:.|\sn)*?)(?:\sn<\s/tabs>)/mg,

handler: function(w)

{

this.lookaheadRegExp.lastIndex = w.matchStart;

var lookaheadMatch = this.lookaheadRegExp.exec(w.source)

if(lookaheadMatch && lookaheadMatch.index == w.matchStart)

{

var cookie = lookaheadMatch[1];

var wrapper = createTiddlyElement(null,"div",null,cookie);

var tabset = createTiddlyElement(wrapper,"div",null,"tabset");

tabset.setAttribute("cookie",cookie);

var validTab = false;

var firstTab = '';

var tabregexp = /(?:<tab (.*)>)(?:(?:\sn)?)((?:.|\sn)*?)(?:<\s/tab>)/mg;

while((m = tabregexp.exec(lookaheadMatch[2])) != null)

{

if (firstTab == '') firstTab = m[1];

var tab = createTiddlyButton(tabset,m[1],m[1],story.onClickInlineTab,"tab tabUnselected");

tab.setAttribute("tab",m[1]);

tab.setAttribute("content",m[2]);

tab.title = m[1];

if(config.options[cookie] == m[1])

validTab = true;

}

if(!validTab)

config.options[cookie] = firstTab;

w.output.appendChild(wrapper);

story.switchInlineTab(tabset,config.options[cookie]);

w.nextMatch = this.lookaheadRegExp.lastIndex;

}

}

})



Story.prototype.switchInlineTab = function(tabset,tab)

{

var cookie = tabset.getAttribute("cookie");

var theTab = null

var nodes = tabset.childNodes;

for(var t=0; t<nodes.length; t++)

if(nodes[t].getAttribute && nodes[t].getAttribute("tab") == tab)

{

theTab = nodes[t];

theTab.className = "tab tabSelected";

}

else

nodes[t].className = "tab tabUnselected"

if(theTab)

{

if(tabset.nextSibling && tabset.nextSibling.className == "tabContents")

tabset.parentNode.removeChild(tabset.nextSibling);

var tabContent = createTiddlyElement(null,"div",null,"tabContents");

tabset.parentNode.insertBefore(tabContent,tabset.nextSibling);

wikify(theTab.getAttribute("content"),tabContent);

if(cookie)

{

config.options[cookie] = tab;

saveOptionCookie(cookie);

}

}

}



Story.prototype.onClickInlineTab = function(e)

{

story.switchInlineTab(this.parentNode,this.getAttribute("tab"));

return false;

}

//}}}

/***

|''Name:''|LegacyStrikeThroughPlugin|

|''Description:''|Support for legacy (pre 2.1) strike through formatting|

|''Version:''|1.0.1|

|''Date:''|Jul 21, 2006|

|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|

|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|

|''License:''|[[BSD open source license]]|

|''CoreVersion:''|2.1.0|

|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|



***/



//{{{



// Ensure that the LegacyStrikeThrough Plugin is only installed once.

if(!version.extensions.LegacyStrikeThroughPlugin)

{

version.extensions.LegacyStrikeThroughPlugin = true;



config.formatters.push(

{

name: "legacyStrikeByChar",

match: "==",

termRegExp: /(==)/mg,

element: "strike",

handler: config.formatterHelpers.createElementAndWikify

});



} // end of "install only once"

//}}}



mGSD is published under a BSD open source license. See the full license at [[mGSD License]].



mGSD is built on top of [[TiddlyWiki|http://www.tiddlywiki.com/]] which is also licensed under a BSD open source license. See [[here|http://tiddlywiki.com/#OpenSourceLicense]] for more details.













[[Home|mGSD]]

[[Demo]]

[[Download]]

[[Resources]]

[[License]]

<<author>>

/%

''@@font-size:150%;font-family:'Trebuchet MS' sans-serif;Download@@''

To download, right click the link below and save as...

[[MonkeyGTD 2.1 alpha|http://mgtd-alpha.tiddlyspot.com/empty.html]]

[[MonkeyGTD 1.0|http://monkeygtd.tiddlyspot.com/empty.html]]

%/

<html>

<div id='theBook' style="padding-bottom:1em;">

<a target="_blank" class="nohover under" href="http://www.amazon.com/gp/redirect.html?link_code=ur2&tag=simonbaird-20&camp=1789&creative=9325&location=%2Fgp%2Fproduct%2F0142000280%2Fsr%3D1-1%2Fqid%3D1156381849%2Fref%3Dsr_1_1%3Fie%3DUTF8%26s%3Dbooks">

<img style="float:left; border:1px solid #999; margin-right:0.5em; border:1px solid #666;" src="http://images.amazon.com/images/P/0142000280.01.THUMBZZZ.jpg"/><b>The Book</b></a><br/><a target="_blank" class="black nohover" href="http://www.amazon.com/gp/redirect.html?link_code=ur2&tag=simonbaird-20&camp=1789&creative=9325&location=%2Fgp%2Fproduct%2F0142000280%2Fsr%3D1-1%2Fqid%3D1156381849%2Fref%3Dsr_1_1%3Fie%3DUTF8%26s%3Dbooks">"Getting Things Done" by David Allen<br/><span style="font-size:80%;color:green;">amazon.com</span></a><br clear="both"/>

</div>

</html>



<html><div style="padding-bottom:0em;">

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">

<input type="hidden" name="cmd" value="_xclick">

<input type="hidden" name="business" value="simon.baird@gmail.com">

<input type="hidden" name="item_name" value="Support and appreciation for MonkeyGTD. Thanks!">

<input type="hidden" name="item_number" value="">



<input type="hidden" name="no_shipping" value="0">

<input type="hidden" name="no_note" value="1">

<input type="hidden" name="currency_code" value="USD">

<input type="hidden" name="tax" value="0">

<input type="hidden" name="bn" value="PP-DonationsBF">

<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">

<img alt="" border="0" src="https://www.paypal.com/en_AU/i/scr/pixel.gif" width="1" height="1">

</form>

</div></html>

~MonkeyGTD is a spare time project. If you like ~MonkeyGTD consider a donation to support and encourage its continued development.



/*{{{*/



#topMenu {

background:url(http://simonbaird.com/monkeygtd/logo-trans.gif) no-repeat -15px 2px transparent;

padding:5px;

padding-left:80px;

}



/* the png is way superior due to alpha transparency. stupid IE */

html>body #topMenu {background-image:url(http://simonbaird.com/monkeygtd/logo-trans.png)}





#topMenu a, #topMenu .tiddlyLink, #topMenu .button {color:#f1f1f1; padding:0.5em 0.45em; margin:0 4px;font-size:140%;font-weight:normal;font-variant: small-caps; border:none; background:transparent; text-decoration:none; font-variant:normal;font-weight:medium;}



#topMenu a:hover, #topMenu .tiddlyLink:hover, #topMenu .button:hover, #topMenu .button:active, #topMenu .highlight {color:#fff;text-decoration:none; background:#a22; font-variant:normal; }



#contentFooter {

background-color:white;

}



.viewer {

font-size:120%;

}







a {

color:#339;

}



h1,h2,h3,h4,h5,h6 { color:black; }



.title {color:black; font-family:'Trebuchet MS'; }

.title {border-color:#666; }





.toolbar .button, .toolbar .button:hover {

border-style:none ! important;

}



.downloadTable table {

border-collapse: no-collapse;

border-style:none!important;

}

.downloadTable tr {

border-style:none!important;

}



.downloadTable td {

border-style:none!important;

}



.downloadTable td {

width:300px;

padding:2em;

vertical-align:top;

}



a.nounderline:hover {

text-decoration:none!important;

}



h2 { font-size:110%; margin:0; padding:0 0 0.5em 0; }



#tiddlerDisplay {

margin-bottom:8em;

}

/*}}}*/

// Resolves a Tiddler reference or tiddler title into a tiddler title string, or null if it doesn't exist

resolveTitle = function(t)

{

if (t instanceof Tiddler) t = t.title;

return store.tiddlerExists(t) ? t : null;

}



config.macros.navigation = {};

config.macros.navigation.handler = function(place,macroName,params,wikifier,paramString,tiddler)

{



if (!store.tiddlerExists(tiddler.title))

return false;

var e = createTiddlyElement(place,"span",null,"nav");

e.setAttribute("refresh","macro");

e.setAttribute("macroName",macroName);

e.setAttribute("params",paramString);

e.setAttribute("tiddler",tiddler.title)

this.refresh(e,paramString);

}



config.macros.navigation.refresh = function(place,params)

{

var tiddler = store.getTiddler(place.getAttribute("tiddler"));

removeChildren(place);





var params = place.getAttribute("params").parseParams("tiddlers",null,true);

//alert(store.getTiddlerText(getParam(params,"index",undefined)).parseParams("tiddlers",null,false))

var tiddlers = getParam(params,"tiddlers",undefined);

if (typeof tiddlers == 'string')

tiddlers = tiddlers.readBracketedList();

if (tiddlers == undefined)

alert("no source tiddlers defined for navigation");

var contents = [];

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

{

var title = resolveTitle(tiddlers[i]);

contents.push(title);

}

var navIndex = contents.indexOf(tiddler.title);

if (navIndex == -1)

return false;



if (contents[navIndex-1])

{

wikify("[[<< Previous|"+contents[navIndex-1]+"]]",place);

place.lastChild.className += " navPrev";

}

if (contents[navIndex+1])

{

wikify("[[Next >>|"+contents[navIndex+1]+"]]",place);

place.lastChild.className += " navNext";

}



var theTable = createTiddlyElement(place,"table",null,"nav");

var theBody = createTiddlyElement(theTable,"tbody");

var theRow = createTiddlyElement(theBody,"tr");

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

{

var box = createTiddlyElement(theRow,"td",null,"navlinkcell"," ");

box.onclick = onClickTiddlerLink;

box.setAttribute("tiddlyLink",contents[i]);

box.title = (contents[i]);

if (contents[i] ==tiddler.title)

box.className += " activenav";

}

}



setStylesheet(

".navNext {float:right;}\sn"+

".navPrev, .navPrevious{float:left;}\sn"+

".nav .tiddlyLink {color:#000; background:transparent;border:none;padding:0;margin:0;}\sn"+

".nav {padding:0;margin:0;}\sn"+

".nav table {margin:0 auto !important; border:0px solid #000;padding:0;border-collapse:separate;}\sn"+

".nav table tr{padding:0; margin:0;border-spacing: 1px;}\sn"+

".nav table td {padding:4px; border:1px solid #000; border-spacing: 0px;cursor:pointer;cursor:hand}\sn"+

".nav .activenav{background:#000 !important;}\sn","NavigationPluginStyles");

<!--{{{-->

<div id='header' class='header'>



<div class='headerShadow'>

<span class='searchBar' macro='search'></span>

<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>

<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>

</div>

<div macro="gradient vert #c55 #711">

<div id='topMenu' refresh='content' tiddler='MainMenu'></div></div>

</div>



<div id='sidebar'>

<div refresh='content' tiddler='MySideBar'></div>

<!--

<div id='sidebarOptions' refresh='content' tiddler='HaemoSideBarOptions'></div>

<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>

-->

</div>

<div id='displayArea'>

<div id='messageArea'></div>

<div id='tiddlerDisplay'></div>

</div>

<!--<div id='contentFooter' refresh='content' tiddler='contentFooter'></div>-->

<!--}}}-->

DummyTiddler1

DummyTiddler2

[[Dummy Tiddler 3]]

//{{{

TiddlyWiki.prototype.removeNotification = function(title,fn) {

for (var i=0;i<this.namedNotifications.length;i++)

if((this.namedNotifications[i].name == title) && (this.namedNotifications[i].notify == fn))

this.namedNotifications.splice(i,1);

}



//checks to see if a tiddler exists in store or as a shadow.

TiddlyWiki.prototype.isTiddler= function (title)

{return store.tiddlerExists(title) || store.isShadowTiddler(title)}



// Refresh all tiddlers in the Story

Story.prototype.lewcidrefreshAllTiddlers = function()

{

var place = document.getElementById(this.container);

var e = place.firstChild;

if(!e) return;

this.refreshTiddler(e.getAttribute("tiddler"),null,true);

while((e = e.nextSibling) != null)

this.refreshTiddler(e.getAttribute("tiddler"),null,true);

}



config.presentationPlugin ={

};



config.presentationPlugin.defaults = [

{name: "StyleSheet", notify: refreshStyles},

{name: "PageTemplate", notify: refreshPageTemplate}

];



window.presentationMode='';



function applyPresentationMode (oldMode,Mode)

{

presentationMode = Mode;

var defaults = config.presentationPlugin.defaults;

var oldStyleElement = document.getElementById(oldMode+"StyleSheet");

if (oldStyleElement)

{

oldStyleElement.parentNode.removeChild(oldStyleElement);

}

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

{

var def = defaults[i]["name"];

var newMode = store.isTiddler(Mode + def)? Mode + def : def;

store.removeNotification(oldMode + def, defaults[i]["notify"]);

store.addNotification(newMode,defaults[i]["notify"]);

store.notify(newMode); //just one do blanket notify instead?

}

story.lewcidrefreshAllTiddlers();

}



config.macros.author={};

config.macros.author.handler= function (place,macroName,params,wikifier,paramString,tiddler) {

var e = createTiddlyElement(place,"div");

e.setAttribute("refresh","macro");

e.setAttribute("macroName","author");

e.setAttribute("params",paramString);

this.refresh(e,paramString);

}



config.macros.author.refresh = function(place,params){

if (window.lewcideditmode== false)

return false;

removeChildren(place);

var oldMode = window.presentationMode;

var newMode = (oldMode == "Author")?"":"Author";

var label = (oldMode == "Author")? "Presentation Mode":"Author Mode";

var tooltip = label;

createTiddlyButton(place,label,tooltip,function() {

applyPresentationMode(oldMode,newMode);

});

};



Story.prototype.chooseTemplateForTiddler_old_presentation = Story.prototype.chooseTemplateForTiddler;



Story.prototype.chooseTemplateForTiddler = function(title,template)

{

if (!template)

template = DEFAULT_VIEW_TEMPLATE;

var mode = presentationMode;

if (template == DEFAULT_VIEW_TEMPLATE)

{

if (store.isTiddler(mode+"ViewTemplate"))

return mode+"ViewTemplate";

}

else if (template == DEFAULT_EDIT_TEMPLATE)

{

if (store.isTiddler(mode+"EditTemplate"))

return mode+"EditTemplate";

}

return this.chooseTemplateForTiddler_old_presentation(title,template);

}



window.lewcideditmode = false;

config.paramifiers.author = {

onstart: function(v) {

if (v!="true")

return false;

applyPresentationMode("","Author");

window.lewcideditmode = true;

refreshDisplay();

}

};

//}}}

!!Documentation

The little documentation that exists for mGSD can be found here. It's an open (~MediaWiki) wiki so if you feel like contributing content or corrections, then please do. Remember anything is better than nothing.

* http://tiddlywiki.org/wiki/MonkeyGTD



!!The Blog

It's a good idea to subscribe to the blog so you can find out about updates, tips, bug fixes and so on. Subscribe in your feed reader if you can.

* http://monkeygtd.blogspot.com/



!!Google Group/Mailing List

The ~TiddlyWiki-GTD Google Group is the place for discussions on using ~TiddlyWiki for GTD and mGSD questions and comments are well on-topic. You can receive posts via email or via the Google Groups web interface. You need to have a google account to post (I think?). I will post major mGSD announcements there as well as to the blog.

* http://groups.google.com/group/TiddlyWiki-GTD



!!The Author

You can also send feedback, bug reports, comments and contributions to me at:

* [[simon.baird@gmail.com|mailto:simon.baird@gmail.com]]



<<author>><<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<saveChanges>><<upload http://monkeygtd.tiddlyspot.com/store.cgi index.html . . monkeygtd>><html><a href='http://monkeygtd.tiddlyspot.com/download' class='button'>download</a></html><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>>

/***

|''Name:''|SinglePageModePlugin|

|''Source:''|http://www.TiddlyTools.com/#SinglePageModePlugin|

|''Author:''|Eric Shulman - ELS Design Studios|

|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|

|''~CoreVersion:''|2.0.10|



Normally, as you click on the links in TiddlyWiki, more and more tiddlers are displayed on the page. The order of this tiddler display depends upon when and where you have clicked. Some people like this non-linear method of reading the document, while others have reported that when many tiddlers have been opened, it can get somewhat confusing.



!!!!!Usage

<<<

SinglePageMode allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one item displayed at a time. When SinglePageMode is enabled, the title of the current tiddler is automatically displayed in the browser window's titlebar and the browser's location URL is updated with a 'permalink' for the current tiddler so that it is easier to create a browser 'bookmark' for the current tiddler.



Even when SinglePageMode is disabled (i.e., displaying multiple tiddlers is permitted), you can reduce the potential for confusion by enable TopOfPageMode, which forces tiddlers to always open at the top of the page instead of being displayed following the tiddler containing the link that was clicked.

<<<

!!!!!Configuration

<<<

When installed, this plugin automatically adds checkboxes in the AdvancedOptions tiddler so you can enable/disable the plugin behavior. For convenience, these checkboxes are also included here:



<<option chkSinglePageMode>> Display one tiddler at a time

<<option chkTopOfPageMode>> Always open tiddlers at the top of the page

<<<

!!!!!Installation

<<<

import (or copy/paste) the following tiddlers into your document:

''SinglePageModePlugin'' (tagged with <<tag systemConfig>>)

^^documentation and javascript for SinglePageMode handling^^



When installed, this plugin automatically adds checkboxes in the ''shadow'' AdvancedOptions tiddler so you can enable/disable this behavior. However, if you have customized your AdvancedOptions, you will need to ''manually add these checkboxes to your customized tiddler.''

<<<

!!!!!Revision History

<<<

''2006.07.04 [2.2.1]'' in hijack for displayTiddlers(), suspend TPM as well as SPM so that DefaultTiddlers displays in the correct order.

''2006.06.01 [2.2.0]'' added chkTopOfPageMode (TPM) handling

''2006.02.04 [2.1.1]'' moved global variable declarations to config.* to avoid FireFox 1.5.0.1 crash bug when assigning to globals

''2005.12.27 [2.1.0]'' hijack displayTiddlers() so that SPM can be suspended during startup while displaying the DefaultTiddlers (or #hash list). Also, corrected initialization for undefined SPM flag to "false", so default behavior is to display multiple tiddlers

''2005.12.27 [2.0.0]'' Update for TW2.0

''2005.11.24 [1.1.2]'' When the back and forward buttons are used, the page now changes to match the URL. Based on code added by Clint Checketts

''2005.10.14 [1.1.1]'' permalink creation now calls encodeTiddlyLink() to handle tiddler titles with spaces in them

''2005.10.14 [1.1.0]'' added automatic setting of window title and location bar ('auto-permalink'). feature suggestion by David Dickens.

''2005.10.09 [1.0.1]'' combined documentation and code in a single tiddler

''2005.08.15 [1.0.0]'' Initial Release

<<<

!!!!!Credits

<<<

This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].

Support for BACK/FORWARD buttons adapted from code developed by Clint Checketts

<<<

!!!!!Code

***/

//{{{

Story.prototype.displayTiddler = function(srcElement,title,template,animate,slowly)

{

var place = document.getElementById(this.container);

var theTiddler = document.getElementById(this.idPrefix + title);

if(theTiddler)

this.refreshTiddler(title,template);

else

{

var before = this.positionTiddler(srcElement);

theTiddler = this.createTiddler(place,before,title,template);

}

if(srcElement && typeof srcElement !== "string")

{

if(anim && config.options.chkAnimate && (animate == undefined || animate == true))

anim.startAnimating(new Cascade(title,srcElement,theTiddler,slowly),new Scroller(theTiddler,slowly));

else

window.scrollTo(0,0);

}

}







version.extensions.SinglePageMode= {major: 2, minor: 2, revision: 1, date: new Date(2006,7,3)};



config.options.chkSinglePageMode=true;



if (config.options.chkSinglePageMode==undefined) config.options.chkSinglePageMode=false;

config.shadowTiddlers.AdvancedOptions += "\sn<<option chkSinglePageMode>> Display one tiddler at a time";



if (config.options.chkTopOfPageMode==undefined) config.options.chkTopOfPageMode=false;

config.shadowTiddlers.AdvancedOptions += "\sn<<option chkTopOfPageMode>> Always open tiddlers at the top of the page";



config.SPMTimer = 0;

config.lastURL = window.location.hash;

function checkLastURL()

{

if (!config.options.chkSinglePageMode)

{ window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }

if (config.lastURL == window.location.hash)

return;

var tiddlerName = convertUTF8ToUnicode(decodeURI(window.location.hash.substr(1)));

tiddlerName=tiddlerName.replace(/\s[\s[/,"").replace(/\s]\s]/,""); // strip any [[ ]] bracketing

if (tiddlerName.length) story.displayTiddler(null,tiddlerName,1,null,null);

}



if (Story.prototype.SPM_coreDisplayTiddler==undefined) Story.prototype.SPM_coreDisplayTiddler=Story.prototype.displayTiddler;

Story.prototype.displayTiddler = function(srcElement,title,template,animate,slowly)

{

if (config.options.chkSinglePageMode) {

window.location.hash = encodeURIComponent(String.encodeTiddlyLink(title));

config.lastURL = window.location.hash;

document.title = wikifyPlain("SiteTitle") + " - " + title;

story.closeAllTiddlers();

if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);

}

if (config.options.chkTopOfPageMode) { story.closeTiddler(title); window.scrollTo(0,0); srcElement=null; }

this.SPM_coreDisplayTiddler(srcElement,title,template,animate,slowly)

}



if (Story.prototype.SPM_coreDisplayTiddlers==undefined) Story.prototype.SPM_coreDisplayTiddlers=Story.prototype.displayTiddlers;

Story.prototype.displayTiddlers = function(srcElement,titles,template,unused1,unused2,animate,slowly)

{

// suspend single-page mode when displaying multiple tiddlers

var saveSPM=config.options.chkSinglePageMode; config.options.chkSinglePageMode=false;

var saveTPM=config.options.chkTopOfPageMode; config.options.chkTopOfPageMode=false;

this.SPM_coreDisplayTiddlers(srcElement,titles,template,unused1,unused2,animate,slowly);

config.options.chkSinglePageMode=saveSPM; config.options.chkTopOfPageMode=saveTPM;

}

//}}}

The ~TiddlyWiki powered GTD® system formerly known as ~MonkeyGTD

mGSD

/*{{{*/

/*Haemoglobin Theme for TiddlyWiki*/

/*Design and CSS by Saq Imtiaz*/

/*Version 1.0*/

/*}}}*/

/*{{{*/



#sidebarTabs {font-family:arial,helvetica;}



body

{background:#fefefe;}



#contentWrapper {

font-family: Verdana, Arial, Tahoma, Sans-Serif;

color: #555555;

margin:1.9em auto 1em ; width:800px;}



#header {background:#fefefe;}



.headerShadow { padding: 1.4em 0em 0.5em 1em; }



.siteTitle {

font-family: 'Trebuchet MS' sans-serif;

font-weight: bold;

font-size: 36px;

color: #BF2323;

background-color: #FFF;

}



.siteSubtitle {

font-size: 1.0em;

display: block;

margin: .5em 3em; color: #999;

}



.clearAll {clear:both;}

.tagClear {clear:none;}

#sidebar {position:relative; float:right; display:inline; right:0;}



a{

color:#BF2323;

text-decoration: none; font-weight:normal;

}



a:hover{

color:#BF2323;

background-color: #fefefe;

border-bottom:1px solid #BF2323;

}



.viewer .button, .editorFooter .button{

color: #555;

border: 1px solid #BF2323;

}



.viewer .button:hover,

.editorFooter .button:hover{

color: #fff;

background: #BF2323;

border-color: #BF2323;

}



.viewer .button:active, .viewer .highlight,.editorFooter .button:active, .editorFooter .highlight{color:#fff; background:#9F1313;border-color:#9F1313;}



#topMenu br {display:none;}



#topMenu {padding:0.45em 1em; background:#BF2323;}



#topMenu a, #topMenu .tiddlyLink, #topMenu .button {color:#f1f1f1; padding:0.3em 0.45em; margin:0 4px;font-size:120%;font-weight:normal;font-variant: small-caps; border:none; background:#BF2323; text-decoration:none; }



#topMenu a:hover, #topMenu .tiddlyLink:hover, #topMenu .button:hover, #topMenu .button:active, #topMenu .highlight {color:#fff;text-decoration:none; background:#9F1313; }







#displayArea{margin:0 17em 2em 0.5em;}



.tiddler {padding-left:0;}



.title {color:#BF2323; border-bottom:1px solid#BF2323; }

.subtitle, .subtitle a { color: #999999; font-size: 1.0em;margin:0.2em;}

.shadow .title{color:#999;}



.toolbar {font-size:85%;}

.selected .toolbar a {color:#999999;}

.selected .toolbar a:hover {color:#333; background:transparent;border:1px solid #fff;}



.toolbar .button:hover, .toolbar .highlight, .toolbar .marked, .toolbar a.button:active{color:#333; background:transparent;border:1px solid #fff;}



* html .viewer pre {



margin-left: 0em;

}



* html .editor textarea, * html .editor input {



width: 98%;

}



/***

!Sidebar

***/

#sidebar {position:relative;float:right; line-height: 1.4em; border-left:0px solid#000; display:inline; background:#fefefe; right:0; margin-bottom:2em !important; margin-bottom:1em;

width: 16em;}



/***

!SidebarOptions

***/

#sidebarOptions {padding-left:0.5em; padding-top:2em;}



#sidebarOptions a {

color:#999;

text-decoration: none;}



#sidebarOptions a:hover, #sidebarOptions a:active {

color:#CC0000;

background-color:#f5f5f5;border:1px solid #f5f5f5;

}



#sidebarOptions input {border:1px solid #999; }







.listTitle {color:#888;}



#sidebarTabs .tabContents {background:#fefefe;}

#sidebarTabs .tabContents .tiddlyLink, #sidebarTabs .tabContents .button{color:#999;}

#sidebarTabs .tabContents .tiddlyLink:hover,#sidebarTabs .tabContents .button:hover{color:#CC0000;background:#fefefe; text-decoration:none;border:none;}



#sidebarTabs .tabContents .button:hover, #sidebarTabs .tabContents .highlight, #sidebarTabs .tabContents .marked, #sidebarTabs .tabContents a.button:active{color:#CC0000;background:#fefefe}





.tabSelected{color:#fefefe; background:#999;}







.tabSelected, .tabSelected:hover {

color: #555;

background: #fefefe;

border: solid 1px #ccc;



}



#sidebarTabs .tabUnselected:hover { border-bottom: none;padding-bottom:3px;color:#999;}



.tabUnselected {

color: #999;

background: #eee;

border: solid 1px #ccc;



}



.tabUnselected:hover {text-decoration:none; border:1px solid #ccc;}



#sidebarTabs .tabUnselected { border-bottom: none;padding-bottom:3px;}

#sidebarTabs .tabSelected{padding-bottom:3px;}



#sidebarOptions .sliderPanel {

background: #eee; border:1px solid#ccc;

font-size: .9em;

}



#sidebarOptions .sliderPanel input {border:1px solid #999;}

#sidebarOptions .sliderPanel .txtOptionInput {border:1px solid #999;width:9em;}



#sidebarOptions .sliderPanel a {font-weight:normal; color:#555;background-color: #eee; border-bottom:1px dotted #333;}





#sidebarOptions .sliderPanel a:hover {

color:#111;

background-color: #eee;

border:none;

border-bottom:1px dotted #111;

}



.tabContents {background:#fefefe;}









.tagging, .tagged {

border: 1px solid #eee;

background-color: #F7F7F7;

}



.selected .tagging, .selected .tagged {

background-color: #f7f7f7;

border: 1px solid #ccc;

}



.tagging .listTitle, .tagged .listTitle {

color: #bbb;

}



.selected .tagging .listTitle, .selected .tagged .listTitle {

color: #666;

}



.tagging .button, .tagged .button {

color:#ccc;

}

.selected .tagging .button, .selected .tagged .button {

color:#aaa;

}



.highlight, .marked {background:transparent; color:#111; border:none; text-decoration:underline;}



.tagging .button:hover, .tagged .button:hover, .tagging .button:active, .tagged .button:active {

border: none; background:transparent; text-decoration:underline; color:#333;

}



.popup {

background: #BF2323;

border: 1px solid #BF2323;

}



.popup li.disabled {

color: #000;

}



.popup li a, .popup li a:visited {

color: #eee;

border: none;

}



.popup li a:hover {

background: #bf1717;

color: #fff;

border: none;

}







#messageArea {



border: 4px solid #BF2323;

background: #fefefe;

color: #555;

font-size:90%;

}



#messageArea a:hover { background:#f5f5f5; border:none;}





#messageArea .button{

color: #666;

border: 1px solid #BF2323;

}



#messageArea .button:hover {

color: #fff;

background: #BF2323;

border-color: #BF2323;

}



#contentFooter {background:#BF2323; color:#DF7D7D; clear: both; padding: 0.5em 1em; }





#contentFooter a {

color: #DF7D7D;

border-bottom: 1px dotted #DF7D7D; font-weight:normal;text-decoration:none;

}







#contentFooter a:hover {

color: #FFFFFF;

background-color:transparent;

border-bottom: 1px dotted #fff; text-decoration:none;

}









.searchBar {float:right;font-size: 1.0em;position:relative; margin-top:1.3em;}

.searchBar .button {color:#999;display:block;}

.searchBar .button:hover {border:1px solid #fefefe;color:#4F4B45;}

.searchBar input {

background-color: #fefefe;

color: #999999;

border: 1px solid #CCC; margin-right:3px;

}



.tiddler {padding-bottom:10px;}



.viewer blockquote {

border-left: 5px solid #BF2323;

}



.viewer table, .viewer td {

border: 1px solid #BF2323;

}



.viewer th, thead td {

background: #BF2323;

border: 1px solid #BF2323;

color: #fff;

}

.viewer pre {

border: 1px solid #ccc;

background: #f5f5f5;

}



.viewer code {

color: #111; background:#f5f5f5;

}



.viewer hr {

border-top: dashed 1px #555;

}



.editor input {

border: 1px solid #888; margin-top:5px;

}



.editor textarea {

border: 1px solid #888;

}



h1,h2,h3,h4,h5 { color: #BF2323; background: transparent; padding-bottom:2px; font-family: Arial, Helvetica, sans-serif; }

h1 {font-size:18px;}

h2 {font-size:16px;}

h3 {font-size: 14px;}



[[MyStyles]]

/*}}}*/

.centre {text-align:center; margin:0;}

.centre img {margin:0 auto;}



.title, h1 {font-size: 1.6em; font-weight:bold; background:transparent; margin-top:0;margin-bottom:0; color:#000;}



h2 {font-size: 1.45em; font-weight:bold; background:transparent; margin-top:0;margin-bottom:0; color:#000;}



#mainMenu {width:14em;}

#displayArea {margin-left:18em;}



.left {float:left; margin-right:1em;}

.bold {font-weight:bold;}







.topbutton button, .topbutton{float:right;}



.note{

position:relative; /*this is the key*/

z-index:24; background:#ccc;

color:#000;

text-decoration:none}



.note:hover, .noteover{z-index:25; background-color:#FFB865;cursor:help;}



.note span{display: none;}



.note:hover span, .noteover span{ /*the span will display just on :hover state*/

display:block;

position:absolute;

top:2em; left:2em; width:15em;

border:1px solid #000;

background-color:#FFB35A; color:#000;

padding:0.5em;}







.info{

position:relative; /*this is the key*/

z-index:24; background:#ccc;

color:#000;

text-decoration:none}



.info:hover, .infoover{z-index:25; background-color:#FFB865;cursor:help;}



.info span{display: none}



.info:hover span, .infoover span{ /*the span will display just on :hover state*/

display:block;

position:absolute;

top:2em; left:2em; width:15em;

border:1px solid #000;

background-color:#FFB35A; color:#000;

padding:0.5em;}



.bold {font-weight: bold !important;}

Tiddler.prototype.getSubtitle = function()

{

return(this.title);

}

config.macros.top={};

config.macros.top.handler=function(place,macroName)

{

createTiddlyButton(place,"^","jump to top",this.onclick);

}

config.macros.top.onclick=function()

{

window.scrollTo(0,0);

};



| 25/2/2010 22:30:58 | YourName | [[/|http://monkeygtd.tiddlyspot.com/#UploadLog]] | [[store.cgi|http://monkeygtd.tiddlyspot.com/store.cgi]] | . | index.html | . |

| 25/2/2010 22:31:33 | YourName | [[/|http://monkeygtd.tiddlyspot.com/#SiteSubtitle]] | [[store.cgi|http://monkeygtd.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok | Ok |

| 25/2/2010 22:36:55 | YourName | [[/|http://monkeygtd.tiddlyspot.com/#mGSD]] | [[store.cgi|http://monkeygtd.tiddlyspot.com/store.cgi]] | . | index.html | . |

| 25/2/2010 22:45:46 | YourName | [[/|http://monkeygtd.tiddlyspot.com/#Demo]] | [[store.cgi|http://monkeygtd.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |

| 25/2/2010 22:47:34 | YourName | [[/|http://monkeygtd.tiddlyspot.com/#Resources]] | [[store.cgi|http://monkeygtd.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |

| 25/2/2010 22:49:49 | YourName | [[/|http://monkeygtd.tiddlyspot.com/#mGSD]] | [[store.cgi|http://monkeygtd.tiddlyspot.com/store.cgi]] | . | index.html | . |

/***

|''Name:''|UploadPlugin|

|''Description:''|Save to web a TiddlyWiki|

|''Version:''|3.4.4|

|''Date:''|Sep 30, 2006|

|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|

|''Documentation:''|http://tiddlywiki.bidix.info/#UploadDoc|

|''Author:''|BidiX (BidiX (at) bidix (dot) info)|

|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|

|''~CoreVersion:''|2.0.0|

|''Browser:''|Firefox 1.5; InternetExplorer 6.0; Safari|

|''Include:''|config.lib.file; config.lib.log; config.lib.options; PasswordTweak|

|''Require:''|[[UploadService|http://tiddlywiki.bidix.info/#UploadService]]|

***/

//{{{

version.extensions.UploadPlugin = {

major: 3, minor: 4, revision: 4,

date: new Date(2006,8,30),

source: 'http://tiddlywiki.bidix.info/#UploadPlugin',

documentation: 'http://tiddlywiki.bidix.info/#UploadDoc',

author: 'BidiX (BidiX (at) bidix (dot) info',

license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',

coreVersion: '2.0.0',

browser: 'Firefox 1.5; InternetExplorer 6.0; Safari'

};

//}}}



////+++!![config.lib.file]



//{{{

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

if (!config.lib.file) config.lib.file= {

author: 'BidiX',

version: {major: 0, minor: 1, revision: 0},

date: new Date(2006,3,9)

};

config.lib.file.dirname = function (filePath) {

var lastpos;

if ((lastpos = filePath.lastIndexOf("/")) != -1) {

return filePath.substring(0, lastpos);

} else {

return filePath.substring(0, filePath.lastIndexOf("\s\s"));

}

};

config.lib.file.basename = function (filePath) {

var lastpos;

if ((lastpos = filePath.lastIndexOf("#")) != -1)

filePath = filePath.substring(0, lastpos);

if ((lastpos = filePath.lastIndexOf("/")) != -1) {

return filePath.substring(lastpos + 1);

} else

return filePath.substring(filePath.lastIndexOf("\s\s")+1);

};

window.basename = function() {return "@@deprecated@@";};

//}}}

////===



////+++!![config.lib.log]



//{{{

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

if (!config.lib.log) config.lib.log= {

author: 'BidiX',

version: {major: 0, minor: 1, revision: 1},

date: new Date(2006,8,19)

};

config.lib.Log = function(tiddlerTitle, logHeader) {

if (version.major < 2)

this.tiddler = store.tiddlers[tiddlerTitle];

else

this.tiddler = store.getTiddler(tiddlerTitle);

if (!this.tiddler) {

this.tiddler = new Tiddler();

this.tiddler.title = tiddlerTitle;

this.tiddler.text = "| !date | !user | !location |" + logHeader;

this.tiddler.created = new Date();

this.tiddler.modifier = config.options.txtUserName;

this.tiddler.modified = new Date();

if (version.major < 2)

store.tiddlers[tiddlerTitle] = this.tiddler;

else

store.addTiddler(this.tiddler);

}

return this;

};



config.lib.Log.prototype.newLine = function (line) {

var now = new Date();

var newText = "| ";

newText += now.getDate()+"/"+(now.getMonth()+1)+"/"+now.getFullYear() + " ";

newText += now.getHours()+":"+now.getMinutes()+":"+now.getSeconds()+" | ";

newText += config.options.txtUserName + " | ";

var location = document.location.toString();

var filename = config.lib.file.basename(location);

if (!filename) filename = '/';

newText += "[["+filename+"|"+location + "]] |";

this.tiddler.text = this.tiddler.text + "\sn" + newText;

this.addToLine(line);

};



config.lib.Log.prototype.addToLine = function (text) {

this.tiddler.text = this.tiddler.text + text;

this.tiddler.modifier = config.options.txtUserName;

this.tiddler.modified = new Date();

if (version.major < 2)

store.tiddlers[this.tiddler.tittle] = this.tiddler;

else {

store.addTiddler(this.tiddler);

story.refreshTiddler(this.tiddler.title);

store.notify(this.tiddler.title, true);

}

if (version.major < 2)

store.notifyAll();

};

//}}}

////===



////+++!![config.lib.options]



//{{{

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

if (!config.lib.options) config.lib.options = {

author: 'BidiX',

version: {major: 0, minor: 1, revision: 0},

date: new Date(2006,3,9)

};



config.lib.options.init = function (name, defaultValue) {

if (!config.options[name]) {

config.options[name] = defaultValue;

saveOptionCookie(name);

}

};

//}}}

////===



////+++!![PasswordTweak]



//{{{

version.extensions.PasswordTweak = {

major: 1, minor: 0, revision: 3, date: new Date(2006,8,30),

type: 'tweak',

source: 'http://tiddlywiki.bidix.info/#PasswordTweak'

};

//}}}

/***

!!config.macros.option

***/

//{{{

config.macros.option.passwordCheckboxLabel = "Save this password on this computer";

config.macros.option.passwordType = "password"; // password | text



config.macros.option.onChangeOption = function(e)

{

var opt = this.getAttribute("option");

var elementType,valueField;

if(opt) {

switch(opt.substr(0,3)) {

case "txt":

elementType = "input";

valueField = "value";

break;

case "pas":

elementType = "input";

valueField = "value";

break;

case "chk":

elementType = "input";

valueField = "checked";

break;

}

config.options[opt] = this[valueField];

saveOptionCookie(opt);

var nodes = document.getElementsByTagName(elementType);

for(var t=0; t<nodes.length; t++)

{

var optNode = nodes[t].getAttribute("option");

if (opt == optNode)

nodes[t][valueField] = this[valueField];

}

}

return(true);

};



config.macros.option.handler = function(place,macroName,params)

{

var opt = params[0];

if(config.options[opt] === undefined) {

return;}

var c;

switch(opt.substr(0,3)) {

case "txt":

c = document.createElement("input");

c.onkeyup = this.onChangeOption;

c.setAttribute ("option",opt);

c.className = "txtOptionInput "+opt;

place.appendChild(c);

c.value = config.options[opt];

break;

case "pas":

// input password

c = document.createElement ("input");

c.setAttribute("type",config.macros.option.passwordType);

c.onkeyup = this.onChangeOption;

c.setAttribute("option",opt);

c.className = "pasOptionInput "+opt;

place.appendChild(c);

c.value = config.options[opt];

// checkbox link with this password "save this password on this computer"

c = document.createElement("input");

c.setAttribute("type","checkbox");

c.onclick = this.onChangeOption;

c.setAttribute("option","chk"+opt);

c.className = "chkOptionInput "+opt;

place.appendChild(c);

c.checked = config.options["chk"+opt];

// text savePasswordCheckboxLabel

place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));

break;

case "chk":

c = document.createElement("input");

c.setAttribute("type","checkbox");

c.onclick = this.onChangeOption;

c.setAttribute("option",opt);

c.className = "chkOptionInput "+opt;

place.appendChild(c);

c.checked = config.options[opt];

break;

}

};

//}}}

/***

!! Option cookie stuff

***/

//{{{

window.loadOptionsCookie_orig_PasswordTweak = window.loadOptionsCookie;

window.loadOptionsCookie = function()

{

var cookies = document.cookie.split(";");

for(var c=0; c<cookies.length; c++) {

var p = cookies[c].indexOf("=");

if(p != -1) {

var name = cookies[c].substr(0,p).trim();

var value = cookies[c].substr(p+1).trim();

switch(name.substr(0,3)) {

case "txt":

config.options[name] = unescape(value);

break;

case "pas":

config.options[name] = unescape(value);

break;

case "chk":

config.options[name] = value == "true";

break;

}

}

}

};



window.saveOptionCookie_orig_PasswordTweak = window.saveOptionCookie;

window.saveOptionCookie = function(name)

{

var c = name + "=";

switch(name.substr(0,3)) {

case "txt":

c += escape(config.options[name].toString());

break;

case "chk":

c += config.options[name] ? "true" : "false";

// is there an option link with this chk ?

if (config.options[name.substr(3)]) {

saveOptionCookie(name.substr(3));

}

break;

case "pas":

if (config.options["chk"+name]) {

c += escape(config.options[name].toString());

} else {

c += "";

}

break;

}

c += "; expires=Fri, 1 Jan 2038 12:00:00 UTC; path=/";

document.cookie = c;

};

//}}}

/***

!! Initializations

***/

//{{{

// define config.options.pasPassword

if (!config.options.pasPassword) {

config.options.pasPassword = 'defaultPassword';

window.saveOptionCookie('pasPassword');

}

// since loadCookies is first called befor password definition

// we need to reload cookies

window.loadOptionsCookie();

//}}}

////===



////+++!![config.macros.upload]



//{{{

config.macros.upload = {

accessKey: "U",

formName: "UploadPlugin",

contentType: "text/html;charset=UTF-8",

defaultStoreScript: "store.php"

};



// only this two configs need to be translated

config.macros.upload.messages = {

aboutToUpload: "About to upload TiddlyWiki to %0",

backupFileStored: "Previous file backuped in %0",

crossDomain: "Certainly a cross-domain isue: access to an other site isn't allowed",

errorDownloading: "Error downloading",

errorUploadingContent: "Error uploading content",

fileLocked: "Files is locked: You are not allowed to Upload",

fileNotFound: "file to upload not found",

fileNotUploaded: "File %0 NOT uploaded",

mainFileUploaded: "Main TiddlyWiki file uploaded to %0",

passwordEmpty: "Unable to upload, your password is empty",

urlParamMissing: "url param missing",

rssFileNotUploaded: "RssFile %0 NOT uploaded",

rssFileUploaded: "Rss File uploaded to %0"

};



config.macros.upload.label = {

promptOption: "Save and Upload this TiddlyWiki with UploadOptions",

promptParamMacro: "Save and Upload this TiddlyWiki in %0",

saveLabel: "save to web",

saveToDisk: "save to disk",

uploadLabel: "upload"

};



config.macros.upload.handler = function(place,macroName,params){

// parameters initialization

var storeUrl = params[0];

var toFilename = params[1];

var backupDir = params[2];

var uploadDir = params[3];

var username = params[4];

var password; // for security reason no password as macro parameter

var label;

if (document.location.toString().substr(0,4) == "http")

label = this.label.saveLabel;

else

label = this.label.uploadLabel;

var prompt;

if (storeUrl) {

prompt = this.label.promptParamMacro.toString().format([this.toDirUrl(storeUrl, uploadDir, username)]);

}

else {

prompt = this.label.promptOption;

}

createTiddlyButton(place, label, prompt,

function () {

config.macros.upload.upload(storeUrl, toFilename, uploadDir, backupDir, username, password);

return false;},

null, null, this.accessKey);

};

config.macros.upload.UploadLog = function() {

return new config.lib.Log('UploadLog', " !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |" );

};

config.macros.upload.UploadLog.prototype = config.lib.Log.prototype;

config.macros.upload.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir, backupDir) {

var line = " [[" + config.lib.file.basename(storeUrl) + "|" + storeUrl + "]] | ";

line += uploadDir + " | " + toFilename + " | " + backupDir + " |";

this.newLine(line);

};

config.macros.upload.UploadLog.prototype.endUpload = function() {

this.addToLine(" Ok |");

};

config.macros.upload.basename = config.lib.file.basename;

config.macros.upload.dirname = config.lib.file.dirname;

config.macros.upload.toRootUrl = function (storeUrl, username)

{

return root = (this.dirname(storeUrl)?this.dirname(storeUrl):this.dirname(document.location.toString()));

}

config.macros.upload.toDirUrl = function (storeUrl, uploadDir, username)

{

var root = this.toRootUrl(storeUrl, username);

if (uploadDir && uploadDir != '.')

root = root + '/' + uploadDir;

return root;

}

config.macros.upload.toFileUrl = function (storeUrl, toFilename, uploadDir, username)

{

return this.toDirUrl(storeUrl, uploadDir, username) + '/' + toFilename;

}

config.macros.upload.upload = function(storeUrl, toFilename, uploadDir, backupDir, username, password)

{

// parameters initialization

storeUrl = (storeUrl ? storeUrl : config.options.txtUploadStoreUrl);

toFilename = (toFilename ? toFilename : config.options.txtUploadFilename);

backupDir = (backupDir ? backupDir : config.options.txtUploadBackupDir);

uploadDir = (uploadDir ? uploadDir : config.options.txtUploadDir);

username = (username ? username : config.options.txtUploadUserName);

password = config.options.pasUploadPassword; // for security reason no password as macro parameter

if (!password || password === '') {

alert(config.macros.upload.messages.passwordEmpty);

return;

}

if (storeUrl === '') {

storeUrl = config.macros.upload.defaultStoreScript;

}

if (config.lib.file.dirname(storeUrl) === '') {

storeUrl = config.lib.file.dirname(document.location.toString())+'/'+storeUrl;

}

if (toFilename === '') {

toFilename = config.lib.file.basename(document.location.toString());

}



clearMessage();

// only for forcing the message to display

if (version.major < 2)

store.notifyAll();

if (!storeUrl) {

alert(config.macros.upload.messages.urlParamMissing);

return;

}

// Check that file is not locked

if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {

if (BidiX.GroupAuthoring.lock.isLocked() && !BidiX.GroupAuthoring.lock.isMyLock()) {

alert(config.macros.upload.messages.fileLocked);

return;

}

}



var log = new this.UploadLog();

log.startUpload(storeUrl, toFilename, uploadDir, backupDir);

if (document.location.toString().substr(0,5) == "file:") {

saveChanges();

}

var toDir = config.macros.upload.toDirUrl(storeUrl, toFilename, uploadDir, username);

displayMessage(config.macros.upload.messages.aboutToUpload.format([toDir]), toDir);

this.uploadChanges(storeUrl, toFilename, uploadDir, backupDir, username, password);

if(config.options.chkGenerateAnRssFeed) {

//var rssContent = convertUnicodeToUTF8(generateRss());

var rssContent = generateRss();

var rssPath = toFilename.substr(0,toFilename.lastIndexOf(".")) + ".xml";

this.uploadContent(rssContent, storeUrl, rssPath, uploadDir, '', username, password,

function (responseText) {

if (responseText.substring(0,1) != '0') {

displayMessage(config.macros.upload.messages.rssFileNotUploaded.format([rssPath]));

}

else {

var toFileUrl = config.macros.upload.toFileUrl(storeUrl, rssPath, uploadDir, username);

displayMessage(config.macros.upload.messages.rssFileUploaded.format(

[toFileUrl]), toFileUrl);

}

// for debugging store.php uncomment last line

//DEBUG alert(responseText);

});

}

return;

};



config.macros.upload.uploadChanges = function(storeUrl, toFilename, uploadDir, backupDir,

username, password) {

var original;

if (document.location.toString().substr(0,4) == "http") {

original = this.download(storeUrl, toFilename, uploadDir, backupDir, username, password);

return;

}

else {

// standard way : Local file



original = loadFile(getLocalPath(document.location.toString()));

if(window.Components) {

// it's a mozilla browser

try {

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]

.createInstance(Components.interfaces.nsIScriptableUnicodeConverter);

converter.charset = "UTF-8";

original = converter.ConvertToUnicode(original);

}

catch(e) {

}

}

}

//DEBUG alert(original);

this.uploadChangesFrom(original, storeUrl, toFilename, uploadDir, backupDir,

username, password);

};



config.macros.upload.uploadChangesFrom = function(original, storeUrl, toFilename, uploadDir, backupDir,

username, password) {

var startSaveArea = '<div id="' + 'storeArea">'; // Split up into two so that indexOf() of this source doesn't find it

var endSaveArea = '</d' + 'iv>';

// Locate the storeArea div's

var posOpeningDiv = original.indexOf(startSaveArea);

var posClosingDiv = original.lastIndexOf(endSaveArea);

if((posOpeningDiv == -1) || (posClosingDiv == -1))

{

alert(config.messages.invalidFileError.format([document.location.toString()]));

return;

}

var revised = original.substr(0,posOpeningDiv + startSaveArea.length) +

allTiddlersAsHtml() + "\sn\st\st" +

original.substr(posClosingDiv);

var newSiteTitle;

if(version.major < 2){

newSiteTitle = (getElementText("siteTitle") + " - " + getElementText("siteSubtitle")).htmlEncode();

} else {

newSiteTitle = (wikifyPlain ("SiteTitle") + " - " + wikifyPlain ("SiteSubtitle")).htmlEncode();

}



revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");

revised = revised.replaceChunk("<!--PRE-HEAD-START--"+">","<!--PRE-HEAD-END--"+">","\sn" + store.getTiddlerText("MarkupPreHead","") + "\sn");

revised = revised.replaceChunk("<!--POST-HEAD-START--"+">","<!--POST-HEAD-END--"+">","\sn" + store.getTiddlerText("MarkupPostHead","") + "\sn");

revised = revised.replaceChunk("<!--PRE-BODY-START--"+">","<!--PRE-BODY-END--"+">","\sn" + store.getTiddlerText("MarkupPreBody","") + "\sn");

revised = revised.replaceChunk("<!--POST-BODY-START--"+">","<!--POST-BODY-END--"+">","\sn" + store.getTiddlerText("MarkupPostBody","") + "\sn");



var response = this.uploadContent(revised, storeUrl, toFilename, uploadDir, backupDir,

username, password, function (responseText) {

if (responseText.substring(0,1) != '0') {

alert(responseText);

displayMessage(config.macros.upload.messages.fileNotUploaded.format([getLocalPath(document.location.toString())]));

}

else {

if (uploadDir !== '') {

toFilename = uploadDir + "/" + config.macros.upload.basename(toFilename);

} else {

toFilename = config.macros.upload.basename(toFilename);

}

var toFileUrl = config.macros.upload.toFileUrl(storeUrl, toFilename, uploadDir, username);

if (responseText.indexOf("destfile:") > 0) {

var destfile = responseText.substring(responseText.indexOf("destfile:")+9,

responseText.indexOf("\sn", responseText.indexOf("destfile:")));

toFileUrl = config.macros.upload.toRootUrl(storeUrl, username) + '/' + destfile;

}

else {

toFileUrl = config.macros.upload.toFileUrl(storeUrl, toFilename, uploadDir, username);

}

displayMessage(config.macros.upload.messages.mainFileUploaded.format(

[toFileUrl]), toFileUrl);

if (backupDir && responseText.indexOf("backupfile:") > 0) {

var backupFile = responseText.substring(responseText.indexOf("backupfile:")+11,

responseText.indexOf("\sn", responseText.indexOf("backupfile:")));

toBackupUrl = config.macros.upload.toRootUrl(storeUrl, username) + '/' + backupFile;

displayMessage(config.macros.upload.messages.backupFileStored.format(

[toBackupUrl]), toBackupUrl);

}

var log = new config.macros.upload.UploadLog();

log.endUpload();

store.setDirty(false);

// erase local lock

if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {

BidiX.GroupAuthoring.lock.eraseLock();

// change mtime with new mtime after upload

var mtime = responseText.substr(responseText.indexOf("mtime:")+6);

BidiX.GroupAuthoring.lock.mtime = mtime;

}





}

// for debugging store.php uncomment last line

//DEBUG alert(responseText);

}

);

};



config.macros.upload.uploadContent = function(content, storeUrl, toFilename, uploadDir, backupDir,

username, password, callbackFn) {

var boundary = "---------------------------"+"AaB03x";

var request;

try {

request = new XMLHttpRequest();

}

catch (e) {

request = new ActiveXObject("Msxml2.XMLHTTP");

}

if (window.netscape){

try {

if (document.location.toString().substr(0,4) != "http") {

netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');}

}

catch (e) {}

}

//DEBUG alert("user["+config.options.txtUploadUserName+"] password[" + config.options.pasUploadPassword + "]");

// compose headers data

var sheader = "";

sheader += "--" + boundary + "\sr\snContent-disposition: form-data; name=\s"";

sheader += config.macros.upload.formName +"\s"\sr\sn\sr\sn";

sheader += "backupDir="+backupDir

+";user=" + username

+";password=" + password

+";uploaddir=" + uploadDir;

// add lock attributes to sheader

if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {

var l = BidiX.GroupAuthoring.lock.myLock;

sheader += ";lockuser=" + l.user

+ ";mtime=" + l.mtime

+ ";locktime=" + l.locktime;

}

sheader += ";;\sr\sn";

sheader += "\sr\sn" + "--" + boundary + "\sr\sn";

sheader += "Content-disposition: form-data; name=\s"userfile\s"; filename=\s""+toFilename+"\s"\sr\sn";

sheader += "Content-Type: " + config.macros.upload.contentType + "\sr\sn";

sheader += "Content-Length: " + content.length + "\sr\sn\sr\sn";

// compose trailer data

var strailer = new String();

strailer = "\sr\sn--" + boundary + "--\sr\sn";

//strailer = "--" + boundary + "--\sr\sn";

var data;

data = sheader + content + strailer;

//request.open("POST", storeUrl, true, username, password);

try {

request.open("POST", storeUrl, true);

}

catch(e) {

alert(config.macros.upload.messages.crossDomain + "\snError:" +e);

exit;

}

request.onreadystatechange = function () {

if (request.readyState == 4) {

if (request.status == 200)

callbackFn(request.responseText);

else

alert(config.macros.upload.messages.errorUploadingContent + "\snStatus: "+request.status.statusText);

}

};

request.setRequestHeader("Content-Length",data.length);

request.setRequestHeader("Content-Type","multipart/form-data; boundary="+boundary);

request.send(data);

};





config.macros.upload.download = function(uploadUrl, uploadToFilename, uploadDir, uploadBackupDir,

username, password) {

var request;

try {

request = new XMLHttpRequest();

}

catch (e) {

request = new ActiveXObject("Msxml2.XMLHTTP");

}

try {

if (uploadUrl.substr(0,4) == "http") {

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");

}

else {

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

}

} catch (e) { }

//request.open("GET", document.location.toString(), true, username, password);

try {

request.open("GET", document.location.toString(), true);

}

catch(e) {

alert(config.macros.upload.messages.crossDomain + "\snError:" +e);

exit;

}



request.onreadystatechange = function () {

if (request.readyState == 4) {

if(request.status == 200) {

config.macros.upload.uploadChangesFrom(request.responseText, uploadUrl,

uploadToFilename, uploadDir, uploadBackupDir, username, password);

}

else

alert(config.macros.upload.messages.errorDownloading.format(

[document.location.toString()]) + "\snStatus: "+request.status.statusText);

}

};

request.send(null);

};



//}}}

////===



////+++!![Initializations]



//{{{

config.lib.options.init('txtUploadStoreUrl','store.php');

config.lib.options.init('txtUploadFilename','');

config.lib.options.init('txtUploadDir','');

config.lib.options.init('txtUploadBackupDir','');

config.lib.options.init('txtUploadUserName',config.options.txtUserName);

config.lib.options.init('pasUploadPassword','');

setStylesheet(

".pasOptionInput {width: 11em;}\sn"+

".txtOptionInput.txtUploadStoreUrl {width: 25em;}\sn"+

".txtOptionInput.txtUploadFilename {width: 25em;}\sn"+

".txtOptionInput.txtUploadDir {width: 25em;}\sn"+

".txtOptionInput.txtUploadBackupDir {width: 25em;}\sn"+

"",

"UploadOptionsStyles");

config.shadowTiddlers.UploadDoc = "[[Full Documentation|http://tiddlywiki.bidix.info/l#UploadDoc ]]\sn";

config.options.chkAutoSave = false; saveOptionCookie('chkAutoSave');



//}}}

////===



////+++!![Core Hijacking]



//{{{

config.macros.saveChanges.label_orig_UploadPlugin = config.macros.saveChanges.label;

config.macros.saveChanges.label = config.macros.upload.label.saveToDisk;



config.macros.saveChanges.handler_orig_UploadPlugin = config.macros.saveChanges.handler;



config.macros.saveChanges.handler = function(place)

{

if ((!readOnly) && (document.location.toString().substr(0,4) != "http"))

createTiddlyButton(place,this.label,this.prompt,this.onClick,null,null,this.accessKey);

};



//}}}

////===



<!--{{{-->

<div class="title" macro="view title"><!--<div style="float:right" class="toolbar" macro="toolbar closeOthers closeTiddler"></div>--></div>

<div class='viewer' macro='view text wikified'></div>

<!--

<div class='viewer topbutton' macro='top'></div>

-->

<!--

<br><br>

<div class='viewer' macro='navigation tiddlers:{{store.getTiddlerText("PresentationIndex").readBracketedList()}}}'></div>

-->

<div class='tagClear'></div>

<!--}}}-->

This document is a ~TiddlyWiki from tiddlyspot.com. A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.



@@font-weight:bold;font-size:1.3em;color:#444; //What now?// @@ 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://monkeygtd.tiddlyspot.com/controlpanel]] (your control panel username is //monkeygtd//).

<<tiddler tiddlyspotControls>>

@@font-weight:bold;font-size:1.3em;color:#444; //Working online// @@ You can edit this ~TiddlyWiki right now, and save your changes using the "save to web" button in the column on the right.



@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// @@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick. You can make changes and save them locally without being connected to the Internet. When you're ready to sync up again, just click "upload" and your ~TiddlyWiki will be saved back to tiddlyspot.com.



@@font-weight:bold;font-size:1.3em;color:#444; //Help!// @@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki Guides|http://tiddlywikiguides.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help. If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].



@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// @@ We hope you like using your tiddlyspot.com site. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions.

!!About ~MonkeyGTD 3.0 alpha...

* I LOVE YOU. ~MonkeyGTD is the single best piece of ~GTDness I've ever encountered. Thank you sooo much for developing it! - [[David Baker|http://dbake.com]]

* ...once full help is in place... it may vault to being the most usable and useful GTD tool out there! - [[David Masterson|http://groups.google.com/group/GTD-TiddlyWiki/browse_thread/thread/4b73bf271269998b/e973a14a01137ed3]]

* I feel like a GTD ninja for the first time. Definitely the best tool I've found - and I've tried them all. - [[Sam|http://monkeygtd.blogspot.com/2008/04/for-better-or-for-worse.html#2132540364344235973]]

* OMG, DO WANT... - [[Alex Weber|http://monkeygtd.blogspot.com/2008/04/we-have-reference-items.html#6346016594472773690]]

* Thank you, thank you, thank you. - [[Mason|http://monkeygtd.blogspot.com/2008/04/almost-time.html#8544188744320787083]]

* Congratulations, I think you have finally nailed it... I spent some time playing around with this one and am finally satisfied, no, make that elated. - Dave Gifford



!!About ~MonkeyGTD 2.1 alpha...

* ~MonkeyGTD 2.1 alpha is incredible - Dixius99

* I spent half a day testing all the versions out there: Nozbe, Vitalist, Tracks, ~RememberTheMilk-with-GTD, only to end up with... [~MonkeyGTD] - [[Aldo|http://monkeygtd.blogspot.com/2007/03/faq-i-just-moved-over-to-21-where-are.html]]

* When will it be finished? - Everyone

* It's too slow - Me



!!About ~MonkeyGTD 1.0...

* "WOW! Now THIS is what I was looking for." - Mike De Bruyn

* "I just want to say that it's already 8000 times better than ~GTDTiddlyWiki. I love it." - Brent

* "probably the most amazing single html file I've ever run across" - S.W.B.

* "WOW. Wait, let me say it again.... W O W! Simon, you ROCK! ... Hm... sorry, got a little carried away there. Seriously, this is amazing. Can't wait until you've got it ready for 'prime time'!" - Bob Everson

* "...the flexibility and beauty of ~TiddlyWiki ... combined with the ruthless efficiency of Getting Things Done" - [[Digital Digressions|http://www.digitaldigressions.net/blog/2006/08/a_procrastinato.html]]

* It sucks - Me

Copyright [[Osmosoft|http://www.tiddlywiki.com]]

[img[logo|http://simonbaird.com/images/monkeygtd/mGSD.gif]]

[[mGSD]] is a [[Getting Things Done|http://en.wikipedia.org/wiki/Getting_Things_Done]]® system powered by [[TiddlyWiki|http://www.tiddlywiki.com/]] and [[MPTW|http://mptw.tiddlyspot.com/]].



!Buzz

Take a look at [[what people are saying|What people are saying]] about [[mGSD]].







^^GTD® and Getting Things Done® are registered trademarks of the [[David Allen Company|http://www.davidco.com/]]. mGSD is not affiliated with or endorsed by the David Allen Company. ^^

:

@@border:solid 1px black;display:block;padding:1em 2em 2em;background:#ffe;margin:1em;font-size:80%;

Copyright (c) 2007-2010, Simon Baird

All rights reserved.



Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:



* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

* Neither the name Simon Baird nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.



THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

@@

| tiddlyspot password:|<<option pasUploadPassword>>|

| site management:|<<upload http://monkeygtd.tiddlyspot.com/store.cgi index.html . . monkeygtd>>//(requires tiddlyspot password)//<<br>>[[control panel|http://monkeygtd.tiddlyspot.com/controlpanel]], [[download (go offline)|http://monkeygtd.tiddlyspot.com/download]]|

| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[announcements|http://announce.tiddlyspot.com/]], [[blog|http://tiddlyspot.com/blog/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|

config.options.chkSinglePageMode = true;

config.options.chkAnimate = true;