* clear accounting mistake\n* clear funds\n* clear non-profit in Thailand\n* write blog entry - announce role, consider dance innovation newsfeed (distinct from community updates)\n* review openings for action from UKEduFest\n* outline WebSiteDesigner requirements in parallel with A. Suwat\n* call Angsuman (checkin)\n* complete NextActions already defined\n** draft PitchPresentation\n* weekly review by friday\n* clear Morn and accountability\n
reminder of 2007: Apr-Dec (minimum US $7500)\n\n!pipeline\n* Responsible Fatherhood $25k due March 6, 2007 - http://www.fatherhood.org/grant/\n\n!depends on\n* FundDevelopmentProgramBinder\n* MasterProspectList\n\n!idea\n* these 2 months, create vision for AnnualBenefit and enroll team to secure budget to make it happen (9 months prep)
config.options.chkHttpReadOnly = false;\n
tentative date: Dec 22, 2007\n
use ProjectDevelopmentPlan
outcome: one page executive overview including vision and key deliverables\n* done with "the board"\n* http://www.dancelabs.com/program/chalat/#AnnualBenefit\n\n# GoalsAndObjectives\n* raise minimum $25k to support 2008\n* celebrate Dance Labs non-profit status (could be earlier)\n* share possibility (invite embassy representatives)\n* ack leaders, volunteers, and community\n* ...\n# ProjectPlan - 9 months\n# resource: EventProducer
2 budgets:\n- one bare bones 1,000,000 budget (survival)\n- expanded budget by a seasoned ExecutiveDirector (on the order of US $1-2 million)\n
* Steve & ...
* accommodations\n* length of workshop\n* prefer indoors/outdoors\n* what to do with yoga mats\n* max # of people?\n
this package is given to volunteers & staff who commit to assist\n# AcknowledgementLetter\n# VideoIntroduction (DVD)\n# TeamTrainingSlides\n# MasterCommunityEventSchedule\n# DeclaredOutcomes\n# Brochure\n# OrganizatinalOverview (like BMC)\n# TeamRoster\n
Enter task details
note: will review email with Morn
# date for mosquito spraying\n# internet 400/month\n
K. Amarit 081 918-1759\n\n20070220: 1 Mbit each building (max 24 connections)
submissions due by April 15, 2007\n
clear agenda of what's a happenin from Mar 5 onwards...\n\nhttp://dancelabs.wikispaces.com/Dancing+Sois
Type Tiddler Contents Here.
completed presentation based on HPCompaq biz dev process slides\n\n* need someone to assist with Thailand business environment assessment
/***\n|''Name:''|CalendarPlugin|\n|''Source:''|http://www.TiddlyTools.com/#CalendarPlugin|\n|''Author:''|SteveRumsby|\n|''License:''|unknown|\n|''~CoreVersion:''|2.0.10|\n\n// // updated by Jeremy Sheeley to add cacheing for reminders\n// // see http://www.geocities.com/allredfaq/reminderMacros.html\n// // ''Changes by ELS 2006.08.23:''\n// // added handling for weeknumbers (code supplied by Martin Budden. see "wn**" comment marks)\n// // ''Changes by ELS 2005.10.30:''\n// // config.macros.calendar.handler()\n// // ^^use "tbody" element for IE compatibility^^\n// // ^^IE returns 2005 for current year, FF returns 105... fix year adjustment accordingly^^\n// // createCalendarDays()\n// // ^^use showDate() function (if defined) to render autostyled date with linked popup^^\n// // calendar stylesheet definition\n// // ^^use .calendar class-specific selectors, add text centering and margin settings^^\n\n\n!!!!!Configuration:\n<<option chkDisplayWeekNumbers>> Display week numbers //(note: Monday will be used as the start of the week)//\n|''First day of week:''|<<option txtCalFirstDay>>|(Monday = 0, Sunday = 6)|\n|''First day of weekend:''|<<option txtCalStartOfWeekend>>|(Monday = 0, Sunday = 6)|\n\n!!!!!Syntax:\n|{{{<<calendar>>}}}|Produce a full-year calendar for the current year|\n|{{{<<calendar year>>}}}|Produce a full-year calendar for the given year|\n|{{{<<calendar year month>>}}}|Produce a one-month calendar for the given month and year|\n|{{{<<calendar thismonth>>}}}|Produce a one-month calendar for the current month|\n|{{{<<calendar lastmonth>>}}}|Produce a one-month calendar for last month|\n|{{{<<calendar nextmonth>>}}}|Produce a one-month calendar for next month|\n\n***/\n// //Modify this section to change the text displayed for the month and day names, to a different language for example. You can also change the format of the tiddler names linked to from each date, and the colours used.\n\n//{{{\nconfig.macros.calendar = {};\n\nconfig.macros.calendar.monthnames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];\nconfig.macros.calendar.daynames = ["M", "T", "W", "T", "F", "S", "S"];\n\nconfig.macros.calendar.weekendbg = "#c0c0c0";\nconfig.macros.calendar.monthbg = "#e0e0e0";\nconfig.macros.calendar.holidaybg = "#ffc0c0";\n\n//}}}\n// //''Code section:''\n// (you should not need to alter anything below here)//\n//{{{\nif(config.options.txtCalFirstDay == undefined)\n config.options.txtCalFirstDay = 0;\nif(config.options.txtCalStartOfWeekend == undefined)\n config.options.txtCalStartOfWeekend = 5;\nif(config.options.chkDisplayWeekNumbers == undefined)//wn**\n config.options.chkDisplayWeekNumbers = false;\nif(config.options.chkDisplayWeekNumbers)\n config.options.txtCalFirstDay = 0;\n\nconfig.macros.calendar.tiddlerformat = "0DD/0MM/YYYY"; // This used to be changeable - for now, it isn't// <<smiley :-(>> \n\nversion.extensions.calendar = { major: 0, minor: 6, revision: 0, date: new Date(2006, 1, 22)};\nconfig.macros.calendar.monthdays = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nconfig.macros.calendar.holidays = [ ]; // Not sure this is required anymore - use reminders instead\n//}}}\n\n// //Is the given date a holiday?\n//{{{\nfunction calendarIsHoliday(date)\n{\n var longHoliday = date.formatString("0DD/0MM/YYYY");\n var shortHoliday = date.formatString("0DD/0MM");\n\n for(var i = 0; i < config.macros.calendar.holidays.length; i++) {\n if(config.macros.calendar.holidays[i] == longHoliday || config.macros.calendar.holidays[i] == shortHoliday) {\n return true;\n }\n }\n return false;\n}\n//}}}\n\n// //The main entry point - the macro handler.\n// //Decide what sort of calendar we are creating (month or year, and which month or year)\n// // Create the main calendar container and pass that to sub-ordinate functions to create the structure.\n// ELS 2005.10.30: added creation and use of "tbody" for IE compatibility and fixup for year >1900//\n// ELS 2005.10.30: fix year calculation for IE's getYear() function (which returns '2005' instead of '105')//\n// ELS 2006.05.29: add journalDateFmt handling//\n//{{{\nconfig.macros.calendar.handler = function(place,macroName,params)\n{\n var calendar = createTiddlyElement(place, "table", null, "calendar", null);\n var tbody = createTiddlyElement(calendar, "tbody", null, null, null);\n var today = new Date();\n var year = today.getYear();\n if (year<1900) year+=1900;\n \n // get format for journal link by reading from SideBarOptions (ELS 5/29/06 - based on suggestion by Martin Budden)\n var text = store.getTiddlerText("SideBarOptions");\n this.journalDateFmt = "DD-MMM-YYYY";\n var re = new RegExp("<<(?:newJournal)([^>]*)>>","mg"); var fm = re.exec(text);\n if (fm && fm[1]!=null) { var pa=fm[1].readMacroParams(); if (pa[0]) this.journalDateFmt = pa[0]; }\n\n if (params[0] == "thismonth")\n {\n cacheReminders(new Date(year, today.getMonth(), 1, 0, 0), 31);\n createCalendarOneMonth(tbody, year, today.getMonth());\n } \n else if (params[0] == "lastmonth") {\n var month = today.getMonth()-1; if (month==-1) { month=11; year--; }\n cacheReminders(new Date(year, month, 1, 0, 0), 31);\n createCalendarOneMonth(tbody, year, month);\n }\n else if (params[0] == "nextmonth") {\n var month = today.getMonth()+1; if (month>11) { month=0; year++; }\n cacheReminders(new Date(year, month, 1, 0, 0), 31);\n createCalendarOneMonth(tbody, year, month);\n }\n else {\n if (params[0]) year = params[0];\n if(params[1])\n {\n cacheReminders(new Date(year, params[1]-1, 1, 0, 0), 31);\n createCalendarOneMonth(tbody, year, params[1]-1);\n }\n else\n {\n cacheReminders(new Date(year, 0, 1, 0, 0), 366);\n createCalendarYear(tbody, year);\n }\n }\n window.reminderCacheForCalendar = null;\n}\n//}}}\n//{{{\n//This global variable is used to store reminders that have been cached\n//while the calendar is being rendered. It will be renulled after the calendar is fully rendered.\nwindow.reminderCacheForCalendar = null;\n//}}}\n//{{{\nfunction cacheReminders(date, leadtime)\n{\n if (window.findTiddlersWithReminders == null)\n return;\n window.reminderCacheForCalendar = {};\n var leadtimeHash = [];\n leadtimeHash [0] = 0;\n leadtimeHash [1] = leadtime;\n var t = findTiddlersWithReminders(date, leadtimeHash, null, 1);\n for(var i = 0; i < t.length; i++) {\n //just tag it in the cache, so that when we're drawing days, we can bold this one.\n window.reminderCacheForCalendar[t[i]["matchedDate"]] = "reminder:" + t[i]["params"]["title"]; \n }\n}\n//}}}\n//{{{\nfunction createCalendarOneMonth(calendar, year, mon)\n{\n var row = createTiddlyElement(calendar, "tr", null, null, null);\n createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, true, year, mon);\n row = createTiddlyElement(calendar, "tr", null, null, null);\n createCalendarDayHeader(row, 1);\n createCalendarDayRowsSingle(calendar, year, mon);\n}\n//}}}\n\n//{{{\nfunction createCalendarMonth(calendar, year, mon)\n{\n var row = createTiddlyElement(calendar, "tr", null, null, null);\n createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, false, year, mon);\n row = createTiddlyElement(calendar, "tr", null, null, null);\n createCalendarDayHeader(row, 1);\n createCalendarDayRowsSingle(calendar, year, mon);\n}\n//}}}\n\n//{{{\nfunction createCalendarYear(calendar, year)\n{\n var row;\n row = createTiddlyElement(calendar, "tr", null, null, null);\n var back = createTiddlyElement(row, "td", null, null, null);\n var backHandler = function() {\n removeChildren(calendar);\n createCalendarYear(calendar, year-1);\n };\n createTiddlyButton(back, "<", "Previous year", backHandler);\n back.align = "center";\n\n var yearHeader = createTiddlyElement(row, "td", null, "calendarYear", year);\n yearHeader.align = "center";\n //yearHeader.setAttribute("colSpan", 19);\n yearHeader.setAttribute("colSpan",config.options.chkDisplayWeekNumbers?22:19);//wn**\n\n var fwd = createTiddlyElement(row, "td", null, null, null);\n var fwdHandler = function() {\n removeChildren(calendar);\n createCalendarYear(calendar, year+1);\n };\n createTiddlyButton(fwd, ">", "Next year", fwdHandler);\n fwd.align = "center";\n\n createCalendarMonthRow(calendar, year, 0);\n createCalendarMonthRow(calendar, year, 3);\n createCalendarMonthRow(calendar, year, 6);\n createCalendarMonthRow(calendar, year, 9);\n}\n//}}}\n\n//{{{\nfunction createCalendarMonthRow(cal, year, mon)\n{\n var row = createTiddlyElement(cal, "tr", null, null, null);\n createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon], false, year, mon);\n createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+1], false, year, mon);\n createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+2], false, year, mon);\n row = createTiddlyElement(cal, "tr", null, null, null);\n createCalendarDayHeader(row, 3);\n createCalendarDayRows(cal, year, mon);\n}\n//}}}\n\n//{{{\nfunction createCalendarMonthHeader(cal, row, name, nav, year, mon)\n{\n var month;\n if(nav) {\n var back = createTiddlyElement(row, "td", null, null, null);\n back.align = "center";\n back.style.background = config.macros.calendar.monthbg;\n\n/*\n back.setAttribute("colSpan", 2);\n\n var backYearHandler = function() {\n var newyear = year-1;\n removeChildren(cal);\n cacheReminders(new Date(newyear, mon , 1, 0, 0), 31);\n createCalendarOneMonth(cal, newyear, mon);\n };\n createTiddlyButton(back, "<<", "Previous year", backYearHandler);\n*/\n var backMonHandler = function() {\n var newyear = year;\n var newmon = mon-1;\n if(newmon == -1) { newmon = 11; newyear = newyear-1;}\n removeChildren(cal);\n cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);\n createCalendarOneMonth(cal, newyear, newmon);\n };\n createTiddlyButton(back, "<", "Previous month", backMonHandler);\n\n\n month = createTiddlyElement(row, "td", null, "calendarMonthname", name)\n// month.setAttribute("colSpan", 3);\n// month.setAttribute("colSpan", 5);\n month.setAttribute("colSpan", config.options.chkDisplayWeekNumbers?6:5);//wn**\n\n var fwd = createTiddlyElement(row, "td", null, null, null);\n fwd.align = "center";\n fwd.style.background = config.macros.calendar.monthbg; \n\n// fwd.setAttribute("colSpan", 2);\n var fwdMonHandler = function() {\n var newyear = year;\n var newmon = mon+1;\n if(newmon == 12) { newmon = 0; newyear = newyear+1;}\n removeChildren(cal);\n cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);\n createCalendarOneMonth(cal, newyear, newmon);\n };\n createTiddlyButton(fwd, ">", "Next month", fwdMonHandler);\n/*\n var fwdYear = createTiddlyElement(row, "td", null, null, null);\n var fwdYearHandler = function() {\n var newyear = year+1;\n removeChildren(cal);\n cacheReminders(new Date(newyear, mon , 1, 0, 0), 31);\n createCalendarOneMonth(cal, newyear, mon);\n };\n createTiddlyButton(fwd, ">>", "Next year", fwdYearHandler);\n*/\n } else {\n month = createTiddlyElement(row, "td", null, "calendarMonthname", name)\n //month.setAttribute("colSpan", 7);\n month.setAttribute("colSpan",config.options.chkDisplayWeekNumbers?8:7);//wn**\n }\n month.align = "center";\n month.style.background = config.macros.calendar.monthbg;\n}\n//}}}\n\n//{{{\nfunction createCalendarDayHeader(row, num)\n{\n var cell;\n for(var i = 0; i < num; i++) {\n if (config.options.chkDisplayWeekNumbers) createTiddlyElement(row, "td");//wn**\n for(var j = 0; j < 7; j++) {\n var d = j + (config.options.txtCalFirstDay - 0);\n if(d > 6) d = d - 7;\n cell = createTiddlyElement(row, "td", null, null, config.macros.calendar.daynames[d]);\n if(d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))\n cell.style.background = config.macros.calendar.weekendbg;\n }\n }\n}\n//}}}\n\n//{{{\nfunction createCalendarDays(row, col, first, max, year, mon)\n{\n var i;\n if (config.options.chkDisplayWeekNumbers){\n if (first<=max) {\n var ww = new Date(year,mon,first);\n createTiddlyElement(row, "td", null, null, "w"+ww.getWeek());//wn**\n }\n else createTiddlyElement(row, "td", null, null, null);//wn**\n }\n for(i = 0; i < col; i++) {\n createTiddlyElement(row, "td", null, null, null);\n }\n var day = first;\n for(i = col; i < 7; i++) {\n var d = i + (config.options.txtCalFirstDay - 0);\n if(d > 6) d = d - 7;\n var daycell = createTiddlyElement(row, "td", null, null, null);\n var isaWeekend = ((d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))? true:false);\n\n if(day > 0 && day <= max) {\n var celldate = new Date(year, mon, day);\n // ELS 2005.10.30: use <<date>> macro's showDate() function to create popup\n if (window.showDate) {\n showDate(daycell,celldate,"popup","DD",config.macros.calendar.journalDateFmt,true, isaWeekend); // ELS 5/29/06 - use journalDateFmt \n } else {\n if(isaWeekend) daycell.style.background = config.macros.calendar.weekendbg;\n var title = celldate.formatString(config.macros.calendar.tiddlerformat);\n if(calendarIsHoliday(celldate)) {\n daycell.style.background = config.macros.calendar.holidaybg;\n }\n if(window.findTiddlersWithReminders == null) {\n var link = createTiddlyLink(daycell, title, false);\n link.appendChild(document.createTextNode(day));\n } else {\n var button = createTiddlyButton(daycell, day, title, onClickCalendarDate);\n }\n }\n }\n day++;\n }\n}\n//}}}\n\n// //We've clicked on a day in a calendar - create a suitable pop-up of options.\n// //The pop-up should contain:\n// // * a link to create a new entry for that date\n// // * a link to create a new reminder for that date\n// // * an <hr>\n// // * the list of reminders for that date\n//{{{\nfunction onClickCalendarDate(e)\n{\n var button = this;\n var date = button.getAttribute("title");\n var dat = new Date(date.substr(6,4), date.substr(3,2)-1, date.substr(0, 2));\n\n date = dat.formatString(config.macros.calendar.tiddlerformat);\n var popup = createTiddlerPopup(this);\n popup.appendChild(document.createTextNode(date));\n var newReminder = function() {\n var t = store.getTiddlers(date);\n displayTiddler(null, date, 2, null, null, false, false);\n if(t) {\n document.getElementById("editorBody" + date).value += "\sn<<reminder day:" + dat.getDate() +\n " month:" + (dat.getMonth()+1) +\n " year:" + (dat.getYear()+1900) + " title: >>";\n } else {\n document.getElementById("editorBody" + date).value = "<<reminder day:" + dat.getDate() +\n " month:" + (dat.getMonth()+1) +\n " year:" + (dat.getYear()+1900) + " title: >>";\n }\n };\n var link = createTiddlyButton(popup, "New reminder", null, newReminder); \n popup.appendChild(document.createElement("hr"));\n\n var t = findTiddlersWithReminders(dat, [0,14], null, 1);\n for(var i = 0; i < t.length; i++) {\n link = createTiddlyLink(popup, t[i].tiddler, false);\n link.appendChild(document.createTextNode(t[i].tiddler));\n }\n}\n//}}}\n\n//{{{\nfunction calendarMaxDays(year, mon)\n{\n var max = config.macros.calendar.monthdays[mon];\n if(mon == 1 && (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0)) {\n max++;\n }\n return max;\n}\n//}}}\n\n//{{{\nfunction createCalendarDayRows(cal, year, mon)\n{\n var row = createTiddlyElement(cal, "tr", null, null, null);\n\n var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);\n if(first1 < 0) first1 = first1 + 7;\n var day1 = -first1 + 1;\n var first2 = (new Date(year, mon+1, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);\n if(first2 < 0) first2 = first2 + 7;\n var day2 = -first2 + 1;\n var first3 = (new Date(year, mon+2, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);\n if(first3 < 0) first3 = first3 + 7;\n var day3 = -first3 + 1;\n\n var max1 = calendarMaxDays(year, mon);\n var max2 = calendarMaxDays(year, mon+1);\n var max3 = calendarMaxDays(year, mon+2);\n\n while(day1 <= max1 || day2 <= max2 || day3 <= max3) {\n row = createTiddlyElement(cal, "tr", null, null, null);\n createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;\n createCalendarDays(row, 0, day2, max2, year, mon+1); day2 += 7;\n createCalendarDays(row, 0, day3, max3, year, mon+2); day3 += 7;\n }\n}\n//}}}\n\n//{{{\nfunction createCalendarDayRowsSingle(cal, year, mon)\n{\n var row = createTiddlyElement(cal, "tr", null, null, null);\n\n var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);\n if(first1 < 0) first1 = first1+ 7;\n var day1 = -first1 + 1;\n var max1 = calendarMaxDays(year, mon);\n\n while(day1 <= max1) {\n row = createTiddlyElement(cal, "tr", null, null, null);\n createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;\n }\n}\n//}}}\n\n// //ELS 2005.10.30: added styles\n//{{{\nsetStylesheet(".calendar, .calendar table, .calendar th, .calendar tr, .calendar td { text-align:center; } .calendar, .calendar a { margin:0px !important; padding:0px !important; }", "calendarStyles");\n//}}}\n\n
M-F 8:15-5:15pm (recommend: before 10am)
* process to maintain CommunityCalendar\n* TeamMeeting announcement\n* process for writing StakeholderUpdate(s) with FinancialReport\n* process for new opportunities, leads, contacts\n* process for creating an introduction (sharing, recruiting)\n* process for producing an event\n* process for post-production (ie. VideoIntroduction)\n* process for creating and funding new projects\n* process for new volunteers (training, records, etc)\n* process for servicing contracts\n* process for creating new partnerships\n* process for waking peeps up in 30 min-2 hrs
* TentativeDate: March 13th-19th (chill on 12th)\n* leave on 6am train\n\n!peeps\n* Michel\n* Uwe\n* Christina\n* Hady's family\n* >Pat\n* Paola\n* Chris\n* >ThaiWorldviewFoundation\n
* Nov/Dec 2005 statement
/***\n| Name:|CloseOnCancelPlugin|\n| Description:|Closes the tiddler if you click new tiddler then cancel. Default behaviour is to leave it open|\n| Version:|$$version$$|\n| Date:|$$date$$|\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
Name: Blue\nBackground: #fff\nForeground: #000\nPrimaryPale: #cdf\nPrimaryLight: #57c\nPrimaryMid: #114\nPrimaryDark: #012\nSecondaryPale: #ffc\nSecondaryLight: #fe8\nSecondaryMid: #db4\nSecondaryDark: #841\nTertiaryPale: #eee\nTertiaryLight: #ccc\nTertiaryMid: #999\nTertiaryDark: #666\nError: #f88\n\n
# Development\n# Fundraising\n# Program\n# Community\n
# Maintain regular communication with the Board, AdvisoryBoard, and <Members>.\n# Develop and maintain the member and announcement databases and produce regular, periodic communications.\n# Develop and maintain the Foundation's WebSite.\n# Develop and produce printed communication and [[fundraising collateral|FundDevelopmentProgramBinder]].\n# Plan and execute effective press and public relations communications.\n# Initiate and maintain communication with relevant [[government agencies and representatives|GovernmentRepresentative]].\n
# Work with the Dance Labs organization in order to maximize the Foundations' presence at Dance Labs events throughout the year.\n** assumption (to resolve): Dance Labs is a separate research entity/organization\n** Distinguish what DanceLabs gifts the community versus where we are paid service\n# Work with the Dance Labs community, including the regional network, to engage participants in programming, CommunityProject development, and fundraising.\n** work with CommunityLeader (non-organizational)
evolve ProfessionalServices presentation\nbe clear about services and value provided during 3 months (stab in the air: 200k)
!tentative\n# Master prospect list\n# Invitation letter to assist\n# CommunityServicePresentation (TH/EN)\n** Vision\n** Goals & Objectives\n# BrochureHandout\n# FeeSchedule (organization (ie. NGO), government, private)\n# templates\n** Service Proposal\n** Implementation Plan\n** contract\n*** Service Level Agreement\n# TrainingModules\n** program overview\n** community building\n** DanceCatalysis\n** activity design\n** production\n** program renewal\n** online collaboration\n** support\n# Pilot prototype design\n** evaluation & measures
Q (for consultant): how does one keep personal vs "business" communication separate?
\n|MonkeyGTDSettings|Change settings|\n|<<selectPalette>>|Change colour scheme|\n|Version|<<tiddler MonkeyGTDVersion>>|\n|[[Upgrade]]|Upgrade to the latest MonkeyGTD|\n|[[Area]]|To add/remove Areas of Responsibilty|\n|[[Realm]]|To add/remove Realms|\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 \n//}}}\n
* clear current usage w/o promo\n* sign up for promo
goes from 1 baht per call (12am-5pm) to 3 baht first minute 25 satang thereafter
* BusinessPlan
March 4th 5-7pm\nintention to breakeven\nconsider VolunteerInformationForm\n\n# partners [1]\n# volunteers leaders [20]\n** events - share AnnualBenefit vision\n** outcomes\n# share activities [50]\n# participants (10th) [50]\n
aka. members database which includes participants, volunteers, donors, staff, partners, etc.\nconsider salesforce.com (bi-lingual in Thai)\ntoss excel, TiddlyWiki will do short-term!\n\n!produces\n* MasterProspectList\n\n(notice WaitingFor action still shows up on [[Dashboard]] even when Someday/Maybe project)
/***\nVersion: $$version$$\nCreates a bunch of shadow tiddlers for the dashboards and panels \n***/\n\n//{{{\nmerge(config.shadowTiddlers,{\n\n'ActionPanel':[\n "<tr><td class=\s"label\s">Type:</td><td><span macro=\s"toggleTag Action\s"></span></td></tr>",\n "<tr><td class=\s"label\s">Realm:</td><td><span macro=\s"checkboxList Realm\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\n'ActionTiddlerDash':[\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 Realm'",\n " group:Realm",\n " tags:!Done",\n " \s"></div>",\n "",\n "",\n "",\n "</td></tr></table>",\n ""\n].join("\sn"),\n\n'AreaDash':[\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\n'AreaPanel':[\n "<tr><td class=\s"label\s">Type:</td><td><span macro=\s"toggleTag Area\s"></span></td></tr>",\n "<tr><td class=\s"label\s">Realm:</td><td><span macro=\s"checkboxList Realm\s"></span></td></tr>",\n "",\n "<tr><td class=\s"label\s"></td><td>",\n " <span macro=\s"newHere title:'New Project' label:'new project' tag: Project GTD\s"></span>",\n " <span macro=\s"newHere title:'New Action' label:'new next action' tag: Action GTD Next\s"></span>",\n " <span macro=\s"newHere title:'New Action' label:'new waiting action' tag: Action GTD 'Waiting For'\s"></span>",\n " <span macro=\s"newHere title:'New Action' label:'new future action' tag: Action GTD\s"></span>",\n "</td></tr>",\n ""\n].join("\sn"),\n\n'AreaTiddlerDash':[\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 Realm'",\n " group:Realm",\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\n'ContextDash':[\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:Realm",\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:Realm",\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:Realm",\n " \s"></div>",\n "</td>",\n "</tr>",\n "</table>",\n ""\n].join("\sn"),\n\n'ContextTiddlerDash':[\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\n'MainDashDash':[\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:'Next Actions'",\n " tags:'Action && Next && !Done'",\n " view:action_proj",\n " group:Context",\n " mode:global",\n " \s"></div>",\n "",\n "</td><td valign=\s"top\s">",\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 "",\n " <div macro=\s"listByTag title:'Waiting For'",\n " tags:'Action && [(Waiting For)] && !Done'",\n " view:action_proj",\n " group:Context",\n " mode:global",\n " \s"></div>",\n "",\n "",\n "</td>",\n "</tr>",\n "</table>",\n ""\n].join("\sn"),\n\n'MainDashPanel':[\n "<tr><td class=\s"label\s">Type:</td><td><span macro=\s"toggleTag MainDash\s"></span></td></tr>",\n "<tr><td class=\s"label\s"></td><td>",\n " <span macro=\s"newTiddler label:'new project' tag: Project GTD\s"></span>",\n " <span macro=\s"newTiddler label:'new next action' tag: Action Next GTD\s"></span>",\n " <span macro=\s"newTiddler label:'new waiting action' tag: Action GTD 'Waiting For'\s"></span>",\n " <span macro=\s"newTiddler label:'new future action' tag: Action GTD\s"></span>",\n " <span macro=\s"newTiddler title:'New Tickler' label:'new tickler' tag: Tickler GTD\s"></span>",\n " <span macro=\s"newTiddler label:'new context' tag: Context GTD\s"></span>",\n " <span macro=\s"newTiddler label:'new area' tag: Area GTD\s"></span>",\n "</td></tr>",\n ""\n].join("\sn"),\n\n'NextTiddlerDash':[\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 Realm'",\n " tags:!Done",\n " view:action_proj",\n " group:Realm",\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\n'ProcessInboxTiddlerDash':[\n "",\n "",\n "<div macro=\s"processInbox\s"></div>",\n ""\n].join("\sn"),\n\n'ProjectDash':[\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 " view:tickler",\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\n'ProjectPanel':[\n "<tr><td class=\s"label\s">Type:</td><td><span macro=\s"toggleTag Project\s"></span></td></tr>",\n "<tr><td class=\s"label\s">Realm:</td><td><span macro=\s"checkboxList Realm\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"deleteAllTagged 'remove project' delete\s"></span>",\n "</td></tr>",\n "<tr><td class=\s"label\s"></td><td>",\n " <span macro=\s"newHere title:'New Action' label:'new next action' tag: Action Next GTD\s"></span>",\n " <span macro=\s"newHere title:'New Action' label:'new waiting action' tag: Action GTD 'Waiting For'\s"></span>",\n " <span macro=\s"newHere title:'New Action' label:'new future action' tag: Action GTD\s"></span>",\n " <span macro=\s"newHere label:'new sub-project' tag: Project GTD\s"></span>",\n " <span macro=\s"newHere title:'New Tickler' label:'new tickler' tag: Tickler GTD\s"></span>",\n " <span macro=\s"newTiddler label:'new context' tag: Context GTD\s"></span>",\n " <span macro=\s"newTiddler label:'new area' tag: Area GTD\s"></span>",\n "</td></tr>",\n ""\n].join("\sn"),\n\n'ProjectTiddlerDash':[\n "<!-- ******************************* -->",\n "<!-- contributed by Michael Lockhart -->",\n "<!-- ******************************* -->",\n "",\n "<!--",\n "~MJL20070205 - Customized Project Tiddler.",\n "This overrides the ProjectTiddlerDash shadow tiddler from MonkeyGTD 2.1 alpha r77 with a new dashboard focussing on",\n "the GTD weekly review task. I have added these features:",\n "",\n " * An ability to see Completed projects and to remove old tasks via the DeleteDoneTasks macro",\n " * Separate out the Someday/Maybe projects to help with assessing if any can be activated",\n " * GTD Weekly Review instructions",\n " * Inspiration for new ideas during review",\n " * A link to a Review How To tiddler that guides me through the GTD process",\n "",\n "-->",\n "",\n "<div style=\s"margin-top:1em;\s" macro=\s"tiddler ReviewTips\s"></div>",\n "",\n "<table width=\s"100%\s"><tr>",\n "",\n "<td style=\s"vertical-align:top\s" width=\s"50%\s">",\n "",\n "<div macro=\s"listByTag title:'Projects by Area'",\n " tags:'!Complete && !Someday/Maybe'",\n " group:Area",\n " view:showstar",\n " \s"></div>",\n "",\n "<div macro=\s"listByTag title:'Someday/Maybe Projects'",\n " mode:global",\n " tags:'Someday/Maybe && !Complete'",\n " view:showstar",\n " group:Area",\n " \s"></div>",\n "",\n "<div macro=\s"listByTag title:'Completed Projects'",\n " mode:global",\n " tags:'Complete'",\n " view:showstar",\n " group:Area",\n " \s"></div>",\n "",\n "<div macro=\s"deleteDone daysOld:20 title:'Delete Old Actions' \s"></div>",\n "",\n "</td>",\n "",\n "<td valign=\s"top\s" width=\s"50%\s">",\n "<div macro=\s"listByTag title:'Actions by Project'",\n " mode:global",\n " tags:'Action && Next && !Done && !Someday/Maybe'",\n " view:action",\n " group:Project",\n " \s"></div>",\n "",\n "</td>",\n "",\n "</tr></table>",\n "",\n "",\n "",\n "",\n "",\n "<!-- old version -->",\n "<!-- ",\n "",\n "<table width=\s"100%\s"><tr>",\n "<td style=\s"vertical-align:top\s" width=\s"50%\s">",\n "",\n "<div macro=\s"listByTag title:'Projects by Area'",\n " tags:!Complete",\n " group:Area",\n " view:showstar",\n " \s"></div>",\n "",\n "</td>",\n "",\n "<td valign=\s"top\s" width=\s"50%\s">",\n "<div macro=\s"listByTag title:'Actions by Project'",\n " mode:global",\n " tags:'Action && Next && !Done'",\n " view:action",\n " group:Project",\n " \s"></div>",\n "</td>",\n "",\n "</tr></table>",\n "",\n "",\n "-->",\n ""\n].join("\sn"),\n\n'RealmDash':[\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 " ignoreRealm:yes",\n " \s"></div>",\n "",\n "<div macro=\s"listByTag title:'Waiting For'",\n " tags:'[(Waiting For)] && Action && !Done'",\n " view:action_proj",\n " ignoreRealm:yes",\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 " ignoreRealm:yes",\n " \s"></div>",\n "",\n "<div macro=\s"listByTag title:'Someday/Maybe'",\n " tags:'Project && !Complete && [(Someday/Maybe)]'",\n " group:Area",\n " ignoreRealm:yes",\n " \s"></div>",\n "",\n "",\n "<div macro=\s"listByTag title:Areas",\n " tags:Area",\n " ignoreRealm:yes",\n " \s"></div>",\n "",\n "</td></tr></table>",\n ""\n].join("\sn"),\n\n'RealmPanel':[\n "<tr><td class=\s"label\s">Type:</td><td><span macro=\s"toggleTag Realm\s"></span></td></tr>",\n "",\n "<tr><td class=\s"label\s"></td><td>",\n " <span macro=\s"newHere label:'new area' tag: Area GTD\s"></span>",\n " <span macro=\s"newHere label:'new project' tag: Project GTD\s"></span>",\n "</td></tr>",\n ""\n].join("\sn"),\n\n'RealmTiddlerDash':[\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:'Realms'",\n " ignoreRealm:yes",\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 Realm'",\n " tags:Area",\n " group:Realm",\n " mode:global",\n " ignoreRealm:yes",\n " \s"></div>",\n "",\n "",\n "",\n "</td>",\n "",\n "</tr></table>",\n ""\n].join("\sn"),\n\n'StarredTiddlerDash':[\n "",\n "<table width=\s"100%\s"><tr>",\n "<td style=\s"vertical-align:top\s" width=\s"50%\s">",\n "",\n " <div macro=\s"listByTag title:'Starred Next Actions'",\n " tags:'Action && Next && Starred && !Done'",\n " group:Context",\n " view:action",\n " \s"></div>",\n "",\n " <div macro=\s"listByTag title:'Starred Waiting For Actions'",\n " tags:'Action && [(Waiting For)] && Starred && !Done'",\n " group:Context",\n " view:action",\n " \s"></div>",\n "",\n "",\n "</td>",\n "",\n "<td valign=\s"top\s" width=\s"50%\s">",\n " <div macro=\s"listByTag title:'Starred'",\n " tags:'Starred && !Complete && !Done && !Action'",\n " group:GTDComponent",\n " view:showstar",\n " \s"></div>",\n "</td>",\n "",\n "</tr></table>",\n "",\n "",\n ""\n].join("\sn"),\n\n'TicklerPanel':[\n "<tr><td class=\s"label\s">Type:</td><td><span macro=\s"toggleTag Tickler\s"></span></td></tr>",\n "<tr><td class=\s"label\s">Realm:</td><td><span macro=\s"checkboxList Realm\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 " <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 "</td></tr>",\n ""\n].join("\sn"),\n\n'TicklerTiddlerDash':[\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 "",\n "",\n "</td>",\n "<td width=\s"50%\s" style=\s"vertical-align:top\s">",\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 "<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\n});\n//}}}\n
/***\n|Name|DeleteAllTaggedPlugin|\n|Source|http://ido-xp.tiddlyspot.com/#DeleteAllTaggedPlugin|\n|Version|1.0|\n\nAn adaptation of DeleteDoneTasks (Simon Baird) by Ido Magal\nTo use this insert {{{<<deleteAllTagged>>}}} into the desired tiddler.\n\nExample usage:\n{{{<<deleteAllTagged>>}}}\n<<deleteAllTagged>>\n***/\n//{{{\n\nconfig.macros.deleteAllTagged = {\n handler: function ( place,macroName,params,wikifier,paramString,tiddler ) {\n var buttonTitle = params[0] ? params[0] : "Delete Tagged w/ '"+tiddler.title+"'"; // simon's tweak\n var alsoDeleteThisTiddler = params[1] ? params[1] : "";\n createTiddlyButton( place, buttonTitle, "Delete every tiddler tagged with '"+tiddler.title+"'", this.deleteAllTagged( tiddler.title, alsoDeleteThisTiddler == "delete" ));\n },\n\n deleteAllTagged: function(tag,deleteMe) {\n return function() {\n var collected = [];\n store.forEachTiddler( function ( title,tiddler ) {\n if ( tiddler.tags.contains( tag ))\n {\n collected.push( title );\n }\n });\n if ( collected.length == 0 )\n {\n alert( "No tiddlers found tagged with '"+tag+"'." );\n }\n else\n {\n if ( confirm( "These tiddlers are tagged with '"+tag+"'\sn'"\n + collected.join( "', '" ) + "'\sn\sn\sn"\n + "Are you sure you want to delete these?" ))\n {\n for ( var i=0;i<collected.length;i++ )\n {\n store.deleteTiddler( collected[i] );\n story.closeTiddler( collected[i], true );\n displayMessage( "Deleted '"+collected[i]+"'" );\n }\n }\n }\n if (deleteMe)\n {\n if ( confirm( "Also delete this tiddler ('"+tag+"')?" ) )\n {\n store.deleteTiddler( tag );\n story.closeTiddler( tag, true );\n displayMessage( "Deleted '"+tag+"'" );\n }\n }\n }\n }\n};\n\n//}}}\n\n\n/***\nExample usage:\n{{{<<deleteDone>>}}}\n<<deleteDone>>\n{{{<<deleteDone daysOld:20 title:'delete old'>>}}}\n<<deleteDone daysOld:30 title:'delete old'>>\n\nTODO merge these two\n\n***/\n//{{{\n\n\n\n\nconfig.macros.deleteDone = {\n handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n var namedParams = (paramString.parseParams('daysOld'))[0];\n var daysOld = namedParams['daysOld'] ? namedParams['daysOld'][0] : 30; // default\n var buttonTitle = namedParams['title'] ? namedParams['title'][0] : "Delete Done Actions";\n createTiddlyButton(place,buttonTitle,"Delete done actions older than "+daysOld+" days old",this.deleteDone(daysOld));\n },\n\n deleteDone: function(daysOld) {\n return function() {\n var collected = [];\n var compareDate = new Date();\n compareDate.setDate(compareDate.getDate() - daysOld);\n store.forEachTiddler(function (title,tiddler) {\n if (tiddler.tags.containsAll(["Action","Done"])\n && tiddler.modified < compareDate) {\n collected.push(title);\n }\n });\n if (collected.length == 0) {\n alert("No done actions found older than "+daysOld+" days");\n }\n else {\n if (confirm("Done actions older than "+daysOld+" days:\sn'"\n + collected.join("', '") + "'\sn\sn\sn"\n + "Are you sure you want to delete these actions?")) {\n for (var i=0;i<collected.length;i++) {\n store.removeTiddler(collected[i]);\n displayMessage("Deleted '"+collected[i]+"'");\n story.closeTiddler( collected[i], true );\n }\n }\n }\n }\n }\n};\n\n//}}}\n\n
a "project" as it is like going out of the country! (observation: "Task" if frequent enough not to have to engage in too much heavy duty planning...)\none could argue some of this items could be "attached" to their relevant projects (ie. NonProfitStatus)...\nthis is technically reoccuring - snipping off a few (if not all) items off this queue:\n!physical\n# DanceCentre - tue optimal if to be with children (15:30-16:30)\n# pickup DVD footage from Christmas party (VideoIntroduction)\n# Jim - face-to-face\n# Canon - dropoff camera and get repair quote\n# MK with grandpa (family)\n# BritishCouncil - Siam Square (location?, plan to meet Katie and/or Laila?)\n# price portable video player\n# Jatjujak (sat/sun) - fake plants to decorate house\n!possible phone\n# non-profit info - IndoSiam, Asok (other gov agencies?)\n# TCDC - ask about bilingual website (could ask on phone)\n
communicate fundraising strategy in a nutshell\ntransformation of sample letter written listing all artifacts in binder\napproved by someone outside myself\n
# see Dr. Chin tiddler\n# add Morn's contribution (15 min)\n
* generic use case: DraftPowerpoint\n** TeamTrainingSlides (technically a concurrent outcome/project - it's just me anyways :)
\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 <!-- TODO make a utility method for this sort of thing -->\n <td macro="showWhen store.getValue('MonkeyGTDSettings','mgtd.usemdy')=='true'" class="editLabel">Month</td>\n <td class="editLabel">Day</td>\n <td macro="hideWhen store.getValue('MonkeyGTDSettings','mgtd.usemdy')=='true'" class="editLabel">Month</td>\n <td class="editLabel">Year</td></tr>\n <tr>\n <td macro="showWhen store.getValue('MonkeyGTDSettings','mgtd.usemdy')=='true'" ><span class="shorterEdit" macro="edit mgtd.tmonth"></span></td>\n <td><span class="shorterEdit" macro="edit mgtd.tday"></span></td>\n <td macro="hideWhen store.getValue('MonkeyGTDSettings','mgtd.usemdy')=='true'" ><span class="shorterEdit" macro="edit mgtd.tmonth"></span></td>\n <td><span class="shorterEdit" macro="edit mgtd.tyear"></span></td>\n </tr>\n </table>\n\n</div>\n\n
# design\n** application\n** brochure\n# execution\n
!Possibility\nintegrity, partnership, peace, and being unstoppable\n\n!Summary\nThe Executive Director (ED) has primary responsibility for the day-to-day operations of this growing nonprofit organization and will work closely with the BoardOfDirectors (Board), AdvisoryBoard, staff, donors and potential donors, other non-profits, foundations, government officials, and other organizations as necessary. The ED will develop and implement a comprehensive StrategicPlan, with components including FundDevelopment, [[financial management|Financials]], [[program execution|Programs]], [[Communication]], [[staff and volunteer management|StaffVolunteers]], and [[community outreach and interaction|Community]]. The ED will have the exciting opportunity to harness the energy of the Dance Labs community and beyond to support and create transformative, participatory dance around the globe!\n\n!Accountabilities\n# [[Strategy]]\n# [[FundDevelopment]]\n# [[Financials]]\n# [[Programs]]\n# [[Communication]]\n# StaffVolunteers\n# [[Community]]\n\nSelect an accountability above to zoom in or just [[be in action|Dashboard]]!
recreate budget playing biggest game possible!\n\n* $50-70K salary managing US $1M budget (where would 40x money go?)\n
* watch with Ton!
funds allocated where in Feb 2007\n
# Draft an AnnualBudget.\n# Report financials on a monthly basis.\n# Ensure that all required government reporting, tax preparation, and paperwork is completed on schedule and current.
"create a 200 word “story” that outlines the basic plan for your charitable organization."
* Jim's colleague || paper itself from Ted
# Share responsibility with the Board for ensuring that the Foundation has the resources it needs to meet the organization's strategic objectives. (BoardOfDirectors)\n# Work with the Development and Fundraising Committees to ensure that plans are in place for the generation of resources to meet the approved annual Foundation budget. (DevelopmentCommittee FundraisingCommittee)\n# Develop a comprehensive FundraisingStrategy, including individual and institutional donor development, member acquisition and retention, and grant writing.\n# Work with appropriate committees to organize effective and engaging fundraising events.\n# Have a hands-on relationship with fundraising events, dance experiments and other Foundation activities.
(notice ordering is explicit here where it is not in the sub-projects section)\n* SponsorListening\n## InvitationLetter\n## VideoIntroduction\n## ExecutiveOverview\n## PitchPresentation\n## FundraisingStrategy\n* TeamBuilding\n## TeamTrainingSlides (shared)\n## SustainabilityPlanning\n## AnnualBenefit overview\n*** ProjectPlan\n## StewardshipAgreement\n* OrganizationalDevelopment\n## BusinessDevelopmentSlides\n## BusinessPlan\n## CommunityServicePresentation (shared)\n## SponsorshipProposal\n*** AnnualBudget\n* GeneralListening\n## OrganizationalOverview\n## BrochureHandout\n## CommunityUpdate\n* ResearchListening (R&D)\n## ProgramDashboard\n* TechListening\n## MasterProspectList\n*** DancersDatabase - constituency database\n\n!ideas\n* versioned online baseline at all times - use SVN (devjavu) (check in 1.0 artifacts)\n\n!peeps\n* Charlie\n* Kane\n* Natalie\n
These tiddlers are important so don't delete them.
# MonkeyGTD (this)\n# GoogleMail (labels experiment)\n# 2 ring Thai binder (contains CMMI, CPC inspired material)\n# Mind Like Water manila folder (history)\n# Outlook (first year in Thailand)\n# Yahoo (double check for actions)\n# 3 ring US binder\n
@@color:#aaa;font-size:90%;[[By Matt Vance|http://www.minezone.org/wiki/MVance/GettingThingsDone]]@@\n!!Notes from [[Getting Things Done|http://www.amazon.com/exec/obidos/ASIN/0142000280/minezoneorg-20/ref%3Dnosim/103-9510267-6974266]] by David Allen\n# capture all the things that need to get done into a logical and trusted system outside of your head and off your mind\n# disciplining yourself to make decisions about all the inputs you let into your life, so that you will always have a plan for next actions that you can implement or renegotiate at any moment \n\n!!Outcomes & Actions\n# describe in a single sentence the intended successful outcome for the problem or situation\n# write down the very next physical action required to move the situation forward \n\n!!Horizontal & Vertical Control (Get Things Off Your Mind and Get Them Done)\n# horizontal maintains coherence across all activities in which you are involved\n# vertical manages thinking up and down the track of individual topics and projects \n\n!!Five Stages of Workflow (Horizontal)\n# ''collect'' things that command our attention (anything personal or professional, big or little, that you think should be different than it currently is and that you have any level of internal commitment to changing)\n## get it all out of your head\n## minimize your collection buckets\n*** physical in-basket\n*** writing paper and pads\n*** electronic note taking\n*** auditory capture (answering machines, voicemail, dictating equipment)\n*** email \n## empty the buckets regularly \n# ''process'' what they mean and what to do about them\n## what is it?\n## is it actionable? YES or NO\n*** ''No''\n#### trash\n#### incubate\n##### someday/maybe list\n##### tickler file (suspended or follow-on file; a 3D calendar)\n****** 43 folders: 31 daily files, 12 monthly files, tomorrow's date at the front \n#### reference (reference should be information that can be easily referred to when needed) \n*** ''Yes''\n#### What is the next action?\n***** ''do'' it\n***** ''delegate'' it\n***** ''defer'' it\n***** Project (anything requiring more than one step to accomplish the desired outcome) \n#### actionable tracking\n##### list of projects\n##### storage or files for project plans and materials\n##### calendar (time specific actions [appointments], day specific actions, day specific information)\n##### list of reminders of next actions\n##### a list of reminders of things you're waiting for (only review as often as they have to be in order to stop wondering about them) \n# ''organize'' the results\n# ''review'' the options\n# ''do''\n## choosing actions in the moment\n### context\n### time available\n### energy available\n### priority \n\n!!Weekly Review\n# Loose Papers\n** business cards, receipts, etc. - put in in basket for processing \n# Process Your Notes\n# Previous Calendar Data\n** review for remaining action items, reference information, etc. \n# Upcoming Calendar\n# Empty Your Head\n** write down any new projects, action items, etc. \n# Review "Projects" (and Larger Outcome) Lists\n** ensure that at least one kick-start action is in your system for each \n# Review "Next Actions" Lists\n** Mark off completed actions & review for reminders of further action steps to capture \n# Review "Waiting For" List\n** Records appropriate actions for any needed follow-up & check off received items \n# Review Any Relevant Checklists\n# Review "Someday/Maybe" List\n** Check for any projects that may have become active and transfer them to "Projects" & delete items no longer of interest \n# Review "Pending" and Support Files\n** Browse through all work-in-progress support material to trigger new actions, completions, and waiting-fors \n\n!!Models for Making Action Choices ([[The Three-fold Nature of Work|http://www.effectivemeetings.com/productivity/timemanagement/natureofwork.asp]])\n# predefined\n# work as it shows up\n# defining work \n\n!!Six Level Model for Reviewing Your Own Work\n# current actions\n# current projects\n# areas of responsibility\n# 1-2 year goals\n# 3-5 year vision\n# big picture view \n* ''projects'': clearly defined outcomes and the next actions to move them towards closure\n* ''horizontal focus'': reminders placed in a trusted system that is reviewed regularly\n* ''vertical focus'': informal back of the envelope planning \n\n!!Five Steps to Accomplish Any Task (Project Planning)\n# defining purpose and principles\n# outcome visioning\n# brainstorming\n# organizing\n# identifying next actions \n\n!!Five Phases of Natural Planning Techniques\n# purpose / guiding principles (Why are we doing this?)\n# mission / vision / goals / sucessful outcome (What would wild success look, sound, or feel like?)\n# brainstorming (How would we accomplish it?)\n## view the project from beyond the completion date\n## envision wild success (suspend "Yeah, but. . .")\n## capture features, aspects, and qualities you imagine in place \n# organizing (identify components, subcomponents, sequences, events, and/or priorities; what must occur and in what order? When do we do these things?)\n# next actions (Where do we start?) \n\n"If the project is off your mind, your planning is sufficient. If it's still on your mind, keep applying the model until it's clear."\n\n!!Critical Factor of Filing System\n* filing has to be instantaneous and easy\n** ''One Alpha System''\n*** consider ~A-Z organizing unless you need more specific filing\n*** reduces number of place something isn't\n*** organize by topic, project, person, or company \n** specialized filing may be necessary if amount of reference material on one topic or project exceeds one file drawer. \n* get high quality mechanics and avoid hanging files\n* if you must use hanging files:\n** label files, not the hangers\n** use only one file folder per hanger\n** keep a big supply of plain hangers and new file folder in the front of the drawer \n* purge files once a year\n* encourage a dumpster day at work \n\n!!Dealing with un-met agreements:\n# lower standards\n# do it\n# renegotiate agreement \n\n"What is the next action?"\n"The better you get, the better you'd better get."\n\n!SUMMARY\n# keep everything out of your head\n# decide actions and outcomes when things first emerge on your radar, instead of later\n# regularly review and update the complete inventory of open loops of your life and work \n----\nPick up anything around you that you're wondering what to do with, and apply a simple set of formulae:\n* I don't need or want it = trash\n* I still need to decide what this means to me = IN basket item\n* I might need to know this information = reference\n* I use it = equipment and supplies\n* I like to see it = decoration\n* When I could possibly move on it, I want to see the action as an option = next action reminder, reviewed when and where it could be done\n* I need to be reminded of this short-term outcome I've committed to = project list item, reviewed weekly\n* I need to have this when I focus on a project = support material\n* I might want to commit to this at any time in the future = Someday/maybe list item\n* I might want to commit to this on or after a specific time in the future = calendared or "tickled" item incubated for review on a specific future date\n* I want to achieve this "bigger" outcome = goals, objectives, visions that you review on some longer interval\n* It's something someone else is doing that I care about = item on Waiting-For list, reviewed at least weekly\n* I need to consider it when I do certain recurring activities = item on a checklist \n - from [[David Allen|http://www.davidco.com/]]'s Productivity Principles newsletter \n----\n!!!See Also:\n* [[Book Notes|http://www.minezone.org/wiki/MVance/BookNotes]] -- MVance's notes on lots of other books\n* [[Notes from "Now Habit"|http://www.minezone.org/wiki/MVance/NowHabit]] -- notes from a book on productivity, motivation, etc.\n* [[Getting Things Done When You're Only a Grunt|http://www.joelonsoftware.com/articles/fog0000000332.html]] -- taking charge when you're not in charge (check out the comments too)\n* [[The PigPog Method|http://pigpog.com/michael/blog/2004/08/productivity-gtd-pigpog-method.php]] -- a useful hack for those using PDAs\n* [[Cascading Next Actions|http://www.marktaw.com/blog/CascadingNextActions.html]] -- good information on breaking projects down into manageable chunks\n* [[One-Page Workflow Chart|http://www.davidco.com/pdfs/gtd_workflow_advanced.pdf]] (PDF) -- a visual flowchart for dealing with incoming information\n* [[43 Folders: GTD on a Mac|http://www.43folders.com/]] -- a great resource related to Lifehacks and Getting Things Done\n* [[Getting Things Done Zone on OfficeZealot.com|http://www.officezealot.com/gtd/]] -- lots of articles related to Getting Things Done \n
* SELP coaching - what's possible (March 3rd)\n* Secret\n
/***\n| Name:|HideWhenPlugin|\n| Description:|Allows conditional inclusion/exclusion in templates|\n| Version:|$$version$$|\n| Date:|$$date$$|\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
* reserve room for Aria\n* airport transfer\n* single bed\n
possible outcome: summarize into a few bullet points (give to Num)
# non-profit\n# AnnualBenefit (2 or 3 years)\n# programs\n# support individuals\n# support communities/organizations\n\nsome kind of community expansion plan
"We will then take this descriptive summary to the appropriate Thai Ministry, and request their comment on the viability of this proposal, and their instructions/suggestions concerning what documentation we should gather to support a formal application."\n"3,500 baht comes into the picture to "float" your proposed intentions to the government, to see if your proposed activities even qualify to be a Foundation."
//{{{\nconfig.formatters.unshift( {\n name: "inlinesliders",\n match: "\s\s+\s\s+\s\s+\s\s+|\s\s<slider",\n lookaheadRegExp: /(?:\s+\s+\s+\s+|<slider) ([\sw\ss]*)(?:>?)\sn((?:.|\sn)*?)\sn(?:====|<\s/slider>)/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart )\n {\n var btn = createTiddlyButton(w.output,lookaheadMatch[1] + " "+"\su00BB",lookaheadMatch[1],this.onClickSlider,"button sliderButton");\n var panel = createTiddlyElement(w.output,"div",null,"sliderPanel");\n panel.style.display = "none";\n wikify(lookaheadMatch[2],panel);\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n },\n onClickSlider : function(e)\n {\n if(!e) var e = window.event;\n var n = this.nextSibling;\n n.style.display = (n.style.display=="none") ? "block" : "none";\n return false;\n }\n});\n//}}}
//{{{\n\n// By Lewcid\n// http://tw.lewcid.org/sandbox/#InlineTabsPlugin\n\nconfig.formatters.unshift( {\n name: "inlinetabs",\n match: "\s\s<tabs",\n lookaheadRegExp: /(?:<tabs (.*)>\sn)((?:.|\sn)*?)(?:\sn<\s/tabs>)/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n var cookie = lookaheadMatch[1];\n var wrapper = createTiddlyElement(null,"div",null,cookie);\n var tabset = createTiddlyElement(wrapper,"div",null,"tabset");\n tabset.setAttribute("cookie",cookie);\n var validTab = false;\n var firstTab = '';\n var tabregexp = /(?:<tab (.*)>)(?:(?:\sn)?)((?:.|\sn)*?)(?:<\s/tab>)/mg;\n while((m = tabregexp.exec(lookaheadMatch[2])) != null)\n {\n if (firstTab == '') firstTab = m[1];\n var tab = createTiddlyButton(tabset,m[1],m[1],story.onClickInlineTab,"tab tabUnselected");\n tab.setAttribute("tab",m[1]);\n tab.setAttribute("content",m[2]);\n tab.title = m[1];\n if(config.options[cookie] == m[1])\n validTab = true;\n }\n if(!validTab)\n config.options[cookie] = firstTab;\n w.output.appendChild(wrapper);\n story.switchInlineTab(tabset,config.options[cookie]);\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n})\n\nStory.prototype.switchInlineTab = function(tabset,tab)\n{\n var cookie = tabset.getAttribute("cookie");\n var theTab = null\n var nodes = tabset.childNodes;\n for(var t=0; t<nodes.length; t++)\n if(nodes[t].getAttribute && nodes[t].getAttribute("tab") == tab)\n {\n theTab = nodes[t];\n theTab.className = "tab tabSelected";\n }\n else\n nodes[t].className = "tab tabUnselected"\n if(theTab)\n {\n if(tabset.nextSibling && tabset.nextSibling.className == "tabContents")\n tabset.parentNode.removeChild(tabset.nextSibling);\n var tabContent = createTiddlyElement(null,"div",null,"tabContents");\n tabset.parentNode.insertBefore(tabContent,tabset.nextSibling);\n wikify(theTab.getAttribute("content"),tabContent);\n if(cookie)\n {\n config.options[cookie] = tab;\n saveOptionCookie(cookie);\n }\n }\n}\n \nStory.prototype.onClickInlineTab = function(e)\n{\n story.switchInlineTab(this.parentNode,this.getAttribute("tab"));\n return false;\n}\n//}}}\n\n
# copies: ZenArtLiving worksheets\n# Blockbuster\n# dropoff MEPP DVD\n# Farrah\n# image print
/***\n| Name:|InstantTimestampPlugin|\n| Created by:|SimonBaird|\n| Location:|http://instanttimestamp.tiddlyspot.com/|\n| Version:|1.0.5 (17-Jan-2007)|\n| Requires:|~TW2.x|\n!Description\nIf you enter {ts} in your tiddler content (without the spaces) it will be replaced with a timestamp when you save the tiddler. Full list:\n* {ts} or {t} -> timestamp\n* {ds} or {d} -> datestamp\n* !ts or !t at start of line -> !!timestamp\n* !ds or !d at start of line -> !!datestamp\n(I added the extra ! since that's how I like it. Remove it from translations below if required)\n!Notes\n* Change the timeFormat and dateFormat below to suit your preference.\n* See also AutoCorrectPlugin\n!History\n* 17-Jan-07, version 1.0.5\n** added fields param to saveTiddler method needed in TW 2.1+\n* 06-Apr-06, version 1.0.4\n** removed the AutoCorrect stuff and put it in AutoCorrectPlugin\n* 05-Apr-06, version 1.0.3\n** now have exclusion by tag and tiddler name, probably less important here than in AutoCorrectPlugin\n* 05-Apr-06, version 1.0.2\n** put matches into array to and eval them to allow generic substitutions\n* 05-Apr-06, version 1.0.1\n** added ds for datestamp as suggested by DanielBaird\n** made case insensitive\n** Added translation for !t at start of line\n* 05-Apr-06, version 1.0.0\n** written after suggestion by Achim Wessling \n!Code\n***/\n//{{{\n\nconfig.InstantTimestamp = {\n\n // adjust to suit\n timeFormat: 'DD/0MM/YY 0hh:0mm',\n dateFormat: 'DD/0MM/YY',\n\n translations: [\n [/^!ts?$/img, "'!!'+now.formatString(config.InstantTimestamp.timeFormat)"],\n [/^!ds?$/img, "'!!'+now.formatString(config.InstantTimestamp.dateFormat)"],\n [/\s{ts?\s}/ig, "now.formatString(config.InstantTimestamp.timeFormat)"],\n [/\s{ds?\s}/ig, "now.formatString(config.InstantTimestamp.dateFormat)"]\n ],\n\n excludeTags: [\n "noAutoCorrect",\n "html",\n "CSS",\n "css",\n "systemConfig",\n "zsystemConfig",\n "Plugins",\n "Plugin",\n "plugins",\n "plugin",\n "javascript",\n "code"\n ],\n\n excludeTiddlers: [\n "StyleSheet",\n "StyleSheetLayout",\n "StyleSheetColors",\n "StyleSheetPrint"\n ]\n\n}; \n\nif (!Array.prototype.contains)\n Array.prototype.contains = function(item) {\n return (this.find(item) != null);\n };\n\nif (!Array.prototype.containsAny)\n Array.prototype.containsAny = function(items) {\n for (var i=0;i<items.length;i++)\n if (this.contains(items[i]))\n return true;\n return false;\n };\n\nTiddlyWiki.prototype.saveTiddler_mptw_instanttimestamp = TiddlyWiki.prototype.saveTiddler;\nTiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags,fields) {\n\n tags = (typeof(tags) == "string") ? tags.readBracketedList() : tags;\n var conf = config.InstantTimestamp;\n\n if ( !tags.containsAny(conf.excludeTags) && !conf.excludeTiddlers.contains(newTitle) ) {\n\n var now = new Date();\n var trans = config.InstantTimestamp.translations;\n for (var i=0;i<trans.length;i++) {\n newBody = newBody.replace(trans[i][0], eval(trans[i][1]));\n }\n }\n\n return this.saveTiddler_mptw_instanttimestamp(title,newTitle,newBody,modifier,modified,tags,fields);\n}\n\n//}}}\n\n
April 27-28\nhttp://www.friends-of-the-arts.info/index2
Polished final letter designed to:\n* thank them for accepting a copy of our FundDevelopmentProgramBinder\n* give an overview of our FundDevelopmentProgram\n* what you can do to assist\n** request they review this binder and provide feedback\n* invite to be part of our FundDevelopment team!
# flush previous email (5 items)\n# city every wed\n# director\n# dates\n
LosAngeles - Itty
# SourceDocument\n
/***\n|''Name:''|LegacyStrikeThroughPlugin|\n|''Description:''|Support for legacy (pre 2.1) strike through formatting|\n|''Version:''|1.0.1|\n|''Date:''|Jul 21, 2006|\n|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|\n|''Author:''|MartinBudden (mjbudden (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***/\n\n//{{{\n\n// Ensure that the LegacyStrikeThrough Plugin is only installed once.\nif(!version.extensions.LegacyStrikeThroughPlugin)\n {\n version.extensions.LegacyStrikeThroughPlugin = true;\n\nconfig.formatters.push(\n{\n name: "legacyStrikeByChar",\n match: "==",\n termRegExp: /(==)/mg,\n element: "strike",\n handler: config.formatterHelpers.createElementAndWikify\n});\n\n} // end of "install only once"\n//}}}\n
* borrow PC
* Anu
Name: Blue\nBackground: #fff\nForeground: #000\nPrimaryPale: #cdf\nPrimaryLight: #57c\nPrimaryMid: #114\nPrimaryDark: #012\nSecondaryPale: #ffc\nSecondaryLight: #fe8\nSecondaryMid: #db4\nSecondaryDark: #841\nTertiaryPale: #eee\nTertiaryLight: #ccc\nTertiaryMid: #999\nTertiaryDark: #666\nError: #f88\n\n
Name: Green\nBackground: #fff\nForeground: #000\nPrimaryPale: #9b9\nPrimaryLight: #385\nPrimaryMid: #031\nPrimaryDark: #020\nSecondaryPale: #ffc\nSecondaryLight: #fe8\nSecondaryMid: #db4\nSecondaryDark: #841\nTertiaryPale: #eee\nTertiaryLight: #ccc\nTertiaryMid: #999\nTertiaryDark: #666\nError: #f88\n\n
Name: Red\nBackground: #fff\nForeground: #000\nPrimaryPale: #fdd\nPrimaryLight: #c55\nPrimaryMid: #711\nPrimaryDark: #500\nSecondaryPale: #ffc\nSecondaryLight: #fe8\nSecondaryMid: #db4\nSecondaryDark: #841\nTertiaryPale: #eee\nTertiaryLight: #ccc\nTertiaryMid: #999\nTertiaryDark: #666\nError: #f88\n\n
Name: Smoke\nBackground: #fff\nForeground: #000\nPrimaryPale: #aaa\nPrimaryLight: #777\nPrimaryMid: #111\nPrimaryDark: #000\nSecondaryPale: #ffc\nSecondaryLight: #fe8\nSecondaryMid: #db4\nSecondaryDark: #841\nTertiaryPale: #eee\nTertiaryLight: #ccc\nTertiaryMid: #999\nTertiaryDark: #666\nError: #f88\n\n
[[Your Role|ExecutiveDirector]]\n [[Do Work|Dashboard]]\n [[Process Inbox]]\n [[Review|Project]]\n/%\n <<tag Realm>>\n {{new{''<<newTiddler label:'+' title:'New Action' tag: Action Next GTD>>''}}}\n {{tag{<<tag Action>>}}}\n {{new{''<<newTiddler label:'+' title:'New Project' tag: Project GTD>>''}}}\n {{tag{<<tag Project>>}}}\n {{new{''<<newTiddler label:'+' title:'New Tickler' tag: Tickler GTD>>''}}}\n {{tag{<<tag Tickler>>}}}\n {{new{''<<newTiddler label:'+' title:'New Context' tag: Context GTD>>''}}}\n {{tag{<<tag Context>>}}}\n {{new{''<<newTiddler label:'+' title:'New Area' tag: Area GTD>>''}}}\n {{tag{<<tag Area>>}}}\n%/\n@@padding-left:1em;font-size:70%;\n [[starred|Starred]] &nbsp;&nbsp;\n {{tag{<<tag more|GTDComponent>>}}}\n [[config|Config]]\n [[update|Upgrade]]\n@@\n @@padding-left:1em;color:[[ColorPalette::PrimaryLight]];<<tiddler MonkeyGTDVersion>>@@\n
master calendar outlining all our events (internal & external)\nprimary purpose: to schedule volunteers and guests\n\n!planned\n# VolunteerRecruitingEvents (Feb 25)\n# YogaWithAria (Mar +10+)\n# OpenSpaceMovementResearch (Mar +12+)\n# ChiangmaiRetreat (TBD)\n# TeamMeetings (<list>)\n# LumpiniParkExperiment (TBD)\n\n!horizon\n# Travis (Feb 20-Feb 22)\n# Chadwick (Mar 5-Apr 2x)\n# Fulbright (Mar)\n# Hiroko (Oct 29-Nov 9)\n# Karina\n# GregPanos\n# Deirdre\n# Tracy\n# BurningManThemeCamp (2008)
baseline off of DancePartners
* time to chat on phone\n** exact in and out dates
# clear # of guests
outcome: sorted set of change requests\n\n! template\n# Project review tiddler: move Someday/Maybe projects to right hand side. leave actions by project below
/***\n\n\n***/\n//{{{\n\nconfig.mGTD = {\n\n star: "\su2605",\n // star: "*", // use in case the above doesn't work on your system\n \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 "|'+"+\n "((store.getValue('MonkeyGTDSettings','mgtd.usemdy')=='true')"+\n "?(this.mGet('tmonth')+'/'+this.mGet('tday'))"+\n ":(this.mGet('tday')+'/'+this.mGet('tmonth')))"+\n "+'/'+this.mGet('tyear')+'|\s\sn'",\n // TODO ffs use classes for these\n groupBy:\n "'{{groupBy{[['+this.title+']] }}}\s\sn'",\n showstar:\n "'{{starthing{"+\n "@@font-size:80%;"+\n "<<tTag tag:[[Starred]] mode:text text:{{config.mGTD.star}} title:[['+this.title+']]>>"+\n " @@"+\n "[['+this.title+']] }}}\s\sn'",\n showstar2:\n "'{{starthing{"+\n "@@font-size:80%;margin-left:2em;"+\n "<<tTag tag:[[Starred]] mode:text text:{{config.mGTD.star}} title:[['+this.title+']]>>"+\n " @@"+\n "[['+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 "<<tTag tag:[[Starred]] mode:text text:{{config.mGTD.star}} 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 "<<tTag tag:[[Starred]] mode:text text:{{config.mGTD.star}} 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 "<<tTag tag:[[Starred]] mode:text text:{{config.mGTD.star}} 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 "<<tTag tag:[[Starred]] mode:text text:{{config.mGTD.star}} 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 = this.getListByTag("GTDComponent");\n\n for (var i=0;i<this.config.GTDComponent.length;i++) {\n this.config[this.config.GTDComponent[i]] = this.getListByTag(this.config.GTDComponent[i]);\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\n realmSelector: {\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n var markup = "Show realms: ";\n for (var i=0;i<config.mGTD.config.Realm.length;i++) {\n markup += '<<tField title:MonkeyGTDSettings tag:[[hide'+\n config.mGTD.config.Realm[i] + \n ']] mode:text text:[['+\n config.mGTD.config.Realm[i] +\n ']] refreshAll:yes>>';\n }\n wikify(markup,place,null,tiddler);\n }\n },\n\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 var ignoreRealm = getParam(parsedParams,"ignoreRealm","no");\n\n if (mode != "global")\n tagExpr = '( '+tagExpr+' ) && ( [[' + tiddler.title + ']] )';\n\n if (ignoreRealm != "yes") {\n\n for (var i=0;i<config.mGTD.config.Realm.length;i++) {\n if (mHideRealm(config.mGTD.config.Realm[i])) {\n tagExpr = '( '+tagExpr+' ) && ( ![[' + config.mGTD.config.Realm[i] + ']] )';\n }\n }\n }\n\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 += "{{groupBy{''(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 newHere: {\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n wikify("<<newTiddler "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);\n }\n },\n\n newHereFields: {\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n // needs some work here to derive parent type\n wikify("<<newTiddlerWithFields "+paramString+" tag:[["+tiddler.title+"]] mgtd.project:[["+tiddler.title+"]]>>",place,null,tiddler);\n }\n },\n\n processInbox: {\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n\n var shortHand = {\n 'W': 'Waiting For',\n 'N': 'Next',\n 'F': ''\n };\n\n // TODO move this help elsewhere...\n wikify(\n "Enter projects and actions here. Click 'create these items' to create them\sn"+\n "Example usage:\sn{{{\snPaint House|Home Maintenance\sn"+\n ".Buy ladder and brushes|Errands\sn"+\n ".Choose colours|Home|W\sn"+\n "\sn}}}\sn"+\n "By default actions are next actions. "+\n "Specify W or F to make them future or Waiting For. You can create multiple projects.\snRealm:"\n ,place);\n\n for (var i=0;i<config.mGTD.config.Realm.length;i++) {\n var r = config.mGTD.config.Realm[i];\n var foo = createTiddlyCheckbox(place,r,!mHideRealm(r),null);\n foo.id = "piRealm"+r.replace(/ /,'');\n }\n\n var pi = createTiddlyElement(place,"textarea",null,"piBox");\n \n wikify("\sn",place);\n\n var a1 = createTiddlyCheckbox(place,"Open created projects",true,null);\n a1.id = 'piShowProjects';\n\n var a2 = createTiddlyCheckbox(place,"Open created actions",false,null);\n a2.id = 'piShowActions';\n\n wikify("\sn\sn",place);\n\n var btn = createTiddlyButton(place,"create these items","create these items",function(e) {\n var lines = pi.value.split("\sn");\n var currentProject = "";\n var displayThese = [];\n\n for (var i=0;i<lines.length;i++) {\n //alert(lines[i]);\n var fields = lines[i].split(/[|;]/);\n\n if (!fields[0] || fields[0].trim() == "") {\n currentProject = "";\n }\n else {\n\n var title = fields.shift();\n //alert(title);\n\n // add the realm\n for (var j=0;j<config.mGTD.config.Realm.length;j++) {\n var theId = "piRealm"+config.mGTD.config.Realm[j].replace(/ /,'');\n if (document.getElementById(theId).checked)\n fields.push(config.mGTD.config.Realm[j]);\n }\n\n if (title[0] != '.') {\n //alert("project "+title);\n currentProject = title;\n\n if (document.getElementById('piShowProjects').checked)\n displayThese.push(title);\n\n fields.push("GTD"); // make it a GTD item\n fields.push("Project"); // make it a project\n if (store.tiddlerExists(title))\n alert("Warning: '"+title+"' already exists, did not create");\n else\n store.saveTiddler(\n title,title,\n "", // content\n config.options.txtUserName,\n new Date(),\n fields, // tags\n null // extra fields\n );\n }\n else {\n\n // default to next actions\n if (!fields.containsAny(['N','F','W']))\n fields.push('N');\n\n fields = fields.map(function(f) {\n if (shortHand[f] && shortHand[f] != '')\n return shortHand[f];\n else\n return f;\n });\n\n //alert("action "+title);\n title = title.trim();\n title = title.replace(/^\s.+/,'');\n\n if (document.getElementById('piShowActions').checked)\n displayThese.push(title);\n\n fields.push("GTD"); // make it a GTD item\n fields.push("Action"); // make it an action \n if (currentProject.trim() != "")\n fields.push(currentProject); // make it in this project\n\n if (store.tiddlerExists(title))\n alert("Warning: '"+title+" already exists, did not create");\n else\n store.saveTiddler(\n title,title,\n "", // content\n config.options.txtUserName,\n new Date(),\n fields, // tags\n null // extra fields\n );\n }\n }\n }\n\n for (var ii=0;ii<displayThese.length;ii++)\n story.displayTiddler("bottom",displayThese[ii]);\n\n alert("Done creating items");\n return false;\n }); // end of createTiddlyButton\n\n }\n }\n\n },\n\n onClickNewTiddler: function() {\n var title = this.getAttribute("newTitle");\n var params = this.getAttribute("params").split("|");\n var focus = this.getAttribute("newFocus");\n var template = this.getAttribute("newTemplate");\n story.displayTiddler(null,title,template);\n var text = this.getAttribute("newText");\n if(typeof text == "string")\n story.getTiddlerField(title,"text").value = text.format([title]);\n for(var t=0;t<params.length;t++) {\n if (params[t].indexOf("=") != -1) {\n // it's a field, name=value. this is hacky and not good\n var nameValue = params[t].split("=");\n // alert(nameValue[0]);\n // alert(nameValue[1]);\n // damn this doesn't work because tiddler doesn't exist yet\n // store.setValue(title,nameValue[0],nameValue[1]);\n }\n else {\n // it's a normal tag\n story.setTiddlerTag(title,params[t],+1);\n }\n }\n story.focusTiddler(title,focus);\n return false;\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 replace(/'/,"\s\s'") // fix single quote bug. hurrah\n // but how to fix round bracket bug?\n +"')";\n }\n }\n //alert(expr);\n return '('+expr+')';\n }\n },\n\n storeMethods: {\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 var first = true;\n this.forEachTiddler(function(title,tiddler) {\n //alert(tiddler.getRealm());\n try {\n if (eval(parsed))\n output.push(tiddler);\n }\n catch(e) {\n if (first) {\n alert("error parsing: "+parsed);\n first = false;\n }\n }\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 return this.getValueByGTDComponent('Project').join("/"); // maybe two projects??\n },\n \n getRealm: function() {\n // TODO why is different from getProject?\n // do some sneaky backwards/compat stuff for tags/fields\n \n // check for field\n //var fieldBasedRealm = this.mGet('realm');\n //if (fieldBasedRealm) {\n // var realm = fieldBasedRealm.readBrackettedList(); // could be more than one\n //}\n //else {\n //var realm = this.getValueByTag('Realm'); // returns array\n // this.mSet("realm",String.encodeTiddlyLinkList(realm));\n //}\n if (this.tags.contains("Professional")) return "Professional";\n if (this.tags.contains("Personal")) return "Personal";\n \n //return "asdf";//realm[0];\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 getValueByGTDComponent: function(itemType) {\n // faster than getValueByTag since we don't need to\n // do a "full table scan" of all tiddlers\n var values = config.mGTD.config[itemType];\n var result = [];\n for (var i=0;i<values.length;i++) {\n if (this.tags.contains(values[i])) {\n result.push(values[i]);\n }\n }\n return result;\n },\n\n hasValue: function(itemType,value) {\n var foo = this.getValueByGTDComponent(itemType);\n return foo.contains(value);\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 // utility\n mOpt: function(setting) {\n return store.getValue("MonkeyGTDSettings","mgtd."+setting);\n },\n\n mHideRealm: function(realm) {\n return store.getValue("MonkeyGTDSettings","hide"+realm);\n },\n\n mDefaultRealm: function() {\n // for (var i=config.mGTD.config.Realm.length-1;i>=0;i--) {\n for (var i=0;i<config.mGTD.config.Realm.length;i++) {\n if (!mHideRealm(config.mGTD.config.Realm[i])) {\n // if both are on it returns last one\n // hack. because Work is after Personal??\n return config.mGTD.config.Realm[i];\n }\n }\n return config.mGTD.config.Realm[0]; // just in case\n }\n\n },\n dateMethods: {\n // just a bug fix in TW 2.1.3\n // temporary\n formatString: function(template) {\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(/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(/MMM/g,config.messages.dates.months[this.getMonth()]);\n t = t.replace(/mmm/g,config.messages.dates.shortMonths[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\n t = t.replace(/0mm/g,String.zeroPad(this.getMinutes(),2));\n t = t.replace(/mm/g,this.getMinutes());\n\n return t;\n }\n },\n \n test: function() {\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(Date.prototype,this.dateMethods);\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 this.test();\n \n }\n};\n\nconfig.mGTD.init();\n\n//}}}\n\n
<<tField tag:mgtd.usemdy label:'Use ~M-D-Y instead of ~D-M-Y'>>\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, .mList .starthing {\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.StarredButton.off {border-style:none;background:transparent;color:#ddd;font-size:200%;padding:0;margin:0;font-family:'Arial Unicode MS' sans-serif;}\n.StarredButton.on {border-style:none;background:transparent;color:#f80;font-size:200%;padding:0;margin:0;font-family:'Arial Unicode MS' sans-serif;}\n\nspan.title {\n color:[[ColorPalette::PrimaryDark]];\n}\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}\n\n/* the png is way superior due to alpha transparency. stupid IE */\nhtml>body #topMenu {background-image:url(http://simonbaird.com/monkeygtd/logo-trans.png)}\n\n\n#topMenu a { color:white ! important; }\n\n#topMenu a.button {\n border-style:none;\n}\n\n.mList .tiddlyLink { font-weight: normal; }\n\n.mList .groupBy {\n display:block;\n padding-top:0.75em;\n border-bottom:1px solid #ddd;\n margin-right:1em;\n margin-bottom:1px;\n padding-bottom:1px;\n margin-left:1em;\n font-size:120%;\n}\n\n.mList .groupBy a {\n font-weight:bold;\n}\n\n#extraToolbar .button {\n background:#ccc;\n padding:0 0.5em;\n margin:0 0.5em;\n}\n\n.piBox {\n width:95%;\n height:10em;\n}\n\n@media print {\n\n/* Thanks to Andrew C and Scott K*/\n#mainMenu,\n#sidebar,\n#extraToolbar,\n#messageArea,\n.subtitle,\n.tagglyTagged,\n.toolbar,\n.mToolbar,\n.mList .off,\n.mList .WaitingForButton.off,\n.mList .NextButton.off\n{\n display: none ! important;\n}\n\n#displayArea {\n margin: 1em 1em 0em 1em;\n}\n\n.tiddler { page-break-after:always }\n\n}/* end @media print */\n\n\n\n
URL: http://mgtd-alpha.tiddlyspot.com/upgrade.html\n
URL: /proxy/mgtd-alpha.tiddlyspot.com/upgrade.html\n
~MonkeyGTD 2.1 alpha r87\n\n
# solidify outcomes and ownership\n# discuss March event planning\n# add dates to MasterCalendar (technically, create!)\n** session with kids\n** VolunteeringRecruitingEvents\n*** discuss CommitteeChairs\n# ThaiCommunityRoster\n\n(I assume if I complete this "task" - it will complete it as an agenda item across all 3 projects?)\n(update: mGTD alpha doesn't deal with multiple project tags well - it assuming a 1:1 relationship)
/***\n| Name:|MptwLayoutPlugin|\n| Description:|A package containing templates and css for the MonkeyPirateTiddlyWiki layout|\n| Version:|$$version$$|\n| Date:|$$date$$|\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\n'MptwEditTemplate':[\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\n'MptwPageTemplate':[\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\n'MptwStyleSheet':[\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\n'MptwViewTemplate':[\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\n});\n//}}}\n
/***\n| Name:|NewHerePlugin|\n| Description:|Creates the new here and new journal toolbar commands|\n| Version:|$$version$$|\n| Date:|$$date$$|\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:|NewTiddlerWithFieldsMacro|\n| Created by:|BJ Backitis|\n| Location:|http://tampageekland.tiddlyspot.com#NewTiddlerWithFieldsMacro|\n| Version:|0.1.0 (16 Nov 2006)|\n| Requires:|~TW2.1.x|\n!Description\nThis is a clone of the NewTiddler core macro that allows for 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!Usage\nUse like the existing {{{<<newTiddler>>}}} macro, but any unknown param "name: value" pairs will be treated as a custom field name and value.\nBe sure to have the custom field defined in your view and/or edit templates so you can see them (if you wish)!\n\nExample:\n{{{<<newTiddlerWithFields label:'New Example' tag: special customTiddler tiddlertype: Example>>}}}\n\ntry it here:\n<<newTiddlerWithFields label:'New Example' tag: special customTiddler tiddlertype: Example>>\n\n* v0.1.0 -- BJ Backitis, 16 Nov 2006 (Original, based on a suggestion from Simon Baird)\n!To Do\n* {{{<<newJournalWithFields>>}}}???\n\n!Code\n***/\n\n\nconfig.macros.newTiddlerWithFields = {\n text: "new Tiddler",\n prompt: "Create a new tiddler with custom fields",\n title: "new Tiddler"\n} \n \nconfig.macros.newTiddlerWithFields.fixedParams = ["title", "tag", "label", "text", "prompt", "accessKey", "focus", "template", "anon"];\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 title = params[1] && params[1].name == "anon" ? params[1].value : this.title;\n title = getParam(params,"title",title);\n this.createNewTiddlerWithFieldsButton(place,title,params,this.label,this.prompt,this.accessKey,"title",false);\n }\n}\n\nconfig.macros.newTiddlerWithFields.createNewTiddlerWithFieldsButton = function(place,title,params,label,prompt,accessKey,newFocus,isJournal) {\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 tags.push(params[t].value);\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",title);\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 title = this.getAttribute("newTitle");\n if(this.getAttribute("isJournal")) {\n var now = new Date();\n title = now.formatString(title.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,title,template);\n var text = this.getAttribute("newText");\n if (typeof text == "string")\n story.getTiddlerField(title,"text").value = text.format([title]);\n for (var t=0;t<params.length;t++)\n story.setTiddlerTag(title,params[t],+1);\n for (var i=0;i<custFields.length;i++) \n story.setTiddlerField(title,custValues[i],+1,custFields[i]);\n story.focusTiddler(title,focus);\n return false;\n}\n\n\n\n
Dance Labs achieves 501(c) status\n!goals\n* legally receive donations and contributions (including equipment and software licenses)\n* tax benefits (to better understand)\n* legally hire staff\n* credibility\n\n!top 5 benefits\n# Your Association Makes a Profit From Its Activities (PlanInternational, LandmarkEducation, KMUTT)\n# You Want to Apply for Public or Private Grant Money (ResponsibleFatherhood)\n# You Want to Solicit Tax-Deductible Contributions (TK)\n# You Want Protection From Personal Liability for the Group's Activities (DanceChalat - injuiries playing)\n# Your Advocacy Efforts Might Provoke Legal Quarrels (?)\n[[src|http://www.nolo.com/article.cfm/pg/2/objectId/F63DD4C1-456C-418F-A1066A3F3FBE05A5/catId/CE94A6B3-EFB6-4036-8498D5414328FD73/111/262/ART/]]\n\n!options\n# InternationalHumanitiesCenter - IHCApplication\n# ThaiWorldviewFoundation\n# AsianResourceFoundation\n# DIY\n
# A4 binders\n** CommmunityServiceProgramBinder\n** GTDBinder - ultra thin/lightweight (for printouts only) with tabs\n** looseleaf history (daily notes)\n** portfolio (extra wide for A4 slips) - ChinarutRuangchotvit\n** ProjectManager (extra wide for A4 slips)\n# Nokia 3210 battery (try 3310 and assess need - maybe 6820 for incoming calls at center?)\n
we experiment with MichaelDobble in Thailand!\n\n!locations\n# Thonburi - DancingInTheSoi\n# Chiangmai - ??\n# downtown - SiamParagon, LumpiniPark, BTSPlatforms (Siam)
Enter task details
\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' style="font-size:120%;"></div>\n</div>\n<!-- realm selector under construction -->\n<div id="extraToolbar" style="color:#555;background:#999;padding:3px;border-bottom:2px solid #777;padding-left:0.5em;font-size:120%;">\n <span id='realmSelector' macro="realmSelector"></span>\n <span style="margin:0 2em;">|</span>\n <span>Create:</span>\n <span macro="newTiddler label:'new action' title:'New Action' tag: Action Next GTD "></span>\n <span macro="newTiddler label:'new project' title:'New Project' tag: Project GTD "></span>\n</div>\n<!--\n<div id='topBar' style="background:#ddd;padding:3px;border-bottom:1px solid #aaa;padding-left:0.5em;">\n <span macro="saveChanges" style="padding-left:2em;padding-right:2em;"></span>\n <span macro="selectPalette">select colour palette:</span>\n</div>\n-->\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 style="padding:0.5em;" macro="calendar thismonth"></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
* US Partnership
# TOT\n# True\n# GE
# acitivites with Moo\n# plan for week of 5th\n# review ED dashboard\n# laptop, printer, etc\n# have fun and smile =)\n# container
* 3rd CommitteeChair\n* lead YogaWithAria
Type the text for 'PitchPresentation'
* umbrella status\n
* MK trendi\n* Chalip's Scotland aspirations\n* <check headline@dancelabs.com>\n* intro on 4th\n* YogaTranceDance on 10th\n* OpenSpaceMovementResearch week of 12th\n* possible trip to Chiangmai
fix broken LCD\n\nestimate of repair: 2302 baht\n
committee accountable for programs outside of basic operational processes\na team of one or more ProgramManager(s)
* Work with the ProgramCommittee to develop new programs. (design)\n* Manage and direct all programs of the Foundation. (execute)\n
/***\n| Name:|QuickOpenTagPlugin|\n| Description:|Changes tag links to make it easier to open tags as tiddlers|\n| Version:|$$version$$|\n| Date:|$$date$$|\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:|RenameTagsPlugin|\n| Description:|Allows you to easily rename or delete tags across multiple tiddlers|\n| Version:|$$version$$|\n| Date:|$$date$$|\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
outcome: volunteer submits application by March 6th\nhttp://www.fatherhood.org/grant
CivilCommercialCodeOfThailand\n* clear legal/tax ramifications for non-Thai donors to contribute to Thai non-profit\n
http://news.gilbert.org/pub/cctp (30 pages free as PDF)
++++ Review Tips\n# [[Process Your Inbox|Process Inbox]]\n# Empty Your Head\n# Review Calendar\n# Review "Projects" Lists\n# Review "Next Actions" Lists\n# Review "Waiting For" Lists (see [[Dashboard|Dashboard]])\n# Review any relevant [[Checklists|Checklist]]\n# Review "Someday/Maybe" Lists\n# Review "[[Pending|Tickler]]" and [[Support|Support]] Files\n# //Be Creative and Courageous//: Any new, wonderful, hare-brained, thought-provoking, risk-taking ideas to add to your system?\n\nSee GettingThingsDoneOverview for more help\n@@color:#aaa;font-size:80%;Tips by Michael Lockhart@@\n====\n
* include intention to assist children in developing countries\n* AnnualBenefit
/***\n''SearchOptionsPlugin for TiddlyWiki version 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#SearchOptionsPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nThe TiddlyWiki search function normally looks in both tiddler titles and tiddler body content ('text'). However, narrowing the search so that it examines only titles or only text, or expanding the search to include text contained in tiddler tags can be very helpful, especially when searching on common words or phrases. In addition, it is often useful for the search results to show tiddlers with matching titles before tiddlers that contain matching text or tags.\n\n!!!!!Usage\n<<<\nThis plugin adds checkboxes (see below and in AdvancedOptions) to let you selectively configure the TiddlyWiki search function to just examine any combination of tiddler titles, text, or tags. It also provides an option to switch the search results order between 'titles mixed in' (default) and 'titles shown first', as well as an option display the search results as a list of links (in an auto-generated "SearchResults" tiddler), rather than actually displaying all matching tiddlers. You can also enable/disable the "incremental search" (key-by-key searching), so that a search is only initiated when you press the ENTER key or click on the "search:" prompt text.\n<<<\n!!!!!Configuration\n<<<\nIn additional to the checkboxes in AdvancedOptions, a self-contained control panel is included here for your convenience:\n<<option chkSearchTitles>> Search tiddler titles\n<<option chkSearchText>> Search tiddler text\n<<option chkSearchTags>> Search in tiddler tags\n<<option chkSearchTitlesFirst>> Show title matches first\n<<option chkSearchList>> Show list of matching tiddlers\n<<option chkSearchIncremental>> Incremental searching\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''SearchOptionsPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for SearchOptionsPlugin handling^^\n\nWhen installed, this plugin automatically adds checkboxes in the AdvancedOptions shadow tiddler so you can enable/disable the extended search behavior. However, if you have customized your AdvancedOptions, you will need to manually add {{{<<option chkSearchTitles>>}}}, {{{<<option chkSearchText>>}}} and {{{<<option chkSearchTitlesFirst>>}}} (with suitable prompt text) to your customized tiddler.\n<<<\n!!!!!Revision History\n<<<\n''2006.02.03 [2.2.1]''\nrewrite timeout clearing code and blank search text handling to match 2.0.4 core release changes. note that core no longer permits "blank=all" searches, so neither does this plugin. To search for all, use "." with text patterns enabled.\n''2006.02.02 [2.2.0]''\nin search.handler(), KeyHandler() function clears 'left over' timeout when search input is < 3 chars. Prevents searching on shorter text when shortened by rapid backspaces (<500msec)\n''2006.02.01 [2.1.9]''\nin Story.prototype.search(), correct inverted logic for using/not using regular expressions when searching\nalso, blank search text now presents "No search text. Continue anyway?" confirm() message box, so search on blank can still be processed if desired by user.\n''2006.02.01 [2.1.8]''\nin doSearch(), added alert/return if search text is blank\n''2006.01.20 [2.1.7]''\nfixed setting of config.macros.search.reportTitle so that Tweaks can override it.\n''2006.01.19 [2.1.6]''\nimproved SearchResults formatting, added a "search again" form to the report (based on a suggestion from MorrisGray)\ndefine results report title using config.macros.search.reportTitle instead of hard-coding the tiddler title\n''2006.01.18 [2.1.5]''\nCreated separate functions for reportSearchResults(text,matches) and discardSearchResults(), so that other developers can create alternative report generators.\n''2006.01.17 [2.1.4]''\nUse regExp.search() instead of regExp.test() to scan for matches. Correctd the problem where only half the matching tiddlers (the odd-numbered ones) were being reported.\n''2006.01.15 [2.1.3]''\nAdded information (date/time, username, search options used) to SearchResults output\n''2006.01.10 [2.1.2]''\nuse displayTiddlers() to render matched tiddlers. This lets you display multiple matching tiddlers, even if SinglePageModePlugin is enabled.\n''2006.01.08 [2.1.1]''\ncorrected invalid variable reference, "txt.value" to "text" in story.search()\n''2006.01.08 [2.1.0]''\nre-write to match new store.search(), store.search.handler() and story.search() functions.\n''2005.12.30 [2.0.0]''\nUpgraded to TW2.0\nwhen rendering SearchResults tiddler, closeTiddler() first to ensure display is refreshed.\n''2005.12.26 [1.4.0]''\nadded option to search for matching text in tiddler tags\n''2005.12.21 [1.3.7]''\nuse \s\s to 'escape' single quotes in tiddler titles when generating "Open all matching tiddlers" link. Also, added access key: "O", to trigger "open all" link.\nBased on a suggestion by UdoBorkowski.\n''2005.12.18 [1.3.6]''\ncall displayMessage() AFTER showing matching tiddlers so message is not cleared too soon\n''2005.12.17 [1.3.5]''\nif no matches found, just display message and delete any existing SearchResults tiddler.\n''2005.12.17 [1.3.4]''\nuse """{{{""" and """}}}""" to 'escape' display text in SearchResults tiddler to ensure that formatting contained in search string is not rendered \nBased on a suggestion by UdoBorkowski.\n''2005.12.14 [1.3.3]''\ntag SearchResults tiddler with 'excludeSearch' so it won't list itself in subsequent searches\nBased on a suggestion by UdoBorkowski.\n''2005.12.14 [1.3.2]''\nadded "open all matching tiddlers..." link to search results output.\nBased on a suggestion by UdoBorkowski.\n''2005.12.10 [1.3.1]''\nadded "discard search results" link to end of search list tiddler output for quick self-removal of 'SearchResults' tiddler.\n''2005.12.01 [1.3.0]''\nadded chkSearchIncremental to enable/disable 'incremental' searching (i.e., search after each keystroke) (default is ENABLED).\nadded handling for Enter key so it can be used to start a search.\nBased on a suggestion by LyallPearce\n''2005.11.25 [1.2.1]''\nrenamed from SearchTitleOrTextPlugin to SearchOptionsPlugin\n''2005.11.25 [1.2.0]''\nadded chkSearchList option\nBased on a suggestion by RodneyGomes\n''2005.10.19 [1.1.0]''\nadded chkSearchTitlesFirst option.\nBased on a suggestion by ChristianHauck\n''2005.10.18 [1.0.0]''\nInitial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].\nBased on a suggestion by LyallPearce.\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.SearchTitleOrText = {major: 2, minor: 2, revision: 1, date: new Date(2006,2,3)};\n//}}}\n\n//{{{\nif (config.options.chkSearchTitles==undefined) config.options.chkSearchTitles=true;\nif (config.options.chkSearchText==undefined) config.options.chkSearchText=true;\nif (config.options.chkSearchTags==undefined) config.options.chkSearchTags=true;\nif (config.options.chkSearchTitlesFirst==undefined) config.options.chkSearchTitlesFirst=false;\nif (config.options.chkSearchList==undefined) config.options.chkSearchList=false;\nif (config.options.chkSearchIncremental==undefined) config.options.chkSearchIncremental=true;\n\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchTitles>> Search in tiddler titles";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchText>> Search in tiddler text";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchTags>> Search in tiddler tags";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchTitlesFirst>> Search results show title matches first";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchList>> Search results show list of matching tiddlers";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchIncremental>> Incremental searching";\n//}}}\n\n//{{{\nif (config.macros.search.reportTitle==undefined)\n config.macros.search.reportTitle="SearchResults";\n//}}}\n\n//{{{\nconfig.macros.search.handler = function(place,macroName,params)\n{\n var lastSearchText = "";\n var searchTimeout = null;\n var doSearch = function(txt)\n {\n if (txt.value.length>0)\n {\n story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);\n lastSearchText = txt.value;\n }\n };\n var clickHandler = function(e)\n {\n doSearch(this.nextSibling);\n return false;\n };\n var keyHandler = function(e)\n {\n if (!e) var e = window.event;\n switch(e.keyCode)\n {\n case 13: // ELS: handle enter key\n doSearch(this);\n break;\n case 27:\n this.value = "";\n clearMessage();\n break;\n }\n if (config.options.chkSearchIncremental)\n {\n if(this.value.length > 2)\n {\n if(this.value != lastSearchText)\n {\n if(searchTimeout) clearTimeout(searchTimeout);\n var txt = this;\n searchTimeout = setTimeout(function() {doSearch(txt);},500);\n }\n }\n else\n if(searchTimeout) clearTimeout(searchTimeout);\n }\n };\n var focusHandler = function(e)\n {\n this.select();\n };\n var btn = createTiddlyButton(place,this.label,this.prompt,clickHandler);\n var txt = createTiddlyElement(place,"input",null,null,null);\n if(params[0])\n txt.value = params[0];\n txt.onkeyup = keyHandler;\n txt.onfocus = focusHandler;\n txt.setAttribute("size",this.sizeTextbox);\n txt.setAttribute("accessKey",this.accessKey);\n txt.setAttribute("autocomplete","off");\n if(config.browser.isSafari)\n {\n txt.setAttribute("type","search");\n txt.setAttribute("results","5");\n }\n else\n txt.setAttribute("type","text");\n}\n//}}}\n\n//{{{\nStory.prototype.search = function(text,useCaseSensitive,useRegExp)\n{\n highlightHack = new RegExp(useRegExp ? text : text.escapeRegExp(),useCaseSensitive ? "mg" : "img");\n var matches = store.search(highlightHack,"title","excludeSearch");\n var q = useRegExp ? "/" : "'";\n clearMessage();\n if (!matches.length) {\n if (config.options.chkSearchList) discardSearchResults();\n displayMessage(config.macros.search.failureMsg.format([q+text+q]));\n } else {\n if (config.options.chkSearchList) \n reportSearchResults(text,matches);\n else {\n var titles = []; for(var t=0; t<matches.length; t++) titles.push(matches[t].title);\n this.closeAllTiddlers(); story.displayTiddlers(null,titles);\n displayMessage(config.macros.search.successMsg.format([matches.length, q+text+q]));\n }\n }\n highlightHack = null;\n}\n//}}}\n\n//{{{\nTiddlyWiki.prototype.search = function(searchRegExp,sortField,excludeTag)\n{\n var candidates = this.reverseLookup("tags",excludeTag,false,sortField);\n\n // scan for matching titles\n var title_results = [];\n if (config.options.chkSearchTitles)\n for(var t=0; t<candidates.length; t++)\n if(candidates[t].title.search(searchRegExp)!=-1)\n title_results.push(candidates[t]);\n\n // scan for matching text\n var text_results = [];\n if (config.options.chkSearchText)\n for(var t=0; t<candidates.length; t++)\n if(candidates[t].text.search(searchRegExp)!=-1)\n text_results.push(candidates[t]);\n\n // scan for matching tags\n var tag_results = [];\n if (config.options.chkSearchTags)\n for(var t=0; t<candidates.length; t++)\n if(candidates[t].tags.join(" ").search(searchRegExp)!=-1)\n tag_results.push(candidates[t]);\n\n // merge the results, eliminating redundant matches\n var results = [];\n for(var t=0; t<title_results.length; t++) results.pushUnique(title_results[t]);\n for(var t=0; t<text_results.length; t++) results.pushUnique(text_results[t]);\n for(var t=0; t<tag_results.length; t++) results.pushUnique(tag_results[t]);\n\n // if not 'titles first', re-sort results to so titles, text and tag matches are mixed together\n if(!sortField) sortField = "title";\n var bySortField=function (a,b) {if(a[sortField] == b[sortField]) return(0); else return (a[sortField] < b[sortField]) ? -1 : +1; }\n if (!config.options.chkSearchTitlesFirst) results.sort(bySortField);\n return results;\n}\n//}}}\n\n// // ''REPORT GENERATOR''\n//{{{\nif (!window.reportSearchResults) window.reportSearchResults=function(text,matches)\n{\n var title=config.macros.search.reportTitle\n var q = config.options.chkRegExpSearch ? "/" : "'";\n var body="";\n\n // summary: nn tiddlers found matching '...', options used\n body+="''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''\sn";\n body+="^^//searched in:// ";\n body+=(config.options.chkSearchTitles?"''titles'' ":"");\n body+=(config.options.chkSearchText?"''text'' ":"");\n body+=(config.options.chkSearchTags?"''tags'' ":"");\n if (config.options.chkCaseSensitiveSearch||config.options.chkRegExpSearch) {\n body+=" //with options:// ";\n body+=(config.options.chkCaseSensitiveSearch?"''case sensitive'' ":"");\n body+=(config.options.chkRegExpSearch?"''text patterns'' ":"");\n }\n body+="^^";\n\n // numbered list of links to matching tiddlers\n body+="\sn<<<";\n for(var t=0;t<matches.length;t++) body+="\sn# [["+matches[t].title+"]]";\n body+="\sn<<<\sn";\n\n // open all matches button\n body+="<html><input type=\s"button\s" href=\s"javascript:;\s" ";\n body+="onclick=\s"story.displayTiddlers(null,["\n for(var t=0;t<matches.length;t++)\n body+="'"+matches[t].title.replace(/\s'/mg,"\s\s'")+"'"+((t<matches.length-1)?", ":"");\n body+="],1);\s" ";\n body+="accesskey=\s"O\s" ";\n body+="value=\s"open all matching tiddlers\s"></html> ";\n\n // discard search results button\n body+="<html><input type=\s"button\s" href=\s"javascript:;\s" ";\n body+="onclick=\s"story.closeTiddler('"+title+"'); store.deleteTiddler('"+title+"');\s" ";\n body+="value=\s"discard "+title+"\s"></html>";\n\n // search again\n body+="\sn\sn----\sn";\n body+="<<search \s""+text+"\s">> ";\n body+="<<option chkSearchTitles>>titles ";\n body+="<<option chkSearchText>>text ";\n body+="<<option chkSearchTags>>tags";\n body+="<<option chkCaseSensitiveSearch>>case-sensitive ";\n body+="<<option chkRegExpSearch>>text patterns";\n\n // create/update the tiddler\n var tiddler=store.getTiddler(title); if (!tiddler) tiddler=new Tiddler();\n tiddler.set(title,body,config.options.txtUserName,(new Date()),"excludeLists excludeSearch");\n store.addTiddler(tiddler); story.closeTiddler(title);\n\n // use alternate "search again" label in <<search>> macro\n var oldprompt=config.macros.search.label;\n config.macros.search.label="search again";\n\n // render tiddler\n story.displayTiddler(null,title,1); // force refresh\n\n // restore standard search label\n config.macros.search.label=oldprompt;\n\n}\n\nif (!window.discardSearchResults) window.discardSearchResults=function()\n{\n // remove the tiddler\n story.closeTiddler(config.macros.search.reportTitle);\n store.deleteTiddler(config.macros.search.reportTitle);\n}\n//}}}\n
''1 tiddlers found matching '{{{capture}}}'''\n^^//searched in:// ''titles'' ''text'' ''tags'' ^^\n<<<\n# [[GettingThingsDoneOverview]]\n<<<\n<html><input type="button" href="javascript:;" onclick="story.displayTiddlers(null,['GettingThingsDoneOverview'],1);" accesskey="O" value="open all matching tiddlers"></html> <html><input type="button" href="javascript:;" onclick="story.closeTiddler('SearchResults'); store.deleteTiddler('SearchResults');" value="discard SearchResults"></html>\n\n----\n<<search "capture">> <<option chkSearchTitles>>titles <<option chkSearchText>>text <<option chkSearchTags>>tags<<option chkCaseSensitiveSearch>>case-sensitive <<option chkRegExpSearch>>text patterns
/***\nQuick and dirtly palette switcher for 2.1.x\n<<selectPalette>>\nWARNING this will overwrite your ColorPalette tiddler.\n***/\n\n//{{{\n\nmerge(config.macros,{\n\n setPalette: {\n\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n var paletteName = params[0] ? params[0] : tiddler.title;\n createTiddlyButton(place,"apply","Apply this palette",function(e) {\n config.macros.selectPalette.updatePalette(tiddler.title);\n return false;\n });\n }\n },\n\n selectPalette: {\n\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n createTiddlyDropDown(place,this.onPaletteChange,this.getPalettes());\n },\n\n getPalettes: function() {\n var result = [\n {caption:"-palette-", name:""},\n {caption:"(Default)", name:"(default)"}\n ];\n var tagged = store.getTaggedTiddlers("palette","title");\n for(var t=0; t<tagged.length; t++) {\n var caption = tagged[t].title;\n var sliceTitle = store.getTiddlerSlice(caption,"Name");\n if (sliceTitle)\n caption = sliceTitle;\n result.push({caption:sliceTitle, name:tagged[t].title});\n }\n return result;\n },\n\n onPaletteChange: function(e) {\n config.macros.selectPalette.updatePalette(this.value);\n return true;\n },\n\n updatePalette: function(title) {\n if (title != "") {\n store.deleteTiddler("ColorPalette");\n if (title != "(default)")\n store.saveTiddler("ColorPalette","ColorPalette",store.getTiddlerText(title),\n config.options.txtUserName,undefined,"");\n this.refreshPalette();\n if(config.options.chkAutoSave)\n saveChanges(true);\n }\n },\n\n refreshPalette: function() {\n config.macros.refreshDisplay.onClick();\n }\n }\n});\n\n//}}}\n\n
eval against d3\n
<<tabs txtMainTab\n Timeline Timeline TabTimeline\n All 'All tiddlers' TabAll\n Tags 'Tags' TabTags\n Shadowed 'Shadowed tiddlers' TabMoreShadowed\n >>\n/%\n Tags 'All tags' TabTags\n More 'More lists' TabMore\n%/\n
powered by TiddlyWiki\n
My MonkeyGTD\n
<<listByTag Someday/Maybe title:'Never doing now'>>
outcome: MOU\n* financial transactions US->TH (esp timelines)\n* grant review process (ie. ResponsibleFatherhood)\n* ability to obtain salesforce.com licenses\n* consider: vision to raise/fulfill US$4000 (144k) annually\n!components\n# InternationalHumanitiesCenter questionaire\n# AnnualBudget\n
job descriptions for all primary team members\nconsider compensation packages (BMC)\n!roles\n# ExecutiveDirector\n# FundraisingExecutive\n# ProgramManager\n# CommunityManager
# Hire, manage and evaluate all full-time and part-time staff.\n# Develop and manage an effective volunteer AssistingProgram.\n
outcome: few slides capturing progress this month\n\n(cheers to you, Ted, for being a great listening! :)
# a MissionStatement\n# an outline of goals, objectives, and activities\n# an assessment of CurrentResources, and\n# a StrategicAnalysis (ie. SWOT)\n** StrategicGoals\n([[src|http://www.nolo.com/article.cfm/ObjectID/0B0C50E1-EDFD-41B1-A5D3C9DC03ADFC33/catID/CE94A6B3-EFB6-4036-8498D5414328FD73/111/262/ART/]]\n!pieces to tie\n* AsiaCommons\n* OmidyarNetwork\n* PlanInternational\n* ThonburiPark\n* LandmarkEducation\n* AnnualBenefit\n* ProfessionalServices\n* OnlineCommunity\n* <other strategy bits - see references>\n\n!areas\n# OrganizationalStrategy\n* current choice: move forward with non-profit\n* include HR (hiring) strategy\n# FundraisingStrategy\n* current choice: champion AnnualBenefit and pool resources\n# CommunicationStrategy\n* current choice: OmidyarNetwork center of operations
Works with BoardOfDirectors\n# Set and periodically review the Foundation's StrategicGoals.\n# Ensure that the strategic goals are met.\n
# hawaii?\n# DanceLabs update\n# PartySync in TH\n
<<tag css>>\n<<tag html>>\n<<tag systemConfig>>\n/% very dodgey. placeholder for a better system %/\n
<<timeline modified 30>>\n
/***\n| Name:|TagglyTaggingPlugin|\n| Description:|tagglyTagging macro is a replacement for the builtin tagging macro in your ViewTemplate|\n| Version:|$$version$$|\n| Date:|$$date$$|\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
every thu\nactual: wed 4pm
set of slides used to train new team members (staff and/or volunteers)\nuse training drafted on OmidyarNetwork workspace\n# DigitalToolkit - create outline\n# FundDevelopment - approach, PowerfulShare
simple handwritten list with names & phone numbers will do short-term
outcome: complete 4 lessons
\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 if (!tiddler)\n tiddler = store.getTiddler(getParam(parsedParams,"title"));\n \n var tag = getParam(parsedParams,"tag","checked");\n var title = getParam(parsedParams,"title",tiddler.title);\n\n var refreshAll = getParam(parsedParams,"refreshAll",false);\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\n var currentValue = theTiddler && \n (macroName == "tTag" ? theTiddler.isTagged(tag) : store.getValue(theTiddler,tag)=="true");\n\n if (mode == "checkbox") {\n // create the checkbox\n\n var cb = createTiddlyCheckbox(place, label.format([tag,title]), currentValue, function(e) {\n if (!store.tiddlerExists(title)) {\n if (config.macros.tTag.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 if (macroName == "tTag")\n store.setTiddlerTag(title,this.checked,tag);\n else // it must be tField\n store.setValue(title,tag,this.checked?"true":null);\n\n if (refreshAll) {\n story.forEachTiddler(function(title,element) {\n if (element.getAttribute("dirty") != "true") \n story.refreshTiddler(title,false,true);\n });\n }\n\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(!e) var e = window.event;\n\n if (!store.tiddlerExists(title)) {\n if (config.macros.tTag.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 if (macroName == "tTag")\n store.setTiddlerTag(title,newState,tag);\n else // it must be tField\n store.setValue(title,tag,newState?"true":null);\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 if (refreshAll) {\n story.forEachTiddler(function(title,element) {\n if (element.getAttribute("dirty") != "true") \n story.refreshTiddler(title,false,true);\n });\n }\n //store.resumeNotifications();\n\n e.cancelBubble = true;\n if(e.stopPropagation) e.stopPropagation();\n\n return false;\n });\n\n addClass(cl,theClass.replace(/ /g,''));\n\n if (currentValue) {\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\n});\n\nconfig.macros.tField = config.macros.tTag;\n\nsetStylesheet(["",\n".button.off {border-style:none;background:#fff;color:#ccc;}",\n".button.on {border-style:none;background:#ddd;color:#000;}",\n// TODO move this css elsewhere\n"#realmSelector .button.off {margin:0 0.5em;padding:0 1em;border:2px solid #aaa;background:#eee;color:#333;}", // actually reversed, ie off is "on"\n"#realmSelector .button.on {margin:0 0.5em;padding:0 1em;border:2px solid #999;background:#999;color:#ccc;}", // actually reversed, ie off is "on"\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:|$$version$$|\n| Date:|$$date$$|\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
ship Nolo books by 19th?
<<option chkSaveBackups>> SaveBackups <<saveChanges>>\nTo upgrade select MonkeyGTDUpgrade (or MonkeyGTDUpgradeTs for tiddlyspot online use) then fetch and install all tiddlers. Click Continue if you get long-running script warnings. When it's done save and reload.\n<<importTiddlers>>\n
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |\n| 5/2/2007 18:47:32 | ChinarutRuangchotvit | [[dancelabs.html|file://localhost/Users/chinarut/Desktop/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 5/2/2007 21:28:27 | ChinarutRuangchotvit | [[dancelabs.html|file://localhost/Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 5/2/2007 22:32:3 | ChinarutRuangchotvit | [[dancelabs.html|file://localhost/Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 5/2/2007 23:6:6 | ChinarutRuangchotvit | [[dancelabs.html|file://localhost/Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 6/2/2007 12:56:8 | ChinarutRuangchotvit | [[dancelabs.html|file:///Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 6/2/2007 22:41:9 | ChinarutRuangchotvit | [[dancelabs.html|file:///Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 7/2/2007 19:41:6 | ChinarutRuangchotvit | [[dancelabs.html|file:///Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 8/2/2007 18:34:51 | ChinarutRuangchotvit | [[dancelabs.html|file:///Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 9/2/2007 12:41:58 | ChinarutRuangchotvit | [[dancelabs.html|file:///Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 9/2/2007 13:43:54 | ChinarutRuangchotvit | [[dancelabs.html|file://localhost/Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 9/2/2007 17:43:20 | ChinarutRuangchotvit | [[dancelabs.html|file:///Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 10/2/2007 20:21:16 | ChinarutRuangchotvit | [[dancelabs.html|file:///Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 10/2/2007 21:40:2 | ChinarutRuangchotvit | [[dancelabs.html|file:///Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 10/2/2007 23:3:52 | ChinarutRuangchotvit | [[dancelabs.html|file:///Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 13/2/2007 13:34:33 | ChinarutRuangchotvit | [[dancelabs.html|file:///Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 14/2/2007 22:26:2 | ChinarutRuangchotvit | [[dancelabs.html|file:///Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 15/2/2007 15:15:22 | ChinarutRuangchotvit | [[dancelabs.html|file:///Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 17/2/2007 13:15:3 | ChinarutRuangchotvit | [[dancelabs.html|file:///Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 21/2/2007 8:58:9 | ChinarutRuangchotvit | [[dancelabs.html|file:///Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 22/2/2007 18:7:7 | ChinarutRuangchotvit | [[dancelabs.html|file:///Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 22/2/2007 18:9:21 | ChinarutRuangchotvit | [[dancelabs.html|file:///Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 26/2/2007 15:32:36 | ChinarutRuangchotvit | [[dancelabs.html|file:///Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 3/3/2007 6:53:59 | ChinarutRuangchotvit | [[dancelabs.html|file:///Volumes/MONKEY/dancelabs.html]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 18/3/2007 21:46:34 | ChinarutRuangchotvit | [[/|http://dancelabs.tiddlyspot.com/]] | [[store.cgi|http://dancelabs.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 18/3/2007 22:36:38 | ChinarutRuangchotvit | [[/|http://dancelabs.tiddlyspot.com/]] | [[store.cgi|http://dancelabs.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
02 258-9227
\n<div macro="showWhenTagged GTD">\n\n<div macro="showWhen tiddler.tags.contains('MainDash')">[[MainDashDash]]</div>\n<div macro="showWhen tiddler.tags.contains('Project')">[[ProjectDash]]</div>\n<div macro="showWhen tiddler.tags.contains('Context')">[[ContextDash]]</div>\n<div macro="showWhen tiddler.tags.contains('Area')">[[AreaDash]]</div>\n<div macro="showWhen tiddler.tags.contains('Realm')">[[RealmDash]]</div>\n\n<div macro="showWhen tiddler.title == 'Tickler'">[[TicklerTiddlerDash]]</div>\n<div macro="showWhen tiddler.title == 'Context'">[[ContextTiddlerDash]]</div>\n<div macro="showWhen tiddler.title == 'Realm'">[[RealmTiddlerDash]]</div>\n<div macro="showWhen tiddler.title == 'Area'">[[AreaTiddlerDash]]</div>\n<div macro="showWhen tiddler.title == 'Next'">[[NextTiddlerDash]]</div>\n<div macro="showWhen tiddler.title == 'Action'">[[ActionTiddlerDash]]</div>\n<div macro="showWhen tiddler.title == 'Project'">[[ProjectTiddlerDash]]</div>\n<div macro="showWhen tiddler.title == 'Starred'">[[StarredTiddlerDash]]</div>\n<div macro="showWhen tiddler.title == 'Process Inbox'">[[ProcessInboxTiddlerDash]]</div>\n\n</div>\n\n
\n\n<table macro="showWhen tiddler.tags.contains('GTD')" class="mToolbar" width="100%" cellspacing="0" border="0">\n\n <tbody macro="hideWhen tiddler.tags.containsAny(config.mGTD.config.GTDComponent) ||\n config.mGTD.config.GTDComponent.contains(tiddler.title) ||\n tiddler.title == 'Starred' ||\n tiddler.title == 'Process Inbox'"\n > <!-- this seems clumsy. rethink? -->\n <tr>\n <td class="label">Type:</td>\n <td><span macro="checkboxList GTDComponent"></span></td>\n </tr>\n </tbody>\n\n <tbody macro="showWhen tiddler.tags.contains('MainDash')">[[MainDashPanel]]</tbody>\n <tbody macro="showWhen tiddler.tags.contains('Realm')">[[RealmPanel]]</tbody>\n <tbody macro="showWhen tiddler.tags.contains('Tickler')">[[TicklerPanel]]</tbody>\n <tbody macro="showWhen tiddler.tags.contains('Project')">[[ProjectPanel]]</tbody>\n <tbody macro="showWhen tiddler.tags.contains('Action')">[[ActionPanel]]</tbody>\n <tbody macro="showWhen tiddler.tags.contains('Area')">[[AreaPanel]]</tbody>\n</table>\n\n\n\n
\n<!--{{{-->\n\n<div class='toolbar'>\n <span macro="showWhenTagged systemConfig">\n <span macro="toggleTag systemConfigDisable . '[[disable|systemConfigDisable]]'"></span>\n </span>\n <span style="padding:1em;"></span>\n <span macro='toolbar closeTiddler closeOthers +editTiddler deleteTiddler permalink references newHere refresh'></span>\n</div>\n\n<div class="tagglyTagged" macro="tags"></div>\n\n<div class='titleContainer'>\n <span class='title' macro='view title'></span>\n <span macro="miniTag"></span>\n <span macro="toggleTag GTD"></span>\n <span macro="showWhenTagged GTD">\n <span macro="tTag tag:Starred mode:text text:{{config.mGTD.star}}"></span>\n </span>\n</div>\n\n<div class='subtitle'>\n <span macro='view modifier link'></span>,\n <span macro="hideWhen store.getValue('MonkeyGTDSettings','mgtd.usemdy')=='true'">\n <span macro='view modified date [[DD/MM/YY]]'></span>\n (<span macro='message views.wikified.createdPrompt'></span>\n <span macro='view created date [[DD/MM/YY]]'></span>)\n </span>\n <span macro="showWhen store.getValue('MonkeyGTDSettings','mgtd.usemdy')=='true'">\n <span macro='view modified date [[MM/DD/YY]]'></span>\n (<span macro='message views.wikified.createdPrompt'></span>\n <span macro='view created date [[MM/DD/YY]]'></span>)\n </span>\n</div>\n\n<div macro="showWhenExists ViewPanelTemplate">[[ViewPanelTemplate]]</div>\n\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="hideWhenTagged GTD">\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</div>\n<div macro="showWhenTagged GTD">\n <div style="background:#ffd;padding:0.5em;margin:0.5em 0;border:1px solid #dda;" macro="showWhen tiddler.text.length > 0">\n <div style="font-size:90%;color:#996;">Notes</div>\n <div class='viewer' macro='view text wikified'></div>\n </div>\n</div>\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<!--}}}-->\n
100 new volunteers\n\n!locations\n# BaanSuanThon\n# KMUTT\n# LandmarkEducation (downtown)
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://dancelabs.tiddlyspot.com/controlpanel]] (your control panel username is //dancelabs//).\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.
# location: LumpiniPark\n# speakers\n# water\n# budget\n# guestlist\n# organizer\n# directions\n# invitation/flyer
concern: not getting an email response\n\n* itemized sales receipt\n* payment method (not citi!)\n
| tiddlyspot password:|<<option pasUploadPassword>>|\n| site management:|<<upload http://dancelabs.tiddlyspot.com/store.cgi index.html . . dancelabs>>//(requires tiddlyspot password)//<<br>>[[control panel|http://dancelabs.tiddlyspot.com/controlpanel]], [[download (go offline)|http://dancelabs.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]]|