Joy question about Enterprise account tier sfdc records not having a conf_match_code\n Made a change to lead_flow to look directly at mart_ent_match for the step (should take care of some)\n Emailed Mona for explaination of why some lead_flow_output records have an ent account but mart_ent_match does not\n 5/10/2011 7:29:05 PM added a new ent_match_conf_cd of 'User Assigned' in lead_flow.xml for any ent account without a conf_cd\n\naa\n\n
Need to evaluate the change\nLoaded the spreadsheet provided and compared the exist values to those in the sheet. Changes were already accounted for.\n
The tiddler '14 August 2011' doesn't yet exist. Double-click to create it
If you open any Tiddler that is Tagged as "Tasks", you will notice two checkboxes in the Tiddler's Toolbar. The first is labeled "Urgent" and the second is labeled "Completed". These leverage the [[ToggleTagMacro|Plugin ToggleTagMacro]] and [[RunMacroIfTagged|Plugin RunMacroIfTagged]] Plugins. \n\nFirst, install both Plugins, then save and reload your TiddlyWiki file. \n\nNext, Open your ViewTemplate Tiddler. (If you have never edited it before, then it will exist as a "Shadow" Tiddler.) \n\nIn any case, open it and replace the following code:\n{{{\n<div macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump'></div>\n}}}\nwith the following code:\n{{{\n<div class="toolbar">\n<!-- experimental stuff. puts checkboxes in toolbar -->\n<span style="padding-right:0.75em;" class='fakeButton' macro="runMacroIfTagged Tasks toggleTag Urgent"></span>\n<span style="padding-right:0.75em;" class='fakeButton' macro="runMacroIfTagged Tasks toggleTag Completed"></span>\n<span macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump'></span>\n</div>\n}}}\nThis adds the two checkboxes before the other buttons.\n\nNow, when you open any Tiddler Tagged as "Tasks", both the "Urgent" and "Completed" checkboxes will appear in that Tiddler's Toolbar. \n\nWhen you want to mark a Task as complete, just tick the checkbox next to "Complete". Notice that the "tags:" box in the Tiddler auto-updates! The Task will now disappear from the [[Tasks - Pending]] view and appear in the [[Tasks - Completed]] view! \n\nIf you want to mark the Task as urgent, just tick the checkbox next to "Urgent". ("Urgent" Tasks will appear in the "Urgent" Tab in the [[Tasks - Multi-Tabs]] view.) \n\nYou can always "undo" the states by unchecking the checkboxes.\n\nOne important issue: It appears that these Plugins do not flag the Tiddler as "changed" so be sure to save your TW file after checking the checkboxes. This is most notable if you make changes and then try to navigate off to another Web sits. Usually, TW alerts you to save your changes, but in this case, it does not. I'm going to contact the Plugin developer to see if that can be fixed.
These are caused by matches to SFDC.SFDC_ACCOUNTS, FOCUSED COMMERCIAL, or Revenue data match
Campaign in SFDC not updated because the EST_LEADS = 0\n Changed the login of the sql (mrm_approved_campaigns) to send if in sfdcdata.sfdc_campaigns
Run the audit and send to Cheryl on Monday 5/16\n\n*checked on Saturday 5/14 and reports indicated the records went to SFDC
This was a problem with the dashboard. Megan has fixed this.
Had to have Barbara load these with existing ID's and then change them in the repor01.cold_call table to the new numbers.\nThis should work when the latest MRM id's are pulled from Aprimo at 4:45pm ET\n[X] Remove cold_call records for 041720 (too big and will be broken down further)\n[X] Load spreadsheet sent from Cheryl (5/13/2011 8:43:43 PM)\n
[[Tasks - Multi-Tabs]]
[[Tasks - All]]\n[[Tasks - Multi-Tabs]]\n[[TiddlyWikiTasks]]\n[[Welcome to TiddlyWikiTasks!]]\n
A Task is simply a Tiddler with a Tag of "Tasks" that you edit as you would any other Tiddler. When a Task is completed, it gets tagged with a "Completed" Tag. TiddlyWikiTasks provides a list of [[Tasks - Pending]] and a list of [[Tasks - Completed]], each listing the associated Tiddlers. Each Task in each list is preceded by a Checkbox. Clicking a Task's Title opens the associated Tiddler. Clicking a Task's Checkbox, if unchecked, will mark the Task Completed, remove it from the [[Tasks - Pending]] list, and add it to the [[Tasks - Completed]] list. Likewise, clicking a Task's Checkbox, if checked, will remove the Completed Tag, remove the Task from the [[Tasks - Completed]] list, and add it to the [[Tasks - Pending]] list. (Note that curently, there is no automatic "refresh" that immediately updates the list. Clicking on the other Tab will update the view of both lists. Hopefully, this will be addressed in the future.)\n\nYou can see what TiddlyWikiTasks does by clicking [[Tasks - All]] which is Tiddler containing both [[Tasks - Pending]] and [[Tasks - Completed]] lists presented in a Tabbed view. Clicking a Tab displays the associated Tasks.\n
The easiest way to get started with TiddlyWikiTasks is to simply download this file by right-clicking [[here|http://TiddlyWikiTips.com/TiddlyWikiTasks.html]] and saving the file to your local PC. You can then play with it and tailor it to your heart's content. \n\nAlternately, you can manually create TiddlyWikiTasks by installing the [[Plugin Checkbox]] and [[Plugin ForEachTiddler]] Plugins and following the instructions below to create the required List and View Tiddlers.\n\nOnce you have TiddlyWikiTasks set up, go ahead and customize it to your liking. Typical Tiddlers to modify include the DefaultTiddlers, MainMenu, PageTemplate, SiteSubtitle, SiteTitle, SiteUrl, StyleSheet, [[Styles HorizontalMainMenu]], [[Styles TagglyTagging]], and ViewTemplate Tiddlers. Have fun!
Duplicate upload.... removed (29867) .... kept (29865)
<<defaultHome>><<newTiddler>><<tag Plugins>><<tag Edit>>
To create a TiddlyWikiTasks file, you first need to install the required [[Plugins]]. Once that is done, you need to create the three required Tiddlers to manage your Tasks:\n!!Creating the List and View Tiddlers\nYou need to create at least three new Tiddlers: Two "list" Tiddlers called [[Tasks - Pending]] and [[Tasks - Completed]], and a "view" Tiddler called [[Tasks - All]].\n\n//Note: What you actually call these Tiddlers is completely up to you. Just be aware that their Titles may be referenced in other Tiddlers such as the [[Tasks - All]] Tiddler, so be sure you use the same Titles throughout your setup.//\n\n1. Click on "new tiddler" on the ~SideBar and create the following Tiddler:\n---------------\n''Title:'' Tasks - Pending\n''Body:''\n{{{\n~~open: [[all|Tasks - All]] | [[pending|Tasks - Pending]] | [[completed|Tasks - Completed]]~~\n<<forEachTiddler\n where 'tiddler.tags.contains("Tasks") &&\n ! tiddler.tags.contains("Completed")'\n write "'[X('+tiddler.title+':Completed)] [['+tiddler.title+'|'+tiddler.title+']]\sn'">> \n}}}\n\n2. Next, click on "new tiddler" on the ~SideBar and create the following Tiddler:\n\n''Title:'' Tasks - Completed\n''Body:''\n{{{\n~~open: [[all|Tasks - All]] | [[pending|Tasks - Pending]] | [[completed|Tasks - Completed]]~~\n<<forEachTiddler\n where 'tiddler.tags.contains("Completed")'\n sortBy 'tiddler.title'>>\n}}}\n\n3. Finally, click on "new tiddler" on the ~SideBar and create the following Tiddler:\n\n''Title:'' Tasks - All\n''Body:''\n{{{\n~~open: [[all|Tasks - All]] | [[pending|Tasks - Pending]] | [[completed|Tasks - Completed]]~~\n<<tabs txtFavourite\nPending Pending "Tasks - Pending"\nCompleted Completed "Tasks - Completed"\n>>~~open [[Tasks - Pending]] | [[Tasks - Completed]]~~\n}}}\n\nUpdate your DefaultTiddlers Tiddler to auto-load, say, your [[Tasks - All]] Tiddler. \n\nAdding a new Task is as simple as creating a new Tiddler by clicking on "new tiddler" (either in the MainMenu or on the [[StatusBar|StatusBarOptions]]), editing the text of your Task, and adding a Tag of "Tasks". As mentioned above, if you want to add Simple Checkboxes within your Tiddler, just include the checkbox code "{{{[_]}}}" or "{{{[X]}}}" (without the quotes) in your text.\n\nIt's really that simple!\n
Oracle error on load.\n\nOracle.DataAccess.Client.OracleException ORA-01461: can bind a LONG value only for insert into a LONG column at System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount) at System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount) at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping) at Oracle.DataAccess.Client.OracleDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping) at System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping) at System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable) at cidb_main.bulkupload.eventupload.SaveUploadData(DataSet& dsExcel, Boolean blnAppendNotes, Boolean blnAppendStdQues, Boolean blnAppendTracks)
Review email from Joy and test the new
<div class='header' macro='gradient vert #000 #069'>\n <div class='headerShadow'>\n <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>\n <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n </div>\n <div class='headerForeground'>\n <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n </div>\n <div id='topMenu' refresh='content' tiddler='MainMenu'></div>\n</div>\n<div id='sidebar'>\n <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n <div id='messageArea'></div>\n <div id='tiddlerDisplay'></div>\n</div>
/***\n''CheckboxPlugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman\nsource: http://www.elsdesign.com/tiddlywiki/#CheckboxPlugin \nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nAdd checkboxes to your tiddler content. Checkbox states can be preserved in the document by either automatically modifying the tiddler content or setting/removing tags on specified tiddlers, or they may be saved as local cookies by assigning an optional 'chkID' to the checkbox. Add custom javascript for programmatic initialization and onClick handling for any checkbox. Also provides access to checkbox DOM element data and tracks the checkbox state in TiddlyWiki's config.options[] internal data.\n\n!!!!!Usage\n<<<\nThe checkbox syntax, including all optional parameters, is contained inside a matched set of [ and ] brackets.\n{{{ [x=id(title:tag){init_script}{onclick_script}] }}}\n\nAn alternative syntax lets you place the optional parameters ''outside'' the [ and ] brackets, and is provided for backward-compatibility with existing content that may include checkbox definitions based on earlier releases of this plugin:\n{{{ [x]=id(title:tag){init_script}{onclick_script} }}}\n\n//{{{\n[ ]or[_] and [x]or[X]\n//}}}\nSimple checkboxes. The current unchecked/checked state is indicated by the character between the {{{[}}} and {{{]}}} brackets ("_" means unchecked, "X" means checked). When you click on a checkbox, the current state is retained by directly modifying the tiddler content to place the corresponding "_" or "X" character in between the brackets\n//{{{\n[x=id]\n//}}}\nAssign an optional ID to the checkbox so you can use {{{document.getElementByID("id")}}} to manipulate the checkbox DOM element, as well as tracking the current checkbox state in {{{config.options["id"]}}}. If the ID starts with "chk" the checkbox state will also be saved in a cookie, so it can be automatically restored whenever the checkbox is re-rendered (overrides any default {{{[x]}}} or {{{[_]}}} value). If a cookie value is kept, the "_" or "X" character in the tiddler content remains unchanged, and is only applied as the default when a cookie-based value is not currently defined.\n//{{{\n[x(title:tag)]\n//}}}\nInitializes and tracks the current checkbox state by setting or removing ("TogglyTagging") a particular tag value from a specified tiddler. If you omit the tiddler title (and the ":" separator), the specified tag is assigned to the current tiddler. If you omit the tag value, as in {{{(title:)}}}, the default tag, {{{checked}}}, is assumed. Omitting both the title and tag, {{{()}}}, tracks the checkbox state by setting the "checked" tag on the current tiddler. When tag tracking is used, the "_" or "X" character in the tiddler content remains unchanged, and is not used to set or track the checkbox state. If a tiddler title named in the tag does not exist, the checkbox state defaults to //unselected//. When the checkbox is subsequently changed to //selected//, it will automatically (and silently) create the missing tiddler and then add the tag to it.\n//{{{\n[x{javascript}{javascript}]\n//}}}\nYou can define optional javascript code segments to add custom initialization and/or 'onClick' handling to a checkbox. The current checkbox state (and it's other DOM attributes) can be set or read from within these code segments by reference to the default context-object, 'this'.\n\nThe first code segment will be executed when the checkbox is initially displayed, so that you can programmatically determine it's starting checked/unchecked state. The second code segment (if present) is executed whenever the checkbox is clicked, so that you can perform programmed responses or intercept and override the checkbox state based on complex logic using the TW core API or custom functions defined in plugins (e.g. testing a particular tiddler title to see if certain tags are set or setting some tags when the checkbox is clicked).\n\nNote: if you want to use the default checkbox initialization processing with a custom onclick function, use this syntax: {{{ [x=id{}{javascript}] }}} \n<<<\n!!!!!Examples\n<<<\n//{{{\n[X] label\n[_] label\n//}}}\nchecked and unchecked static default values\n[X] label\n[X] label\n\n//{{{\n[_=demo] label\n//}}}\ndocument-based value (id='demo', no cookie)\n[X=demo] label\n\n//{{{\n[_=chkDemo] label\n//}}}\ncookie-based value (id='chkDemo')\n[_=chkDemo] label\n\n//{{{\n[_(CheckboxPlugin:demotag)] toggle 'demotag'\n//}}}\ntag-based value (TogglyTagging)\n[_(CheckboxPlugin:demotag)] toggle 'demotag'\n<html><a href="javascript:;" onclick="alert(store.getTiddler(story.findContainingTiddler(this).id.substr(7)).tags)">click to view tags</a></html>\n\n//{{{\n[X{this.checked=true}{alert(this.checked?"on":"off")}] message box with checkbox state\n//}}}\ncustom init and onClick functions\n[X{this.checked=true}{alert(this.checked?"on":"off")}] message box with checkbox state\n\nRetrieving option values:\nconfig.options['demo']=<script>return config.options['demo']?"true":"false";</script>\nconfig.options['chkDemo']=<script>return config.options['chkDemo']?"true":"false";</script>\n\n!!!!!Installation\nimport (or copy/paste) the following tiddlers into your document:\n''CheckboxPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n++++[2006.01.10 - 2.0.1]\nwhen toggling tags, force refresh of the 'tag tiddler'. For example, if you toggle the "systemConfig" tag on a plugin, the corresponding "systemConfig" TIDDLER will be automatically refreshed (if currently displayed), so that the 'tagged' list in that tiddler will remain up-to-date.\n===\n\n++++[2006.01.04 - 2.0.0]\n update for ~TW2.0\n===\n\n++++[2005.12.27 - 1.1.2]\n Fix lookAhead regExp handling for """[x=id]""", which had been including the "]" in the extracted ID. \n Added check for "chk" prefix on ID before calling saveOptionCookie()\n===\n\n++++[2005.12.26 - 1.1.2]\n Corrected use of toUpperCase() in tiddler re-write code when comparing """[X]""" in tiddler content with checkbox state. Fixes a problem where simple checkboxes could be set, but never cleared.\n===\n\n++++[2005.12.26 - 1.1.0]\n Revise syntax so all optional parameters are included INSIDE the [ and ] brackets. Backward compatibility with older syntax is supported, so content changes are not required when upgrading to the current version of this plugin. Based on a suggestion by GeoffSlocock\n===\n\n++++[2005.12.25 - 1.0.0]\n added support for tracking checkbox state using tags ("TogglyTagging")\n Revised version number for official post-beta release.\n===\n\n+++[2005.12.08 - 0.9.3]\n support separate 'init' and 'onclick' function definitions.\n===\n\n+++[2005.12.08 - 0.9.2]\n clean up lookahead pattern\n===\n\n+++[2005.12.07 - 0.9.1]\n only update tiddler source content if checkbox state is actually different. Eliminates unnecessary tiddler changes (and 'unsaved changes' warnings)\n===\n\n+++[2005.12.07 - 0.9.0]\n initial BETA release\n===\n<<<\n!!!!!Credits\n<<<\nThis feature was created by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.CheckboxPlugin = {major: 2, minor: 0, revision:1 , date: new Date(2006,1,10)};\n//}}}\n\n// // 1.2.x compatibility\n//{{{\nif (!window.story) window.story=window;\nif (!store.getTiddler) store.getTiddler=function(title){return store.tiddlers[title]}\nif (!store.addTiddler) store.addTiddler=function(tiddler){store.tiddlers[tiddler.title]=tiddler}\nif (!store.deleteTiddler) store.deleteTiddler=function(title){delete store.tiddlers[title]}\n//}}}\n\n//{{{\nconfig.formatters.push( {\n name: "checkbox",\n match: "\s\s[[xX_ ][\s\s]\s\s=\s\s(\s\s{]",\n lookahead: "\s\s[([xX_ ])(\s\s])?(=[^\s\ss\s\s(\s\s]{]+)?(\s\s([^\s\s)]*\s\s))?({[^}]*})?({[^}]*})?(\s\s])?",\n handler: function(w)\n {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n // get params\n var checked=lookaheadMatch[1];\n var id=lookaheadMatch[3];\n var tag=lookaheadMatch[4];\n var fn_init=lookaheadMatch[5];\n var fn_click=lookaheadMatch[6];\n // create checkbox element\n var c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick=onClickCheckbox;\n c.srcpos=w.matchStart+1; // remember location of "X"\n w.output.appendChild(c);\n // set default state\n c.checked=(checked.toUpperCase()=="X");\n // get/set state by ID\n if (id) {\n c.id=id.substr(1); // trim off leading "="\n if (config.options[c.id]!=undefined)\n c.checked=config.options[c.id];\n else\n config.options[c.id]=c.checked;\n }\n // get/set state by tag\n if (tag) {\n c.tiddler=story.findContainingTiddler(w.output).id.substr(7);\n c.tag=tag.substr(1,tag.length-2).trim(); // trim off parentheses\n var pos=c.tag.indexOf(":");\n if (pos==0) { c.tag=tag.substr(1); }\n if (pos>0) { c.tiddler=c.tag.substr(0,pos); c.tag=c.tag.substr(pos+1); }\n if (!c.tag.length) c.tag="checked";\n var t=store.getTiddler(c.tiddler);\n c.checked = (t && t.tags)?(t.tags.find(c.tag)!=null):false;\n }\n if (fn_init) c.fn_init=fn_init.trim().substr(1,fn_init.length-2); // trim off surrounding { and } delimiters\n if (fn_click) c.fn_click=fn_click.trim().substr(1,fn_click.length-2);\n c.onclick(); // compute initial state and save in tiddler/config/cookie\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n }\n)\n//}}}\n\n//{{{\nfunction onClickCheckbox()\n{\n if (this.fn_init)\n // custom function hook to set initial state (run only once)\n { try { eval(this.fn_init); this.fn_init=null; } catch(e) { displayMessage("Checkbox init error: "+e.toString()); } }\n else if (this.fn_click)\n // custom function hook to override or react to changes in checkbox state\n { try { eval(this.fn_click) } catch(e) { displayMessage("Checkbox click error: "+e.toString()); } }\n if (this.id)\n // save state in config AND cookie (only when ID starts with 'chk')\n { config.options[this.id]=this.checked; if (this.id.substr(0,3)=="chk") saveOptionCookie(this.id); }\n if ((!this.id || this.id.substr(0,3)!="chk") && !this.tag) {\n // save state in tiddler content only if not using cookie or tag tracking\n var t=store.getTiddler(story.findContainingTiddler(this).id.substr(7));\n if (this.checked!=(t.text.substr(this.srcpos,1).toUpperCase()=="X")) { // if changed\n t.set(null,t.text.substr(0,this.srcpos)+(this.checked?"X":"_")+t.text.substr(this.srcpos+1),null,null,t.tags);\n store.setDirty(true);\n }\n }\n if (this.tag) {\n var t=store.getTiddler(this.tiddler);\n if (!t) { t=(new Tiddler()); t.set(this.tiddler,"",config.options.txtUserName,(new Date()),null); store.addTiddler(t); } \n var tagged=(t.tags && t.tags.find(this.tag)!=null);\n if (this.checked && !tagged) { t.tags.push(this.tag); store.setDirty(true); }\n if (!this.checked && tagged) { t.tags.splice(t.tags.find(this.tag),1); store.setDirty(true); }\n story.refreshTiddler(this.tag,null,true); // if "tag tiddler" is showing, force a display update\n }\n return true;\n}\n//}}}\n
function onClickDefaultHome(e)\n{\n story.closeAllTiddlers();\n config.options.txtDefaultTiddlers = "";\n saveOptionCookie('txtDefaultTiddlers');\n var start = store.getTiddlerText("DefaultTiddlers");\n if(start)\n story.displayTiddlers(null,start.readBracketedList());\n}\n\nconfig.macros["defaultHome"] = {label: "Home", prompt: "Show the default tiddlers", title: "Home"};\nconfig.macros.defaultHome.handler = function(place) {createTiddlyButton(place,this.label,this.prompt,onClickDefaultHome);\n}\n
/***\n|''Name:''|ForEachTiddlerPlugin|\n|''Version:''|1.0.4 (2006-01-06)|\n|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|\n|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|\n|''Licence:''|[[BSD open source license]]|\n|''Macros:''|[[ForEachTiddlerMacro]] v1.0.4|\n|''TiddlyWiki:''|1.2.38+, 2.0|\n|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|\n!Description\n\nCreate customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.\n\n''Syntax:'' \n|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|\n|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|\n|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|\n|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|\n|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|\n|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]] is used.|\n|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|\n|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|\n\nSee details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].\n\n!Revision history\n* v1.0.4 (2006-01-06)\n** Support TiddlyWiki 2.0\n* v1.0.3 (2005-12-22)\n** Features: \n*** Write output to a file supports multi-byte environments (Thanks to Bram Chen) \n*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)\n** Enhancements:\n*** Improved error messages on InternetExplorer.\n* v1.0.2 (2005-12-10)\n** Features: \n*** context object also holds reference to store (TiddlyWiki)\n** Fixed Bugs: \n*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)\n* v1.0.1 (2005-12-08)\n** Features: \n*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".\n*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.\n*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).\n*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .\n*** Improved script evaluation (for where/sort clause and write scripts).\n* v1.0.0 (2005-11-20)\n** initial version\n\n!Code\n***/\n//{{{\n\n//============================================================================\n//============================================================================\n// ForEachTiddlerPlugin\n//============================================================================\n//============================================================================\n\nversion.extensions.ForEachTiddlerPlugin = {major: 1, minor: 0, revision: 4, date: new Date(2006,1,6), source: "http://tiddlywiki.abego-software.de/#ForEachTiddlergPlugin"};\n\n// For backward compatibility with TW 1.2.x\n//\nif (!TiddlyWiki.prototype.forEachTiddler) {\n TiddlyWiki.prototype.forEachTiddler = function(callback) {\n for(var t in this.tiddlers) {\n callback.call(this,t,this.tiddlers[t]);\n };\n }\n}\n\n//============================================================================\n// forEachTiddler Macro\n//============================================================================\n\nversion.extensions.forEachTiddler = {major: 1, minor: 0, revision: 4, date: new Date(2006,1,6), provider: "http://tiddlywiki.abego-software.de"};\n\n// ---------------------------------------------------------------------------\n// Configurations and constants \n// ---------------------------------------------------------------------------\n\nconfig.macros.forEachTiddler = {\n // Standard Properties\n label: "forEachTiddler",\n prompt: "Perform actions on a (sorted) selection of tiddlers",\n\n // actions\n actions: {\n addToList: {},\n write: {}\n }\n}\n\n// ---------------------------------------------------------------------------\n// The forEachTiddler Macro Handler \n// ---------------------------------------------------------------------------\n\nconfig.macros.forEachTiddler.handler = function(place,macroName,params) {\n // config.macros.forEachTiddler.traceMacroCall(place,macroName,params);\n\n // --- Parsing ------------------------------------------\n\n var i = 0; // index running over the params\n // Parse the "in" clause\n var tiddlyWikiPath = undefined;\n if ((i < params.length) && params[i] == "in") {\n i++;\n if (i >= params.length) {\n this.handleError(place, "TiddlyWiki path expected behind 'in'.");\n return;\n }\n tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the where clause\n var whereClause ="true";\n if ((i < params.length) && params[i] == "where") {\n i++;\n whereClause = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the sort stuff\n var sortClause = null;\n var sortAscending = true; \n if ((i < params.length) && params[i] == "sortBy") {\n i++;\n if (i >= params.length) {\n this.handleError(place, "sortClause missing behind 'sortBy'.");\n return;\n }\n sortClause = this.paramEncode(params[i]);\n i++;\n\n if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {\n sortAscending = params[i] == "ascending";\n i++;\n }\n }\n\n // Parse the script\n var scriptText = null;\n if ((i < params.length) && params[i] == "script") {\n i++;\n scriptText = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the action. \n // When we are already at the end use the default action\n var actionName = "addToList";\n if (i < params.length) {\n if (!config.macros.forEachTiddler.actions[params[i]]) {\n this.handleError(place, "Unknown action '"+params[i]+"'.");\n return;\n } else {\n actionName = params[i]; \n i++;\n }\n } \n \n // Get the action parameter\n // (the parsing is done inside the individual action implementation.)\n var actionParameter = params.slice(i);\n\n\n // --- Processing ------------------------------------------\n try {\n this.performMacro({\n place: place, \n whereClause: whereClause, \n sortClause: sortClause, \n sortAscending: sortAscending, \n actionName: actionName, \n actionParameter: actionParameter, \n scriptText: scriptText, \n tiddlyWikiPath: tiddlyWikiPath});\n\n } catch (e) {\n this.handleError(place, e);\n }\n}\n\n// Returns an object with properties "tiddlers" and "context".\n// tiddlers holds the (sorted) tiddlers selected by the parameter,\n// context the context of the execution of the macro.\n//\n// The action is not yet performed.\n//\n// @parameter see performMacro\n//\nconfig.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {\n\n var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath);\n\n var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;\n context["tiddlyWiki"] = tiddlyWiki;\n \n // Get the tiddlers, as defined by the whereClause\n var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);\n context["tiddlers"] = tiddlers;\n\n // Sort the tiddlers, when sorting is required.\n if (parameter.sortClause) {\n this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);\n }\n\n return {tiddlers: tiddlers, context: context};\n}\n\n// Returns the (sorted) tiddlers selected by the parameter.\n//\n// The action is not yet performed.\n//\n// @parameter see performMacro\n//\nconfig.macros.forEachTiddler.getTiddlers = function(parameter) {\n return this.getTiddlersAndContext(parameter).tiddlers;\n}\n\n// Performs the macros with the given parameter.\n//\n// @param parameter holds the parameter of the macro as separate properties.\n// The following properties are supported:\n//\n// place\n// whereClause\n// sortClause\n// sortAscending\n// actionName\n// actionParameter\n// scriptText\n// tiddlyWikiPath\n//\n// All properties are optional. \n// For most actions the place property must be defined.\n//\nconfig.macros.forEachTiddler.performMacro = function(parameter) {\n var tiddlersAndContext = this.getTiddlersAndContext(parameter);\n\n // Perform the action\n var actionName = parameter.actionName ? parameter.actionName : "addToList";\n var action = config.macros.forEachTiddler.actions[actionName];\n if (!action) {\n this.handleError(parameter.place, "Unknown action '"+actionName+"'.");\n return;\n }\n\n var actionHandler = action.handler;\n actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);\n}\n\n// ---------------------------------------------------------------------------\n// The actions \n// ---------------------------------------------------------------------------\n\n// Internal.\n//\n// --- The addToList Action -----------------------------------------------\n//\nconfig.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {\n // Parse the parameter\n var p = 0;\n\n // Check for extra parameters\n if (parameter.length > p) {\n config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);\n return;\n }\n\n // Perform the action.\n var list = document.createElement("ul");\n place.appendChild(list);\n for (var i = 0; i < tiddlers.length; i++) {\n var tiddler = tiddlers[i];\n var listItem = document.createElement("li")\n list.appendChild(listItem);\n createTiddlyLink(listItem, tiddler.title, true);\n }\n}\n\n// Internal.\n//\n// --- The write Action ---------------------------------------------------\n//\nconfig.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {\n // Parse the parameter\n var p = 0;\n if (p >= parameter.length) {\n this.handleError(place, "Missing expression behind 'write'.");\n return;\n }\n\n var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);\n p++;\n\n // Parse the "toFile" option\n var filename = null;\n var lineSeparator = undefined;\n if ((p < parameter.length) && parameter[p] == "toFile") {\n p++;\n if (p >= parameter.length) {\n this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");\n return;\n }\n \n filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));\n p++;\n if ((p < parameter.length) && parameter[p] == "withLineSeparator") {\n p++;\n if (p >= parameter.length) {\n this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");\n return;\n }\n lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);\n p++;\n }\n }\n \n // Check for extra parameters\n if (parameter.length > p) {\n config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);\n return;\n }\n\n // Perform the action.\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);\n var count = tiddlers.length;\n var text = "";\n for (var i = 0; i < count; i++) {\n var tiddler = tiddlers[i];\n text += func(tiddler, context, count, i);\n }\n \n if (filename) {\n if (lineSeparator != undefined) {\n lineSeparator = lineSeparator.replace(/\s\sn/mg, "\sn").replace(/\s\sr/mg, "\sr");\n text = text.replace(/\sn/mg,lineSeparator);\n }\n saveFile(filename, convertUnicodeToUTF8(text));\n } else {\n var wrapper = createTiddlyElement(place, "span");\n wikify(text, wrapper);\n }\n}\n\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// Internal.\n//\nconfig.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam) {\n return {\n place : placeParam, \n whereClause : whereClauseParam, \n sortClause : sortClauseParam, \n sortAscending : sortAscendingParam, \n script : scriptText,\n actionName : actionNameParam, \n actionParameter : actionParameterParam,\n tiddlyWikiPath : tiddlyWikiPathParam\n }\n}\n\n// Internal.\n//\n// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of \n// the given path.\n//\nconfig.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {\n if (!idPrefix) {\n idPrefix = "store";\n }\n \n // Read the content of the given file\n var content = loadFile(this.getLocalPath(path));\n if(content == null) {\n throw "TiddlyWiki '"+path+"' not found.";\n }\n \n // Locate the storeArea div's\n var posOpeningDiv = content.indexOf(startSaveArea);\n var posClosingDiv = content.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1)) {\n throw "File '"+path+"' is not a TiddlyWiki.";\n }\n var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);\n \n // Create a "div" element that contains the storage text\n var myStorageDiv = document.createElement("div");\n myStorageDiv.innerHTML = storageText;\n myStorageDiv.normalize();\n \n // Create all tiddlers in a new TiddlyWiki\n // (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)\n var tiddlyWiki = new TiddlyWiki();\n var store = myStorageDiv.childNodes;\n for(var t = 0; t < store.length; t++) {\n var e = store[t];\n var title = null;\n if(e.getAttribute)\n title = e.getAttribute("tiddler");\n if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)\n title = e.id.substr(lenPrefix);\n if(title && title != "") {\n var tiddler = tiddlyWiki.createTiddler(title);\n tiddler.loadFromDiv(e,title);\n }\n }\n tiddlyWiki.dirty = false;\n\n return tiddlyWiki;\n}\n\n\n \n// Internal.\n//\n// Returns a function that has a function body returning the given javaScriptExpression.\n// The function has the parameters:\n// \n// (tiddler, context, count, index)\n//\nconfig.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {\n var script = context["script"];\n var functionText = "theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";\n var fullText = (script ? script+";" : "")+functionText;\n return eval(fullText);\n}\n\n// Internal.\n//\nconfig.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {\n var result = [];\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);\n tiddlyWiki.forEachTiddler(function(title,tiddler) {\n if (func(tiddler, context, undefined, undefined)) {\n result.push(tiddler);\n }\n });\n return result;\n}\n\n// Internal.\n//\nconfig.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {\n var message = "Extra parameter behind '"+actionName+"':";\n for (var i = firstUnusedIndex; i < parameter.length; i++) {\n message += " "+parameter[i];\n }\n this.handleError(place, message);\n}\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {\n var result = \n (tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) \n ? 0\n : (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)\n ? -1 \n : +1; \n return result;\n}\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {\n var result = \n (tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) \n ? 0\n : (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)\n ? +1 \n : -1; \n return result;\n}\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {\n // To avoid evaluating the sortClause whenever two items are compared \n // we pre-calculate the sortValue for every item in the array and store it in a \n // temporary property ("forEachTiddlerSortValue") of the tiddlers.\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);\n var count = tiddlers.length;\n for (var i = 0; i < count; i++) {\n var tiddler = tiddlers[i];\n tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);\n }\n\n // Do the sorting\n tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);\n\n // Delete the temporary property that holds the sortValue. \n for (var i = 0; i < tiddlers.length; i++) {\n delete tiddlers[i].forEachTiddlerSortValue;\n }\n}\n\n\n// Internal.\n//\nconfig.macros.forEachTiddler.trace = function(message) {\n displayMessage(message);\n}\n\n// Internal.\n//\nconfig.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {\n var message ="<<"+macroName;\n for (var i = 0; i < params.length; i++) {\n message += " "+params[i];\n }\n message += ">>";\n displayMessage(message);\n}\n\n\n// Internal.\n//\n// Creates an element that holds an error message\n// \nconfig.macros.forEachTiddler.createErrorElement = function(place, exception) {\n var message = (exception.description) ? exception.description : exception.toString();\n return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);\n}\n\n// Internal.\n//\n// @param place [may be null]\n//\nconfig.macros.forEachTiddler.handleError = function(place, exception) {\n if (place) {\n this.createErrorElement(place, exception);\n } else {\n throw exception;\n }\n}\n\n// Internal.\n//\n// Encodes the given string.\n//\n// Replaces \n// "$))" to ">>"\n// "$)" to ">"\n//\nconfig.macros.forEachTiddler.paramEncode = function(s) {\n var reGTGT = new RegExp("\s\s$\s\s)\s\s)","mg");\n var reGT = new RegExp("\s\s$\s\s)","mg");\n return s.replace(reGTGT, ">>").replace(reGT, ">");\n}\n\n// Internal.\n//\n// Returns the given original path (that is a file path, starting with "file:")\n// as a path to a local file, in the systems native file format.\n//\n// Location information in the originalPath (i.e. the "#" and stuff following)\n// is stripped.\n// \nconfig.macros.forEachTiddler.getLocalPath = function(originalPath) {\n // Remove any location part of the URL\n var hashPos = originalPath.indexOf("#");\n if(hashPos != -1)\n originalPath = originalPath.substr(0,hashPos);\n // Convert to a native file format assuming\n // "file:///x:/path/path/path..." - pc local file --> "x:\spath\spath\spath..."\n // "file://///server/share/path/path/path..." - FireFox pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n // "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."\n // "file://server/share/path/path/path..." - pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n var localPath;\n if(originalPath.charAt(9) == ":") // pc local file\n localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file://///") == 0) // FireFox pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file:///") == 0) // mac/unix local file\n localPath = unescape(originalPath.substr(7));\n else if(originalPath.indexOf("file:/") == 0) // mac/unix local file\n localPath = unescape(originalPath.substr(5));\n else // pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\s\s"); \n return localPath;\n}\n\n// ---------------------------------------------------------------------------\n// Stylesheet Extensions (may be overridden by local StyleSheet)\n// ---------------------------------------------------------------------------\n//\nsetStylesheet(\n ".forEachTiddlerError{color: #ffffff;background-color: #880000;}",\n "forEachTiddler");\n\n//============================================================================\n// End of forEachTiddler Macro\n//============================================================================\n\n\n//============================================================================\n// String.startsWith Function\n//============================================================================\n//\n// Returns true if the string starts with the given prefix, false otherwise.\n//\nversion.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.startsWith = function(prefix) {\n var n = prefix.length;\n return (this.length >= n) && (this.slice(0, n) == prefix);\n}\n\n\n\n//============================================================================\n// String.endsWith Function\n//============================================================================\n//\n// Returns true if the string ends with the given suffix, false otherwise.\n//\nversion.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.endsWith = function(suffix) {\n var n = suffix.length;\n return (this.length >= n) && (this.right(n) == suffix);\n}\n\n\n//============================================================================\n// String.contains Function\n//============================================================================\n//\n// Returns true when the string contains the given substring, false otherwise.\n//\nversion.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.contains = function(substring) {\n return this.indexOf(substring) >= 0;\n}\n\n//============================================================================\n// Array.indexOf Function\n//============================================================================\n//\n// Returns the index of the first occurance of the given item in the array or \n// -1 when no such item exists.\n//\n// @param item [may be null]\n//\nversion.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.indexOf = function(item) {\n for (var i = 0; i < this.length; i++) {\n if (this[i] == item) {\n return i;\n }\n }\n return -1;\n}\n\n//============================================================================\n// Array.contains Function\n//============================================================================\n//\n// Returns true when the array contains the given item, otherwise false. \n//\n// @param item [may be null]\n//\nversion.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.contains = function(item) {\n return (this.indexOf(item) >= 0);\n}\n\n//============================================================================\n// Array.containsAny Function\n//============================================================================\n//\n// Returns true when the array contains at least one of the elements \n// of the item. Otherwise (or when items contains no elements) false is returned.\n//\nversion.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.containsAny = function(items) {\n for(var i = 0; i < items.length; i++) {\n if (this.contains(items[i])) {\n return true;\n }\n }\n return false;\n}\n\n\n//============================================================================\n// Array.containsAll Function\n//============================================================================\n//\n// Returns true when the array contains all the items, otherwise false.\n// \n// When items is null false is returned (even if the array contains a null).\n//\n// @param items [may be null] \n//\nversion.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.containsAll = function(items) {\n for(var i = 0; i < items.length; i++) {\n if (!this.contains(items[i])) {\n return false;\n }\n }\n return true;\n}\n\n\n\n//}}}\n\n\n/***\n!Licence and Copyright\nCopyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of abego Software nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n***/\n
/***\n|Purpose:|Makes tag links into a Taggly style open tag plus a normal style drop down menu|\n|Creator:|SimonBaird|\n|Source:|http://simonbaird.com/mptw2/#QuickOpenTag|\n|Requires:|TW 2.x|\n***/\n//{{{\n\n//⊻ ⊽ ⋁ ▼ \n\nvar dropdownchar = (document.all?"▼":"▾"); // the fat one is the only one that works in IE\n\nvar createTagButton_orig_mptw = createTagButton;\nwindow.createTagButton = function(place,tag,excludeTiddler) {\n var sp = createTiddlyElement(place,"span",null,"quickopentag");\n createTiddlyLink(sp,tag,true,"button");\n var theTag = createTiddlyButton(sp,dropdownchar,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\nconfig.macros.miniTag = {handler:function(place,macroName,params,wikifier,paramString,tiddler) {\n var tagged = store.getTaggedTiddlers(tiddler.title);\n if (tagged.length > 0) {\n var theTag = createTiddlyButton(place,dropdownchar,config.views.wikified.tag.tooltip.format([tiddler.title]),onClickTag);\n theTag.setAttribute("tag",tiddler.title);\n theTag.className = "miniTag";\n }\n}};\n\n\nconfig.macros.allTags.handler = function(place,macroName,params)\n{\n var tags = store.getTags();\n var theDateList = createTiddlyElement(place,"ul",null,null,null);\n if(tags.length == 0)\n createTiddlyElement(theDateList,"li",null,"listTitle",this.noTags);\n for (t=0; t<tags.length; t++)\n {\n var theListItem =createTiddlyElement(theDateList,"li",null,null,null);\n var theLink = createTiddlyLink(theListItem,tags[t][0],true);\n var theCount = " (" + tags[t][1] + ")";\n theLink.appendChild(document.createTextNode(theCount));\n\n var theDropDownBtn = createTiddlyButton(theListItem," "+dropdownchar,this.tooltip.format([tags[t][0]]),onClickTag);\n theDropDownBtn.setAttribute("tag",tags[t][0]);\n }\n}\n\n\nsetStylesheet(\n ".quickopentag { 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 "a.miniTag {font-size:150%;}\sn"+\n "",\n"QuickOpenTagStyles");\n\n//}}}\n\n/***\n<html>&#x22bb; &#x22bd; &#x22c1; &#x25bc; &#x25be;</html>\n***/\n
/***\nIntended for use in ViewTemplate\n!Examples\n|{{{<<runMacroIfTagged [[Groceries]] toggleTag Buy>>}}}|<<runMacroIfTagged [[Groceries]] toggleTag Buy>>|\n|{{{<<runMacroIfTagged Plugins toggleTag systemConfig>>}}}|<<runMacroIfTagged Plugins toggleTag systemConfig>>|\n***/\n//{{{\n\n// This function contributed by Eric Shulman\nfunction toggleTag(title,tag) {\n var t=store.getTiddler(title); if (!t || !t.tags) return;\n if (t.tags.find(tag)==null) t.tags.push(tag)\n else t.tags.splice(t.tags.find(tag),1)\n}\n\n// This function contributed by Eric Shulman\nfunction isTagged(title,tag) {\n var t=store.getTiddler(title); if (!t) return false;\n return (t.tags.find(tag)!=null);\n}\n\nconfig.macros.runMacroIfTagged = {};\nconfig.macros.runMacroIfTagged.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n if (isTagged(tiddler.title,params[0]))\n config.macros[params[1]].handler(place,params[1],params.slice(2),wikifier,paramString/*fixme*/,tiddler);\n}\n\n//}}}\n/***\n!Todo\n* paramString needs to have the first word removed from the front of it at fixme above\n\n\n***/\n\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 nolabel>>Click me}}}|Same but hide the label|<<toggleTag TagName TiddlerName nolabel>>Click me|\n(Note if TiddlerName does exist it will be silently created)\n***/\n//{{{\n\n\n// This function contributed by Eric Shulman\nfunction toggleTag(title,tag) {\n var t=store.getTiddler(title); if (!t || !t.tags) return;\n if (t.tags.find(tag)==null) t.tags.push(tag)\n else t.tags.splice(t.tags.find(tag),1)\n}\n\n// This function contributed by Eric Shulman\nfunction isTagged(title,tag) {\n var t=store.getTiddler(title); if (!t) return false;\n return (t.tags.find(tag)!=null);\n}\n\nconfig.macros.toggleTag = {};\nconfig.views.wikified.toggleTag = {fulllabel: "[[%0]] [[%1]]", shortlabel: "[[%0]]", nolabel: "" };\n\nconfig.macros.toggleTag.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n if(tiddler instanceof Tiddler) {\n var tag = (params[0] && params[0] != '.') ? params[0] : "checked";\n var title = (params[1] && params[1] != '.') ? params[1] : tiddler.title;\n var hidelabel = params[2]?true:false;\n\n var onclick = function(e) {\n if (!e) var e = window.event;\n if (!store.getTiddler(title))\n store.saveTiddler(title,title,"",config.options.txtUserName,new Date(),null);\n toggleTag(title,tag);\n\n store.setDirty(true); // so TW knows it has to save now\n\n story.refreshTiddler(title,false,true); // force=true\n story.refreshTiddler(tag,false,true); // \n if (tiddler.title != title)\n story.refreshTiddler(tiddler.title,false,true);\n return false;\n };\n\n var lingo = config.views.wikified.toggleTag;\n\n // this part also contributed by Eric Shulman\n var c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick=onclick;\n place.appendChild(c);\n c.checked=isTagged(title,tag);\n\n if (!hidelabel) {\n var label = (title!=tiddler.title)?lingo.fulllabel:lingo.shortlabel;\n wikify(label.format([tag,title]),place);\n }\n }\n}\n\n//}}}\n
/***\n\n\n----\nUploadPlugin, with [[store.php]] and [[.htaccess]] provide the @@upload@@ and the @@save to web@@ functions. See HowToUpload.\nThe french translation available as a separate tiddler UploadPluginMsgFR\n----\n\n\n***/\n\n/***\n|''Name:''|UploadPlugin|\n|''Type:''|Plugin|\n|''Version:''|3.0.1 (18-Jan-2006)|\n|''Source:''|[[TiddlyWiki.BidiX.info|http://tiddlywiki.BidiX.info/#UploadPlugin]]|\n|''Author:''|BidiX[at]BidiX.info|\n|''Compatibility:''|TW1.2 & TW2|\n!Usage : \n{{{\n<<upload storeUrl [toFilename [backupDir]]>>\n storeUrl : the url of the store.php to POST the TiddlyWiki\n toFilename : the filename in the storeUrl directory\n backupDir : if present backup the previous toFilename file\n to the backupDir directory\n}}}\n\nInstall the {{{<<upload ... >>}}} macro in SideBarOptions just below the {{{<<saveChanges>>}}} macro.\n\n!Description\n!!Plugin\n*If the TiddlyWiki came from @@local disk@@ :\n**{{{<<saveChanges>>}}} \n***display as ''save to disk''\n***work as usual\n**{{{<<upload ...>>}}}\n***display as ''upload''\n***after saving to disk, upload in the storeUrl directory.\n*If the TiddlyWiki came from @@website@@ :\n**{{{<<saveChanges>>}}} \n***print nothing\n***has been disabled\n**{{{<<upload ...>>}}}\n***display as '''save to web''\n***save in the storeUrl directory.\n*If GenerateAnRssFeed is set :\n**generate the content of the RSSFeed \n**upload the RssFile\n**Caution : use the SiteUrl tiddler to specify url of the TiddlyWiki in the generated RssFile\n*DisplayMessage\n*Log upload in UploadLog\nhint : if UploadLog is the first tiddler in the Timeline Tab, no tiddler has been updated since last upload.\n\n!!store.php\n*method GET\n**display an information page\n*method POST\n**if toFilename already exists and backDir parameter specified\n***rename toFilename to backupDir/toFilename.AAAAMMDD.HHSS.html\n**copy temporaryUploadedFile to toFilename\n** return status\n!User manual\nSee HowToUpload\n!Installation :\n*Install the UploadPlugin as usual\n*Upload the [[store.php]] file on your php aware webserver in your TiddlyWiki directory\n*Protect your directory : \n**for Apache web server ([[for detail see Apache documentation|http://httpd.apache.org/docs/1.3/howto/htaccess.html]]) : \n***configure the [[.htaccess]] :\n****Set the /full/path/from/root/to/your/.passwd file\n****<limit xxx> :\n*****For a private access to your TiddlyWiki directory set ''<limit GET POST>''\n*****For a public access to your TiddlyWiki files, but a private uploading facility set ''<limit POST>''\n***Upload [[.passwd]] and [[.htaccess]] files\n**for other web servers see the appropriate documentation\n*Configure an upload button, for example in the SideBarOptions\n!Suppported Browser\n*Firefox : Ok\n*Internet Explorer : Ok\n*Others : Not tested, please report status.\n\n!Revision history\n* v1.0.0 (17-Dec-2005)\n** first public working version\n*v1.0.1 (23-Dec-2005)\n**reformatting code\n*v1.0.2 (24-Dec-2005)\n**Optional parameter toFilename\n**Optional parameter backupDir\n*v1.0.3 (26-Dec-2005)\n**UploadLog tiddler\n*v1.1.0 (27-Dec-2005)\n**Upload RSS File\n*V2.0.0 (3-Jan-2006)\n**Save to web\n**Compatibilty with TiddlyWiki 1.2.39 and TiddlyWiki 2.0.0 Beta 6\n*V2.0.1 (8-Jan-2006)\n**Compatibilty with TiddlyWiki 2.0.1\n*V2.0.2 (8-Jan-2006)\n**SiteTitle and SiteSubtitle in web page Title\n*V3.0.0 (15-Jan-2006)\n**Asynchronous upload\n**Synchronous upload before unload of the page\n**All strings extracted in macro config\n**Compatibility checked with TW 2.0.2 & TW 1.2.39 for both FF 1.5 and IE 6\n*V3.0.1 (18-Jan-2006)\n**UTF8toUnicode conversion problem in Firefox\n\n!Code\n***/\n//{{{\nversion.extensions.UploadPlugin = {major: 3, minor: 0, revision: 1, date: new Date(2006,1,18)};\n\n//\n// Upload Macro\n//\n\nconfig.macros.upload = {\n label: "upload", \n saveLabel: "save to web", \n prompt: "Save and Upload this TiddlyWiki in ", \n accessKey: "U",\n formName: "UploadPlugin",\n contentType: "text/html;charset=UTF-8",\n defaultStoreScript: "store.php"\n};\n\n// only this config need to be translated\nconfig.macros.upload.messages = {\n aboutToUpload: "About to upload TiddlyWiki to %0",\n errorDownloading: "Error downloading",\n errorUploadingContent: "Error uploading content",\n fileNotFound: "file to upload not found",\n fileNotUploaded: "File %0 NOT uploaded",\n label: "upload", \n mainFileUploaded: "Main TiddlyWiki file uploaded to %0",\n prompt: "Save and Upload this TiddlyWiki in ", \n urlParamMissing: "url param missing",\n rssFileNotUploaded: "RssFile %0 NOT uploaded",\n rssFileUploaded: "Rss File uploaded to %0",\n saveLabel: "save to web", \n saveToDisk: "save to disk"\n};\n\nconfig.macros.upload.label = config.macros.upload.messages.label; \nconfig.macros.upload.saveLabel = config.macros.upload.messages.saveLabel; \nconfig.macros.upload.prompt = config.macros.upload.messages.prompt;\n\n\nconfig.macros.upload.handler = function(place,macroName,params){\n var url;\n if (params[0]) {\n url = params[0];\n this.defaultStoreScript = basename(url);\n }\n else\n url = dirname(document.location.toString())+"/"+ this.defaultStoreScript;\n var toFilename=params[1];\n var backupDir=params[2];\n var label;\n if (document.location.toString().substr(0,5) == "http:")\n label = this.saveLabel;\n else\n label = this.label;\n createTiddlyButton(place, label, this.prompt+dirname(url), \n function () {upload(url, toFilename, backupDir, true); return false;}, \n null, null, this.accessKey);\n};\n\n//\n// TiddlyWiki Core patches\n//\n\n// overwrite the saveChanges handler \n// configure no Macro instead of saveChanges Macro in case of http: access\nconfig.macros.saveChanges.label = config.macros.upload.messages.saveToDisk;\nconfig.macros.saveChanges.handler = function(place,macroName,params)\n{\n if(!readOnly) {\n if (document.location.toString().substr(0,5) != "http:") \n createTiddlyButton(place,this.label,this.prompt,function () {saveChanges(); return false;},null,null,this.accessKey);\n // else no TiddlyButton\n }\n}\n\n// Check if there is any unsaved changes before exiting\n// if unsaved changes : saveOrUpload\n//function checkUnsavedChanges()\ncheckUnsavedChanges = function ()\n{\n if(store && store.dirty) {\n if(confirm(config.messages.unsavedChangesWarning))\n saveOrUpload(false); // Because called by <body onunload=... Upload must be synchronous\n }\n}\n\n//\n// Utility functions \n//\n\nfunction dirname(filePath)\n{\n if ((lastpos = filePath.lastIndexOf("/")) != -1)\n return filePath.substring(0, lastpos);\n else\n return filePath.substring(0, filePath.lastIndexOf("\s\s"));\n}\n\nfunction basename(filePath)\n{\n if ((lastpos = filePath.lastIndexOf("#")) != -1) \n filePath = filePath.substring(0, lastpos);\n if ((lastpos = filePath.lastIndexOf("/")) != -1)\n return filePath.substring(lastpos + 1);\n else\n return filePath.substring(filePath.lastIndexOf("\s\s")+1);\n}\n\n// TiddlyWiki utilities\n\nfunction getLocalPath() {\n //extract from the Jeremy's SaveFile \n var originalPath = document.location.toString();\n // Check we were loaded from a file URL\n if(originalPath.substr(0,5) != "file:")\n {\n alert(config.messages.notFileUrlError);\n displayTiddler(null,"SaveChanges",0,null,null,false,false);\n return;\n }\n // Remove any location part of the URL\n var hashPos = originalPath.indexOf("#");\n if(hashPos != -1)\n originalPath = originalPath.substr(0,hashPos);\n // Convert to a native file format assuming\n // "file:///x:/path/path/path..." - pc local file --> "x:\spath\spath\spath..."\n // "file://///server/share/path/path/path..." - FireFox pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n // "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."\n // "file://server/share/path/path/path..." - pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n var localPath;\n if(originalPath.charAt(9) == ":") // pc local file\n localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file://///") == 0) // FireFox pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file:///") == 0) // mac/unix local file\n localPath = unescape(originalPath.substr(7));\n else if(originalPath.indexOf("file:/") == 0) // mac/unix local file\n localPath = unescape(originalPath.substr(5));\n else // pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\s\s");\n return localPath;\n}\n\n//\n// LogUpload\n//\n\nfunction getLogUploadTiddler() {\n var tiddler;\n if (version.major < 2)\n tiddler = store.tiddlers['UploadLog'];\n else\n tiddler = store.getTiddler("UploadLog");\n if (!tiddler) \n {\n tiddler = new Tiddler();\n tiddler.title = 'UploadLog';\n tiddler.text = "|!Date|!url|!toFilename|!backupDir|!user|!status|";\n if (version.major < 2)\n store.tiddlers['UploadLog'] = tiddler;\n else\n store.addTiddler(tiddler);\n }\n return tiddler;\n}\n\nfunction logUpload(url, toFilename, backupDir) \n{\n var tiddler = getLogUploadTiddler();\n var now = new Date();\n newText = "| ";\n //newText += now.toLocaleString() + " | ";\n \n newText += now.getDate()+"/"+(now.getMonth()+1)+"/"+now.getFullYear() + " ";\n newText += now.getHours()+":"+now.getMinutes()+":"+now.getSeconds()+" | ";\n newText += "[["+basename(url)+"|"+url + "]] | ";\n newText += "[["+basename(toFilename) + "|" + dirname(url)+"/"+basename(toFilename) + "]] | ";\n newText += backupDir + " | ";\n newText += config.options.txtUserName + " |";\n\n tiddler.text = tiddler.text + "\sn" + newText;\n tiddler.modifier = config.options.txtUserName;\n tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers['UploadLog'] = tiddler;\n else\n store.addTiddler(tiddler);\n //displayTiddler(document.getElementById('sidebar'),"UploadLog",1,null,null,false);\n if (version.major < 2)\n store.notifyAll();\n}\n\nfunction logUploadStatusOk() \n{\n var tiddler = getLogUploadTiddler();\n newText = " ok |";\n tiddler.text = tiddler.text + newText;\n tiddler.modifier = config.options.txtUserName;\n tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers['UploadLog'] = tiddler;\n else\n store.addTiddler(tiddler);\n //displayTiddler(document.getElementById('sidebar'),"UploadLog",1,null,null,false);\n if (version.major < 2)\n store.notifyAll();\n store.notify('UploadLog',true);\n}\n\n//\n// download file before save it\n// \n\nfunction download(uploadUrl, uploadToFilename, uploadBackupDir, asynchronous) {\n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n try {\n if (url.substr(0,5) == "http:") {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");\n }\n else {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n }\n } catch (e) { }\n\n request.open("GET",document.location.toString(), asynchronous);\n if (asynchronous) {\n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if(request.status == 200) {\n uploadChangesFrom(uploadUrl, uploadToFilename, uploadBackupDir, request.responseText, asynchronous);\n }\n else\n alert(config.macros.upload.messages.errorDownloading.format([document.location.toString()]));\n }\n }\n }\n request.send(null);\n if (! asynchronous) {\n if(request.status == 200) {\n uploadChangesFrom(uploadUrl, uploadToFilename, uploadBackupDir, request.responseText, asynchronous);\n }\n else\n alert(config.macros.upload.messages.errorDownloading.format([document.location.toString()]));\n }\n\n}\n\n// saveOrUpload\n\nfunction saveOrUpload(asynchronous) {\n if (document.location.toString().substr(0,5) == "http:") {\n // try a default synchronous upload\n url = dirname(document.location.toString())+"/"+ config.macros.upload.defaultStoreScript;\n upload(url, null, null, asynchronous);\n }\n else \n saveChanges();\n}\n\n//\n//Upload\n//\n\nfunction upload(url, toFilename, backupDir, asynchronous)\n{\n clearMessage();\n // only for forcing the message to display\n if (version.major < 2)\n store.notifyAll();\n if (url == null) {\n alert(config.macros.upload.messages.urlParamMissing);\n return;\n }\n if (backupDir == null)\n backupDir = '';\n var toPath;\n if (toFilename)\n toPath = toFilename;\n else {\n toPath = basename(document.location.toString());\n }\n logUpload(url, toPath, backupDir);\n if (document.location.toString().substr(0,5) == "file:") {\n saveChanges();\n }\n displayMessage(config.macros.upload.messages.aboutToUpload.format([dirname(url)]), dirname(url));\n uploadChanges(url, toPath, backupDir, asynchronous);\n if(config.options.chkGenerateAnRssFeed) {\n //var rssContent = convertUnicodeToUTF8(generateRss());\n var rssContent = generateRss();\n var rssPath = toPath.substr(0,toPath.lastIndexOf(".")) + ".xml";\n uploadContent(url, rssContent, rssPath, '', asynchronous, function (responseText) {\n if (responseText.substring(0,1) != 0) {\n alert(responseText);\n displayMessage(config.macros.upload.messages.rssFileNotUploaded.format([rssPath]));\n }\n else {\n displayMessage(config.macros.upload.messages.rssFileUploaded.format([dirname(url)+"/"+basename(rssPath)]), dirname(url)+"/"+basename(rssPath));\n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n }\n );\n }\n return;\n}\n\nfunction uploadChanges(url, toFilename, backupDir, asynchronous)\n{\n var original;\n if (document.location.toString().substr(0,5) == "http:") {\n original = download(url, toFilename, backupDir, asynchronous);\n return;\n }\n else {\n // standard way : Local file\n original = loadFile(getLocalPath());\n if(window.Components)\n // it's a mozilla browser\n try {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]\n .createInstance(Components.interfaces.nsIScriptableUnicodeConverter);\n converter.charset = /* The character encoding you want, using UTF-8 here */ "UTF-8";\n original = converter.ConvertToUnicode(original);\n }\n catch(e) {\n }\n }\n //DEBUG alert(original);\n uploadChangesFrom(url, toFilename, backupDir, original, asynchronous);\n}\n\nfunction uploadChangesFrom(url, toFilename, backupDir, original, asynchronous)\n{\n\n var startSaveArea = '<div id="' + 'storeArea">'; // Split up into two so that indexOf() of this source doesn't find it\n var endSaveArea = '</d' + 'iv>';\n // Locate the storeArea div's\n var posOpeningDiv = original.indexOf(startSaveArea);\n var posClosingDiv = original.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1))\n {\n alert(config.messages.invalidFileError.format([document.location.toString()]));\n return;\n }\n // I think conversion is automatically done\n //var revised = original.substr(0,posOpeningDiv + startSaveArea.length) + \n // convertUnicodeToUTF8(allTiddlersAsHtml()) + "\sn\st\st" +\n // original.substr(posClosingDiv);\n \n var revised = original.substr(0,posOpeningDiv + startSaveArea.length) + \n allTiddlersAsHtml() + "\sn\st\st" +\n original.substr(posClosingDiv);\n\n // I think conversion is automatically done\n // var newSiteTitle = convertUnicodeToUTF8((getElementText("siteTitle") + " - " + getElementText("siteSubtitle")).htmlEncode());\n var newSiteTitle;\n if(version.major < 2){ //version is set in core TW code\n newSiteTitle = (getElementText("siteTitle") + " - " + getElementText("siteSubtitle")).htmlEncode();\n } else {\n newSiteTitle = (wikifyPlain ("SiteTitle") + " - " + wikifyPlain ("SiteSubtitle")).htmlEncode();\n }\n revised = revised.replace(new RegExp("<title>[^<]*</title>", "im"),"<title>"+ newSiteTitle +"</title>");\n var response = uploadContent(url, revised, toFilename, backupDir, asynchronous, function (responseText) {\n if (responseText.substring(0,1) != 0) {\n alert(responseText);\n displayMessage(config.macros.upload.messages.fileNotUploaded.format([getLocalPath()]));\n }\n else {\n displayMessage(config.macros.upload.messages.mainFileUploaded.format([dirname(url)+"/"+basename(toFilename)]), dirname(url)+"/"+basename(toFilename));\n logUploadStatusOk();\n store.setDirty(false);\n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n }\n );\n}\n\nfunction uploadContent(url, content, toPath, backupDir, asynchronous, callbackFn) {\n var boundary = "---------------------------"+"AaB03x";\n //Create XMLHttpRequest Object\n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n try {\n // Needed for Mozilla if local file tries to access an http URL\n if (document.location.toString().substr(0,5) == "http:") {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");\n }\n else {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n }\n } catch (e) { }\n // compose headers data\n var sheader = "\sr\sn";\n sheader += "--" + boundary + "\sr\snContent-disposition: form-data;name=\s"" + config.macros.upload.formName +"\s"\sr\sn\sr\sn";\n sheader += "backupDir="+backupDir+";user=" + config.options.txtUserName + "\sr\sn"; \n sheader += "\sr\sn" + "--" + boundary + "\sr\sn";\n sheader += "Content-disposition: form-data;name=\s"userfile\s";filename=\s""+toPath+"\s"\sr\sn";\n sheader += "Content-Type: " + config.macros.upload.contentType + "\sr\sn";\n sheader += "Content-Length: " + content.length + "\sr\sn\sr\sn";\n // compose trailer data\n var strailer = new String();\n strailer = "\sr\sn--" + boundary + "--\sr\sn";\n var data;\n data = sheader + content + strailer;\n request.open("POST",url,asynchronous);\n if (asynchronous) {\n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if(request.status == 200)\n callbackFn(request.responseText);\n else\n alert(config.macros.upload.messages.errorUploadingContent);\n }\n };\n }\n request.setRequestHeader("Content-Length",data.length);\n request.setRequestHeader("Content-Type","multipart/form-data; boundary="+boundary);\n request.send(data); \n if (! asynchronous) {\n if(request.status == 200)\n callbackFn(request.responseText);\n else\n alert(config.macros.upload.messages.errorUploadingContent);\n }\n\n}\n\n//}}}\n
In the to_do email
\n** Regina does an audit of ent_parent an noticed a large number of changes.\n* 5/11/2011 8:32:54 AM Told regina that these come from MDM and corespond to named_account_ind. I let Regina know that MDM is currently updating accounts for the FY12 changes and this is why the high number of differences from last month.
Ran the "keych01_match_site.sql" for bulk_id 29865 to get a report of account/site matches for Cheryl
Details in IM from 2011-05-16 at 4:05pm
Lead: (GEO/Region/Area/EA Territory/Territory)\n\nAccount Matched = Account Type Enterprise/Federal = Account EAID = Based on Account EAID = EA Territory = Area\nNon-Account Matched = Top Commercial = Contact Address = EA Territory = Territory = Area \nNon-Account Matched = Commercial = Contact Address = Territory = Area\nAccount Matched = Enterprise/Federal = Contact Address = Territory\nGEO/Region = Contact Address ‘Country”\n\nHope this helps \n\n
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<saveChanges>><<upload http://tiddlywikitips.com/store.php TiddlyWikiTasks.html backup>><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>>
A checkbox-based Task List!
TiddlyWikiTasks
http://www.tiddlywiki.com/
Set up product ownership table by CSU NCV and or Product \nLook at GUAMI01 FY12 product table
First off, you need to understand the differences between checkbox "types". Eric wrote his Checkbox Plugin to accommodate (among others) two types of checkbox handling: Simple and ~Tag-based checkboxes.\n!!Simple Checkboxes\nSimple checkboxes are "in-Tiddler" checkboxes that reside in a Tiddler that simply change state when you check them. The checkbox data within the Tiddler is updated on each checkbox click to retain its state. This is useful for things like lists within a Tiddler. For example, say you create a task Tiddler that lists several things that need to be done within a specific task. You would just create simple checkboxes within the Tiddler for each task. For example, the Tiddler might look like this:\n\n----\n''Title:'' Inventory Training Room Equipment\n''Body:''\n{{{\n[_] Computers\n[_] Printers\n[_] Network Switch\n[_] Phones\n[_] Scanners\n}}}\n''Tag:'' Task\n----\n\nWhen you view the Tiddler, you see a nice list of things that need to be done for that Task that, when you check them, retain the checked state. For example:\n\n----\nInventory Training Room Equipment\n[_] Computers\n[_] Printers\n[_] Network Switch\n[_] Phones\n[_] Scanners\n----\n!!~Tag-Based Checkboxes\nThese types of checkboxes were developed to "toggle" (add or remove) a Tag in a Tiddler. Checking a Tag-based checkbox will add or remove a defined Tag depending on the checkbox's state. For example, you could define the Tag-based checkbox to toggle the "Completed" Tag. If the checkbox is unchecked, the associated Tiddler does not have a "Completed" Tag (it is removed.) If you check the checkbox, a "Completed" Tag is added to the associated Tiddler. \n\nBy using other Macros or Plugins, you can leverage this Tag state to create new lists based on the presence or absense of specific Tags. Using the [[Plugin ForEachTiddler]], you can create lists of Tiddlers with specific Tags, prefixing the Tiddler Titles with checkboxes. For example, say you create several Tiddlers, each Tagged as "Tasks". You then create a "list" Tiddler using [[Plugin ForEachTiddler]] code to display only Tiddlers Tagged as "Tasks", but not Tagged as "Completed". \n\nThis is exactly what TiddlyWikiTasks does. It uses the [[Plugin ForEachTiddler]] to create lists of Pending (ie: Tagged as "Tasks", but not "Completed") and Completed (ie: Tagged as both "Tasks" and "Completed) tasks with checkboxes preceding the task Titles. Checking the checkbox moves the task from the Pending list to the Completed list. Unchecking the checkbox moves the task from the Completed list to the Pending list.\n\n//Note that I chose to leave the "Tasks" Tag on all tasks instead of replacong the "Tasks" Tag with "Completed" and vice versa. This lets me create a list Tiddler containing ALL tasks, both Pending and Completed, if I so choose.//
/***\nCosmetic fixes that probably should be included in a future TW...\n***/\n/*{{{*/\n.viewer .listTitle { list-style-type:none; margin-left:-2em; }\n.editorFooter .button { padding-top: 0px; padding-bottom:0px; }\n/*}}}*/\n/***\nImportant stuff. See TagglyTaggingStyles and HorizontalMainMenuStyles\n***/\n/*{{{*/\n[[Styles TagglyTagging]]\n[[Styles HorizontalMainMenu]]\n/*}}}*/\n/***\nJust colours, fonts, tweaks etc. See MessageTopRight and SideBarWhiteAndGrey\n***/\n/*{{{*/\nbody {background:#eee; }\n.headerForeground a { color: #6fc;}\n.headerShadow { left: 2px; top: 2px; }\n.siteSubtitle { padding-left:1.5em; }\nh1,h2,h3,h4,h5 { color: #000; background: transparent; }\n.title {color:black; font-size:2em;}\n.shadow .title {color:#999; }\n.viewer pre { background-color:#f8f8ff; border-color:#ddf}\n#sidebarOptions { border:1px #ccc solid; }\n.tiddler {\n border-bottom:1px solid #ccc; border-right:1px solid #ccc; padding-bottom:1em; margin-bottom:1em; \n background:#fff; padding-right:1.5em; }\n#messageArea { background-color:#bde; border-color:#8ab; border-width:4px; border-style:dotted; font-size:90%; }\n#messageArea .button { text-decoration:none; font-weight:bold; background:transparent; border:0px; }\n#messageArea .button:hover {background: #acd; }\n[[MessageTopRight]]\n[[SideBarWhiteAndGrey]]\n/*}}}*/\n
/***\nTo use, add {{{[[Styles HorizontalMainMenu]]}}} to your StyleSheet tiddler, or you can just paste the CSS in directly. See also HorizontalMainMenu and PageTemplate.\n***/\n/*{{{*/\n\n#topMenu br {display:none; }\n#topMenu { background: #39a; }\n#topMenu { padding:2px; }\n#topMenu .button, #topMenu .tiddlyLink { padding-left:1em; padding-right:1em; color:white; font-size:115%;}\n#displayArea { margin: 1em 15.7em 0em 1em; }\n\n/* just in case want some QuickOpenTags in your topMenu */\n#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }\n#topMenu .quickopentag .tiddlyLink { padding-right:1px; }\n#topMenu .quickopentag .button { padding-left:1px; border:0px; }\n\n\n/*}}}*/
/***\nTo use, add {{{[[Styles TagglyTagging]]}}} to your StyleSheet tiddler, or you can just paste the CSS in directly. See also ViewTemplate, EditTemplate and TagglyTagging.\n***/\n/*{{{*/\n.tagglyTagged li.listTitle { display:none;}\n.tagglyTagged li { display: inline; font-size:90%; }\n.tagglyTagged ul { margin:0px; padding:0px; }\n.tagglyTagging { padding-top:0.5em; }\n.tagglyTagging li.listTitle { display:none;}\n.tagglyTagging ul { margin-top:0px; padding-top:0.5em; padding-left:2em; margin-bottom:0px; padding-bottom:0px; }\n\n/* .tagglyTagging .tghide { display:inline; } */\n\n.tagglyTagging .button { display:none; margin-left:3px; margin-right:3px; }\n.tagglyTagging .button, .hidebutton { color:#aaa; font-size:90%; border:0px; padding-left:0.3em;padding-right:0.3em;}\n.tagglyTagging .button:hover, .hidebutton:hover { background:#eee; color:#888; }\n.selected .tagglyTagging .button { display:inline; }\n\n.tagglyLabel { color:#aaa; font-size:90%; }\n\n\n.editLabel { font-size:90%; padding-top:0.5em; }\n/*}}}*/\n
<<tabs txtFavourite\nPending Pending "Tasks - Pending"\nCompleted Completed "Tasks - Completed"\n>>
~~open: [[all|Tasks - All]] | [[pending|Tasks - Pending]] | [[completed|Tasks - Completed]]~~\n\n<<forEachTiddler\n where 'tiddler.tags.contains("Tasks") &&\n tiddler.tags.contains("Completed")'\n sortBy 'tiddler.modified' descending\n write \n"'|[X('+tiddler.title+':Completed)]|('+tiddler.created.formatString('YYYY/0MM/0DD 0hh:0mm')+')|[['+tiddler.title+'|'+tiddler.title+']]|('+tiddler.modified.formatString('YYYY/0MM/0DD 0hh:0mm')+')|\sn'"\n>> \n
<<tabs txtFavourite\nUrgent Urgent "Tasks - Urgent"\nPending Pending "Tasks - Pending"\nCompleted Completed "Tasks - Completed"\n>>
~~open: [[all|Tasks - All]] | [[pending|Tasks - Pending]] | [[completed|Tasks - Completed]]~~\n\n<<forEachTiddler\n where 'tiddler.tags.contains("Tasks") &&\n ! tiddler.tags.contains("Completed")'\n sortBy 'tiddler.created'\n write "'|[X('+tiddler.title+':Completed)]| ('+tiddler.created.formatString('YYYY/0MM/0DD 0hh:0mm')+')|[['+tiddler.title+'|'+tiddler.title+']]|\sn'">>\n
~~open: [[all|Tasks - All]] | [[pending|Tasks - Pending]] | [[completed|Tasks - Completed]]~~\n\n<<forEachTiddler \n where \n 'tiddler.tags.contains("a")'\n sortBy \n 'tiddler.title'\n write\n '"|"+tiddler.title+\n "|\sn" '\n begin \n '"|!Tiddler|!~SectionA|!~SectionB|\sn"'\n >>\n
~~open: [[all|Tasks - All]] | [[pending|Tasks - Pending]] | [[completed|Tasks - Completed]] | [[urgent|Tasks - Urgent]]~~\n\n<<forEachTiddler\n where 'tiddler.tags.contains("Tasks") &&\n tiddler.tags.contains("Urgent") &&\n ! tiddler.tags.contains("Completed")'\n sortBy 'tiddler.title'\n write "'[X('+tiddler.title+':Completed)] [['+tiddler.title+'|'+tiddler.title+']]\sn'">>
TiddlyWikiTasks is a very simple method of managing Tasks within a TiddlyWiki. My goal here is to provide a very simple solution to a need that I had, and share how I did it. There are certainly other TiddlyWiki Implementations that pull together much more functionality, and offer amazing capabilities. By all means, check out the other implementations! \n\nWith the current rapid development and improvement of excellent Plugins and core features, look to those other implementations for some excellent features and improvements. As for TiddlyWikiTasks, as I put TiddlyWikiTasks through its paces in my day-to-day use, I'll no doubt add features and update some things. Until then, enjoy the implementation, study how its done, and come up with your own improvements!\n
A TiddlyWiki is like a blog because it's divided up into neat little chunks, but it encourages you to read it by hyperlinking rather than sequentially: if you like, a non-linear blog analogue that binds the individual microcontent items into a cohesive whole. TiddlyWiki represents a novel medium for writing, and will promote its own distinctive writing style. TiddlyWiki can be found at http://TiddlyWiki.com!
TiddlyWikiTasks demonstrates an easy way to manage a "Task List" using TiddlyWiki by leveraging two excellent TiddlyWiki Plugins: [[Plugin Checkbox]] and [[Plugin ForEachTiddler]]. I also added a few other [[Plugins]] to improve the user interface. Tasks are edited as simple Tiddlers with a Tag of "Tasks". They are managed by checking or unchecking the checkboxes in front of each listed Task in the [[Tasks - Pending]] and [[Tasks - Completed]] list Tiddlers. I have created a simple tabbed "view" of both lists called [[Tasks - All]] to make viewing and managing tasks simple. Below is the [[Tasks - All]] Tiddler, and below that is an explanation on how TiddlyWikiTasks works. \n*[[What I Wanted To Do]]\n*[[How I Did It]]\n*[[What's Needed?]]\n*[[Installation]]\n*[[Some Insights Into Checkboxes]]\n*[[Manually Setting Up TiddlyWikiTasks]]\n*[[The Future]]\n
|!Date|!url|!toFilename|!backupDir|!user|!status|\n| 26/1/2006 11:27:51 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | backup | YourName |\n| 26/1/2006 11:30:7 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | backup | YourName |\n| 26/1/2006 11:31:17 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | backup | YourName |\n| 26/1/2006 12:34:19 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | backup | YourName | ok |\n| 26/1/2006 12:36:26 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | backup | YourName |\n| 26/1/2006 12:55:31 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | backup | YourName |\n| 26/1/2006 13:3:16 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | backup | YourName |\n| 26/1/2006 13:6:10 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | backup | YourName |\n| 27/1/2006 8:39:36 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | backup | YourName |\n| 17/5/2011 10:39:23 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | backup | Jim Hitzel |\n| 18/5/2011 11:32:2 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | backup | YourName |\n| 18/5/2011 11:32:2 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | backup | YourName |\n| 19/5/2011 9:23:38 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 25/5/2011 8:20:21 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 27/5/2011 16:6:54 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 30/5/2011 11:30:48 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 31/5/2011 13:45:40 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 1/6/2011 9:24:22 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | backup | YourName |\n| 6/6/2011 1:39:33 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 6/6/2011 9:4:59 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 7/6/2011 13:45:15 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 9/6/2011 16:6:3 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 9/6/2011 11:48:37 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 10/6/2011 9:28:56 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 12/6/2011 1:2:51 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 15/6/2011 11:48:11 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 17/6/2011 10:27:35 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 19/6/2011 13:0:44 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | backup | YourName |\n| 22/6/2011 1:21:35 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 24/6/2011 0:0:22 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 27/6/2011 13:16:15 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 30/6/2011 0:56:32 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 30/6/2011 12:49:1 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | backup | YourName |\n| 2/7/2011 17:19:50 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 4/7/2011 22:31:28 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | backup | YourName |\n| 4/7/2011 22:43:30 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 5/7/2011 23:6:3 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 6/7/2011 16:12:43 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 7/7/2011 9:23:48 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 16/7/2011 19:9:20 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 18/7/2011 12:7:6 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 18/7/2011 14:6:1 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 20/7/2011 7:2:53 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 20/7/2011 10:35:18 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 21/7/2011 17:35:4 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 21/7/2011 23:16:10 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 22/7/2011 13:14:52 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 28/7/2011 10:31:14 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 28/7/2011 19:46:46 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 4/8/2011 20:9:58 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 7/8/2011 17:25:28 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | backup | YourName |\n| 9/8/2011 18:5:47 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | backup | YourName | ok |\n| 9/8/2011 18:6:31 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 14/8/2011 1:0:34 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 14/8/2011 10:28:21 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 19/8/2011 11:2:13 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 23/8/2011 9:23:15 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 24/8/2011 9:29:2 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |\n| 25/8/2011 9:57:57 | [[store.php|http://tiddlywikitips.com/store.php]] | [[TiddlyWikiTasks.html|http://tiddlywikitips.com/TiddlyWikiTasks.html]] | | YourName |
<div class="toolbar">\n<!-- experimental stuff. puts checkboxes in toolbar -->\n<span style="padding-right:0.75em;" class='fakeButton' macro="runMacroIfTagged Plugins toggleTag systemConfig"></span>\n<span style="padding-right:0.75em;" class='fakeButton' macro="runMacroIfTagged Tasks toggleTag Urgent"></span>\n<span style="padding-right:0.75em;" class='fakeButton' macro="runMacroIfTagged Tasks toggleTag Completed"></span>\n<span macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump newHere'></span>\n</div>\n<div class='title' macro='view title'></div>\n<div class='subtitle'></div>\n<div class='tagging' macro='tagging'></div>\n<div class='tagged' macro='tags'></div>\n<div class='viewer' macro='view text wikified'></div>\n<div class='tagClear'></div>
TiddlyWikiTasks demonstrates an easy way to manage a "Task List" using TiddlyWiki by leveraging two excellent TiddlyWiki Plugins: [[Plugin Checkbox]] and [[Plugin ForEachTiddler]]. I also added a few other [[Plugins]] to improve the user interface. Tasks are edited as simple Tiddlers with a Tag of "Tasks". They are managed by checking or unchecking the checkboxes in front of each listed Task in the [[Tasks - Pending]] and [[Tasks - Completed]] list Tiddlers. I have created a simple tabbed "view" of both lists called [[Tasks - All]] to make viewing and managing tasks simple. Below is the [[Tasks - All]] Tiddler, and below that is an explanation on how TiddlyWikiTasks works. As an advanced exercise, I included another "View" Tiddler called [[Tasks - Multi-Tabs]] which demonstrates how to manage Tasks with additional Tags using additional Tabs. \n\n!New! Tag-specific Tiddler Checkboxes!\nI've incorporated two new Plugins ([[ToggleTagMacro|Plugin ToggleTagMacro]] and [[RunMacroIfTagged|Plugin RunMacroIfTagged]]) to provide "status" checkboxes on all Task Tiddlers. See [[how I did it|Adding Toolbar Checkboxes]]!\n\n!Available Versions:\nClick on the links to view the files, or to download to your local PC, just right-click on the links and select "Save Link as..." to save the file.\n\n''THIS VERSION'' The easiest way to get started with TiddlyWikiTasks is to simply download this file. It is located at:\nhttp://TiddlyWikiTips.com/TiddlyWikiTasks.html\n\n''COMPLETELY ~STRIPPED-DOWN VERSION'' This version is a stock TiddlyWiki file containing only the required components to get the TiddlyWikiTasks concept working. It is located at:\nhttp://TiddlyWikiTips.com/TiddlyWikiTasks_empty.html\n\n''~MULTI-TAB EXAMPLE VERSION'' This version, like the stripped down version, contains only the ~Multi-Tab example. It is located at:\nhttp://TiddlyWikiTips.com/TiddlyWikiTasks_work_tab.html\n\nEnjoy!\n\n-Jim, http://TiddlyWikiTips.com
I wanted to use TiddlyWiki to manage a Task List. My goal was to have "Pending Tasks" list and a "Completed Tasks" list. Each list would be prefixed with checkboxes such that if I checked a task on the Pending Tasks list, it gets flagged as Completed, gets removed from the Pending Tasks list, and gets added to the Completed Tasks list. With the development of two specific Plugins, I can now do this with ease. \n
TiddlyWikiTasks requires, of course, TiddlyWiki. It also requires two [[Plugins]]:\n*Eric Shulman's [[Plugin Checkbox]] (http://tinyurl.com/cr7y4)\n*Udo Borkowski's [[Plugin ForEachTiddler]] (http://tinyurl.com/9vcm9)\nThese two plugins are very powerful and provide the core functionality required to make TiddlyWikiTasks work. \n\nI also included several other [[Plugins]] to improve the user interface and navigation. \n\nAnd a special thanks goes to Simon Baird for his site style. I really like the clean and professional look, so I incorporated several of his elements into TiddlyWikiTasks. His site is at: http://simonbaird.com/mptw/\n
The tiddler 'New Tiddler' doesn't yet exist. Double-click to create it\n[X] ciao
<<list shadowed>>
* Try to match Cheryl Mainframe Madness to Sites\n* Link up site (most hits)\n* Find excludes and add to output\n* Try matching via just email\n** Found these are CI site matched to multiple source_sites\n** 5/5/2011 4:09:45 PM - changeing logic to match enterprise then comercial\n* 5/6/2011 5:28:02 PM Check on bulkid 29725 for Cheryl\n* 5/11/2011 3:40:38 PM - Provided Cheryl with a result file (xls) of the matches
C'est un petit test. En suis-je content?
Some come from mrttransaction.event_attendance.follow_up - a forced assignment of account \n\nMona\n.....account id assigned in mrtmarketing.marketing_list.\nThese two contacts were inferred from the original inferred logic. They have a site_id that was assigned in step 10.\nRecords from the original inferred logic are currently not assigned a step number in mart_ent_match.\n
kydfgldjfgklnmdfd
Do you know if is possible to create a report of bulk upload portal usage frequency by user for the last 6 months? For example:\n \nUser Number of Uploads\nSean Goldstein 3\n\n* wrote sql "sean_upload_report.sql"\n